From d334661178697770ab3a7a89e7d11818f0137bfd Mon Sep 17 00:00:00 2001 From: Nick Beckley Date: Tue, 30 Jun 2026 19:32:13 +0100 Subject: [PATCH] Phase 17Z - Legacy Retirement and Cleanup --- PlotLine/Controllers/ScenesController.cs | 26 - PlotLine/Services/CoreServices.cs | 166 -- PlotLine/ViewModels/CoreViewModels.cs | 56 - PlotLine/Views/Admin/ThemeAudit.cshtml | 74 - PlotLine/Views/Scenes/_SceneInspector.cshtml | 1852 ------------------ PlotLine/Views/Shared/_SceneOccupancy.cshtml | 98 - PlotLine/wwwroot/css/plotline-theme.css | 94 +- PlotLine/wwwroot/css/plotline-theme.min.css | 2 +- PlotLine/wwwroot/css/site.css | 206 +- PlotLine/wwwroot/css/site.min.css | 2 +- PlotLine/wwwroot/js/site.js | 309 --- PlotLine/wwwroot/js/site.min.js | 2 +- 12 files changed, 6 insertions(+), 2881 deletions(-) delete mode 100644 PlotLine/Views/Scenes/_SceneInspector.cshtml delete mode 100644 PlotLine/Views/Shared/_SceneOccupancy.cshtml diff --git a/PlotLine/Controllers/ScenesController.cs b/PlotLine/Controllers/ScenesController.cs index f3bb399..6054009 100644 --- a/PlotLine/Controllers/ScenesController.cs +++ b/PlotLine/Controllers/ScenesController.cs @@ -1668,32 +1668,6 @@ public sealed class ScenesController( return RedirectToAction(nameof(Edit), new { id = sceneId }); } - [HttpGet] - public async Task OccupancyEditor(int sceneId, int? floorPlanId) - { - var model = await scenes.GetOccupancyEditorAsync(sceneId, floorPlanId); - return model is null ? NotFound() : PartialView("_SceneOccupancy", model); - } - - [HttpPost] - [ValidateAntiForgeryToken] - public async Task SaveOccupancy(SceneOccupancySaveViewModel model) - { - try - { - await scenes.SaveOccupancyAsync(model); - var refreshed = await scenes.GetOccupancyEditorAsync(model.SceneID, model.FloorPlanID); - return refreshed is null - ? NotFound() - : PartialView("_SceneOccupancy", refreshed); - } - catch (InvalidOperationException ex) - { - Response.StatusCode = StatusCodes.Status400BadRequest; - return Json(new { ok = false, message = ex.Message }); - } - } - private string? GetLocalReturnUrl(string? returnUrl = null) { if (string.IsNullOrWhiteSpace(returnUrl) diff --git a/PlotLine/Services/CoreServices.cs b/PlotLine/Services/CoreServices.cs index e7ff2c0..9a4f625 100644 --- a/PlotLine/Services/CoreServices.cs +++ b/PlotLine/Services/CoreServices.cs @@ -122,8 +122,6 @@ public interface ISceneService Task GetEditAsync(int sceneId); Task SaveAsync(SceneEditViewModel model); Task UpdatePovCharacterAsync(int sceneId, int? povCharacterId); - Task GetOccupancyEditorAsync(int sceneId, int? floorPlanId = null); - Task SaveOccupancyAsync(SceneOccupancySaveViewModel model); Task ArchiveAsync(int sceneId); Task MoveAsync(int sceneId, string direction); Task MoveRelativeAsync(int sceneId, int anchorSceneId, string position); @@ -1464,8 +1462,6 @@ public sealed class SceneService( IAssetRepository assets, ICharacterRepository characters, ILocationRepository locations, - IFloorPlanRepository floorPlans, - ISceneFloorPlanOccupancyRepository sceneOccupancy, IWarningRepository warnings, ISceneDependencyRepository sceneDependencies, IWriterWorkspaceRepository writerWorkspace, @@ -1842,172 +1838,10 @@ public sealed class SceneService( ReturnProjectID = model.ReturnProjectID, ReturnBookID = model.ReturnBookID }; - model.Occupancy = model.SceneID == 0 - ? new SceneOccupancyEditorViewModel() - : await BuildOccupancyEditorAsync(model, projectAssets); model.LocationConsistencyMessages = BuildLocationConsistencyMessages(model); return model; } - public async Task GetOccupancyEditorAsync(int sceneId, int? floorPlanId = null) - { - var sceneModel = await GetEditAsync(sceneId); - if (sceneModel is null) - { - return null; - } - - if (floorPlanId.HasValue) - { - sceneModel.FloorPlanID = floorPlanId; - } - - var projectAssets = sceneModel.Project is null ? [] : await assets.ListAssetsAsync(sceneModel.Project.ProjectID); - return await BuildOccupancyEditorAsync(sceneModel, projectAssets); - } - - public async Task SaveOccupancyAsync(SceneOccupancySaveViewModel model) - { - var scene = await scenes.GetAsync(model.SceneID) ?? throw new InvalidOperationException("Scene not found."); - var context = await GetContextAsync(scene.ChapterID) ?? throw new InvalidOperationException("Scene context not found."); - - if (model.FloorPlanID.HasValue) - { - var floorPlan = await floorPlans.GetAsync(model.FloorPlanID.Value); - if (floorPlan is null || floorPlan.ProjectID != context.Project.ProjectID) - { - throw new InvalidOperationException("Floor plan not found."); - } - - if (model.InitialFloorPlanFloorID.HasValue) - { - var floors = await floorPlans.ListFloorsByPlanAsync(model.FloorPlanID.Value); - if (!floors.Any(x => x.FloorPlanFloorID == model.InitialFloorPlanFloorID.Value)) - { - throw new InvalidOperationException("Initial floor does not belong to the selected floor plan."); - } - } - } - else - { - model.InitialFloorPlanFloorID = null; - } - - var allowedLocations = model.FloorPlanID.HasValue - ? (await floorPlans.ListBlocksByPlanAsync(model.FloorPlanID.Value)).Select(x => x.LocationID).ToHashSet() - : []; - - var sceneCharacterIds = (await characters.ListSceneCharactersAsync(model.SceneID)).Select(x => x.CharacterID).ToHashSet(); - var sceneAssetIds = (await assets.ListEventsBySceneAsync(model.SceneID)).Select(x => x.StoryAssetID).ToHashSet(); - var rows = new List(); - - foreach (var character in model.Characters.Where(x => sceneCharacterIds.Contains(x.CharacterID))) - { - if (character.LocationID.HasValue && !allowedLocations.Contains(character.LocationID.Value)) - { - throw new InvalidOperationException("Character location must be on the selected floor plan."); - } - - rows.Add(new SceneFloorPlanOccupancy - { - CharacterID = character.CharacterID, - LocationID = character.LocationID ?? 0 - }); - } - - foreach (var asset in model.Assets.Where(x => sceneAssetIds.Contains(x.StoryAssetID))) - { - if (asset.LocationID.HasValue && !allowedLocations.Contains(asset.LocationID.Value)) - { - throw new InvalidOperationException("Asset location must be on the selected floor plan."); - } - - rows.Add(new SceneFloorPlanOccupancy - { - StoryAssetID = asset.StoryAssetID, - LocationID = asset.LocationID ?? 0 - }); - } - - await sceneOccupancy.SaveAsync(model.SceneID, model.FloorPlanID, model.InitialFloorPlanFloorID, rows); - await activity.RecordAsync(context.Project.ProjectID, "Updated", "Scene Occupancy", model.SceneID, scene.SceneTitle); - } - - private async Task BuildOccupancyEditorAsync(SceneEditViewModel model, IReadOnlyList projectAssets) - { - var floorPlanList = model.Project is null ? [] : await floorPlans.ListByProjectAsync(model.Project.ProjectID); - var selectedFloorPlanId = model.FloorPlanID ?? floorPlanList.FirstOrDefault()?.FloorPlanID; - var existingRows = model.SceneID == 0 ? [] : await sceneOccupancy.ListBySceneAsync(model.SceneID); - var floors = new List(); - var locationsOnPlans = new List(); - - foreach (var plan in floorPlanList) - { - var planFloors = await floorPlans.ListFloorsByPlanAsync(plan.FloorPlanID); - var blocks = await floorPlans.ListBlocksByPlanAsync(plan.FloorPlanID); - var floorsById = planFloors.ToDictionary(x => x.FloorPlanFloorID); - floors.AddRange(planFloors.Select(floor => new SceneOccupancyFloorOption - { - FloorPlanID = floor.FloorPlanID, - FloorPlanFloorID = floor.FloorPlanFloorID, - Name = floor.Name, - SortOrder = floor.SortOrder - })); - - locationsOnPlans.AddRange(blocks - .GroupBy(x => new { x.LocationID, x.FloorPlanFloorID }) - .Select(group => - { - floorsById.TryGetValue(group.Key.FloorPlanFloorID, out var floor); - var first = group.First(); - return new SceneOccupancyLocationOption - { - FloorPlanID = plan.FloorPlanID, - FloorPlanFloorID = group.Key.FloorPlanFloorID, - FloorName = floor?.Name ?? "Floor", - FloorSortOrder = floor?.SortOrder ?? 0, - LocationID = group.Key.LocationID, - LocationName = first.LocationName, - LocationPath = first.LocationPath - }; - })); - } - - var existingByCharacter = existingRows.Where(x => x.CharacterID.HasValue).ToDictionary(x => x.CharacterID!.Value, x => x.LocationID); - var existingByAsset = existingRows.Where(x => x.StoryAssetID.HasValue).ToDictionary(x => x.StoryAssetID!.Value, x => x.LocationID); - var assetNames = projectAssets.ToDictionary(x => x.StoryAssetID, x => x.AssetName); - - return new SceneOccupancyEditorViewModel - { - SceneID = model.SceneID, - FloorPlanID = selectedFloorPlanId, - InitialFloorPlanFloorID = model.InitialFloorPlanFloorID, - FloorPlanOptions = floorPlanList.OrderBy(x => x.Name).Select(x => new SelectListItem(x.Name, x.FloorPlanID.ToString())).ToList(), - Floors = floors.OrderBy(x => x.SortOrder).ThenBy(x => x.Name).ToList(), - Locations = locationsOnPlans.OrderBy(x => x.FloorSortOrder).ThenBy(x => x.FloorName).ThenBy(x => x.LocationPath).ToList(), - Characters = model.SceneCharacters - .GroupBy(x => x.CharacterID) - .Select(group => new SceneCharacterOccupancyRowViewModel - { - CharacterID = group.Key, - CharacterName = group.First().CharacterName, - LocationID = existingByCharacter.GetValueOrDefault(group.Key) - }) - .OrderBy(x => x.CharacterName) - .ToList(), - Assets = model.AssetEvents - .GroupBy(x => x.StoryAssetID) - .Select(group => new SceneAssetOccupancyRowViewModel - { - StoryAssetID = group.Key, - AssetName = assetNames.GetValueOrDefault(group.Key, group.First().AssetName), - LocationID = existingByAsset.GetValueOrDefault(group.Key) - }) - .OrderBy(x => x.AssetName) - .ToList() - }; - } - private async Task> BuildAgeContinuityWarningsAsync(SceneEditViewModel model) { if (model.SceneID == 0 || model.Project is null || model.Book is null) diff --git a/PlotLine/ViewModels/CoreViewModels.cs b/PlotLine/ViewModels/CoreViewModels.cs index 62e75b4..fdf2bf1 100644 --- a/PlotLine/ViewModels/CoreViewModels.cs +++ b/PlotLine/ViewModels/CoreViewModels.cs @@ -398,8 +398,6 @@ public sealed class SceneEditViewModel public IReadOnlyList SceneAttachmentTypeOptions { get; set; } = []; public StorageUsage? StorageUsage { get; set; } public StoryStateViewModel StoryState { get; set; } = new(); - public SceneOccupancyEditorViewModel Occupancy { get; set; } = new(); - public int? ReturnProjectID { get; set; } public int? ReturnBookID { get; set; } public bool ReturnToTimeline { get; set; } @@ -559,60 +557,6 @@ public sealed class SceneCharacterParticipationInputViewModel public string? EmotionalState { get; set; } } -public sealed class SceneOccupancyEditorViewModel -{ - public int SceneID { get; set; } - public int? FloorPlanID { get; set; } - public int? InitialFloorPlanFloorID { get; set; } - public IReadOnlyList FloorPlanOptions { get; set; } = []; - public IReadOnlyList Floors { get; set; } = []; - public IReadOnlyList Locations { get; set; } = []; - public IReadOnlyList Characters { get; set; } = []; - public IReadOnlyList Assets { get; set; } = []; -} - -public sealed class SceneOccupancyFloorOption -{ - public int FloorPlanFloorID { get; set; } - public int FloorPlanID { get; set; } - public string Name { get; set; } = string.Empty; - public int SortOrder { get; set; } -} - -public sealed class SceneOccupancyLocationOption -{ - public int LocationID { get; set; } - public int FloorPlanID { get; set; } - public int FloorPlanFloorID { get; set; } - public string FloorName { get; set; } = string.Empty; - public int FloorSortOrder { get; set; } - public string LocationName { get; set; } = string.Empty; - public string LocationPath { get; set; } = string.Empty; -} - -public sealed class SceneCharacterOccupancyRowViewModel -{ - public int CharacterID { get; set; } - public string CharacterName { get; set; } = string.Empty; - public int? LocationID { get; set; } -} - -public sealed class SceneAssetOccupancyRowViewModel -{ - public int StoryAssetID { get; set; } - public string AssetName { get; set; } = string.Empty; - public int? LocationID { get; set; } -} - -public sealed class SceneOccupancySaveViewModel -{ - public int SceneID { get; set; } - public int? FloorPlanID { get; set; } - public int? InitialFloorPlanFloorID { get; set; } - public List Characters { get; set; } = []; - public List Assets { get; set; } = []; -} - public sealed class StoryStateViewModel { public List Characters { get; set; } = []; diff --git a/PlotLine/Views/Admin/ThemeAudit.cshtml b/PlotLine/Views/Admin/ThemeAudit.cshtml index bc85c7a..a3ea0bb 100644 --- a/PlotLine/Views/Admin/ThemeAudit.cshtml +++ b/PlotLine/Views/Admin/ThemeAudit.cshtml @@ -54,16 +54,6 @@ z-index: auto; } - .theme-audit-inspector-sample { - display: grid; - gap: .75rem; - } - - .theme-audit-inspector-sample .inspector-section, - .theme-audit-inspector-sample .warning-mini-card, - .theme-audit-inspector-sample .thread-event-item { - margin: 0; - }
@@ -329,38 +319,6 @@
-
-

PlotDirector-Specific Components

-
-
- - -
-
- -
-

Compact scene metadata

-
- Draft - 1 warning - Reveal -
-
-
-
- Warning -

Sample compact continuity warning card.

-
-
- -
Thread event

A sample plot thread note.

-
-
-
@@ -613,38 +571,6 @@
-
-

PlotDirector-Specific Components

-
-
- - -
-
- -
-

Compact scene metadata

-
- Draft - 1 warning - Reveal -
-
-
-
- Warning -

Sample compact continuity warning card.

-
-
- -
Thread event

A sample plot thread note.

-
-
-
diff --git a/PlotLine/Views/Scenes/_SceneInspector.cshtml b/PlotLine/Views/Scenes/_SceneInspector.cshtml deleted file mode 100644 index 9397d10..0000000 --- a/PlotLine/Views/Scenes/_SceneInspector.cshtml +++ /dev/null @@ -1,1852 +0,0 @@ -@model SceneEditViewModel -@{ - var revisionStatus = Model.RevisionStatuses.FirstOrDefault(x => x.Value == Model.RevisionStatusID.ToString())?.Text ?? "Not set"; - var primaryLocation = Model.LocationOptions.FirstOrDefault(x => x.Value == Model.PrimaryLocationID?.ToString())?.Text ?? "No primary location"; - var povCharacter = Model.SceneCharacters.FirstOrDefault(x => x.RoleInSceneTypeName?.Contains("POV", StringComparison.OrdinalIgnoreCase) == true)?.CharacterName - ?? Model.SceneCharacters.FirstOrDefault()?.CharacterName - ?? "No POV"; - var timeLabel = !string.IsNullOrWhiteSpace(Model.RelativeTimeText) - ? Model.RelativeTimeText - : Model.StartDateTime?.ToString("dd MMM yyyy HH:mm") - ?? Model.StartDateTime?.ToString("dd MMM yyyy") - ?? "Time not set"; - var selectedPurposeLabels = Model.ScenePurposeTypes - .Where(x => Model.SelectedPurposeTypeIds.Contains(x.ScenePurposeTypeID)) - .Select(x => x.PurposeName) - .ToList(); - var dependencyCount = Model.DependenciesThisSceneNeeds.Count + Model.DependenciesNeedingThisScene.Count; - var totalWarningCount = Model.Warnings.Count + Model.AgeContinuityWarnings.Count; - var exactDateTimeModeId = Model.TimeModes.FirstOrDefault(x => string.Equals(x.Text, "Exact DateTime", StringComparison.OrdinalIgnoreCase))?.Value ?? string.Empty; - var exactDateModeId = Model.TimeModes.FirstOrDefault(x => string.Equals(x.Text, "Exact Date", StringComparison.OrdinalIgnoreCase))?.Value ?? string.Empty; -} - -@functions { - private static string StoryStateBadgeClass(string state) => state switch - { - "Explicit" => "bg-success", - "Inferred" => "bg-secondary", - _ => "bg-warning text-dark" - }; -} - -
-
-
-

Working context

-

@(string.IsNullOrWhiteSpace(Model.SceneTitle) ? "Untitled scene" : Model.SceneTitle)

-

- @if (Model.Chapter is not null) - { - Chapter @Model.Chapter.ChapterNumber - } - Scene @Model.SceneNumber - @povCharacter - @primaryLocation -

-
-
- @revisionStatus - @(Model.IsLinkedToManuscript ? "🔗 Linked" : "📝 Planned") - @timeLabel - @totalWarningCount warning@(totalWarningCount == 1 ? "" : "s") - @Model.SceneCharacters.Count character@(Model.SceneCharacters.Count == 1 ? "" : "s") - @Model.AssetEvents.Count asset event@(Model.AssetEvents.Count == 1 ? "" : "s") - @Model.ThreadEvents.Count thread event@(Model.ThreadEvents.Count == 1 ? "" : "s") - @dependencyCount dependenc@(dependencyCount == 1 ? "y" : "ies") -
- @if (selectedPurposeLabels.Any()) - { -
- @foreach (var purpose in selectedPurposeLabels) - { - @purpose - } -
- } - @if (!string.IsNullOrWhiteSpace(Model.SceneOutcomeNotes)) - { -

@Model.SceneOutcomeNotes

- } -
- - @if (Model.CharacterSuggestions.Any() || Model.AssetSuggestions.Any() || Model.LocationSuggestions.Any()) - { -
-

Word Companion Suggestions

- @if (TempData["SceneCharacterSuggestionError"] is string suggestionError) - { -

@suggestionError

- } - @if (TempData["SceneAssetSuggestionError"] is string assetSuggestionError) - { -

@assetSuggestionError

- } - @if (TempData["SceneLocationSuggestionError"] is string locationSuggestionError) - { -

@locationSuggestionError

- } -
-
- @if (Model.CharacterSuggestions.Any()) - { -

Characters

- @foreach (var suggestion in Model.CharacterSuggestions) - { -
-
- @suggestion.CharacterName - @suggestion.Confidence confidence - @if (!string.IsNullOrWhiteSpace(suggestion.Reason)) - { - @suggestion.Reason - } - Detected @suggestion.DetectedUtc.ToLocalTime().ToString("d MMM yyyy HH:mm") -
-
-
- - - - - -
-
- - - - - -
-
-
- } - } - @if (Model.AssetSuggestions.Any()) - { -

Assets

- @foreach (var suggestion in Model.AssetSuggestions) - { -
-
- @suggestion.AssetName - @suggestion.Confidence confidence - @if (!string.IsNullOrWhiteSpace(suggestion.Reason)) - { - @suggestion.Reason - } - Detected @suggestion.DetectedUtc.ToLocalTime().ToString("d MMM yyyy HH:mm") -
-
-
- - - - - -
-
- - - - - -
-
-
- } - } - @if (Model.LocationSuggestions.Any()) - { -

Locations

- @foreach (var suggestion in Model.LocationSuggestions) - { -
-
- @(!string.IsNullOrWhiteSpace(suggestion.LocationPath) ? suggestion.LocationPath : suggestion.LocationName) - @suggestion.Confidence confidence - @if (!string.IsNullOrWhiteSpace(suggestion.Reason)) - { - @suggestion.Reason - } - Detected @suggestion.DetectedUtc.ToLocalTime().ToString("d MMM yyyy HH:mm") -
-
-
- - - - - -
-
- - - - - -
-
-
- } - } -
-
-
- } - -
- - -
- -
- - - - - - - -
- -
-

Timing & Structure

-
-
- - -
-
- - -
-
- - - -
-
- - -
-
- - -
-
- - @if (Model.LocationConsistencyMessages.Any()) - { -
-

Location checks

-
    - @foreach (var message in Model.LocationConsistencyMessages) - { -
  • @message
  • - } -
-
- } - -

Time

-
-
- - -
-
- - -
-
-
- - -
- - -
-
- - -
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
- - -
-
-
- -
-

Purposes

-
- @foreach (var purpose in Model.ScenePurposeTypes) - { - - } -
- -
-

Notes

- - - - -
-
- -
-

Scene Metrics

- @if (!Model.Metrics.Any()) - { -
-

This project has no scene metrics yet.

- @if (Model.ReturnProjectID.HasValue) - { - Add default metrics - } -
- } - else - { -
- @for (var index = 0; index < Model.Metrics.Count; index++) - { -
- - - - - -
- - @Model.Metrics[index].Value -
- - -
- } -
- } -
- -
- -
-
- - @if (Model.SceneID > 0 && Model.ReturnToTimeline) - { -
- - - -
- } - - @if (TempData["WriterWorkspaceError"] is string writerWorkspaceError) - { -
@writerWorkspaceError
- } - - - -
-

Scene Notes

- @if (!Model.Notes.Any()) - { -

No working notes yet. Capture drafting thoughts, research reminders, or revision questions as they come up.

- } - else - { -
- @foreach (var note in Model.Notes) - { -
- - @note.TypeName - @(string.IsNullOrWhiteSpace(note.NoteTitle) ? note.NoteText : note.NoteTitle) - @if (note.IsPinned) - { - Pinned - } - @if (note.IsResolved) - { - Resolved - } - -
- - - - - - - - -
- - -
-
- -
-
-
- - - - - -
-
- } -
- } -
- - - - - - - -
- -
- -
-
- - -
-

Characters

- @if (!Model.SceneCharacters.Any()) - { -

No characters attached to this scene yet. Add the people who appear, are mentioned, or meaningfully affect the scene.

- } - else - { -
- @foreach (var character in Model.SceneCharacters) - { - var editId = $"scene-character-edit-{character.SceneCharacterID}"; - var ageDisplay = CharacterAgeDisplayService.GetAgeForScene(character, Model.TimeModeName, Model.StartDateTime); -
-
- -
- @character.CharacterName - @if (!string.IsNullOrWhiteSpace(ageDisplay.DisplayText)) - { - @ageDisplay.Label: @ageDisplay.DisplayText - } - @((character.RoleInSceneTypeName ?? "Role not set")) • @((character.PresenceTypeName ?? "Presence not set")) - Location: @(character.LocationName ?? "Not set") - Entry: @(character.EntryLocationName ?? "Not set") - Exit: @(character.ExitLocationName ?? "Not set") - @if (!string.IsNullOrWhiteSpace(character.OutfitDescription) || !string.IsNullOrWhiteSpace(character.PhysicalCondition) || !string.IsNullOrWhiteSpace(character.EmotionalState)) - { - @character.OutfitDescription @character.PhysicalCondition @character.EmotionalState - } -
-
- -
- - - - - -
-
-
-
-
- - - - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
-
- } -
- } - -
- - - -

Add character to scene

- @if (TempData["SceneCharacterAddError"] is string addCharacterError) - { -

@addCharacterError

- } -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
-
-
-
- -
-
- -
-

Character Attributes

- @if (Model.CharacterAttributeEvents.Any()) - { -
- @foreach (var item in Model.CharacterAttributeEvents) - { -
-
- @item.CharacterName: @item.AttributeName - @item.AttributeValue - @item.Description -
-
- } -
- } - else - { -

Character attribute history for this scene will appear here when available.

- } -
- - - - - @if (TempData["CharacterAttributeAddError"] is string addCharacterAttributeError) - { -

@addCharacterAttributeError

- } -
-
- - -
-
- - -
-
- - -
-
- -
-
- -
-
- -
-

Character Knowledge

- @if (Model.CharacterKnowledge.Any()) - { -
- @foreach (var item in Model.CharacterKnowledge) - { -
-
- @item.CharacterName @item.KnowledgeStateName - @(item.AssetName ?? item.ThreadTitle) - @item.Description -
-
- - - - - -
-
- } -
- } -
- - - -
-
-
- - -
-
- - -
-
-
-
- -
-
- -
-

Relationship Events

- @if (Model.RelationshipEvents.Any()) - { -
- @foreach (var item in Model.RelationshipEvents) - { -
-
- @item.CharacterAName -> @item.CharacterBName - @item.RelationshipStateName / intensity @item.Intensity - @item.Description -
-
- - - - - -
-
- } -
- } -
- - - -
- @if (Model.RelationshipOptions.Count == 1) - { -
- - @Model.RelationshipOptions[0].Text -
- } - else - { -
- - -
- } -
-
-
-
-
- - -
-
- -
-
-
- -
-
- - -
-

Plot Thread Events

- @if (!Model.ThreadEvents.Any()) - { -

No plot thread events attached to this scene yet. Add clues, reveals, promises, payoffs, or reversals when the scene touches a thread.

- } - else - { -
- @foreach (var threadEvent in Model.ThreadEvents) - { -
-
- @threadEvent.MarkerText - @threadEvent.EventTitle - @threadEvent.PlotEventTypeName / @threadEvent.PlotLineName / @threadEvent.ThreadTitle -
-
- - - - - -
-
- Edit -
- - - - - - - @if (TempData[$"ThreadEventEditError:{threadEvent.ThreadEventID}"] is string editThreadEventError) - { -

@editThreadEventError

- } -
-
- - -
Branch starts another plot line while this one continues. Split ends this plot line and starts two or more others. Merge ends this plot line by feeding into another.
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
-
- } -
- } - -
- - - -

Choose an existing thread, or choose a plot line to create one from the event title.

- @if (TempData["ThreadEventAddError"] is string addThreadEventError) - { -

@addThreadEventError

- } - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
Branch starts another plot line while this one continues. Split ends this plot line and starts two or more others. Merge ends this plot line by feeding into another.
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
- -
- -
-

Story Assets

- @if (!Model.AssetEvents.Any()) - { -

No asset events attached to this scene yet. Add one when an object, clue, secret, or important item changes here.

- } - else - { -
- @foreach (var assetEvent in Model.AssetEvents) - { -
-
- @assetEvent.MarkerText - @assetEvent.EventTitle - @assetEvent.AssetName / @assetEvent.AssetEventTypeName - @if (!string.IsNullOrWhiteSpace(assetEvent.ToStateName)) - { - State: @(assetEvent.FromStateName ?? "Any") -> @assetEvent.ToStateName - } -
-
- - - - - -
-
- } -
- } - -
- - - -

Choose an existing asset, or enter a new asset name to create it from this scene.

- -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-

Asset Locations

- @if (!Model.SceneAssetLocations.Any()) - { -

No assets have been placed in a location for this scene yet.

- } - else - { -
- @foreach (var assetLocation in Model.SceneAssetLocations) - { -
-
- @assetLocation.AssetName - @assetLocation.LocationName - @assetLocation.Description -
-
- - - - - -
-
- } -
- } - -
- - - -
-
- - -
-
- - -
-
- -
-
- -
-
- -
-
- -
-

Occupancy

- -
- -
-

Asset Custody

- @if (!Model.AssetCustodyEvents.Any()) - { -

No custody entries attached to this scene yet.

- } - else - { -
- @foreach (var custody in Model.AssetCustodyEvents) - { -
-
- @custody.CustodyEventTypeName - @custody.AssetName - @custody.CustodianSummary -
-
- - - - - -
-
- } -
- } - -
- - - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
$"{x.CharacterName} {x.CurrentLocation} {x.State} {x.LastConfirmed}"))} {string.Join(' ', Model.StoryState.Assets.Select(x => $"{x.AssetName} {x.CurrentHolderOrLocation} {x.State} {x.LastConfirmed}"))}")"> -

Story State

- -

Characters

- @if (!Model.StoryState.Characters.Any()) - { -

No project characters found.

- } - else - { -
- - - - - - - - - - - @foreach (var characterState in Model.StoryState.Characters) - { - - - - - - - } - -
CharacterCurrent LocationStateLast Confirmed
@characterState.CharacterName@characterState.CurrentLocation@characterState.State@characterState.LastConfirmed
-
- } - -

Assets

- @if (!Model.StoryState.Assets.Any()) - { -

No project assets found.

- } - else - { -
- - - - - - - - - - - @foreach (var assetState in Model.StoryState.Assets) - { - - - - - - - } - -
AssetCurrent Holder / LocationStateLast Confirmed
@assetState.AssetName@assetState.CurrentHolderOrLocation@assetState.State@assetState.LastConfirmed
-
- } -
- - -
-
-

Writer Workspace

- Chapter workflow -
-
- - - -
-
- -
- - -
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
- - -
-
-
- -
-
- -
- -
-

Scene Checklist

-
- @foreach (var item in Model.ChecklistItems) - { -
- - - - - - - - -
-
- - - - - -
- } -
-
- - - - - -
-
- -
-

Attachments / Research

- @if (Model.StorageUsage is not null) - { -

Storage used: @Model.StorageUsage.DisplayLabel

- } - @if (!Model.Attachments.Any()) - { -

No scene references yet. Add images, links, floorplans, research notes, or files that help you write this scene.

- } - else - { -
- @foreach (var attachment in Model.Attachments) - { - var hasFile = !string.IsNullOrWhiteSpace(attachment.FilePath); - var fileHref = hasFile && attachment.FilePath!.StartsWith("http", StringComparison.OrdinalIgnoreCase) - ? attachment.FilePath - : hasFile && attachment.FilePath!.StartsWith("/") - ? attachment.FilePath - : hasFile && !System.IO.Path.IsPathRooted(attachment.FilePath!) - ? "/" + attachment.FilePath!.TrimStart('/', '\\') - : null; - var fileExtension = hasFile ? System.IO.Path.GetExtension(attachment.FilePath!) : string.Empty; - var isImageAttachment = !string.IsNullOrWhiteSpace(fileHref) - && new[] { ".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp" }.Contains(fileExtension, StringComparer.OrdinalIgnoreCase); -
- - @(hasFile ? "File" : "Link") - @attachment.TypeName - @attachment.Title - -
-
- @if (isImageAttachment) - { - - @attachment.Title preview - - } - else - { - - } -
- @if (!string.IsNullOrWhiteSpace(attachment.Notes)) - { -

@attachment.Notes

- } - @if (hasFile) - { -

@System.IO.Path.GetFileName(attachment.FilePath)

- } -
- @if (!string.IsNullOrWhiteSpace(fileHref)) - { - Open - Download - } - @if (!string.IsNullOrWhiteSpace(attachment.ExternalUrl)) - { - Open link - } -
-
-
-
-
- - - - - - - - - - - - - -
-
- - - - - - -
-
- } -
- } -
- + Add Attachment -
- - - - - - - - - - - - - -
-
-
- - -
-
-

Continuity Warnings

- @if (Model.SceneID > 0 && Model.ReturnProjectID.HasValue) - { -
- - - - - - - - } -
- @if (!Model.Warnings.Any() && !Model.AgeContinuityWarnings.Any()) - { -

No active warnings for this scene. Run validation again after major story changes.

- } - else - { -
- @foreach (var warning in Model.Warnings) - { -
- @warning.SeverityName - @warning.WarningTypeName -

@warning.Message

-
-
- - - - - - - - -
- - - - - - - - -
-
- } - @foreach (var warning in Model.AgeContinuityWarnings) - { -
- @warning.SeverityName - @warning.WarningTypeName -

@warning.Message

- @if (!string.IsNullOrWhiteSpace(warning.Details)) - { -

@warning.Details

- } -
- } -
- } -
- -
-

Scene Dependencies

-
-
-

This scene depends on

- @if (!Model.DependenciesThisSceneNeeds.Any()) - { -

No dependencies yet. Add one when this scene needs another moment to happen first.

- } - else - { - @foreach (var dependency in Model.DependenciesThisSceneNeeds) - { -
- Ch @dependency.SourceChapterNumber, Scene @dependency.SourceSceneNumber - @dependency.SourceSceneTitle - @dependency.SceneDependencyTypeName @(dependency.IsHardDependency ? "/ hard" : "/ soft") -
- - - - - -
-
- } - } -
-
-

Scenes depending on this

- @if (!Model.DependenciesNeedingThisScene.Any()) - { -

No dependent scenes yet. Later scenes that rely on this one will appear here.

- } - else - { - @foreach (var dependency in Model.DependenciesNeedingThisScene) - { -
- Ch @dependency.TargetChapterNumber, Scene @dependency.TargetSceneNumber - @dependency.TargetSceneTitle - @dependency.SceneDependencyTypeName @(dependency.IsHardDependency ? "/ hard" : "/ soft") -
- - - - - -
-
- } - } -
-
- -
- - - - -
-
- - -
-
- - -
-
- - -
-
- -
-
- -
-
- -
-
- - -
-

Move / Reorder

-
- - - -
-
- - -
-
- - -
-
- -
-
- -
-
- - - - - -
-
- -
diff --git a/PlotLine/Views/Shared/_SceneOccupancy.cshtml b/PlotLine/Views/Shared/_SceneOccupancy.cshtml deleted file mode 100644 index e1ea83d..0000000 --- a/PlotLine/Views/Shared/_SceneOccupancy.cshtml +++ /dev/null @@ -1,98 +0,0 @@ -@model SceneOccupancyEditorViewModel -@{ - var selectedPlanId = Model.FloorPlanID; - var locationOptions = Model.Locations - .Where(x => !selectedPlanId.HasValue || x.FloorPlanID == selectedPlanId.Value) - .OrderBy(x => x.FloorSortOrder) - .ThenBy(x => x.FloorName) - .ThenBy(x => x.LocationPath) - .ToList(); -} - -
- -
Saved
-
-
- - -
-
- - -
-
- - @if (!Model.FloorPlanOptions.Any()) - { -

No floor plans exist for this project yet.

- } - else - { -
-
-

Characters

- @if (!Model.Characters.Any()) - { -

No characters appear in this scene yet.

- } - else - { - @for (var i = 0; i < Model.Characters.Count; i++) - { -
- - @Model.Characters.ElementAt(i).CharacterName - -
- } - } -
- -
-

Assets

- @if (!Model.Assets.Any()) - { -

No story assets appear in this scene yet.

- } - else - { - @for (var i = 0; i < Model.Assets.Count; i++) - { -
- - @Model.Assets.ElementAt(i).AssetName - -
- } - } -
-
- - - } -
diff --git a/PlotLine/wwwroot/css/plotline-theme.css b/PlotLine/wwwroot/css/plotline-theme.css index bf930a2..53a7d4e 100644 --- a/PlotLine/wwwroot/css/plotline-theme.css +++ b/PlotLine/wwwroot/css/plotline-theme.css @@ -849,37 +849,10 @@ a:hover { box-shadow: 0 4px 12px rgba(62, 45, 28, 0.12); } -.scene-inspector-panel, -.scene-inspector-root { +.scene-inspector-panel { background: rgba(255, 251, 243, 0.72); } -.inspector-section { - background: var(--plotline-surface-elevated); - border-color: var(--plotline-border-soft); - border-radius: var(--plotline-radius); - box-shadow: var(--plotline-shadow-subtle); -} - -.scene-overview-card { - background: linear-gradient(135deg, #fffaf1, #f2e2cf); -} - -.inspector-quick-nav, -.inspector-accordion-toggle { - background: rgba(255, 251, 243, 0.88); - border-color: rgba(84, 68, 48, 0.14); -} - -.inspector-accordion-toggle { - color: var(--plotline-accent-dark); - border-radius: var(--plotline-radius-sm); -} - -.inspector-accordion-toggle:hover { - background: rgba(122, 77, 44, 0.08); -} - .form-control, .form-select { border-color: rgba(84, 68, 48, 0.2); @@ -1503,45 +1476,6 @@ a:focus-visible { color: #211915; } -.scene-inspector-root { - display: grid; - gap: 0.85rem; -} - -.inspector-section { - padding: 0.95rem; -} - -.inspector-section h3 { - color: #211915; - font-size: 1.02rem; -} - -.scene-overview-card { - border: 1px solid rgba(122, 77, 44, 0.18); - background: - linear-gradient(135deg, rgba(255, 250, 241, 0.98), rgba(242, 226, 207, 0.82)); -} - -.inspector-quick-nav { - top: 0.35rem; - box-shadow: 0 10px 26px rgba(62, 45, 28, 0.08); -} - -.inspector-nav-links { - max-height: 6.2rem; - overflow: auto; -} - -.inspector-nav-links a { - background: rgba(255, 253, 248, 0.84); -} - -.inspector-accordion-toggle { - min-height: 2.25rem; - padding-inline: 0.2rem; -} - .writer-mini-card { border-color: rgba(84, 68, 48, 0.13); background: rgba(255, 253, 248, 0.78); @@ -1892,10 +1826,6 @@ a:focus-visible { [data-theme="dark"] .writer-mini-card, [data-theme="dark"] .timeline-setting-card, [data-theme="dark"] .timeline-setting-card:has(input:checked), -[data-theme="dark"] .scene-overview-card, -[data-theme="dark"] .inspector-section, -[data-theme="dark"] .inspector-quick-nav, -[data-theme="dark"] .inspector-accordion-toggle, [data-theme="dark"] .thread-event-item, [data-theme="dark"] .asset-event-item, [data-theme="dark"] .story-asset-event-item { @@ -1989,25 +1919,6 @@ a:focus-visible { background: var(--plotline-accent-dark); } -[data-theme="dark"] .scene-inspector-root { - color: var(--app-text); - background: transparent; -} - -[data-theme="dark"] .inspector-nav-links a { - color: #ead8c4; - background: rgba(231, 214, 190, 0.08); - border-color: rgba(231, 214, 190, 0.28); -} - -[data-theme="dark"] .inspector-nav-links a:hover, -[data-theme="dark"] .inspector-nav-links a:focus, -[data-theme="dark"] .inspector-nav-links a.active { - color: #fff4e8; - background: rgba(241, 195, 143, 0.16); - border-color: rgba(241, 195, 143, 0.52); -} - [data-theme="dark"] .thread-event-item, [data-theme="dark"] .asset-event-item, [data-theme="dark"] .story-asset-event-item { @@ -5108,7 +5019,4 @@ a:focus-visible { max-width: 260px; } - .inspector-nav-links { - max-height: 8.5rem; - } } diff --git a/PlotLine/wwwroot/css/plotline-theme.min.css b/PlotLine/wwwroot/css/plotline-theme.min.css index 5cc37a8..543f702 100644 --- a/PlotLine/wwwroot/css/plotline-theme.min.css +++ b/PlotLine/wwwroot/css/plotline-theme.min.css @@ -1 +1 @@ -:root{--plotline-bg:#f4efe6;--plotline-bg-warm:#fbf8f0;--plotline-surface:rgba(255,252,246,.94);--plotline-surface-elevated:#fffdf8;--plotline-border-soft:rgba(84,68,48,.14);--plotline-text:#241f1b;--plotline-text-muted:#74695d;--plotline-accent:#7a4d2c;--plotline-accent-dark:#59371f;--plotline-accent-soft:#f2e2cf;--plotline-secondary:#315f67;--plotline-secondary-soft:#dfecef;--plotline-danger:#963f36;--plotline-warning:#b8762b;--plotline-success:#4d7654;--plotline-timeline-bg:#ede2d3;--plotline-shadow-card:0 14px 32px rgba(62,45,28,.08);--plotline-shadow-subtle:0 8px 20px rgba(62,45,28,.06);--plotline-radius:12px;--plotline-radius-sm:9px;--plotline-ink:var(--plotline-text);--plotline-muted:var(--plotline-text-muted);--plotline-paper:var(--plotline-bg-warm);--plotline-panel:var(--plotline-surface);--plotline-line:var(--plotline-border-soft);--plotline-soft:var(--plotline-accent-soft);--app-bg:var(--plotline-bg);--app-surface:var(--plotline-surface);--app-surface-alt:var(--plotline-surface-elevated);--app-text:var(--plotline-text);--app-text-muted:var(--plotline-text-muted);--app-border:var(--plotline-border-soft);--app-link:var(--plotline-accent-dark);--app-input-bg:rgba(255,253,248,.9);--app-input-text:var(--plotline-text);--app-card-bg:var(--plotline-surface);--app-timeline-bg:var(--plotline-timeline-bg)}[data-theme="dark"]{color-scheme:dark;--plotline-bg:#14110f;--plotline-bg-warm:#1c1714;--plotline-surface:rgba(35,29,25,.96);--plotline-surface-elevated:#2a231e;--plotline-border-soft:rgba(231,214,190,.16);--plotline-text:#f1e7d8;--plotline-text-muted:#b9aa99;--plotline-accent:#d49a62;--plotline-accent-dark:#f0c99d;--plotline-accent-soft:#3a2a20;--plotline-secondary:#78b9c2;--plotline-secondary-soft:#21383d;--plotline-danger:#ee8e83;--plotline-warning:#e0ad65;--plotline-success:#91c99a;--plotline-timeline-bg:#211b17;--plotline-shadow-card:0 16px 38px rgba(0,0,0,.34);--plotline-shadow-subtle:0 10px 26px rgba(0,0,0,.24);--plotline-ink:var(--plotline-text);--plotline-muted:var(--plotline-text-muted);--plotline-paper:var(--plotline-bg-warm);--plotline-panel:var(--plotline-surface);--plotline-line:var(--plotline-border-soft);--plotline-soft:var(--plotline-accent-soft);--app-bg:#14110f;--app-surface:rgba(35,29,25,.96);--app-surface-alt:#2a231e;--app-text:#f4eadc;--app-text-muted:#cdbba7;--app-border:rgba(231,214,190,.2);--app-link:#f1c38f;--app-input-bg:#211b17;--app-input-text:#f4eadc;--app-card-bg:rgba(35,29,25,.96);--app-timeline-bg:#211b17;--bs-body-bg:var(--app-bg);--bs-body-color:var(--app-text);--bs-secondary-color:var(--app-text-muted);--bs-tertiary-color:#a99886;--bs-border-color:var(--app-border);--bs-link-color:var(--app-link);--bs-link-hover-color:#ffd5a6;--bs-card-bg:var(--app-card-bg);--bs-card-color:var(--app-text);--bs-modal-bg:var(--app-surface-alt);--bs-modal-color:var(--app-text);--bs-dropdown-bg:var(--app-surface-alt);--bs-dropdown-color:var(--app-text);--bs-list-group-bg:var(--app-surface);--bs-list-group-color:var(--app-text);--bs-table-color:var(--app-text);--bs-table-bg:transparent}body{color:var(--plotline-text);background:radial-gradient(circle at top left,rgba(185,134,83,.18),transparent 34rem),linear-gradient(135deg,var(--plotline-bg-warm),var(--plotline-bg) 52%,#efe6d8);font-family:"Segoe UI","Aptos",system-ui,-apple-system,BlinkMacSystemFont,sans-serif}h1,h2,h3,.navbar-brand,.context-title strong{font-family:Georgia,"Times New Roman",serif;letter-spacing:.01em}a{color:var(--plotline-accent-dark);text-decoration-color:rgba(122,77,44,.28);text-underline-offset:.18em}a:hover{color:var(--plotline-secondary)}.plotline-nav{position:relative;z-index:1030;background:rgba(255,251,243,.9)!important;border-bottom:1px solid rgba(84,68,48,.13)!important;box-shadow:0 8px 28px rgba(62,45,28,.06)}.navbar-brand{color:var(--plotline-accent-dark)!important;font-size:1.35rem}.plotline-nav .nav-link{border-radius:999px;color:var(--plotline-text-muted)!important;font-weight:650;padding-inline:.82rem}.plotline-nav .nav-link:hover,.plotline-nav .nav-link:focus{color:var(--plotline-accent-dark)!important;background:rgba(122,77,44,.1)}.page-heading h1,.workspace-heading h1{color:#201a16;text-wrap:balance}.eyebrow{color:var(--plotline-accent);font-size:.72rem;letter-spacing:.11em}.lead-text,.muted{color:var(--plotline-text-muted)!important}.plain-card,.empty-panel,.edit-panel,.list-section,.story-bible-section,.story-bible-card,.archive-item-card,.warning-card,.warning-mini-card,.scenario-chapter,.drag-drop-panel,.import-tree-book,.import-confirmation,.import-docs details{background:var(--plotline-surface);border-color:var(--plotline-border-soft);border-radius:var(--plotline-radius);box-shadow:var(--plotline-shadow-subtle)}.plain-card,.story-bible-card,.archive-item-card,.timeline-scene-card,.inspector-section{transition:box-shadow .18s ease,transform .18s ease,border-color .18s ease}.plain-card:hover,.story-bible-card:hover,.archive-item-card:hover{border-color:rgba(122,77,44,.24);box-shadow:var(--plotline-shadow-card)}.empty-panel{background:linear-gradient(135deg,rgba(255,253,248,.96),rgba(244,229,209,.72)),var(--plotline-surface)}.btn{border-radius:999px;font-weight:700;letter-spacing:.01em;box-shadow:none}.btn-primary{--bs-btn-bg:var(--plotline-accent);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent-dark);--bs-btn-hover-border-color:var(--plotline-accent-dark);--bs-btn-active-bg:var(--plotline-accent-dark);--bs-btn-active-border-color:var(--plotline-accent-dark)}.btn-outline-primary,.btn-outline-secondary{--bs-btn-color:var(--plotline-accent-dark);--bs-btn-border-color:rgba(122,77,44,.26);--bs-btn-hover-color:var(--plotline-accent-dark);--bs-btn-hover-bg:rgba(122,77,44,.12);--bs-btn-hover-border-color:rgba(122,77,44,.38);background:rgba(255,252,246,.72)}.btn-outline-danger{--bs-btn-color:var(--plotline-danger);--bs-btn-border-color:rgba(150,63,54,.34);--bs-btn-hover-bg:var(--plotline-danger);--bs-btn-hover-border-color:var(--plotline-danger)}.status-pill,.purpose-chip,.location-badge,.archived-badge,.severity-pill,.overview-chip,.story-bible-card-title span{border:1px solid rgba(84,68,48,.13);border-radius:999px;background:rgba(255,250,241,.82);color:var(--plotline-text-muted);box-shadow:inset 0 1px 0 rgba(255,255,255,.75);font-weight:750;letter-spacing:.02em}.status-pill{background:var(--plotline-secondary-soft);color:#284f56}.purpose-chip{background:var(--plotline-accent-soft);color:var(--plotline-accent-dark)}.severity-pill.warning,.warning-placeholder.active{background:#fbecd3;color:#7b4b13;border-color:rgba(184,118,43,.28)}.context-header{background:rgba(255,251,243,.78);border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius);box-shadow:var(--plotline-shadow-subtle)}.context-nav a{border-radius:999px;color:var(--plotline-text-muted);font-weight:700}.context-nav a:hover,.context-nav a:focus{background:rgba(122,77,44,.1);color:var(--plotline-accent-dark)}.pw-page-heading{align-items:center;gap:clamp(.85rem,2vw,1.35rem);margin-bottom:1rem}.pw-page-heading>div:first-child{min-width:min(100%,26rem)}.pw-page-heading .lead-text{max-width:52rem}.pw-project-nav{display:grid;gap:.55rem;margin:0 0 1.1rem;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius);padding:.7rem .75rem;background:linear-gradient(135deg,rgba(255,253,248,.9),rgba(242,226,207,.55)),var(--plotline-surface);box-shadow:var(--plotline-shadow-subtle)}.pw-project-nav__label{color:var(--plotline-accent);font-size:.68rem;font-weight:850;letter-spacing:.1em;line-height:1;text-transform:uppercase}.pw-project-nav__links,.pw-character-nav{display:flex;flex-wrap:wrap;gap:.42rem;align-items:center}.pw-project-nav__link,.pw-character-nav__link{display:inline-flex;align-items:center;justify-content:center;min-height:2rem;border:1px solid rgba(84,68,48,.16);border-radius:999px;padding:.32rem .68rem;color:var(--plotline-accent-dark);background:rgba(255,250,241,.82);box-shadow:inset 0 1px 0 rgba(255,255,255,.72);font-size:.8rem;font-weight:780;line-height:1.1;text-decoration:none;transition:background-color .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease}.pw-project-nav__link:hover,.pw-project-nav__link:focus,.pw-character-nav__link:hover,.pw-character-nav__link:focus{color:var(--plotline-accent-dark);border-color:rgba(122,77,44,.32);background:rgba(122,77,44,.11);box-shadow:inset 0 1px 0 rgba(255,255,255,.62),0 5px 12px rgba(62,45,28,.06)}.pw-project-nav__link.active,.pw-character-nav__link.active{color:#fff8ec;border-color:var(--plotline-accent);background:linear-gradient(180deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow:0 6px 14px rgba(62,45,28,.16)}.pw-character-nav{margin:0 0 1rem;border-bottom:1px solid rgba(84,68,48,.11);padding-bottom:.65rem}.pw-actions{flex:0 0 auto}.pw-actions__toggle{--bs-btn-color:var(--plotline-accent-dark);--bs-btn-bg:rgba(255,250,241,.86);--bs-btn-border-color:rgba(122,77,44,.32);--bs-btn-hover-color:#fff8ec;--bs-btn-hover-bg:var(--plotline-accent);--bs-btn-hover-border-color:var(--plotline-accent);--bs-btn-active-color:#fff8ec;--bs-btn-active-bg:var(--plotline-accent-dark);--bs-btn-active-border-color:var(--plotline-accent-dark);min-height:2.35rem;padding-inline:1rem;box-shadow:var(--plotline-shadow-subtle)}.pw-actions .dropdown-menu{--bs-dropdown-bg:var(--plotline-surface-elevated);--bs-dropdown-color:var(--plotline-text);--bs-dropdown-border-color:var(--plotline-border-soft);--bs-dropdown-link-color:var(--plotline-text);--bs-dropdown-link-hover-color:var(--plotline-accent-dark);--bs-dropdown-link-hover-bg:rgba(122,77,44,.1);--bs-dropdown-divider-bg:rgba(84,68,48,.13);border-radius:var(--plotline-radius-sm);box-shadow:var(--plotline-shadow-card)}.pw-actions .dropdown-item{font-weight:650}.pw-actions .dropdown-item.text-danger{color:var(--plotline-danger)!important}.pw-actions .dropdown-item.text-danger:hover,.pw-actions .dropdown-item.text-danger:focus{color:#fff8ec!important;background:var(--plotline-danger)}.project-gallery{display:grid;gap:1rem}.project-tabs{gap:.45rem;padding:.35rem;border:1px solid var(--plotline-border-soft);border-radius:999px;background:rgba(255,250,241,.72);box-shadow:var(--plotline-shadow-subtle);width:fit-content;max-width:100%}.project-tabs .nav-link{border-radius:999px;color:var(--plotline-text-muted);font-weight:800;padding:.48rem .9rem}.project-tabs .nav-link:hover,.project-tabs .nav-link:focus{color:var(--plotline-accent-dark);background:rgba(122,77,44,.1)}.project-tabs .nav-link.active{color:#fff8ec;background:linear-gradient(180deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow:0 8px 16px rgba(62,45,28,.14)}.project-tab-content{min-width:0}.project-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,22rem),1fr));gap:1rem}.project-card{display:grid;grid-template-rows:auto 1fr auto;overflow:hidden;min-height:100%;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius);background:var(--plotline-surface);box-shadow:var(--plotline-shadow-subtle);transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.project-card:hover{border-color:rgba(122,77,44,.24);box-shadow:var(--plotline-shadow-card);transform:translateY(-1px)}.project-card--archived{opacity:.88}.project-card__visual{position:relative;display:grid;place-items:center;min-height:11rem;overflow:hidden;background:radial-gradient(circle at 26% 22%,rgba(255,255,255,.64),transparent 11rem),linear-gradient(135deg,rgba(242,226,207,.94),rgba(223,236,239,.78))}.project-card--archived .project-card__visual{filter:saturate(.55)}.project-card__body{display:grid;gap:.75rem;padding:1rem 1rem .85rem}.project-card__heading{display:flex;justify-content:space-between;gap:.8rem}.project-card__heading h2{margin:0;font-size:1.35rem;line-height:1.1}.project-card__heading h2 a{color:var(--plotline-text);text-decoration-color:rgba(122,77,44,.28)}.project-card__description{display:-webkit-box;min-height:3.2rem;margin:0;overflow:hidden;color:var(--plotline-text-muted);-webkit-box-orient:vertical;-webkit-line-clamp:3}.project-card__stats{display:flex;flex-wrap:wrap;gap:.45rem}.project-card__stats span{display:inline-flex;align-items:baseline;gap:.25rem;border:1px solid rgba(84,68,48,.12);border-radius:999px;padding:.28rem .6rem;color:var(--plotline-text-muted);background:rgba(255,250,241,.74);font-size:.82rem;font-weight:700}.project-card__stats strong{color:var(--plotline-accent-dark)}.project-card__actions{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;border-top:1px solid rgba(84,68,48,.1);padding:.85rem 1rem 1rem}.project-card__actions form{display:inline-flex;margin:0}.project-cover-stack{position:relative;width:min(11.5rem,70%);height:9.4rem}.project-cover-stack__cover{position:absolute;top:50%;left:50%;width:4.65rem;aspect-ratio:2/3;border:3px solid rgba(255,253,248,.86);border-radius:.45rem;background:var(--plotline-soft);box-shadow:0 12px 28px rgba(62,45,28,.22);object-fit:cover}.project-cover-stack__cover--0{z-index:3;transform:translate(-50%,-50%) rotate(-1deg) scale(1.08)}.project-cover-stack__cover--1{z-index:2;transform:translate(-88%,-47%) rotate(-8deg) scale(.94)}.project-cover-stack__cover--2{z-index:1;transform:translate(-12%,-47%) rotate(8deg) scale(.94)}.project-cover-fallback{display:grid;place-items:center;width:min(9.5rem,62%);aspect-ratio:2/3;border:1px solid rgba(84,68,48,.18);border-radius:.8rem;background:linear-gradient(180deg,rgba(255,253,248,.34),transparent 32%),linear-gradient(135deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow:0 14px 30px rgba(62,45,28,.2);color:#fff8ec}.project-cover-fallback span{font-family:Georgia,"Times New Roman",serif;font-size:clamp(2.2rem,7vw,3.2rem);font-weight:700;letter-spacing:.02em}.project-empty-state{margin:0}.character-gallery-upload{display:grid;grid-template-columns:minmax(14rem,1fr) minmax(14rem,1fr) auto;gap:.75rem;align-items:end;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);padding:.85rem;background:rgba(255,250,241,.56)}.character-relationship-editor{gap:.85rem}.character-relationship-read{display:grid;gap:.75rem}.character-relationship-edit-form{width:100%;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);padding:.85rem;background:rgba(255,250,241,.56)}.character-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,14rem),1fr));gap:.9rem}.character-gallery-card{overflow:hidden;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);background:rgba(255,253,248,.72);box-shadow:var(--plotline-shadow-subtle)}.character-gallery-card>img{display:block;width:100%;aspect-ratio:4/3;background:var(--plotline-soft);object-fit:cover}.character-gallery-card__body{display:grid;gap:.3rem;padding:.75rem}.character-gallery-card__actions{border-top:1px solid rgba(84,68,48,.1);padding:0 .75rem .75rem}.character-avatar-crop-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,16rem);gap:1rem;align-items:start}.character-avatar-crop-stage{position:relative;display:grid;place-items:center;min-height:24rem;overflow:hidden;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);background:var(--plotline-soft)}.character-avatar-crop-stage img{display:block;max-width:100%;max-height:70vh;user-select:none}.character-avatar-crop-box{position:absolute;cursor:move;touch-action:none;border:2px solid #fff8ec;box-shadow:0 0 0 9999px rgba(20,17,15,.42),0 0 0 1px rgba(0,0,0,.18)}.character-avatar-crop-box span{position:absolute;right:.35rem;bottom:.35rem;width:.75rem;height:.75rem;border-right:2px solid #fff8ec;border-bottom:2px solid #fff8ec}.character-avatar-crop-side{display:grid;gap:.75rem}.character-avatar-preview{width:min(100%,12rem);aspect-ratio:1;overflow:hidden;border:1px solid var(--plotline-border-soft);border-radius:999px;background:var(--plotline-soft);box-shadow:var(--plotline-shadow-subtle)}.character-avatar-preview img{display:block;max-width:none;transform-origin:top left}@media(max-width:767.98px){.pw-page-heading{align-items:stretch}.pw-page-heading .pw-actions,.pw-page-heading .pw-actions__toggle{width:100%}.pw-project-nav{padding:.65rem}.project-tabs{width:100%;border-radius:var(--plotline-radius)}.project-tabs .nav-item,.project-tabs .nav-link{flex:1 1 auto}.project-card__actions .btn,.project-card__actions .dropdown{flex:1 1 auto}.character-gallery-upload,.character-avatar-crop-layout{grid-template-columns:1fr}}.timeline-workspace{background:linear-gradient(180deg,rgba(255,251,244,.84),rgba(237,226,211,.66)),var(--plotline-timeline-bg);border:1px solid rgba(84,68,48,.16);border-radius:var(--plotline-radius);box-shadow:0 18px 44px rgba(62,45,28,.1)}.timeline-chapter{background:rgba(255,250,242,.68);border-color:rgba(84,68,48,.15);border-radius:var(--plotline-radius)}.timeline-chapter-title,.lane-board-heading,.plot-lane-board-heading,.lane-group-heading{background:linear-gradient(135deg,rgba(255,252,246,.96),rgba(244,229,209,.86));border-color:rgba(84,68,48,.16);color:var(--plotline-accent-dark)}.timeline-scene-card{background:linear-gradient(180deg,#fffdf8,#fbf3e8);border:1px solid rgba(84,68,48,.16);border-radius:var(--plotline-radius-sm);box-shadow:0 10px 24px rgba(62,45,28,.08)}.timeline-scene-card:hover,.timeline-scene-card.selected,.timeline-scene-card.focus-match,.timeline-scene-card.keyboard-focus{border-color:rgba(122,77,44,.42);box-shadow:0 0 0 3px rgba(122,77,44,.11),0 16px 30px rgba(62,45,28,.12);transform:translateY(-1px)}.plot-lane-label,.asset-lane-label,.character-lane-label,.plot-lane-slot,.asset-lane-slot,.character-lane-slot{background:rgba(255,251,244,.74);border-color:rgba(84,68,48,.14)}.thread-marker,.asset-marker,.character-appearance-pill{box-shadow:0 4px 12px rgba(62,45,28,.12)}.scene-inspector-panel,.scene-inspector-root{background:rgba(255,251,243,.72)}.inspector-section{background:var(--plotline-surface-elevated);border-color:var(--plotline-border-soft);border-radius:var(--plotline-radius);box-shadow:var(--plotline-shadow-subtle)}.scene-overview-card{background:linear-gradient(135deg,#fffaf1,#f2e2cf)}.inspector-quick-nav,.inspector-accordion-toggle{background:rgba(255,251,243,.88);border-color:rgba(84,68,48,.14)}.inspector-accordion-toggle{color:var(--plotline-accent-dark);border-radius:var(--plotline-radius-sm)}.inspector-accordion-toggle:hover{background:rgba(122,77,44,.08)}.form-control,.form-select{border-color:rgba(84,68,48,.2);border-radius:10px;background-color:rgba(255,253,248,.9)}.form-control:focus,.form-select:focus,.btn:focus-visible,a:focus-visible{border-color:rgba(122,77,44,.56);box-shadow:0 0 0 .22rem rgba(122,77,44,.17);outline:0}.auth-page-heading{justify-content:center;max-width:560px;margin-right:auto;margin-left:auto;text-align:center}.auth-page-heading>div{width:100%}.auth-page-heading .lead-text{margin-right:auto;margin-left:auto;text-align:center}.auth-card{max-width:560px;margin:0 auto;padding:clamp(1.75rem,4vw,2.5rem)}.auth-form{display:flex;flex-direction:column;gap:1.35rem;border-top:0;padding-top:0}.auth-form .alert{margin-bottom:0}.auth-field-stack{display:grid;gap:1rem}.auth-field-stack .form-label{font-weight:650}.auth-field-stack .form-check{display:inline-flex;align-items:center;gap:.45rem;margin-bottom:0;color:var(--plotline-text-muted);font-weight:650}.auth-actions{display:flex;justify-content:center;gap:.75rem;flex-wrap:wrap}.auth-actions .btn{min-width:8.75rem}.auth-help{margin:0;text-align:center;font-size:.95rem}.auth-help a{font-weight:650}.two-factor-card{max-width:560px;margin:0 auto;padding:clamp(1.75rem,4vw,2.5rem)}.two-factor-body{display:flex;flex-direction:column;align-items:center;text-align:center;gap:1.5rem;border-top:0;padding-top:0}.two-factor-body .alert{width:100%;margin-bottom:0}.two-factor-code-group{display:grid;justify-items:center;gap:.75rem;width:100%}.two-factor-label{margin-bottom:0;font-weight:700;color:var(--plotline-text)}.two-factor-inputs{display:flex;justify-content:center;gap:.75rem;width:100%}.two-factor-digit{width:3.5rem;height:3.5rem;padding:0;text-align:center;font-size:1.6rem;font-weight:760;line-height:1;border-radius:.75rem;border-color:rgba(122,77,44,.28);background:var(--plotline-surface-elevated);color:var(--plotline-text)}.two-factor-digit:focus{border-color:var(--plotline-accent);box-shadow:0 0 0 .22rem rgba(122,77,44,.2),0 10px 22px rgba(62,45,28,.1)}.two-factor-actions{display:flex;justify-content:center;gap:.75rem;flex-wrap:wrap}.two-factor-actions .btn{min-width:8.75rem}.two-factor-help{display:grid;justify-items:center;gap:.2rem;margin:0;font-size:.95rem;color:var(--plotline-text-muted)}.two-factor-help a{font-weight:650}.two-factor-code-group .text-danger{min-height:1.4rem}@media(max-width:576px){.two-factor-card{padding:1.35rem}.two-factor-inputs{gap:.4rem}.two-factor-digit{width:3rem;height:3rem;font-size:1.45rem}.two-factor-actions{flex-direction:column;width:100%}.two-factor-actions .btn{width:100%}.auth-card{padding:1.35rem}.auth-actions{flex-direction:column;width:100%}.auth-actions .btn{width:100%}}.plotline-confirm-modal{background:#fffaf2;border:1px solid rgba(84,68,48,.16);border-radius:var(--plotline-radius);box-shadow:0 24px 60px rgba(38,30,22,.2)}.plotline-confirm-modal .modal-header,.plotline-confirm-modal .modal-footer{border-color:rgba(84,68,48,.12)}.alert-info,.alert-warning{border-color:rgba(84,68,48,.16);border-radius:var(--plotline-radius-sm);background:rgba(255,250,241,.92);color:var(--plotline-text)}.trial-status-panel,.trial-dashboard-banner{border-color:rgba(84,68,48,.16);background:linear-gradient(135deg,rgba(255,253,248,.96),rgba(242,226,207,.56)),var(--plotline-surface);box-shadow:var(--plotline-shadow-subtle)}.trial-status-panel--signup{border-color:rgba(49,95,103,.22);background:linear-gradient(135deg,rgba(223,236,239,.72),rgba(255,253,248,.92)),var(--plotline-surface)}.trial-status-panel h2,.trial-status-panel h3,.trial-dashboard-banner h2{color:var(--plotline-text)}.trial-progress{box-shadow:inset 0 1px 2px rgba(62,45,28,.08)}.trial-progress__bar{background:linear-gradient(90deg,var(--plotline-secondary),var(--plotline-accent))}.trial-status--fourteen-days{border-color:rgba(184,118,43,.28)}.trial-status--seven-days,.trial-status--three-days,.trial-status--one-day{border-color:rgba(184,118,43,.38);background:linear-gradient(135deg,rgba(251,236,211,.84),rgba(255,253,248,.92)),var(--plotline-surface)}.table{--bs-table-bg:transparent;--bs-table-color:var(--plotline-text);--bs-table-border-color:rgba(84,68,48,.12)}.page-heading,.workspace-heading{row-gap:.8rem}.page-heading h1,.workspace-heading h1{color:#211915}.lead-text{line-height:1.55}.btn-sm{padding:.28rem .72rem;font-size:.8rem}.button-row{gap:.55rem}.button-row .btn,.story-bible-actions a,.timeline-preset-panel .btn,.timeline-filter-actions .btn{white-space:nowrap}.badge,.soft-count,.attachment-kind,.preset-chip,.story-bible-meta span{border-radius:999px;font-weight:780;letter-spacing:.015em}.badge.text-bg-light,.story-bible-meta span,.soft-count{border:1px solid rgba(84,68,48,.13);background:rgba(255,250,241,.78)!important;color:var(--plotline-text-muted)!important}.badge.text-bg-warning,.warning-placeholder.active{border:1px solid rgba(184,118,43,.28);background:#fbecd3!important;color:#7b4b13!important}.badge.text-bg-success{background:rgba(77,118,84,.13)!important;color:#315936!important}.empty-panel,.future-lane-placeholder,.inspector-empty{position:relative;overflow:hidden}.empty-panel::before,.future-lane-placeholder::before,.inspector-empty::before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:linear-gradient(180deg,var(--plotline-accent),var(--plotline-secondary));opacity:.42}.timeline-workspace{padding:.35rem}.timeline-shell{border-color:rgba(84,68,48,.14);background:linear-gradient(90deg,rgba(84,68,48,.05) 1px,transparent 1px) 0 0/calc(var(--timeline-scene-width) + var(--timeline-grid-gap)) 100%,linear-gradient(180deg,rgba(255,252,246,.94),rgba(244,235,221,.86))}.timeline-project-title,.timeline-book-title{border:1px solid rgba(45,33,23,.12);background:linear-gradient(135deg,rgba(49,95,103,.96),rgba(89,55,31,.94));box-shadow:8px 0 24px rgba(62,45,28,.1)}.timeline-book{padding:.15rem}.timeline-book-title{min-height:58px;align-content:center}.timeline-chapter{border:1px solid rgba(84,68,48,.13);background:linear-gradient(180deg,rgba(255,252,246,.78),rgba(242,226,207,.42));outline:0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.6)}.timeline-chapter-title{min-height:52px;border-bottom:1px solid rgba(84,68,48,.13);border-radius:var(--plotline-radius-sm) var(--plotline-radius-sm) 0 0;backdrop-filter:blur(10px)}.timeline-chapter-title strong,.timeline-book-title strong{font-size:.96rem}.timeline-scenes{padding:.65rem}.timeline-scene-card,.timeline-empty-scene{border-radius:11px}.timeline-scene-card{position:relative;min-height:176px;border-color:rgba(84,68,48,.15);background:linear-gradient(180deg,rgba(255,253,248,.98),rgba(251,243,232,.95));box-shadow:0 10px 22px rgba(62,45,28,.08)}.timeline-scene-card::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.85)}.timeline-scene-card strong{color:#221a15;font-size:.98rem;line-height:1.2}.scene-summary{color:var(--plotline-text-muted);line-height:1.38}.location-pill,.scene-pov-label,.metric-mini-summary,.dependency-placeholder,.warning-placeholder{border:1px solid rgba(84,68,48,.13);box-shadow:inset 0 1px 0 rgba(255,255,255,.68)}.timeline-placeholder-scene,.timeline-placeholder-cell{border-color:rgba(84,68,48,.18);color:rgba(84,68,48,.58);background:repeating-linear-gradient(-45deg,rgba(122,77,44,.06) 0 8px,rgba(255,255,255,.18) 8px 16px),rgba(255,252,246,.52)}.timeline-scene-card:hover,.timeline-scene-card.selected,.timeline-scene-card.focus-match,.timeline-scene-card.keyboard-focus,.timeline-scene-card.search-hit{z-index:3}.timeline-scene-card.selected::before,.timeline-scene-card.focus-match::before,.timeline-scene-card.keyboard-focus::before,.timeline-scene-card.search-hit::before{content:"";position:absolute;left:.65rem;right:.65rem;top:0;height:3px;border-radius:999px;background:linear-gradient(90deg,var(--plotline-accent),var(--plotline-secondary))}.timeline-section-header,.lane-board-heading,.pacing-heading{border:1px solid rgba(84,68,48,.13);backdrop-filter:blur(10px)}.plot-lane-board,.asset-lane-board,.character-lane-board{border-top-color:rgba(84,68,48,.12)}.plot-lane-label,.asset-lane-label,.character-lane-label{border-radius:10px;background:rgba(255,252,246,.94);box-shadow:6px 0 18px rgba(62,45,28,.06)}.character-lane-label{display:flex;align-items:center;gap:.55rem}.character-lane-label>span{display:grid;gap:.1rem;min-width:0}.character-lane-label small{color:var(--plotline-muted);font-size:.75rem;font-weight:700}.plot-lane-slot,.asset-lane-slot,.character-lane-slot{min-height:50px;border-radius:10px}.thread-marker,.asset-marker,.character-marker,.character-appearance-pill{min-height:24px;font-size:.7rem}.thread-marker{border-color:color-mix(in srgb,var(--plot-colour),#241f1b 18%)}.asset-marker{border-radius:8px;background:#eeeaf8}.character-marker{display:inline-flex;align-items:center;justify-content:center;background:#fff4d9}.drag-chip,[draggable="true"]{transition:transform .12s ease,box-shadow .12s ease,opacity .12s ease}.drag-chip.character{display:inline-flex;align-items:center;gap:.4rem}.drag-chip .visual-avatar,.character-lane-label .visual-avatar{flex:0 0 auto}.drag-chip:hover,[draggable="true"]:hover{transform:translateY(-1px)}.is-dragging{opacity:.55;box-shadow:0 0 0 3px rgba(49,95,103,.14)}.drop-target-active{outline-color:rgba(49,95,103,.34);background-color:rgba(223,236,239,.55)}.timeline-control-panel,.timeline-drag-palette,.drag-drop-panel{background:rgba(255,251,243,.82);backdrop-filter:blur(10px)}.timeline-filter-drawer,.timeline-control-group{border-color:rgba(84,68,48,.13);box-shadow:inset 0 1px 0 rgba(255,255,255,.75)}.scene-inspector-panel{border-color:rgba(84,68,48,.14);box-shadow:-14px 0 36px rgba(62,45,28,.07)}.inspector-header{border-bottom:1px solid rgba(84,68,48,.12);margin-bottom:.75rem;padding-bottom:.7rem}.inspector-header h2,.inspector-empty h2{color:#211915}.scene-inspector-root{display:grid;gap:.85rem}.inspector-section{padding:.95rem}.inspector-section h3{color:#211915;font-size:1.02rem}.scene-overview-card{border:1px solid rgba(122,77,44,.18);background:linear-gradient(135deg,rgba(255,250,241,.98),rgba(242,226,207,.82))}.inspector-quick-nav{top:.35rem;box-shadow:0 10px 26px rgba(62,45,28,.08)}.inspector-nav-links{max-height:6.2rem;overflow:auto}.inspector-nav-links a{background:rgba(255,253,248,.84)}.inspector-accordion-toggle{min-height:2.25rem;padding-inline:.2rem}.writer-mini-card{border-color:rgba(84,68,48,.13);background:rgba(255,253,248,.78)}.writer-mini-card[open]{box-shadow:0 10px 24px rgba(62,45,28,.07)}.writer-add-form,.writer-edit-form{gap:.5rem}.attachment-card-list{gap:.65rem}.attachment-summary{align-items:center}.attachment-kind{display:inline-flex;align-items:center;border:1px solid rgba(49,95,103,.18);padding:2px 8px;background:var(--plotline-secondary-soft);color:#284f56;font-size:.72rem;text-transform:uppercase}.attachment-preview-row{display:grid;grid-template-columns:96px minmax(0,1fr);gap:.75rem;align-items:start}.attachment-thumb{display:flex;align-items:center;justify-content:center;width:96px;aspect-ratio:4/3;overflow:hidden;border:1px solid rgba(84,68,48,.14);border-radius:10px;background:rgba(255,250,241,.88);text-decoration:none}.attachment-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .18s ease}.attachment-thumb:hover img{transform:scale(1.04)}.attachment-thumb-fallback span{color:var(--plotline-text-muted);font-size:.76rem;font-weight:850;letter-spacing:.06em;text-transform:uppercase}.attachment-preview-copy{display:grid;gap:.45rem;min-width:0}.attachment-preview-copy p{margin:0}.attachment-add-card summary{color:var(--plotline-accent-dark)}.story-bible-section,.writer-dashboard-panel{border-color:rgba(84,68,48,.14);background:rgba(255,251,243,.8)}.writer-dashboard-panel:first-child{border-color:rgba(49,95,103,.22);background:linear-gradient(135deg,rgba(223,236,239,.56),rgba(255,251,243,.9));box-shadow:0 18px 38px rgba(49,95,103,.09)}.writer-queue-list{display:grid;gap:.75rem}.writer-queue-card{border-color:rgba(84,68,48,.13);background:rgba(255,253,248,.86)}.writer-dashboard-panel:first-child .writer-queue-card:first-child{border-left:4px solid var(--plotline-secondary)}.writer-queue-card h3{line-height:1.25}.story-bible-nav{background:rgba(255,251,243,.78);border:1px solid rgba(84,68,48,.12);border-radius:var(--plotline-radius);padding:.45rem}.story-bible-card{background:rgba(255,253,248,.9)}.story-bible-card h3{color:#211915}.story-bible-card-title{gap:.8rem}.story-bible-facts{border-top:1px solid rgba(84,68,48,.1);padding-top:.65rem}.story-bible-actions a{border-color:rgba(122,77,44,.2);background:rgba(255,250,241,.75)}.story-bible-actions a:hover{background:rgba(122,77,44,.1)}.timeline-settings-form{display:grid;gap:1rem;max-width:1180px}.timeline-settings-section{display:grid;gap:.85rem}.timeline-settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:.75rem}.timeline-setting-card{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.72rem;align-items:start;min-height:92px;border:1px solid rgba(84,68,48,.13);border-radius:var(--plotline-radius-sm);padding:.85rem;background:rgba(255,253,248,.82);box-shadow:var(--plotline-shadow-subtle);cursor:pointer}.timeline-setting-card input{margin-top:.25rem;accent-color:var(--plotline-secondary)}.timeline-setting-card strong,.timeline-setting-card small{display:block}.timeline-setting-card strong{color:#211915}.timeline-setting-card small{margin-top:.25rem;color:var(--plotline-text-muted);line-height:1.4}.timeline-setting-card:has(input:checked){border-color:rgba(49,95,103,.25);background:linear-gradient(135deg,rgba(223,236,239,.52),rgba(255,253,248,.92))}.plotline-confirm-modal .modal-title{font-family:Georgia,"Times New Roman",serif}.plotline-confirm-modal .modal-body{color:var(--plotline-text-muted);line-height:1.55}.theme-switcher{flex:0 0 auto}.theme-switcher .btn{--bs-btn-color:var(--plotline-text-muted);--bs-btn-border-color:var(--plotline-border-soft);--bs-btn-hover-color:var(--plotline-accent-dark);--bs-btn-hover-bg:rgba(122,77,44,.1);--bs-btn-hover-border-color:rgba(122,77,44,.28);--bs-btn-active-color:#fff;--bs-btn-active-bg:var(--plotline-accent);--bs-btn-active-border-color:var(--plotline-accent);font-weight:700}[data-theme="dark"] body{color:var(--app-text);background:radial-gradient(circle at top left,rgba(212,154,98,.12),transparent 34rem),linear-gradient(135deg,var(--plotline-bg-warm),var(--plotline-bg) 52%,#0f0d0c)}[data-theme="dark"] a:not(.btn){color:var(--app-link);text-decoration-color:rgba(241,195,143,.36)}[data-theme="dark"] a:not(.btn):hover,[data-theme="dark"] a:not(.btn):focus{color:var(--bs-link-hover-color)}[data-theme="dark"] .text-muted,[data-theme="dark"] .form-text,[data-theme="dark"] .lead-text,[data-theme="dark"] .scene-summary,[data-theme="dark"] .timeline-chapter-title span,[data-theme="dark"] .timeline-book-title span,[data-theme="dark"] .plotline-nav .nav-link,[data-theme="dark"] .plotline-nav .navbar-text,[data-theme="dark"] .plain-card p,[data-theme="dark"] .inspector-empty,[data-theme="dark"] .plotline-confirm-modal .modal-body,[data-theme="dark"] .timeline-setting-card small{color:var(--app-text-muted)!important}[data-theme="dark"] .plotline-nav{background:rgba(29,23,20,.92)!important;border-bottom-color:var(--plotline-border-soft)!important;box-shadow:0 8px 28px rgba(0,0,0,.24)}[data-theme="dark"] .plotline-nav .nav-link:hover,[data-theme="dark"] .plotline-nav .nav-link:focus,[data-theme="dark"] .plotline-nav .nav-link.active{color:var(--app-link)!important}[data-theme="dark"] .navbar-toggler{border-color:var(--plotline-border-soft)}[data-theme="dark"] h1,[data-theme="dark"] h2,[data-theme="dark"] h3,[data-theme="dark"] h4,[data-theme="dark"] h5,[data-theme="dark"] h6,[data-theme="dark"] .page-heading h1,[data-theme="dark"] .workspace-heading h1,[data-theme="dark"] .timeline-scene-card strong,[data-theme="dark"] .timeline-chapter-title strong,[data-theme="dark"] .timeline-book-title strong,[data-theme="dark"] .plain-card h2,[data-theme="dark"] .plain-card h3,[data-theme="dark"] .context-title strong,[data-theme="dark"] .asset-card h2,[data-theme="dark"] .character-card h2,[data-theme="dark"] .inspector-header h2,[data-theme="dark"] .inspector-empty h2,[data-theme="dark"] .inspector-section h3,[data-theme="dark"] .story-bible-card h3,[data-theme="dark"] .timeline-setting-card strong{color:var(--app-text)}[data-theme="dark"] .plain-card,[data-theme="dark"] .card,[data-theme="dark"] .empty-panel,[data-theme="dark"] .edit-panel,[data-theme="dark"] .list-section,[data-theme="dark"] .list-group-item,[data-theme="dark"] .asset-card,[data-theme="dark"] .story-bible-section,[data-theme="dark"] .story-bible-card,[data-theme="dark"] .story-bible-nav,[data-theme="dark"] .attention-list article,[data-theme="dark"] .warning-filter-panel,[data-theme="dark"] .validation-summary,[data-theme="dark"] .analytics-section,[data-theme="dark"] .metric-shape-chart,[data-theme="dark"] .metric-chart-frame,[data-theme="dark"] .analytics-list-item,[data-theme="dark"] .analytics-count-row,[data-theme="dark"] .purpose-stat-row,[data-theme="dark"] .archive-item-card,[data-theme="dark"] .warning-card,[data-theme="dark"] .warning-mini-card,[data-theme="dark"] .scenario-chapter,[data-theme="dark"] .drag-drop-panel,[data-theme="dark"] .import-tree-book,[data-theme="dark"] .import-confirmation,[data-theme="dark"] .import-docs details,[data-theme="dark"] .scene-inspector-panel,[data-theme="dark"] .pacing-panel,[data-theme="dark"] .timeline-control-panel,[data-theme="dark"] .timeline-drag-palette,[data-theme="dark"] .timeline-filter-drawer,[data-theme="dark"] .timeline-control-group,[data-theme="dark"] .timeline-visibility-panel,[data-theme="dark"] .timeline-jump-panel,[data-theme="dark"] .timeline-preset-panel,[data-theme="dark"] .attachment-card,[data-theme="dark"] .attachment-preview-row,[data-theme="dark"] .attachment-thumb,[data-theme="dark"] .asset-mini-item,[data-theme="dark"] .archive-empty,[data-theme="dark"] .writer-dashboard-panel,[data-theme="dark"] .writer-dashboard-panel:first-child,[data-theme="dark"] .writer-queue-card,[data-theme="dark"] .writer-mini-card,[data-theme="dark"] .timeline-setting-card,[data-theme="dark"] .timeline-setting-card:has(input:checked),[data-theme="dark"] .scene-overview-card,[data-theme="dark"] .inspector-section,[data-theme="dark"] .inspector-quick-nav,[data-theme="dark"] .inspector-accordion-toggle,[data-theme="dark"] .thread-event-item,[data-theme="dark"] .asset-event-item,[data-theme="dark"] .story-asset-event-item{color:var(--app-text);background:var(--app-surface);border-color:var(--app-border);box-shadow:var(--plotline-shadow-subtle)}[data-theme="dark"] .asset-card{border-left-color:rgba(241,195,143,.42)}[data-theme="dark"] .asset-card h2 a,[data-theme="dark"] .story-bible-card a,[data-theme="dark"] .analytics-link-row,[data-theme="dark"] .health-kpi-grid strong{color:#ffe2bd}[data-theme="dark"] .asset-card h2 a:hover,[data-theme="dark"] .story-bible-card a:hover,[data-theme="dark"] .analytics-link-row:hover{color:#fff4e8}[data-theme="dark"] .asset-card p,[data-theme="dark"] .asset-card-footer,[data-theme="dark"] .asset-card .muted,[data-theme="dark"] .warning-filter-panel .form-label,[data-theme="dark"] .warning-filter-panel .form-check-label,[data-theme="dark"] .validation-summary,[data-theme="dark"] .story-bible-card p,[data-theme="dark"] .story-bible-card h4,[data-theme="dark"] .story-bible-facts dt,[data-theme="dark"] .story-bible-link-list span,[data-theme="dark"] .story-bible-scene-summary span,[data-theme="dark"] .attention-list p,[data-theme="dark"] .analytics-section-heading span,[data-theme="dark"] .analytics-list-item p,[data-theme="dark"] .analytics-link-row span,[data-theme="dark"] .analytics-count-row span,[data-theme="dark"] .purpose-stat-row span,[data-theme="dark"] .health-kpi-grid span{color:var(--app-text-muted)!important}[data-theme="dark"] .asset-card-footer .btn,[data-theme="dark"] .warning-actions .btn{box-shadow:none}[data-theme="dark"] .story-bible-link-list li,[data-theme="dark"] .story-bible-facts,[data-theme="dark"] .story-bible-chapter-summary,[data-theme="dark"] .story-bible-scene-summary,[data-theme="dark"] .metric-raw-details,[data-theme="dark"] .analytics-list-item,[data-theme="dark"] .analytics-link-row,[data-theme="dark"] .analytics-count-row,[data-theme="dark"] .purpose-stat-row{border-color:rgba(241,195,143,.18)}[data-theme="dark"] .story-bible-actions a,[data-theme="dark"] .story-bible-nav a{color:#f1dcc4;background:rgba(241,195,143,.1);border:1px solid rgba(241,195,143,.26)}[data-theme="dark"] .story-bible-actions a:hover,[data-theme="dark"] .story-bible-nav a:hover,[data-theme="dark"] .story-bible-nav a:focus,[data-theme="dark"] .story-bible-actions a:focus{color:#21160f;background:#f1c38f;border-color:#ffd5a6}[data-theme="dark"] .metric-chart-frame,[data-theme="dark"] .attention-list article{background:#211b17}[data-theme="dark"] .purpose-stat-bar{background:rgba(231,214,190,.12)}[data-theme="dark"] .purpose-stat-bar span{background:var(--plotline-accent-dark)}[data-theme="dark"] .scene-inspector-root{color:var(--app-text);background:transparent}[data-theme="dark"] .inspector-nav-links a{color:#ead8c4;background:rgba(231,214,190,.08);border-color:rgba(231,214,190,.28)}[data-theme="dark"] .inspector-nav-links a:hover,[data-theme="dark"] .inspector-nav-links a:focus,[data-theme="dark"] .inspector-nav-links a.active{color:#fff4e8;background:rgba(241,195,143,.16);border-color:rgba(241,195,143,.52)}[data-theme="dark"] .thread-event-item,[data-theme="dark"] .asset-event-item,[data-theme="dark"] .story-asset-event-item{color:var(--app-text);background:#211b17;border-color:rgba(241,195,143,.24)}[data-theme="dark"] .thread-event-item p,[data-theme="dark"] .asset-event-item p,[data-theme="dark"] .story-asset-event-item p,[data-theme="dark"] .thread-event-item .muted,[data-theme="dark"] .asset-event-item .muted,[data-theme="dark"] .story-asset-event-item .muted{color:var(--app-text-muted)!important}[data-theme="dark"] .thread-event-marker,[data-theme="dark"] .asset-event-marker{color:#21160f;background:#d49a62;border-color:rgba(255,213,166,.72)}[data-theme="dark"] .timeline-workspace,[data-theme="dark"] .timeline-shell{background:linear-gradient(180deg,rgba(42,35,30,.96),rgba(29,24,21,.96)),var(--app-timeline-bg);border-color:var(--app-border)}[data-theme="dark"] .timeline-section-header,[data-theme="dark"] .metric-lane-label,[data-theme="dark"] .metric-shape-controls,[data-theme="dark"] .metric-chart-frame,[data-theme="dark"] .lane-board-heading,[data-theme="dark"] .plot-lane-board-heading,[data-theme="dark"] .pacing-heading,[data-theme="dark"] .lane-group-heading,[data-theme="dark"] .timeline-chapter-title,[data-theme="dark"] .timeline-book-title{color:var(--app-link);background:rgba(37,31,27,.96);border-color:var(--app-border)}[data-theme="dark"] .timeline-project-title{background:#352318}[data-theme="dark"] .timeline-chapter,[data-theme="dark"] .timeline-scene-card,[data-theme="dark"] .timeline-empty-scene,[data-theme="dark"] .plot-lane-label,[data-theme="dark"] .asset-lane-label,[data-theme="dark"] .character-lane-label,[data-theme="dark"] .plot-lane-slot,[data-theme="dark"] .asset-lane-slot,[data-theme="dark"] .character-lane-slot,[data-theme="dark"] .timeline-placeholder-scene,[data-theme="dark"] .timeline-placeholder-cell,[data-theme="dark"] .metric-graph-points,[data-theme="dark"] .timeline-minimap{color:var(--app-text);background:rgba(42,35,30,.9);border-color:var(--app-border)}[data-theme="dark"] .timeline-scene-card,[data-theme="dark"] .timeline-empty-scene{box-shadow:0 8px 18px rgba(0,0,0,.22)}[data-theme="dark"] .timeline-scene-card:hover,[data-theme="dark"] .timeline-scene-card.selected,[data-theme="dark"] .timeline-scene-card.focus-match,[data-theme="dark"] .timeline-scene-card.keyboard-focus,[data-theme="dark"] .timeline-scene-card.search-hit{border-color:rgba(212,154,98,.62);box-shadow:0 12px 28px rgba(0,0,0,.28)}[data-theme="dark"] .timeline-minimap button{color:var(--plotline-accent-dark);background:linear-gradient(180deg,#332920 0%,#241d18 100%);border-color:var(--plotline-border-soft)}[data-theme="dark"] .timeline-minimap button.is-active{color:#1c120d;background:linear-gradient(180deg,var(--plotline-accent-dark) 0%,var(--plotline-accent) 100%)}[data-theme="dark"] .drag-chip,[data-theme="dark"] .purpose-chip,[data-theme="dark"] .metric-mini-summary,[data-theme="dark"] .scene-pov-label,[data-theme="dark"] .location-pill,[data-theme="dark"] .archive-pill,[data-theme="dark"] .badge,[data-theme="dark"] .badge.text-bg-light,[data-theme="dark"] .status-pill,[data-theme="dark"] .archived-badge,[data-theme="dark"] .overview-chip,[data-theme="dark"] .breadcrumb-trail a,[data-theme="dark"] .breadcrumb-trail span,[data-theme="dark"] .scenario-tag,[data-theme="dark"] .plain-preview,[data-theme="dark"] .soft-count,[data-theme="dark"] .attachment-kind,[data-theme="dark"] .preset-chip,[data-theme="dark"] .story-bible-meta span{color:#f4eadc!important;background:rgba(212,154,98,.18)!important;border-color:rgba(241,195,143,.36)!important;box-shadow:none}[data-theme="dark"] .badge.text-bg-light,[data-theme="dark"] .soft-count,[data-theme="dark"] .status-pill,[data-theme="dark"] .archived-badge{color:#ead8c4!important;background:rgba(205,187,167,.16)!important;border-color:rgba(231,214,190,.36)!important}[data-theme="dark"] .badge.text-bg-warning,[data-theme="dark"] .badge.bg-warning,[data-theme="dark"] .warning-placeholder.active{color:#f6d8a6!important;background:rgba(187,126,54,.24)!important;border-color:rgba(224,173,101,.34)}[data-theme="dark"] .badge.bg-secondary,[data-theme="dark"] .badge.text-bg-secondary{color:#ead8c4!important;background:rgba(205,187,167,.16)!important;border-color:rgba(231,214,190,.34)}[data-theme="dark"] .badge.text-bg-success{color:#bddfc3!important;background:rgba(91,143,101,.22)!important;border-color:rgba(145,201,154,.3)}[data-theme="dark"] .badge.text-bg-danger,[data-theme="dark"] .badge.bg-danger{color:#f0b8b2!important;background:rgba(151,62,54,.3)!important;border-color:rgba(238,142,131,.35)}[data-theme="dark"] .badge.text-bg-info,[data-theme="dark"] .badge.bg-info{color:#b8dfe5!important;background:rgba(62,125,136,.28)!important;border-color:rgba(120,185,194,.34)}[data-theme="dark"] .severity-pill.info{color:#b8dfe5;background:rgba(62,125,136,.24);border-color:rgba(120,185,194,.34)}[data-theme="dark"] .severity-pill.warning{color:#f6d8a6;background:rgba(187,126,54,.24);border-color:rgba(224,173,101,.34)}[data-theme="dark"] .severity-pill.error{color:#f0b8b2;background:rgba(151,62,54,.3);border-color:rgba(238,142,131,.35)}[data-theme="dark"] .form-control,[data-theme="dark"] .form-select,[data-theme="dark"] textarea,[data-theme="dark"] input,[data-theme="dark"] select{color:var(--app-input-text);background-color:var(--app-input-bg);border-color:var(--app-border)}[data-theme="dark"] .form-control::placeholder,[data-theme="dark"] textarea::placeholder,[data-theme="dark"] input::placeholder{color:#a99886;opacity:1}[data-theme="dark"] .form-control:focus,[data-theme="dark"] .form-select:focus,[data-theme="dark"] .form-check-input:focus{border-color:var(--plotline-accent);box-shadow:0 0 0 .2rem rgba(212,154,98,.2)}[data-theme="dark"] .form-control:disabled,[data-theme="dark"] .form-select:disabled,[data-theme="dark"] input:disabled,[data-theme="dark"] select:disabled,[data-theme="dark"] textarea:disabled{color:#a99886;background-color:#1b1613;border-color:rgba(231,214,190,.12);opacity:1}[data-theme="dark"] .table{--bs-table-color:var(--app-text);--bs-table-bg:transparent;--bs-table-border-color:var(--app-border);--bs-table-striped-color:var(--app-text);--bs-table-striped-bg:rgba(255,255,255,.035);--bs-table-hover-color:var(--app-text);--bs-table-hover-bg:rgba(212,154,98,.1)}[data-theme="dark"] .modal-content,[data-theme="dark"] .plotline-confirm-modal{color:var(--app-text);background:var(--app-surface-alt);border-color:var(--app-border)}[data-theme="dark"] .modal-header,[data-theme="dark"] .modal-footer{border-color:var(--app-border)}[data-theme="dark"] .btn-close{filter:invert(1) grayscale(1) brightness(1.6)}[data-theme="dark"] .dropdown-menu{--bs-dropdown-color:var(--app-text);--bs-dropdown-bg:var(--app-surface-alt);--bs-dropdown-border-color:var(--app-border);--bs-dropdown-link-color:var(--app-text);--bs-dropdown-link-hover-color:var(--app-link);--bs-dropdown-link-hover-bg:rgba(212,154,98,.12);--bs-dropdown-link-active-color:#1c120d;--bs-dropdown-link-active-bg:var(--plotline-accent-dark);--bs-dropdown-link-disabled-color:#8f8172}[data-theme="dark"] .btn-outline-primary,[data-theme="dark"] .btn-outline-info{--bs-btn-color:#ffd5a6;--bs-btn-border-color:rgba(241,195,143,.58);--bs-btn-bg:rgba(241,195,143,.08);--bs-btn-hover-color:#fff4e8;--bs-btn-hover-bg:rgba(241,195,143,.18);--bs-btn-hover-border-color:rgba(255,213,166,.72);--bs-btn-active-color:#fff4e8;--bs-btn-active-bg:rgba(241,195,143,.24);--bs-btn-active-border-color:rgba(255,213,166,.82);--bs-btn-disabled-color:#9c8d7d;--bs-btn-disabled-border-color:rgba(231,214,190,.18);background-color:var(--bs-btn-bg)}[data-theme="dark"] .btn-outline-secondary,[data-theme="dark"] .btn-outline-dark,[data-theme="dark"] .btn-outline-light{--bs-btn-color:#ead8c4;--bs-btn-border-color:rgba(231,214,190,.46);--bs-btn-bg:rgba(231,214,190,.08);--bs-btn-hover-color:#fff4e8;--bs-btn-hover-bg:rgba(231,214,190,.16);--bs-btn-hover-border-color:rgba(241,220,196,.68);--bs-btn-active-color:#fff4e8;--bs-btn-active-bg:rgba(231,214,190,.22);--bs-btn-active-border-color:rgba(241,220,196,.64);--bs-btn-disabled-color:#8f8172;--bs-btn-disabled-border-color:rgba(231,214,190,.16);background-color:var(--bs-btn-bg)}[data-theme="dark"] .btn-outline-danger{--bs-btn-color:#ffb2aa;--bs-btn-border-color:rgba(238,142,131,.5);--bs-btn-hover-color:#2a1210;--bs-btn-hover-bg:#ffb2aa;--bs-btn-hover-border-color:#ffb2aa}[data-theme="dark"] .btn-outline-success{--bs-btn-color:#bddfc3;--bs-btn-border-color:rgba(145,201,154,.46);--bs-btn-bg:rgba(91,143,101,.12);--bs-btn-hover-color:#102016;--bs-btn-hover-bg:#bddfc3;--bs-btn-hover-border-color:#d2efd6;--bs-btn-active-color:#102016;--bs-btn-active-bg:#a8d7b0;--bs-btn-active-border-color:#d2efd6;--bs-btn-disabled-color:#8aa58e;--bs-btn-disabled-border-color:rgba(145,201,154,.2);background-color:var(--bs-btn-bg)}[data-theme="dark"] .nav-tabs{--bs-nav-tabs-border-color:var(--app-border);--bs-nav-tabs-link-hover-border-color:rgba(241,195,143,.28);--bs-nav-tabs-link-active-color:var(--app-text);--bs-nav-tabs-link-active-bg:var(--app-surface);--bs-nav-tabs-link-active-border-color:var(--app-border)}[data-theme="dark"] .context-header{color:var(--app-text);background:rgba(35,29,25,.94);border-color:rgba(241,195,143,.2)}[data-theme="dark"] .context-header .eyebrow{color:#dfc6aa}[data-theme="dark"] .context-title strong,[data-theme="dark"] .context-title strong span{color:#fff0df}[data-theme="dark"] .context-nav a{color:#f1dcc4;background:rgba(241,195,143,.1);border-color:rgba(241,195,143,.28)}[data-theme="dark"] .context-nav a:hover,[data-theme="dark"] .context-nav a:focus{color:#21160f;background:#f1c38f;border-color:#ffd5a6}[data-theme="dark"] .pw-project-nav{color:var(--app-text);border-color:rgba(241,195,143,.18);background:linear-gradient(135deg,rgba(42,35,30,.96),rgba(58,42,32,.58)),var(--app-surface);box-shadow:var(--plotline-shadow-subtle)}[data-theme="dark"] .pw-project-nav__label{color:#dfc6aa}[data-theme="dark"] .pw-character-nav{border-bottom-color:rgba(241,195,143,.16)}[data-theme="dark"] .pw-project-nav__link,[data-theme="dark"] .pw-character-nav__link{color:#f1dcc4;border-color:rgba(241,195,143,.26);background:rgba(241,195,143,.1);box-shadow:none}[data-theme="dark"] .pw-project-nav__link:hover,[data-theme="dark"] .pw-project-nav__link:focus,[data-theme="dark"] .pw-character-nav__link:hover,[data-theme="dark"] .pw-character-nav__link:focus{color:#21160f;border-color:#ffd5a6;background:#f1c38f;box-shadow:0 6px 14px rgba(0,0,0,.24)}[data-theme="dark"] .pw-project-nav__link.active,[data-theme="dark"] .pw-character-nav__link.active{color:#21160f;border-color:#ffd5a6;background:linear-gradient(180deg,#f1c38f,var(--plotline-accent));box-shadow:0 8px 18px rgba(0,0,0,.28)}[data-theme="dark"] .pw-actions__toggle{--bs-btn-color:#f1dcc4;--bs-btn-bg:rgba(241,195,143,.1);--bs-btn-border-color:rgba(241,195,143,.3);--bs-btn-hover-color:#21160f;--bs-btn-hover-bg:#f1c38f;--bs-btn-hover-border-color:#ffd5a6;--bs-btn-active-color:#21160f;--bs-btn-active-bg:var(--plotline-accent-dark);--bs-btn-active-border-color:#ffd5a6}[data-theme="dark"] .pw-actions .dropdown-menu{--bs-dropdown-color:var(--app-text);--bs-dropdown-bg:var(--app-surface-alt);--bs-dropdown-border-color:rgba(241,195,143,.22);--bs-dropdown-link-color:var(--app-text);--bs-dropdown-link-hover-color:#21160f;--bs-dropdown-link-hover-bg:#f1c38f;--bs-dropdown-divider-bg:rgba(241,195,143,.18)}[data-theme="dark"] .pw-actions .dropdown-item.text-danger{color:#ffb2aa!important}[data-theme="dark"] .project-tabs{border-color:rgba(241,195,143,.18);background:rgba(35,29,25,.88)}[data-theme="dark"] .project-tabs .nav-link{color:#ead8c4}[data-theme="dark"] .project-tabs .nav-link:hover,[data-theme="dark"] .project-tabs .nav-link:focus{color:#ffd5a6;background:rgba(241,195,143,.12)}[data-theme="dark"] .project-tabs .nav-link.active{color:#21160f;background:linear-gradient(180deg,#f1c38f,var(--plotline-accent))}[data-theme="dark"] .project-card{color:var(--app-text);border-color:var(--app-border);background:var(--app-surface)}[data-theme="dark"] .project-card:hover{border-color:rgba(241,195,143,.34)}[data-theme="dark"] .project-card__visual{background:radial-gradient(circle at 28% 24%,rgba(241,195,143,.22),transparent 11rem),linear-gradient(135deg,rgba(58,42,32,.96),rgba(33,56,61,.72))}[data-theme="dark"] .project-card__heading h2,[data-theme="dark"] .project-card__heading h2 a{color:var(--app-text)}[data-theme="dark"] .project-card__description{color:var(--app-text-muted)}[data-theme="dark"] .project-card__stats span{color:#ead8c4;border-color:rgba(231,214,190,.2);background:rgba(231,214,190,.08)}[data-theme="dark"] .project-card__stats strong{color:#ffd5a6}[data-theme="dark"] .project-card__actions{border-top-color:rgba(231,214,190,.14)}[data-theme="dark"] .project-cover-stack__cover{border-color:rgba(42,35,30,.92);box-shadow:0 14px 30px rgba(0,0,0,.38)}[data-theme="dark"] .project-cover-fallback{color:#21160f;border-color:rgba(241,195,143,.34);background:linear-gradient(180deg,rgba(255,244,232,.3),transparent 32%),linear-gradient(135deg,#f1c38f,var(--plotline-accent));box-shadow:0 14px 30px rgba(0,0,0,.34)}[data-theme="dark"] .character-gallery-upload,[data-theme="dark"] .character-relationship-edit-form,[data-theme="dark"] .character-gallery-card,[data-theme="dark"] .character-avatar-crop-stage,[data-theme="dark"] .character-avatar-preview{color:var(--app-text);border-color:var(--app-border);background:rgba(42,35,30,.9)}[data-theme="dark"] .character-gallery-card__actions{border-top-color:rgba(231,214,190,.14)}[data-theme="dark"] .character-gallery-card>img,[data-theme="dark"] .character-avatar-crop-stage,[data-theme="dark"] .character-avatar-preview{background:#211b17}[data-theme="dark"] .timeline-filter,[data-theme="dark"] .workspace-heading .button-row,[data-theme="dark"] .timeline-control-panel{color:var(--app-text)}[data-theme="dark"] .timeline-filter .form-select,[data-theme="dark"] .timeline-control-panel .form-control,[data-theme="dark"] .timeline-control-panel .form-select,[data-theme="dark"] .timeline-control-select .form-select{color:#fff0df;background-color:#251d18;border-color:rgba(241,195,143,.3)}[data-theme="dark"] .timeline-control-select,[data-theme="dark"] .timeline-control-panel .form-label,[data-theme="dark"] .timeline-filter-checks,[data-theme="dark"] .timeline-visibility-panel label,[data-theme="dark"] .timeline-preset-panel,[data-theme="dark"] .preset-chip,[data-theme="dark"] .metric-shape-intro,[data-theme="dark"] .metric-raw-details summary{color:#dfc6aa}[data-theme="dark"] .timeline-filter-drawer summary,[data-theme="dark"] .timeline-control-group summary,[data-theme="dark"] .timeline-drag-palette summary{color:#ffe2bd;background:rgba(241,195,143,.1)}[data-theme="dark"] .timeline-filter-drawer[open] summary,[data-theme="dark"] .timeline-control-group[open] summary,[data-theme="dark"] .timeline-drag-palette[open] summary{color:#fff4e8;background:rgba(241,195,143,.16)}[data-theme="dark"] .timeline-filter-drawer summary::after,[data-theme="dark"] .timeline-control-group summary::after,[data-theme="dark"] .timeline-drag-palette summary::after{color:#f1c38f}[data-theme="dark"] .timeline-visibility-panel label,[data-theme="dark"] .preset-chip{background:rgba(241,195,143,.1);border-color:rgba(241,195,143,.24)}[data-theme="dark"] .timeline-visibility-panel label:has(input:checked),[data-theme="dark"] .preset-chip:hover{color:#fff0df;background:rgba(241,195,143,.18);border-color:rgba(241,195,143,.38)}[data-theme="dark"] .metric-toggle-pill{color:#f1dcc4;background:rgba(241,195,143,.1);border-color:rgba(241,195,143,.24)}[data-theme="dark"] .metric-toggle-pill::before{border:1px solid rgba(255,244,232,.7);box-shadow:0 0 0 2px rgba(0,0,0,.2)}[data-theme="dark"] .metric-toggle-pill:has(input:checked){color:#fff4e8;background:rgba(241,195,143,.18);border-color:rgba(241,195,143,.42)}[data-theme="dark"] .metric-toggle-pill:hover,[data-theme="dark"] .metric-toggle-pill:focus-within{color:#fff;border-color:rgba(255,213,166,.58)}[data-theme="dark"] .character-marker,[data-theme="dark"] .character-appearance-pill{color:#24160d;background:#ffdca6;border-color:#fff0c9;box-shadow:0 0 0 1px rgba(36,22,13,.32),0 4px 10px rgba(0,0,0,.28)}[data-theme="dark"] .character-marker:hover,[data-theme="dark"] .character-appearance-pill:hover{color:#160d07;background:#fff0c9;border-color:#fff8df}[data-theme="dark"] .alert-info{--bs-alert-color:#c7e5ea;--bs-alert-bg:#142e34;--bs-alert-border-color:rgba(120,185,194,.34);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme="dark"] .alert-success{--bs-alert-color:#c8e7ce;--bs-alert-bg:#1b321f;--bs-alert-border-color:rgba(145,201,154,.32);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme="dark"] .alert-warning,[data-theme="dark"] .validation-summary-errors{--bs-alert-color:#f4d9a9;--bs-alert-bg:#352514;--bs-alert-border-color:rgba(224,173,101,.34);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme="dark"] .alert-danger{--bs-alert-color:#f0b8b2;--bs-alert-bg:#371b18;--bs-alert-border-color:rgba(238,142,131,.34);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme="dark"] .text-danger,[data-theme="dark"] .field-validation-error,[data-theme="dark"] .validation-summary-errors,[data-theme="dark"] .validation-summary-errors li{color:#e7a09a!important}[data-theme="dark"] .popover,.popover[data-theme="dark"],.popover.theme-audit-dark-popover{--bs-popover-bg:var(--app-surface-alt);--bs-popover-border-color:rgba(231,214,190,.18);--bs-popover-header-bg:rgba(241,195,143,.08);--bs-popover-header-color:#fff0df;--bs-popover-body-color:var(--app-text);color:var(--app-text);box-shadow:0 18px 42px rgba(0,0,0,.38)}[data-theme="dark"] .popover .popover-arrow::before,.popover[data-theme="dark"] .popover-arrow::before,.popover.theme-audit-dark-popover .popover-arrow::before{border-color:var(--bs-popover-border-color)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after,[data-theme="dark"] .bs-popover-top>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-top>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-top>.popover-arrow::after{border-top-color:var(--bs-popover-bg)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after,[data-theme="dark"] .bs-popover-end>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-end>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-end>.popover-arrow::after{border-right-color:var(--bs-popover-bg)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after,[data-theme="dark"] .bs-popover-bottom>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-bottom>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-bottom>.popover-arrow::after{border-bottom-color:var(--bs-popover-bg)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after,[data-theme="dark"] .bs-popover-start>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-start>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-start>.popover-arrow::after{border-left-color:var(--bs-popover-bg)}[data-theme="dark"] .plotline-help-popover .popover-header,.popover[data-theme="dark"] .popover-header,.popover.theme-audit-dark-popover .popover-header{color:#fff0df;background:rgba(241,195,143,.08);border-bottom-color:rgba(231,214,190,.16)}[data-theme="dark"] .plotline-help-more,.popover[data-theme="dark"] .plotline-help-more,.popover.theme-audit-dark-popover .plotline-help-more,[data-theme="dark"] .popover a,.popover[data-theme="dark"] a,.popover.theme-audit-dark-popover a{color:var(--app-link)}[data-theme="dark"] .plotline-help-more:hover,.popover[data-theme="dark"] .plotline-help-more:hover,.popover.theme-audit-dark-popover .plotline-help-more:hover,[data-theme="dark"] .popover a:hover,.popover[data-theme="dark"] a:hover,.popover.theme-audit-dark-popover a:hover{color:#ffd5a6}[data-theme="dark"] .accordion{--bs-accordion-color:var(--app-text);--bs-accordion-bg:var(--app-surface);--bs-accordion-border-color:rgba(231,214,190,.16);--bs-accordion-btn-color:#f1dcc4;--bs-accordion-btn-bg:#211b17;--bs-accordion-active-color:#fff0df;--bs-accordion-active-bg:rgba(212,154,98,.13);--bs-accordion-btn-focus-border-color:rgba(241,195,143,.42);--bs-accordion-btn-focus-box-shadow:0 0 0 .2rem rgba(212,154,98,.18);--bs-accordion-icon-color:#f1dcc4;--bs-accordion-icon-active-color:#fff0df}[data-theme="dark"] .accordion-button::after{filter:invert(91%) sepia(12%) saturate(676%) hue-rotate(340deg) brightness(103%) contrast(89%)}[data-theme="dark"] .pagination{--bs-pagination-color:#f1dcc4;--bs-pagination-bg:#211b17;--bs-pagination-border-color:rgba(231,214,190,.18);--bs-pagination-hover-color:#ffd5a6;--bs-pagination-hover-bg:rgba(212,154,98,.12);--bs-pagination-hover-border-color:rgba(241,195,143,.34);--bs-pagination-focus-color:#ffd5a6;--bs-pagination-focus-bg:rgba(212,154,98,.14);--bs-pagination-focus-box-shadow:0 0 0 .2rem rgba(212,154,98,.18);--bs-pagination-active-color:#21160f;--bs-pagination-active-bg:#d49a62;--bs-pagination-active-border-color:#d49a62;--bs-pagination-disabled-color:#8f8172;--bs-pagination-disabled-bg:rgba(35,29,25,.72);--bs-pagination-disabled-border-color:rgba(231,214,190,.11)}.plotline-help-layout{--help-drawer-width:25%;display:flex;align-items:stretch;width:100%;min-width:0;transition:gap .18s ease}.plotline-help-main{flex:1 1 auto;min-width:0;transition:flex-basis .18s ease}.plotline-help-splitter,.plotline-help-drawer{display:none}.plotline-help-layout.help-open .plotline-help-splitter{display:block;flex:0 0 8px;cursor:col-resize;background:linear-gradient(90deg,transparent,rgba(107,114,128,.22),transparent)}.plotline-help-layout.help-open .plotline-help-drawer{display:block;flex:0 0 clamp(20%,var(--help-drawer-width),50%);min-width:20%;max-width:50%;border-left:1px solid rgba(107,114,128,.22);background:rgba(255,253,248,.96);transition:flex-basis .18s ease}.plotline-help-layout.help-collapsed .plotline-help-splitter{display:none}.plotline-help-layout.help-collapsed .plotline-help-drawer{flex-basis:2.35rem;min-width:2.35rem;max-width:2.35rem}.plotline-help-layout.help-collapsed .plotline-help-drawer-panel{display:none}.plotline-help-collapsed-strip{display:none}.plotline-help-layout.help-collapsed .plotline-help-collapsed-strip{display:flex;align-items:center;justify-content:center;width:2.35rem;min-height:calc(100vh - 5rem);color:#5f6875;font-size:.78rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;writing-mode:vertical-rl;cursor:pointer}.plotline-help-drawer-panel{position:sticky;top:0;display:flex;flex-direction:column;max-height:calc(100vh - 1rem)}.plotline-help-drawer-header{display:flex;justify-content:space-between;gap:.75rem;align-items:flex-start;padding:1rem;border-bottom:1px solid rgba(107,114,128,.18)}.plotline-help-drawer-content{min-height:12rem;padding:1rem;overflow:auto}.help-drawer-article h2{margin-bottom:.5rem}.help-markdown-body{display:grid;gap:.75rem}.help-markdown-body h1,.help-markdown-body h2,.help-markdown-body h3,.help-markdown-body h4{margin:.5rem 0 0}.help-markdown-body p,.help-markdown-body ul{margin-bottom:0}.help-article-image{display:block;max-width:100%;height:auto;border:1px solid rgba(107,114,128,.18);border-radius:.45rem}.help-related-section{margin-top:1.25rem;padding-top:1rem;border-top:1px solid rgba(107,114,128,.18)}.help-related-section button{padding:0;color:#2f6f63;background:none;border:0;font-weight:700;text-align:left}.help-markdown-body .help-markdown-table{margin-bottom:0}.help-resizing{cursor:col-resize;user-select:none}.plotline-help-icon{display:inline-flex;align-items:center;justify-content:center;width:1.15rem;height:1.15rem;margin-left:.35rem;padding:0;color:#5f6875;font-size:.78rem;font-weight:800;line-height:1;background:transparent;border:1px solid rgba(95,104,117,.42);border-radius:999px;vertical-align:text-top}.plotline-help-icon-wrapper{display:inline-flex;vertical-align:text-top}.plotline-help-icon-wrapper-inline .plotline-help-icon{width:1rem;height:1rem;margin-left:.25rem;font-size:.68rem}.plotline-help-icon:hover,.plotline-help-icon:focus{color:#2f6f63;border-color:#2f6f63;outline:0}.plotline-help-popover{max-width:350px}.plotline-help-popover .popover-header{font-weight:800}.plotline-help-more{font-weight:700;text-decoration:none}[data-theme="dark"] .plotline-help-icon{color:#d8d0c4;border-color:rgba(216,208,196,.45)}[data-theme="dark"] .plotline-help-icon:hover,[data-theme="dark"] .plotline-help-icon:focus{color:#f1c38f;border-color:#f1c38f}[data-theme="dark"] .plotline-help-layout.help-open .plotline-help-drawer{border-left-color:rgba(255,255,255,.12);background:rgba(22,22,27,.97)}[data-theme="dark"] .plotline-help-drawer-header,[data-theme="dark"] .help-related-section{border-color:rgba(255,255,255,.12)}[data-theme="dark"] .plotline-help-collapsed-strip{color:#d8d0c4}.relationship-map-controls{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr)) auto auto auto;gap:.75rem;align-items:end;margin-bottom:1rem}.relationship-map-check{display:flex;gap:.45rem;align-items:center;min-height:2rem;margin:0;white-space:nowrap}.relationship-map-legend{display:grid;grid-template-columns:minmax(160px,max-content) 1fr;gap:.9rem 1.2rem;align-items:center;margin:0 0 1rem}.relationship-map-legend h2{margin:0;font-size:1rem}.relationship-map-legend-grid{display:flex;flex-wrap:wrap;gap:.45rem .8rem;align-items:center}.relationship-map-legend-item{display:inline-flex;gap:.45rem;align-items:center;padding:.28rem .45rem;color:inherit;background:transparent;border:1px solid transparent;border-radius:999px;font-size:.85rem;font-weight:650}.relationship-map-legend-line{display:inline-block;width:2.15rem;height:0;border-top:4px solid currentColor;border-radius:999px}.relationship-map-detail-badges .status-pill,.relationship-map-list-item .status-pill{border:1px solid transparent}.relationship-map-workspace{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,360px);gap:1rem;align-items:stretch}.relationship-map-canvas{min-height:660px;overflow:hidden}.relationship-map-toolbar{display:flex;justify-content:flex-end;gap:.4rem;margin-bottom:.6rem;padding-bottom:.45rem;border-bottom:1px solid rgba(107,114,128,.12)}.relationship-map-graph{width:100%;min-height:620px;border:1px solid rgba(107,114,128,.16);border-radius:.75rem;background:radial-gradient(circle at 20% 20%,rgba(196,124,44,.08),transparent 28rem),linear-gradient(180deg,rgba(255,253,248,.95),rgba(248,250,252,.86))}.relationship-map-details{position:sticky;top:1rem;align-self:start;max-height:calc(100vh - 2rem);overflow:auto}.relationship-map-detail-heading{display:flex;align-items:center;gap:.75rem}.relationship-map-detail-heading h2{margin-bottom:0}.relationship-map-detail-badges{display:flex;flex-wrap:wrap;gap:.35rem;margin:.4rem 0 .8rem}.relationship-map-detail-list{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:.25rem .75rem;margin:1rem 0}.relationship-map-detail-list dt{color:var(--muted-text,#667085);font-weight:600}.relationship-map-detail-list dd{margin:0}.relationship-map-history{display:grid;gap:.45rem;padding-left:1.1rem}.relationship-map-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:.6rem}.relationship-map-list-item{display:grid;gap:.25rem;padding:.8rem;text-align:left;color:inherit;background:var(--surface,#fff);border:1px solid rgba(107,114,128,.22);border-radius:.6rem;box-shadow:0 8px 20px rgba(31,41,55,.06)}.relationship-map-list-item:hover,.relationship-map-list-item:focus,.relationship-map-list-item.is-selected{border-color:#c47c2c;outline:0}.relationship-category-family{color:#7c3f12;border-color:#d89a5e;background:#fff1df}.relationship-category-friendship{color:#14532d;border-color:#7cc69a;background:#e7f8ed}.relationship-category-romantic{color:#831843;border-color:#efa3c1;background:#fde7f0}.relationship-category-hostile{color:#7f1d1d;border-color:#ee8f8f;background:#fee6e6}.relationship-category-professional{color:#1e3a8a;border-color:#93b4ef;background:#e8f0ff}.relationship-category-other{color:#374151;border-color:#bac2cf;background:#f2f4f7}[data-theme="dark"] .relationship-map-list-item{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.12)}[data-theme="dark"] .relationship-map-graph{border-color:rgba(255,255,255,.12);background:radial-gradient(circle at 20% 20%,rgba(241,195,143,.08),transparent 28rem),linear-gradient(180deg,rgba(33,32,38,.96),rgba(22,22,27,.92))}[data-theme="dark"] .relationship-map-toolbar{border-bottom-color:rgba(255,255,255,.1)}[data-theme="dark"] .relationship-category-family{color:#ffd2a5;background:rgba(184,101,34,.17);border-color:rgba(255,210,165,.3)}[data-theme="dark"] .relationship-category-friendship{color:#a8e8bf;background:rgba(47,158,95,.16);border-color:rgba(168,232,191,.3)}[data-theme="dark"] .relationship-category-romantic{color:#f8b5cf;background:rgba(217,70,127,.16);border-color:rgba(248,181,207,.3)}[data-theme="dark"] .relationship-category-hostile{color:#ffb4b4;background:rgba(220,63,63,.16);border-color:rgba(255,180,180,.3)}[data-theme="dark"] .relationship-category-professional{color:#b7cdf7;background:rgba(79,127,216,.16);border-color:rgba(183,205,247,.3)}[data-theme="dark"] .relationship-category-other{color:#d0d6df;background:rgba(122,135,150,.15);border-color:rgba(208,214,223,.28)}.marketing-shell{max-width:none;padding-right:0;padding-left:0}.marketing-shell main{padding-bottom:0!important}.marketing-home{--marketing-navy:#1f2a44;--marketing-gold:#d4a574;--marketing-cream:#faf8f5;--marketing-offwhite:#fcfbf9;--marketing-ink:#201a16;--marketing-muted:#6f655c;--marketing-rose:#9f5f55;--marketing-sage:#5f786c;--marketing-line:rgba(31,42,68,.12);--marketing-shadow:0 28px 70px rgba(31,42,68,.15);overflow:hidden;margin-top:-1rem;color:var(--marketing-ink);background:radial-gradient(circle at 88% 8%,rgba(212,165,116,.2),transparent 26rem),linear-gradient(180deg,var(--marketing-cream) 0%,var(--marketing-offwhite) 42%,#f6efe6 100%)}.marketing-container{width:min(1180px,calc(100% - 32px));margin-inline:auto}.marketing-eyebrow{margin:0 0 .8rem;color:#8b612e;font-size:.76rem;font-weight:850;letter-spacing:.12em;text-transform:uppercase}.marketing-home h1,.marketing-home h2,.marketing-home h3{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;letter-spacing:0;text-wrap:balance}.marketing-home h1{max-width:11ch;margin:0;font-size:clamp(3.2rem,7vw,6.35rem);line-height:.95}.marketing-home h2{margin:0;font-size:clamp(2.1rem,4.4vw,4rem);line-height:1.02}.marketing-home h3{margin:0;font-size:clamp(1.7rem,3vw,2.7rem);line-height:1.08}.marketing-lead,.problem-copy p,.founder-story p,.final-cta p,.section-heading p{color:var(--marketing-muted);font-size:clamp(1rem,1.5vw,1.18rem);line-height:1.7}.marketing-hero{position:relative;padding:clamp(2rem,5vw,3.75rem) 0 clamp(3.5rem,7vw,6rem)}.marketing-hero::before{content:"";position:absolute;inset:0 0 auto;height:54%;pointer-events:none;background:linear-gradient(115deg,rgba(31,42,68,.08),transparent 42%),radial-gradient(circle at 12% 20%,rgba(212,165,116,.22),transparent 24rem)}.marketing-hero__grid{position:relative;display:grid;grid-template-columns:minmax(0,.86fr) minmax(440px,1.14fr);gap:clamp(2rem,5vw,5rem);align-items:center}.marketing-hero__copy{display:grid;gap:1.35rem;align-content:center}.marketing-lead{max-width:42rem;margin:0}.marketing-actions{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.marketing-btn{display:inline-flex;align-items:center;justify-content:center;min-height:3.2rem;border:1px solid transparent;border-radius:999px;padding:.85rem 1.35rem;font-weight:800;line-height:1.1;text-decoration:none;transition:transform .18s ease,box-shadow .18s ease,background-color .18s ease,border-color .18s ease}.marketing-btn:hover,.marketing-btn:focus{transform:translateY(-1px)}.marketing-btn--primary{color:#fffaf2;background:linear-gradient(135deg,var(--marketing-navy),#26375e);box-shadow:0 16px 32px rgba(31,42,68,.22)}.marketing-btn--primary:hover,.marketing-btn--primary:focus{color:#fffaf2;box-shadow:0 20px 42px rgba(31,42,68,.28)}.marketing-btn--secondary{color:var(--marketing-navy);border-color:rgba(31,42,68,.18);background:rgba(255,255,255,.68);box-shadow:inset 0 1px 0 rgba(255,255,255,.88)}.marketing-btn--secondary:hover,.marketing-btn--secondary:focus{color:var(--marketing-navy);border-color:rgba(31,42,68,.3);background:#fffdf9}.hero-proof{display:flex;flex-wrap:wrap;gap:1rem;margin:0}.hero-proof div{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.55rem;align-items:center;max-width:18rem}.hero-proof dt{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:2.35rem;font-weight:700;line-height:1}.hero-proof dd{margin:0;color:var(--marketing-muted);font-weight:650;line-height:1.25}.browser-frame{border:1px solid rgba(31,42,68,.13);border-radius:22px;background:rgba(252,251,249,.72);box-shadow:var(--marketing-shadow);overflow:hidden}.hero-product{transform:rotate(1deg);animation:productFloat 7s ease-in-out infinite}.home-image-card{border:1px solid rgba(31,42,68,.13);border-radius:24px;background:rgba(252,251,249,.72);box-shadow:var(--marketing-shadow);overflow:hidden}.home-image-card img,.home-feature-image{display:block;max-width:100%;width:100%;height:auto}.home-hero-image img{background:#f8f1e7}@media(min-width:1061px){.marketing-hero{display:flex;align-items:center;min-height:calc(100vh - 5.5rem);padding-top:clamp(1.5rem,3vw,2.75rem);padding-bottom:clamp(1.5rem,3vw,2.75rem)}.home-hero-image{align-self:center;margin-top:clamp(-8rem,-8vw,-4rem)}}.writer-workspace{position:relative;min-height:560px;border:1px solid rgba(31,42,68,.13);border-radius:24px;padding:clamp(1rem,2.4vw,1.6rem);background:linear-gradient(135deg,rgba(255,253,249,.9),rgba(248,239,227,.76)),url("/images/home/hero-writing-workspace.webp") center/cover no-repeat,#f8f1e7;box-shadow:var(--marketing-shadow);overflow:hidden}.writer-workspace::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 16% 12%,rgba(212,165,116,.2),transparent 18rem),radial-gradient(circle at 92% 82%,rgba(95,120,108,.18),transparent 18rem);pointer-events:none}.workspace-manuscript,.workspace-card,.workspace-progress{position:absolute;z-index:1;border:1px solid rgba(31,42,68,.11);background:rgba(255,253,249,.94);box-shadow:0 18px 42px rgba(31,42,68,.12)}.workspace-manuscript{left:7%;top:8%;width:min(68%,460px);min-height:370px;border-radius:16px;padding:clamp(1.25rem,2vw,1.7rem)}.workspace-label,.workspace-card span{margin:0;color:#8b612e;font-size:.72rem;font-weight:850;letter-spacing:.1em;text-transform:uppercase}.workspace-manuscript h2{margin:.45rem 0 1.2rem;font-size:clamp(1.6rem,2.5vw,2.35rem)}.workspace-manuscript p:not(.workspace-label){margin:0 0 1rem;color:#4f4b45;font-family:Georgia,"Times New Roman",serif;font-size:1.05rem;line-height:1.75}.workspace-card{display:grid;gap:.35rem;width:min(45%,260px);border-radius:16px;padding:1rem}.workspace-card strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:1.18rem;line-height:1.15}.workspace-card small{color:var(--marketing-muted);font-size:.88rem;line-height:1.45}.workspace-character{right:6%;top:13%;border-left:5px solid var(--marketing-sage)}.workspace-thread{right:11%;top:40%;border-left:5px solid var(--marketing-gold)}.workspace-warning{right:5%;bottom:18%;border-left:5px solid var(--marketing-rose)}.workspace-progress{top:auto;left:13%;right:10%;bottom:4%;display:flex;gap:.55rem;height:3.75rem;border-radius:999px;padding:.65rem}.workspace-progress span{flex:1 1 0;border-radius:999px;padding:.58rem .7rem;color:#2a2119;background:rgba(212,165,116,.22);font-size:.82rem;font-weight:850;text-align:center}.workspace-progress span:nth-child(2){background:rgba(95,120,108,.2)}.workspace-progress span:nth-child(3){color:#fffaf2;background:var(--marketing-navy)}.browser-frame__chrome{display:flex;gap:.45rem;align-items:center;height:2.55rem;border-bottom:1px solid rgba(31,42,68,.1);padding:0 1rem;background:linear-gradient(180deg,#fffdf9,#f5efe7)}.browser-frame__chrome span{width:.72rem;height:.72rem;border-radius:999px;background:#d8cabf}.browser-frame__chrome span:nth-child(2){background:var(--marketing-gold)}.browser-frame__chrome span:nth-child(3){background:var(--marketing-sage)}.product-mockup{display:grid;grid-template-columns:170px minmax(0,1fr);min-height:470px;background:linear-gradient(135deg,rgba(255,255,255,.86),rgba(250,248,245,.92)),var(--marketing-offwhite)}.product-sidebar{display:grid;align-content:start;gap:.5rem;border-right:1px solid rgba(31,42,68,.1);padding:1.1rem;background:rgba(31,42,68,.96);color:rgba(255,250,242,.72)}.product-sidebar strong{margin-bottom:.8rem;color:#fffaf2;font-family:Georgia,"Times New Roman",serif;font-size:1.05rem}.product-sidebar span{border-radius:999px;padding:.5rem .7rem;font-size:.84rem;font-weight:750}.product-sidebar .is-active{color:#241b12;background:var(--marketing-gold)}.product-main{display:grid;gap:1rem;align-content:start;padding:clamp(1rem,2vw,1.45rem)}.product-topline{display:flex;justify-content:space-between;gap:1rem;align-items:start}.product-topline small,.mock-label{color:var(--marketing-muted);font-size:.78rem;font-weight:820;letter-spacing:.04em;text-transform:uppercase}.product-topline h2{margin-top:.25rem;font-size:clamp(1.5rem,2.4vw,2.15rem)}.product-topline>span{flex:0 0 auto;border-radius:999px;padding:.38rem .7rem;color:#294a35;background:#e5f1e8;font-size:.78rem;font-weight:800}.product-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,.9fr);gap:.85rem}.product-panel{display:grid;gap:.75rem;min-height:150px;border:1px solid rgba(31,42,68,.1);border-radius:16px;padding:1rem;background:rgba(255,253,249,.92);box-shadow:0 16px 30px rgba(31,42,68,.07)}.product-panel--wide{grid-row:span 2}.product-panel p{margin:0;color:var(--marketing-muted)}.mock-chart{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.55rem;align-items:end;min-height:220px;padding-top:1rem}.mock-chart span{height:var(--height);min-height:2.2rem;border-radius:999px 999px 8px 8px;background:linear-gradient(180deg,var(--marketing-gold),#8f5d3b);box-shadow:inset 0 1px 0 rgba(255,255,255,.45)}.thread-list{display:grid;gap:.55rem}.thread-list span{border-left:4px solid var(--marketing-gold);border-radius:10px;padding:.55rem .65rem;color:var(--marketing-navy);background:rgba(212,165,116,.13);font-weight:760}.problem-intro{padding:clamp(3rem,7vw,6rem) 0 1rem;text-align:center}.problem-intro h2,.section-heading h2{max-width:850px;margin-inline:auto}.problem-stack{padding:1rem 0 clamp(4rem,8vw,7rem)}.problem-section{display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);gap:clamp(1.5rem,5vw,5rem);align-items:center;min-height:460px;padding:clamp(2.5rem,6vw,5rem) 0}.problem-section--reverse .problem-visual{order:2}.problem-copy{display:grid;gap:1rem}.problem-copy p{max-width:36rem;margin:0}.problem-visual{position:relative;min-height:320px;border:1px solid rgba(31,42,68,.11);border-radius:24px;background:linear-gradient(135deg,rgba(255,253,249,.96),rgba(242,230,215,.88)),var(--marketing-offwhite);box-shadow:0 22px 56px rgba(31,42,68,.1);overflow:hidden}.problem-visual--image{display:grid;align-items:center;min-height:0;padding:.75rem;background:linear-gradient(135deg,rgba(255,253,249,.96),rgba(242,230,215,.88)),var(--marketing-offwhite)}.problem-visual--image::before,.problem-visual--image::after{display:none}.problem-visual--image .home-feature-image{grid-column:1/-1;justify-self:center;border-radius:18px;box-shadow:0 18px 42px rgba(31,42,68,.12)}.visual-plot{background:linear-gradient(135deg,rgba(255,253,249,.92),rgba(242,232,217,.82)),url("/images/home/plot-thread-map.webp") center/cover no-repeat,#f2e8d9}.visual-warning{background:linear-gradient(135deg,rgba(255,253,249,.94),rgba(242,230,215,.84)),url("/images/home/manuscript-continuity.webp") center/cover no-repeat,#f8f1e7}.visual-relationships{background:linear-gradient(135deg,rgba(255,253,249,.92),rgba(232,238,229,.82)),url("/images/home/character-relationship-board.webp") center/cover no-repeat,#eef3eb}.visual-flow{background:linear-gradient(135deg,rgba(255,253,249,.92),rgba(242,230,215,.82)),url("/images/home/story-timeline.webp") center/cover no-repeat,#f8f1e7}.visual-series{background:linear-gradient(135deg,rgba(255,253,249,.9),rgba(242,230,215,.8)),url("/images/home/series-dashboard.webp") center/cover no-repeat,#f8f1e7}.visual-notes span,.visual-docs span,.visual-series span,.visual-threads span,.visual-warning span{position:absolute;border:1px solid rgba(31,42,68,.1);border-radius:14px;padding:.75rem .9rem;color:var(--marketing-navy);background:#fffdf9;box-shadow:0 14px 28px rgba(31,42,68,.08);font-weight:760}.visual-notes span:nth-child(1){top:14%;left:12%;transform:rotate(-5deg)}.visual-notes span:nth-child(2){top:28%;right:10%;transform:rotate(4deg)}.visual-notes span:nth-child(3){bottom:22%;left:16%;transform:rotate(3deg)}.visual-notes span:nth-child(4){bottom:13%;right:18%;transform:rotate(-4deg)}.visual-plot{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;align-content:center;padding:2rem}.visual-plot::before{content:"";position:absolute;left:11%;right:11%;top:50%;height:.28rem;border-radius:999px;background:rgba(31,42,68,.16)}.visual-plot span{position:relative;display:grid;place-items:center;min-height:6.5rem;border:1px solid rgba(31,42,68,.1);border-radius:14px;padding:.75rem;color:var(--marketing-navy);background:#fffdf9;box-shadow:0 14px 28px rgba(31,42,68,.08);font-weight:800;text-align:center}.visual-plot span:nth-child(1),.visual-threads span:nth-child(1){border-top:5px solid var(--marketing-sage)}.visual-plot span:nth-child(2),.visual-threads span:nth-child(2){border-top:5px solid var(--marketing-gold)}.visual-plot span:nth-child(3),.visual-threads span:nth-child(3){border-top:5px solid var(--marketing-rose)}.visual-plot span:nth-child(4),.visual-threads span:nth-child(4){border-top:5px solid var(--marketing-navy)}.visual-warning{display:grid;gap:.75rem;align-content:center;padding:2rem}.visual-warning strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:1.6rem}.visual-warning span{position:static;border-left:4px solid var(--marketing-gold)}.visual-next{display:grid;align-content:center;gap:.8rem;padding:2rem}.visual-next small{color:#8b612e;font-weight:850;letter-spacing:.1em;text-transform:uppercase}.visual-next strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(2rem,4vw,3.5rem);line-height:1}.visual-next p{max-width:22rem;margin:0;color:var(--marketing-muted);font-size:1.1rem;line-height:1.6}.visual-next p+p{border-top:1px solid rgba(31,42,68,.11);padding-top:.75rem}.visual-docs span:nth-child(1){top:13%;left:12%}.visual-docs span:nth-child(2){top:23%;right:12%}.visual-docs span:nth-child(3){top:45%;left:23%}.visual-docs span:nth-child(4){bottom:18%;left:12%}.visual-docs span:nth-child(5){bottom:14%;right:15%}.visual-relationships::before,.visual-relationships::after{content:"";position:absolute;inset:22% 18%;border:2px solid rgba(31,42,68,.16);border-radius:50%}.visual-relationships::after{inset:34% 22%;border-color:rgba(212,165,116,.44);transform:rotate(22deg)}.person{position:absolute;z-index:1;display:grid;place-items:center;width:5rem;height:5rem;border:.4rem solid #fffaf2;border-radius:999px;color:#fffaf2;background:var(--marketing-navy);box-shadow:0 16px 30px rgba(31,42,68,.18);font-weight:850}.person-a{top:13%;left:18%}.person-b{top:21%;right:18%;background:var(--marketing-rose)}.person-c{bottom:17%;left:24%;background:var(--marketing-sage)}.person-d{right:24%;bottom:13%;background:var(--marketing-gold);color:#2a2119}.relationship-label{position:absolute;z-index:2;border-radius:999px;padding:.42rem .65rem;color:var(--marketing-navy);background:#fffdf9;box-shadow:0 12px 24px rgba(31,42,68,.1);font-size:.78rem;font-weight:850}.rel-trust{top:23%;left:43%}.rel-secret{top:47%;right:25%}.rel-threat{bottom:33%;left:34%}.rel-sister{bottom:23%;right:38%}.visual-threads{display:grid;grid-template-columns:repeat(4,1fr);gap:.85rem;align-content:center;padding:2rem}.visual-threads::before{content:"";position:absolute;left:11%;right:11%;top:50%;height:.32rem;border-radius:999px;background:rgba(31,42,68,.14)}.visual-threads span{position:relative;display:grid;place-items:center;min-height:6.5rem;text-align:center}.visual-series{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;align-content:center;padding:2rem}.visual-series span{position:static;display:grid;place-items:center;min-height:10.5rem;border-radius:12px 12px 18px 18px;color:#fffaf2;background:linear-gradient(180deg,var(--marketing-navy),#314263);text-align:center}.visual-series span:nth-child(2){background:linear-gradient(180deg,#75503a,#533424)}.visual-series span:nth-child(3){background:linear-gradient(180deg,#5f786c,#3d564b)}.visual-series span:nth-child(4){color:#2a2119;background:linear-gradient(180deg,#e1bd8e,var(--marketing-gold))}.visual-flow{display:grid;align-items:center;padding:2rem}.flow-line{position:absolute;left:8%;right:8%;top:50%;height:8rem;border-bottom:.38rem solid var(--marketing-gold);border-radius:0 0 50% 50%;transform:translateY(-54%)}.visual-flow span{position:absolute;left:var(--pos);bottom:26%;border-radius:999px;padding:.55rem .8rem;color:var(--marketing-navy);background:#fffaf2;box-shadow:0 12px 26px rgba(31,42,68,.1);font-weight:800}.social-proof{padding:clamp(4rem,8vw,7rem) 0;background:var(--marketing-offwhite)}.section-heading{display:grid;gap:.7rem;margin-bottom:clamp(1.5rem,4vw,3rem);text-align:center}.testimonial-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.testimonial-grid figure{display:grid;align-content:space-between;min-height:250px;margin:0;border:1px solid rgba(31,42,68,.1);border-radius:18px;padding:clamp(1.25rem,2.3vw,1.75rem);background:linear-gradient(180deg,rgba(255,253,249,.96),rgba(250,248,245,.88)),#fff;box-shadow:0 18px 42px rgba(31,42,68,.08)}.testimonial-grid blockquote{margin:0;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:1.32rem;line-height:1.4}.testimonial-grid figcaption{margin-top:1.35rem;color:#8b612e;font-weight:820}.founder-story{padding:clamp(4rem,8vw,7rem) 0;background:radial-gradient(circle at 10% 20%,rgba(212,165,116,.18),transparent 22rem),var(--marketing-cream)}.founder-story__grid{display:grid;grid-template-columns:minmax(180px,.35fr) minmax(0,.65fr);gap:clamp(1.5rem,5vw,4rem);align-items:center}.founder-mark{display:grid;place-items:center;aspect-ratio:1;border:1px solid rgba(31,42,68,.12);border-radius:28px;color:#fffaf2;background:linear-gradient(135deg,rgba(212,165,116,.3),transparent),var(--marketing-navy);box-shadow:var(--marketing-shadow);font-family:Georgia,"Times New Roman",serif;font-size:clamp(3rem,8vw,6rem)}.founder-story h2{margin-bottom:1rem}.founder-story p{max-width:48rem;margin:0 0 1rem}.final-cta{padding:clamp(4rem,8vw,7rem) 0;background:var(--marketing-navy)}.final-cta__inner{display:grid;justify-items:center;gap:1rem;border:1px solid rgba(255,250,242,.14);border-radius:28px;padding:clamp(2.25rem,6vw,5rem) clamp(1rem,5vw,4rem);background:radial-gradient(circle at 50% 0%,rgba(212,165,116,.28),transparent 26rem),linear-gradient(135deg,rgba(255,255,255,.06),transparent);text-align:center;box-shadow:0 28px 70px rgba(10,16,29,.2)}.final-cta h2{color:#fffaf2}.final-cta p{max-width:42rem;margin:0 0 .75rem;color:rgba(255,250,242,.78)}.final-cta .marketing-eyebrow{color:var(--marketing-gold)}.final-cta .marketing-btn--primary{color:#241b12;background:linear-gradient(135deg,#e3bd8e,var(--marketing-gold));box-shadow:0 16px 34px rgba(0,0,0,.22)}.final-cta .marketing-btn--primary:hover,.final-cta .marketing-btn--primary:focus{color:#241b12}.pricing-page{margin-top:-1rem}.pricing-hero{padding:clamp(2rem,5vw,3.75rem) 0 clamp(2.5rem,6vw,4.5rem);background:radial-gradient(circle at 18% 20%,rgba(212,165,116,.2),transparent 24rem),linear-gradient(180deg,var(--marketing-cream),var(--marketing-offwhite))}.pricing-hero__inner{display:grid;justify-items:center;gap:1.1rem;text-align:center}.pricing-hero h1{max-width:12ch}.pricing-hero .marketing-lead{max-width:46rem}.pricing-message{border:1px solid rgba(31,42,68,.12);border-radius:16px;padding:1rem 1.1rem;margin:1rem 0 0;color:var(--marketing-navy);background:rgba(255,253,249,.9);box-shadow:0 14px 32px rgba(31,42,68,.08);font-weight:750}.pricing-plans,.pricing-compare,.pricing-faq{padding:clamp(3.5rem,7vw,6rem) 0}.pricing-plans{background:var(--marketing-offwhite)}.pricing-compare{background:radial-gradient(circle at 90% 20%,rgba(95,120,108,.12),transparent 24rem),var(--marketing-cream)}.pricing-faq{background:var(--marketing-offwhite)}.pricing-empty{border:1px solid rgba(31,42,68,.11);border-radius:22px;padding:clamp(1.5rem,4vw,2.5rem);background:rgba(255,253,249,.92);box-shadow:0 18px 42px rgba(31,42,68,.08);text-align:center}.pricing-empty p{margin:.75rem auto 0;max-width:42rem;color:var(--marketing-muted);line-height:1.7}.pricing-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1rem;align-items:stretch}.pricing-card{position:relative;display:grid;gap:1.25rem;align-content:start;min-height:100%;border:1px solid rgba(31,42,68,.11);border-radius:22px;padding:clamp(1.2rem,2.4vw,1.65rem);background:linear-gradient(180deg,rgba(255,253,249,.98),rgba(250,248,245,.9)),#fff;box-shadow:0 18px 42px rgba(31,42,68,.08)}.pricing-card::before{content:"";display:block;height:1.9rem}.pricing-card--featured{border-color:rgba(212,165,116,.7);box-shadow:0 26px 58px rgba(31,42,68,.13)}.pricing-card--trial{border-color:rgba(95,120,108,.52);background:linear-gradient(180deg,rgba(255,253,249,.98),rgba(235,241,237,.9)),#fff;box-shadow:0 24px 54px rgba(31,42,68,.11);min-width:0}.pricing-card--trial .pricing-card__heading,.pricing-card--trial .pricing-price,.pricing-card--trial .pricing-feature-list,.pricing-card--trial .pricing-card__actions{min-width:0}.pricing-badge{position:absolute;top:clamp(1.2rem,2.4vw,1.65rem);right:clamp(1.2rem,2.4vw,1.65rem);width:fit-content;margin:0;border:1px solid rgba(212,165,116,.55);border-radius:999px;padding:.38rem .7rem;color:#634019;background:rgba(212,165,116,.22);font-size:.76rem;font-weight:850;letter-spacing:.08em;text-transform:uppercase}.pricing-badge--trial{border-color:rgba(95,120,108,.48);color:#314b42;background:rgba(95,120,108,.18)}.pricing-card__heading{display:grid;gap:.5rem;min-height:6.85rem;align-content:start}.pricing-card h3,.comparison-grid h3,.faq-grid h3{margin:0;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(1.35rem,2vw,1.75rem);line-height:1.12}.pricing-card__heading p{margin:0;color:var(--marketing-muted);line-height:1.55}.pricing-price{display:grid;gap:.2rem;border-top:1px solid rgba(31,42,68,.1);border-bottom:1px solid rgba(31,42,68,.1);padding:1rem 0}.pricing-price strong{display:inline-flex;gap:.35rem;align-items:baseline;width:fit-content;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(2.15rem,4vw,3rem);line-height:1;white-space:nowrap}.pricing-price span,.pricing-price small{color:var(--marketing-muted);font-weight:720}.pricing-price small{font-size:.88rem}.pricing-price strong small{color:var(--marketing-muted);font-family:"Segoe UI","Aptos",system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.88rem;font-weight:800;line-height:1;white-space:nowrap}.pricing-price .pricing-price__value{color:var(--marketing-navy);white-space:nowrap}.pricing-price>small{white-space:nowrap}.pricing-card--trial .pricing-price>small{white-space:normal;overflow-wrap:anywhere}.public-info-page{margin-top:-1rem}.public-hero{padding:clamp(2rem,5vw,3.75rem) 0 clamp(2.5rem,6vw,4.5rem);background:radial-gradient(circle at 18% 20%,rgba(212,165,116,.2),transparent 24rem),linear-gradient(180deg,var(--marketing-cream),var(--marketing-offwhite))}.public-hero__inner{display:grid;justify-items:center;gap:1.05rem;text-align:center}.public-hero h1{max-width:13ch}.public-hero .marketing-lead{max-width:50rem}.public-updated{margin:0;border:1px solid rgba(31,42,68,.12);border-radius:999px;padding:.45rem .85rem;color:var(--marketing-muted);background:rgba(255,253,249,.78);font-weight:760}.public-content-section,.public-mission{padding:clamp(3.5rem,7vw,6rem) 0}.public-content-section{background:var(--marketing-offwhite)}.public-content-section--soft,.public-mission{background:radial-gradient(circle at 90% 20%,rgba(95,120,108,.12),transparent 24rem),var(--marketing-cream)}.public-narrative,.public-policy{max-width:860px}.public-narrative{display:grid;gap:1rem}.public-narrative p,.public-policy p,.public-policy li,.public-card p{color:var(--marketing-muted);font-size:clamp(1rem,1.45vw,1.13rem);line-height:1.75}.public-narrative p{margin:0}.public-narrative strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(1.7rem,3vw,2.45rem);line-height:1.15}.public-feature-panel{border:1px solid rgba(31,42,68,.11);border-radius:28px;padding:clamp(2rem,5vw,4rem);background:rgba(255,253,249,.9);box-shadow:0 22px 56px rgba(31,42,68,.1);text-align:center}.public-feature-panel h2{max-width:860px;margin:0 auto;font-size:clamp(2rem,4vw,3.6rem)}.public-card-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.public-card{border:1px solid rgba(31,42,68,.1);border-radius:18px;padding:clamp(1.1rem,2.2vw,1.5rem);background:linear-gradient(180deg,rgba(255,253,249,.96),rgba(250,248,245,.88)),#fff;box-shadow:0 16px 36px rgba(31,42,68,.07)}.public-card h2,.public-policy h2{margin:0;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(1.35rem,2.1vw,1.85rem)}.public-card p{margin:.7rem 0 0}.public-policy{display:grid;gap:clamp(1.4rem,3vw,2.1rem)}.public-policy section{border-bottom:1px solid rgba(31,42,68,.1);padding-bottom:clamp(1.2rem,2.6vw,1.8rem)}.public-policy p{margin:.65rem 0 0}.public-policy ul{display:grid;gap:.55rem;margin:.75rem 0 0;padding-left:1.25rem}.public-policy a,.public-card a{color:var(--marketing-navy);font-weight:820}.public-disclaimer{border:1px solid rgba(212,165,116,.38);border-radius:18px;padding:1rem 1.1rem;background:rgba(212,165,116,.13)}.public-disclaimer p{margin:0;color:#6b4a22;font-size:.96rem;font-weight:720}.public-footer{border-top:1px solid rgba(255,250,242,.12);background:#1f2a44}.public-footer__inner{display:flex;justify-content:space-between;gap:1rem;align-items:center;padding-top:1.25rem;padding-bottom:1.25rem}.public-footer__brand{color:#fffaf2;font-family:Georgia,"Times New Roman",serif;font-size:1.25rem;font-weight:700;text-decoration:none}.public-footer__brand:hover,.public-footer__brand:focus{color:#d4a574}.public-footer__nav{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.55rem 1rem}.public-footer__nav a{color:rgba(255,250,242,.76);font-size:.92rem;font-weight:760;text-decoration:none}.public-footer__nav a:hover,.public-footer__nav a:focus{color:#d4a574}.pricing-feature-list{display:grid;gap:.65rem;margin:0;padding:0;list-style:none}.pricing-feature-list li{position:relative;padding-left:1.35rem;color:var(--marketing-navy);font-weight:740;line-height:1.35}.pricing-feature-list li::before{content:"";position:absolute;left:0;top:.44rem;width:.58rem;height:.58rem;border-radius:999px;background:var(--marketing-gold);box-shadow:0 0 0 4px rgba(212,165,116,.18)}.pricing-card__actions{display:grid;gap:.7rem;margin-top:auto}.pricing-card__actions .marketing-btn{width:100%}.pricing-card--trial .pricing-card__actions .marketing-btn{box-sizing:border-box;max-width:100%;padding-inline:.95rem;text-align:center;white-space:normal}.pricing-link{display:inline-flex;justify-content:center;color:var(--marketing-navy);font-weight:820;text-decoration-color:rgba(31,42,68,.24)}.pricing-link:hover,.pricing-link:focus{color:#8b612e}.comparison-grid,.faq-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.comparison-grid article,.faq-grid article{border:1px solid rgba(31,42,68,.1);border-radius:18px;padding:clamp(1.1rem,2.2vw,1.5rem);background:rgba(255,253,249,.9);box-shadow:0 16px 36px rgba(31,42,68,.07)}.comparison-grid p,.faq-grid p{margin:.7rem 0 0;color:var(--marketing-muted);line-height:1.7}.reveal-section{opacity:0;transform:translateY(24px);transition:opacity .72s ease,transform .72s ease}.marketing-hero.reveal-section{opacity:1;transform:none}.reveal-section.is-visible{opacity:1;transform:translateY(0)}@keyframes productFloat{0%,100%{transform:rotate(1deg) translateY(0)}50%{transform:rotate(1deg) translateY(-12px)}}@media(prefers-reduced-motion:reduce){.hero-product,.reveal-section{animation:none;transition:none}.reveal-section{opacity:1;transform:none}}@media(max-width:1060px){.marketing-hero__grid,.problem-section,.founder-story__grid{grid-template-columns:1fr}.marketing-home h1{max-width:13ch}.hero-product{transform:none;animation:none}.problem-section--reverse .problem-visual{order:0}.testimonial-grid{grid-template-columns:1fr}.comparison-grid,.faq-grid,.public-card-grid{grid-template-columns:1fr}}@media(max-width:760px){.marketing-container{width:min(100% - 24px,1180px)}.marketing-home{margin-top:-.75rem}.marketing-hero{padding-top:1.8rem}.marketing-actions,.marketing-actions .marketing-btn{width:100%}.product-mockup{grid-template-columns:1fr;min-height:0}.product-sidebar{display:flex;gap:.4rem;overflow-x:auto;border-right:0;border-bottom:1px solid rgba(31,42,68,.1)}.product-sidebar strong{flex:0 0 auto;margin:0 .4rem 0 0}.product-sidebar span{flex:0 0 auto}.product-topline,.hero-proof{display:grid}.hero-proof{grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem}.hero-proof div{display:block}.hero-proof dt{font-size:1.8rem}.hero-proof dd{font-size:.86rem}.product-grid{grid-template-columns:1fr}.writer-workspace{display:grid;gap:.75rem;min-height:0;transform:none;animation:none}.writer-workspace::before{display:none}.workspace-manuscript,.workspace-card,.workspace-progress{position:relative;inset:auto;width:auto}.workspace-manuscript{min-height:0}.workspace-progress{flex-direction:column;height:auto;border-radius:18px}.mock-chart{min-height:145px}.problem-section{min-height:0;padding:2.25rem 0}.problem-visual{min-height:260px;border-radius:18px}.visual-plot,.visual-series,.visual-threads{grid-template-columns:repeat(2,1fr);padding:1rem}.visual-series span{min-height:7.5rem}.visual-docs span,.visual-notes span{max-width:12rem;font-size:.88rem}.founder-mark{max-width:220px}.pricing-hero{padding-top:1.8rem}.pricing-card-grid{grid-template-columns:1fr}.public-hero{padding-top:1.8rem}.public-footer__inner{align-items:flex-start;flex-direction:column}.public-footer__nav{justify-content:flex-start}}@media(max-width:520px){.marketing-home h1{font-size:clamp(2.7rem,13vw,3.55rem);line-height:1}.browser-frame{border-radius:16px}.product-sidebar span:not(.is-active){display:none}.visual-flow span{font-size:.78rem}.person{width:4.3rem;height:4.3rem}}@media(max-width:1200px){.timeline-filter-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.timeline-control-panel{align-items:stretch}.relationship-map-controls{grid-template-columns:repeat(2,minmax(150px,1fr))}.relationship-map-workspace{grid-template-columns:1fr}.relationship-map-details{position:static;max-height:none}}@media(max-width:760px){.workspace-heading,.page-heading,.context-header{align-items:stretch;flex-direction:column}.button-row{align-items:stretch}.button-row .btn,.button-row form{width:100%}.attachment-preview-row{grid-template-columns:1fr}.attachment-thumb{width:100%;max-width:260px}.inspector-nav-links{max-height:8.5rem}} \ No newline at end of file +:root{--plotline-bg:#f4efe6;--plotline-bg-warm:#fbf8f0;--plotline-surface:rgba(255, 252, 246, 0.94);--plotline-surface-elevated:#fffdf8;--plotline-border-soft:rgba(84, 68, 48, 0.14);--plotline-text:#241f1b;--plotline-text-muted:#74695d;--plotline-accent:#7a4d2c;--plotline-accent-dark:#59371f;--plotline-accent-soft:#f2e2cf;--plotline-secondary:#315f67;--plotline-secondary-soft:#dfecef;--plotline-danger:#963f36;--plotline-warning:#b8762b;--plotline-success:#4d7654;--plotline-timeline-bg:#ede2d3;--plotline-shadow-card:0 14px 32px rgba(62, 45, 28, 0.08);--plotline-shadow-subtle:0 8px 20px rgba(62, 45, 28, 0.06);--plotline-radius:12px;--plotline-radius-sm:9px;--plotline-ink:var(--plotline-text);--plotline-muted:var(--plotline-text-muted);--plotline-paper:var(--plotline-bg-warm);--plotline-panel:var(--plotline-surface);--plotline-line:var(--plotline-border-soft);--plotline-soft:var(--plotline-accent-soft);--app-bg:var(--plotline-bg);--app-surface:var(--plotline-surface);--app-surface-alt:var(--plotline-surface-elevated);--app-text:var(--plotline-text);--app-text-muted:var(--plotline-text-muted);--app-border:var(--plotline-border-soft);--app-link:var(--plotline-accent-dark);--app-input-bg:rgba(255, 253, 248, 0.9);--app-input-text:var(--plotline-text);--app-card-bg:var(--plotline-surface);--app-timeline-bg:var(--plotline-timeline-bg)}[data-theme=dark]{color-scheme:dark;--plotline-bg:#14110f;--plotline-bg-warm:#1c1714;--plotline-surface:rgba(35, 29, 25, 0.96);--plotline-surface-elevated:#2a231e;--plotline-border-soft:rgba(231, 214, 190, 0.16);--plotline-text:#f1e7d8;--plotline-text-muted:#b9aa99;--plotline-accent:#d49a62;--plotline-accent-dark:#f0c99d;--plotline-accent-soft:#3a2a20;--plotline-secondary:#78b9c2;--plotline-secondary-soft:#21383d;--plotline-danger:#ee8e83;--plotline-warning:#e0ad65;--plotline-success:#91c99a;--plotline-timeline-bg:#211b17;--plotline-shadow-card:0 16px 38px rgba(0, 0, 0, 0.34);--plotline-shadow-subtle:0 10px 26px rgba(0, 0, 0, 0.24);--plotline-ink:var(--plotline-text);--plotline-muted:var(--plotline-text-muted);--plotline-paper:var(--plotline-bg-warm);--plotline-panel:var(--plotline-surface);--plotline-line:var(--plotline-border-soft);--plotline-soft:var(--plotline-accent-soft);--app-bg:#14110f;--app-surface:rgba(35, 29, 25, 0.96);--app-surface-alt:#2a231e;--app-text:#f4eadc;--app-text-muted:#cdbba7;--app-border:rgba(231, 214, 190, 0.2);--app-link:#f1c38f;--app-input-bg:#211b17;--app-input-text:#f4eadc;--app-card-bg:rgba(35, 29, 25, 0.96);--app-timeline-bg:#211b17;--bs-body-bg:var(--app-bg);--bs-body-color:var(--app-text);--bs-secondary-color:var(--app-text-muted);--bs-tertiary-color:#a99886;--bs-border-color:var(--app-border);--bs-link-color:var(--app-link);--bs-link-hover-color:#ffd5a6;--bs-card-bg:var(--app-card-bg);--bs-card-color:var(--app-text);--bs-modal-bg:var(--app-surface-alt);--bs-modal-color:var(--app-text);--bs-dropdown-bg:var(--app-surface-alt);--bs-dropdown-color:var(--app-text);--bs-list-group-bg:var(--app-surface);--bs-list-group-color:var(--app-text);--bs-table-color:var(--app-text);--bs-table-bg:transparent}body{color:var(--plotline-text);background:radial-gradient(circle at top left,rgba(185,134,83,.18),transparent 34rem),linear-gradient(135deg,var(--plotline-bg-warm),var(--plotline-bg) 52%,#efe6d8);font-family:"Segoe UI",Aptos,system-ui,-apple-system,BlinkMacSystemFont,sans-serif}.context-title strong,.navbar-brand,h1,h2,h3{font-family:Georgia,"Times New Roman",serif;letter-spacing:.01em}a{color:var(--plotline-accent-dark);text-decoration-color:rgba(122,77,44,0.28);text-underline-offset:0.18em}a:hover{color:var(--plotline-secondary)}.plotline-nav{position:relative;z-index:1030;background:rgba(255,251,243,.9)!important;border-bottom:1px solid rgba(84,68,48,.13)!important;box-shadow:0 8px 28px rgba(62,45,28,.06)}.navbar-brand{color:var(--plotline-accent-dark)!important;font-size:1.35rem}.plotline-nav .nav-link{border-radius:999px;color:var(--plotline-text-muted)!important;font-weight:650;padding-inline:0.82rem}.plotline-nav .nav-link:focus,.plotline-nav .nav-link:hover{color:var(--plotline-accent-dark)!important;background:rgba(122,77,44,.1)}.page-heading h1,.workspace-heading h1{color:#201a16;text-wrap:balance}.eyebrow{color:var(--plotline-accent);font-size:.72rem;letter-spacing:.11em}.lead-text,.muted{color:var(--plotline-text-muted)!important}.archive-item-card,.drag-drop-panel,.edit-panel,.empty-panel,.import-confirmation,.import-docs details,.import-tree-book,.list-section,.plain-card,.scenario-chapter,.story-bible-card,.story-bible-section,.warning-card,.warning-mini-card{background:var(--plotline-surface);border-color:var(--plotline-border-soft);border-radius:var(--plotline-radius);box-shadow:var(--plotline-shadow-subtle)}.archive-item-card,.inspector-section,.plain-card,.story-bible-card,.timeline-scene-card{transition:box-shadow .18s ease,transform .18s ease,border-color .18s ease}.archive-item-card:hover,.plain-card:hover,.story-bible-card:hover{border-color:rgba(122,77,44,.24);box-shadow:var(--plotline-shadow-card)}.empty-panel{background:linear-gradient(135deg,rgba(255,253,248,.96),rgba(244,229,209,.72)),var(--plotline-surface)}.btn{border-radius:999px;font-weight:700;letter-spacing:.01em;box-shadow:none}.btn-primary{--bs-btn-bg:var(--plotline-accent);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent-dark);--bs-btn-hover-border-color:var(--plotline-accent-dark);--bs-btn-active-bg:var(--plotline-accent-dark);--bs-btn-active-border-color:var(--plotline-accent-dark)}.btn-outline-primary,.btn-outline-secondary{--bs-btn-color:var(--plotline-accent-dark);--bs-btn-border-color:rgba(122, 77, 44, 0.26);--bs-btn-hover-color:var(--plotline-accent-dark);--bs-btn-hover-bg:rgba(122, 77, 44, 0.12);--bs-btn-hover-border-color:rgba(122, 77, 44, 0.38);background:rgba(255,252,246,.72)}.btn-outline-danger{--bs-btn-color:var(--plotline-danger);--bs-btn-border-color:rgba(150, 63, 54, 0.34);--bs-btn-hover-bg:var(--plotline-danger);--bs-btn-hover-border-color:var(--plotline-danger)}.archived-badge,.location-badge,.overview-chip,.purpose-chip,.severity-pill,.status-pill,.story-bible-card-title span{border:1px solid rgba(84,68,48,.13);border-radius:999px;background:rgba(255,250,241,.82);color:var(--plotline-text-muted);box-shadow:inset 0 1px 0 rgba(255,255,255,.75);font-weight:750;letter-spacing:.02em}.status-pill{background:var(--plotline-secondary-soft);color:#284f56}.purpose-chip{background:var(--plotline-accent-soft);color:var(--plotline-accent-dark)}.severity-pill.warning,.warning-placeholder.active{background:#fbecd3;color:#7b4b13;border-color:rgba(184,118,43,.28)}.context-header{background:rgba(255,251,243,.78);border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius);box-shadow:var(--plotline-shadow-subtle)}.context-nav a{border-radius:999px;color:var(--plotline-text-muted);font-weight:700}.context-nav a:focus,.context-nav a:hover{background:rgba(122,77,44,.1);color:var(--plotline-accent-dark)}.pw-page-heading{align-items:center;gap:clamp(.85rem,2vw,1.35rem);margin-bottom:1rem}.pw-page-heading>div:first-child{min-width:min(100%,26rem)}.pw-page-heading .lead-text{max-width:52rem}.pw-project-nav{display:grid;gap:.55rem;margin:0 0 1.1rem;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius);padding:.7rem .75rem;background:linear-gradient(135deg,rgba(255,253,248,.9),rgba(242,226,207,.55)),var(--plotline-surface);box-shadow:var(--plotline-shadow-subtle)}.pw-project-nav__label{color:var(--plotline-accent);font-size:.68rem;font-weight:850;letter-spacing:.1em;line-height:1;text-transform:uppercase}.pw-character-nav,.pw-project-nav__links{display:flex;flex-wrap:wrap;gap:.42rem;align-items:center}.pw-character-nav__link,.pw-project-nav__link{display:inline-flex;align-items:center;justify-content:center;min-height:2rem;border:1px solid rgba(84,68,48,.16);border-radius:999px;padding:.32rem .68rem;color:var(--plotline-accent-dark);background:rgba(255,250,241,.82);box-shadow:inset 0 1px 0 rgba(255,255,255,.72);font-size:.8rem;font-weight:780;line-height:1.1;text-decoration:none;transition:background-color .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease}.pw-character-nav__link:focus,.pw-character-nav__link:hover,.pw-project-nav__link:focus,.pw-project-nav__link:hover{color:var(--plotline-accent-dark);border-color:rgba(122,77,44,.32);background:rgba(122,77,44,.11);box-shadow:inset 0 1px 0 rgba(255,255,255,.62),0 5px 12px rgba(62,45,28,.06)}.pw-character-nav__link.active,.pw-project-nav__link.active{color:#fff8ec;border-color:var(--plotline-accent);background:linear-gradient(180deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow:0 6px 14px rgba(62,45,28,.16)}.pw-character-nav{margin:0 0 1rem;border-bottom:1px solid rgba(84,68,48,.11);padding-bottom:.65rem}.pw-actions{flex:0 0 auto}.pw-actions__toggle{--bs-btn-color:var(--plotline-accent-dark);--bs-btn-bg:rgba(255, 250, 241, 0.86);--bs-btn-border-color:rgba(122, 77, 44, 0.32);--bs-btn-hover-color:#fff8ec;--bs-btn-hover-bg:var(--plotline-accent);--bs-btn-hover-border-color:var(--plotline-accent);--bs-btn-active-color:#fff8ec;--bs-btn-active-bg:var(--plotline-accent-dark);--bs-btn-active-border-color:var(--plotline-accent-dark);min-height:2.35rem;padding-inline:1rem;box-shadow:var(--plotline-shadow-subtle)}.pw-actions .dropdown-menu{--bs-dropdown-bg:var(--plotline-surface-elevated);--bs-dropdown-color:var(--plotline-text);--bs-dropdown-border-color:var(--plotline-border-soft);--bs-dropdown-link-color:var(--plotline-text);--bs-dropdown-link-hover-color:var(--plotline-accent-dark);--bs-dropdown-link-hover-bg:rgba(122, 77, 44, 0.1);--bs-dropdown-divider-bg:rgba(84, 68, 48, 0.13);border-radius:var(--plotline-radius-sm);box-shadow:var(--plotline-shadow-card)}.pw-actions .dropdown-item{font-weight:650}.pw-actions .dropdown-item.text-danger{color:var(--plotline-danger)!important}.pw-actions .dropdown-item.text-danger:focus,.pw-actions .dropdown-item.text-danger:hover{color:#fff8ec!important;background:var(--plotline-danger)}.project-gallery{display:grid;gap:1rem}.project-tabs{gap:.45rem;padding:.35rem;border:1px solid var(--plotline-border-soft);border-radius:999px;background:rgba(255,250,241,.72);box-shadow:var(--plotline-shadow-subtle);width:fit-content;max-width:100%}.project-tabs .nav-link{border-radius:999px;color:var(--plotline-text-muted);font-weight:800;padding:.48rem .9rem}.project-tabs .nav-link:focus,.project-tabs .nav-link:hover{color:var(--plotline-accent-dark);background:rgba(122,77,44,.1)}.project-tabs .nav-link.active{color:#fff8ec;background:linear-gradient(180deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow:0 8px 16px rgba(62,45,28,.14)}.project-tab-content{min-width:0}.project-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,22rem),1fr));gap:1rem}.project-card{display:grid;grid-template-rows:auto 1fr auto;overflow:hidden;min-height:100%;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius);background:var(--plotline-surface);box-shadow:var(--plotline-shadow-subtle);transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.project-card:hover{border-color:rgba(122,77,44,.24);box-shadow:var(--plotline-shadow-card);transform:translateY(-1px)}.project-card--archived{opacity:.88}.project-card__visual{position:relative;display:grid;place-items:center;min-height:11rem;overflow:hidden;background:radial-gradient(circle at 26% 22%,rgba(255,255,255,.64),transparent 11rem),linear-gradient(135deg,rgba(242,226,207,.94),rgba(223,236,239,.78))}.project-card--archived .project-card__visual{filter:saturate(.55)}.project-card__body{display:grid;gap:.75rem;padding:1rem 1rem .85rem}.project-card__heading{display:flex;justify-content:space-between;gap:.8rem}.project-card__heading h2{margin:0;font-size:1.35rem;line-height:1.1}.project-card__heading h2 a{color:var(--plotline-text);text-decoration-color:rgba(122,77,44,0.28)}.project-card__description{display:-webkit-box;min-height:3.2rem;margin:0;overflow:hidden;color:var(--plotline-text-muted);-webkit-box-orient:vertical;-webkit-line-clamp:3}.project-card__stats{display:flex;flex-wrap:wrap;gap:.45rem}.project-card__stats span{display:inline-flex;align-items:baseline;gap:.25rem;border:1px solid rgba(84,68,48,.12);border-radius:999px;padding:.28rem .6rem;color:var(--plotline-text-muted);background:rgba(255,250,241,.74);font-size:.82rem;font-weight:700}.project-card__stats strong{color:var(--plotline-accent-dark)}.project-card__actions{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;border-top:1px solid rgba(84,68,48,.1);padding:.85rem 1rem 1rem}.project-card__actions form{display:inline-flex;margin:0}.project-cover-stack{position:relative;width:min(11.5rem,70%);height:9.4rem}.project-cover-stack__cover{position:absolute;top:50%;left:50%;width:4.65rem;aspect-ratio:2/3;border:3px solid rgba(255,253,248,.86);border-radius:.45rem;background:var(--plotline-soft);box-shadow:0 12px 28px rgba(62,45,28,.22);object-fit:cover}.project-cover-stack__cover--0{z-index:3;transform:translate(-50%,-50%) rotate(-1deg) scale(1.08)}.project-cover-stack__cover--1{z-index:2;transform:translate(-88%,-47%) rotate(-8deg) scale(.94)}.project-cover-stack__cover--2{z-index:1;transform:translate(-12%,-47%) rotate(8deg) scale(.94)}.project-cover-fallback{display:grid;place-items:center;width:min(9.5rem,62%);aspect-ratio:2/3;border:1px solid rgba(84,68,48,.18);border-radius:.8rem;background:linear-gradient(180deg,rgba(255,253,248,.34),transparent 32%),linear-gradient(135deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow:0 14px 30px rgba(62,45,28,.2);color:#fff8ec}.project-cover-fallback span{font-family:Georgia,"Times New Roman",serif;font-size:clamp(2.2rem, 7vw, 3.2rem);font-weight:700;letter-spacing:.02em}.project-empty-state{margin:0}.character-gallery-upload{display:grid;grid-template-columns:minmax(14rem,1fr) minmax(14rem,1fr) auto;gap:.75rem;align-items:end;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);padding:.85rem;background:rgba(255,250,241,.56)}.character-relationship-editor{gap:.85rem}.character-relationship-read{display:grid;gap:.75rem}.character-relationship-edit-form{width:100%;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);padding:.85rem;background:rgba(255,250,241,.56)}.character-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,14rem),1fr));gap:.9rem}.character-gallery-card{overflow:hidden;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);background:rgba(255,253,248,.72);box-shadow:var(--plotline-shadow-subtle)}.character-gallery-card>img{display:block;width:100%;aspect-ratio:4/3;background:var(--plotline-soft);object-fit:cover}.character-gallery-card__body{display:grid;gap:.3rem;padding:.75rem}.character-gallery-card__actions{border-top:1px solid rgba(84,68,48,.1);padding:0 .75rem .75rem}.character-avatar-crop-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,16rem);gap:1rem;align-items:start}.character-avatar-crop-stage{position:relative;display:grid;place-items:center;min-height:24rem;overflow:hidden;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);background:var(--plotline-soft)}.character-avatar-crop-stage img{display:block;max-width:100%;max-height:70vh;user-select:none}.character-avatar-crop-box{position:absolute;cursor:move;touch-action:none;border:2px solid #fff8ec;box-shadow:0 0 0 9999px rgba(20,17,15,.42),0 0 0 1px rgba(0,0,0,.18)}.character-avatar-crop-box span{position:absolute;right:.35rem;bottom:.35rem;width:.75rem;height:.75rem;border-right:2px solid #fff8ec;border-bottom:2px solid #fff8ec}.character-avatar-crop-side{display:grid;gap:.75rem}.character-avatar-preview{width:min(100%,12rem);aspect-ratio:1;overflow:hidden;border:1px solid var(--plotline-border-soft);border-radius:999px;background:var(--plotline-soft);box-shadow:var(--plotline-shadow-subtle)}.character-avatar-preview img{display:block;max-width:none;transform-origin:top left}@media (max-width:767.98px){.pw-page-heading{align-items:stretch}.pw-page-heading .pw-actions,.pw-page-heading .pw-actions__toggle{width:100%}.pw-project-nav{padding:.65rem}.project-tabs{width:100%;border-radius:var(--plotline-radius)}.project-tabs .nav-item,.project-tabs .nav-link{flex:1 1 auto}.project-card__actions .btn,.project-card__actions .dropdown{flex:1 1 auto}.character-avatar-crop-layout,.character-gallery-upload{grid-template-columns:1fr}}.timeline-workspace{background:linear-gradient(180deg,rgba(255,251,244,.84),rgba(237,226,211,.66)),var(--plotline-timeline-bg);border:1px solid rgba(84,68,48,.16);border-radius:var(--plotline-radius);box-shadow:0 18px 44px rgba(62,45,28,.1)}.timeline-chapter{background:rgba(255,250,242,.68);border-color:rgba(84,68,48,.15);border-radius:var(--plotline-radius)}.lane-board-heading,.lane-group-heading,.plot-lane-board-heading,.timeline-chapter-title{background:linear-gradient(135deg,rgba(255,252,246,.96),rgba(244,229,209,.86));border-color:rgba(84,68,48,.16);color:var(--plotline-accent-dark)}.timeline-scene-card{background:linear-gradient(180deg,#fffdf8,#fbf3e8);border:1px solid rgba(84,68,48,.16);border-radius:var(--plotline-radius-sm);box-shadow:0 10px 24px rgba(62,45,28,.08)}.timeline-scene-card.focus-match,.timeline-scene-card.keyboard-focus,.timeline-scene-card.selected,.timeline-scene-card:hover{border-color:rgba(122,77,44,.42);box-shadow:0 0 0 3px rgba(122,77,44,.11),0 16px 30px rgba(62,45,28,.12);transform:translateY(-1px)}.asset-lane-label,.asset-lane-slot,.character-lane-label,.character-lane-slot,.plot-lane-label,.plot-lane-slot{background:rgba(255,251,244,.74);border-color:rgba(84,68,48,.14)}.asset-marker,.character-appearance-pill,.thread-marker{box-shadow:0 4px 12px rgba(62,45,28,.12)}.scene-inspector-panel{background:rgba(255,251,243,.72)}.form-control,.form-select{border-color:rgba(84,68,48,.2);border-radius:10px;background-color:rgba(255,253,248,.9)}.btn:focus-visible,.form-control:focus,.form-select:focus,a:focus-visible{border-color:rgba(122,77,44,.56);box-shadow:0 0 0 .22rem rgba(122,77,44,.17);outline:0}.auth-page-heading{justify-content:center;max-width:560px;margin-right:auto;margin-left:auto;text-align:center}.auth-page-heading>div{width:100%}.auth-page-heading .lead-text{margin-right:auto;margin-left:auto;text-align:center}.auth-card{max-width:560px;margin:0 auto;padding:clamp(1.75rem,4vw,2.5rem)}.auth-form{display:flex;flex-direction:column;gap:1.35rem;border-top:0;padding-top:0}.auth-form .alert{margin-bottom:0}.auth-field-stack{display:grid;gap:1rem}.auth-field-stack .form-label{font-weight:650}.auth-field-stack .form-check{display:inline-flex;align-items:center;gap:.45rem;margin-bottom:0;color:var(--plotline-text-muted);font-weight:650}.auth-actions{display:flex;justify-content:center;gap:.75rem;flex-wrap:wrap}.auth-actions .btn{min-width:8.75rem}.auth-help{margin:0;text-align:center;font-size:.95rem}.auth-help a{font-weight:650}.two-factor-card{max-width:560px;margin:0 auto;padding:clamp(1.75rem,4vw,2.5rem)}.two-factor-body{display:flex;flex-direction:column;align-items:center;text-align:center;gap:1.5rem;border-top:0;padding-top:0}.two-factor-body .alert{width:100%;margin-bottom:0}.two-factor-code-group{display:grid;justify-items:center;gap:.75rem;width:100%}.two-factor-label{margin-bottom:0;font-weight:700;color:var(--plotline-text)}.two-factor-inputs{display:flex;justify-content:center;gap:.75rem;width:100%}.two-factor-digit{width:3.5rem;height:3.5rem;padding:0;text-align:center;font-size:1.6rem;font-weight:760;line-height:1;border-radius:.75rem;border-color:rgba(122,77,44,.28);background:var(--plotline-surface-elevated);color:var(--plotline-text)}.two-factor-digit:focus{border-color:var(--plotline-accent);box-shadow:0 0 0 .22rem rgba(122,77,44,.2),0 10px 22px rgba(62,45,28,.1)}.two-factor-actions{display:flex;justify-content:center;gap:.75rem;flex-wrap:wrap}.two-factor-actions .btn{min-width:8.75rem}.two-factor-help{display:grid;justify-items:center;gap:.2rem;margin:0;font-size:.95rem;color:var(--plotline-text-muted)}.two-factor-help a{font-weight:650}.two-factor-code-group .text-danger{min-height:1.4rem}@media (max-width:576px){.two-factor-card{padding:1.35rem}.two-factor-inputs{gap:.4rem}.two-factor-digit{width:3rem;height:3rem;font-size:1.45rem}.two-factor-actions{flex-direction:column;width:100%}.two-factor-actions .btn{width:100%}.auth-card{padding:1.35rem}.auth-actions{flex-direction:column;width:100%}.auth-actions .btn{width:100%}}.plotline-confirm-modal{background:#fffaf2;border:1px solid rgba(84,68,48,.16);border-radius:var(--plotline-radius);box-shadow:0 24px 60px rgba(38,30,22,.2)}.plotline-confirm-modal .modal-footer,.plotline-confirm-modal .modal-header{border-color:rgba(84,68,48,.12)}.alert-info,.alert-warning{border-color:rgba(84,68,48,.16);border-radius:var(--plotline-radius-sm);background:rgba(255,250,241,.92);color:var(--plotline-text)}.trial-dashboard-banner,.trial-status-panel{border-color:rgba(84,68,48,.16);background:linear-gradient(135deg,rgba(255,253,248,.96),rgba(242,226,207,.56)),var(--plotline-surface);box-shadow:var(--plotline-shadow-subtle)}.trial-status-panel--signup{border-color:rgba(49,95,103,.22);background:linear-gradient(135deg,rgba(223,236,239,.72),rgba(255,253,248,.92)),var(--plotline-surface)}.trial-dashboard-banner h2,.trial-status-panel h2,.trial-status-panel h3{color:var(--plotline-text)}.trial-progress{box-shadow:inset 0 1px 2px rgba(62,45,28,.08)}.trial-progress__bar{background:linear-gradient(90deg,var(--plotline-secondary),var(--plotline-accent))}.trial-status--fourteen-days{border-color:rgba(184,118,43,.28)}.trial-status--one-day,.trial-status--seven-days,.trial-status--three-days{border-color:rgba(184,118,43,.38);background:linear-gradient(135deg,rgba(251,236,211,.84),rgba(255,253,248,.92)),var(--plotline-surface)}.table{--bs-table-bg:transparent;--bs-table-color:var(--plotline-text);--bs-table-border-color:rgba(84, 68, 48, 0.12)}.page-heading,.workspace-heading{row-gap:.8rem}.page-heading h1,.workspace-heading h1{color:#211915}.lead-text{line-height:1.55}.btn-sm{padding:.28rem .72rem;font-size:.8rem}.button-row{gap:.55rem}.button-row .btn,.story-bible-actions a,.timeline-filter-actions .btn,.timeline-preset-panel .btn{white-space:nowrap}.attachment-kind,.badge,.preset-chip,.soft-count,.story-bible-meta span{border-radius:999px;font-weight:780;letter-spacing:.015em}.badge.text-bg-light,.soft-count,.story-bible-meta span{border:1px solid rgba(84,68,48,.13);background:rgba(255,250,241,.78)!important;color:var(--plotline-text-muted)!important}.badge.text-bg-warning,.warning-placeholder.active{border:1px solid rgba(184,118,43,.28);background:#fbecd3!important;color:#7b4b13!important}.badge.text-bg-success{background:rgba(77,118,84,.13)!important;color:#315936!important}.empty-panel,.future-lane-placeholder,.inspector-empty{position:relative;overflow:hidden}.empty-panel::before,.future-lane-placeholder::before,.inspector-empty::before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:linear-gradient(180deg,var(--plotline-accent),var(--plotline-secondary));opacity:.42}.timeline-workspace{padding:.35rem}.timeline-shell{border-color:rgba(84,68,48,.14);background:linear-gradient(90deg,rgba(84,68,48,.05) 1px,transparent 1px) 0 0/calc(var(--timeline-scene-width) + var(--timeline-grid-gap)) 100%,linear-gradient(180deg,rgba(255,252,246,.94),rgba(244,235,221,.86))}.timeline-book-title,.timeline-project-title{border:1px solid rgba(45,33,23,.12);background:linear-gradient(135deg,rgba(49,95,103,.96),rgba(89,55,31,.94));box-shadow:8px 0 24px rgba(62,45,28,.1)}.timeline-book{padding:.15rem}.timeline-book-title{min-height:58px;align-content:center}.timeline-chapter{border:1px solid rgba(84,68,48,.13);background:linear-gradient(180deg,rgba(255,252,246,.78),rgba(242,226,207,.42));outline:0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.6)}.timeline-chapter-title{min-height:52px;border-bottom:1px solid rgba(84,68,48,.13);border-radius:var(--plotline-radius-sm) var(--plotline-radius-sm) 0 0;backdrop-filter:blur(10px)}.timeline-book-title strong,.timeline-chapter-title strong{font-size:.96rem}.timeline-scenes{padding:.65rem}.timeline-empty-scene,.timeline-scene-card{border-radius:11px}.timeline-scene-card{position:relative;min-height:176px;border-color:rgba(84,68,48,.15);background:linear-gradient(180deg,rgba(255,253,248,.98),rgba(251,243,232,.95));box-shadow:0 10px 22px rgba(62,45,28,.08)}.timeline-scene-card::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.85)}.timeline-scene-card strong{color:#221a15;font-size:.98rem;line-height:1.2}.scene-summary{color:var(--plotline-text-muted);line-height:1.38}.dependency-placeholder,.location-pill,.metric-mini-summary,.scene-pov-label,.warning-placeholder{border:1px solid rgba(84,68,48,.13);box-shadow:inset 0 1px 0 rgba(255,255,255,.68)}.timeline-placeholder-cell,.timeline-placeholder-scene{border-color:rgba(84,68,48,.18);color:rgba(84,68,48,.58);background:repeating-linear-gradient(-45deg,rgba(122,77,44,.06) 0 8px,rgba(255,255,255,.18) 8px 16px),rgba(255,252,246,.52)}.timeline-scene-card.focus-match,.timeline-scene-card.keyboard-focus,.timeline-scene-card.search-hit,.timeline-scene-card.selected,.timeline-scene-card:hover{z-index:3}.timeline-scene-card.focus-match::before,.timeline-scene-card.keyboard-focus::before,.timeline-scene-card.search-hit::before,.timeline-scene-card.selected::before{content:"";position:absolute;left:.65rem;right:.65rem;top:0;height:3px;border-radius:999px;background:linear-gradient(90deg,var(--plotline-accent),var(--plotline-secondary))}.lane-board-heading,.pacing-heading,.timeline-section-header{border:1px solid rgba(84,68,48,.13);backdrop-filter:blur(10px)}.asset-lane-board,.character-lane-board,.plot-lane-board{border-top-color:rgba(84,68,48,.12)}.asset-lane-label,.character-lane-label,.plot-lane-label{border-radius:10px;background:rgba(255,252,246,.94);box-shadow:6px 0 18px rgba(62,45,28,.06)}.character-lane-label{display:flex;align-items:center;gap:.55rem}.character-lane-label>span{display:grid;gap:.1rem;min-width:0}.character-lane-label small{color:var(--plotline-muted);font-size:.75rem;font-weight:700}.asset-lane-slot,.character-lane-slot,.plot-lane-slot{min-height:50px;border-radius:10px}.asset-marker,.character-appearance-pill,.character-marker,.thread-marker{min-height:24px;font-size:.7rem}.thread-marker{border-color:color-mix(in srgb,var(--plot-colour),#241f1b 18%)}.asset-marker{border-radius:8px;background:#eeeaf8}.character-marker{display:inline-flex;align-items:center;justify-content:center;background:#fff4d9}.drag-chip,[draggable=true]{transition:transform .12s ease,box-shadow .12s ease,opacity .12s ease}.drag-chip.character{display:inline-flex;align-items:center;gap:.4rem}.character-lane-label .visual-avatar,.drag-chip .visual-avatar{flex:0 0 auto}.drag-chip:hover,[draggable=true]:hover{transform:translateY(-1px)}.is-dragging{opacity:.55;box-shadow:0 0 0 3px rgba(49,95,103,.14)}.drop-target-active{outline-color:rgba(49,95,103,.34);background-color:rgba(223,236,239,.55)}.drag-drop-panel,.timeline-control-panel,.timeline-drag-palette{background:rgba(255,251,243,.82);backdrop-filter:blur(10px)}.timeline-control-group,.timeline-filter-drawer{border-color:rgba(84,68,48,.13);box-shadow:inset 0 1px 0 rgba(255,255,255,.75)}.scene-inspector-panel{border-color:rgba(84,68,48,.14);box-shadow:-14px 0 36px rgba(62,45,28,.07)}.inspector-header{border-bottom:1px solid rgba(84,68,48,.12);margin-bottom:.75rem;padding-bottom:.7rem}.inspector-empty h2,.inspector-header h2{color:#211915}.writer-mini-card{border-color:rgba(84,68,48,.13);background:rgba(255,253,248,.78)}.writer-mini-card[open]{box-shadow:0 10px 24px rgba(62,45,28,.07)}.writer-add-form,.writer-edit-form{gap:.5rem}.attachment-card-list{gap:.65rem}.attachment-summary{align-items:center}.attachment-kind{display:inline-flex;align-items:center;border:1px solid rgba(49,95,103,.18);padding:2px 8px;background:var(--plotline-secondary-soft);color:#284f56;font-size:.72rem;text-transform:uppercase}.attachment-preview-row{display:grid;grid-template-columns:96px minmax(0,1fr);gap:.75rem;align-items:start}.attachment-thumb{display:flex;align-items:center;justify-content:center;width:96px;aspect-ratio:4/3;overflow:hidden;border:1px solid rgba(84,68,48,.14);border-radius:10px;background:rgba(255,250,241,.88);text-decoration:none}.attachment-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .18s ease}.attachment-thumb:hover img{transform:scale(1.04)}.attachment-thumb-fallback span{color:var(--plotline-text-muted);font-size:.76rem;font-weight:850;letter-spacing:.06em;text-transform:uppercase}.attachment-preview-copy{display:grid;gap:.45rem;min-width:0}.attachment-preview-copy p{margin:0}.attachment-add-card summary{color:var(--plotline-accent-dark)}.story-bible-section,.writer-dashboard-panel{border-color:rgba(84,68,48,.14);background:rgba(255,251,243,.8)}.writer-dashboard-panel:first-child{border-color:rgba(49,95,103,.22);background:linear-gradient(135deg,rgba(223,236,239,.56),rgba(255,251,243,.9));box-shadow:0 18px 38px rgba(49,95,103,.09)}.writer-queue-list{display:grid;gap:.75rem}.writer-queue-card{border-color:rgba(84,68,48,.13);background:rgba(255,253,248,.86)}.writer-dashboard-panel:first-child .writer-queue-card:first-child{border-left:4px solid var(--plotline-secondary)}.writer-queue-card h3{line-height:1.25}.story-bible-nav{background:rgba(255,251,243,.78);border:1px solid rgba(84,68,48,.12);border-radius:var(--plotline-radius);padding:.45rem}.story-bible-card{background:rgba(255,253,248,.9)}.story-bible-card h3{color:#211915}.story-bible-card-title{gap:.8rem}.story-bible-facts{border-top:1px solid rgba(84,68,48,.1);padding-top:.65rem}.story-bible-actions a{border-color:rgba(122,77,44,.2);background:rgba(255,250,241,.75)}.story-bible-actions a:hover{background:rgba(122,77,44,.1)}.timeline-settings-form{display:grid;gap:1rem;max-width:1180px}.timeline-settings-section{display:grid;gap:.85rem}.timeline-settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:.75rem}.timeline-setting-card{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.72rem;align-items:start;min-height:92px;border:1px solid rgba(84,68,48,.13);border-radius:var(--plotline-radius-sm);padding:.85rem;background:rgba(255,253,248,.82);box-shadow:var(--plotline-shadow-subtle);cursor:pointer}.timeline-setting-card input{margin-top:.25rem;accent-color:var(--plotline-secondary)}.timeline-setting-card small,.timeline-setting-card strong{display:block}.timeline-setting-card strong{color:#211915}.timeline-setting-card small{margin-top:.25rem;color:var(--plotline-text-muted);line-height:1.4}.timeline-setting-card:has(input:checked){border-color:rgba(49,95,103,.25);background:linear-gradient(135deg,rgba(223,236,239,.52),rgba(255,253,248,.92))}.plotline-confirm-modal .modal-title{font-family:Georgia,"Times New Roman",serif}.plotline-confirm-modal .modal-body{color:var(--plotline-text-muted);line-height:1.55}.theme-switcher{flex:0 0 auto}.theme-switcher .btn{--bs-btn-color:var(--plotline-text-muted);--bs-btn-border-color:var(--plotline-border-soft);--bs-btn-hover-color:var(--plotline-accent-dark);--bs-btn-hover-bg:rgba(122, 77, 44, 0.1);--bs-btn-hover-border-color:rgba(122, 77, 44, 0.28);--bs-btn-active-color:#ffffff;--bs-btn-active-bg:var(--plotline-accent);--bs-btn-active-border-color:var(--plotline-accent);font-weight:700}[data-theme=dark] body{color:var(--app-text);background:radial-gradient(circle at top left,rgba(212,154,98,.12),transparent 34rem),linear-gradient(135deg,var(--plotline-bg-warm),var(--plotline-bg) 52%,#0f0d0c)}[data-theme=dark] a:not(.btn){color:var(--app-link);text-decoration-color:rgba(241,195,143,0.36)}[data-theme=dark] a:not(.btn):focus,[data-theme=dark] a:not(.btn):hover{color:var(--bs-link-hover-color)}[data-theme=dark] .form-text,[data-theme=dark] .inspector-empty,[data-theme=dark] .lead-text,[data-theme=dark] .plain-card p,[data-theme=dark] .plotline-confirm-modal .modal-body,[data-theme=dark] .plotline-nav .nav-link,[data-theme=dark] .plotline-nav .navbar-text,[data-theme=dark] .scene-summary,[data-theme=dark] .text-muted,[data-theme=dark] .timeline-book-title span,[data-theme=dark] .timeline-chapter-title span,[data-theme=dark] .timeline-setting-card small{color:var(--app-text-muted)!important}[data-theme=dark] .plotline-nav{background:rgba(29,23,20,.92)!important;border-bottom-color:var(--plotline-border-soft)!important;box-shadow:0 8px 28px rgba(0,0,0,.24)}[data-theme=dark] .plotline-nav .nav-link.active,[data-theme=dark] .plotline-nav .nav-link:focus,[data-theme=dark] .plotline-nav .nav-link:hover{color:var(--app-link)!important}[data-theme=dark] .navbar-toggler{border-color:var(--plotline-border-soft)}[data-theme=dark] .asset-card h2,[data-theme=dark] .character-card h2,[data-theme=dark] .context-title strong,[data-theme=dark] .inspector-empty h2,[data-theme=dark] .inspector-header h2,[data-theme=dark] .inspector-section h3,[data-theme=dark] .page-heading h1,[data-theme=dark] .plain-card h2,[data-theme=dark] .plain-card h3,[data-theme=dark] .story-bible-card h3,[data-theme=dark] .timeline-book-title strong,[data-theme=dark] .timeline-chapter-title strong,[data-theme=dark] .timeline-scene-card strong,[data-theme=dark] .timeline-setting-card strong,[data-theme=dark] .workspace-heading h1,[data-theme=dark] h1,[data-theme=dark] h2,[data-theme=dark] h3,[data-theme=dark] h4,[data-theme=dark] h5,[data-theme=dark] h6{color:var(--app-text)}[data-theme=dark] .analytics-count-row,[data-theme=dark] .analytics-list-item,[data-theme=dark] .analytics-section,[data-theme=dark] .archive-empty,[data-theme=dark] .archive-item-card,[data-theme=dark] .asset-card,[data-theme=dark] .asset-event-item,[data-theme=dark] .asset-mini-item,[data-theme=dark] .attachment-card,[data-theme=dark] .attachment-preview-row,[data-theme=dark] .attachment-thumb,[data-theme=dark] .attention-list article,[data-theme=dark] .card,[data-theme=dark] .drag-drop-panel,[data-theme=dark] .edit-panel,[data-theme=dark] .empty-panel,[data-theme=dark] .import-confirmation,[data-theme=dark] .import-docs details,[data-theme=dark] .import-tree-book,[data-theme=dark] .list-group-item,[data-theme=dark] .list-section,[data-theme=dark] .metric-chart-frame,[data-theme=dark] .metric-shape-chart,[data-theme=dark] .pacing-panel,[data-theme=dark] .plain-card,[data-theme=dark] .purpose-stat-row,[data-theme=dark] .scenario-chapter,[data-theme=dark] .scene-inspector-panel,[data-theme=dark] .story-asset-event-item,[data-theme=dark] .story-bible-card,[data-theme=dark] .story-bible-nav,[data-theme=dark] .story-bible-section,[data-theme=dark] .thread-event-item,[data-theme=dark] .timeline-control-group,[data-theme=dark] .timeline-control-panel,[data-theme=dark] .timeline-drag-palette,[data-theme=dark] .timeline-filter-drawer,[data-theme=dark] .timeline-jump-panel,[data-theme=dark] .timeline-preset-panel,[data-theme=dark] .timeline-setting-card,[data-theme=dark] .timeline-setting-card:has(input:checked),[data-theme=dark] .timeline-visibility-panel,[data-theme=dark] .validation-summary,[data-theme=dark] .warning-card,[data-theme=dark] .warning-filter-panel,[data-theme=dark] .warning-mini-card,[data-theme=dark] .writer-dashboard-panel,[data-theme=dark] .writer-dashboard-panel:first-child,[data-theme=dark] .writer-mini-card,[data-theme=dark] .writer-queue-card{color:var(--app-text);background:var(--app-surface);border-color:var(--app-border);box-shadow:var(--plotline-shadow-subtle)}[data-theme=dark] .asset-card{border-left-color:rgba(241,195,143,.42)}[data-theme=dark] .analytics-link-row,[data-theme=dark] .asset-card h2 a,[data-theme=dark] .health-kpi-grid strong,[data-theme=dark] .story-bible-card a{color:#ffe2bd}[data-theme=dark] .analytics-link-row:hover,[data-theme=dark] .asset-card h2 a:hover,[data-theme=dark] .story-bible-card a:hover{color:#fff4e8}[data-theme=dark] .analytics-count-row span,[data-theme=dark] .analytics-link-row span,[data-theme=dark] .analytics-list-item p,[data-theme=dark] .analytics-section-heading span,[data-theme=dark] .asset-card .muted,[data-theme=dark] .asset-card p,[data-theme=dark] .asset-card-footer,[data-theme=dark] .attention-list p,[data-theme=dark] .health-kpi-grid span,[data-theme=dark] .purpose-stat-row span,[data-theme=dark] .story-bible-card h4,[data-theme=dark] .story-bible-card p,[data-theme=dark] .story-bible-facts dt,[data-theme=dark] .story-bible-link-list span,[data-theme=dark] .story-bible-scene-summary span,[data-theme=dark] .validation-summary,[data-theme=dark] .warning-filter-panel .form-check-label,[data-theme=dark] .warning-filter-panel .form-label{color:var(--app-text-muted)!important}[data-theme=dark] .asset-card-footer .btn,[data-theme=dark] .warning-actions .btn{box-shadow:none}[data-theme=dark] .analytics-count-row,[data-theme=dark] .analytics-link-row,[data-theme=dark] .analytics-list-item,[data-theme=dark] .metric-raw-details,[data-theme=dark] .purpose-stat-row,[data-theme=dark] .story-bible-chapter-summary,[data-theme=dark] .story-bible-facts,[data-theme=dark] .story-bible-link-list li,[data-theme=dark] .story-bible-scene-summary{border-color:rgba(241,195,143,.18)}[data-theme=dark] .story-bible-actions a,[data-theme=dark] .story-bible-nav a{color:#f1dcc4;background:rgba(241,195,143,.1);border:1px solid rgba(241,195,143,.26)}[data-theme=dark] .story-bible-actions a:focus,[data-theme=dark] .story-bible-actions a:hover,[data-theme=dark] .story-bible-nav a:focus,[data-theme=dark] .story-bible-nav a:hover{color:#21160f;background:#f1c38f;border-color:#ffd5a6}[data-theme=dark] .attention-list article,[data-theme=dark] .metric-chart-frame{background:#211b17}[data-theme=dark] .purpose-stat-bar{background:rgba(231,214,190,.12)}[data-theme=dark] .purpose-stat-bar span{background:var(--plotline-accent-dark)}[data-theme=dark] .asset-event-item,[data-theme=dark] .story-asset-event-item,[data-theme=dark] .thread-event-item{color:var(--app-text);background:#211b17;border-color:rgba(241,195,143,.24)}[data-theme=dark] .asset-event-item .muted,[data-theme=dark] .asset-event-item p,[data-theme=dark] .story-asset-event-item .muted,[data-theme=dark] .story-asset-event-item p,[data-theme=dark] .thread-event-item .muted,[data-theme=dark] .thread-event-item p{color:var(--app-text-muted)!important}[data-theme=dark] .asset-event-marker,[data-theme=dark] .thread-event-marker{color:#21160f;background:#d49a62;border-color:rgba(255,213,166,.72)}[data-theme=dark] .timeline-shell,[data-theme=dark] .timeline-workspace{background:linear-gradient(180deg,rgba(42,35,30,.96),rgba(29,24,21,.96)),var(--app-timeline-bg);border-color:var(--app-border)}[data-theme=dark] .lane-board-heading,[data-theme=dark] .lane-group-heading,[data-theme=dark] .metric-chart-frame,[data-theme=dark] .metric-lane-label,[data-theme=dark] .metric-shape-controls,[data-theme=dark] .pacing-heading,[data-theme=dark] .plot-lane-board-heading,[data-theme=dark] .timeline-book-title,[data-theme=dark] .timeline-chapter-title,[data-theme=dark] .timeline-section-header{color:var(--app-link);background:rgba(37,31,27,.96);border-color:var(--app-border)}[data-theme=dark] .timeline-project-title{background:#352318}[data-theme=dark] .asset-lane-label,[data-theme=dark] .asset-lane-slot,[data-theme=dark] .character-lane-label,[data-theme=dark] .character-lane-slot,[data-theme=dark] .metric-graph-points,[data-theme=dark] .plot-lane-label,[data-theme=dark] .plot-lane-slot,[data-theme=dark] .timeline-chapter,[data-theme=dark] .timeline-empty-scene,[data-theme=dark] .timeline-minimap,[data-theme=dark] .timeline-placeholder-cell,[data-theme=dark] .timeline-placeholder-scene,[data-theme=dark] .timeline-scene-card{color:var(--app-text);background:rgba(42,35,30,.9);border-color:var(--app-border)}[data-theme=dark] .timeline-empty-scene,[data-theme=dark] .timeline-scene-card{box-shadow:0 8px 18px rgba(0,0,0,.22)}[data-theme=dark] .timeline-scene-card.focus-match,[data-theme=dark] .timeline-scene-card.keyboard-focus,[data-theme=dark] .timeline-scene-card.search-hit,[data-theme=dark] .timeline-scene-card.selected,[data-theme=dark] .timeline-scene-card:hover{border-color:rgba(212,154,98,.62);box-shadow:0 12px 28px rgba(0,0,0,.28)}[data-theme=dark] .timeline-minimap button{color:var(--plotline-accent-dark);background:linear-gradient(180deg,#332920 0,#241d18 100%);border-color:var(--plotline-border-soft)}[data-theme=dark] .timeline-minimap button.is-active{color:#1c120d;background:linear-gradient(180deg,var(--plotline-accent-dark) 0,var(--plotline-accent) 100%)}[data-theme=dark] .archive-pill,[data-theme=dark] .archived-badge,[data-theme=dark] .attachment-kind,[data-theme=dark] .badge,[data-theme=dark] .badge.text-bg-light,[data-theme=dark] .breadcrumb-trail a,[data-theme=dark] .breadcrumb-trail span,[data-theme=dark] .drag-chip,[data-theme=dark] .location-pill,[data-theme=dark] .metric-mini-summary,[data-theme=dark] .overview-chip,[data-theme=dark] .plain-preview,[data-theme=dark] .preset-chip,[data-theme=dark] .purpose-chip,[data-theme=dark] .scenario-tag,[data-theme=dark] .scene-pov-label,[data-theme=dark] .soft-count,[data-theme=dark] .status-pill,[data-theme=dark] .story-bible-meta span{color:#f4eadc!important;background:rgba(212,154,98,.18)!important;border-color:rgba(241,195,143,.36)!important;box-shadow:none}[data-theme=dark] .archived-badge,[data-theme=dark] .badge.text-bg-light,[data-theme=dark] .soft-count,[data-theme=dark] .status-pill{color:#ead8c4!important;background:rgba(205,187,167,.16)!important;border-color:rgba(231,214,190,.36)!important}[data-theme=dark] .badge.bg-warning,[data-theme=dark] .badge.text-bg-warning,[data-theme=dark] .warning-placeholder.active{color:#f6d8a6!important;background:rgba(187,126,54,.24)!important;border-color:rgba(224,173,101,.34)}[data-theme=dark] .badge.bg-secondary,[data-theme=dark] .badge.text-bg-secondary{color:#ead8c4!important;background:rgba(205,187,167,.16)!important;border-color:rgba(231,214,190,.34)}[data-theme=dark] .badge.text-bg-success{color:#bddfc3!important;background:rgba(91,143,101,.22)!important;border-color:rgba(145,201,154,.3)}[data-theme=dark] .badge.bg-danger,[data-theme=dark] .badge.text-bg-danger{color:#f0b8b2!important;background:rgba(151,62,54,.3)!important;border-color:rgba(238,142,131,.35)}[data-theme=dark] .badge.bg-info,[data-theme=dark] .badge.text-bg-info{color:#b8dfe5!important;background:rgba(62,125,136,.28)!important;border-color:rgba(120,185,194,.34)}[data-theme=dark] .severity-pill.info{color:#b8dfe5;background:rgba(62,125,136,.24);border-color:rgba(120,185,194,.34)}[data-theme=dark] .severity-pill.warning{color:#f6d8a6;background:rgba(187,126,54,.24);border-color:rgba(224,173,101,.34)}[data-theme=dark] .severity-pill.error{color:#f0b8b2;background:rgba(151,62,54,.3);border-color:rgba(238,142,131,.35)}[data-theme=dark] .form-control,[data-theme=dark] .form-select,[data-theme=dark] input,[data-theme=dark] select,[data-theme=dark] textarea{color:var(--app-input-text);background-color:var(--app-input-bg);border-color:var(--app-border)}[data-theme=dark] .form-control::placeholder,[data-theme=dark] input::placeholder,[data-theme=dark] textarea::placeholder{color:#a99886;opacity:1}[data-theme=dark] .form-check-input:focus,[data-theme=dark] .form-control:focus,[data-theme=dark] .form-select:focus{border-color:var(--plotline-accent);box-shadow:0 0 0 .2rem rgba(212,154,98,.2)}[data-theme=dark] .form-control:disabled,[data-theme=dark] .form-select:disabled,[data-theme=dark] input:disabled,[data-theme=dark] select:disabled,[data-theme=dark] textarea:disabled{color:#a99886;background-color:#1b1613;border-color:rgba(231,214,190,.12);opacity:1}[data-theme=dark] .table{--bs-table-color:var(--app-text);--bs-table-bg:transparent;--bs-table-border-color:var(--app-border);--bs-table-striped-color:var(--app-text);--bs-table-striped-bg:rgba(255, 255, 255, 0.035);--bs-table-hover-color:var(--app-text);--bs-table-hover-bg:rgba(212, 154, 98, 0.1)}[data-theme=dark] .modal-content,[data-theme=dark] .plotline-confirm-modal{color:var(--app-text);background:var(--app-surface-alt);border-color:var(--app-border)}[data-theme=dark] .modal-footer,[data-theme=dark] .modal-header{border-color:var(--app-border)}[data-theme=dark] .btn-close{filter:invert(1) grayscale(1) brightness(1.6)}[data-theme=dark] .dropdown-menu{--bs-dropdown-color:var(--app-text);--bs-dropdown-bg:var(--app-surface-alt);--bs-dropdown-border-color:var(--app-border);--bs-dropdown-link-color:var(--app-text);--bs-dropdown-link-hover-color:var(--app-link);--bs-dropdown-link-hover-bg:rgba(212, 154, 98, 0.12);--bs-dropdown-link-active-color:#1c120d;--bs-dropdown-link-active-bg:var(--plotline-accent-dark);--bs-dropdown-link-disabled-color:#8f8172}[data-theme=dark] .btn-outline-info,[data-theme=dark] .btn-outline-primary{--bs-btn-color:#ffd5a6;--bs-btn-border-color:rgba(241, 195, 143, 0.58);--bs-btn-bg:rgba(241, 195, 143, 0.08);--bs-btn-hover-color:#fff4e8;--bs-btn-hover-bg:rgba(241, 195, 143, 0.18);--bs-btn-hover-border-color:rgba(255, 213, 166, 0.72);--bs-btn-active-color:#fff4e8;--bs-btn-active-bg:rgba(241, 195, 143, 0.24);--bs-btn-active-border-color:rgba(255, 213, 166, 0.82);--bs-btn-disabled-color:#9c8d7d;--bs-btn-disabled-border-color:rgba(231, 214, 190, 0.18);background-color:var(--bs-btn-bg)}[data-theme=dark] .btn-outline-dark,[data-theme=dark] .btn-outline-light,[data-theme=dark] .btn-outline-secondary{--bs-btn-color:#ead8c4;--bs-btn-border-color:rgba(231, 214, 190, 0.46);--bs-btn-bg:rgba(231, 214, 190, 0.08);--bs-btn-hover-color:#fff4e8;--bs-btn-hover-bg:rgba(231, 214, 190, 0.16);--bs-btn-hover-border-color:rgba(241, 220, 196, 0.68);--bs-btn-active-color:#fff4e8;--bs-btn-active-bg:rgba(231, 214, 190, 0.22);--bs-btn-active-border-color:rgba(241, 220, 196, 0.64);--bs-btn-disabled-color:#8f8172;--bs-btn-disabled-border-color:rgba(231, 214, 190, 0.16);background-color:var(--bs-btn-bg)}[data-theme=dark] .btn-outline-danger{--bs-btn-color:#ffb2aa;--bs-btn-border-color:rgba(238, 142, 131, 0.5);--bs-btn-hover-color:#2a1210;--bs-btn-hover-bg:#ffb2aa;--bs-btn-hover-border-color:#ffb2aa}[data-theme=dark] .btn-outline-success{--bs-btn-color:#bddfc3;--bs-btn-border-color:rgba(145, 201, 154, 0.46);--bs-btn-bg:rgba(91, 143, 101, 0.12);--bs-btn-hover-color:#102016;--bs-btn-hover-bg:#bddfc3;--bs-btn-hover-border-color:#d2efd6;--bs-btn-active-color:#102016;--bs-btn-active-bg:#a8d7b0;--bs-btn-active-border-color:#d2efd6;--bs-btn-disabled-color:#8aa58e;--bs-btn-disabled-border-color:rgba(145, 201, 154, 0.2);background-color:var(--bs-btn-bg)}[data-theme=dark] .nav-tabs{--bs-nav-tabs-border-color:var(--app-border);--bs-nav-tabs-link-hover-border-color:rgba(241, 195, 143, 0.28);--bs-nav-tabs-link-active-color:var(--app-text);--bs-nav-tabs-link-active-bg:var(--app-surface);--bs-nav-tabs-link-active-border-color:var(--app-border)}[data-theme=dark] .context-header{color:var(--app-text);background:rgba(35,29,25,.94);border-color:rgba(241,195,143,.2)}[data-theme=dark] .context-header .eyebrow{color:#dfc6aa}[data-theme=dark] .context-title strong,[data-theme=dark] .context-title strong span{color:#fff0df}[data-theme=dark] .context-nav a{color:#f1dcc4;background:rgba(241,195,143,.1);border-color:rgba(241,195,143,.28)}[data-theme=dark] .context-nav a:focus,[data-theme=dark] .context-nav a:hover{color:#21160f;background:#f1c38f;border-color:#ffd5a6}[data-theme=dark] .pw-project-nav{color:var(--app-text);border-color:rgba(241,195,143,.18);background:linear-gradient(135deg,rgba(42,35,30,.96),rgba(58,42,32,.58)),var(--app-surface);box-shadow:var(--plotline-shadow-subtle)}[data-theme=dark] .pw-project-nav__label{color:#dfc6aa}[data-theme=dark] .pw-character-nav{border-bottom-color:rgba(241,195,143,.16)}[data-theme=dark] .pw-character-nav__link,[data-theme=dark] .pw-project-nav__link{color:#f1dcc4;border-color:rgba(241,195,143,.26);background:rgba(241,195,143,.1);box-shadow:none}[data-theme=dark] .pw-character-nav__link:focus,[data-theme=dark] .pw-character-nav__link:hover,[data-theme=dark] .pw-project-nav__link:focus,[data-theme=dark] .pw-project-nav__link:hover{color:#21160f;border-color:#ffd5a6;background:#f1c38f;box-shadow:0 6px 14px rgba(0,0,0,.24)}[data-theme=dark] .pw-character-nav__link.active,[data-theme=dark] .pw-project-nav__link.active{color:#21160f;border-color:#ffd5a6;background:linear-gradient(180deg,#f1c38f,var(--plotline-accent));box-shadow:0 8px 18px rgba(0,0,0,.28)}[data-theme=dark] .pw-actions__toggle{--bs-btn-color:#f1dcc4;--bs-btn-bg:rgba(241, 195, 143, 0.1);--bs-btn-border-color:rgba(241, 195, 143, 0.3);--bs-btn-hover-color:#21160f;--bs-btn-hover-bg:#f1c38f;--bs-btn-hover-border-color:#ffd5a6;--bs-btn-active-color:#21160f;--bs-btn-active-bg:var(--plotline-accent-dark);--bs-btn-active-border-color:#ffd5a6}[data-theme=dark] .pw-actions .dropdown-menu{--bs-dropdown-color:var(--app-text);--bs-dropdown-bg:var(--app-surface-alt);--bs-dropdown-border-color:rgba(241, 195, 143, 0.22);--bs-dropdown-link-color:var(--app-text);--bs-dropdown-link-hover-color:#21160f;--bs-dropdown-link-hover-bg:#f1c38f;--bs-dropdown-divider-bg:rgba(241, 195, 143, 0.18)}[data-theme=dark] .pw-actions .dropdown-item.text-danger{color:#ffb2aa!important}[data-theme=dark] .project-tabs{border-color:rgba(241,195,143,.18);background:rgba(35,29,25,.88)}[data-theme=dark] .project-tabs .nav-link{color:#ead8c4}[data-theme=dark] .project-tabs .nav-link:focus,[data-theme=dark] .project-tabs .nav-link:hover{color:#ffd5a6;background:rgba(241,195,143,.12)}[data-theme=dark] .project-tabs .nav-link.active{color:#21160f;background:linear-gradient(180deg,#f1c38f,var(--plotline-accent))}[data-theme=dark] .project-card{color:var(--app-text);border-color:var(--app-border);background:var(--app-surface)}[data-theme=dark] .project-card:hover{border-color:rgba(241,195,143,.34)}[data-theme=dark] .project-card__visual{background:radial-gradient(circle at 28% 24%,rgba(241,195,143,.22),transparent 11rem),linear-gradient(135deg,rgba(58,42,32,.96),rgba(33,56,61,.72))}[data-theme=dark] .project-card__heading h2,[data-theme=dark] .project-card__heading h2 a{color:var(--app-text)}[data-theme=dark] .project-card__description{color:var(--app-text-muted)}[data-theme=dark] .project-card__stats span{color:#ead8c4;border-color:rgba(231,214,190,.2);background:rgba(231,214,190,.08)}[data-theme=dark] .project-card__stats strong{color:#ffd5a6}[data-theme=dark] .project-card__actions{border-top-color:rgba(231,214,190,.14)}[data-theme=dark] .project-cover-stack__cover{border-color:rgba(42,35,30,.92);box-shadow:0 14px 30px rgba(0,0,0,.38)}[data-theme=dark] .project-cover-fallback{color:#21160f;border-color:rgba(241,195,143,.34);background:linear-gradient(180deg,rgba(255,244,232,.3),transparent 32%),linear-gradient(135deg,#f1c38f,var(--plotline-accent));box-shadow:0 14px 30px rgba(0,0,0,.34)}[data-theme=dark] .character-avatar-crop-stage,[data-theme=dark] .character-avatar-preview,[data-theme=dark] .character-gallery-card,[data-theme=dark] .character-gallery-upload,[data-theme=dark] .character-relationship-edit-form{color:var(--app-text);border-color:var(--app-border);background:rgba(42,35,30,.9)}[data-theme=dark] .character-gallery-card__actions{border-top-color:rgba(231,214,190,.14)}[data-theme=dark] .character-avatar-crop-stage,[data-theme=dark] .character-avatar-preview,[data-theme=dark] .character-gallery-card>img{background:#211b17}[data-theme=dark] .timeline-control-panel,[data-theme=dark] .timeline-filter,[data-theme=dark] .workspace-heading .button-row{color:var(--app-text)}[data-theme=dark] .timeline-control-panel .form-control,[data-theme=dark] .timeline-control-panel .form-select,[data-theme=dark] .timeline-control-select .form-select,[data-theme=dark] .timeline-filter .form-select{color:#fff0df;background-color:#251d18;border-color:rgba(241,195,143,.3)}[data-theme=dark] .metric-raw-details summary,[data-theme=dark] .metric-shape-intro,[data-theme=dark] .preset-chip,[data-theme=dark] .timeline-control-panel .form-label,[data-theme=dark] .timeline-control-select,[data-theme=dark] .timeline-filter-checks,[data-theme=dark] .timeline-preset-panel,[data-theme=dark] .timeline-visibility-panel label{color:#dfc6aa}[data-theme=dark] .timeline-control-group summary,[data-theme=dark] .timeline-drag-palette summary,[data-theme=dark] .timeline-filter-drawer summary{color:#ffe2bd;background:rgba(241,195,143,.1)}[data-theme=dark] .timeline-control-group[open] summary,[data-theme=dark] .timeline-drag-palette[open] summary,[data-theme=dark] .timeline-filter-drawer[open] summary{color:#fff4e8;background:rgba(241,195,143,.16)}[data-theme=dark] .timeline-control-group summary::after,[data-theme=dark] .timeline-drag-palette summary::after,[data-theme=dark] .timeline-filter-drawer summary::after{color:#f1c38f}[data-theme=dark] .preset-chip,[data-theme=dark] .timeline-visibility-panel label{background:rgba(241,195,143,.1);border-color:rgba(241,195,143,.24)}[data-theme=dark] .preset-chip:hover,[data-theme=dark] .timeline-visibility-panel label:has(input:checked){color:#fff0df;background:rgba(241,195,143,.18);border-color:rgba(241,195,143,.38)}[data-theme=dark] .metric-toggle-pill{color:#f1dcc4;background:rgba(241,195,143,.1);border-color:rgba(241,195,143,.24)}[data-theme=dark] .metric-toggle-pill::before{border:1px solid rgba(255,244,232,.7);box-shadow:0 0 0 2px rgba(0,0,0,.2)}[data-theme=dark] .metric-toggle-pill:has(input:checked){color:#fff4e8;background:rgba(241,195,143,.18);border-color:rgba(241,195,143,.42)}[data-theme=dark] .metric-toggle-pill:focus-within,[data-theme=dark] .metric-toggle-pill:hover{color:#fff;border-color:rgba(255,213,166,.58)}[data-theme=dark] .character-appearance-pill,[data-theme=dark] .character-marker{color:#24160d;background:#ffdca6;border-color:#fff0c9;box-shadow:0 0 0 1px rgba(36,22,13,.32),0 4px 10px rgba(0,0,0,.28)}[data-theme=dark] .character-appearance-pill:hover,[data-theme=dark] .character-marker:hover{color:#160d07;background:#fff0c9;border-color:#fff8df}[data-theme=dark] .alert-info{--bs-alert-color:#c7e5ea;--bs-alert-bg:#142e34;--bs-alert-border-color:rgba(120, 185, 194, 0.34);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme=dark] .alert-success{--bs-alert-color:#c8e7ce;--bs-alert-bg:#1b321f;--bs-alert-border-color:rgba(145, 201, 154, 0.32);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme=dark] .alert-warning,[data-theme=dark] .validation-summary-errors{--bs-alert-color:#f4d9a9;--bs-alert-bg:#352514;--bs-alert-border-color:rgba(224, 173, 101, 0.34);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme=dark] .alert-danger{--bs-alert-color:#f0b8b2;--bs-alert-bg:#371b18;--bs-alert-border-color:rgba(238, 142, 131, 0.34);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme=dark] .field-validation-error,[data-theme=dark] .text-danger,[data-theme=dark] .validation-summary-errors,[data-theme=dark] .validation-summary-errors li{color:#e7a09a!important}.popover.theme-audit-dark-popover,.popover[data-theme=dark],[data-theme=dark] .popover{--bs-popover-bg:var(--app-surface-alt);--bs-popover-border-color:rgba(231, 214, 190, 0.18);--bs-popover-header-bg:rgba(241, 195, 143, 0.08);--bs-popover-header-color:#fff0df;--bs-popover-body-color:var(--app-text);color:var(--app-text);box-shadow:0 18px 42px rgba(0,0,0,.38)}.popover.theme-audit-dark-popover .popover-arrow::before,.popover[data-theme=dark] .popover-arrow::before,[data-theme=dark] .popover .popover-arrow::before{border-color:var(--bs-popover-border-color)}.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-top>.popover-arrow::after,.popover[data-theme=dark].bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.popover[data-theme=dark].bs-popover-top>.popover-arrow::after,[data-theme=dark] .bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,[data-theme=dark] .bs-popover-top>.popover-arrow::after{border-top-color:var(--bs-popover-bg)}.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-end>.popover-arrow::after,.popover[data-theme=dark].bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.popover[data-theme=dark].bs-popover-end>.popover-arrow::after,[data-theme=dark] .bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,[data-theme=dark] .bs-popover-end>.popover-arrow::after{border-right-color:var(--bs-popover-bg)}.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-bottom>.popover-arrow::after,.popover[data-theme=dark].bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.popover[data-theme=dark].bs-popover-bottom>.popover-arrow::after,[data-theme=dark] .bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,[data-theme=dark] .bs-popover-bottom>.popover-arrow::after{border-bottom-color:var(--bs-popover-bg)}.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-start>.popover-arrow::after,.popover[data-theme=dark].bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.popover[data-theme=dark].bs-popover-start>.popover-arrow::after,[data-theme=dark] .bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,[data-theme=dark] .bs-popover-start>.popover-arrow::after{border-left-color:var(--bs-popover-bg)}.popover.theme-audit-dark-popover .popover-header,.popover[data-theme=dark] .popover-header,[data-theme=dark] .plotline-help-popover .popover-header{color:#fff0df;background:rgba(241,195,143,.08);border-bottom-color:rgba(231,214,190,.16)}.popover.theme-audit-dark-popover .plotline-help-more,.popover.theme-audit-dark-popover a,.popover[data-theme=dark] .plotline-help-more,.popover[data-theme=dark] a,[data-theme=dark] .plotline-help-more,[data-theme=dark] .popover a{color:var(--app-link)}.popover.theme-audit-dark-popover .plotline-help-more:hover,.popover.theme-audit-dark-popover a:hover,.popover[data-theme=dark] .plotline-help-more:hover,.popover[data-theme=dark] a:hover,[data-theme=dark] .plotline-help-more:hover,[data-theme=dark] .popover a:hover{color:#ffd5a6}[data-theme=dark] .accordion{--bs-accordion-color:var(--app-text);--bs-accordion-bg:var(--app-surface);--bs-accordion-border-color:rgba(231, 214, 190, 0.16);--bs-accordion-btn-color:#f1dcc4;--bs-accordion-btn-bg:#211b17;--bs-accordion-active-color:#fff0df;--bs-accordion-active-bg:rgba(212, 154, 98, 0.13);--bs-accordion-btn-focus-border-color:rgba(241, 195, 143, 0.42);--bs-accordion-btn-focus-box-shadow:0 0 0 0.2rem rgba(212, 154, 98, 0.18);--bs-accordion-icon-color:#f1dcc4;--bs-accordion-icon-active-color:#fff0df}[data-theme=dark] .accordion-button::after{filter:invert(91%) sepia(12%) saturate(676%) hue-rotate(340deg) brightness(103%) contrast(89%)}[data-theme=dark] .pagination{--bs-pagination-color:#f1dcc4;--bs-pagination-bg:#211b17;--bs-pagination-border-color:rgba(231, 214, 190, 0.18);--bs-pagination-hover-color:#ffd5a6;--bs-pagination-hover-bg:rgba(212, 154, 98, 0.12);--bs-pagination-hover-border-color:rgba(241, 195, 143, 0.34);--bs-pagination-focus-color:#ffd5a6;--bs-pagination-focus-bg:rgba(212, 154, 98, 0.14);--bs-pagination-focus-box-shadow:0 0 0 0.2rem rgba(212, 154, 98, 0.18);--bs-pagination-active-color:#21160f;--bs-pagination-active-bg:#d49a62;--bs-pagination-active-border-color:#d49a62;--bs-pagination-disabled-color:#8f8172;--bs-pagination-disabled-bg:rgba(35, 29, 25, 0.72);--bs-pagination-disabled-border-color:rgba(231, 214, 190, 0.11)}.plotline-help-layout{--help-drawer-width:25%;display:flex;align-items:stretch;width:100%;min-width:0;transition:gap .18s ease}.plotline-help-main{flex:1 1 auto;min-width:0;transition:flex-basis .18s ease}.plotline-help-drawer,.plotline-help-splitter{display:none}.plotline-help-layout.help-open .plotline-help-splitter{display:block;flex:0 0 8px;cursor:col-resize;background:linear-gradient(90deg,transparent,rgba(107,114,128,.22),transparent)}.plotline-help-layout.help-open .plotline-help-drawer{display:block;flex:0 0 clamp(20%,var(--help-drawer-width),50%);min-width:20%;max-width:50%;border-left:1px solid rgba(107,114,128,.22);background:rgba(255,253,248,.96);transition:flex-basis .18s ease}.plotline-help-layout.help-collapsed .plotline-help-splitter{display:none}.plotline-help-layout.help-collapsed .plotline-help-drawer{flex-basis:2.35rem;min-width:2.35rem;max-width:2.35rem}.plotline-help-layout.help-collapsed .plotline-help-drawer-panel{display:none}.plotline-help-collapsed-strip{display:none}.plotline-help-layout.help-collapsed .plotline-help-collapsed-strip{display:flex;align-items:center;justify-content:center;width:2.35rem;min-height:calc(100vh - 5rem);color:#5f6875;font-size:.78rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;writing-mode:vertical-rl;cursor:pointer}.plotline-help-drawer-panel{position:sticky;top:0;display:flex;flex-direction:column;max-height:calc(100vh - 1rem)}.plotline-help-drawer-header{display:flex;justify-content:space-between;gap:.75rem;align-items:flex-start;padding:1rem;border-bottom:1px solid rgba(107,114,128,.18)}.plotline-help-drawer-content{min-height:12rem;padding:1rem;overflow:auto}.help-drawer-article h2{margin-bottom:.5rem}.help-markdown-body{display:grid;gap:.75rem}.help-markdown-body h1,.help-markdown-body h2,.help-markdown-body h3,.help-markdown-body h4{margin:.5rem 0 0}.help-markdown-body p,.help-markdown-body ul{margin-bottom:0}.help-article-image{display:block;max-width:100%;height:auto;border:1px solid rgba(107,114,128,.18);border-radius:.45rem}.help-related-section{margin-top:1.25rem;padding-top:1rem;border-top:1px solid rgba(107,114,128,.18)}.help-related-section button{padding:0;color:#2f6f63;background:0 0;border:0;font-weight:700;text-align:left}.help-markdown-body .help-markdown-table{margin-bottom:0}.help-resizing{cursor:col-resize;user-select:none}.plotline-help-icon{display:inline-flex;align-items:center;justify-content:center;width:1.15rem;height:1.15rem;margin-left:.35rem;padding:0;color:#5f6875;font-size:.78rem;font-weight:800;line-height:1;background:0 0;border:1px solid rgba(95,104,117,.42);border-radius:999px;vertical-align:text-top}.plotline-help-icon-wrapper{display:inline-flex;vertical-align:text-top}.plotline-help-icon-wrapper-inline .plotline-help-icon{width:1rem;height:1rem;margin-left:.25rem;font-size:.68rem}.plotline-help-icon:focus,.plotline-help-icon:hover{color:#2f6f63;border-color:#2f6f63;outline:0}.plotline-help-popover{max-width:350px}.plotline-help-popover .popover-header{font-weight:800}.plotline-help-more{font-weight:700;text-decoration:none}[data-theme=dark] .plotline-help-icon{color:#d8d0c4;border-color:rgba(216,208,196,.45)}[data-theme=dark] .plotline-help-icon:focus,[data-theme=dark] .plotline-help-icon:hover{color:#f1c38f;border-color:#f1c38f}[data-theme=dark] .plotline-help-layout.help-open .plotline-help-drawer{border-left-color:rgba(255,255,255,.12);background:rgba(22,22,27,.97)}[data-theme=dark] .help-related-section,[data-theme=dark] .plotline-help-drawer-header{border-color:rgba(255,255,255,.12)}[data-theme=dark] .plotline-help-collapsed-strip{color:#d8d0c4}.relationship-map-controls{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr)) auto auto auto;gap:.75rem;align-items:end;margin-bottom:1rem}.relationship-map-check{display:flex;gap:.45rem;align-items:center;min-height:2rem;margin:0;white-space:nowrap}.relationship-map-legend{display:grid;grid-template-columns:minmax(160px,max-content) 1fr;gap:.9rem 1.2rem;align-items:center;margin:0 0 1rem}.relationship-map-legend h2{margin:0;font-size:1rem}.relationship-map-legend-grid{display:flex;flex-wrap:wrap;gap:.45rem .8rem;align-items:center}.relationship-map-legend-item{display:inline-flex;gap:.45rem;align-items:center;padding:.28rem .45rem;color:inherit;background:0 0;border:1px solid transparent;border-radius:999px;font-size:.85rem;font-weight:650}.relationship-map-legend-line{display:inline-block;width:2.15rem;height:0;border-top:4px solid currentColor;border-radius:999px}.relationship-map-detail-badges .status-pill,.relationship-map-list-item .status-pill{border:1px solid transparent}.relationship-map-workspace{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,360px);gap:1rem;align-items:stretch}.relationship-map-canvas{min-height:660px;overflow:hidden}.relationship-map-toolbar{display:flex;justify-content:flex-end;gap:.4rem;margin-bottom:.6rem;padding-bottom:.45rem;border-bottom:1px solid rgba(107,114,128,.12)}.relationship-map-graph{width:100%;min-height:620px;border:1px solid rgba(107,114,128,.16);border-radius:.75rem;background:radial-gradient(circle at 20% 20%,rgba(196,124,44,.08),transparent 28rem),linear-gradient(180deg,rgba(255,253,248,.95),rgba(248,250,252,.86))}.relationship-map-details{position:sticky;top:1rem;align-self:start;max-height:calc(100vh - 2rem);overflow:auto}.relationship-map-detail-heading{display:flex;align-items:center;gap:.75rem}.relationship-map-detail-heading h2{margin-bottom:0}.relationship-map-detail-badges{display:flex;flex-wrap:wrap;gap:.35rem;margin:.4rem 0 .8rem}.relationship-map-detail-list{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:.25rem .75rem;margin:1rem 0}.relationship-map-detail-list dt{color:var(--muted-text,#667085);font-weight:600}.relationship-map-detail-list dd{margin:0}.relationship-map-history{display:grid;gap:.45rem;padding-left:1.1rem}.relationship-map-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:.6rem}.relationship-map-list-item{display:grid;gap:.25rem;padding:.8rem;text-align:left;color:inherit;background:var(--surface,#fff);border:1px solid rgba(107,114,128,.22);border-radius:.6rem;box-shadow:0 8px 20px rgba(31,41,55,.06)}.relationship-map-list-item.is-selected,.relationship-map-list-item:focus,.relationship-map-list-item:hover{border-color:#c47c2c;outline:0}.relationship-category-family{color:#7c3f12;border-color:#d89a5e;background:#fff1df}.relationship-category-friendship{color:#14532d;border-color:#7cc69a;background:#e7f8ed}.relationship-category-romantic{color:#831843;border-color:#efa3c1;background:#fde7f0}.relationship-category-hostile{color:#7f1d1d;border-color:#ee8f8f;background:#fee6e6}.relationship-category-professional{color:#1e3a8a;border-color:#93b4ef;background:#e8f0ff}.relationship-category-other{color:#374151;border-color:#bac2cf;background:#f2f4f7}[data-theme=dark] .relationship-map-list-item{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.12)}[data-theme=dark] .relationship-map-graph{border-color:rgba(255,255,255,.12);background:radial-gradient(circle at 20% 20%,rgba(241,195,143,.08),transparent 28rem),linear-gradient(180deg,rgba(33,32,38,.96),rgba(22,22,27,.92))}[data-theme=dark] .relationship-map-toolbar{border-bottom-color:rgba(255,255,255,.1)}[data-theme=dark] .relationship-category-family{color:#ffd2a5;background:rgba(184,101,34,.17);border-color:rgba(255,210,165,.3)}[data-theme=dark] .relationship-category-friendship{color:#a8e8bf;background:rgba(47,158,95,.16);border-color:rgba(168,232,191,.3)}[data-theme=dark] .relationship-category-romantic{color:#f8b5cf;background:rgba(217,70,127,.16);border-color:rgba(248,181,207,.3)}[data-theme=dark] .relationship-category-hostile{color:#ffb4b4;background:rgba(220,63,63,.16);border-color:rgba(255,180,180,.3)}[data-theme=dark] .relationship-category-professional{color:#b7cdf7;background:rgba(79,127,216,.16);border-color:rgba(183,205,247,.3)}[data-theme=dark] .relationship-category-other{color:#d0d6df;background:rgba(122,135,150,.15);border-color:rgba(208,214,223,.28)}.marketing-shell{max-width:none;padding-right:0;padding-left:0}.marketing-shell main{padding-bottom:0!important}.marketing-home{--marketing-navy:#1f2a44;--marketing-gold:#d4a574;--marketing-cream:#faf8f5;--marketing-offwhite:#fcfbf9;--marketing-ink:#201a16;--marketing-muted:#6f655c;--marketing-rose:#9f5f55;--marketing-sage:#5f786c;--marketing-line:rgba(31, 42, 68, 0.12);--marketing-shadow:0 28px 70px rgba(31, 42, 68, 0.15);overflow:hidden;margin-top:-1rem;color:var(--marketing-ink);background:radial-gradient(circle at 88% 8%,rgba(212,165,116,.2),transparent 26rem),linear-gradient(180deg,var(--marketing-cream) 0,var(--marketing-offwhite) 42%,#f6efe6 100%)}.marketing-container{width:min(1180px,calc(100% - 32px));margin-inline:auto}.marketing-eyebrow{margin:0 0 .8rem;color:#8b612e;font-size:.76rem;font-weight:850;letter-spacing:.12em;text-transform:uppercase}.marketing-home h1,.marketing-home h2,.marketing-home h3{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;letter-spacing:0;text-wrap:balance}.marketing-home h1{max-width:11ch;margin:0;font-size:clamp(3.2rem, 7vw, 6.35rem);line-height:.95}.marketing-home h2{margin:0;font-size:clamp(2.1rem, 4.4vw, 4rem);line-height:1.02}.marketing-home h3{margin:0;font-size:clamp(1.7rem, 3vw, 2.7rem);line-height:1.08}.final-cta p,.founder-story p,.marketing-lead,.problem-copy p,.section-heading p{color:var(--marketing-muted);font-size:clamp(1rem, 1.5vw, 1.18rem);line-height:1.7}.marketing-hero{position:relative;padding:clamp(2rem,5vw,3.75rem) 0 clamp(3.5rem,7vw,6rem)}.marketing-hero::before{content:"";position:absolute;inset:0 0 auto;height:54%;pointer-events:none;background:linear-gradient(115deg,rgba(31,42,68,.08),transparent 42%),radial-gradient(circle at 12% 20%,rgba(212,165,116,.22),transparent 24rem)}.marketing-hero__grid{position:relative;display:grid;grid-template-columns:minmax(0,0.86fr) minmax(440px,1.14fr);gap:clamp(2rem,5vw,5rem);align-items:center}.marketing-hero__copy{display:grid;gap:1.35rem;align-content:center}.marketing-lead{max-width:42rem;margin:0}.marketing-actions{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.marketing-btn{display:inline-flex;align-items:center;justify-content:center;min-height:3.2rem;border:1px solid transparent;border-radius:999px;padding:.85rem 1.35rem;font-weight:800;line-height:1.1;text-decoration:none;transition:transform .18s ease,box-shadow .18s ease,background-color .18s ease,border-color .18s ease}.marketing-btn:focus,.marketing-btn:hover{transform:translateY(-1px)}.marketing-btn--primary{color:#fffaf2;background:linear-gradient(135deg,var(--marketing-navy),#26375e);box-shadow:0 16px 32px rgba(31,42,68,.22)}.marketing-btn--primary:focus,.marketing-btn--primary:hover{color:#fffaf2;box-shadow:0 20px 42px rgba(31,42,68,.28)}.marketing-btn--secondary{color:var(--marketing-navy);border-color:rgba(31,42,68,.18);background:rgba(255,255,255,.68);box-shadow:inset 0 1px 0 rgba(255,255,255,.88)}.marketing-btn--secondary:focus,.marketing-btn--secondary:hover{color:var(--marketing-navy);border-color:rgba(31,42,68,.3);background:#fffdf9}.hero-proof{display:flex;flex-wrap:wrap;gap:1rem;margin:0}.hero-proof div{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.55rem;align-items:center;max-width:18rem}.hero-proof dt{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:2.35rem;font-weight:700;line-height:1}.hero-proof dd{margin:0;color:var(--marketing-muted);font-weight:650;line-height:1.25}.browser-frame{border:1px solid rgba(31,42,68,.13);border-radius:22px;background:rgba(252,251,249,.72);box-shadow:var(--marketing-shadow);overflow:hidden}.hero-product{transform:rotate(1deg);animation:productFloat 7s ease-in-out infinite}.home-image-card{border:1px solid rgba(31,42,68,.13);border-radius:24px;background:rgba(252,251,249,.72);box-shadow:var(--marketing-shadow);overflow:hidden}.home-feature-image,.home-image-card img{display:block;max-width:100%;width:100%;height:auto}.home-hero-image img{background:#f8f1e7}@media (min-width:1061px){.marketing-hero{display:flex;align-items:center;min-height:calc(100vh - 5.5rem);padding-top:clamp(1.5rem,3vw,2.75rem);padding-bottom:clamp(1.5rem,3vw,2.75rem)}.home-hero-image{align-self:center;margin-top:clamp(-8rem,-8vw,-4rem)}}.writer-workspace{position:relative;min-height:560px;border:1px solid rgba(31,42,68,.13);border-radius:24px;padding:clamp(1rem,2.4vw,1.6rem);background:linear-gradient(135deg,rgba(255,253,249,.9),rgba(248,239,227,.76)),url("/images/home/hero-writing-workspace.webp") center/cover no-repeat,#f8f1e7;box-shadow:var(--marketing-shadow);overflow:hidden}.writer-workspace::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 16% 12%,rgba(212,165,116,.2),transparent 18rem),radial-gradient(circle at 92% 82%,rgba(95,120,108,.18),transparent 18rem);pointer-events:none}.workspace-card,.workspace-manuscript,.workspace-progress{position:absolute;z-index:1;border:1px solid rgba(31,42,68,.11);background:rgba(255,253,249,.94);box-shadow:0 18px 42px rgba(31,42,68,.12)}.workspace-manuscript{left:7%;top:8%;width:min(68%,460px);min-height:370px;border-radius:16px;padding:clamp(1.25rem,2vw,1.7rem)}.workspace-card span,.workspace-label{margin:0;color:#8b612e;font-size:.72rem;font-weight:850;letter-spacing:.1em;text-transform:uppercase}.workspace-manuscript h2{margin:.45rem 0 1.2rem;font-size:clamp(1.6rem, 2.5vw, 2.35rem)}.workspace-manuscript p:not(.workspace-label){margin:0 0 1rem;color:#4f4b45;font-family:Georgia,"Times New Roman",serif;font-size:1.05rem;line-height:1.75}.workspace-card{display:grid;gap:.35rem;width:min(45%,260px);border-radius:16px;padding:1rem}.workspace-card strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:1.18rem;line-height:1.15}.workspace-card small{color:var(--marketing-muted);font-size:.88rem;line-height:1.45}.workspace-character{right:6%;top:13%;border-left:5px solid var(--marketing-sage)}.workspace-thread{right:11%;top:40%;border-left:5px solid var(--marketing-gold)}.workspace-warning{right:5%;bottom:18%;border-left:5px solid var(--marketing-rose)}.workspace-progress{top:auto;left:13%;right:10%;bottom:4%;display:flex;gap:.55rem;height:3.75rem;border-radius:999px;padding:.65rem}.workspace-progress span{flex:1 1 0;border-radius:999px;padding:.58rem .7rem;color:#2a2119;background:rgba(212,165,116,.22);font-size:.82rem;font-weight:850;text-align:center}.workspace-progress span:nth-child(2){background:rgba(95,120,108,.2)}.workspace-progress span:nth-child(3){color:#fffaf2;background:var(--marketing-navy)}.browser-frame__chrome{display:flex;gap:.45rem;align-items:center;height:2.55rem;border-bottom:1px solid rgba(31,42,68,.1);padding:0 1rem;background:linear-gradient(180deg,#fffdf9,#f5efe7)}.browser-frame__chrome span{width:.72rem;height:.72rem;border-radius:999px;background:#d8cabf}.browser-frame__chrome span:nth-child(2){background:var(--marketing-gold)}.browser-frame__chrome span:nth-child(3){background:var(--marketing-sage)}.product-mockup{display:grid;grid-template-columns:170px minmax(0,1fr);min-height:470px;background:linear-gradient(135deg,rgba(255,255,255,.86),rgba(250,248,245,.92)),var(--marketing-offwhite)}.product-sidebar{display:grid;align-content:start;gap:.5rem;border-right:1px solid rgba(31,42,68,.1);padding:1.1rem;background:rgba(31,42,68,.96);color:rgba(255,250,242,.72)}.product-sidebar strong{margin-bottom:.8rem;color:#fffaf2;font-family:Georgia,"Times New Roman",serif;font-size:1.05rem}.product-sidebar span{border-radius:999px;padding:.5rem .7rem;font-size:.84rem;font-weight:750}.product-sidebar .is-active{color:#241b12;background:var(--marketing-gold)}.product-main{display:grid;gap:1rem;align-content:start;padding:clamp(1rem,2vw,1.45rem)}.product-topline{display:flex;justify-content:space-between;gap:1rem;align-items:start}.mock-label,.product-topline small{color:var(--marketing-muted);font-size:.78rem;font-weight:820;letter-spacing:.04em;text-transform:uppercase}.product-topline h2{margin-top:.25rem;font-size:clamp(1.5rem, 2.4vw, 2.15rem)}.product-topline>span{flex:0 0 auto;border-radius:999px;padding:.38rem .7rem;color:#294a35;background:#e5f1e8;font-size:.78rem;font-weight:800}.product-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,0.9fr);gap:.85rem}.product-panel{display:grid;gap:.75rem;min-height:150px;border:1px solid rgba(31,42,68,.1);border-radius:16px;padding:1rem;background:rgba(255,253,249,.92);box-shadow:0 16px 30px rgba(31,42,68,.07)}.product-panel--wide{grid-row:span 2}.product-panel p{margin:0;color:var(--marketing-muted)}.mock-chart{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.55rem;align-items:end;min-height:220px;padding-top:1rem}.mock-chart span{height:var(--height);min-height:2.2rem;border-radius:999px 999px 8px 8px;background:linear-gradient(180deg,var(--marketing-gold),#8f5d3b);box-shadow:inset 0 1px 0 rgba(255,255,255,.45)}.thread-list{display:grid;gap:.55rem}.thread-list span{border-left:4px solid var(--marketing-gold);border-radius:10px;padding:.55rem .65rem;color:var(--marketing-navy);background:rgba(212,165,116,.13);font-weight:760}.problem-intro{padding:clamp(3rem,7vw,6rem) 0 1rem;text-align:center}.problem-intro h2,.section-heading h2{max-width:850px;margin-inline:auto}.problem-stack{padding:1rem 0 clamp(4rem,8vw,7rem)}.problem-section{display:grid;grid-template-columns:minmax(0,0.95fr) minmax(0,1.05fr);gap:clamp(1.5rem,5vw,5rem);align-items:center;min-height:460px;padding:clamp(2.5rem,6vw,5rem) 0}.problem-section--reverse .problem-visual{order:2}.problem-copy{display:grid;gap:1rem}.problem-copy p{max-width:36rem;margin:0}.problem-visual{position:relative;min-height:320px;border:1px solid rgba(31,42,68,.11);border-radius:24px;background:linear-gradient(135deg,rgba(255,253,249,.96),rgba(242,230,215,.88)),var(--marketing-offwhite);box-shadow:0 22px 56px rgba(31,42,68,.1);overflow:hidden}.problem-visual--image{display:grid;align-items:center;min-height:0;padding:.75rem;background:linear-gradient(135deg,rgba(255,253,249,.96),rgba(242,230,215,.88)),var(--marketing-offwhite)}.problem-visual--image::after,.problem-visual--image::before{display:none}.problem-visual--image .home-feature-image{grid-column:1/-1;justify-self:center;border-radius:18px;box-shadow:0 18px 42px rgba(31,42,68,.12)}.visual-plot{background:linear-gradient(135deg,rgba(255,253,249,.92),rgba(242,232,217,.82)),url("/images/home/plot-thread-map.webp") center/cover no-repeat,#f2e8d9}.visual-warning{background:linear-gradient(135deg,rgba(255,253,249,.94),rgba(242,230,215,.84)),url("/images/home/manuscript-continuity.webp") center/cover no-repeat,#f8f1e7}.visual-relationships{background:linear-gradient(135deg,rgba(255,253,249,.92),rgba(232,238,229,.82)),url("/images/home/character-relationship-board.webp") center/cover no-repeat,#eef3eb}.visual-flow{background:linear-gradient(135deg,rgba(255,253,249,.92),rgba(242,230,215,.82)),url("/images/home/story-timeline.webp") center/cover no-repeat,#f8f1e7}.visual-series{background:linear-gradient(135deg,rgba(255,253,249,.9),rgba(242,230,215,.8)),url("/images/home/series-dashboard.webp") center/cover no-repeat,#f8f1e7}.visual-docs span,.visual-notes span,.visual-series span,.visual-threads span,.visual-warning span{position:absolute;border:1px solid rgba(31,42,68,.1);border-radius:14px;padding:.75rem .9rem;color:var(--marketing-navy);background:#fffdf9;box-shadow:0 14px 28px rgba(31,42,68,.08);font-weight:760}.visual-notes span:first-child{top:14%;left:12%;transform:rotate(-5deg)}.visual-notes span:nth-child(2){top:28%;right:10%;transform:rotate(4deg)}.visual-notes span:nth-child(3){bottom:22%;left:16%;transform:rotate(3deg)}.visual-notes span:nth-child(4){bottom:13%;right:18%;transform:rotate(-4deg)}.visual-plot{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;align-content:center;padding:2rem}.visual-plot::before{content:"";position:absolute;left:11%;right:11%;top:50%;height:.28rem;border-radius:999px;background:rgba(31,42,68,.16)}.visual-plot span{position:relative;display:grid;place-items:center;min-height:6.5rem;border:1px solid rgba(31,42,68,.1);border-radius:14px;padding:.75rem;color:var(--marketing-navy);background:#fffdf9;box-shadow:0 14px 28px rgba(31,42,68,.08);font-weight:800;text-align:center}.visual-plot span:first-child,.visual-threads span:first-child{border-top:5px solid var(--marketing-sage)}.visual-plot span:nth-child(2),.visual-threads span:nth-child(2){border-top:5px solid var(--marketing-gold)}.visual-plot span:nth-child(3),.visual-threads span:nth-child(3){border-top:5px solid var(--marketing-rose)}.visual-plot span:nth-child(4),.visual-threads span:nth-child(4){border-top:5px solid var(--marketing-navy)}.visual-warning{display:grid;gap:.75rem;align-content:center;padding:2rem}.visual-warning strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:1.6rem}.visual-warning span{position:static;border-left:4px solid var(--marketing-gold)}.visual-next{display:grid;align-content:center;gap:.8rem;padding:2rem}.visual-next small{color:#8b612e;font-weight:850;letter-spacing:.1em;text-transform:uppercase}.visual-next strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(2rem, 4vw, 3.5rem);line-height:1}.visual-next p{max-width:22rem;margin:0;color:var(--marketing-muted);font-size:1.1rem;line-height:1.6}.visual-next p+p{border-top:1px solid rgba(31,42,68,.11);padding-top:.75rem}.visual-docs span:first-child{top:13%;left:12%}.visual-docs span:nth-child(2){top:23%;right:12%}.visual-docs span:nth-child(3){top:45%;left:23%}.visual-docs span:nth-child(4){bottom:18%;left:12%}.visual-docs span:nth-child(5){bottom:14%;right:15%}.visual-relationships::after,.visual-relationships::before{content:"";position:absolute;inset:22% 18%;border:2px solid rgba(31,42,68,.16);border-radius:50%}.visual-relationships::after{inset:34% 22%;border-color:rgba(212,165,116,.44);transform:rotate(22deg)}.person{position:absolute;z-index:1;display:grid;place-items:center;width:5rem;height:5rem;border:.4rem solid #fffaf2;border-radius:999px;color:#fffaf2;background:var(--marketing-navy);box-shadow:0 16px 30px rgba(31,42,68,.18);font-weight:850}.person-a{top:13%;left:18%}.person-b{top:21%;right:18%;background:var(--marketing-rose)}.person-c{bottom:17%;left:24%;background:var(--marketing-sage)}.person-d{right:24%;bottom:13%;background:var(--marketing-gold);color:#2a2119}.relationship-label{position:absolute;z-index:2;border-radius:999px;padding:.42rem .65rem;color:var(--marketing-navy);background:#fffdf9;box-shadow:0 12px 24px rgba(31,42,68,.1);font-size:.78rem;font-weight:850}.rel-trust{top:23%;left:43%}.rel-secret{top:47%;right:25%}.rel-threat{bottom:33%;left:34%}.rel-sister{bottom:23%;right:38%}.visual-threads{display:grid;grid-template-columns:repeat(4,1fr);gap:.85rem;align-content:center;padding:2rem}.visual-threads::before{content:"";position:absolute;left:11%;right:11%;top:50%;height:.32rem;border-radius:999px;background:rgba(31,42,68,.14)}.visual-threads span{position:relative;display:grid;place-items:center;min-height:6.5rem;text-align:center}.visual-series{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;align-content:center;padding:2rem}.visual-series span{position:static;display:grid;place-items:center;min-height:10.5rem;border-radius:12px 12px 18px 18px;color:#fffaf2;background:linear-gradient(180deg,var(--marketing-navy),#314263);text-align:center}.visual-series span:nth-child(2){background:linear-gradient(180deg,#75503a,#533424)}.visual-series span:nth-child(3){background:linear-gradient(180deg,#5f786c,#3d564b)}.visual-series span:nth-child(4){color:#2a2119;background:linear-gradient(180deg,#e1bd8e,var(--marketing-gold))}.visual-flow{display:grid;align-items:center;padding:2rem}.flow-line{position:absolute;left:8%;right:8%;top:50%;height:8rem;border-bottom:.38rem solid var(--marketing-gold);border-radius:0 0 50% 50%;transform:translateY(-54%)}.visual-flow span{position:absolute;left:var(--pos);bottom:26%;border-radius:999px;padding:.55rem .8rem;color:var(--marketing-navy);background:#fffaf2;box-shadow:0 12px 26px rgba(31,42,68,.1);font-weight:800}.social-proof{padding:clamp(4rem,8vw,7rem) 0;background:var(--marketing-offwhite)}.section-heading{display:grid;gap:.7rem;margin-bottom:clamp(1.5rem,4vw,3rem);text-align:center}.testimonial-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.testimonial-grid figure{display:grid;align-content:space-between;min-height:250px;margin:0;border:1px solid rgba(31,42,68,.1);border-radius:18px;padding:clamp(1.25rem,2.3vw,1.75rem);background:linear-gradient(180deg,rgba(255,253,249,.96),rgba(250,248,245,.88)),#fff;box-shadow:0 18px 42px rgba(31,42,68,.08)}.testimonial-grid blockquote{margin:0;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:1.32rem;line-height:1.4}.testimonial-grid figcaption{margin-top:1.35rem;color:#8b612e;font-weight:820}.founder-story{padding:clamp(4rem,8vw,7rem) 0;background:radial-gradient(circle at 10% 20%,rgba(212,165,116,.18),transparent 22rem),var(--marketing-cream)}.founder-story__grid{display:grid;grid-template-columns:minmax(180px,0.35fr) minmax(0,0.65fr);gap:clamp(1.5rem,5vw,4rem);align-items:center}.founder-mark{display:grid;place-items:center;aspect-ratio:1;border:1px solid rgba(31,42,68,.12);border-radius:28px;color:#fffaf2;background:linear-gradient(135deg,rgba(212,165,116,.3),transparent),var(--marketing-navy);box-shadow:var(--marketing-shadow);font-family:Georgia,"Times New Roman",serif;font-size:clamp(3rem, 8vw, 6rem)}.founder-story h2{margin-bottom:1rem}.founder-story p{max-width:48rem;margin:0 0 1rem}.final-cta{padding:clamp(4rem,8vw,7rem) 0;background:var(--marketing-navy)}.final-cta__inner{display:grid;justify-items:center;gap:1rem;border:1px solid rgba(255,250,242,.14);border-radius:28px;padding:clamp(2.25rem,6vw,5rem) clamp(1rem,5vw,4rem);background:radial-gradient(circle at 50% 0,rgba(212,165,116,.28),transparent 26rem),linear-gradient(135deg,rgba(255,255,255,.06),transparent);text-align:center;box-shadow:0 28px 70px rgba(10,16,29,.2)}.final-cta h2{color:#fffaf2}.final-cta p{max-width:42rem;margin:0 0 .75rem;color:rgba(255,250,242,.78)}.final-cta .marketing-eyebrow{color:var(--marketing-gold)}.final-cta .marketing-btn--primary{color:#241b12;background:linear-gradient(135deg,#e3bd8e,var(--marketing-gold));box-shadow:0 16px 34px rgba(0,0,0,.22)}.final-cta .marketing-btn--primary:focus,.final-cta .marketing-btn--primary:hover{color:#241b12}.pricing-page{margin-top:-1rem}.pricing-hero{padding:clamp(2rem,5vw,3.75rem) 0 clamp(2.5rem,6vw,4.5rem);background:radial-gradient(circle at 18% 20%,rgba(212,165,116,.2),transparent 24rem),linear-gradient(180deg,var(--marketing-cream),var(--marketing-offwhite))}.pricing-hero__inner{display:grid;justify-items:center;gap:1.1rem;text-align:center}.pricing-hero h1{max-width:12ch}.pricing-hero .marketing-lead{max-width:46rem}.pricing-message{border:1px solid rgba(31,42,68,.12);border-radius:16px;padding:1rem 1.1rem;margin:1rem 0 0;color:var(--marketing-navy);background:rgba(255,253,249,.9);box-shadow:0 14px 32px rgba(31,42,68,.08);font-weight:750}.pricing-compare,.pricing-faq,.pricing-plans{padding:clamp(3.5rem,7vw,6rem) 0}.pricing-plans{background:var(--marketing-offwhite)}.pricing-compare{background:radial-gradient(circle at 90% 20%,rgba(95,120,108,.12),transparent 24rem),var(--marketing-cream)}.pricing-faq{background:var(--marketing-offwhite)}.pricing-empty{border:1px solid rgba(31,42,68,.11);border-radius:22px;padding:clamp(1.5rem,4vw,2.5rem);background:rgba(255,253,249,.92);box-shadow:0 18px 42px rgba(31,42,68,.08);text-align:center}.pricing-empty p{margin:.75rem auto 0;max-width:42rem;color:var(--marketing-muted);line-height:1.7}.pricing-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1rem;align-items:stretch}.pricing-card{position:relative;display:grid;gap:1.25rem;align-content:start;min-height:100%;border:1px solid rgba(31,42,68,.11);border-radius:22px;padding:clamp(1.2rem,2.4vw,1.65rem);background:linear-gradient(180deg,rgba(255,253,249,.98),rgba(250,248,245,.9)),#fff;box-shadow:0 18px 42px rgba(31,42,68,.08)}.pricing-card::before{content:"";display:block;height:1.9rem}.pricing-card--featured{border-color:rgba(212,165,116,.7);box-shadow:0 26px 58px rgba(31,42,68,.13)}.pricing-card--trial{border-color:rgba(95,120,108,.52);background:linear-gradient(180deg,rgba(255,253,249,.98),rgba(235,241,237,.9)),#fff;box-shadow:0 24px 54px rgba(31,42,68,.11);min-width:0}.pricing-card--trial .pricing-card__actions,.pricing-card--trial .pricing-card__heading,.pricing-card--trial .pricing-feature-list,.pricing-card--trial .pricing-price{min-width:0}.pricing-badge{position:absolute;top:clamp(1.2rem,2.4vw,1.65rem);right:clamp(1.2rem,2.4vw,1.65rem);width:fit-content;margin:0;border:1px solid rgba(212,165,116,.55);border-radius:999px;padding:.38rem .7rem;color:#634019;background:rgba(212,165,116,.22);font-size:.76rem;font-weight:850;letter-spacing:.08em;text-transform:uppercase}.pricing-badge--trial{border-color:rgba(95,120,108,.48);color:#314b42;background:rgba(95,120,108,.18)}.pricing-card__heading{display:grid;gap:.5rem;min-height:6.85rem;align-content:start}.comparison-grid h3,.faq-grid h3,.pricing-card h3{margin:0;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(1.35rem, 2vw, 1.75rem);line-height:1.12}.pricing-card__heading p{margin:0;color:var(--marketing-muted);line-height:1.55}.pricing-price{display:grid;gap:.2rem;border-top:1px solid rgba(31,42,68,.1);border-bottom:1px solid rgba(31,42,68,.1);padding:1rem 0}.pricing-price strong{display:inline-flex;gap:.35rem;align-items:baseline;width:fit-content;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(2.15rem, 4vw, 3rem);line-height:1;white-space:nowrap}.pricing-price small,.pricing-price span{color:var(--marketing-muted);font-weight:720}.pricing-price small{font-size:.88rem}.pricing-price strong small{color:var(--marketing-muted);font-family:"Segoe UI",Aptos,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.88rem;font-weight:800;line-height:1;white-space:nowrap}.pricing-price .pricing-price__value{color:var(--marketing-navy);white-space:nowrap}.pricing-price>small{white-space:nowrap}.pricing-card--trial .pricing-price>small{white-space:normal;overflow-wrap:anywhere}.public-info-page{margin-top:-1rem}.public-hero{padding:clamp(2rem,5vw,3.75rem) 0 clamp(2.5rem,6vw,4.5rem);background:radial-gradient(circle at 18% 20%,rgba(212,165,116,.2),transparent 24rem),linear-gradient(180deg,var(--marketing-cream),var(--marketing-offwhite))}.public-hero__inner{display:grid;justify-items:center;gap:1.05rem;text-align:center}.public-hero h1{max-width:13ch}.public-hero .marketing-lead{max-width:50rem}.public-updated{margin:0;border:1px solid rgba(31,42,68,.12);border-radius:999px;padding:.45rem .85rem;color:var(--marketing-muted);background:rgba(255,253,249,.78);font-weight:760}.public-content-section,.public-mission{padding:clamp(3.5rem,7vw,6rem) 0}.public-content-section{background:var(--marketing-offwhite)}.public-content-section--soft,.public-mission{background:radial-gradient(circle at 90% 20%,rgba(95,120,108,.12),transparent 24rem),var(--marketing-cream)}.public-narrative,.public-policy{max-width:860px}.public-narrative{display:grid;gap:1rem}.public-card p,.public-narrative p,.public-policy li,.public-policy p{color:var(--marketing-muted);font-size:clamp(1rem, 1.45vw, 1.13rem);line-height:1.75}.public-narrative p{margin:0}.public-narrative strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(1.7rem, 3vw, 2.45rem);line-height:1.15}.public-feature-panel{border:1px solid rgba(31,42,68,.11);border-radius:28px;padding:clamp(2rem,5vw,4rem);background:rgba(255,253,249,.9);box-shadow:0 22px 56px rgba(31,42,68,.1);text-align:center}.public-feature-panel h2{max-width:860px;margin:0 auto;font-size:clamp(2rem, 4vw, 3.6rem)}.public-card-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.public-card{border:1px solid rgba(31,42,68,.1);border-radius:18px;padding:clamp(1.1rem,2.2vw,1.5rem);background:linear-gradient(180deg,rgba(255,253,249,.96),rgba(250,248,245,.88)),#fff;box-shadow:0 16px 36px rgba(31,42,68,.07)}.public-card h2,.public-policy h2{margin:0;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(1.35rem, 2.1vw, 1.85rem)}.public-card p{margin:.7rem 0 0}.public-policy{display:grid;gap:clamp(1.4rem,3vw,2.1rem)}.public-policy section{border-bottom:1px solid rgba(31,42,68,.1);padding-bottom:clamp(1.2rem,2.6vw,1.8rem)}.public-policy p{margin:.65rem 0 0}.public-policy ul{display:grid;gap:.55rem;margin:.75rem 0 0;padding-left:1.25rem}.public-card a,.public-policy a{color:var(--marketing-navy);font-weight:820}.public-disclaimer{border:1px solid rgba(212,165,116,.38);border-radius:18px;padding:1rem 1.1rem;background:rgba(212,165,116,.13)}.public-disclaimer p{margin:0;color:#6b4a22;font-size:.96rem;font-weight:720}.public-footer{border-top:1px solid rgba(255,250,242,.12);background:#1f2a44}.public-footer__inner{display:flex;justify-content:space-between;gap:1rem;align-items:center;padding-top:1.25rem;padding-bottom:1.25rem}.public-footer__brand{color:#fffaf2;font-family:Georgia,"Times New Roman",serif;font-size:1.25rem;font-weight:700;text-decoration:none}.public-footer__brand:focus,.public-footer__brand:hover{color:#d4a574}.public-footer__nav{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.55rem 1rem}.public-footer__nav a{color:rgba(255,250,242,.76);font-size:.92rem;font-weight:760;text-decoration:none}.public-footer__nav a:focus,.public-footer__nav a:hover{color:#d4a574}.pricing-feature-list{display:grid;gap:.65rem;margin:0;padding:0;list-style:none}.pricing-feature-list li{position:relative;padding-left:1.35rem;color:var(--marketing-navy);font-weight:740;line-height:1.35}.pricing-feature-list li::before{content:"";position:absolute;left:0;top:.44rem;width:.58rem;height:.58rem;border-radius:999px;background:var(--marketing-gold);box-shadow:0 0 0 4px rgba(212,165,116,.18)}.pricing-card__actions{display:grid;gap:.7rem;margin-top:auto}.pricing-card__actions .marketing-btn{width:100%}.pricing-card--trial .pricing-card__actions .marketing-btn{box-sizing:border-box;max-width:100%;padding-inline:0.95rem;text-align:center;white-space:normal}.pricing-link{display:inline-flex;justify-content:center;color:var(--marketing-navy);font-weight:820;text-decoration-color:rgba(31,42,68,0.24)}.pricing-link:focus,.pricing-link:hover{color:#8b612e}.comparison-grid,.faq-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.comparison-grid article,.faq-grid article{border:1px solid rgba(31,42,68,.1);border-radius:18px;padding:clamp(1.1rem,2.2vw,1.5rem);background:rgba(255,253,249,.9);box-shadow:0 16px 36px rgba(31,42,68,.07)}.comparison-grid p,.faq-grid p{margin:.7rem 0 0;color:var(--marketing-muted);line-height:1.7}.reveal-section{opacity:0;transform:translateY(24px);transition:opacity .72s ease,transform .72s ease}.marketing-hero.reveal-section{opacity:1;transform:none}.reveal-section.is-visible{opacity:1;transform:translateY(0)}@keyframes productFloat{0%,100%{transform:rotate(1deg) translateY(0)}50%{transform:rotate(1deg) translateY(-12px)}}@media (prefers-reduced-motion:reduce){.hero-product,.reveal-section{animation:none;transition:none}.reveal-section{opacity:1;transform:none}}@media (max-width:1060px){.founder-story__grid,.marketing-hero__grid,.problem-section{grid-template-columns:1fr}.marketing-home h1{max-width:13ch}.hero-product{transform:none;animation:none}.problem-section--reverse .problem-visual{order:0}.testimonial-grid{grid-template-columns:1fr}.comparison-grid,.faq-grid,.public-card-grid{grid-template-columns:1fr}}@media (max-width:760px){.marketing-container{width:min(100% - 24px,1180px)}.marketing-home{margin-top:-.75rem}.marketing-hero{padding-top:1.8rem}.marketing-actions,.marketing-actions .marketing-btn{width:100%}.product-mockup{grid-template-columns:1fr;min-height:0}.product-sidebar{display:flex;gap:.4rem;overflow-x:auto;border-right:0;border-bottom:1px solid rgba(31,42,68,.1)}.product-sidebar strong{flex:0 0 auto;margin:0 .4rem 0 0}.product-sidebar span{flex:0 0 auto}.hero-proof,.product-topline{display:grid}.hero-proof{grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem}.hero-proof div{display:block}.hero-proof dt{font-size:1.8rem}.hero-proof dd{font-size:.86rem}.product-grid{grid-template-columns:1fr}.writer-workspace{display:grid;gap:.75rem;min-height:0;transform:none;animation:none}.writer-workspace::before{display:none}.workspace-card,.workspace-manuscript,.workspace-progress{position:relative;inset:auto;width:auto}.workspace-manuscript{min-height:0}.workspace-progress{flex-direction:column;height:auto;border-radius:18px}.mock-chart{min-height:145px}.problem-section{min-height:0;padding:2.25rem 0}.problem-visual{min-height:260px;border-radius:18px}.visual-plot,.visual-series,.visual-threads{grid-template-columns:repeat(2,1fr);padding:1rem}.visual-series span{min-height:7.5rem}.visual-docs span,.visual-notes span{max-width:12rem;font-size:.88rem}.founder-mark{max-width:220px}.pricing-hero{padding-top:1.8rem}.pricing-card-grid{grid-template-columns:1fr}.public-hero{padding-top:1.8rem}.public-footer__inner{align-items:flex-start;flex-direction:column}.public-footer__nav{justify-content:flex-start}}@media (max-width:520px){.marketing-home h1{font-size:clamp(2.7rem, 13vw, 3.55rem);line-height:1}.browser-frame{border-radius:16px}.product-sidebar span:not(.is-active){display:none}.visual-flow span{font-size:.78rem}.person{width:4.3rem;height:4.3rem}}@media (max-width:1200px){.timeline-filter-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.timeline-control-panel{align-items:stretch}.relationship-map-controls{grid-template-columns:repeat(2,minmax(150px,1fr))}.relationship-map-workspace{grid-template-columns:1fr}.relationship-map-details{position:static;max-height:none}}@media (max-width:760px){.context-header,.page-heading,.workspace-heading{align-items:stretch;flex-direction:column}.button-row{align-items:stretch}.button-row .btn,.button-row form{width:100%}.attachment-preview-row{grid-template-columns:1fr}.attachment-thumb{width:100%;max-width:260px}} \ No newline at end of file diff --git a/PlotLine/wwwroot/css/site.css b/PlotLine/wwwroot/css/site.css index 61d8cad..fecc38e 100644 --- a/PlotLine/wwwroot/css/site.css +++ b/PlotLine/wwwroot/css/site.css @@ -1842,27 +1842,6 @@ body.timeline-inspector-resizing { 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: 0.95rem; - color: var(--plotline-accent-dark); -} - .location-helper { border: 1px solid rgba(138, 111, 61, 0.22); border-radius: 8px; @@ -2123,36 +2102,9 @@ body.timeline-inspector-resizing { min-width: 0; } -.scene-inspector-root { - display: grid; - gap: 12px; -} - -.scene-overview-card { - display: grid; - gap: 10px; - border: 1px solid rgba(47, 111, 99, 0.18); - border-radius: 10px; - padding: 12px; - background: linear-gradient(180deg, rgba(47, 111, 99, 0.08), rgba(255, 255, 255, 0.88)); -} - -.scene-overview-card h3 { - margin: 0; - font-size: 1.05rem; -} - -.scene-overview-card .muted { - display: flex; - flex-wrap: wrap; - gap: 7px; - margin: 0; -} - .overview-chip-grid, .context-nav, -.breadcrumb-trail, -.inspector-nav-links { +.breadcrumb-trail { display: flex; flex-wrap: wrap; gap: 7px; @@ -2189,97 +2141,6 @@ body.timeline-inspector-resizing { 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, 0.94); - box-shadow: 0 10px 24px rgba(55, 48, 39, 0.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: 0.76rem; - font-weight: 800; - text-decoration: none; -} - -.inspector-nav-links a:hover, -.inspector-nav-links a.active { - color: var(--plotline-accent-dark); - border-color: rgba(47, 111, 99, 0.35); - background: rgba(47, 111, 99, 0.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: 0.95rem; - font-weight: 900; - text-align: left; - background: transparent; -} - -.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, 0.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: 0.75rem; -} - -.inspector-subheading { - margin: 14px 0 8px; - color: var(--plotline-muted); - font-size: 0.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; } @@ -3628,18 +3489,6 @@ body.dragging-location [data-drag-type="location"] { 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, 0.95); - backdrop-filter: blur(8px); -} - .story-bible-heading { align-items: end; } @@ -4409,8 +4258,7 @@ body.dragging-location [data-drag-type="location"] { .breadcrumb-trail, .context-header, .button-row, - .story-bible-nav, - .inspector-quick-nav { + .story-bible-nav { display: none !important; } @@ -6272,50 +6120,6 @@ body.scene-inspector-editor-resizing { color: var(--muted-text, #5d6f65); } -.scene-occupancy-form { - display: grid; - gap: 0.5rem; -} - -.scene-occupancy-status { - justify-self: start; - border-radius: 999px; - padding: 0.2rem 0.55rem; - color: var(--plotline-muted); - background: var(--plotline-soft); - font-size: 0.78rem; - font-weight: 700; -} - -.scene-occupancy-status[data-save-state="saving"] { - color: #7a4d08; - background: #fff4d6; -} - -.scene-occupancy-status[data-save-state="failed"] { - color: #842029; - background: #f8d7da; -} - -.scene-occupancy-grid { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 1rem; -} - -.scene-occupancy-grid h4 { - margin: 0 0 0.5rem; - font-size: 0.95rem; -} - -.scene-occupancy-row { - display: grid; - grid-template-columns: minmax(8rem, 0.45fr) minmax(0, 0.55fr); - align-items: center; - gap: 0.5rem; - margin-bottom: 0.45rem; -} - .floor-plan-editor--occupancy .floor-plan-block { cursor: default; touch-action: auto; @@ -6595,12 +6399,6 @@ body.scene-inspector-editor-resizing { border-color: rgba(212, 154, 98, .22); } -[data-bs-theme="dark"] .scene-occupancy-status, -.dark .scene-occupancy-status { - color: #d9c8b8; - background: rgba(212, 154, 98, .12); -} - [data-bs-theme="dark"] .floor-plan-occupancy-token, .dark .floor-plan-occupancy-token { border-color: #1f2630; diff --git a/PlotLine/wwwroot/css/site.min.css b/PlotLine/wwwroot/css/site.min.css index 1421e34..d735e1a 100644 --- a/PlotLine/wwwroot/css/site.min.css +++ b/PlotLine/wwwroot/css/site.min.css @@ -1 +1 @@ -html{font-size:15px;min-height:100%}@media (min-width:768px){html{font-size:16px}}:root{--plotline-ink:#1e252b;--plotline-muted:#66717b;--plotline-paper:#fbfaf7;--plotline-panel:#ffffff;--plotline-line:#d8ddd8;--plotline-accent:#2f6f63;--plotline-accent-dark:#22534a;--plotline-soft:#eef5f2;--timeline-label-width:180px;--timeline-scene-width:220px;--timeline-grid-gap:10px}body{min-height:100%;margin-bottom:0;color:var(--plotline-ink);background:var(--plotline-paper)}a{color:var(--plotline-accent-dark)}.btn-primary{--bs-btn-bg:var(--plotline-accent);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent-dark);--bs-btn-hover-border-color:var(--plotline-accent-dark)}.btn-outline-primary{--bs-btn-color:var(--plotline-accent-dark);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent);--bs-btn-hover-border-color:var(--plotline-accent)}.plotline-nav{background:rgba(255,255,255,.94);backdrop-filter:blur(8px)}.plotline-shell{max-width:1480px;padding-left:24px;padding-right:24px}.plotline-shell-wide{max-width:none;padding-left:clamp(18px,2vw,32px);padding-right:clamp(18px,2vw,32px)}.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin:18px 0 24px}.workspace-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin:14px 0 18px}.workspace-heading h1{margin:0;font-size:clamp(1.8rem, 3vw, 2.7rem);line-height:1.05}.page-heading.compact{max-width:980px}.page-heading h1{margin:0;font-size:clamp(2rem, 4vw, 3.2rem);line-height:1.05;letter-spacing:0}.eyebrow{margin:0 0 6px;color:var(--plotline-accent-dark);font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.lead-text{max-width:760px;margin:10px 0 0;color:var(--plotline-muted);font-size:1.05rem}.button-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.asset-card-footer form,.button-row form,.compact-buttons form,form[data-confirm-message],td.text-end form{display:inline-flex;align-items:center;margin:0}td.text-end{white-space:nowrap}.content-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.edit-panel,.empty-panel,.list-section,.plain-card{background:var(--plotline-panel);border:1px solid var(--plotline-line);border-radius:8px;padding:20px;box-shadow:0 10px 24px rgba(30,37,43,.04)}.empty-panel h2,.list-section h2,.plain-card h2{margin-top:0;font-size:1.35rem}.empty-panel p,.muted,.plain-card p{color:var(--plotline-muted)}.edit-panel{max-width:980px}.feature-request-admin-page .edit-panel,.feature-request-admin-page .page-heading.compact{max-width:none}.feature-request-admin-table{table-layout:fixed}.feature-request-admin-table td,.feature-request-admin-table th{vertical-align:middle}.feature-request-admin-table__preview{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feature-request-admin-table__action{width:78px}@media (max-width:1100px){.feature-request-admin-table{table-layout:auto}.feature-request-admin-table__preview{max-width:160px}}.trial-dashboard-banner,.trial-status-panel{border:1px solid var(--plotline-line);border-radius:8px;padding:18px 20px;background:var(--plotline-panel)}.trial-status-panel{display:grid;gap:12px;margin-bottom:18px}.trial-status-panel--signup{grid-template-columns:minmax(0,1fr) auto;align-items:center;max-width:980px}.trial-dashboard-banner h2,.trial-status-panel h2,.trial-status-panel h3{margin:0}.trial-dashboard-banner p,.trial-status-panel p{margin-bottom:0}.trial-dashboard-banner,.trial-status-panel__heading{display:flex;gap:16px;align-items:center;justify-content:space-between}.trial-dashboard-banner{margin-bottom:18px}.trial-dashboard-banner__body{min-width:0}.trial-dashboard-banner__actions{display:flex;flex:0 0 auto;flex-wrap:wrap;gap:8px}.trial-progress{height:10px;overflow:hidden;border-radius:999px;background:rgba(84,68,48,.12)}.trial-progress__bar{height:100%;border-radius:inherit}.trial-dashboard-banner[hidden],.trial-status-panel[hidden]{display:none}.location-page .drag-drop-panel,.location-page .edit-panel,.location-page .empty-panel,.location-page .page-heading.compact{max-width:none}.import-panel,.import-preview-section{max-width:none}.import-json-input{font-family:Consolas,"Liberation Mono",Menlo,monospace;font-size:.88rem;line-height:1.45;min-height:34rem;max-height:64vh;overflow:auto;resize:vertical;white-space:pre}.import-counts,.import-preview-heading{display:flex;align-items:flex-start;gap:12px}.import-preview-heading{justify-content:space-between;margin-bottom:16px}.import-counts{flex-wrap:wrap}.import-counts span{display:inline-flex;align-items:baseline;gap:5px;border:1px solid var(--plotline-line);border-radius:999px;padding:5px 11px;background:var(--plotline-soft);color:var(--plotline-muted);font-weight:700}.import-counts strong{color:var(--plotline-ink)}.import-tree{display:grid;gap:12px}.import-tree-book{border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:rgba(255,255,255,.54)}.import-tree-book>summary,.import-tree-chapter>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;cursor:pointer}.import-tree-book>summary span,.import-tree-chapter>summary span{color:var(--plotline-muted);font-size:.84rem;font-weight:700;white-space:nowrap}.import-tree-book h3{margin:0 0 10px;font-size:1.08rem}.import-tree-chapter{border-top:1px solid var(--plotline-line);padding:10px 0 0;margin-top:10px}.import-tree-chapter ul{margin:8px 0 0;color:var(--plotline-muted)}.import-scene-meta{display:block;margin-top:2px;color:var(--plotline-muted);font-size:.82rem}.import-mapping-summary{display:grid;gap:6px;border:1px solid rgba(184,118,43,.28);border-radius:8px;padding:10px 12px;margin-bottom:14px;background:rgba(251,236,211,.5);color:var(--plotline-muted);font-size:.9rem}.import-duplicate-confirm{border:1px solid rgba(184,118,43,.34);border-radius:8px;padding:12px 12px 12px 38px;background:rgba(251,236,211,.72)}.import-confirmation,.import-docs details{border:1px solid var(--plotline-line);border-radius:8px;padding:16px;background:rgba(255,255,255,.42)}.import-confirmation h3,.import-doc-grid h3{margin-top:0;font-size:1.05rem}.import-docs summary{cursor:pointer;font-weight:800}.import-doc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-top:14px}.import-message-list ul{max-height:16rem;overflow:auto}.scene-editor{max-width:1180px}.table{margin-bottom:0}.table th{color:var(--plotline-muted);font-size:.78rem;letter-spacing:.06em;text-transform:uppercase}.narrow{width:90px;white-space:nowrap}.status-pill{display:inline-flex;align-items:center;width:fit-content;border:1px solid #c8d8d2;border-radius:999px;padding:2px 8px;color:var(--plotline-accent-dark);background:var(--plotline-soft);font-size:.78rem;font-weight:700;white-space:nowrap}.dashboard-summary-card{border-color:var(--plotline-line)}.dashboard-summary-body{padding:10px 12px}.dashboard-summary-label{margin-bottom:4px;font-size:.7rem;line-height:1.15}.dashboard-summary-value{display:block;font-size:1.45rem;line-height:1}.dashboard-summary-calm{border-color:rgba(47,111,99,.28);background:rgba(238,245,242,.62)}.dashboard-summary-mild{border-color:rgba(197,139,43,.32);background:rgba(255,248,232,.68)}.dashboard-summary-attention{border-color:rgba(142,80,103,.32);background:rgba(252,241,246,.7)}.dashboard-progress-card{border-color:rgba(47,111,99,.18);background:linear-gradient(180deg,#fff 0,rgba(238,245,242,.64) 100%)}.dashboard-progress-body{padding:12px 14px}.dashboard-progress-heading{margin-bottom:8px}.dashboard-progress-title{margin:0 0 2px;font-size:1.05rem;line-height:1.2}.dashboard-series-progress{height:7px;background:rgba(47,111,99,.1)}.dashboard-series-progress .progress-bar{background:linear-gradient(90deg,var(--plotline-accent),#6fa99b)}.dashboard-progress-source{border-color:rgba(47,111,99,.2);color:var(--plotline-accent-dark);background:rgba(238,245,242,.9)}.dashboard-book-title-block h3{line-height:1.16}.dashboard-book-title-block a{color:var(--plotline-ink);text-decoration-color:rgba(47,111,99,0.35)}.dashboard-book-subtitle{color:var(--plotline-muted);font-size:.95rem;line-height:1.25}.dashboard-status-pill{border-color:var(--dashboard-status-border,#c8d8d2);color:var(--dashboard-status-ink,var(--plotline-accent-dark));background:var(--dashboard-status-bg,var(--plotline-soft))}.dashboard-status-published{--dashboard-status-border:rgba(47, 111, 99, 0.32);--dashboard-status-bg:#e7f2ed;--dashboard-status-ink:#22534a}.dashboard-status-drafting{--dashboard-status-border:rgba(184, 118, 43, 0.35);--dashboard-status-bg:#fff2dd;--dashboard-status-ink:#7b4b12}.dashboard-status-planning{--dashboard-status-border:rgba(51, 117, 155, 0.3);--dashboard-status-bg:#e9f3f8;--dashboard-status-ink:#245b78}.dashboard-status-outlining,.dashboard-status-research{--dashboard-status-border:rgba(103, 80, 164, 0.26);--dashboard-status-bg:#f0edf8;--dashboard-status-ink:#51417c}.dashboard-status-revising{--dashboard-status-border:rgba(123, 82, 148, 0.3);--dashboard-status-bg:#f4eefa;--dashboard-status-ink:#5f3e73}.dashboard-status-editing{--dashboard-status-border:rgba(68, 75, 130, 0.3);--dashboard-status-bg:#eceef8;--dashboard-status-ink:#343b72}.dashboard-status-proofreading{--dashboard-status-border:rgba(43, 130, 123, 0.3);--dashboard-status-bg:#e6f5f2;--dashboard-status-ink:#23625d}.dashboard-status-ready{--dashboard-status-border:rgba(185, 142, 30, 0.34);--dashboard-status-bg:#fff6d8;--dashboard-status-ink:#765a0f}.dashboard-status-paused{--dashboard-status-border:rgba(102, 113, 123, 0.28);--dashboard-status-bg:#f0f2f1;--dashboard-status-ink:#56616b}.dashboard-status-archived{--dashboard-status-border:rgba(139, 80, 86, 0.28);--dashboard-status-bg:#f3eded;--dashboard-status-ink:#76474d}.dashboard-attention-soft{border-color:rgba(102,113,123,.24);color:#56616b;background:#f3f4f2}.word-companion-follow-toggle[aria-pressed=true]{border-color:rgba(47,111,99,.36);color:var(--plotline-accent-dark);background:var(--plotline-soft);font-weight:700}.word-companion-follow-toggle[aria-pressed=true]::after{content:" On"}.word-companion-follow-toggle[aria-pressed=false]::after{content:" Off"}.order-buttons{display:flex;gap:6px}.purpose-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;max-height:260px;overflow:auto;padding:10px;border:1px solid var(--plotline-line);border-radius:8px;background:#fcfcfb}.purpose-check{display:flex;align-items:center;gap:8px;font-size:.92rem}.timeline-filter{display:flex;align-items:center;gap:8px;min-width:min(420px,100%)}.workspace-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:0;align-items:start;--timeline-inspector-width:min(40vw, 560px)}.workspace-layout.inspector-drawer-open{grid-template-columns:minmax(420px,1fr) 10px minmax(420px,var(--timeline-inspector-width));gap:12px}.timeline-workspace{min-width:0;max-width:100%}.timeline-inspector-resizer{position:sticky;top:76px;z-index:25;width:10px;height:calc(100vh - 96px);border-radius:999px;cursor:col-resize;background:linear-gradient(180deg,rgba(47,111,99,.16),rgba(47,111,99,.04))}.timeline-inspector-resizer::before{content:"";display:block;width:2px;height:48px;margin:18px auto;border-radius:999px;background:var(--plotline-accent);opacity:.55}.timeline-inspector-resizer:focus-visible,.timeline-inspector-resizer:hover{background:rgba(47,111,99,.16)}body.timeline-inspector-resizing{cursor:col-resize;user-select:none}.pacing-panel{margin-top:14px;margin-bottom:0;border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:#fff;box-shadow:0 10px 24px rgba(30,37,43,.04)}.pacing-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.pacing-heading h2{margin:0;font-size:1.1rem}.metric-graph-stack{display:grid;gap:10px;max-width:100%;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:4px}.metric-graph-row{display:grid;grid-template-columns:150px minmax(260px,1fr);gap:10px;align-items:center;min-width:max(100%,calc(150px + (var(--scene-count,1) * 34px)))}.metric-graph-label{color:var(--plotline-muted);font-size:.84rem;font-weight:700}.metric-graph-points{display:grid;grid-template-columns:repeat(var(--scene-count),minmax(28px,1fr));gap:5px;align-items:end;min-height:52px;border-radius:8px;padding:6px;background:linear-gradient(180deg,#f6faf8 0,#edf4f1 100%);min-width:calc(var(--scene-count) * 34px)}.metric-point{display:flex;align-items:flex-end;justify-content:center;height:48px;min-width:28px;color:var(--plotline-accent-dark);text-decoration:none}.metric-point::before{content:"";display:block;width:100%;height:max(8px,var(--metric-height));border-radius:5px 5px 2px 2px;background:linear-gradient(180deg,#6fa99b,var(--plotline-accent-dark));box-shadow:inset 0 1px 0 rgba(255,255,255,.35)}.metric-point span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.timeline-shell{overflow-x:auto;padding:16px;border:1px solid var(--plotline-line);border-radius:8px;background:linear-gradient(180deg,#fff 0,#f7faf8 100%)}.workspace-timeline{min-height:420px}.timeline-series-row{display:grid;grid-template-columns:var(--timeline-label-width) max-content;gap:var(--timeline-grid-gap);align-items:stretch;width:max-content;min-width:100%}.timeline-project-title{position:sticky;left:0;z-index:20;display:grid;align-content:start;gap:4px;width:var(--timeline-label-width);min-height:100%;border-radius:8px;padding:12px;color:#fff;background:var(--plotline-accent-dark);font-weight:700;box-shadow:8px 0 18px rgba(30,37,43,.08)}.timeline-book-title span,.timeline-project-title span{color:rgba(255,255,255,.78);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase}.timeline-book-title strong,.timeline-project-title strong{line-height:1.15}.timeline-books{display:flex;gap:var(--timeline-grid-gap);align-items:stretch}.timeline-book{flex:0 0 auto;width:calc((var(--book-scene-count) * var(--timeline-scene-width)) + ((var(--book-scene-count) - 1) * var(--timeline-grid-gap)));min-width:var(--timeline-scene-width)}.timeline-book-title{display:grid;gap:2px;margin-bottom:var(--timeline-grid-gap);border-radius:8px;padding:10px 12px;color:#fff;background:var(--plotline-accent-dark);font-weight:700}.timeline-chapters{display:flex;gap:var(--timeline-grid-gap);align-items:flex-start}.timeline-chapter{flex:0 0 auto;width:calc((var(--chapter-scene-count) * var(--timeline-scene-width)) + ((var(--chapter-scene-count) - 1) * var(--timeline-grid-gap)));min-width:var(--timeline-scene-width);box-sizing:border-box;border-radius:8px;background:rgba(238,245,242,.7);outline:1px solid #d4ded8;outline-offset:0;overflow:visible}.timeline-chapter-title{display:grid;gap:2px;border-bottom:1px solid #d4ded8;padding:10px 12px;color:var(--plotline-accent-dark);font-weight:700}.timeline-chapter-title span{color:var(--plotline-muted);font-size:.76rem;text-transform:uppercase}.timeline-scenes{display:grid;grid-template-columns:repeat(var(--chapter-scene-count),minmax(0,1fr));gap:var(--timeline-grid-gap);width:100%;box-sizing:border-box;min-height:190px;padding:0}.timeline-empty-scene,.timeline-scene-card{display:flex;flex-direction:column;gap:6px;width:100%;min-width:0;box-sizing:border-box;border:1px solid var(--plotline-line);border-radius:8px;padding:12px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 8px 18px rgba(30,37,43,.05)}.timeline-scene-card:hover{border-color:var(--plotline-accent);color:var(--plotline-ink)}.metric-point-placeholder,.timeline-placeholder-cell,.timeline-placeholder-scene{cursor:default;opacity:.72}.timeline-placeholder-scene{align-items:center;justify-content:center;border-style:dashed;color:var(--plotline-muted);background:rgba(255,255,255,.38);font-size:.86rem;font-weight:800;text-align:center}.timeline-placeholder-cell{border-style:dashed;background:repeating-linear-gradient(-45deg,rgba(216,221,216,.18) 0,rgba(216,221,216,.18) 7px,rgba(255,255,255,.18) 7px,rgba(255,255,255,.18) 14px)}.metric-point-placeholder::before{height:4px;background:rgba(102,113,123,.2);box-shadow:none}.timeline-scene-card.selected{border-color:var(--plotline-accent-dark);box-shadow:0 0 0 3px rgba(47,111,99,.16),0 10px 22px rgba(30,37,43,.08)}.purpose-chip-row,.scene-badge-row{display:flex;flex-wrap:wrap;gap:5px;align-items:center}.warning-placeholder{display:inline-flex;width:fit-content;border:1px dashed #d6b25e;border-radius:999px;padding:2px 8px;color:#755715;background:#fff8e8;font-size:.74rem;font-weight:700}.warning-placeholder.active{border-color:rgba(159,69,69,.36);color:#8a3434;background:rgba(255,232,232,.9);gap:5px;font-weight:800}.dependency-placeholder{display:inline-flex;width:fit-content;border:1px solid rgba(47,111,99,.2);border-radius:999px;padding:2px 8px;color:var(--plotline-accent-dark);background:rgba(47,111,99,.08);font-size:.74rem;font-weight:700}.purpose-chip{display:inline-flex;width:fit-content;border-radius:999px;padding:2px 7px;color:#38453e;background:#edf0eb;font-size:.72rem;font-weight:700}.future-lane-placeholder{border-top:1px dashed #cbd8d2;padding:8px 12px;color:var(--plotline-muted);font-size:.78rem;background:rgba(255,255,255,.45)}.metric-timeline-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.metric-shape-controls{position:sticky;left:0;z-index:6;display:grid;gap:8px;width:calc(var(--timeline-label-width) + (var(--scene-count) * var(--timeline-scene-width)) + (var(--scene-count) * var(--timeline-grid-gap)));min-width:100%;border-radius:8px;padding:10px;background:rgba(255,255,255,.88)}.metric-timeline-row{display:grid;grid-template-columns:var(--timeline-label-width) calc((var(--scene-count) * var(--timeline-scene-width)) + ((var(--scene-count) - 1) * var(--timeline-grid-gap)));gap:var(--timeline-grid-gap);align-items:stretch}.metric-lane-label{position:sticky;left:0;z-index:12;display:grid;align-content:start;gap:4px;min-height:320px;border:1px solid rgba(47,111,99,.18);border-radius:8px;padding:10px;color:var(--plotline-accent-dark);background:#fff;box-shadow:0 6px 14px rgba(30,37,43,.04)}.metric-lane-label span{color:var(--plotline-muted);font-size:.78rem;font-weight:600}.colour-swatch{display:inline-block;width:18px;height:18px;border:1px solid rgba(30,37,43,.18);border-radius:999px;vertical-align:middle}.plot-lane-board{position:relative;display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.plot-lane-svg-overlay{position:absolute;inset:0 auto auto 0;z-index:4;pointer-events:none;overflow:visible}.plot-lane-svg-health-overlay{z-index:8}.plot-line-svg-path{fill:none;stroke-width:3.5;stroke-linecap:round;opacity:.72}.plot-line-svg-segment-dormant{stroke-dasharray:9 8;opacity:.48}.plot-line-svg-connector{fill:none;stroke-width:3;stroke-linecap:round;opacity:.58}.plot-line-svg-path.plotline-state-questionable,.plot-line-svg-path.plotline-state-resolved{stroke:#8c9491;opacity:.42}.plot-line-svg-path.plotline-state-abandoned{stroke:#9b2f36;opacity:.5}.plot-event-svg-node.plotline-state-questionable,.plot-event-svg-node.plotline-state-resolved{opacity:.88}.plot-event-svg-node.plotline-state-abandoned{opacity:.9}.plot-event-svg-node.plotline-state-abandoned line{stroke:#ffffff}.plotline-health-marker circle,.plotline-health-marker path{fill:#f4c430;stroke:#8a6712;stroke-width:1.5}.plotline-health-marker{pointer-events:visiblePainted}.plotline-health-marker line,.plotline-health-marker text{stroke:#5e4710;fill:#5e4710;stroke-width:1.6;stroke-linecap:round}.plotline-health-marker text{font-size:11px;font-weight:800;stroke-width:0;pointer-events:none}.plotline-health-count{fill:#ffffff;stroke:#8a6712;stroke-width:2;paint-order:stroke}.plotline-health-marker-dangling circle,.plotline-health-marker-dangling path{fill:#f8df8f}.plotline-health-marker-abandoned circle,.plotline-health-marker-abandoned path{fill:#d85c63;stroke:#8b1e2d}.plotline-health-marker-abandoned line{stroke:#ffffff}.plot-event-svg-node circle,.plot-event-svg-node ellipse,.plot-event-svg-node path{stroke:#ffffff;stroke-width:2}.plot-event-svg-node line,.plot-event-svg-node path[fill=none]{stroke:#8b1e2d;stroke-width:3.4;stroke-linecap:round;stroke-linejoin:round}.plot-event-svg-node-reveal ellipse{stroke-width:2.4}.plot-event-svg-label{font-size:9.5px;font-weight:900;font-family:system-ui,-apple-system,"Segoe UI",sans-serif;paint-order:stroke;stroke:rgba(30,37,43,0.22);stroke-width:.8px;pointer-events:none}.plot-event-svg-node-resolve path[fill=none]{stroke:#ffffff}.lane-board-heading,.metric-lane-board-heading,.plot-lane-board-heading{position:sticky;left:0;z-index:6;display:flex;align-items:center;justify-content:space-between;gap:14px;width:calc(var(--timeline-label-width) + (var(--scene-count) * var(--timeline-scene-width)) + (var(--scene-count) * var(--timeline-grid-gap)));min-width:100%;margin-bottom:2px;border-radius:8px;padding:8px 10px;color:var(--plotline-accent-dark);background:rgba(255,255,255,.92);font-weight:700;box-shadow:0 8px 16px rgba(30,37,43,.05)}.lane-board-heading small,.metric-lane-board-heading small,.plot-lane-board-heading small{color:var(--plotline-muted);font-weight:500;white-space:nowrap}.timeline-heading-with-help{display:inline-flex;align-items:center;gap:6px;min-width:0}.plot-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.plot-lane-label{position:sticky;left:0;z-index:12;display:flex;align-items:center;gap:8px;min-height:46px;border:1px solid color-mix(in srgb,var(--plot-colour),#fff 55%);border-left:5px solid var(--plot-colour);border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.plot-lane-label:hover{color:var(--plotline-ink);border-color:var(--plot-colour)}.plot-lane-slots{display:contents}.plot-lane-slot{display:flex;flex-wrap:wrap;align-content:center;align-items:center;justify-content:center;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(255,255,255,.62)}.thread-marker{position:relative;z-index:5;display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:34px;height:30px;border:2px solid color-mix(in srgb,var(--plot-colour),#000 20%);border-radius:999px;padding:0 8px;color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 66%);font-size:.74rem;font-weight:900;text-decoration:none;box-shadow:0 3px 8px rgba(30,37,43,.14)}.plot-lane-board [data-plot-event-node]{opacity:1}.thread-marker:focus-visible,.thread-marker:hover{color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 48%);outline:3px solid rgba(47,111,99,.22);outline-offset:2px}.thread-marker.resolved{border-color:#5a8c60;background:#e6f4e7;color:#24512b}.thread-marker.contradicted{border-color:#b45c5c;background:#fff0f0;color:#7a2222}.thread-events-section{margin-top:16px}.thread-event-list{display:grid;gap:8px;margin-bottom:12px}.thread-event-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid color-mix(in srgb,var(--plot-colour),#fff 55%);border-left:4px solid var(--plot-colour);border-radius:8px;padding:8px;background:#fff}.thread-event-item>div{display:grid;gap:3px}.thread-event-marker{display:inline-flex;align-items:center;justify-content:center;width:fit-content;min-width:24px;height:22px;border-radius:999px;padding:0 7px;background:color-mix(in srgb,var(--plot-colour),#fff 72%);font-size:.72rem;font-weight:800}.thread-event-create{border-top:1px solid var(--plotline-line);padding-top:12px}.asset-lane-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.asset-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.asset-lane-label{position:sticky;left:0;z-index:12;display:grid;gap:2px;min-height:46px;border:1px solid #d4d7df;border-left:5px solid #6b5b95;border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.asset-lane-label span{color:var(--plotline-muted);font-size:.75rem}.asset-lane-slots{display:contents}.asset-lane-slot{display:flex;flex-wrap:wrap;align-content:flex-start;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(250,249,255,.72)}.asset-event-marker,.asset-marker{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid #7f70aa;border-radius:7px;padding:0 7px;color:#33284e;background:#eee9fb;font-size:.72rem;font-weight:800;text-decoration:none}.asset-marker:hover{color:#33284e;background:#dfd6f7}.asset-marker.timeline-marker-story-turn,.character-marker.timeline-marker-story-turn{border-width:2px}.asset-marker.timeline-marker-important,.character-marker.timeline-marker-important{box-shadow:inset 0 -3px 0 rgba(197,139,43,.36)}.asset-marker.timeline-marker-state-change,.character-marker.timeline-marker-state-change{border-style:double}.asset-marker.timeline-marker-transfer{box-shadow:inset 3px 0 0 rgba(47,111,99,.32)}.character-marker.timeline-marker-exit{opacity:.86;border-style:dashed}.asset-marker.timeline-marker-has-warning,.character-marker.timeline-marker-has-warning{box-shadow:0 0 0 2px rgba(179,95,59,.22)}.asset-events-section{margin-top:16px}.asset-event-list,.asset-mini-list{display:grid;gap:8px;margin-bottom:12px}.asset-event-item,.asset-mini-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid #ded9ea;border-left:4px solid #6b5b95;border-radius:8px;padding:8px;background:#fff}.asset-event-item>div,.asset-mini-item>div{display:grid;gap:3px}.asset-create-form{border-top:1px solid var(--plotline-line);padding-top:12px}.asset-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.asset-card{display:grid;gap:12px;border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:#fff;box-shadow:0 8px 18px rgba(30,37,43,.04)}.asset-card h2{margin:0;font-size:1.1rem}.asset-card-footer{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.asset-detail-grid{display:grid;grid-template-columns:minmax(260px,0.8fr) minmax(320px,1.2fr);gap:14px}.character-lane-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.character-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.character-lane-label{position:sticky;left:0;z-index:12;display:grid;gap:2px;min-height:46px;border:1px solid #d7d4ce;border-left:5px solid #8a6f3d;border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.character-lane-label span{color:var(--plotline-muted);font-size:.75rem}.character-lane-slots{display:contents}.character-lane-slot{display:flex;flex-wrap:wrap;align-content:flex-start;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(255,252,246,.72)}.character-marker{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid #9a7a3f;border-radius:999px;padding:0 7px;color:#4f3810;background:#fff2d7;font-size:.72rem;font-weight:800;text-decoration:none}.character-card{border-left:4px solid #8a6f3d}.character-section{margin-top:16px}.character-item{border-left-color:#8a6f3d}.character-appearance-card{display:grid;gap:8px;border:1px solid #d7d4ce;border-left:4px solid #8a6f3d;border-radius:8px;padding:10px;background:#fff}.character-appearance-summary{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.character-appearance-summary>div:first-child{display:grid;gap:3px}.character-appearance-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.character-appearance-edit .asset-create-form{margin-top:8px;border-top:1px solid var(--plotline-line)}.word-companion-suggestion-panel{display:grid;gap:8px;margin-bottom:12px;border:1px solid rgba(138,111,61,.24);border-radius:8px;padding:10px;background:rgba(255,248,232,.72)}.word-companion-suggestion-list{display:grid;gap:8px}.word-companion-suggestion-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid #ded9ea;border-left:4px solid #8a6f3d;border-radius:8px;padding:8px;background:#fff}.word-companion-suggestion-item>div:first-child{display:grid;gap:3px}.word-companion-suggestion-pill{margin-left:6px}.form-helper-message{margin:0 0 8px;font-size:.86rem;font-weight:700}.scene-number,.time-label{color:var(--plotline-muted);font-size:.82rem}.location-badge,.location-pill{display:inline-flex;align-items:center;width:fit-content;border:1px solid rgba(47,111,99,.18);border-radius:999px;padding:2px 7px;color:var(--plotline-accent-dark);background:rgba(47,111,99,.08);font-size:.74rem;font-weight:700}.scene-summary{display:-webkit-box;overflow:hidden;color:var(--plotline-muted);font-size:.88rem;-webkit-box-orient:vertical;-webkit-line-clamp:4}.timeline-empty-scene{justify-content:center;color:var(--plotline-muted);background:rgba(255,255,255,.58)}.form-check-input:focus,.form-control:focus,.form-select:focus{border-color:var(--plotline-accent);box-shadow:0 0 0 .2rem rgba(47,111,99,.16)}.scene-inspector-panel{position:sticky;top:76px;display:flex;flex-direction:column;max-height:calc(100vh - 96px);min-width:0;overflow:hidden;border:1px solid var(--plotline-line);border-radius:8px;background:#fff;box-shadow:0 14px 32px rgba(30,37,43,.08)}.inspector-header{position:sticky;top:0;z-index:5;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);padding:16px;background:#fff}.scene-inspector-body{flex:1 1 auto;min-height:0;overflow:auto;padding:16px}.inspector-header h2{margin:0;font-size:1.25rem}.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)}.thread-marker-icon{display:inline-flex;align-items:center;justify-content:center;min-width:16px;font-size:.78rem;font-weight:900}.thread-marker-type-abandon .thread-marker-icon,.thread-marker-type-resolve .thread-marker-icon,.thread-marker-type-start .thread-marker-icon,.thread-marker-type-twist .thread-marker-icon{font-size:.9rem}.thread-marker-type-start{border-radius:8px 999px 999px 8px}.thread-marker-type-twist{border-color:#b8762b;background:#fff4dc}.thread-marker-type-branch,.thread-marker-type-merge,.thread-marker-type-split{border-color:#6750a4;background:#f0ebff}.thread-marker-type-reveal .thread-marker-icon{border:1px solid currentColor;border-radius:999px;font-size:0}.thread-marker-type-reveal .thread-marker-icon::after{content:"";width:4px;height:4px;border-radius:999px;background:currentColor}.timeline-navigation-card{display:grid;grid-template-areas:"icon copy" "icon actions";grid-template-columns:auto minmax(0,620px);gap:8px 14px;align-items:center;justify-content:center;border:1px solid rgba(47,111,99,.42);border-left:5px solid var(--plotline-accent);border-radius:8px;margin:0 0 12px;padding:14px 16px;max-height:280px;overflow:hidden;color:var(--plotline-ink);background:linear-gradient(135deg,rgba(238,245,242,.98),rgba(255,255,255,.94));box-shadow:0 10px 26px rgba(30,37,43,.08);opacity:1;transform:translateY(0);transition:opacity 1.15s ease,max-height 1.2s ease,margin 1.2s ease,padding 1.2s ease,transform 1.15s ease}.timeline-navigation-card[hidden]{display:none}.timeline-navigation-card.is-dismissing{margin-bottom:0;padding-top:0;padding-bottom:0;max-height:0;opacity:0;transform:translateY(-6px)}.timeline-navigation-card-icon{grid-area:icon;display:grid;place-items:center;width:42px;height:42px;border-radius:50%;color:#fff;background:var(--plotline-accent);font-size:1.25rem;font-weight:900}.timeline-navigation-card-copy{grid-area:copy;text-align:center}.timeline-navigation-card-copy h2{margin:0 0 6px;color:var(--plotline-accent-dark);font-size:1rem;font-weight:900}.timeline-navigation-card-copy p{margin:2px 0;color:var(--plotline-ink);font-size:.9rem}.timeline-navigation-card-actions{grid-area:actions;display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.timeline-horizontal-overflow{transition:box-shadow .18s ease}.timeline-horizontal-overflow.has-scroll-left{box-shadow:inset 18px 0 18px -20px rgba(30,37,43,.55)}.timeline-horizontal-overflow.has-scroll-right{box-shadow:inset -18px 0 18px -20px rgba(30,37,43,.55)}.timeline-horizontal-overflow.has-scroll-left.has-scroll-right{box-shadow:inset 18px 0 18px -20px rgba(30,37,43,.55),inset -18px 0 18px -20px rgba(30,37,43,.55)}[data-theme=dark] .timeline-navigation-card{border-color:rgba(111,169,155,.52);border-left-color:#6fa99b;color:#f4eadc;background:linear-gradient(135deg,rgba(34,83,74,.72),rgba(32,31,34,.96));box-shadow:0 12px 28px rgba(0,0,0,.28)}[data-theme=dark] .timeline-navigation-card-copy h2,[data-theme=dark] .timeline-navigation-card-copy p{color:#f4eadc}[data-theme=dark] .timeline-horizontal-overflow.has-scroll-left{box-shadow:inset 18px 0 18px -20px rgba(244,234,220,.55)}[data-theme=dark] .timeline-horizontal-overflow.has-scroll-right{box-shadow:inset -18px 0 18px -20px rgba(244,234,220,.55)}[data-theme=dark] .timeline-horizontal-overflow.has-scroll-left.has-scroll-right{box-shadow:inset 18px 0 18px -20px rgba(244,234,220,.55),inset -18px 0 18px -20px rgba(244,234,220,.55)}@media (prefers-reduced-motion:reduce){.timeline-navigation-card{transition:opacity .12s ease}}.lane-dim,.timeline-scene-card.filter-dim,.timeline-scene-card.focus-dim{opacity:.35}.timeline-scene-card.filter-match.focus-match,.timeline-scene-card.focus-match{outline:3px solid rgba(47,111,99,.32);box-shadow:0 12px 26px rgba(47,111,99,.16)}.timeline-section-hidden{display:none!important}.hide-scene-cards .timeline-scene-card{display:none}.timeline-control-panel{position:sticky;top:56px;z-index:18}.timeline-control-select{padding-right:6px}.timeline-control-select .form-select{width:auto;min-width:132px;border:0;padding-top:2px;padding-bottom:2px;background-color:transparent;color:var(--plotline-accent-dark);font-weight:800}.timeline-jump-panel{display:grid;grid-template-columns:auto minmax(180px,1.2fr) minmax(180px,1fr) minmax(170px,0.9fr) minmax(180px,1fr) auto;gap:8px;align-items:center;width:100%}.timeline-shortcut-hint{color:var(--plotline-muted);font-size:.76rem;font-weight:700;white-space:nowrap}.timeline-minimap{display:flex;align-items:stretch;gap:4px;margin:0 0 12px;padding:8px;max-width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-gutter:stable;border:1px solid rgba(47,111,99,.18);border-radius:8px;background:rgba(255,255,255,.72)}.timeline-minimap button{position:relative;flex:0 0 max(42px,calc(var(--chapter-scenes) * 18px));min-width:42px;min-height:34px;border:1px solid rgba(47,111,99,.18);border-radius:7px;color:var(--plotline-accent-dark);background:linear-gradient(180deg,#f8fbf9 0,#edf4f1 100%);font-size:.72rem;font-weight:800}.timeline-minimap button.is-active{border-color:var(--plotline-accent);color:#fff;background:linear-gradient(180deg,var(--plotline-accent) 0,var(--plotline-accent-dark) 100%);box-shadow:0 0 0 2px rgba(47,111,99,.14)}.timeline-minimap button::after{content:"";position:absolute;right:5px;bottom:5px;width:calc(var(--chapter-warnings) * 4px);max-width:28px;height:4px;border-radius:999px;background:#b45c5c;opacity:.75}.drag-drop-panel,.timeline-drag-palette{border:1px solid rgba(47,111,99,.18);border-radius:10px;margin-bottom:12px;padding:12px;background:rgba(255,255,255,.84);box-shadow:0 10px 24px rgba(55,48,39,.05)}.timeline-drag-palette{display:grid;grid-template-columns:minmax(220px,0.35fr) minmax(0,1fr);gap:12px;align-items:center}.drag-chip-group{display:flex;flex-wrap:wrap;gap:6px;max-height:104px;overflow:auto;padding-right:4px}.drag-chip{display:inline-flex;align-items:center;border:1px solid var(--plotline-line);border-radius:999px;padding:4px 9px;background:#fff;color:var(--plotline-ink);font-size:.78rem;font-weight:800;cursor:grab}.drag-chip.character{border-color:#dacb9e;background:#fff8e8}.drag-chip.asset{border-color:#ded9ea;background:#f4f0ff}.drag-chip.location{border-color:rgba(47,111,99,.18);background:#eef8f4}.is-dragging{opacity:.55}.drop-target-active{outline:3px solid rgba(47,111,99,.28);outline-offset:2px}.timeline-chapter.chapter-drop-active,.timeline-scenes.drop-chapter-end{background:rgba(47,111,99,.06)}.timeline-scenes.drop-chapter-end::after{content:"Drop scene at end of chapter";display:flex;align-items:center;justify-content:center;min-width:var(--timeline-scene-width);min-height:74px;border:2px dashed rgba(197,139,43,.48);border-radius:12px;color:#7a5527;background:rgba(255,248,232,.82);font-size:.8rem;font-weight:900}.timeline-scene-card.drop-before{box-shadow:inset 5px 0 0 #c58b2b,0 12px 26px rgba(197,139,43,.16)}.timeline-scene-card.drop-after{box-shadow:inset -5px 0 0 #c58b2b,0 12px 26px rgba(197,139,43,.16)}.drag-drop-panel{position:sticky;top:132px;z-index:19}.drag-drop-panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.drag-drop-panel h2{margin:0;font-size:1.08rem}.drag-drop-form{border-top:1px solid var(--plotline-line);margin-top:10px;padding-top:10px}.scene-move-modal-content{border:1px solid rgba(47,111,99,.18);border-radius:14px;background:var(--plotline-surface);color:var(--plotline-ink);box-shadow:0 24px 70px rgba(55,48,39,.22)}.scene-move-modal-content .modal-footer,.scene-move-modal-content .modal-header{border-color:var(--plotline-line)}.scene-move-modal-content .modal-title{margin:0;color:var(--plotline-ink);font-size:1.2rem;font-weight:900}.scene-move-summary{margin:0 0 12px;color:var(--plotline-ink);font-size:1rem;font-weight:800}[data-theme=dark] .scene-move-modal-content{background:#201f22;color:#f4eadc;border-color:rgba(244,234,220,.16);box-shadow:0 24px 70px rgba(0,0,0,.55)}[data-theme=dark] .scene-move-modal-content .modal-title,[data-theme=dark] .scene-move-summary{color:#f4eadc}[data-theme=dark] .scene-move-modal-content .modal-footer,[data-theme=dark] .scene-move-modal-content .modal-header{border-color:rgba(244,234,220,.14)}[data-theme=dark] .scene-move-modal-content .btn-close{filter:invert(1) grayscale(100%)}.plain-preview{border:1px solid rgba(197,139,43,.28);border-radius:8px;margin:10px 0 0;padding:8px 10px;color:#5e4518;background:#fff8e8;font-size:.86rem;font-weight:800}.drag-check-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px;color:var(--plotline-muted);font-size:.82rem;font-weight:700}.lane-board-heading,.pacing-heading,.timeline-section-header{position:sticky;left:0;z-index:6}.timeline-section-header{display:flex;align-items:center;justify-content:space-between;gap:10px;width:calc(var(--timeline-label-width) + (var(--scene-count) * var(--timeline-scene-width)) + (var(--scene-count) * var(--timeline-grid-gap)));min-width:100%;margin-bottom:10px;border-radius:8px;padding:8px 10px;background:rgba(255,255,255,.92);box-shadow:0 8px 16px rgba(30,37,43,.05)}.lane-board-heading button,.lane-group-heading,.pacing-heading button,.plot-lane-board-heading button,.timeline-section-header button{border:0;padding:0;color:var(--plotline-accent-dark);background:0 0;font:inherit;font-weight:900;text-align:left}.lane-board-heading button::before,.lane-group-heading::before,.pacing-heading button::before,.plot-lane-board-heading button::before,.timeline-section-header button::before{content:"v";display:inline-block;margin-right:6px;color:var(--plotline-muted);font-size:.72rem}.lane-board-heading button.is-collapsed::before,.lane-group-heading.is-collapsed::before,.pacing-heading button.is-collapsed::before,.plot-lane-board-heading button.is-collapsed::before,.timeline-section-header button.is-collapsed::before{content:">"}.lane-group{display:grid;gap:7px}.character-lane-group-body{display:grid;gap:7px}.lane-group-heading{position:sticky;left:0;z-index:6;width:var(--timeline-label-width);border-top:1px solid rgba(47,111,99,.12);padding:7px 8px 2px;color:var(--plotline-muted);background:rgba(247,250,248,.96);font-size:.78rem;text-transform:uppercase}.timeline-section-collapsed{display:none!important}.timeline-chapter-title{position:sticky;top:0;z-index:5;background:rgba(238,245,242,.96);backdrop-filter:blur(6px)}.metric-mini-summary,.scene-pov-label{display:inline-flex;width:fit-content;border-radius:999px;padding:2px 7px;font-size:.72rem;font-weight:800}.scene-pov-label{color:#514018;background:#fff3d3}.metric-mini-summary{color:var(--plotline-accent-dark);background:rgba(47,111,99,.08)}.scene-overview-panel{display:none;gap:8px;margin-top:4px}.scene-overview-section{display:grid;gap:4px}.scene-overview-label{color:var(--plotline-muted);font-size:.68rem;font-weight:900;letter-spacing:.06em;text-transform:uppercase}.scene-overview-chip-row{display:flex;flex-wrap:wrap;gap:5px;min-width:0}.scene-overview-brief,.scene-overview-chip,.scene-overview-empty{display:inline-flex;width:fit-content;max-width:100%;border-radius:999px;padding:3px 8px;background:rgba(47,111,99,.08);color:var(--plotline-ink);font-size:.72rem;font-weight:750;line-height:1.25;overflow-wrap:anywhere}.scene-overview-chip.is-pov{border:1px solid rgba(197,139,43,.38);background:#fff3d3}.scene-overview-chip.is-important{border:1px solid rgba(103,80,164,.3);background:#f0edf8}.scene-overview-chip.is-more,.scene-overview-empty{color:var(--plotline-muted);background:rgba(102,113,123,.08)}.scene-overview-brief{display:block;width:auto;border-radius:8px;background:rgba(255,255,255,.62);color:var(--plotline-muted);font-weight:600}.timeline-scene-card.keyboard-focus,.timeline-scene-card.search-hit{outline:3px solid rgba(197,139,43,.34);box-shadow:0 12px 26px rgba(197,139,43,.16)}.timeline-scene-card.search-dim{opacity:.28}.asset-marker,.character-marker,.thread-marker{transition:transform .12s ease,box-shadow .12s ease}.asset-marker:hover,.character-marker:hover,.thread-marker:hover{transform:translateY(-1px);box-shadow:0 6px 12px rgba(30,37,43,.12)}.timeline-filtered-root.density-compact{--timeline-scene-width:170px;--timeline-grid-gap:6px}.timeline-filtered-root.density-expanded{--timeline-scene-width:280px;--timeline-grid-gap:14px}.timeline-filtered-root.density-compact .timeline-scene-card,.timeline-filtered-root.zoom-book .timeline-scene-card{gap:4px;padding:9px}.timeline-filtered-root.density-compact .metric-mini-summary,.timeline-filtered-root.density-compact .purpose-chip-row,.timeline-filtered-root.density-compact .scene-summary,.timeline-filtered-root.zoom-book .location-pill,.timeline-filtered-root.zoom-book .metric-mini-summary,.timeline-filtered-root.zoom-book .purpose-chip-row,.timeline-filtered-root.zoom-book .scene-pov-label,.timeline-filtered-root.zoom-book .scene-summary{display:none}.timeline-filtered-root.zoom-book{--timeline-scene-width:150px;--timeline-grid-gap:6px}.timeline-filtered-root.zoom-scene-detail{--timeline-scene-width:300px}.timeline-filtered-root.zoom-scene-detail .scene-summary{-webkit-line-clamp:7}.timeline-filtered-root.zoom-scene-overview{--timeline-scene-width:380px}.timeline-filtered-root.zoom-scene-overview .timeline-scenes{min-height:320px}.timeline-filtered-root.zoom-scene-overview .timeline-scene-card{gap:8px;padding:14px}.timeline-filtered-root.zoom-scene-overview .scene-summary{display:none}.timeline-filtered-root.zoom-scene-overview .scene-overview-panel{display:grid}.timeline-filtered-root.density-expanded .timeline-scenes{min-height:230px}.timeline-control-panel{position:relative;top:auto;z-index:4;display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;padding:8px;box-shadow:none}.timeline-control-group,.timeline-filter-drawer{border:1px solid var(--plotline-line);border-radius:999px;background:rgba(255,255,255,.82)}.timeline-control-group[open],.timeline-filter-drawer[open]{border-radius:10px;flex-basis:100%}.timeline-control-group summary,.timeline-filter-drawer summary{min-width:max-content;padding:5px 10px;color:var(--plotline-accent-dark);font-size:.82rem;font-weight:900;cursor:pointer;list-style:none}.timeline-control-group summary::-webkit-details-marker,.timeline-drag-palette summary::-webkit-details-marker,.timeline-filter-drawer summary::-webkit-details-marker{display:none}.timeline-control-group summary::after,.timeline-drag-palette summary::after,.timeline-filter-drawer summary::after{content:" v";color:var(--plotline-muted);font-size:.72rem}.timeline-control-group[open] summary::after,.timeline-drag-palette[open] summary::after,.timeline-filter-drawer[open] summary::after{content:" ^"}.timeline-filter-grid{grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:8px;max-height:min(48vh,430px);overflow:auto;padding:0 10px 10px}.timeline-filter-grid .form-label{margin-bottom:2px;font-size:.72rem;font-weight:800}.timeline-filter-actions,.timeline-filter-checks{grid-column:1/-1}.timeline-jump-panel,.timeline-preset-panel,.timeline-visibility-panel{padding:0 10px 10px}.timeline-jump-panel{grid-template-columns:minmax(180px,1.5fr) repeat(3,minmax(150px,1fr))}.timeline-shortcut-hint{grid-column:1/-1}.timeline-preset-panel form{flex-wrap:nowrap}.timeline-preset-panel .form-control{width:150px}.timeline-filter-actions .btn,.timeline-preset-panel .btn{white-space:nowrap}.timeline-drag-palette{display:block;margin-bottom:8px;padding:7px 9px;box-shadow:none}.timeline-drag-palette summary{color:var(--plotline-accent-dark);font-size:.82rem;font-weight:900;cursor:pointer}.timeline-drag-palette .drag-chip-group{margin-top:8px}.drag-drop-panel{position:relative;top:auto;z-index:9;box-shadow:0 12px 28px rgba(30,37,43,.08)}.timeline-filtered-root,.timeline-filtered-root.density-compact,.timeline-filtered-root.zoom-book{--timeline-scene-width:220px;--timeline-grid-gap:10px}.timeline-filtered-root.density-expanded,.timeline-filtered-root.zoom-scene-detail{--timeline-scene-width:290px}.timeline-filtered-root.density-compact.zoom-book{--timeline-scene-width:200px}.timeline-chapter,.timeline-empty-scene,.timeline-scene-card{overflow-wrap:normal;word-break:normal}.asset-lane-label strong,.character-lane-label strong,.plot-lane-label strong,.timeline-chapter-title strong,.timeline-scene-card strong{min-width:0;white-space:normal;word-break:normal;overflow-wrap:break-word}.timeline-scene-card{cursor:grab}.drag-chip:active,.timeline-scene-card:active,[draggable=true]:active{cursor:grabbing}body.drag-active .timeline-scene-card,body.dragging-asset [data-asset-drop-target],body.dragging-location [data-drag-type=location]{transition:outline-color .12s ease,box-shadow .12s ease,opacity .12s ease}body.dragging-asset .timeline-scene-card,body.dragging-asset [data-asset-drop-target],body.dragging-character .timeline-scene-card,body.dragging-location [data-drag-type=location],body.dragging-scene .timeline-scene-card,body.dragging-scene .timeline-scenes[data-chapter-drop-target]{outline:1px dashed rgba(47,111,99,.22);outline-offset:2px}.is-dragging{opacity:.42;transform:scale(.98)}.drop-target-active{outline:3px solid rgba(47,111,99,.42)!important;outline-offset:3px}.analytics-metric-row{display:grid;grid-template-columns:170px minmax(560px,1fr);gap:12px;align-items:stretch}.analytics-metric-label{display:flex;align-items:center;border-right:1px solid var(--plotline-line);color:var(--plotline-muted);font-weight:800}.analytics-sparkline{display:grid;grid-template-columns:repeat(var(--point-count),minmax(28px,1fr));align-items:end;gap:5px;min-height:88px;border-bottom:1px solid rgba(47,111,99,.25);padding-top:10px}.analytics-bar{position:relative;display:flex;align-items:end;justify-content:center;min-height:12px;height:max(12px,var(--bar-height));border-radius:6px 6px 2px 2px;color:var(--plotline-accent-dark);text-decoration:none;background:linear-gradient(180deg,rgba(47,111,99,.58),rgba(47,111,99,.18))}.analytics-bar:hover{background:linear-gradient(180deg,rgba(47,111,99,.82),rgba(47,111,99,.28))}.analytics-bar span{position:absolute;bottom:calc(100% + 3px);color:var(--plotline-muted);font-size:.68rem;font-weight:800}.analytics-count-row,.analytics-link-row,.analytics-list-item,.purpose-stat-row{border-top:1px solid var(--plotline-line);padding:9px 0}.analytics-list-item{display:grid;gap:3px}.analytics-list-item p{margin:0}.analytics-count-row,.analytics-link-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.analytics-link-row{color:inherit;text-decoration:none}.analytics-link-row:hover{color:var(--plotline-accent-dark)}.analytics-link-row span,.analytics-link-row strong{min-width:0}.purpose-stat-row{display:grid;grid-template-columns:minmax(120px,1fr) minmax(90px,1.5fr) 42px;align-items:center;gap:10px}.purpose-stat-bar{overflow:hidden;height:8px;border-radius:999px;background:rgba(47,111,99,.08)}.purpose-stat-bar span{display:block;height:100%;border-radius:inherit;background:var(--plotline-accent)}.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}}.floor-plan-list{display:grid;gap:12px}.floor-plan-list-item{align-items:center;border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:flex;justify-content:space-between;gap:16px;padding:14px}.floor-plan-list-item h2{font-size:1.05rem;margin:0 0 4px}.floor-plan-list-item p{margin:0}.floor-plan-tools{display:grid;gap:14px}.floor-plan-meta-wide{max-width:none}.floor-plan-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.floor-plan-tab{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:999px;color:inherit;padding:6px 12px}.floor-plan-tab.active{background:var(--bs-primary,#2f6f63);border-color:var(--bs-primary,#2f6f63);color:#fff}.floor-plan-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) minmax(320px,360px)}.floor-plan-editor--occupancy .floor-plan-layout{grid-template-columns:minmax(0,1fr)}.floor-plan-editor-toolbar{background:rgba(255,255,255,.92);border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:grid;gap:10px;margin-bottom:12px;padding:10px 12px;position:sticky;top:10px;z-index:20}.floor-plan-occupancy-scene-row,.floor-plan-toolbar-action-group,.floor-plan-toolbar-control-group,.floor-plan-toolbar-floor-group,.floor-plan-toolbar-main{align-items:center;display:flex;flex-wrap:wrap;gap:10px}.floor-plan-toolbar-main{justify-content:space-between}.scene-editor-v2-workspace{max-width:none;width:100%;padding:0;border:0;background:0 0;box-shadow:none}.scene-inspector-v2{position:relative;display:grid;gap:14px;color:var(--plotline-ink)}.scene-inspector-v2-edit{--scene-editor-width:480px;padding-bottom:24px}.scene-inspector-v2-edit.editor-overlay-open{display:grid;grid-template-columns:minmax(0,1fr) 10px minmax(360px,min(var(--scene-editor-width),50%));align-items:stretch;gap:12px;height:clamp(420px,calc(100vh - 280px),760px);min-height:0}.scene-inspector-v2-summary-pane{display:grid;gap:14px;min-width:0}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-v2-summary-pane{min-height:0;overflow:auto;padding-right:2px}.scene-inspector-v2-timeline{min-height:100%}.scene-inspector-v2-timeline.editor-overlay-open{height:clamp(380px,calc(100vh - 190px),680px);min-height:0;overflow:hidden}.scene-inspector-v2-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.scene-inspector-v2-stack{display:grid;gap:12px}.scene-inspector-v2-health{display:grid;grid-template-columns:repeat(7,minmax(110px,1fr));gap:8px}.scene-inspector-editor-overlay,.scene-inspector-v2-card,.scene-inspector-v2-health>div{border:1px solid var(--plotline-line);background:var(--plotline-panel);border-radius:8px;box-shadow:0 8px 24px rgba(30,37,43,.06)}.scene-inspector-v2-health>div{min-width:0;padding:10px 12px}.scene-inspector-v2-counts span,.scene-inspector-v2-facts dt,.scene-inspector-v2-health span,.scene-inspector-v2-section>span,.scene-inspector-v2-summary>span{display:block;color:var(--plotline-muted);font-size:.72rem;font-weight:800;text-transform:uppercase}.scene-inspector-v2-health strong{display:block;overflow:hidden;color:var(--plotline-ink);font-size:.94rem;text-overflow:ellipsis;white-space:nowrap}.scene-inspector-v2-counts .attention strong,.scene-inspector-v2-health .attention strong{color:var(--plotline-danger,#b35f3b)}.scene-inspector-v2-card{display:grid;align-content:start;gap:14px;min-width:0;padding:16px}.scene-inspector-v2-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-inspector-v2-card-header h3{margin:0;font-size:1.08rem;line-height:1.25}.scene-inspector-v2-card p{margin:0}.scene-inspector-v2-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0}.scene-inspector-v2-facts div{min-width:0}.scene-inspector-v2-facts dd{margin:2px 0 0;overflow-wrap:anywhere}.scene-inspector-v2-section,.scene-inspector-v2-summary{display:grid;gap:6px}.scene-inspector-v2-actions,.scene-inspector-v2-chip-row{display:flex;flex-wrap:wrap;gap:7px}.scene-inspector-v2-chip-row span{border:1px solid rgba(47,111,99,.18);border-radius:999px;background:rgba(47,111,99,.08);padding:3px 9px;color:var(--plotline-accent-dark);font-size:.82rem;font-weight:800}.scene-inspector-v2-counts,.scene-inspector-v2-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.scene-inspector-v2-counts div,.scene-inspector-v2-metrics div{min-width:0;border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(47,111,99,.05);padding:9px 10px}.scene-inspector-v2-metrics span{display:block;overflow:hidden;color:var(--plotline-muted);font-size:.78rem;text-overflow:ellipsis;white-space:nowrap}.scene-inspector-v2-counts strong,.scene-inspector-v2-metrics strong{display:block;color:var(--plotline-ink);font-size:1rem}.scene-inspector-v2-list{display:grid;gap:7px;margin:0;padding:0;list-style:none}.scene-inspector-v2-list li{display:flex;align-items:baseline;justify-content:space-between;gap:10px;border-bottom:1px solid rgba(47,111,99,.1);padding-bottom:6px}.scene-inspector-v2-list li:last-child{border-bottom:0;padding-bottom:0}.scene-inspector-v2-list span{color:var(--plotline-muted);font-size:.82rem;text-align:right}.scene-inspector-v2-callout{border-left:4px solid var(--plotline-warning,#c58b2b);border-radius:8px;background:rgba(197,139,43,.1);padding:10px 12px}.scene-inspector-editor-overlay{position:absolute;inset:0;z-index:4;display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px;max-height:100%;padding:16px;overflow:hidden;background:var(--plotline-panel)}.scene-inspector-editor-overlay[hidden]{display:none}.scene-inspector-v2-edit .scene-inspector-editor-overlay{position:static;inset:auto;z-index:1;min-width:0;height:100%;max-height:none}.scene-inspector-editor-resizer{display:none}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer{display:block;align-self:stretch;min-height:100%;border-radius:999px;cursor:col-resize;background:linear-gradient(180deg,rgba(47,111,99,.16),rgba(47,111,99,.04))}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer::before{content:"";display:block;width:2px;height:48px;margin:18px auto;border-radius:999px;background:var(--plotline-accent);opacity:.55}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer:focus-visible,.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer:hover{background:rgba(47,111,99,.16)}body.scene-inspector-editor-resizing{cursor:col-resize;user-select:none}.scene-inspector-editor-shell{position:sticky;top:0;z-index:2;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);background:var(--plotline-panel);padding-bottom:12px}.scene-inspector-editor-shell h3{margin:0;font-size:1.1rem}.scene-inspector-editor-empty{min-height:0;overflow:auto}.scene-inspector-editor-form{display:grid;grid-template-rows:minmax(0,1fr) auto;min-height:100%;gap:14px}.scene-inspector-editor-fields{display:grid;align-content:start;gap:14px;padding-right:4px}.scene-inspector-editor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.scene-inspector-editor-fieldset{display:grid;gap:10px;min-width:0;margin:0;border:1px solid var(--plotline-line);border-radius:8px;padding:12px}.scene-inspector-editor-fieldset legend{float:none;width:auto;margin:0;padding:0 4px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-inspector-editor-checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.scene-inspector-editor-checks label{display:flex;align-items:center;gap:8px;min-width:0;margin:0;border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(47,111,99,.05);padding:8px 10px}.scene-inspector-editor-checks span{overflow-wrap:anywhere}.scene-inspector-editor-footer{position:sticky;bottom:0;z-index:2;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--plotline-line);background:var(--plotline-panel);padding-top:12px}.scene-inspector-editor-error{border:1px solid rgba(179,95,59,.28);border-radius:8px;background:rgba(179,95,59,.1);padding:10px 12px;color:var(--plotline-danger,#b35f3b);font-weight:700}.scene-inspector-editor-loading,.scene-inspector-editor-pending{border:1px dashed rgba(47,111,99,.24);border-radius:8px;background:rgba(47,111,99,.04);padding:16px;color:var(--plotline-muted)}.scene-inspector-editor-metric{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-inspector-editor-metric-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-inspector-editor-metric-heading h4{margin:0;font-size:.98rem}.scene-inspector-editor-metric-heading p{margin:3px 0 0;color:var(--plotline-muted);font-size:.88rem}.scene-inspector-editor-metric-heading output{min-width:42px;border-radius:8px;background:var(--plotline-accent);padding:5px 8px;color:#fff;font-weight:800;text-align:center}.scene-inspector-editor-range-labels{display:flex;justify-content:space-between;color:var(--plotline-muted);font-size:.78rem}.scene-character-editor-section{display:grid;gap:10px}.scene-character-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-character-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-character-pov-options{display:grid;gap:7px}.scene-character-pov-options label{display:flex;align-items:center;gap:8px;margin:0;font-weight:700}.scene-character-editor-list{display:grid;gap:10px}.scene-character-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-character-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-character-editor-card-header h4{margin:0;font-size:1rem}.scene-character-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-character-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-world-editor-section{display:grid;gap:10px}.scene-world-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-world-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-world-editor-list{display:grid;gap:10px}.scene-world-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-world-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-world-editor-card-header h4{margin:0;font-size:1rem}.scene-world-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-world-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-writer-editor-section{display:grid;gap:10px}.scene-writer-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-writer-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-writer-editor-list{display:grid;gap:10px}.scene-writer-checklist-row,.scene-writer-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-writer-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-writer-editor-card-header h4{margin:0;font-size:1rem}.scene-writer-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-writer-checklist-row{grid-template-columns:auto minmax(0,1fr) auto;align-items:center}.scene-writer-checklist-complete,.scene-writer-inline-check,.scene-writer-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-attachment-editor-card{align-items:stretch}.scene-attachment-preview-row{display:grid;grid-template-columns:72px minmax(0,1fr);gap:12px;align-items:start}.scene-attachment-thumb{display:grid;place-items:center;width:72px;height:72px;overflow:hidden;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.06);color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-align:center}.scene-attachment-thumb img{width:100%;height:100%;object-fit:cover}.scene-attachment-preview-copy{display:grid;gap:8px;min-width:0}.scene-attachment-preview-copy p{margin:0}.scene-attachment-delete-form,.scene-attachment-editor-form{display:grid;gap:10px}.scene-attachment-action-row{display:flex;justify-content:flex-end;gap:8px}.scene-structure-editor-section{display:grid;gap:10px}.scene-structure-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-structure-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-structure-delete-form,.scene-structure-editor-form,.scene-structure-editor-list{display:grid;gap:10px}.scene-structure-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-structure-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-structure-card-header h4{margin:0;font-size:1rem}.scene-structure-card-header p,.scene-structure-editor-card p{margin:2px 0 0}.scene-structure-marker{flex:0 0 auto;border-radius:999px;background:var(--plot-colour,var(--plotline-accent));padding:3px 8px;color:#fff;font-size:.78rem;font-weight:800}.scene-structure-action-row{display:flex;justify-content:flex-end;gap:8px}.scene-structure-dependency-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.scene-structure-inline-check{display:inline-flex;align-items:center;align-self:end;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-inspector-v2-timeline .scene-inspector-v2-health{grid-template-columns:repeat(2,minmax(0,1fr))}.scene-inspector-v2-timeline .scene-inspector-v2-card{padding:14px}.scene-inspector-v2-timeline .scene-inspector-v2-card-header,.scene-inspector-v2-timeline .scene-inspector-v2-list li{align-items:stretch;flex-direction:column}.scene-inspector-v2-timeline .scene-inspector-v2-counts,.scene-inspector-v2-timeline .scene-inspector-v2-facts,.scene-inspector-v2-timeline .scene-inspector-v2-metrics{grid-template-columns:1fr}@media (max-width:1100px){.scene-inspector-v2-edit.editor-overlay-open{grid-template-columns:minmax(0,1fr) 10px minmax(360px,min(var(--scene-editor-width),52%))}.scene-inspector-v2-grid,.scene-inspector-v2-health{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:720px){.scene-inspector-v2-counts,.scene-inspector-v2-facts,.scene-inspector-v2-grid,.scene-inspector-v2-health,.scene-inspector-v2-metrics{grid-template-columns:1fr}.scene-inspector-v2-card-header{flex-direction:column}.scene-inspector-editor-checks,.scene-inspector-editor-grid{grid-template-columns:1fr}.scene-writer-checklist-row{grid-template-columns:1fr;align-items:stretch}.scene-attachment-preview-row{grid-template-columns:1fr}.scene-structure-dependency-columns{grid-template-columns:1fr}}.floor-plan-toolbar-floor-group{flex:1 1 420px;min-width:min(100%,320px)}.floor-plan-active-floor{display:grid;gap:2px}.floor-plan-toolbar-control-group{flex:0 1 auto}.floor-plan-toolbar-action-group{flex:1 1 360px;justify-content:flex-end}.floor-plan-occupancy-scene-row{border-top:1px solid rgba(47,111,99,.12);padding-top:9px}.floor-plan-occupancy-scene-row[hidden]{display:none}.floor-plan-occupancy-scene-row .floor-plan-reference-control{flex:1 1 320px;min-width:min(100%,320px)}.floor-plan-occupancy-scene-row .form-select{width:100%}.floor-plan-occupancy-warning-panel{background:rgba(47,111,99,.05);border:1px solid rgba(47,111,99,.16);border-radius:8px;color:var(--plotline-ink,#1e252b);flex:1 1 100%;font-size:.82rem;padding:.55rem .7rem}.floor-plan-occupancy-warning-panel strong{display:block;font-size:.78rem;margin-bottom:.25rem;text-transform:uppercase}.floor-plan-occupancy-warning-panel p,.floor-plan-occupancy-warning-panel ul{margin:0}.floor-plan-occupancy-warning-panel ul{display:grid;gap:.25rem;list-style:none;padding:0}.floor-plan-occupancy-warning,.floor-plan-occupancy-warning-empty{border-radius:6px;font-weight:700;padding:.32rem .45rem}.floor-plan-occupancy-warning-empty{background:rgba(47,111,99,.08);color:var(--plotline-accent-dark,#22534a)}.floor-plan-occupancy-warning--warning{background:rgba(251,236,211,.78);color:#7b4b12}.floor-plan-occupancy-warning--info{background:rgba(233,243,248,.86);color:#245b78}.floor-plan-occupancy-warning-empty[hidden],.floor-plan-occupancy-warning[hidden]{display:none}.floor-plan-editor-toolbar .muted{display:block;font-size:.76rem;line-height:1.1}.floor-plan-reference-control,.floor-plan-toolbar-check{align-items:center;color:var(--muted-color,#6b756f);display:inline-flex;font-size:.82rem;font-weight:700;gap:6px}.floor-plan-reference-control{align-items:flex-start;flex-direction:column;gap:2px}.floor-plan-reference-control .form-select{min-width:180px}.floor-plan-save-status{border:1px solid rgba(47,111,99,.2);border-radius:999px;color:var(--plotline-accent-dark,#22534a);background:rgba(47,111,99,.08);font-size:.78rem;font-weight:800;padding:4px 9px}.floor-plan-save-status[data-save-state=dirty]{border-color:rgba(184,118,43,.32);color:#7b4b12;background:rgba(251,236,211,.72)}.floor-plan-save-status[data-save-state=saving]{border-color:rgba(51,117,155,.3);color:#245b78;background:rgba(233,243,248,.82)}.floor-plan-save-status[data-save-state=failed]{border-color:rgba(163,61,61,.32);color:#8a3434;background:rgba(255,232,232,.9)}.floor-plan-floor{display:none}.floor-plan-floor.active{display:block}.floor-plan-stage{min-width:0}.floor-plan-grid-wrap{max-width:100%;max-height:calc(100vh - 250px);min-height:min(58vh,520px);overflow:auto;padding-bottom:8px}.floor-plan-grid{--cell-size:34px;background:linear-gradient(to right,rgba(93,111,101,.18) 1px,transparent 1px),linear-gradient(to bottom,rgba(93,111,101,.18) 1px,transparent 1px),var(--panel-bg,#fff);background-size:var(--cell-size) var(--cell-size),var(--cell-size) var(--cell-size),auto;border:1px solid var(--border-color,#d8ded9);border-radius:8px;height:calc(var(--grid-height) * var(--cell-size));min-width:calc(var(--grid-width) * var(--cell-size));position:relative;width:calc(var(--grid-width) * var(--cell-size))}.floor-plan-coordinate-label{color:rgba(33,61,55,.42);font-size:.62rem;font-weight:800;line-height:1;pointer-events:none;position:absolute;text-shadow:0 1px 0 rgba(255,255,255,.7);user-select:none;z-index:5}.floor-plan-coordinate-label--column{left:calc(var(--coord-x) * var(--cell-size) + 4px);top:3px}.floor-plan-coordinate-label--row{left:4px;top:calc(var(--coord-y) * var(--cell-size) + 4px)}.floor-plan-reference-overlay{inset:0;pointer-events:none;position:absolute;z-index:1}.floor-plan-reference-block{align-items:center;background:rgba(47,111,99,.08);border:1px dashed rgba(47,111,99,.34);border-radius:2px;color:rgba(27,55,49,.46);display:flex;font-size:.62rem;font-weight:800;height:calc(var(--h) * var(--cell-size));justify-content:center;left:calc(var(--x) * var(--cell-size));line-height:1.05;overflow:hidden;padding:3px;position:absolute;text-align:center;top:calc(var(--y) * var(--cell-size));width:calc(var(--w) * var(--cell-size))}.floor-plan-reference-warning{background:rgba(251,236,211,.92);border:1px solid rgba(184,118,43,.34);border-radius:999px;color:#7b4b12;font-size:.76rem;font-weight:800;left:10px;padding:4px 10px;pointer-events:none;position:absolute;top:10px;z-index:6}.floor-plan-background-image{height:auto;left:0;max-width:none;opacity:var(--bg-opacity, .35);pointer-events:none;position:absolute;top:0;transform:translate(var(--bg-offset-x,0),var(--bg-offset-y,0)) scale(var(--bg-scale,1));transform-origin:top left;user-select:none;width:100%;z-index:0}.floor-plan-background-image.is-locked{pointer-events:none}.floor-plan-block{align-items:center;--floor-plan-wall-color:rgba(44, 84, 75, .55);border:2px solid transparent;border-radius:2px;color:#12332c;cursor:grab;display:flex;font-size:.72rem;font-weight:700;height:calc(var(--h) * var(--cell-size));justify-content:center;left:calc(var(--x) * var(--cell-size));line-height:1.08;overflow:hidden;padding:4px;position:absolute;text-align:center;top:calc(var(--y) * var(--cell-size));touch-action:none;width:calc(var(--w) * var(--cell-size));z-index:2}.floor-plan-wall-segment{background:var(--floor-plan-wall-color);pointer-events:none;position:absolute;z-index:2}.floor-plan-wall-segment--north,.floor-plan-wall-segment--south{height:2px;left:var(--wall-start);width:var(--wall-length)}.floor-plan-wall-segment--north{top:0}.floor-plan-wall-segment--south{bottom:0}.floor-plan-wall-segment--east,.floor-plan-wall-segment--west{height:var(--wall-length);top:var(--wall-start);width:2px}.floor-plan-wall-segment--east{right:0}.floor-plan-wall-segment--west{left:0}.floor-plan-block-label{display:-webkit-box;max-width:100%;overflow:hidden;overflow-wrap:normal;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:1}.floor-plan-block[style*="--h:2"] .floor-plan-block-label,.floor-plan-block[style*="--h:3"] .floor-plan-block-label,.floor-plan-block[style*="--h:4"] .floor-plan-block-label,.floor-plan-block[style*="--h:5"] .floor-plan-block-label,.floor-plan-block[style*="--h:6"] .floor-plan-block-label,.floor-plan-block[style*="--h:7"] .floor-plan-block-label,.floor-plan-block[style*="--h:8"] .floor-plan-block-label{-webkit-line-clamp:2}.floor-plan-block.selected{box-shadow:0 0 0 3px rgba(47,111,99,.28);outline:2px solid var(--bs-primary,#2f6f63);z-index:3}.floor-plan-block.overlap{border-color:#b45544;box-shadow:inset 0 0 0 2px rgba(180,85,68,.18)}.floor-plan-block.is-hidden-location{background-image:repeating-linear-gradient(135deg,rgba(18,51,44,.08) 0,rgba(18,51,44,.08) 3px,transparent 3px,transparent 9px);box-shadow:inset 0 0 0 1px rgba(43,54,49,.18)}.floor-plan-block.is-hidden-location.selected{box-shadow:inset 0 0 0 1px rgba(43,54,49,.18),0 0 0 3px rgba(47,111,99,.28)}.floor-plan-block.is-hidden-location.overlap{box-shadow:inset 0 0 0 2px rgba(180,85,68,.18),inset 0 0 0 1px rgba(43,54,49,.18)}.floor-plan-secret-route{border-top:2px dashed rgba(69,55,42,.58);height:0;left:calc(var(--route-x,0) * var(--cell-size));opacity:.72;pointer-events:none;position:absolute;top:calc(var(--route-y,0) * var(--cell-size));transform:rotate(var(--route-angle,0));transform-origin:0 50%;width:calc(var(--route-length,0) * var(--cell-size));z-index:3}.floor-plan-secret-route::after{background:rgba(255,250,242,.9);border:1px solid rgba(69,55,42,.5);border-radius:50%;content:"";height:7px;left:50%;position:absolute;top:-5px;transform:translateX(-50%);width:7px}.floor-plan-transition-marker{align-items:center;--transition-marker-ink:#12332c;--transition-marker-window:#246f9f;--transition-marker-blocked:#9b342b;background:rgba(255,250,242,.98);border:1px solid rgba(47,111,99,.55);border-radius:50%;box-shadow:0 2px 6px rgba(31,37,34,.16);color:var(--transition-marker-ink);display:flex;font-size:.72rem;font-weight:900;height:21px;justify-content:center;left:calc(var(--transition-x,0) * var(--cell-size));line-height:1;pointer-events:none;position:absolute;top:calc(var(--transition-y,0) * var(--cell-size));transform:translate(-50%,-50%);width:21px;z-index:4}.floor-plan-transition-marker svg{display:block;height:21px;overflow:visible;width:21px}.floor-plan-transition-marker.is-vertical svg{transform:rotate(90deg)}.floor-plan-transition-marker .marker-arc,.floor-plan-transition-marker .marker-blocked,.floor-plan-transition-marker .marker-line,.floor-plan-transition-marker .marker-window{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7}.floor-plan-transition-marker .marker-arc{stroke-width:1.35}.floor-plan-transition-marker .marker-window{stroke:var(--transition-marker-window)}.floor-plan-transition-marker .marker-dotted{opacity:.72;stroke-dasharray:1.4 2}.floor-plan-transition-marker .marker-blocked{stroke:var(--transition-marker-blocked);stroke-width:1.8}.floor-plan-transition-marker .marker-strong{stroke-width:2}.floor-plan-transition-marker .marker-track{opacity:.72}.floor-plan-transition-marker--window{background:rgba(239,249,255,.98);border-color:rgba(36,111,159,.48)}.floor-plan-transition-marker--sliding-door{background:rgba(248,252,249,.98);border-color:rgba(47,111,99,.58)}.floor-plan-transition-marker--french-door{background:rgba(255,252,246,.98);border-color:rgba(119,86,45,.5)}.floor-plan-transition-marker--secret-door{background:rgba(255,250,242,.88);border-style:dashed}.floor-plan-transition-marker--ladder{background:rgba(246,248,245,.98);border-color:rgba(77,91,67,.55)}.floor-plan-transition-marker--blocked-door{background:rgba(255,244,241,.98);border-color:rgba(155,52,43,.52)}.floor-plan-transition-marker--exterior-door{border-width:2px}.floor-plan-transition-marker.is-shared-edge{background:rgba(255,255,255,.98);border-color:rgba(47,111,99,.72)}.floor-plan-transition-marker--window.is-shared-edge{background:rgba(239,249,255,.98);border-color:rgba(36,111,159,.58)}.floor-plan-transition-marker--blocked-door.is-shared-edge{background:rgba(255,244,241,.98);border-color:rgba(155,52,43,.6)}.visual-card-heading{align-items:flex-start;display:flex;gap:12px}.visual-card-heading>div{min-width:0}.visual-avatar{align-items:center;aspect-ratio:1;background:linear-gradient(135deg,rgba(47,111,99,.16),rgba(212,154,98,.16));border:1px solid rgba(47,111,99,.22);border-radius:999px;color:var(--plotline-accent-dark,#22534a);display:inline-flex;flex:0 0 auto;font-weight:900;justify-content:center;letter-spacing:.02em;overflow:hidden;text-transform:uppercase}.visual-avatar img{height:100%;object-fit:cover;width:100%}.visual-avatar--sm{font-size:.72rem;width:32px}.visual-avatar--md{font-size:.9rem;width:48px}.visual-avatar--lg{font-size:1.3rem;width:96px}.visual-avatar--xl{font-size:1.6rem;width:128px}.visual-image-editor{align-items:center;background:rgba(47,111,99,.05);border:1px solid rgba(47,111,99,.14);border-radius:8px;display:flex;gap:18px;padding:14px}.visual-image-editor__controls{flex:1 1 auto;min-width:220px}.floor-plan-block--room{background:#d9eee7}.floor-plan-block--corridor{background:#e7e2f4}.floor-plan-block--openspace{background:#e5efd4}.floor-plan-block--exterior{background:#d9ecf3}.floor-plan-block--other{background:#ece9e1}.floor-plan-resize-handle{border-bottom:10px solid rgba(18,51,44,.45);border-left:10px solid transparent;bottom:4px;height:0;position:absolute;right:4px;width:0}.floor-plan-side-panel{align-self:start;position:sticky;top:82px}.floor-plan-side-panel h2{font-size:1.05rem;margin-bottom:8px}.floor-plan-side-panel h3{font-size:.92rem;margin:0 0 8px}.floor-plan-toolbox{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:grid;grid-template-rows:auto minmax(0,1fr);max-height:calc(100vh - 250px);min-height:min(58vh,520px);overflow:hidden}.floor-plan-toolbox-tabs{border-bottom:1px solid var(--border-color,#d8ded9);display:flex;flex-wrap:wrap;gap:0}.floor-plan-toolbox-tab{background:0 0;border:0;border-right:1px solid var(--border-color,#d8ded9);border-bottom:1px solid var(--border-color,#d8ded9);color:inherit;flex:1 1 118px;font-size:.82rem;font-weight:800;min-width:112px;padding:10px 8px}.floor-plan-toolbox-tab.active:last-child,.floor-plan-toolbox-tab:last-child{border-right:0}.floor-plan-toolbox-tab.active{background:rgba(47,111,99,.1);border-bottom-color:var(--plotline-accent,#2f6f63);color:var(--plotline-accent-dark,#22534a)}.floor-plan-toolbox-body{min-height:0;overflow:auto}.floor-plan-tool-card{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:8px;padding:14px}.floor-plan-toolbox .floor-plan-tool-card{background:0 0;border:0;border-radius:0}.floor-plan-tool-card[hidden]{display:none}.floor-plan-tool-card p{margin-bottom:10px}.floor-plan-tool-subsection{border-top:1px solid var(--border-color,#d8ded9);margin-top:12px;padding-top:12px}.floor-plan-tool-subsection:first-of-type{border-top:0;margin-top:0;padding-top:0}.floor-plan-background-file{border:1px solid rgba(47,111,99,.16);border-radius:6px;font-size:.86rem;padding:8px 10px}.floor-plan-background-range{align-items:center;display:grid;gap:10px;grid-template-columns:minmax(0,1fr) 44px}.floor-plan-background-range span{color:var(--muted-text,#5d6f65);font-size:.8rem;font-variant-numeric:tabular-nums;text-align:right}.floor-plan-transition-list{display:grid;gap:8px}.floor-plan-transition-item{border:1px solid rgba(47,111,99,.14);border-radius:6px;display:grid;gap:8px;padding:8px}.floor-plan-transition-item span,.floor-plan-transition-item strong{display:block;font-size:.84rem}.floor-plan-transition-item span{color:var(--muted-text,#5d6f65)}.scene-occupancy-form{display:grid;gap:.5rem}.scene-occupancy-status{justify-self:start;border-radius:999px;padding:.2rem .55rem;color:var(--plotline-muted);background:var(--plotline-soft);font-size:.78rem;font-weight:700}.scene-occupancy-status[data-save-state=saving]{color:#7a4d08;background:#fff4d6}.scene-occupancy-status[data-save-state=failed]{color:#842029;background:#f8d7da}.scene-occupancy-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.scene-occupancy-grid h4{margin:0 0 .5rem;font-size:.95rem}.scene-occupancy-row{display:grid;grid-template-columns:minmax(8rem,0.45fr) minmax(0,0.55fr);align-items:center;gap:.5rem;margin-bottom:.45rem}.floor-plan-editor--occupancy .floor-plan-block{cursor:default;touch-action:auto}.floor-plan-editor--occupancy .floor-plan-resize-handle{display:none}.floor-plan-editor--occupancy .floor-plan-side-panel{display:none}.floor-plan-occupancy-tray{position:absolute;z-index:14;height:calc(var(--h) * var(--cell-size));left:calc(var(--x) * var(--cell-size));top:calc(var(--y) * var(--cell-size));width:calc(var(--w) * var(--cell-size));display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.18rem;padding:0 0 .25rem;pointer-events:auto}.floor-plan-occupancy-tray[hidden]{display:none}.floor-plan-occupancy-token{display:grid;place-items:center;width:1.8rem;height:1.8rem;overflow:hidden;border:2px solid #fff;border-radius:999px;color:#fff;background:var(--plotline-accent);box-shadow:0 4px 12px rgba(30,37,43,.18);font-size:.68rem;font-weight:800}.floor-plan-occupancy-token img{width:100%;height:100%;object-fit:cover}.floor-plan-occupancy-token--asset{width:1.45rem;height:1.45rem;background:#805c15;font-size:.58rem}.floor-plan-occupancy-more{border-radius:999px;padding:.15rem .36rem;color:var(--plotline-ink);background:rgba(255,255,255,.92);box-shadow:0 4px 12px rgba(30,37,43,.12);font-size:.72rem;font-weight:800}.floor-plan-occupancy-message{align-self:start;background:rgba(255,255,255,.94);border:1px solid rgba(47,111,99,.18);border-radius:8px;box-shadow:0 6px 16px rgba(30,37,43,.08);color:var(--muted-color,#6b756f);font-size:.82rem;font-weight:700;grid-column:1/-1;grid-row:1;justify-self:center;margin-top:.55rem;max-width:min(92%,520px);padding:.45rem .7rem;position:relative;z-index:16}.floor-plan-occupancy-message[hidden]{display:none}.floor-plan-transition-accordion .accordion-item{background:0 0;border-color:var(--border-color,#d8ded9)}.floor-plan-transition-accordion .accordion-button{background:rgba(47,111,99,.06);color:inherit;font-size:.88rem;font-weight:800;padding:10px 12px}.floor-plan-transition-accordion .accordion-button:not(.collapsed){background:rgba(47,111,99,.12);color:var(--plotline-accent-dark,#22534a);box-shadow:inset 0 -1px 0 var(--border-color,#d8ded9)}.floor-plan-transition-accordion .accordion-body{padding:12px}.floor-plan-checkbox{align-items:center;display:inline-flex;gap:6px;font-weight:700;margin-bottom:4px}.floor-plan-choice-row{display:grid;gap:4px;margin-bottom:10px}.floor-plan-choice-row label{align-items:center;display:flex;gap:6px;font-size:.88rem}.floor-plan-overlap-warning{background:rgba(180,85,68,.12);border:1px solid rgba(180,85,68,.35);border-radius:6px;color:#8f3f31;margin-bottom:10px;padding:8px 10px}.dark .floor-plan-grid,[data-bs-theme=dark] .floor-plan-grid{background:linear-gradient(to right,rgba(214,224,218,.12) 1px,transparent 1px),linear-gradient(to bottom,rgba(214,224,218,.12) 1px,transparent 1px),#15201d;background-size:var(--cell-size) var(--cell-size),var(--cell-size) var(--cell-size),auto}.dark .floor-plan-editor-toolbar,.dark .floor-plan-tool-card,.dark .floor-plan-toolbox,[data-bs-theme=dark] .floor-plan-editor-toolbar,[data-bs-theme=dark] .floor-plan-tool-card,[data-bs-theme=dark] .floor-plan-toolbox{background:var(--panel-bg,#1f2522)}.dark .floor-plan-toolbox .floor-plan-tool-card,[data-bs-theme=dark] .floor-plan-toolbox .floor-plan-tool-card{background:0 0}.dark .floor-plan-toolbox-tab.active,[data-bs-theme=dark] .floor-plan-toolbox-tab.active{background:rgba(212,154,98,.16);color:var(--plotline-accent-dark,#f0c99d)}.dark .floor-plan-block,[data-bs-theme=dark] .floor-plan-block{--floor-plan-wall-color:rgba(212, 154, 98, .6);color:#f1f6f3}.dark .floor-plan-block.is-hidden-location,[data-bs-theme=dark] .floor-plan-block.is-hidden-location{background-image:repeating-linear-gradient(135deg,rgba(244,234,220,.09) 0,rgba(244,234,220,.09) 3px,transparent 3px,transparent 9px);box-shadow:inset 0 0 0 1px rgba(244,234,220,.2)}.dark .floor-plan-secret-route,[data-bs-theme=dark] .floor-plan-secret-route{border-top-color:rgba(244,204,160,.58);opacity:.76}.dark .floor-plan-secret-route::after,[data-bs-theme=dark] .floor-plan-secret-route::after{background:rgba(42,35,30,.95);border-color:rgba(244,204,160,.55)}.dark .floor-plan-coordinate-label,[data-bs-theme=dark] .floor-plan-coordinate-label{color:rgba(244,234,220,.46);text-shadow:0 1px 0 rgba(0,0,0,.55)}.dark .floor-plan-reference-block,[data-bs-theme=dark] .floor-plan-reference-block{background:rgba(131,199,242,.08);border-color:rgba(131,199,242,.32);color:rgba(244,234,220,.46)}.dark .floor-plan-reference-warning,[data-bs-theme=dark] .floor-plan-reference-warning{background:rgba(84,57,25,.92);border-color:rgba(244,177,100,.32);color:#ffd9a5}.dark .floor-plan-transition-marker,[data-bs-theme=dark] .floor-plan-transition-marker{--transition-marker-ink:#f4eadc;--transition-marker-window:#83c7f2;--transition-marker-blocked:#f08a78;background:rgba(42,35,30,.98);border-color:rgba(212,154,98,.6)}.dark .floor-plan-transition-marker.is-shared-edge,[data-bs-theme=dark] .floor-plan-transition-marker.is-shared-edge{background:rgba(48,39,32,.98);border-color:rgba(212,154,98,.78)}.dark .floor-plan-transition-marker--window,.dark .floor-plan-transition-marker--window.is-shared-edge,[data-bs-theme=dark] .floor-plan-transition-marker--window,[data-bs-theme=dark] .floor-plan-transition-marker--window.is-shared-edge{background:rgba(24,45,58,.98);border-color:rgba(131,199,242,.66)}.dark .floor-plan-transition-marker--french-door,.dark .floor-plan-transition-marker--ladder,.dark .floor-plan-transition-marker--sliding-door,[data-bs-theme=dark] .floor-plan-transition-marker--french-door,[data-bs-theme=dark] .floor-plan-transition-marker--ladder,[data-bs-theme=dark] .floor-plan-transition-marker--sliding-door{background:rgba(39,43,37,.98);border-color:rgba(212,154,98,.58)}.dark .floor-plan-transition-marker--blocked-door,.dark .floor-plan-transition-marker--blocked-door.is-shared-edge,[data-bs-theme=dark] .floor-plan-transition-marker--blocked-door,[data-bs-theme=dark] .floor-plan-transition-marker--blocked-door.is-shared-edge{background:rgba(58,33,28,.98);border-color:rgba(240,138,120,.66)}.dark .visual-avatar,[data-bs-theme=dark] .visual-avatar{background:linear-gradient(135deg,rgba(131,199,242,.14),rgba(212,154,98,.18));border-color:rgba(244,234,220,.18);color:#f4eadc}.dark .visual-image-editor,[data-bs-theme=dark] .visual-image-editor{background:rgba(244,234,220,.04);border-color:rgba(244,234,220,.12)}.dark .floor-plan-transition-item,[data-bs-theme=dark] .floor-plan-transition-item{border-color:rgba(212,154,98,.22)}.dark .scene-occupancy-status,[data-bs-theme=dark] .scene-occupancy-status{color:#d9c8b8;background:rgba(212,154,98,.12)}.dark .floor-plan-occupancy-token,[data-bs-theme=dark] .floor-plan-occupancy-token{border-color:#1f2630;box-shadow:0 4px 12px rgba(0,0,0,.28)}.dark .floor-plan-occupancy-more,[data-bs-theme=dark] .floor-plan-occupancy-more{color:#f1e7dd;background:rgba(31,38,48,.92)}.dark .floor-plan-occupancy-message,[data-bs-theme=dark] .floor-plan-occupancy-message{background:rgba(31,38,48,.94);border-color:rgba(212,154,98,.24);color:#d9c8b8}.dark .floor-plan-occupancy-warning-panel,[data-bs-theme=dark] .floor-plan-occupancy-warning-panel{background:rgba(244,234,220,.04);border-color:rgba(212,154,98,.2);color:#f1e7dd}.dark .floor-plan-occupancy-warning-empty,[data-bs-theme=dark] .floor-plan-occupancy-warning-empty{background:rgba(47,111,99,.18);color:#b8e2d7}.dark .floor-plan-occupancy-warning--warning,[data-bs-theme=dark] .floor-plan-occupancy-warning--warning{background:rgba(84,57,25,.92);color:#ffd9a5}.dark .floor-plan-occupancy-warning--info,[data-bs-theme=dark] .floor-plan-occupancy-warning--info{background:rgba(24,45,58,.92);color:#b9dcf3}.dark .floor-plan-transition-accordion .accordion-item,[data-bs-theme=dark] .floor-plan-transition-accordion .accordion-item{border-color:rgba(212,154,98,.22)}.dark .floor-plan-transition-accordion .accordion-button,[data-bs-theme=dark] .floor-plan-transition-accordion .accordion-button{background:rgba(212,154,98,.08);color:#f4eadc}.dark .floor-plan-transition-accordion .accordion-button:not(.collapsed),[data-bs-theme=dark] .floor-plan-transition-accordion .accordion-button:not(.collapsed){background:rgba(212,154,98,.16);color:var(--plotline-accent-dark,#f0c99d);box-shadow:inset 0 -1px 0 rgba(212,154,98,.22)}.dark .floor-plan-block--room,[data-bs-theme=dark] .floor-plan-block--room{background:#29584f}.dark .floor-plan-block--corridor,[data-bs-theme=dark] .floor-plan-block--corridor{background:#514876}.dark .floor-plan-block--openspace,[data-bs-theme=dark] .floor-plan-block--openspace{background:#4f6133}.dark .floor-plan-block--exterior,[data-bs-theme=dark] .floor-plan-block--exterior{background:#315d6f}.dark .floor-plan-block--other,[data-bs-theme=dark] .floor-plan-block--other{background:#5b564c}@media (max-width:1100px){.floor-plan-editor-toolbar,.floor-plan-layout{grid-template-columns:1fr}.floor-plan-grid-wrap{max-height:62vh}.floor-plan-side-panel{position:static}.floor-plan-toolbox{max-height:none}} \ No newline at end of file +html{font-size:15px;min-height:100%}@media (min-width:768px){html{font-size:16px}}:root{--plotline-ink:#1e252b;--plotline-muted:#66717b;--plotline-paper:#fbfaf7;--plotline-panel:#ffffff;--plotline-line:#d8ddd8;--plotline-accent:#2f6f63;--plotline-accent-dark:#22534a;--plotline-soft:#eef5f2;--timeline-label-width:180px;--timeline-scene-width:220px;--timeline-grid-gap:10px}body{min-height:100%;margin-bottom:0;color:var(--plotline-ink);background:var(--plotline-paper)}a{color:var(--plotline-accent-dark)}.btn-primary{--bs-btn-bg:var(--plotline-accent);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent-dark);--bs-btn-hover-border-color:var(--plotline-accent-dark)}.btn-outline-primary{--bs-btn-color:var(--plotline-accent-dark);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent);--bs-btn-hover-border-color:var(--plotline-accent)}.plotline-nav{background:rgba(255,255,255,.94);backdrop-filter:blur(8px)}.plotline-shell{max-width:1480px;padding-left:24px;padding-right:24px}.plotline-shell-wide{max-width:none;padding-left:clamp(18px,2vw,32px);padding-right:clamp(18px,2vw,32px)}.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin:18px 0 24px}.workspace-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin:14px 0 18px}.workspace-heading h1{margin:0;font-size:clamp(1.8rem, 3vw, 2.7rem);line-height:1.05}.page-heading.compact{max-width:980px}.page-heading h1{margin:0;font-size:clamp(2rem, 4vw, 3.2rem);line-height:1.05;letter-spacing:0}.eyebrow{margin:0 0 6px;color:var(--plotline-accent-dark);font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.lead-text{max-width:760px;margin:10px 0 0;color:var(--plotline-muted);font-size:1.05rem}.button-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.asset-card-footer form,.button-row form,.compact-buttons form,form[data-confirm-message],td.text-end form{display:inline-flex;align-items:center;margin:0}td.text-end{white-space:nowrap}.content-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.edit-panel,.empty-panel,.list-section,.plain-card{background:var(--plotline-panel);border:1px solid var(--plotline-line);border-radius:8px;padding:20px;box-shadow:0 10px 24px rgba(30,37,43,.04)}.empty-panel h2,.list-section h2,.plain-card h2{margin-top:0;font-size:1.35rem}.empty-panel p,.muted,.plain-card p{color:var(--plotline-muted)}.edit-panel{max-width:980px}.feature-request-admin-page .edit-panel,.feature-request-admin-page .page-heading.compact{max-width:none}.feature-request-admin-table{table-layout:fixed}.feature-request-admin-table td,.feature-request-admin-table th{vertical-align:middle}.feature-request-admin-table__preview{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feature-request-admin-table__action{width:78px}@media (max-width:1100px){.feature-request-admin-table{table-layout:auto}.feature-request-admin-table__preview{max-width:160px}}.trial-dashboard-banner,.trial-status-panel{border:1px solid var(--plotline-line);border-radius:8px;padding:18px 20px;background:var(--plotline-panel)}.trial-status-panel{display:grid;gap:12px;margin-bottom:18px}.trial-status-panel--signup{grid-template-columns:minmax(0,1fr) auto;align-items:center;max-width:980px}.trial-dashboard-banner h2,.trial-status-panel h2,.trial-status-panel h3{margin:0}.trial-dashboard-banner p,.trial-status-panel p{margin-bottom:0}.trial-dashboard-banner,.trial-status-panel__heading{display:flex;gap:16px;align-items:center;justify-content:space-between}.trial-dashboard-banner{margin-bottom:18px}.trial-dashboard-banner__body{min-width:0}.trial-dashboard-banner__actions{display:flex;flex:0 0 auto;flex-wrap:wrap;gap:8px}.trial-progress{height:10px;overflow:hidden;border-radius:999px;background:rgba(84,68,48,.12)}.trial-progress__bar{height:100%;border-radius:inherit}.trial-dashboard-banner[hidden],.trial-status-panel[hidden]{display:none}.location-page .drag-drop-panel,.location-page .edit-panel,.location-page .empty-panel,.location-page .page-heading.compact{max-width:none}.import-panel,.import-preview-section{max-width:none}.import-json-input{font-family:Consolas,"Liberation Mono",Menlo,monospace;font-size:.88rem;line-height:1.45;min-height:34rem;max-height:64vh;overflow:auto;resize:vertical;white-space:pre}.import-counts,.import-preview-heading{display:flex;align-items:flex-start;gap:12px}.import-preview-heading{justify-content:space-between;margin-bottom:16px}.import-counts{flex-wrap:wrap}.import-counts span{display:inline-flex;align-items:baseline;gap:5px;border:1px solid var(--plotline-line);border-radius:999px;padding:5px 11px;background:var(--plotline-soft);color:var(--plotline-muted);font-weight:700}.import-counts strong{color:var(--plotline-ink)}.import-tree{display:grid;gap:12px}.import-tree-book{border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:rgba(255,255,255,.54)}.import-tree-book>summary,.import-tree-chapter>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;cursor:pointer}.import-tree-book>summary span,.import-tree-chapter>summary span{color:var(--plotline-muted);font-size:.84rem;font-weight:700;white-space:nowrap}.import-tree-book h3{margin:0 0 10px;font-size:1.08rem}.import-tree-chapter{border-top:1px solid var(--plotline-line);padding:10px 0 0;margin-top:10px}.import-tree-chapter ul{margin:8px 0 0;color:var(--plotline-muted)}.import-scene-meta{display:block;margin-top:2px;color:var(--plotline-muted);font-size:.82rem}.import-mapping-summary{display:grid;gap:6px;border:1px solid rgba(184,118,43,.28);border-radius:8px;padding:10px 12px;margin-bottom:14px;background:rgba(251,236,211,.5);color:var(--plotline-muted);font-size:.9rem}.import-duplicate-confirm{border:1px solid rgba(184,118,43,.34);border-radius:8px;padding:12px 12px 12px 38px;background:rgba(251,236,211,.72)}.import-confirmation,.import-docs details{border:1px solid var(--plotline-line);border-radius:8px;padding:16px;background:rgba(255,255,255,.42)}.import-confirmation h3,.import-doc-grid h3{margin-top:0;font-size:1.05rem}.import-docs summary{cursor:pointer;font-weight:800}.import-doc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-top:14px}.import-message-list ul{max-height:16rem;overflow:auto}.scene-editor{max-width:1180px}.table{margin-bottom:0}.table th{color:var(--plotline-muted);font-size:.78rem;letter-spacing:.06em;text-transform:uppercase}.narrow{width:90px;white-space:nowrap}.status-pill{display:inline-flex;align-items:center;width:fit-content;border:1px solid #c8d8d2;border-radius:999px;padding:2px 8px;color:var(--plotline-accent-dark);background:var(--plotline-soft);font-size:.78rem;font-weight:700;white-space:nowrap}.dashboard-summary-card{border-color:var(--plotline-line)}.dashboard-summary-body{padding:10px 12px}.dashboard-summary-label{margin-bottom:4px;font-size:.7rem;line-height:1.15}.dashboard-summary-value{display:block;font-size:1.45rem;line-height:1}.dashboard-summary-calm{border-color:rgba(47,111,99,.28);background:rgba(238,245,242,.62)}.dashboard-summary-mild{border-color:rgba(197,139,43,.32);background:rgba(255,248,232,.68)}.dashboard-summary-attention{border-color:rgba(142,80,103,.32);background:rgba(252,241,246,.7)}.dashboard-progress-card{border-color:rgba(47,111,99,.18);background:linear-gradient(180deg,#fff 0,rgba(238,245,242,.64) 100%)}.dashboard-progress-body{padding:12px 14px}.dashboard-progress-heading{margin-bottom:8px}.dashboard-progress-title{margin:0 0 2px;font-size:1.05rem;line-height:1.2}.dashboard-series-progress{height:7px;background:rgba(47,111,99,.1)}.dashboard-series-progress .progress-bar{background:linear-gradient(90deg,var(--plotline-accent),#6fa99b)}.dashboard-progress-source{border-color:rgba(47,111,99,.2);color:var(--plotline-accent-dark);background:rgba(238,245,242,.9)}.dashboard-book-title-block h3{line-height:1.16}.dashboard-book-title-block a{color:var(--plotline-ink);text-decoration-color:rgba(47,111,99,0.35)}.dashboard-book-subtitle{color:var(--plotline-muted);font-size:.95rem;line-height:1.25}.dashboard-status-pill{border-color:var(--dashboard-status-border,#c8d8d2);color:var(--dashboard-status-ink,var(--plotline-accent-dark));background:var(--dashboard-status-bg,var(--plotline-soft))}.dashboard-status-published{--dashboard-status-border:rgba(47, 111, 99, 0.32);--dashboard-status-bg:#e7f2ed;--dashboard-status-ink:#22534a}.dashboard-status-drafting{--dashboard-status-border:rgba(184, 118, 43, 0.35);--dashboard-status-bg:#fff2dd;--dashboard-status-ink:#7b4b12}.dashboard-status-planning{--dashboard-status-border:rgba(51, 117, 155, 0.3);--dashboard-status-bg:#e9f3f8;--dashboard-status-ink:#245b78}.dashboard-status-outlining,.dashboard-status-research{--dashboard-status-border:rgba(103, 80, 164, 0.26);--dashboard-status-bg:#f0edf8;--dashboard-status-ink:#51417c}.dashboard-status-revising{--dashboard-status-border:rgba(123, 82, 148, 0.3);--dashboard-status-bg:#f4eefa;--dashboard-status-ink:#5f3e73}.dashboard-status-editing{--dashboard-status-border:rgba(68, 75, 130, 0.3);--dashboard-status-bg:#eceef8;--dashboard-status-ink:#343b72}.dashboard-status-proofreading{--dashboard-status-border:rgba(43, 130, 123, 0.3);--dashboard-status-bg:#e6f5f2;--dashboard-status-ink:#23625d}.dashboard-status-ready{--dashboard-status-border:rgba(185, 142, 30, 0.34);--dashboard-status-bg:#fff6d8;--dashboard-status-ink:#765a0f}.dashboard-status-paused{--dashboard-status-border:rgba(102, 113, 123, 0.28);--dashboard-status-bg:#f0f2f1;--dashboard-status-ink:#56616b}.dashboard-status-archived{--dashboard-status-border:rgba(139, 80, 86, 0.28);--dashboard-status-bg:#f3eded;--dashboard-status-ink:#76474d}.dashboard-attention-soft{border-color:rgba(102,113,123,.24);color:#56616b;background:#f3f4f2}.word-companion-follow-toggle[aria-pressed=true]{border-color:rgba(47,111,99,.36);color:var(--plotline-accent-dark);background:var(--plotline-soft);font-weight:700}.word-companion-follow-toggle[aria-pressed=true]::after{content:" On"}.word-companion-follow-toggle[aria-pressed=false]::after{content:" Off"}.order-buttons{display:flex;gap:6px}.purpose-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;max-height:260px;overflow:auto;padding:10px;border:1px solid var(--plotline-line);border-radius:8px;background:#fcfcfb}.purpose-check{display:flex;align-items:center;gap:8px;font-size:.92rem}.timeline-filter{display:flex;align-items:center;gap:8px;min-width:min(420px,100%)}.workspace-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:0;align-items:start;--timeline-inspector-width:min(40vw, 560px)}.workspace-layout.inspector-drawer-open{grid-template-columns:minmax(420px,1fr) 10px minmax(420px,var(--timeline-inspector-width));gap:12px}.timeline-workspace{min-width:0;max-width:100%}.timeline-inspector-resizer{position:sticky;top:76px;z-index:25;width:10px;height:calc(100vh - 96px);border-radius:999px;cursor:col-resize;background:linear-gradient(180deg,rgba(47,111,99,.16),rgba(47,111,99,.04))}.timeline-inspector-resizer::before{content:"";display:block;width:2px;height:48px;margin:18px auto;border-radius:999px;background:var(--plotline-accent);opacity:.55}.timeline-inspector-resizer:focus-visible,.timeline-inspector-resizer:hover{background:rgba(47,111,99,.16)}body.timeline-inspector-resizing{cursor:col-resize;user-select:none}.pacing-panel{margin-top:14px;margin-bottom:0;border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:#fff;box-shadow:0 10px 24px rgba(30,37,43,.04)}.pacing-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.pacing-heading h2{margin:0;font-size:1.1rem}.metric-graph-stack{display:grid;gap:10px;max-width:100%;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:4px}.metric-graph-row{display:grid;grid-template-columns:150px minmax(260px,1fr);gap:10px;align-items:center;min-width:max(100%,calc(150px + (var(--scene-count,1) * 34px)))}.metric-graph-label{color:var(--plotline-muted);font-size:.84rem;font-weight:700}.metric-graph-points{display:grid;grid-template-columns:repeat(var(--scene-count),minmax(28px,1fr));gap:5px;align-items:end;min-height:52px;border-radius:8px;padding:6px;background:linear-gradient(180deg,#f6faf8 0,#edf4f1 100%);min-width:calc(var(--scene-count) * 34px)}.metric-point{display:flex;align-items:flex-end;justify-content:center;height:48px;min-width:28px;color:var(--plotline-accent-dark);text-decoration:none}.metric-point::before{content:"";display:block;width:100%;height:max(8px,var(--metric-height));border-radius:5px 5px 2px 2px;background:linear-gradient(180deg,#6fa99b,var(--plotline-accent-dark));box-shadow:inset 0 1px 0 rgba(255,255,255,.35)}.metric-point span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.timeline-shell{overflow-x:auto;padding:16px;border:1px solid var(--plotline-line);border-radius:8px;background:linear-gradient(180deg,#fff 0,#f7faf8 100%)}.workspace-timeline{min-height:420px}.timeline-series-row{display:grid;grid-template-columns:var(--timeline-label-width) max-content;gap:var(--timeline-grid-gap);align-items:stretch;width:max-content;min-width:100%}.timeline-project-title{position:sticky;left:0;z-index:20;display:grid;align-content:start;gap:4px;width:var(--timeline-label-width);min-height:100%;border-radius:8px;padding:12px;color:#fff;background:var(--plotline-accent-dark);font-weight:700;box-shadow:8px 0 18px rgba(30,37,43,.08)}.timeline-book-title span,.timeline-project-title span{color:rgba(255,255,255,.78);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase}.timeline-book-title strong,.timeline-project-title strong{line-height:1.15}.timeline-books{display:flex;gap:var(--timeline-grid-gap);align-items:stretch}.timeline-book{flex:0 0 auto;width:calc((var(--book-scene-count) * var(--timeline-scene-width)) + ((var(--book-scene-count) - 1) * var(--timeline-grid-gap)));min-width:var(--timeline-scene-width)}.timeline-book-title{display:grid;gap:2px;margin-bottom:var(--timeline-grid-gap);border-radius:8px;padding:10px 12px;color:#fff;background:var(--plotline-accent-dark);font-weight:700}.timeline-chapters{display:flex;gap:var(--timeline-grid-gap);align-items:flex-start}.timeline-chapter{flex:0 0 auto;width:calc((var(--chapter-scene-count) * var(--timeline-scene-width)) + ((var(--chapter-scene-count) - 1) * var(--timeline-grid-gap)));min-width:var(--timeline-scene-width);box-sizing:border-box;border-radius:8px;background:rgba(238,245,242,.7);outline:1px solid #d4ded8;outline-offset:0;overflow:visible}.timeline-chapter-title{display:grid;gap:2px;border-bottom:1px solid #d4ded8;padding:10px 12px;color:var(--plotline-accent-dark);font-weight:700}.timeline-chapter-title span{color:var(--plotline-muted);font-size:.76rem;text-transform:uppercase}.timeline-scenes{display:grid;grid-template-columns:repeat(var(--chapter-scene-count),minmax(0,1fr));gap:var(--timeline-grid-gap);width:100%;box-sizing:border-box;min-height:190px;padding:0}.timeline-empty-scene,.timeline-scene-card{display:flex;flex-direction:column;gap:6px;width:100%;min-width:0;box-sizing:border-box;border:1px solid var(--plotline-line);border-radius:8px;padding:12px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 8px 18px rgba(30,37,43,.05)}.timeline-scene-card:hover{border-color:var(--plotline-accent);color:var(--plotline-ink)}.metric-point-placeholder,.timeline-placeholder-cell,.timeline-placeholder-scene{cursor:default;opacity:.72}.timeline-placeholder-scene{align-items:center;justify-content:center;border-style:dashed;color:var(--plotline-muted);background:rgba(255,255,255,.38);font-size:.86rem;font-weight:800;text-align:center}.timeline-placeholder-cell{border-style:dashed;background:repeating-linear-gradient(-45deg,rgba(216,221,216,.18) 0,rgba(216,221,216,.18) 7px,rgba(255,255,255,.18) 7px,rgba(255,255,255,.18) 14px)}.metric-point-placeholder::before{height:4px;background:rgba(102,113,123,.2);box-shadow:none}.timeline-scene-card.selected{border-color:var(--plotline-accent-dark);box-shadow:0 0 0 3px rgba(47,111,99,.16),0 10px 22px rgba(30,37,43,.08)}.purpose-chip-row,.scene-badge-row{display:flex;flex-wrap:wrap;gap:5px;align-items:center}.warning-placeholder{display:inline-flex;width:fit-content;border:1px dashed #d6b25e;border-radius:999px;padding:2px 8px;color:#755715;background:#fff8e8;font-size:.74rem;font-weight:700}.warning-placeholder.active{border-color:rgba(159,69,69,.36);color:#8a3434;background:rgba(255,232,232,.9);gap:5px;font-weight:800}.dependency-placeholder{display:inline-flex;width:fit-content;border:1px solid rgba(47,111,99,.2);border-radius:999px;padding:2px 8px;color:var(--plotline-accent-dark);background:rgba(47,111,99,.08);font-size:.74rem;font-weight:700}.purpose-chip{display:inline-flex;width:fit-content;border-radius:999px;padding:2px 7px;color:#38453e;background:#edf0eb;font-size:.72rem;font-weight:700}.future-lane-placeholder{border-top:1px dashed #cbd8d2;padding:8px 12px;color:var(--plotline-muted);font-size:.78rem;background:rgba(255,255,255,.45)}.metric-timeline-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.metric-shape-controls{position:sticky;left:0;z-index:6;display:grid;gap:8px;width:calc(var(--timeline-label-width) + (var(--scene-count) * var(--timeline-scene-width)) + (var(--scene-count) * var(--timeline-grid-gap)));min-width:100%;border-radius:8px;padding:10px;background:rgba(255,255,255,.88)}.metric-timeline-row{display:grid;grid-template-columns:var(--timeline-label-width) calc((var(--scene-count) * var(--timeline-scene-width)) + ((var(--scene-count) - 1) * var(--timeline-grid-gap)));gap:var(--timeline-grid-gap);align-items:stretch}.metric-lane-label{position:sticky;left:0;z-index:12;display:grid;align-content:start;gap:4px;min-height:320px;border:1px solid rgba(47,111,99,.18);border-radius:8px;padding:10px;color:var(--plotline-accent-dark);background:#fff;box-shadow:0 6px 14px rgba(30,37,43,.04)}.metric-lane-label span{color:var(--plotline-muted);font-size:.78rem;font-weight:600}.colour-swatch{display:inline-block;width:18px;height:18px;border:1px solid rgba(30,37,43,.18);border-radius:999px;vertical-align:middle}.plot-lane-board{position:relative;display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.plot-lane-svg-overlay{position:absolute;inset:0 auto auto 0;z-index:4;pointer-events:none;overflow:visible}.plot-lane-svg-health-overlay{z-index:8}.plot-line-svg-path{fill:none;stroke-width:3.5;stroke-linecap:round;opacity:.72}.plot-line-svg-segment-dormant{stroke-dasharray:9 8;opacity:.48}.plot-line-svg-connector{fill:none;stroke-width:3;stroke-linecap:round;opacity:.58}.plot-line-svg-path.plotline-state-questionable,.plot-line-svg-path.plotline-state-resolved{stroke:#8c9491;opacity:.42}.plot-line-svg-path.plotline-state-abandoned{stroke:#9b2f36;opacity:.5}.plot-event-svg-node.plotline-state-questionable,.plot-event-svg-node.plotline-state-resolved{opacity:.88}.plot-event-svg-node.plotline-state-abandoned{opacity:.9}.plot-event-svg-node.plotline-state-abandoned line{stroke:#ffffff}.plotline-health-marker circle,.plotline-health-marker path{fill:#f4c430;stroke:#8a6712;stroke-width:1.5}.plotline-health-marker{pointer-events:visiblePainted}.plotline-health-marker line,.plotline-health-marker text{stroke:#5e4710;fill:#5e4710;stroke-width:1.6;stroke-linecap:round}.plotline-health-marker text{font-size:11px;font-weight:800;stroke-width:0;pointer-events:none}.plotline-health-count{fill:#ffffff;stroke:#8a6712;stroke-width:2;paint-order:stroke}.plotline-health-marker-dangling circle,.plotline-health-marker-dangling path{fill:#f8df8f}.plotline-health-marker-abandoned circle,.plotline-health-marker-abandoned path{fill:#d85c63;stroke:#8b1e2d}.plotline-health-marker-abandoned line{stroke:#ffffff}.plot-event-svg-node circle,.plot-event-svg-node ellipse,.plot-event-svg-node path{stroke:#ffffff;stroke-width:2}.plot-event-svg-node line,.plot-event-svg-node path[fill=none]{stroke:#8b1e2d;stroke-width:3.4;stroke-linecap:round;stroke-linejoin:round}.plot-event-svg-node-reveal ellipse{stroke-width:2.4}.plot-event-svg-label{font-size:9.5px;font-weight:900;font-family:system-ui,-apple-system,"Segoe UI",sans-serif;paint-order:stroke;stroke:rgba(30,37,43,0.22);stroke-width:.8px;pointer-events:none}.plot-event-svg-node-resolve path[fill=none]{stroke:#ffffff}.lane-board-heading,.metric-lane-board-heading,.plot-lane-board-heading{position:sticky;left:0;z-index:6;display:flex;align-items:center;justify-content:space-between;gap:14px;width:calc(var(--timeline-label-width) + (var(--scene-count) * var(--timeline-scene-width)) + (var(--scene-count) * var(--timeline-grid-gap)));min-width:100%;margin-bottom:2px;border-radius:8px;padding:8px 10px;color:var(--plotline-accent-dark);background:rgba(255,255,255,.92);font-weight:700;box-shadow:0 8px 16px rgba(30,37,43,.05)}.lane-board-heading small,.metric-lane-board-heading small,.plot-lane-board-heading small{color:var(--plotline-muted);font-weight:500;white-space:nowrap}.timeline-heading-with-help{display:inline-flex;align-items:center;gap:6px;min-width:0}.plot-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.plot-lane-label{position:sticky;left:0;z-index:12;display:flex;align-items:center;gap:8px;min-height:46px;border:1px solid color-mix(in srgb,var(--plot-colour),#fff 55%);border-left:5px solid var(--plot-colour);border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.plot-lane-label:hover{color:var(--plotline-ink);border-color:var(--plot-colour)}.plot-lane-slots{display:contents}.plot-lane-slot{display:flex;flex-wrap:wrap;align-content:center;align-items:center;justify-content:center;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(255,255,255,.62)}.thread-marker{position:relative;z-index:5;display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:34px;height:30px;border:2px solid color-mix(in srgb,var(--plot-colour),#000 20%);border-radius:999px;padding:0 8px;color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 66%);font-size:.74rem;font-weight:900;text-decoration:none;box-shadow:0 3px 8px rgba(30,37,43,.14)}.plot-lane-board [data-plot-event-node]{opacity:1}.thread-marker:focus-visible,.thread-marker:hover{color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 48%);outline:3px solid rgba(47,111,99,.22);outline-offset:2px}.thread-marker.resolved{border-color:#5a8c60;background:#e6f4e7;color:#24512b}.thread-marker.contradicted{border-color:#b45c5c;background:#fff0f0;color:#7a2222}.thread-events-section{margin-top:16px}.thread-event-list{display:grid;gap:8px;margin-bottom:12px}.thread-event-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid color-mix(in srgb,var(--plot-colour),#fff 55%);border-left:4px solid var(--plot-colour);border-radius:8px;padding:8px;background:#fff}.thread-event-item>div{display:grid;gap:3px}.thread-event-marker{display:inline-flex;align-items:center;justify-content:center;width:fit-content;min-width:24px;height:22px;border-radius:999px;padding:0 7px;background:color-mix(in srgb,var(--plot-colour),#fff 72%);font-size:.72rem;font-weight:800}.thread-event-create{border-top:1px solid var(--plotline-line);padding-top:12px}.asset-lane-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.asset-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.asset-lane-label{position:sticky;left:0;z-index:12;display:grid;gap:2px;min-height:46px;border:1px solid #d4d7df;border-left:5px solid #6b5b95;border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.asset-lane-label span{color:var(--plotline-muted);font-size:.75rem}.asset-lane-slots{display:contents}.asset-lane-slot{display:flex;flex-wrap:wrap;align-content:flex-start;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(250,249,255,.72)}.asset-event-marker,.asset-marker{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid #7f70aa;border-radius:7px;padding:0 7px;color:#33284e;background:#eee9fb;font-size:.72rem;font-weight:800;text-decoration:none}.asset-marker:hover{color:#33284e;background:#dfd6f7}.asset-marker.timeline-marker-story-turn,.character-marker.timeline-marker-story-turn{border-width:2px}.asset-marker.timeline-marker-important,.character-marker.timeline-marker-important{box-shadow:inset 0 -3px 0 rgba(197,139,43,.36)}.asset-marker.timeline-marker-state-change,.character-marker.timeline-marker-state-change{border-style:double}.asset-marker.timeline-marker-transfer{box-shadow:inset 3px 0 0 rgba(47,111,99,.32)}.character-marker.timeline-marker-exit{opacity:.86;border-style:dashed}.asset-marker.timeline-marker-has-warning,.character-marker.timeline-marker-has-warning{box-shadow:0 0 0 2px rgba(179,95,59,.22)}.asset-events-section{margin-top:16px}.asset-event-list,.asset-mini-list{display:grid;gap:8px;margin-bottom:12px}.asset-event-item,.asset-mini-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid #ded9ea;border-left:4px solid #6b5b95;border-radius:8px;padding:8px;background:#fff}.asset-event-item>div,.asset-mini-item>div{display:grid;gap:3px}.asset-create-form{border-top:1px solid var(--plotline-line);padding-top:12px}.asset-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.asset-card{display:grid;gap:12px;border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:#fff;box-shadow:0 8px 18px rgba(30,37,43,.04)}.asset-card h2{margin:0;font-size:1.1rem}.asset-card-footer{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.asset-detail-grid{display:grid;grid-template-columns:minmax(260px,0.8fr) minmax(320px,1.2fr);gap:14px}.character-lane-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.character-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.character-lane-label{position:sticky;left:0;z-index:12;display:grid;gap:2px;min-height:46px;border:1px solid #d7d4ce;border-left:5px solid #8a6f3d;border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.character-lane-label span{color:var(--plotline-muted);font-size:.75rem}.character-lane-slots{display:contents}.character-lane-slot{display:flex;flex-wrap:wrap;align-content:flex-start;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(255,252,246,.72)}.character-marker{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid #9a7a3f;border-radius:999px;padding:0 7px;color:#4f3810;background:#fff2d7;font-size:.72rem;font-weight:800;text-decoration:none}.character-card{border-left:4px solid #8a6f3d}.character-section{margin-top:16px}.character-item{border-left-color:#8a6f3d}.character-appearance-card{display:grid;gap:8px;border:1px solid #d7d4ce;border-left:4px solid #8a6f3d;border-radius:8px;padding:10px;background:#fff}.character-appearance-summary{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.character-appearance-summary>div:first-child{display:grid;gap:3px}.character-appearance-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.character-appearance-edit .asset-create-form{margin-top:8px;border-top:1px solid var(--plotline-line)}.word-companion-suggestion-panel{display:grid;gap:8px;margin-bottom:12px;border:1px solid rgba(138,111,61,.24);border-radius:8px;padding:10px;background:rgba(255,248,232,.72)}.word-companion-suggestion-list{display:grid;gap:8px}.word-companion-suggestion-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid #ded9ea;border-left:4px solid #8a6f3d;border-radius:8px;padding:8px;background:#fff}.word-companion-suggestion-item>div:first-child{display:grid;gap:3px}.word-companion-suggestion-pill{margin-left:6px}.form-helper-message{margin:0 0 8px;font-size:.86rem;font-weight:700}.scene-number,.time-label{color:var(--plotline-muted);font-size:.82rem}.location-badge,.location-pill{display:inline-flex;align-items:center;width:fit-content;border:1px solid rgba(47,111,99,.18);border-radius:999px;padding:2px 7px;color:var(--plotline-accent-dark);background:rgba(47,111,99,.08);font-size:.74rem;font-weight:700}.scene-summary{display:-webkit-box;overflow:hidden;color:var(--plotline-muted);font-size:.88rem;-webkit-box-orient:vertical;-webkit-line-clamp:4}.timeline-empty-scene{justify-content:center;color:var(--plotline-muted);background:rgba(255,255,255,.58)}.form-check-input:focus,.form-control:focus,.form-select:focus{border-color:var(--plotline-accent);box-shadow:0 0 0 .2rem rgba(47,111,99,.16)}.scene-inspector-panel{position:sticky;top:76px;display:flex;flex-direction:column;max-height:calc(100vh - 96px);min-width:0;overflow:hidden;border:1px solid var(--plotline-line);border-radius:8px;background:#fff;box-shadow:0 14px 32px rgba(30,37,43,.08)}.inspector-header{position:sticky;top:0;z-index:5;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);padding:16px;background:#fff}.scene-inspector-body{flex:1 1 auto;min-height:0;overflow:auto;padding:16px}.inspector-header h2{margin:0;font-size:1.25rem}.location-helper{border:1px solid rgba(138,111,61,.22);border-radius:8px;padding:10px;background:rgba(255,248,232,.74)}.location-warning-list{margin:0;padding-left:18px;color:#6f5526;font-size:.86rem}.location-tree{display:grid;gap:8px}.location-tree-row{display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);padding:10px 0 10px calc(var(--location-depth,0) * 22px)}.location-tree-row:last-child{border-bottom:0}.location-tree-row>div:first-child{display:grid;gap:3px}.compact-buttons{flex-wrap:nowrap}.location-chip-list{display:flex;flex-wrap:wrap;gap:8px}.location-chip{border:1px solid var(--plotline-line);border-radius:8px;padding:7px 10px;background:#fff;text-decoration:none}.location-relationship-list{display:grid;gap:8px}.location-relationship-card{display:flex;justify-content:space-between;gap:12px;border:1px solid var(--plotline-line);border-radius:8px;padding:10px;background:#fff}.location-flags{display:flex;flex-wrap:wrap;gap:10px 16px;color:var(--plotline-muted);font-size:.86rem}.validation-summary,.warning-filter-panel{border:1px solid var(--plotline-line);border-radius:8px;margin-bottom:16px;padding:12px;background:#fff}.validation-summary{display:flex;flex-wrap:wrap;gap:12px;color:var(--plotline-muted)}.warning-dashboard-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:18px}.inspector-section-heading,.warning-card-title,.warning-count-row{display:flex;align-items:center;justify-content:space-between;gap:10px}.warning-list,.warning-mini-list{display:grid;gap:10px}.warning-card,.warning-mini-card{border:1px solid var(--plotline-line);border-radius:8px;padding:12px;background:#fff}.warning-card{display:grid;grid-template-columns:1fr auto;gap:12px}.warning-card p,.warning-mini-card p{margin:6px 0}.warning-actions{display:flex;align-items:flex-start;flex-wrap:wrap;gap:6px}.severity-pill{display:inline-flex;align-items:center;border-radius:999px;padding:2px 8px;font-size:.74rem;font-weight:800}.severity-pill.info{color:#365f7c;background:rgba(107,153,184,.14)}.severity-pill.warning{color:#7a5527;background:rgba(205,154,72,.17)}.severity-pill.error{color:#8a3434;background:rgba(190,83,83,.15)}.warning-mini-card{background:rgba(255,255,255,.76)}.dependency-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.dependency-card{display:grid;gap:3px;border:1px solid var(--plotline-line);border-radius:8px;margin-bottom:8px;padding:9px;background:rgba(255,255,255,.78)}.move-preview-panel{max-width:900px}.focused-validation-summary{display:flex;flex-wrap:wrap;gap:10px;border:1px solid rgba(47,111,99,.16);border-radius:8px;margin-top:12px;padding:10px;color:var(--plotline-muted);background:rgba(47,111,99,.05)}.inspector-purpose-list{grid-template-columns:1fr;max-height:210px}.metric-slider-stack{display:grid;gap:12px}.metric-slider{display:grid;gap:4px}.metric-slider-label{display:flex;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.86rem;font-weight:700}.metric-slider-label output{color:var(--plotline-accent-dark)}.metric-slider .form-range{accent-color:var(--plotline-accent)}.asset-importance-slider{border:1px solid var(--plotline-line);border-radius:8px;padding:10px 12px;background:rgba(47,111,99,.05)}.story-asset-checkbox-field{margin-top:1.95rem}.story-asset-event-item{justify-content:flex-start;gap:8px}.story-asset-event-item .asset-event-marker{flex:0 0 auto;min-width:1.55rem;width:auto}.story-asset-event-details{min-width:0}.breadcrumb-trail,.context-nav,.overview-chip-grid{display:flex;flex-wrap:wrap;gap:7px}.breadcrumb-trail a,.breadcrumb-trail span,.context-nav a,.overview-chip{display:inline-flex;align-items:center;border:1px solid var(--plotline-line);border-radius:999px;padding:4px 9px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-decoration:none;background:rgba(255,255,255,.72)}.overview-chip.attention{color:#7a5527;border-color:rgba(205,154,72,.35);background:rgba(205,154,72,.14)}.overview-outcome{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;margin:0;color:var(--plotline-muted)}.breadcrumb-trail{margin-bottom:12px}.breadcrumb-trail a:hover,.context-nav a:hover{color:var(--plotline-accent-dark);border-color:rgba(47,111,99,.35);background:rgba(47,111,99,.08)}.context-header,.working-context-banner{display:flex;align-items:center;justify-content:space-between;gap:14px;border:1px solid var(--plotline-line);border-radius:10px;margin-bottom:16px;padding:10px 12px;background:rgba(255,255,255,.84);box-shadow:0 10px 24px rgba(55,48,39,.05)}.context-title{display:grid;gap:2px}.context-title strong{color:var(--plotline-ink)}.analytics-grid-three,.analytics-grid-two,.health-kpi-grid{display:grid;gap:14px;margin:18px 0}.health-kpi-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.health-kpi-grid .plain-card{display:grid;gap:4px}.health-kpi-grid strong{color:var(--plotline-ink);font-size:2rem;line-height:1}.analytics-grid-two{grid-template-columns:repeat(2,minmax(0,1fr))}.analytics-grid-three{grid-template-columns:repeat(3,minmax(0,1fr))}.analytics-section{border:1px solid var(--plotline-line);border-radius:10px;margin:18px 0;padding:16px;background:rgba(255,255,255,.84);box-shadow:0 14px 34px rgba(55,48,39,.07)}.analytics-section-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}.analytics-section-heading h2,.plain-card h3{margin:0}.analytics-metric-stack{display:grid;gap:12px;overflow-x:auto;padding-bottom:4px}.metric-shape-chart{display:grid;gap:12px}.metric-shape-intro{max-width:760px;margin:0;color:var(--plotline-muted)}.metric-toggle-row{display:flex;flex-wrap:wrap;gap:8px}.metric-toggle-pill{display:inline-flex;align-items:center;gap:6px;border:1px solid rgba(82,75,65,.16);border-radius:999px;padding:5px 9px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;background:rgba(255,255,255,.78);cursor:pointer}.metric-toggle-pill::before{content:"";width:10px;height:10px;border-radius:999px;background:var(--metric-colour)}.metric-toggle-pill input{margin:0;accent-color:var(--metric-colour)}.timeline-metric-edit-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:end}.timeline-metric-edit-select{display:grid;gap:3px;min-width:180px;color:var(--plotline-muted);font-size:.78rem;font-weight:800}.timeline-metric-edit-status{align-self:center;border:1px solid rgba(47,111,99,.18);border-radius:999px;padding:5px 9px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;background:rgba(255,255,255,.72)}.timeline-metric-edit-hint{font-size:.82rem}.metric-chart-frame canvas.metric-curve-editing{cursor:ns-resize}.metric-chart-frame{position:relative;min-height:320px;border:1px solid var(--plotline-line);border-radius:10px;padding:14px 12px 32px;background:linear-gradient(180deg,rgba(255,255,255,.92),rgba(247,245,240,.76))}.metric-timeline-frame{width:calc((var(--scene-count) * var(--timeline-scene-width)) + ((var(--scene-count) - 1) * var(--timeline-grid-gap)))}.metric-chart-frame canvas{width:100%;height:300px}.metric-timeline-board .metric-graph-stack{width:max-content;min-width:100%}.metric-timeline-board .metric-graph-row{grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);min-width:100%}.metric-timeline-board .metric-graph-points{display:contents}.metric-timeline-board .metric-point{border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(255,255,255,.62)}.metric-raw-details{border-top:1px solid var(--plotline-line);padding-top:8px}.metric-raw-details summary{color:var(--plotline-muted);font-size:.82rem;font-weight:800;cursor:pointer}.timeline-control-panel{display:grid;gap:12px;border:1px solid var(--plotline-line);border-radius:10px;margin-bottom:16px;padding:12px;background:rgba(255,255,255,.84);box-shadow:0 10px 24px rgba(55,48,39,.05)}.timeline-filter-drawer summary{color:var(--plotline-ink);font-weight:900;cursor:pointer}.timeline-filter-grid{display:grid;grid-template-columns:repeat(6,minmax(130px,1fr));gap:10px;margin-top:12px}.preset-chip-row,.timeline-filter-actions,.timeline-filter-checks,.timeline-preset-panel,.timeline-visibility-panel{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.timeline-filter-checks{grid-column:span 3;color:var(--plotline-muted);font-size:.82rem;font-weight:700}.timeline-filter-actions{grid-column:span 3;justify-content:flex-end}.preset-chip,.timeline-visibility-panel label{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--plotline-line);border-radius:999px;padding:4px 8px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;background:rgba(255,255,255,.76)}.timeline-preset-panel form{display:inline-flex;align-items:center;gap:6px}.preset-chip a{color:var(--plotline-accent-dark);text-decoration:none}.preset-chip button{border:0;color:var(--plotline-muted);background:0 0;font-weight:900}.timeline-focus-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid rgba(47,111,99,.22);border-radius:10px;margin-bottom:16px;padding:10px 12px;background:rgba(47,111,99,.08)}.thread-marker-icon{display:inline-flex;align-items:center;justify-content:center;min-width:16px;font-size:.78rem;font-weight:900}.thread-marker-type-abandon .thread-marker-icon,.thread-marker-type-resolve .thread-marker-icon,.thread-marker-type-start .thread-marker-icon,.thread-marker-type-twist .thread-marker-icon{font-size:.9rem}.thread-marker-type-start{border-radius:8px 999px 999px 8px}.thread-marker-type-twist{border-color:#b8762b;background:#fff4dc}.thread-marker-type-branch,.thread-marker-type-merge,.thread-marker-type-split{border-color:#6750a4;background:#f0ebff}.thread-marker-type-reveal .thread-marker-icon{border:1px solid currentColor;border-radius:999px;font-size:0}.thread-marker-type-reveal .thread-marker-icon::after{content:"";width:4px;height:4px;border-radius:999px;background:currentColor}.timeline-navigation-card{display:grid;grid-template-areas:"icon copy" "icon actions";grid-template-columns:auto minmax(0,620px);gap:8px 14px;align-items:center;justify-content:center;border:1px solid rgba(47,111,99,.42);border-left:5px solid var(--plotline-accent);border-radius:8px;margin:0 0 12px;padding:14px 16px;max-height:280px;overflow:hidden;color:var(--plotline-ink);background:linear-gradient(135deg,rgba(238,245,242,.98),rgba(255,255,255,.94));box-shadow:0 10px 26px rgba(30,37,43,.08);opacity:1;transform:translateY(0);transition:opacity 1.15s ease,max-height 1.2s ease,margin 1.2s ease,padding 1.2s ease,transform 1.15s ease}.timeline-navigation-card[hidden]{display:none}.timeline-navigation-card.is-dismissing{margin-bottom:0;padding-top:0;padding-bottom:0;max-height:0;opacity:0;transform:translateY(-6px)}.timeline-navigation-card-icon{grid-area:icon;display:grid;place-items:center;width:42px;height:42px;border-radius:50%;color:#fff;background:var(--plotline-accent);font-size:1.25rem;font-weight:900}.timeline-navigation-card-copy{grid-area:copy;text-align:center}.timeline-navigation-card-copy h2{margin:0 0 6px;color:var(--plotline-accent-dark);font-size:1rem;font-weight:900}.timeline-navigation-card-copy p{margin:2px 0;color:var(--plotline-ink);font-size:.9rem}.timeline-navigation-card-actions{grid-area:actions;display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.timeline-horizontal-overflow{transition:box-shadow .18s ease}.timeline-horizontal-overflow.has-scroll-left{box-shadow:inset 18px 0 18px -20px rgba(30,37,43,.55)}.timeline-horizontal-overflow.has-scroll-right{box-shadow:inset -18px 0 18px -20px rgba(30,37,43,.55)}.timeline-horizontal-overflow.has-scroll-left.has-scroll-right{box-shadow:inset 18px 0 18px -20px rgba(30,37,43,.55),inset -18px 0 18px -20px rgba(30,37,43,.55)}[data-theme=dark] .timeline-navigation-card{border-color:rgba(111,169,155,.52);border-left-color:#6fa99b;color:#f4eadc;background:linear-gradient(135deg,rgba(34,83,74,.72),rgba(32,31,34,.96));box-shadow:0 12px 28px rgba(0,0,0,.28)}[data-theme=dark] .timeline-navigation-card-copy h2,[data-theme=dark] .timeline-navigation-card-copy p{color:#f4eadc}[data-theme=dark] .timeline-horizontal-overflow.has-scroll-left{box-shadow:inset 18px 0 18px -20px rgba(244,234,220,.55)}[data-theme=dark] .timeline-horizontal-overflow.has-scroll-right{box-shadow:inset -18px 0 18px -20px rgba(244,234,220,.55)}[data-theme=dark] .timeline-horizontal-overflow.has-scroll-left.has-scroll-right{box-shadow:inset 18px 0 18px -20px rgba(244,234,220,.55),inset -18px 0 18px -20px rgba(244,234,220,.55)}@media (prefers-reduced-motion:reduce){.timeline-navigation-card{transition:opacity .12s ease}}.lane-dim,.timeline-scene-card.filter-dim,.timeline-scene-card.focus-dim{opacity:.35}.timeline-scene-card.filter-match.focus-match,.timeline-scene-card.focus-match{outline:3px solid rgba(47,111,99,.32);box-shadow:0 12px 26px rgba(47,111,99,.16)}.timeline-section-hidden{display:none!important}.hide-scene-cards .timeline-scene-card{display:none}.timeline-control-panel{position:sticky;top:56px;z-index:18}.timeline-control-select{padding-right:6px}.timeline-control-select .form-select{width:auto;min-width:132px;border:0;padding-top:2px;padding-bottom:2px;background-color:transparent;color:var(--plotline-accent-dark);font-weight:800}.timeline-jump-panel{display:grid;grid-template-columns:auto minmax(180px,1.2fr) minmax(180px,1fr) minmax(170px,0.9fr) minmax(180px,1fr) auto;gap:8px;align-items:center;width:100%}.timeline-shortcut-hint{color:var(--plotline-muted);font-size:.76rem;font-weight:700;white-space:nowrap}.timeline-minimap{display:flex;align-items:stretch;gap:4px;margin:0 0 12px;padding:8px;max-width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-gutter:stable;border:1px solid rgba(47,111,99,.18);border-radius:8px;background:rgba(255,255,255,.72)}.timeline-minimap button{position:relative;flex:0 0 max(42px,calc(var(--chapter-scenes) * 18px));min-width:42px;min-height:34px;border:1px solid rgba(47,111,99,.18);border-radius:7px;color:var(--plotline-accent-dark);background:linear-gradient(180deg,#f8fbf9 0,#edf4f1 100%);font-size:.72rem;font-weight:800}.timeline-minimap button.is-active{border-color:var(--plotline-accent);color:#fff;background:linear-gradient(180deg,var(--plotline-accent) 0,var(--plotline-accent-dark) 100%);box-shadow:0 0 0 2px rgba(47,111,99,.14)}.timeline-minimap button::after{content:"";position:absolute;right:5px;bottom:5px;width:calc(var(--chapter-warnings) * 4px);max-width:28px;height:4px;border-radius:999px;background:#b45c5c;opacity:.75}.drag-drop-panel,.timeline-drag-palette{border:1px solid rgba(47,111,99,.18);border-radius:10px;margin-bottom:12px;padding:12px;background:rgba(255,255,255,.84);box-shadow:0 10px 24px rgba(55,48,39,.05)}.timeline-drag-palette{display:grid;grid-template-columns:minmax(220px,0.35fr) minmax(0,1fr);gap:12px;align-items:center}.drag-chip-group{display:flex;flex-wrap:wrap;gap:6px;max-height:104px;overflow:auto;padding-right:4px}.drag-chip{display:inline-flex;align-items:center;border:1px solid var(--plotline-line);border-radius:999px;padding:4px 9px;background:#fff;color:var(--plotline-ink);font-size:.78rem;font-weight:800;cursor:grab}.drag-chip.character{border-color:#dacb9e;background:#fff8e8}.drag-chip.asset{border-color:#ded9ea;background:#f4f0ff}.drag-chip.location{border-color:rgba(47,111,99,.18);background:#eef8f4}.is-dragging{opacity:.55}.drop-target-active{outline:3px solid rgba(47,111,99,.28);outline-offset:2px}.timeline-chapter.chapter-drop-active,.timeline-scenes.drop-chapter-end{background:rgba(47,111,99,.06)}.timeline-scenes.drop-chapter-end::after{content:"Drop scene at end of chapter";display:flex;align-items:center;justify-content:center;min-width:var(--timeline-scene-width);min-height:74px;border:2px dashed rgba(197,139,43,.48);border-radius:12px;color:#7a5527;background:rgba(255,248,232,.82);font-size:.8rem;font-weight:900}.timeline-scene-card.drop-before{box-shadow:inset 5px 0 0 #c58b2b,0 12px 26px rgba(197,139,43,.16)}.timeline-scene-card.drop-after{box-shadow:inset -5px 0 0 #c58b2b,0 12px 26px rgba(197,139,43,.16)}.drag-drop-panel{position:sticky;top:132px;z-index:19}.drag-drop-panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.drag-drop-panel h2{margin:0;font-size:1.08rem}.drag-drop-form{border-top:1px solid var(--plotline-line);margin-top:10px;padding-top:10px}.scene-move-modal-content{border:1px solid rgba(47,111,99,.18);border-radius:14px;background:var(--plotline-surface);color:var(--plotline-ink);box-shadow:0 24px 70px rgba(55,48,39,.22)}.scene-move-modal-content .modal-footer,.scene-move-modal-content .modal-header{border-color:var(--plotline-line)}.scene-move-modal-content .modal-title{margin:0;color:var(--plotline-ink);font-size:1.2rem;font-weight:900}.scene-move-summary{margin:0 0 12px;color:var(--plotline-ink);font-size:1rem;font-weight:800}[data-theme=dark] .scene-move-modal-content{background:#201f22;color:#f4eadc;border-color:rgba(244,234,220,.16);box-shadow:0 24px 70px rgba(0,0,0,.55)}[data-theme=dark] .scene-move-modal-content .modal-title,[data-theme=dark] .scene-move-summary{color:#f4eadc}[data-theme=dark] .scene-move-modal-content .modal-footer,[data-theme=dark] .scene-move-modal-content .modal-header{border-color:rgba(244,234,220,.14)}[data-theme=dark] .scene-move-modal-content .btn-close{filter:invert(1) grayscale(100%)}.plain-preview{border:1px solid rgba(197,139,43,.28);border-radius:8px;margin:10px 0 0;padding:8px 10px;color:#5e4518;background:#fff8e8;font-size:.86rem;font-weight:800}.drag-check-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px;color:var(--plotline-muted);font-size:.82rem;font-weight:700}.lane-board-heading,.pacing-heading,.timeline-section-header{position:sticky;left:0;z-index:6}.timeline-section-header{display:flex;align-items:center;justify-content:space-between;gap:10px;width:calc(var(--timeline-label-width) + (var(--scene-count) * var(--timeline-scene-width)) + (var(--scene-count) * var(--timeline-grid-gap)));min-width:100%;margin-bottom:10px;border-radius:8px;padding:8px 10px;background:rgba(255,255,255,.92);box-shadow:0 8px 16px rgba(30,37,43,.05)}.lane-board-heading button,.lane-group-heading,.pacing-heading button,.plot-lane-board-heading button,.timeline-section-header button{border:0;padding:0;color:var(--plotline-accent-dark);background:0 0;font:inherit;font-weight:900;text-align:left}.lane-board-heading button::before,.lane-group-heading::before,.pacing-heading button::before,.plot-lane-board-heading button::before,.timeline-section-header button::before{content:"v";display:inline-block;margin-right:6px;color:var(--plotline-muted);font-size:.72rem}.lane-board-heading button.is-collapsed::before,.lane-group-heading.is-collapsed::before,.pacing-heading button.is-collapsed::before,.plot-lane-board-heading button.is-collapsed::before,.timeline-section-header button.is-collapsed::before{content:">"}.lane-group{display:grid;gap:7px}.character-lane-group-body{display:grid;gap:7px}.lane-group-heading{position:sticky;left:0;z-index:6;width:var(--timeline-label-width);border-top:1px solid rgba(47,111,99,.12);padding:7px 8px 2px;color:var(--plotline-muted);background:rgba(247,250,248,.96);font-size:.78rem;text-transform:uppercase}.timeline-section-collapsed{display:none!important}.timeline-chapter-title{position:sticky;top:0;z-index:5;background:rgba(238,245,242,.96);backdrop-filter:blur(6px)}.metric-mini-summary,.scene-pov-label{display:inline-flex;width:fit-content;border-radius:999px;padding:2px 7px;font-size:.72rem;font-weight:800}.scene-pov-label{color:#514018;background:#fff3d3}.metric-mini-summary{color:var(--plotline-accent-dark);background:rgba(47,111,99,.08)}.scene-overview-panel{display:none;gap:8px;margin-top:4px}.scene-overview-section{display:grid;gap:4px}.scene-overview-label{color:var(--plotline-muted);font-size:.68rem;font-weight:900;letter-spacing:.06em;text-transform:uppercase}.scene-overview-chip-row{display:flex;flex-wrap:wrap;gap:5px;min-width:0}.scene-overview-brief,.scene-overview-chip,.scene-overview-empty{display:inline-flex;width:fit-content;max-width:100%;border-radius:999px;padding:3px 8px;background:rgba(47,111,99,.08);color:var(--plotline-ink);font-size:.72rem;font-weight:750;line-height:1.25;overflow-wrap:anywhere}.scene-overview-chip.is-pov{border:1px solid rgba(197,139,43,.38);background:#fff3d3}.scene-overview-chip.is-important{border:1px solid rgba(103,80,164,.3);background:#f0edf8}.scene-overview-chip.is-more,.scene-overview-empty{color:var(--plotline-muted);background:rgba(102,113,123,.08)}.scene-overview-brief{display:block;width:auto;border-radius:8px;background:rgba(255,255,255,.62);color:var(--plotline-muted);font-weight:600}.timeline-scene-card.keyboard-focus,.timeline-scene-card.search-hit{outline:3px solid rgba(197,139,43,.34);box-shadow:0 12px 26px rgba(197,139,43,.16)}.timeline-scene-card.search-dim{opacity:.28}.asset-marker,.character-marker,.thread-marker{transition:transform .12s ease,box-shadow .12s ease}.asset-marker:hover,.character-marker:hover,.thread-marker:hover{transform:translateY(-1px);box-shadow:0 6px 12px rgba(30,37,43,.12)}.timeline-filtered-root.density-compact{--timeline-scene-width:170px;--timeline-grid-gap:6px}.timeline-filtered-root.density-expanded{--timeline-scene-width:280px;--timeline-grid-gap:14px}.timeline-filtered-root.density-compact .timeline-scene-card,.timeline-filtered-root.zoom-book .timeline-scene-card{gap:4px;padding:9px}.timeline-filtered-root.density-compact .metric-mini-summary,.timeline-filtered-root.density-compact .purpose-chip-row,.timeline-filtered-root.density-compact .scene-summary,.timeline-filtered-root.zoom-book .location-pill,.timeline-filtered-root.zoom-book .metric-mini-summary,.timeline-filtered-root.zoom-book .purpose-chip-row,.timeline-filtered-root.zoom-book .scene-pov-label,.timeline-filtered-root.zoom-book .scene-summary{display:none}.timeline-filtered-root.zoom-book{--timeline-scene-width:150px;--timeline-grid-gap:6px}.timeline-filtered-root.zoom-scene-detail{--timeline-scene-width:300px}.timeline-filtered-root.zoom-scene-detail .scene-summary{-webkit-line-clamp:7}.timeline-filtered-root.zoom-scene-overview{--timeline-scene-width:380px}.timeline-filtered-root.zoom-scene-overview .timeline-scenes{min-height:320px}.timeline-filtered-root.zoom-scene-overview .timeline-scene-card{gap:8px;padding:14px}.timeline-filtered-root.zoom-scene-overview .scene-summary{display:none}.timeline-filtered-root.zoom-scene-overview .scene-overview-panel{display:grid}.timeline-filtered-root.density-expanded .timeline-scenes{min-height:230px}.timeline-control-panel{position:relative;top:auto;z-index:4;display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;padding:8px;box-shadow:none}.timeline-control-group,.timeline-filter-drawer{border:1px solid var(--plotline-line);border-radius:999px;background:rgba(255,255,255,.82)}.timeline-control-group[open],.timeline-filter-drawer[open]{border-radius:10px;flex-basis:100%}.timeline-control-group summary,.timeline-filter-drawer summary{min-width:max-content;padding:5px 10px;color:var(--plotline-accent-dark);font-size:.82rem;font-weight:900;cursor:pointer;list-style:none}.timeline-control-group summary::-webkit-details-marker,.timeline-drag-palette summary::-webkit-details-marker,.timeline-filter-drawer summary::-webkit-details-marker{display:none}.timeline-control-group summary::after,.timeline-drag-palette summary::after,.timeline-filter-drawer summary::after{content:" v";color:var(--plotline-muted);font-size:.72rem}.timeline-control-group[open] summary::after,.timeline-drag-palette[open] summary::after,.timeline-filter-drawer[open] summary::after{content:" ^"}.timeline-filter-grid{grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:8px;max-height:min(48vh,430px);overflow:auto;padding:0 10px 10px}.timeline-filter-grid .form-label{margin-bottom:2px;font-size:.72rem;font-weight:800}.timeline-filter-actions,.timeline-filter-checks{grid-column:1/-1}.timeline-jump-panel,.timeline-preset-panel,.timeline-visibility-panel{padding:0 10px 10px}.timeline-jump-panel{grid-template-columns:minmax(180px,1.5fr) repeat(3,minmax(150px,1fr))}.timeline-shortcut-hint{grid-column:1/-1}.timeline-preset-panel form{flex-wrap:nowrap}.timeline-preset-panel .form-control{width:150px}.timeline-filter-actions .btn,.timeline-preset-panel .btn{white-space:nowrap}.timeline-drag-palette{display:block;margin-bottom:8px;padding:7px 9px;box-shadow:none}.timeline-drag-palette summary{color:var(--plotline-accent-dark);font-size:.82rem;font-weight:900;cursor:pointer}.timeline-drag-palette .drag-chip-group{margin-top:8px}.drag-drop-panel{position:relative;top:auto;z-index:9;box-shadow:0 12px 28px rgba(30,37,43,.08)}.timeline-filtered-root,.timeline-filtered-root.density-compact,.timeline-filtered-root.zoom-book{--timeline-scene-width:220px;--timeline-grid-gap:10px}.timeline-filtered-root.density-expanded,.timeline-filtered-root.zoom-scene-detail{--timeline-scene-width:290px}.timeline-filtered-root.density-compact.zoom-book{--timeline-scene-width:200px}.timeline-chapter,.timeline-empty-scene,.timeline-scene-card{overflow-wrap:normal;word-break:normal}.asset-lane-label strong,.character-lane-label strong,.plot-lane-label strong,.timeline-chapter-title strong,.timeline-scene-card strong{min-width:0;white-space:normal;word-break:normal;overflow-wrap:break-word}.timeline-scene-card{cursor:grab}.drag-chip:active,.timeline-scene-card:active,[draggable=true]:active{cursor:grabbing}body.drag-active .timeline-scene-card,body.dragging-asset [data-asset-drop-target],body.dragging-location [data-drag-type=location]{transition:outline-color .12s ease,box-shadow .12s ease,opacity .12s ease}body.dragging-asset .timeline-scene-card,body.dragging-asset [data-asset-drop-target],body.dragging-character .timeline-scene-card,body.dragging-location [data-drag-type=location],body.dragging-scene .timeline-scene-card,body.dragging-scene .timeline-scenes[data-chapter-drop-target]{outline:1px dashed rgba(47,111,99,.22);outline-offset:2px}.is-dragging{opacity:.42;transform:scale(.98)}.drop-target-active{outline:3px solid rgba(47,111,99,.42)!important;outline-offset:3px}.analytics-metric-row{display:grid;grid-template-columns:170px minmax(560px,1fr);gap:12px;align-items:stretch}.analytics-metric-label{display:flex;align-items:center;border-right:1px solid var(--plotline-line);color:var(--plotline-muted);font-weight:800}.analytics-sparkline{display:grid;grid-template-columns:repeat(var(--point-count),minmax(28px,1fr));align-items:end;gap:5px;min-height:88px;border-bottom:1px solid rgba(47,111,99,.25);padding-top:10px}.analytics-bar{position:relative;display:flex;align-items:end;justify-content:center;min-height:12px;height:max(12px,var(--bar-height));border-radius:6px 6px 2px 2px;color:var(--plotline-accent-dark);text-decoration:none;background:linear-gradient(180deg,rgba(47,111,99,.58),rgba(47,111,99,.18))}.analytics-bar:hover{background:linear-gradient(180deg,rgba(47,111,99,.82),rgba(47,111,99,.28))}.analytics-bar span{position:absolute;bottom:calc(100% + 3px);color:var(--plotline-muted);font-size:.68rem;font-weight:800}.analytics-count-row,.analytics-link-row,.analytics-list-item,.purpose-stat-row{border-top:1px solid var(--plotline-line);padding:9px 0}.analytics-list-item{display:grid;gap:3px}.analytics-list-item p{margin:0}.analytics-count-row,.analytics-link-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.analytics-link-row{color:inherit;text-decoration:none}.analytics-link-row:hover{color:var(--plotline-accent-dark)}.analytics-link-row span,.analytics-link-row strong{min-width:0}.purpose-stat-row{display:grid;grid-template-columns:minmax(120px,1fr) minmax(90px,1.5fr) 42px;align-items:center;gap:10px}.purpose-stat-bar{overflow:hidden;height:8px;border-radius:999px;background:rgba(47,111,99,.08)}.purpose-stat-bar span{display:block;height:100%;border-radius:inherit;background:var(--plotline-accent)}.story-bible-heading{align-items:end}.story-bible-search{display:flex;gap:8px;min-width:min(100%,420px)}.story-bible-search .form-control{min-width:0}.story-bible-nav{position:sticky;top:72px;z-index:4;display:flex;flex-wrap:wrap;gap:8px;margin:0 0 18px;padding:10px;border:1px solid var(--plotline-line);border-radius:12px;background:rgba(250,249,246,.92);backdrop-filter:blur(10px)}.story-bible-actions a,.story-bible-nav a{display:inline-flex;align-items:center;border-radius:999px;padding:6px 10px;background:rgba(47,111,99,.08);color:var(--plotline-ink);font-size:.86rem;font-weight:650;text-decoration:none}.story-bible-actions a:hover,.story-bible-nav a:hover{background:rgba(47,111,99,.16)}.story-bible-section{margin:0 0 28px}.story-bible-section-heading{display:flex;align-items:end;justify-content:space-between;gap:16px;margin-bottom:12px}.story-bible-section-heading h2{margin:0}.soft-count{color:var(--plotline-muted);font-size:.9rem;font-weight:650;white-space:nowrap}.story-bible-grid,.story-bible-search-results{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}.story-bible-grid-compact{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.story-bible-card{border:1px solid var(--plotline-line);border-radius:14px;padding:14px;background:rgba(255,255,255,.86);box-shadow:0 14px 34px rgba(36,32,26,.06)}.story-bible-card h3{margin:0 0 8px;font-size:1.05rem}.story-bible-card h4{margin:14px 0 8px;font-size:.96rem}.story-bible-card p{color:var(--plotline-muted)}.story-bible-card-title{display:flex;align-items:start;justify-content:space-between;gap:10px}.story-bible-card-title span{border:1px solid var(--plotline-line);border-radius:999px;padding:3px 8px;background:rgba(250,249,246,.9);color:var(--plotline-muted);font-size:.78rem;font-weight:700;white-space:nowrap}.story-bible-meta{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}.story-bible-meta span{border-radius:999px;padding:4px 8px;background:rgba(36,32,26,.05);color:var(--plotline-muted);font-size:.78rem;font-weight:650}.story-bible-facts{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 10px;margin:12px 0}.story-bible-facts dt{color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.story-bible-facts dd{margin:0;min-width:0;overflow-wrap:anywhere}.story-bible-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.story-bible-link-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}.story-bible-link-list li{display:grid;gap:2px;padding:8px 0;border-bottom:1px solid rgba(36,32,26,.08)}.story-bible-link-list li:last-child{border-bottom:0}.story-bible-link-list span{color:var(--plotline-muted);font-size:.88rem}.story-bible-timeline-summary{display:grid;gap:14px}.story-bible-wide-card{max-width:none}.story-bible-chapter-summary{border-top:1px solid var(--plotline-line);padding-top:8px}.story-bible-scene-summary{display:grid;grid-template-columns:minmax(220px,1.5fr) repeat(3,minmax(120px,0.8fr));gap:8px;padding:9px 0;border-top:1px solid rgba(36,32,26,.08)}.story-bible-scene-summary p{grid-column:1/-1;margin:0}.story-bible-scene-summary span{color:var(--plotline-muted);font-size:.88rem}.attention-list{display:grid;gap:10px}.attention-list article{display:grid;grid-template-columns:max-content minmax(0,1fr) auto;align-items:center;gap:10px;border:1px solid var(--plotline-line);border-radius:12px;padding:10px 12px;background:rgba(255,255,255,.82)}.attention-list p{grid-column:2/-1;margin:0;color:var(--plotline-muted)}.chapter-goal-form,.writer-add-form,.writer-edit-form,.writer-workspace-form{display:grid;gap:10px}.writer-checkbox-grid{display:flex;flex-wrap:wrap;gap:8px 14px}.writer-checkbox-grid label{display:inline-flex;align-items:center;gap:6px;color:var(--plotline-muted);font-size:.86rem;font-weight:650}.writer-priority-control{display:grid;grid-template-columns:minmax(0,1fr) max-content;align-items:center;gap:12px}.writer-priority-control .form-range{min-width:0}.writer-note-list,.writer-queue-list{display:grid;gap:10px}.writer-mini-card{border:1px solid var(--plotline-line);border-radius:12px;padding:10px;background:rgba(255,255,255,.72)}.writer-mini-card summary{display:flex;align-items:center;gap:8px;cursor:pointer}.writer-mini-card summary strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-card-list{display:grid;gap:10px}.attachment-summary{align-items:center}.attachment-kind{border-radius:999px;padding:3px 8px;background:rgba(47,111,99,.1);color:var(--plotline-accent);font-size:.76rem;font-weight:800;text-transform:uppercase}.attachment-card-body{display:grid;gap:6px;margin-top:10px}.attachment-card-body p{margin:0}.attachment-add-card{margin-top:10px}.writer-checklist{display:grid;gap:6px}.writer-add-inline,.writer-checklist-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px}.writer-remove-inline{display:flex;justify-content:end;margin:-2px 0 4px}.writer-dashboard-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:26px}.writer-dashboard-panel{border:1px solid var(--plotline-line);border-radius:14px;padding:14px;background:rgba(255,255,255,.7);box-shadow:0 14px 34px rgba(36,32,26,.05)}.writer-queue-card{border:1px solid var(--plotline-line);border-radius:12px;padding:12px;background:rgba(255,255,255,.9)}.writer-queue-card h3{margin:0;font-size:1rem}.writer-queue-card p{margin:8px 0 0;color:var(--plotline-muted)}.writer-queue-title{display:flex;align-items:start;justify-content:space-between;gap:12px}.writer-kpi{display:block;color:var(--plotline-accent);font-size:2.2rem;line-height:1}.export-action-row{margin:-8px 0 18px}.dynamics-timeline{position:relative;min-height:128px;border:1px solid var(--plotline-line);border-radius:14px;background:linear-gradient(180deg,rgba(47,111,99,.07),rgba(255,255,255,.84));overflow:hidden}.dynamics-timeline::before{content:"";position:absolute;left:12px;right:12px;top:64px;height:1px;background:rgba(36,32,26,.18)}.dynamics-marker{position:absolute;bottom:18px;width:12px;height:86px;transform:translateX(-50%);display:flex;align-items:end;justify-content:center}.dynamics-marker span{display:block;width:8px;min-height:12px;max-height:82px;border-radius:999px;background:var(--plotline-accent);box-shadow:0 8px 20px rgba(47,111,99,.22)}.dynamics-marker.pov span{background:#8a4b2f}.dynamics-timeline.relationship .dynamics-marker span{background:#7c5fb0}.scenario-banner{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;border:1px solid rgba(103,80,164,.22);border-radius:12px;padding:16px;margin-bottom:16px;background:linear-gradient(135deg,rgba(103,80,164,.1),rgba(255,255,255,.86));box-shadow:0 12px 28px rgba(36,32,26,.08)}.scenario-banner h1{margin:0 0 4px}.scenario-banner p{margin:0;color:var(--plotline-muted)}.scenario-card{border-color:rgba(103,80,164,.18)}.scenario-warning-strip{display:flex;gap:10px;align-items:center;border:1px solid var(--plotline-line);border-radius:10px;padding:10px 12px;margin-bottom:14px;background:rgba(255,255,255,.76);color:var(--plotline-muted)}.scenario-warning-strip strong{color:var(--plotline-ink)}.scenario-board{border:1px solid var(--plotline-line);border-radius:12px;padding:12px;background:rgba(247,245,240,.74);overflow:hidden;margin-bottom:18px}.scenario-scroll{display:flex;gap:14px;overflow-x:auto;padding-bottom:8px}.scenario-chapter{min-width:360px;max-width:520px;border:1px solid rgba(82,75,65,.14);border-radius:10px;background:rgba(255,255,255,.86)}.scenario-chapter header{display:grid;gap:2px;border-bottom:1px solid var(--plotline-line);padding:10px 12px}.scenario-chapter header span{color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.scenario-scene-row{display:grid;gap:10px;padding:10px}.scenario-scene-card{display:grid;gap:8px;border:1px solid rgba(82,75,65,.12);border-radius:9px;padding:10px;background:#fff}.scenario-scene-title{display:grid;gap:2px}.scenario-mini-data,.scenario-scene-title span{color:var(--plotline-muted);font-size:.78rem}.scenario-mini-data{display:grid;gap:2px}.scenario-chapter-form,.scenario-compare-list article,.scenario-move-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.scenario-chapter-form select{min-width:160px;width:auto}.scenario-compare-list{display:grid;gap:10px}.scenario-compare-list article{justify-content:space-between;border:1px solid var(--plotline-line);border-radius:9px;padding:10px;background:rgba(255,255,255,.82)}.danger-zone{border-color:rgba(163,61,61,.24)}.archive-filter-form{align-items:end}.archive-item-list{display:grid;gap:10px}.archive-item-card{display:flex;justify-content:space-between;gap:14px;align-items:center;border:1px solid var(--plotline-line);border-radius:10px;padding:12px;background:rgba(255,255,255,.82)}.archive-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-items:end}.delete-forever-form{display:inline-flex;margin:0}.archive-item-card h3{margin:4px 0}.archived-badge{display:inline-flex;border:1px solid rgba(82,75,65,.16);border-radius:999px;padding:2px 8px;color:var(--plotline-muted);font-size:.72rem;font-weight:800;text-transform:uppercase;background:rgba(247,245,240,.86)}.restore-button{white-space:nowrap}.archive-button-form{display:inline-flex;align-items:center;margin:0}.acceptance-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(160px,1fr));gap:12px;margin-bottom:16px}.acceptance-summary{display:grid;gap:4px;padding:16px}.acceptance-summary strong{font-size:2rem;line-height:1}.acceptance-summary.pass{border-left:5px solid #4d7654}.acceptance-summary.review{border-left:5px solid #b8762b}.acceptance-summary.blocked{border-left:5px solid #963f36}.acceptance-check-list{display:grid;gap:14px}.acceptance-area{border:1px solid var(--plotline-line);border-radius:10px;padding:12px;background:rgba(255,255,255,.62)}.acceptance-area h3{margin:0 0 10px;font-size:1.05rem}.acceptance-check-items{display:grid;gap:8px}.acceptance-check-item{display:grid;grid-template-columns:92px minmax(0,1fr);gap:10px;align-items:start;border:1px solid rgba(82,75,65,.12);border-radius:8px;padding:10px;background:rgba(255,255,255,.74)}.acceptance-check-item p{margin:2px 0 0;color:var(--plotline-muted)}.acceptance-status{display:inline-flex;justify-content:center;width:fit-content;min-width:74px;border-radius:999px;padding:3px 9px;font-size:.72rem;font-weight:900;text-transform:uppercase}.acceptance-check-item.pass .acceptance-status{color:#24512b;background:#e6f4e7}.acceptance-check-item.review .acceptance-status{color:#7b4b13;background:#fbecd3}.acceptance-check-item.blocked .acceptance-status{color:#7a2222;background:#fff0f0}.plotline-confirm-modal .modal-title{color:var(--plotline-ink)}.plotline-confirm-modal .modal-body p{white-space:pre-line}.delete-confirm-field{border:1px solid rgba(163,61,61,.22);border-radius:8px;padding:12px;background:rgba(255,247,244,.7)}@media print{.breadcrumb-trail,.button-row,.context-header,.story-bible-nav,header{display:none!important}.plotline-shell{max-width:none;padding:0}}@media (max-width:760px){.plotline-shell{padding-left:14px;padding-right:14px}.page-heading{display:block}.page-heading .button-row,.timeline-filter{margin-top:14px}.timeline-filter{align-items:stretch;flex-direction:column}.timeline-navigation-card{grid-template-areas:"copy" "actions";grid-template-columns:1fr}.timeline-navigation-card-icon{display:none}.timeline-navigation-card-actions{justify-content:center}.story-bible-search,.story-bible-section-heading{align-items:stretch;flex-direction:column}.attention-list article,.story-bible-scene-summary{grid-template-columns:1fr}.writer-dashboard-grid{grid-template-columns:1fr}.writer-add-inline,.writer-checklist-row{grid-template-columns:1fr}.trial-dashboard-banner,.trial-status-panel--signup,.trial-status-panel__heading{align-items:stretch;flex-direction:column}.trial-dashboard-banner__actions,.trial-dashboard-banner__actions .btn,.trial-status-panel--signup .btn{width:100%}.attention-list p{grid-column:auto}}@media (max-width:900px){.workspace-layout,.workspace-layout.inspector-drawer-open{grid-template-columns:1fr;gap:14px}.timeline-inspector-resizer{display:none}.scene-inspector-panel{position:static;max-height:none;overflow:visible}.scene-inspector-body{max-height:none;overflow:visible}}@media (max-width:1100px){.metric-graph-row{grid-template-columns:1fr}.analytics-grid-three,.analytics-grid-two,.health-kpi-grid{grid-template-columns:1fr}.analytics-metric-row{grid-template-columns:1fr}.analytics-metric-label{border-right:0}}.floor-plan-list{display:grid;gap:12px}.floor-plan-list-item{align-items:center;border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:flex;justify-content:space-between;gap:16px;padding:14px}.floor-plan-list-item h2{font-size:1.05rem;margin:0 0 4px}.floor-plan-list-item p{margin:0}.floor-plan-tools{display:grid;gap:14px}.floor-plan-meta-wide{max-width:none}.floor-plan-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.floor-plan-tab{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:999px;color:inherit;padding:6px 12px}.floor-plan-tab.active{background:var(--bs-primary,#2f6f63);border-color:var(--bs-primary,#2f6f63);color:#fff}.floor-plan-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) minmax(320px,360px)}.floor-plan-editor--occupancy .floor-plan-layout{grid-template-columns:minmax(0,1fr)}.floor-plan-editor-toolbar{background:rgba(255,255,255,.92);border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:grid;gap:10px;margin-bottom:12px;padding:10px 12px;position:sticky;top:10px;z-index:20}.floor-plan-occupancy-scene-row,.floor-plan-toolbar-action-group,.floor-plan-toolbar-control-group,.floor-plan-toolbar-floor-group,.floor-plan-toolbar-main{align-items:center;display:flex;flex-wrap:wrap;gap:10px}.floor-plan-toolbar-main{justify-content:space-between}.scene-editor-v2-workspace{max-width:none;width:100%;padding:0;border:0;background:0 0;box-shadow:none}.scene-inspector-v2{position:relative;display:grid;gap:14px;color:var(--plotline-ink)}.scene-inspector-v2-edit{--scene-editor-width:480px;padding-bottom:24px}.scene-inspector-v2-edit.editor-overlay-open{display:grid;grid-template-columns:minmax(0,1fr) 10px minmax(360px,min(var(--scene-editor-width),50%));align-items:stretch;gap:12px;height:clamp(420px,calc(100vh - 280px),760px);min-height:0}.scene-inspector-v2-summary-pane{display:grid;gap:14px;min-width:0}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-v2-summary-pane{min-height:0;overflow:auto;padding-right:2px}.scene-inspector-v2-timeline{min-height:100%}.scene-inspector-v2-timeline.editor-overlay-open{height:clamp(380px,calc(100vh - 190px),680px);min-height:0;overflow:hidden}.scene-inspector-v2-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.scene-inspector-v2-stack{display:grid;gap:12px}.scene-inspector-v2-health{display:grid;grid-template-columns:repeat(7,minmax(110px,1fr));gap:8px}.scene-inspector-editor-overlay,.scene-inspector-v2-card,.scene-inspector-v2-health>div{border:1px solid var(--plotline-line);background:var(--plotline-panel);border-radius:8px;box-shadow:0 8px 24px rgba(30,37,43,.06)}.scene-inspector-v2-health>div{min-width:0;padding:10px 12px}.scene-inspector-v2-counts span,.scene-inspector-v2-facts dt,.scene-inspector-v2-health span,.scene-inspector-v2-section>span,.scene-inspector-v2-summary>span{display:block;color:var(--plotline-muted);font-size:.72rem;font-weight:800;text-transform:uppercase}.scene-inspector-v2-health strong{display:block;overflow:hidden;color:var(--plotline-ink);font-size:.94rem;text-overflow:ellipsis;white-space:nowrap}.scene-inspector-v2-counts .attention strong,.scene-inspector-v2-health .attention strong{color:var(--plotline-danger,#b35f3b)}.scene-inspector-v2-card{display:grid;align-content:start;gap:14px;min-width:0;padding:16px}.scene-inspector-v2-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-inspector-v2-card-header h3{margin:0;font-size:1.08rem;line-height:1.25}.scene-inspector-v2-card p{margin:0}.scene-inspector-v2-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0}.scene-inspector-v2-facts div{min-width:0}.scene-inspector-v2-facts dd{margin:2px 0 0;overflow-wrap:anywhere}.scene-inspector-v2-section,.scene-inspector-v2-summary{display:grid;gap:6px}.scene-inspector-v2-actions,.scene-inspector-v2-chip-row{display:flex;flex-wrap:wrap;gap:7px}.scene-inspector-v2-chip-row span{border:1px solid rgba(47,111,99,.18);border-radius:999px;background:rgba(47,111,99,.08);padding:3px 9px;color:var(--plotline-accent-dark);font-size:.82rem;font-weight:800}.scene-inspector-v2-counts,.scene-inspector-v2-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.scene-inspector-v2-counts div,.scene-inspector-v2-metrics div{min-width:0;border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(47,111,99,.05);padding:9px 10px}.scene-inspector-v2-metrics span{display:block;overflow:hidden;color:var(--plotline-muted);font-size:.78rem;text-overflow:ellipsis;white-space:nowrap}.scene-inspector-v2-counts strong,.scene-inspector-v2-metrics strong{display:block;color:var(--plotline-ink);font-size:1rem}.scene-inspector-v2-list{display:grid;gap:7px;margin:0;padding:0;list-style:none}.scene-inspector-v2-list li{display:flex;align-items:baseline;justify-content:space-between;gap:10px;border-bottom:1px solid rgba(47,111,99,.1);padding-bottom:6px}.scene-inspector-v2-list li:last-child{border-bottom:0;padding-bottom:0}.scene-inspector-v2-list span{color:var(--plotline-muted);font-size:.82rem;text-align:right}.scene-inspector-v2-callout{border-left:4px solid var(--plotline-warning,#c58b2b);border-radius:8px;background:rgba(197,139,43,.1);padding:10px 12px}.scene-inspector-editor-overlay{position:absolute;inset:0;z-index:4;display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px;max-height:100%;padding:16px;overflow:hidden;background:var(--plotline-panel)}.scene-inspector-editor-overlay[hidden]{display:none}.scene-inspector-v2-edit .scene-inspector-editor-overlay{position:static;inset:auto;z-index:1;min-width:0;height:100%;max-height:none}.scene-inspector-editor-resizer{display:none}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer{display:block;align-self:stretch;min-height:100%;border-radius:999px;cursor:col-resize;background:linear-gradient(180deg,rgba(47,111,99,.16),rgba(47,111,99,.04))}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer::before{content:"";display:block;width:2px;height:48px;margin:18px auto;border-radius:999px;background:var(--plotline-accent);opacity:.55}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer:focus-visible,.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer:hover{background:rgba(47,111,99,.16)}body.scene-inspector-editor-resizing{cursor:col-resize;user-select:none}.scene-inspector-editor-shell{position:sticky;top:0;z-index:2;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);background:var(--plotline-panel);padding-bottom:12px}.scene-inspector-editor-shell h3{margin:0;font-size:1.1rem}.scene-inspector-editor-empty{min-height:0;overflow:auto}.scene-inspector-editor-form{display:grid;grid-template-rows:minmax(0,1fr) auto;min-height:100%;gap:14px}.scene-inspector-editor-fields{display:grid;align-content:start;gap:14px;padding-right:4px}.scene-inspector-editor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.scene-inspector-editor-fieldset{display:grid;gap:10px;min-width:0;margin:0;border:1px solid var(--plotline-line);border-radius:8px;padding:12px}.scene-inspector-editor-fieldset legend{float:none;width:auto;margin:0;padding:0 4px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-inspector-editor-checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.scene-inspector-editor-checks label{display:flex;align-items:center;gap:8px;min-width:0;margin:0;border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(47,111,99,.05);padding:8px 10px}.scene-inspector-editor-checks span{overflow-wrap:anywhere}.scene-inspector-editor-footer{position:sticky;bottom:0;z-index:2;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--plotline-line);background:var(--plotline-panel);padding-top:12px}.scene-inspector-editor-error{border:1px solid rgba(179,95,59,.28);border-radius:8px;background:rgba(179,95,59,.1);padding:10px 12px;color:var(--plotline-danger,#b35f3b);font-weight:700}.scene-inspector-editor-loading,.scene-inspector-editor-pending{border:1px dashed rgba(47,111,99,.24);border-radius:8px;background:rgba(47,111,99,.04);padding:16px;color:var(--plotline-muted)}.scene-inspector-editor-metric{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-inspector-editor-metric-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-inspector-editor-metric-heading h4{margin:0;font-size:.98rem}.scene-inspector-editor-metric-heading p{margin:3px 0 0;color:var(--plotline-muted);font-size:.88rem}.scene-inspector-editor-metric-heading output{min-width:42px;border-radius:8px;background:var(--plotline-accent);padding:5px 8px;color:#fff;font-weight:800;text-align:center}.scene-inspector-editor-range-labels{display:flex;justify-content:space-between;color:var(--plotline-muted);font-size:.78rem}.scene-character-editor-section{display:grid;gap:10px}.scene-character-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-character-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-character-pov-options{display:grid;gap:7px}.scene-character-pov-options label{display:flex;align-items:center;gap:8px;margin:0;font-weight:700}.scene-character-editor-list{display:grid;gap:10px}.scene-character-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-character-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-character-editor-card-header h4{margin:0;font-size:1rem}.scene-character-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-character-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-world-editor-section{display:grid;gap:10px}.scene-world-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-world-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-world-editor-list{display:grid;gap:10px}.scene-world-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-world-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-world-editor-card-header h4{margin:0;font-size:1rem}.scene-world-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-world-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-writer-editor-section{display:grid;gap:10px}.scene-writer-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-writer-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-writer-editor-list{display:grid;gap:10px}.scene-writer-checklist-row,.scene-writer-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-writer-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-writer-editor-card-header h4{margin:0;font-size:1rem}.scene-writer-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-writer-checklist-row{grid-template-columns:auto minmax(0,1fr) auto;align-items:center}.scene-writer-checklist-complete,.scene-writer-inline-check,.scene-writer-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-attachment-editor-card{align-items:stretch}.scene-attachment-preview-row{display:grid;grid-template-columns:72px minmax(0,1fr);gap:12px;align-items:start}.scene-attachment-thumb{display:grid;place-items:center;width:72px;height:72px;overflow:hidden;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.06);color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-align:center}.scene-attachment-thumb img{width:100%;height:100%;object-fit:cover}.scene-attachment-preview-copy{display:grid;gap:8px;min-width:0}.scene-attachment-preview-copy p{margin:0}.scene-attachment-delete-form,.scene-attachment-editor-form{display:grid;gap:10px}.scene-attachment-action-row{display:flex;justify-content:flex-end;gap:8px}.scene-structure-editor-section{display:grid;gap:10px}.scene-structure-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-structure-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-structure-delete-form,.scene-structure-editor-form,.scene-structure-editor-list{display:grid;gap:10px}.scene-structure-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-structure-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-structure-card-header h4{margin:0;font-size:1rem}.scene-structure-card-header p,.scene-structure-editor-card p{margin:2px 0 0}.scene-structure-marker{flex:0 0 auto;border-radius:999px;background:var(--plot-colour,var(--plotline-accent));padding:3px 8px;color:#fff;font-size:.78rem;font-weight:800}.scene-structure-action-row{display:flex;justify-content:flex-end;gap:8px}.scene-structure-dependency-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.scene-structure-inline-check{display:inline-flex;align-items:center;align-self:end;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-inspector-v2-timeline .scene-inspector-v2-health{grid-template-columns:repeat(2,minmax(0,1fr))}.scene-inspector-v2-timeline .scene-inspector-v2-card{padding:14px}.scene-inspector-v2-timeline .scene-inspector-v2-card-header,.scene-inspector-v2-timeline .scene-inspector-v2-list li{align-items:stretch;flex-direction:column}.scene-inspector-v2-timeline .scene-inspector-v2-counts,.scene-inspector-v2-timeline .scene-inspector-v2-facts,.scene-inspector-v2-timeline .scene-inspector-v2-metrics{grid-template-columns:1fr}@media (max-width:1100px){.scene-inspector-v2-edit.editor-overlay-open{grid-template-columns:minmax(0,1fr) 10px minmax(360px,min(var(--scene-editor-width),52%))}.scene-inspector-v2-grid,.scene-inspector-v2-health{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:720px){.scene-inspector-v2-counts,.scene-inspector-v2-facts,.scene-inspector-v2-grid,.scene-inspector-v2-health,.scene-inspector-v2-metrics{grid-template-columns:1fr}.scene-inspector-v2-card-header{flex-direction:column}.scene-inspector-editor-checks,.scene-inspector-editor-grid{grid-template-columns:1fr}.scene-writer-checklist-row{grid-template-columns:1fr;align-items:stretch}.scene-attachment-preview-row{grid-template-columns:1fr}.scene-structure-dependency-columns{grid-template-columns:1fr}}.floor-plan-toolbar-floor-group{flex:1 1 420px;min-width:min(100%,320px)}.floor-plan-active-floor{display:grid;gap:2px}.floor-plan-toolbar-control-group{flex:0 1 auto}.floor-plan-toolbar-action-group{flex:1 1 360px;justify-content:flex-end}.floor-plan-occupancy-scene-row{border-top:1px solid rgba(47,111,99,.12);padding-top:9px}.floor-plan-occupancy-scene-row[hidden]{display:none}.floor-plan-occupancy-scene-row .floor-plan-reference-control{flex:1 1 320px;min-width:min(100%,320px)}.floor-plan-occupancy-scene-row .form-select{width:100%}.floor-plan-occupancy-warning-panel{background:rgba(47,111,99,.05);border:1px solid rgba(47,111,99,.16);border-radius:8px;color:var(--plotline-ink,#1e252b);flex:1 1 100%;font-size:.82rem;padding:.55rem .7rem}.floor-plan-occupancy-warning-panel strong{display:block;font-size:.78rem;margin-bottom:.25rem;text-transform:uppercase}.floor-plan-occupancy-warning-panel p,.floor-plan-occupancy-warning-panel ul{margin:0}.floor-plan-occupancy-warning-panel ul{display:grid;gap:.25rem;list-style:none;padding:0}.floor-plan-occupancy-warning,.floor-plan-occupancy-warning-empty{border-radius:6px;font-weight:700;padding:.32rem .45rem}.floor-plan-occupancy-warning-empty{background:rgba(47,111,99,.08);color:var(--plotline-accent-dark,#22534a)}.floor-plan-occupancy-warning--warning{background:rgba(251,236,211,.78);color:#7b4b12}.floor-plan-occupancy-warning--info{background:rgba(233,243,248,.86);color:#245b78}.floor-plan-occupancy-warning-empty[hidden],.floor-plan-occupancy-warning[hidden]{display:none}.floor-plan-editor-toolbar .muted{display:block;font-size:.76rem;line-height:1.1}.floor-plan-reference-control,.floor-plan-toolbar-check{align-items:center;color:var(--muted-color,#6b756f);display:inline-flex;font-size:.82rem;font-weight:700;gap:6px}.floor-plan-reference-control{align-items:flex-start;flex-direction:column;gap:2px}.floor-plan-reference-control .form-select{min-width:180px}.floor-plan-save-status{border:1px solid rgba(47,111,99,.2);border-radius:999px;color:var(--plotline-accent-dark,#22534a);background:rgba(47,111,99,.08);font-size:.78rem;font-weight:800;padding:4px 9px}.floor-plan-save-status[data-save-state=dirty]{border-color:rgba(184,118,43,.32);color:#7b4b12;background:rgba(251,236,211,.72)}.floor-plan-save-status[data-save-state=saving]{border-color:rgba(51,117,155,.3);color:#245b78;background:rgba(233,243,248,.82)}.floor-plan-save-status[data-save-state=failed]{border-color:rgba(163,61,61,.32);color:#8a3434;background:rgba(255,232,232,.9)}.floor-plan-floor{display:none}.floor-plan-floor.active{display:block}.floor-plan-stage{min-width:0}.floor-plan-grid-wrap{max-width:100%;max-height:calc(100vh - 250px);min-height:min(58vh,520px);overflow:auto;padding-bottom:8px}.floor-plan-grid{--cell-size:34px;background:linear-gradient(to right,rgba(93,111,101,.18) 1px,transparent 1px),linear-gradient(to bottom,rgba(93,111,101,.18) 1px,transparent 1px),var(--panel-bg,#fff);background-size:var(--cell-size) var(--cell-size),var(--cell-size) var(--cell-size),auto;border:1px solid var(--border-color,#d8ded9);border-radius:8px;height:calc(var(--grid-height) * var(--cell-size));min-width:calc(var(--grid-width) * var(--cell-size));position:relative;width:calc(var(--grid-width) * var(--cell-size))}.floor-plan-coordinate-label{color:rgba(33,61,55,.42);font-size:.62rem;font-weight:800;line-height:1;pointer-events:none;position:absolute;text-shadow:0 1px 0 rgba(255,255,255,.7);user-select:none;z-index:5}.floor-plan-coordinate-label--column{left:calc(var(--coord-x) * var(--cell-size) + 4px);top:3px}.floor-plan-coordinate-label--row{left:4px;top:calc(var(--coord-y) * var(--cell-size) + 4px)}.floor-plan-reference-overlay{inset:0;pointer-events:none;position:absolute;z-index:1}.floor-plan-reference-block{align-items:center;background:rgba(47,111,99,.08);border:1px dashed rgba(47,111,99,.34);border-radius:2px;color:rgba(27,55,49,.46);display:flex;font-size:.62rem;font-weight:800;height:calc(var(--h) * var(--cell-size));justify-content:center;left:calc(var(--x) * var(--cell-size));line-height:1.05;overflow:hidden;padding:3px;position:absolute;text-align:center;top:calc(var(--y) * var(--cell-size));width:calc(var(--w) * var(--cell-size))}.floor-plan-reference-warning{background:rgba(251,236,211,.92);border:1px solid rgba(184,118,43,.34);border-radius:999px;color:#7b4b12;font-size:.76rem;font-weight:800;left:10px;padding:4px 10px;pointer-events:none;position:absolute;top:10px;z-index:6}.floor-plan-background-image{height:auto;left:0;max-width:none;opacity:var(--bg-opacity, .35);pointer-events:none;position:absolute;top:0;transform:translate(var(--bg-offset-x,0),var(--bg-offset-y,0)) scale(var(--bg-scale,1));transform-origin:top left;user-select:none;width:100%;z-index:0}.floor-plan-background-image.is-locked{pointer-events:none}.floor-plan-block{align-items:center;--floor-plan-wall-color:rgba(44, 84, 75, .55);border:2px solid transparent;border-radius:2px;color:#12332c;cursor:grab;display:flex;font-size:.72rem;font-weight:700;height:calc(var(--h) * var(--cell-size));justify-content:center;left:calc(var(--x) * var(--cell-size));line-height:1.08;overflow:hidden;padding:4px;position:absolute;text-align:center;top:calc(var(--y) * var(--cell-size));touch-action:none;width:calc(var(--w) * var(--cell-size));z-index:2}.floor-plan-wall-segment{background:var(--floor-plan-wall-color);pointer-events:none;position:absolute;z-index:2}.floor-plan-wall-segment--north,.floor-plan-wall-segment--south{height:2px;left:var(--wall-start);width:var(--wall-length)}.floor-plan-wall-segment--north{top:0}.floor-plan-wall-segment--south{bottom:0}.floor-plan-wall-segment--east,.floor-plan-wall-segment--west{height:var(--wall-length);top:var(--wall-start);width:2px}.floor-plan-wall-segment--east{right:0}.floor-plan-wall-segment--west{left:0}.floor-plan-block-label{display:-webkit-box;max-width:100%;overflow:hidden;overflow-wrap:normal;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:1}.floor-plan-block[style*="--h:2"] .floor-plan-block-label,.floor-plan-block[style*="--h:3"] .floor-plan-block-label,.floor-plan-block[style*="--h:4"] .floor-plan-block-label,.floor-plan-block[style*="--h:5"] .floor-plan-block-label,.floor-plan-block[style*="--h:6"] .floor-plan-block-label,.floor-plan-block[style*="--h:7"] .floor-plan-block-label,.floor-plan-block[style*="--h:8"] .floor-plan-block-label{-webkit-line-clamp:2}.floor-plan-block.selected{box-shadow:0 0 0 3px rgba(47,111,99,.28);outline:2px solid var(--bs-primary,#2f6f63);z-index:3}.floor-plan-block.overlap{border-color:#b45544;box-shadow:inset 0 0 0 2px rgba(180,85,68,.18)}.floor-plan-block.is-hidden-location{background-image:repeating-linear-gradient(135deg,rgba(18,51,44,.08) 0,rgba(18,51,44,.08) 3px,transparent 3px,transparent 9px);box-shadow:inset 0 0 0 1px rgba(43,54,49,.18)}.floor-plan-block.is-hidden-location.selected{box-shadow:inset 0 0 0 1px rgba(43,54,49,.18),0 0 0 3px rgba(47,111,99,.28)}.floor-plan-block.is-hidden-location.overlap{box-shadow:inset 0 0 0 2px rgba(180,85,68,.18),inset 0 0 0 1px rgba(43,54,49,.18)}.floor-plan-secret-route{border-top:2px dashed rgba(69,55,42,.58);height:0;left:calc(var(--route-x,0) * var(--cell-size));opacity:.72;pointer-events:none;position:absolute;top:calc(var(--route-y,0) * var(--cell-size));transform:rotate(var(--route-angle,0));transform-origin:0 50%;width:calc(var(--route-length,0) * var(--cell-size));z-index:3}.floor-plan-secret-route::after{background:rgba(255,250,242,.9);border:1px solid rgba(69,55,42,.5);border-radius:50%;content:"";height:7px;left:50%;position:absolute;top:-5px;transform:translateX(-50%);width:7px}.floor-plan-transition-marker{align-items:center;--transition-marker-ink:#12332c;--transition-marker-window:#246f9f;--transition-marker-blocked:#9b342b;background:rgba(255,250,242,.98);border:1px solid rgba(47,111,99,.55);border-radius:50%;box-shadow:0 2px 6px rgba(31,37,34,.16);color:var(--transition-marker-ink);display:flex;font-size:.72rem;font-weight:900;height:21px;justify-content:center;left:calc(var(--transition-x,0) * var(--cell-size));line-height:1;pointer-events:none;position:absolute;top:calc(var(--transition-y,0) * var(--cell-size));transform:translate(-50%,-50%);width:21px;z-index:4}.floor-plan-transition-marker svg{display:block;height:21px;overflow:visible;width:21px}.floor-plan-transition-marker.is-vertical svg{transform:rotate(90deg)}.floor-plan-transition-marker .marker-arc,.floor-plan-transition-marker .marker-blocked,.floor-plan-transition-marker .marker-line,.floor-plan-transition-marker .marker-window{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7}.floor-plan-transition-marker .marker-arc{stroke-width:1.35}.floor-plan-transition-marker .marker-window{stroke:var(--transition-marker-window)}.floor-plan-transition-marker .marker-dotted{opacity:.72;stroke-dasharray:1.4 2}.floor-plan-transition-marker .marker-blocked{stroke:var(--transition-marker-blocked);stroke-width:1.8}.floor-plan-transition-marker .marker-strong{stroke-width:2}.floor-plan-transition-marker .marker-track{opacity:.72}.floor-plan-transition-marker--window{background:rgba(239,249,255,.98);border-color:rgba(36,111,159,.48)}.floor-plan-transition-marker--sliding-door{background:rgba(248,252,249,.98);border-color:rgba(47,111,99,.58)}.floor-plan-transition-marker--french-door{background:rgba(255,252,246,.98);border-color:rgba(119,86,45,.5)}.floor-plan-transition-marker--secret-door{background:rgba(255,250,242,.88);border-style:dashed}.floor-plan-transition-marker--ladder{background:rgba(246,248,245,.98);border-color:rgba(77,91,67,.55)}.floor-plan-transition-marker--blocked-door{background:rgba(255,244,241,.98);border-color:rgba(155,52,43,.52)}.floor-plan-transition-marker--exterior-door{border-width:2px}.floor-plan-transition-marker.is-shared-edge{background:rgba(255,255,255,.98);border-color:rgba(47,111,99,.72)}.floor-plan-transition-marker--window.is-shared-edge{background:rgba(239,249,255,.98);border-color:rgba(36,111,159,.58)}.floor-plan-transition-marker--blocked-door.is-shared-edge{background:rgba(255,244,241,.98);border-color:rgba(155,52,43,.6)}.visual-card-heading{align-items:flex-start;display:flex;gap:12px}.visual-card-heading>div{min-width:0}.visual-avatar{align-items:center;aspect-ratio:1;background:linear-gradient(135deg,rgba(47,111,99,.16),rgba(212,154,98,.16));border:1px solid rgba(47,111,99,.22);border-radius:999px;color:var(--plotline-accent-dark,#22534a);display:inline-flex;flex:0 0 auto;font-weight:900;justify-content:center;letter-spacing:.02em;overflow:hidden;text-transform:uppercase}.visual-avatar img{height:100%;object-fit:cover;width:100%}.visual-avatar--sm{font-size:.72rem;width:32px}.visual-avatar--md{font-size:.9rem;width:48px}.visual-avatar--lg{font-size:1.3rem;width:96px}.visual-avatar--xl{font-size:1.6rem;width:128px}.visual-image-editor{align-items:center;background:rgba(47,111,99,.05);border:1px solid rgba(47,111,99,.14);border-radius:8px;display:flex;gap:18px;padding:14px}.visual-image-editor__controls{flex:1 1 auto;min-width:220px}.floor-plan-block--room{background:#d9eee7}.floor-plan-block--corridor{background:#e7e2f4}.floor-plan-block--openspace{background:#e5efd4}.floor-plan-block--exterior{background:#d9ecf3}.floor-plan-block--other{background:#ece9e1}.floor-plan-resize-handle{border-bottom:10px solid rgba(18,51,44,.45);border-left:10px solid transparent;bottom:4px;height:0;position:absolute;right:4px;width:0}.floor-plan-side-panel{align-self:start;position:sticky;top:82px}.floor-plan-side-panel h2{font-size:1.05rem;margin-bottom:8px}.floor-plan-side-panel h3{font-size:.92rem;margin:0 0 8px}.floor-plan-toolbox{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:grid;grid-template-rows:auto minmax(0,1fr);max-height:calc(100vh - 250px);min-height:min(58vh,520px);overflow:hidden}.floor-plan-toolbox-tabs{border-bottom:1px solid var(--border-color,#d8ded9);display:flex;flex-wrap:wrap;gap:0}.floor-plan-toolbox-tab{background:0 0;border:0;border-right:1px solid var(--border-color,#d8ded9);border-bottom:1px solid var(--border-color,#d8ded9);color:inherit;flex:1 1 118px;font-size:.82rem;font-weight:800;min-width:112px;padding:10px 8px}.floor-plan-toolbox-tab.active:last-child,.floor-plan-toolbox-tab:last-child{border-right:0}.floor-plan-toolbox-tab.active{background:rgba(47,111,99,.1);border-bottom-color:var(--plotline-accent,#2f6f63);color:var(--plotline-accent-dark,#22534a)}.floor-plan-toolbox-body{min-height:0;overflow:auto}.floor-plan-tool-card{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:8px;padding:14px}.floor-plan-toolbox .floor-plan-tool-card{background:0 0;border:0;border-radius:0}.floor-plan-tool-card[hidden]{display:none}.floor-plan-tool-card p{margin-bottom:10px}.floor-plan-tool-subsection{border-top:1px solid var(--border-color,#d8ded9);margin-top:12px;padding-top:12px}.floor-plan-tool-subsection:first-of-type{border-top:0;margin-top:0;padding-top:0}.floor-plan-background-file{border:1px solid rgba(47,111,99,.16);border-radius:6px;font-size:.86rem;padding:8px 10px}.floor-plan-background-range{align-items:center;display:grid;gap:10px;grid-template-columns:minmax(0,1fr) 44px}.floor-plan-background-range span{color:var(--muted-text,#5d6f65);font-size:.8rem;font-variant-numeric:tabular-nums;text-align:right}.floor-plan-transition-list{display:grid;gap:8px}.floor-plan-transition-item{border:1px solid rgba(47,111,99,.14);border-radius:6px;display:grid;gap:8px;padding:8px}.floor-plan-transition-item span,.floor-plan-transition-item strong{display:block;font-size:.84rem}.floor-plan-transition-item span{color:var(--muted-text,#5d6f65)}.floor-plan-editor--occupancy .floor-plan-block{cursor:default;touch-action:auto}.floor-plan-editor--occupancy .floor-plan-resize-handle{display:none}.floor-plan-editor--occupancy .floor-plan-side-panel{display:none}.floor-plan-occupancy-tray{position:absolute;z-index:14;height:calc(var(--h) * var(--cell-size));left:calc(var(--x) * var(--cell-size));top:calc(var(--y) * var(--cell-size));width:calc(var(--w) * var(--cell-size));display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.18rem;padding:0 0 .25rem;pointer-events:auto}.floor-plan-occupancy-tray[hidden]{display:none}.floor-plan-occupancy-token{display:grid;place-items:center;width:1.8rem;height:1.8rem;overflow:hidden;border:2px solid #fff;border-radius:999px;color:#fff;background:var(--plotline-accent);box-shadow:0 4px 12px rgba(30,37,43,.18);font-size:.68rem;font-weight:800}.floor-plan-occupancy-token img{width:100%;height:100%;object-fit:cover}.floor-plan-occupancy-token--asset{width:1.45rem;height:1.45rem;background:#805c15;font-size:.58rem}.floor-plan-occupancy-more{border-radius:999px;padding:.15rem .36rem;color:var(--plotline-ink);background:rgba(255,255,255,.92);box-shadow:0 4px 12px rgba(30,37,43,.12);font-size:.72rem;font-weight:800}.floor-plan-occupancy-message{align-self:start;background:rgba(255,255,255,.94);border:1px solid rgba(47,111,99,.18);border-radius:8px;box-shadow:0 6px 16px rgba(30,37,43,.08);color:var(--muted-color,#6b756f);font-size:.82rem;font-weight:700;grid-column:1/-1;grid-row:1;justify-self:center;margin-top:.55rem;max-width:min(92%,520px);padding:.45rem .7rem;position:relative;z-index:16}.floor-plan-occupancy-message[hidden]{display:none}.floor-plan-transition-accordion .accordion-item{background:0 0;border-color:var(--border-color,#d8ded9)}.floor-plan-transition-accordion .accordion-button{background:rgba(47,111,99,.06);color:inherit;font-size:.88rem;font-weight:800;padding:10px 12px}.floor-plan-transition-accordion .accordion-button:not(.collapsed){background:rgba(47,111,99,.12);color:var(--plotline-accent-dark,#22534a);box-shadow:inset 0 -1px 0 var(--border-color,#d8ded9)}.floor-plan-transition-accordion .accordion-body{padding:12px}.floor-plan-checkbox{align-items:center;display:inline-flex;gap:6px;font-weight:700;margin-bottom:4px}.floor-plan-choice-row{display:grid;gap:4px;margin-bottom:10px}.floor-plan-choice-row label{align-items:center;display:flex;gap:6px;font-size:.88rem}.floor-plan-overlap-warning{background:rgba(180,85,68,.12);border:1px solid rgba(180,85,68,.35);border-radius:6px;color:#8f3f31;margin-bottom:10px;padding:8px 10px}.dark .floor-plan-grid,[data-bs-theme=dark] .floor-plan-grid{background:linear-gradient(to right,rgba(214,224,218,.12) 1px,transparent 1px),linear-gradient(to bottom,rgba(214,224,218,.12) 1px,transparent 1px),#15201d;background-size:var(--cell-size) var(--cell-size),var(--cell-size) var(--cell-size),auto}.dark .floor-plan-editor-toolbar,.dark .floor-plan-tool-card,.dark .floor-plan-toolbox,[data-bs-theme=dark] .floor-plan-editor-toolbar,[data-bs-theme=dark] .floor-plan-tool-card,[data-bs-theme=dark] .floor-plan-toolbox{background:var(--panel-bg,#1f2522)}.dark .floor-plan-toolbox .floor-plan-tool-card,[data-bs-theme=dark] .floor-plan-toolbox .floor-plan-tool-card{background:0 0}.dark .floor-plan-toolbox-tab.active,[data-bs-theme=dark] .floor-plan-toolbox-tab.active{background:rgba(212,154,98,.16);color:var(--plotline-accent-dark,#f0c99d)}.dark .floor-plan-block,[data-bs-theme=dark] .floor-plan-block{--floor-plan-wall-color:rgba(212, 154, 98, .6);color:#f1f6f3}.dark .floor-plan-block.is-hidden-location,[data-bs-theme=dark] .floor-plan-block.is-hidden-location{background-image:repeating-linear-gradient(135deg,rgba(244,234,220,.09) 0,rgba(244,234,220,.09) 3px,transparent 3px,transparent 9px);box-shadow:inset 0 0 0 1px rgba(244,234,220,.2)}.dark .floor-plan-secret-route,[data-bs-theme=dark] .floor-plan-secret-route{border-top-color:rgba(244,204,160,.58);opacity:.76}.dark .floor-plan-secret-route::after,[data-bs-theme=dark] .floor-plan-secret-route::after{background:rgba(42,35,30,.95);border-color:rgba(244,204,160,.55)}.dark .floor-plan-coordinate-label,[data-bs-theme=dark] .floor-plan-coordinate-label{color:rgba(244,234,220,.46);text-shadow:0 1px 0 rgba(0,0,0,.55)}.dark .floor-plan-reference-block,[data-bs-theme=dark] .floor-plan-reference-block{background:rgba(131,199,242,.08);border-color:rgba(131,199,242,.32);color:rgba(244,234,220,.46)}.dark .floor-plan-reference-warning,[data-bs-theme=dark] .floor-plan-reference-warning{background:rgba(84,57,25,.92);border-color:rgba(244,177,100,.32);color:#ffd9a5}.dark .floor-plan-transition-marker,[data-bs-theme=dark] .floor-plan-transition-marker{--transition-marker-ink:#f4eadc;--transition-marker-window:#83c7f2;--transition-marker-blocked:#f08a78;background:rgba(42,35,30,.98);border-color:rgba(212,154,98,.6)}.dark .floor-plan-transition-marker.is-shared-edge,[data-bs-theme=dark] .floor-plan-transition-marker.is-shared-edge{background:rgba(48,39,32,.98);border-color:rgba(212,154,98,.78)}.dark .floor-plan-transition-marker--window,.dark .floor-plan-transition-marker--window.is-shared-edge,[data-bs-theme=dark] .floor-plan-transition-marker--window,[data-bs-theme=dark] .floor-plan-transition-marker--window.is-shared-edge{background:rgba(24,45,58,.98);border-color:rgba(131,199,242,.66)}.dark .floor-plan-transition-marker--french-door,.dark .floor-plan-transition-marker--ladder,.dark .floor-plan-transition-marker--sliding-door,[data-bs-theme=dark] .floor-plan-transition-marker--french-door,[data-bs-theme=dark] .floor-plan-transition-marker--ladder,[data-bs-theme=dark] .floor-plan-transition-marker--sliding-door{background:rgba(39,43,37,.98);border-color:rgba(212,154,98,.58)}.dark .floor-plan-transition-marker--blocked-door,.dark .floor-plan-transition-marker--blocked-door.is-shared-edge,[data-bs-theme=dark] .floor-plan-transition-marker--blocked-door,[data-bs-theme=dark] .floor-plan-transition-marker--blocked-door.is-shared-edge{background:rgba(58,33,28,.98);border-color:rgba(240,138,120,.66)}.dark .visual-avatar,[data-bs-theme=dark] .visual-avatar{background:linear-gradient(135deg,rgba(131,199,242,.14),rgba(212,154,98,.18));border-color:rgba(244,234,220,.18);color:#f4eadc}.dark .visual-image-editor,[data-bs-theme=dark] .visual-image-editor{background:rgba(244,234,220,.04);border-color:rgba(244,234,220,.12)}.dark .floor-plan-transition-item,[data-bs-theme=dark] .floor-plan-transition-item{border-color:rgba(212,154,98,.22)}.dark .floor-plan-occupancy-token,[data-bs-theme=dark] .floor-plan-occupancy-token{border-color:#1f2630;box-shadow:0 4px 12px rgba(0,0,0,.28)}.dark .floor-plan-occupancy-more,[data-bs-theme=dark] .floor-plan-occupancy-more{color:#f1e7dd;background:rgba(31,38,48,.92)}.dark .floor-plan-occupancy-message,[data-bs-theme=dark] .floor-plan-occupancy-message{background:rgba(31,38,48,.94);border-color:rgba(212,154,98,.24);color:#d9c8b8}.dark .floor-plan-occupancy-warning-panel,[data-bs-theme=dark] .floor-plan-occupancy-warning-panel{background:rgba(244,234,220,.04);border-color:rgba(212,154,98,.2);color:#f1e7dd}.dark .floor-plan-occupancy-warning-empty,[data-bs-theme=dark] .floor-plan-occupancy-warning-empty{background:rgba(47,111,99,.18);color:#b8e2d7}.dark .floor-plan-occupancy-warning--warning,[data-bs-theme=dark] .floor-plan-occupancy-warning--warning{background:rgba(84,57,25,.92);color:#ffd9a5}.dark .floor-plan-occupancy-warning--info,[data-bs-theme=dark] .floor-plan-occupancy-warning--info{background:rgba(24,45,58,.92);color:#b9dcf3}.dark .floor-plan-transition-accordion .accordion-item,[data-bs-theme=dark] .floor-plan-transition-accordion .accordion-item{border-color:rgba(212,154,98,.22)}.dark .floor-plan-transition-accordion .accordion-button,[data-bs-theme=dark] .floor-plan-transition-accordion .accordion-button{background:rgba(212,154,98,.08);color:#f4eadc}.dark .floor-plan-transition-accordion .accordion-button:not(.collapsed),[data-bs-theme=dark] .floor-plan-transition-accordion .accordion-button:not(.collapsed){background:rgba(212,154,98,.16);color:var(--plotline-accent-dark,#f0c99d);box-shadow:inset 0 -1px 0 rgba(212,154,98,.22)}.dark .floor-plan-block--room,[data-bs-theme=dark] .floor-plan-block--room{background:#29584f}.dark .floor-plan-block--corridor,[data-bs-theme=dark] .floor-plan-block--corridor{background:#514876}.dark .floor-plan-block--openspace,[data-bs-theme=dark] .floor-plan-block--openspace{background:#4f6133}.dark .floor-plan-block--exterior,[data-bs-theme=dark] .floor-plan-block--exterior{background:#315d6f}.dark .floor-plan-block--other,[data-bs-theme=dark] .floor-plan-block--other{background:#5b564c}@media (max-width:1100px){.floor-plan-editor-toolbar,.floor-plan-layout{grid-template-columns:1fr}.floor-plan-grid-wrap{max-height:62vh}.floor-plan-side-panel{position:static}.floor-plan-toolbox{max-height:none}} \ No newline at end of file diff --git a/PlotLine/wwwroot/js/site.js b/PlotLine/wwwroot/js/site.js index 4a21c65..dbe106e 100644 --- a/PlotLine/wwwroot/js/site.js +++ b/PlotLine/wwwroot/js/site.js @@ -186,137 +186,6 @@ }); })(); -(() => { - const inspectorRoots = document.querySelectorAll(".scene-inspector-root"); - if (!inspectorRoots.length) { - return; - } - - const currentReturnUrl = () => `${window.location.pathname}${window.location.search}${window.location.hash}`; - - inspectorRoots.forEach((root) => { - root.addEventListener("submit", (event) => { - const form = event.target; - if (!(form instanceof HTMLFormElement)) { - return; - } - - let returnUrlInput = form.querySelector("input[name='ReturnUrl']"); - if (!returnUrlInput) { - returnUrlInput = document.createElement("input"); - returnUrlInput.type = "hidden"; - returnUrlInput.name = "ReturnUrl"; - form.appendChild(returnUrlInput); - } - - returnUrlInput.value = currentReturnUrl(); - }, true); - }); -})(); - -(() => { - const roots = document.querySelectorAll(".scene-inspector-root"); - if (!roots.length) { - return; - } - - const setStatus = (form, text, state) => { - const status = form.querySelector("[data-scene-occupancy-status]"); - if (!status) { - return; - } - - status.textContent = text; - status.dataset.saveState = state || ""; - }; - - const replaceOccupancyForm = (form, html) => { - const wrapper = document.createElement("div"); - wrapper.innerHTML = html; - const nextForm = wrapper.querySelector("[data-scene-occupancy-form]"); - if (nextForm) { - form.replaceWith(nextForm); - const sceneForm = nextForm.closest(".scene-inspector-root")?.querySelector(".scene-inspector-form"); - const floorPlanInput = sceneForm?.querySelector("[name='FloorPlanID']"); - const initialFloorInput = sceneForm?.querySelector("[name='InitialFloorPlanFloorID']"); - const nextFloorPlan = nextForm.querySelector("[name='FloorPlanID']"); - const nextInitialFloor = nextForm.querySelector("[name='InitialFloorPlanFloorID']"); - if (floorPlanInput && nextFloorPlan) { - floorPlanInput.value = nextFloorPlan.value; - } - if (initialFloorInput && nextInitialFloor) { - initialFloorInput.value = nextInitialFloor.value; - } - } - }; - - roots.forEach((root) => { - root.addEventListener("change", async (event) => { - const planSelect = event.target.closest?.("[data-occupancy-plan-select]"); - if (!planSelect) { - return; - } - - const form = planSelect.closest("[data-scene-occupancy-form]"); - const sceneId = form?.querySelector("[name='SceneID']")?.value; - const editorUrl = form?.dataset.editorUrl; - if (!form || !sceneId || !editorUrl) { - return; - } - - setStatus(form, "Loading...", "saving"); - const url = new URL(editorUrl, window.location.origin); - url.searchParams.set("sceneId", sceneId); - if (planSelect.value) { - url.searchParams.set("floorPlanId", planSelect.value); - } - - try { - const response = await fetch(url, { headers: { "X-Requested-With": "XMLHttpRequest" } }); - if (!response.ok) { - throw new Error("The occupancy editor could not be refreshed."); - } - - replaceOccupancyForm(form, await response.text()); - } catch (error) { - setStatus(form, error.message || "Load failed", "failed"); - } - }); - - root.addEventListener("submit", async (event) => { - const form = event.target.closest?.("[data-scene-occupancy-form]"); - if (!form) { - return; - } - - event.preventDefault(); - setStatus(form, "Saving...", "saving"); - - try { - const response = await fetch(form.action, { - method: "POST", - body: new FormData(form), - headers: { "X-Requested-With": "XMLHttpRequest" } - }); - - if (!response.ok) { - let message = "Save failed"; - const contentType = response.headers.get("content-type") || ""; - if (contentType.includes("application/json")) { - const payload = await response.json(); - message = payload.message || message; - } - throw new Error(message); - } - - replaceOccupancyForm(form, await response.text()); - } catch (error) { - setStatus(form, error.message || "Save failed", "failed"); - } - }); - }); -})(); - (() => { const modalElement = document.getElementById("plotlineConfirmModal"); const modal = modalElement && window.bootstrap ? new bootstrap.Modal(modalElement) : null; @@ -737,184 +606,6 @@ } })(); -(() => { - const roots = document.querySelectorAll(".scene-inspector-root"); - if (!roots.length) { - return; - } - - const slugify = (value) => value - .toLowerCase() - .replace(/&/g, "and") - .replace(/[^a-z0-9]+/g, "-") - .replace(/^-|-$/g, ""); - - roots.forEach((root) => { - const sceneId = root.dataset.sceneId - || root.querySelector(".scene-inspector-form [name='SceneID']")?.value - || "new"; - const storagePrefix = `plotline.inspector.${sceneId}.`; - const defaultOpen = new Set(["overview", "timing", "characters"]); - const sections = [...root.querySelectorAll(".inspector-section")]; - const form = root.querySelector(".scene-inspector-form"); - const timeEditor = root.querySelector("[data-scene-time-editor]"); - - if (form && timeEditor && timeEditor.dataset.enhanced !== "true") { - timeEditor.dataset.enhanced = "true"; - - const modeSelect = form.querySelector("[name='TimeModeID']"); - const exactDateTimeModeId = timeEditor.dataset.exactDatetimeModeId || ""; - const exactDateModeId = timeEditor.dataset.exactDateModeId || ""; - const timeFields = [...timeEditor.querySelectorAll("[data-time-part-field]")]; - const dateInputs = { - StartDateTime: timeEditor.querySelector("[data-date-part-for='StartDateTime']"), - EndDateTime: timeEditor.querySelector("[data-date-part-for='EndDateTime']") - }; - const timeInputs = { - StartDateTime: timeEditor.querySelector("[data-time-part-for='StartDateTime']"), - EndDateTime: timeEditor.querySelector("[data-time-part-for='EndDateTime']") - }; - const hiddenInputs = { - StartDateTime: form.querySelector("input[type='hidden'][name='StartDateTime']"), - EndDateTime: form.querySelector("input[type='hidden'][name='EndDateTime']") - }; - - const isExactDateTime = () => modeSelect?.value === exactDateTimeModeId; - const isExactDate = () => modeSelect?.value === exactDateModeId; - - const setTimeVisibility = () => { - const showTime = isExactDateTime(); - timeFields.forEach((field) => { - field.hidden = !showTime; - field.classList.toggle("d-none", !showTime); - }); - }; - - const writeCombinedDateTime = (fieldName) => { - const hidden = hiddenInputs[fieldName]; - const date = dateInputs[fieldName]?.value || ""; - const time = timeInputs[fieldName]?.value || ""; - if (!hidden) { - return; - } - - if (!date) { - hidden.value = ""; - return; - } - - if (isExactDateTime()) { - hidden.value = `${date}T${time || "00:00"}`; - return; - } - - if (isExactDate()) { - hidden.value = date; - return; - } - - const existingTime = hidden.value.match(/^\\d{4}-\\d{2}-\\d{2}T(\\d{2}:\\d{2})/)?.[1]; - hidden.value = existingTime ? `${date}T${existingTime}` : date; - }; - - const syncPostedDateTimes = () => { - writeCombinedDateTime("StartDateTime"); - writeCombinedDateTime("EndDateTime"); - }; - - modeSelect?.addEventListener("change", setTimeVisibility); - form.addEventListener("submit", syncPostedDateTimes); - setTimeVisibility(); - } - - sections.forEach((section) => { - if (section.dataset.enhanced === "true") { - return; - } - - const heading = section.querySelector("h3, h2"); - const title = section.dataset.sectionTitle || heading?.textContent?.trim() || "Overview"; - const slug = slugify(title); - const sectionId = section.dataset.sectionId || `inspector-${slug}`; - const storageKey = sectionId.replace(/^inspector-/, ""); - section.id = sectionId; - section.dataset.searchText = `${title} ${section.textContent}`.toLowerCase(); - section.dataset.enhanced = "true"; - - const body = document.createElement("div"); - body.className = "inspector-accordion-body"; - while (section.firstChild) { - body.appendChild(section.firstChild); - } - - const button = document.createElement("button"); - button.type = "button"; - button.className = "inspector-accordion-toggle"; - button.setAttribute("aria-expanded", "false"); - - section.append(button, body); - const count = body.querySelectorAll(".asset-event-item, .thread-event-item, .warning-mini-card, .dependency-card, .metric-slider").length; - button.innerHTML = `${title}${count || ""}`; - - const stored = localStorage.getItem(`${storagePrefix}${storageKey}`); - const isOpen = stored === null ? defaultOpen.has(storageKey) : stored === "open"; - section.classList.toggle("is-open", isOpen); - button.setAttribute("aria-expanded", String(isOpen)); - - button.addEventListener("click", () => { - const nextOpen = !section.classList.contains("is-open"); - section.classList.toggle("is-open", nextOpen); - button.setAttribute("aria-expanded", String(nextOpen)); - localStorage.setItem(`${storagePrefix}${storageKey}`, nextOpen ? "open" : "closed"); - }); - }); - - root.querySelectorAll(".inspector-nav-links a").forEach((link) => { - link.addEventListener("click", (event) => { - const target = root.querySelector(link.getAttribute("href")); - if (!target) { - return; - } - - event.preventDefault(); - target.classList.add("is-open"); - target.querySelector(".inspector-accordion-toggle")?.setAttribute("aria-expanded", "true"); - target.scrollIntoView({ behavior: "smooth", block: "start" }); - }); - }); - - const search = root.querySelector("[data-inspector-search]"); - search?.addEventListener("input", () => { - const query = search.value.trim().toLowerCase(); - sections.forEach((section) => { - const matches = !query || section.dataset.searchText.includes(query); - section.classList.toggle("is-filtered-out", !matches); - if (matches && query) { - section.classList.add("is-open"); - section.querySelector(".inspector-accordion-toggle")?.setAttribute("aria-expanded", "true"); - } - }); - }); - - if ("IntersectionObserver" in window) { - const navLinks = [...root.querySelectorAll(".inspector-nav-links a")]; - const observer = new IntersectionObserver((entries) => { - entries.forEach((entry) => { - if (!entry.isIntersecting) { - return; - } - - navLinks.forEach((link) => { - link.classList.toggle("active", link.getAttribute("href") === `#${entry.target.id}`); - }); - }); - }, { root: root.closest(".scene-inspector-panel") || null, rootMargin: "-10% 0px -70% 0px" }); - - sections.forEach((section) => observer.observe(section)); - } - }); -})(); - (() => { const chartRoots = document.querySelectorAll("[data-metric-shape-chart]"); if (!chartRoots.length) { diff --git a/PlotLine/wwwroot/js/site.min.js b/PlotLine/wwwroot/js/site.min.js index bc7dd13..c4bfacb 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]"),n=n=>{const a="dark"===n?"dark":"light";document.documentElement.dataset.theme=a,document.documentElement.dataset.bsTheme=a,(t=>{try{localStorage.setItem(e,t)}catch{}})(a),t.forEach(e=>{const t=e.dataset.themeChoice===a;e.classList.toggle("active",t),e.setAttribute("aria-pressed",String(t))})};t.forEach(e=>{e.addEventListener("click",()=>n(e.dataset.themeChoice))}),n((()=>{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.querySelector("[data-word-companion-follow-toggle]");if(!e||!window.signalR)return;const t="plotdirector.followWordCompanion",n=["/pricing","/about","/contact","/privacy","/terms","/admin","/billing","/account","/login","/register","/feature-requests/admin","/featurerequests/admin","/manageaccount"];let a=null,r=null;const o=()=>{try{return"true"===localStorage.getItem(t)}catch{return!1}},s=t=>{e.setAttribute("aria-pressed",String(t)),e.classList.toggle("active",t),e.title=t?"PlotDirector will follow the current Word Companion scene.":"Enable this to let PlotDirector follow the current Word Companion scene."},i=(e,t)=>{if("string"!=typeof e||!e.startsWith(t))return"";try{const t=new URL(e,window.location.origin);return t.origin===window.location.origin?`${t.pathname}${t.search}${t.hash}`:""}catch{return""}},l=e=>{if(!o()||!(()=>{const e=window.location.pathname.toLowerCase();return"/"!==e&&""!==e&&!n.some(t=>e===t||e.startsWith(`${t}/`))})()||!e)return;`${window.location.pathname}${window.location.search}${window.location.hash}`!==e&&window.location.assign(e)};s(o()),e.addEventListener("click",()=>{const e=!o();(e=>{try{localStorage.setItem(t,e?"true":"false")}catch{}})(e),s(e)});const c=(new signalR.HubConnectionBuilder).withUrl("/hubs/word-companion-follow").withAutomaticReconnect().build();c.on("wordCompanionSceneChanged",e=>{const t=Number.parseInt(e?.sceneId||e?.SceneId||"",10);if(!Number.isInteger(t)||t<=0||t===a)return;a=t;const n=i(e?.sceneUrl||e?.SceneUrl||"","/Scenes/Edit/");l(n)}),c.on("wordCompanionCharactersCreated",e=>{const t=Number.parseInt(e?.projectId||e?.ProjectId||"",10);if(!Number.isInteger(t)||t<=0||t===r)return;r=t;const n=i(e?.charactersUrl||e?.CharactersUrl||"","/Characters");l(n)}),c.start().catch(e=>{console.debug("Word Companion follow connection unavailable.",e)})})(),(()=>{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 n=t.querySelector("input[name='ReturnUrl']");n||(n=document.createElement("input"),n.type="hidden",n.name="ReturnUrl",t.appendChild(n)),n.value=`${window.location.pathname}${window.location.search}${window.location.hash}`},!0)})})(),(()=>{const e=document.querySelectorAll(".scene-inspector-root");if(!e.length)return;const t=(e,t,n)=>{const a=e.querySelector("[data-scene-occupancy-status]");a&&(a.textContent=t,a.dataset.saveState=n||"")},n=(e,t)=>{const n=document.createElement("div");n.innerHTML=t;const a=n.querySelector("[data-scene-occupancy-form]");if(a){e.replaceWith(a);const t=a.closest(".scene-inspector-root")?.querySelector(".scene-inspector-form"),n=t?.querySelector("[name='FloorPlanID']"),r=t?.querySelector("[name='InitialFloorPlanFloorID']"),o=a.querySelector("[name='FloorPlanID']"),s=a.querySelector("[name='InitialFloorPlanFloorID']");n&&o&&(n.value=o.value),r&&s&&(r.value=s.value)}};e.forEach(e=>{e.addEventListener("change",async e=>{const a=e.target.closest?.("[data-occupancy-plan-select]");if(!a)return;const r=a.closest("[data-scene-occupancy-form]"),o=r?.querySelector("[name='SceneID']")?.value,s=r?.dataset.editorUrl;if(!r||!o||!s)return;t(r,"Loading...","saving");const i=new URL(s,window.location.origin);i.searchParams.set("sceneId",o),a.value&&i.searchParams.set("floorPlanId",a.value);try{const e=await fetch(i,{headers:{"X-Requested-With":"XMLHttpRequest"}});if(!e.ok)throw new Error("The occupancy editor could not be refreshed.");n(r,await e.text())}catch(e){t(r,e.message||"Load failed","failed")}}),e.addEventListener("submit",async e=>{const a=e.target.closest?.("[data-scene-occupancy-form]");if(a){e.preventDefault(),t(a,"Saving...","saving");try{const e=await fetch(a.action,{method:"POST",body:new FormData(a),headers:{"X-Requested-With":"XMLHttpRequest"}});if(!e.ok){let t="Save failed";if((e.headers.get("content-type")||"").includes("application/json")){t=(await e.json()).message||t}throw new Error(t)}n(a,await e.text())}catch(e){t(a,e.message||"Save failed","failed")}}})})})(),(()=>{const e=document.getElementById("plotlineConfirmModal"),t=e&&window.bootstrap?new bootstrap.Modal(e):null,n=e?.querySelector("#plotlineConfirmModalTitle"),a=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 u=d.dataset.confirmMessage,p=c.submitter instanceof HTMLElement?c.submitter:d.querySelector("button[type='submit']"),m=p?.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),v=!g&&!f&&(/archive/i.test(m)||/\/archive\b/i.test(h)),y=!f&&/(delete|remove)/i.test(m);if(!(u||v||g||y||f))return;const w=u||(v?"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&&n&&a&&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()}})(w);i=d,l=p,n.textContent=d.dataset.confirmTitle||S.title,a.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 L="true"===d.dataset.requireDeleteText||f;o?.classList.toggle("d-none",!L),L&&r&&(r.disabled=!0,s?.focus()),t.show(),L&&window.setTimeout(()=>s?.focus(),200)})})(),(()=>{const e=document.querySelectorAll("[data-help-icon]");if(!e.length||!window.bootstrap)return;const t=new Map;let n=null;const a=e=>e.querySelector("[data-help-tooltip]")||e,r=e=>bootstrap.Tooltip.getInstance(a(e))?.hide(),o=(e=null)=>{n&&n!==e&&bootstrap.Popover.getInstance(n)?.hide()},s=()=>e.forEach(e=>r(e));e.forEach(e=>{const i=a(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 u=bootstrap.Popover.getOrCreateInstance(e,{title:c,trigger:"click",placement:"auto",container:"body",html:!0,customClass:"plotline-help-popover",content(){const t=document.createElement("div"),n=document.createElement("p");n.className="mb-2",n.textContent=d;const a=document.createElement("a");return a.href=e.dataset.helpUrl||"#",a.textContent="More...",a.className="plotline-help-more",a.addEventListener("click",t=>{t.preventDefault(),o(),s(),e.dispatchEvent(new CustomEvent("plotline:help-more",{bubbles:!0,detail:{key:e.dataset.helpKey||""}}))}),t.append(n,a),t}});t.set(e,u),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",()=>{n=e,r(e)}),e.addEventListener("hidden.bs.popover",()=>{n===e&&(n=null)})}),document.addEventListener("click",e=>{const t=e.target instanceof Element?e.target:null;if(!t||!n)return;if(t.closest("[data-help-icon]"))return;const a=document.querySelector(`#${n.getAttribute("aria-describedby")}`);a?.contains(t)||o()}),document.addEventListener("keydown",e=>{"Escape"===e.key&&o()}),window.PlotLineHelpPopovers={hideAll(){t.forEach(e=>e.hide()),s(),n=null}}})(),(()=>{const e=document.querySelector("[data-help-layout]"),t=document.querySelector("[data-help-drawer]"),n=document.querySelector("[data-help-content]"),a=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||!n)return;const c="plotline.helpDrawer.width",d="plotline.helpDrawer.pinned",u="plotline.helpDrawer.key",p="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 n=`${((e,t,n)=>Math.min(n,Math.max(t,e)))(Number.parseFloat(t)||25,20,50)}%`;e.style.setProperty("--help-drawer-width",n),h(c,n)},f=e=>{h(d,String(e)),i?.setAttribute("aria-pressed",String(e)),i&&(i.textContent=e?"Unpin":"Pin")},v=t=>{e.classList.toggle("help-collapsed",t),h(p,String(t)),o&&(o.textContent=t?"Expand":"Collapse")},y=async(t,a={})=>{const r=t||"";e.classList.add("help-open"),a.keepCollapsed||v(!1),h(u,r),l&&(l.textContent=r||"Help"),n.innerHTML='

Loading help...

';try{const e=await fetch(`/HelpDrawer/Article?key=${encodeURIComponent(r)}`,{headers:{"X-Requested-With":"XMLHttpRequest"}});n.innerHTML=e.ok?await e.text():'

Help for this feature has not yet been written.

';const t=n.querySelector(".help-drawer-article h2")?.textContent?.trim();l&&t&&(l.textContent=t)}catch{n.innerHTML='

Help for this feature has not yet been written.

'}};window.PlotLineHelpDrawer={isActive:()=>e.classList.contains("help-open"),open:e=>y(e)},g(localStorage.getItem(c)||"25%"),f(m(d)),v(m(p)),document.addEventListener("plotline:help-more",e=>{const t=e.detail?.key||e.target?.dataset?.helpKey||"";window.PlotLineHelpPopovers?.hideAll(),y(t)}),document.addEventListener("click",e=>{const t=e.target instanceof Element?e.target.closest("[data-help-open]"):null;t&&(e.preventDefault(),window.PlotLineHelpPopovers?.hideAll(),y(t.dataset.helpOpen||""))}),r?.addEventListener("click",()=>{e.classList.remove("help-open","help-collapsed"),f(!1)}),o?.addEventListener("click",()=>v(!e.classList.contains("help-collapsed"))),s?.addEventListener("click",()=>v(!1)),s?.addEventListener("keydown",e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),v(!1))}),i?.addEventListener("click",()=>f(!m(d))),a?.addEventListener("pointerdown",t=>{if(!e.classList.contains("help-open")||e.classList.contains("help-collapsed"))return;t.preventDefault(),document.body.classList.add("help-resizing"),a.setPointerCapture?.(t.pointerId);const n=t=>{const n=e.getBoundingClientRect(),a=(n.right-t.clientX)/n.width*100;g(a)},r=()=>{document.body.classList.remove("help-resizing"),document.removeEventListener("pointermove",n),document.removeEventListener("pointerup",r)};document.addEventListener("pointermove",n),document.addEventListener("pointerup",r)});const w=(()=>{try{return localStorage.getItem(u)||""}catch{return""}})();m(d)&&w&&y(w,{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"}.`,n=new Set(["overview","timing","characters"]),a=[...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||"",n=o.dataset.exactDateModeId||"",a=[...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===n,u=()=>{const e=c();a.forEach(t=>{t.hidden=!e,t.classList.toggle("d-none",!e)})},p=e=>{const t=l[e],n=s[e]?.value||"",a=i[e]?.value||"";if(!t)return;if(!n)return void(t.value="");if(c())return void(t.value=`${n}T${a||"00:00"}`);if(d())return void(t.value=n);const r=t.value.match(/^\\d{4}-\\d{2}-\\d{2}T(\\d{2}:\\d{2})/)?.[1];t.value=r?`${n}T${r}`:n},m=()=>{p("StartDateTime"),p("EndDateTime")};e?.addEventListener("change",u),r.addEventListener("submit",m),u()}a.forEach(e=>{if("true"===e.dataset.enhanced)return;const a=e.querySelector("h3, h2"),r=e.dataset.sectionTitle||a?.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 u=localStorage.getItem(`${t}${i}`),p=null===u?n.has(i):"open"===u;e.classList.toggle("is-open",p),c.setAttribute("aria-expanded",String(p)),c.addEventListener("click",()=>{const n=!e.classList.contains("is-open");e.classList.toggle("is-open",n),c.setAttribute("aria-expanded",String(n)),localStorage.setItem(`${t}${i}`,n?"open":"closed")})}),e.querySelectorAll(".inspector-nav-links a").forEach(t=>{t.addEventListener("click",n=>{const a=e.querySelector(t.getAttribute("href"));a&&(n.preventDefault(),a.classList.add("is-open"),a.querySelector(".inspector-accordion-toggle")?.setAttribute("aria-expanded","true"),a.scrollIntoView({behavior:"smooth",block:"start"}))})});const s=e.querySelector("[data-inspector-search]");if(s?.addEventListener("input",()=>{const e=s.value.trim().toLowerCase();a.forEach(t=>{const n=!e||t.dataset.searchText.includes(e);t.classList.toggle("is-filtered-out",!n),n&&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")],n=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"});a.forEach(e=>n.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"],n=new Set(["Overall Intensity","Tension","Emotional Weight","Action"]),a=[],r=e=>{const t=e.querySelector(".metric-chart-frame");if(!t)return;let n=Number(t.dataset.metricNaturalWidth||0);if(n&&"true"===t.dataset.metricCanvasConstrained||(t.style.width="",n=t.getBoundingClientRect().width,n&&(t.dataset.metricNaturalWidth=String(n))),!n)return;const a=Math.max(window.devicePixelRatio||1,1),r=Math.floor(3e4/a);n>r?(t.style.width=`${r}px`,t.dataset.metricCanvasConstrained="true"):(t.style.width="",t.dataset.metricCanvasConstrained="false")},o=()=>{window.requestAnimationFrame(()=>{a.forEach(({chart:e,root:t})=>{r(t),e.resize()})})};window.PlotLineMetricCharts={resizeAll:o},window.addEventListener("plotline:timeline-layout-changed",o);const s={id:"plotlineChapterGuides",afterDraw(e){const t=e.config.options.plugins.plotlineScenes||[],{ctx:n,chartArea:a,scales:r}=e;if(!t.length||!r.x)return;n.save(),n.strokeStyle="rgba(47, 111, 99, 0.16)",n.fillStyle="rgba(82, 75, 65, 0.58)",n.lineWidth=1,n.font="700 10px system-ui, -apple-system, Segoe UI, sans-serif";const o=[];t.forEach((e,n)=>{n&&e.chapterLabel===t[n-1].chapterLabel||o.push({scene:e,index:n})});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);n.beginPath(),n.moveTo(c,a.top),n.lineTo(c,a.bottom),n.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)&&n.fillText(o.chapterLabel,Math.min(c+4,a.right-70),a.bottom+22)}),n.restore()}};window.Chart&&Chart.register(s),e.forEach(e=>{const o=e.querySelector("script[type='application/json']"),s=e.querySelector("canvas"),i=e.querySelector("[data-metric-toggles]"),l=e.querySelector("[data-chart-fallback]"),c=e.querySelector("[data-timeline-metric-edit-toolbar]"),d=e.querySelector("[data-edit-metric-status]"),u=e.hasAttribute("data-timeline-metric-editor")&&c&&d;if(!o||!s)return;let p;try{p=JSON.parse(o.textContent||"{}")}catch{return void l?.classList.remove("d-none")}if(!window.Chart||!p.scenes?.length||!p.metrics?.length)return void l?.classList.remove("d-none");const m=new Set(p.defaultMetrics?.length?p.defaultMetrics:n),h=p.scenes.length,g=h>80?10:h>40?5:h>24?4:h>14?2:1,f=p.metrics.map((e,n)=>{const a=new Map(e.points.map(e=>[e.sceneId,e.value])),r=t[n%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 n=a.get(e.sceneId);return null==n?{x:t+.5,y:null,sceneId:e.sceneId}:{x:t+.5,y:n,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:!m.has(e.metricName)}});let v=null,y=!1;r(e);const w=e=>{d&&(d.textContent=e)},S=()=>f.map((e,t)=>t).filter(e=>E?.isDatasetVisible(e)),L=()=>{const e=S();return 1===e.length?e[0]:-1},b=()=>{if(!u)return;const e=L();f.forEach((t,n)=>{t.pointRadius=n===e?5:3,t.pointHoverRadius=n===e?7:5,t.borderWidth=n===e?3:2});const t=S(),n=e>=0;s.classList.toggle("metric-curve-editing",n),d.classList.toggle("d-none",0===t.length),0===t.length?w(""):w(n?"Drag points up or down to edit this metric.":"Show only one metric line to edit its curve."),E?.update()};i.innerHTML="",f.forEach((e,t)=>{const n=`metric-toggle-${Math.random().toString(36).slice(2)}-${t}`,a=document.createElement("label");a.className="metric-toggle-pill",a.style.setProperty("--metric-colour",e.borderColor),a.innerHTML=`${e.label}`,i.appendChild(a),a.querySelector("input").addEventListener("change",e=>{E.setDatasetVisibility(t,e.target.checked),b(),E.update()})});const E=new Chart(s,{type:"line",data:{datasets:f},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:h,bounds:"ticks",ticks:{maxRotation:0,autoSkip:!1,maxTicksLimit:16,callback(e){const t=Math.floor(Number(e));if(t<0||t>=h)return"";const n=p.scenes[t];return 0!==t&&t!==h-1&&t%g!==0||n?.isPlaceholder?"":n?.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),n=p.scenes[t];return n.isPlaceholder?n.sceneTitle||"No scene":`${n.chapterLabel}, Scene ${n.sceneNumber}: ${n.sceneTitle}`},label:e=>`${e.dataset.label}: ${e.formattedValue}`,afterBody(e){const t=Math.floor(e[0].parsed.x),n=p.scenes[t],a=[];return n.characterPresence?a.push(n.characterPresence):void 0!==n.characterAppears&&a.push(n.characterAppears?"Character appears":"Character does not appear"),n.bookTitle&&a.push(n.bookTitle),a}}}}}});u&&(b(),s.addEventListener("pointerdown",e=>{v=(e=>{if(!u)return null;const t=L();if(t<0)return null;const n=E.getElementsAtEventForMode(e,"nearest",{intersect:!0},!0).find(e=>e.datasetIndex===t);if(!n)return null;const a=E.data.datasets[n.datasetIndex],r=a?.data?.[n.index];return r?.sceneId&&null!=r.y?{datasetIndex:n.datasetIndex,pointIndex:n.index,previousValue:r.y}:null})(e),v&&(e.preventDefault(),s.setPointerCapture?.(e.pointerId),y=!0)}),s.addEventListener("pointermove",e=>{if(!v)return;const t=E.data.datasets[v.datasetIndex],n=t?.data?.[v.pointIndex];t&&n&&(n.y=((e,t)=>{const n=E.scales.y.getValueForPixel(e.offsetY),a=Math.round(n);return Math.max(t.minValue,Math.min(t.maxValue,a))})(e,t),E.update("none"))}),s.addEventListener("pointerup",async t=>{if(!v)return;const n=v;v=null,s.releasePointerCapture?.(t.pointerId),await(async t=>{const n=E.data.datasets[t.datasetIndex],a=n?.data?.[t.pointIndex];if(!n||!a?.sceneId)return;const r=c?.querySelector("input[name='__RequestVerificationToken']")?.value||"";w("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(a.sceneId),metricId:Number(n.metricTypeId),value:Number(a.y)})}),o=await t.json().catch(()=>({}));if(!t.ok||!o.success)throw new Error(o.message||"Save failed");a.y=o.value,w("Saved"),E.update()}catch{a.y=t.previousValue,w("Save failed"),E.update()}})(n),window.setTimeout(()=>{y=!1},0)}),s.addEventListener("pointercancel",e=>{if(!v)return;const t=E.data.datasets[v.datasetIndex],n=t?.data?.[v.pointIndex];n&&(n.y=v.previousValue),v=null,s.releasePointerCapture?.(e.pointerId),y=!1,E.update()})),s.addEventListener("click",e=>{if(y)return void e.preventDefault();const t=E.getElementsAtEventForMode(e,"nearest",{intersect:!0},!0);if(!t.length)return;const n=E.data.datasets[t[0].datasetIndex]?.data?.[t[0].index],a=n?Math.floor(n.x):t[0].index,r=p.scenes[a];r?.timelineUrl&&(window.PlotLineTimelineScroll?.save(),window.location.href=r.timelineUrl)}),a.push({chart:E,root:e});const x=window.ResizeObserver?new ResizeObserver(()=>{r(e),E.resize()}):null;x&&(x.observe(e),x.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 n="plotline.timeline.visibility",a={"scene-cards":!0,"plot-lines":!0,assets:!0,characters:!0,locations:!0,warnings:!0,metrics:!0},r=t=>{Object.entries(t).forEach(([t,n])=>{e.classList.toggle(`hide-${t}`,!n),document.querySelectorAll(`[data-timeline-section='${t}']`).forEach(e=>{e.classList.toggle("timeline-section-hidden",!n)})}),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{...a,...JSON.parse(localStorage.getItem(n)||"{}")}}catch{return{...a}}})();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(n,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,n=document.querySelector("[data-timeline-density]"),a=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",u="plotline.timeline.pending-scroll",p="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","scene-overview"],v=e.querySelector("[data-inspector-drawer]"),y=e.querySelector("[data-inspector-resizer]"),w=e.querySelector("[data-inspector-close]"),S=null!==localStorage.getItem(l),L=(e=>{try{return new Set(JSON.parse(localStorage.getItem(e)||"[]"))}catch{return new Set}})(l),b=()=>[...e.querySelectorAll(h)],E=t=>{if(!v)return;const{minimum:n,maximum:a,defaultWidth:r}=(()=>{const t=e.getBoundingClientRect().width||window.innerWidth,n=Math.min(420,Math.max(320,t-360)),a=Math.max(n,Math.min(.65*t,t-420));return{minimum:n,maximum:a,defaultWidth:Math.max(n,Math.min(a,.4*t))}})(),o=Math.max(n,Math.min(a,Number(t)||r));e.style.setProperty("--timeline-inspector-width",`${Math.round(o)}px`)};v&&(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,n)=>e&&n.indexOf(e)===t);let u=!1,m=!1,h=!1,g=null;const f=new WeakMap,v=e=>f.set(e,e.scrollLeft),y=(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)},w=e=>{const t=l(e),n=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{l(i())&&!(()=>{try{return"true"===localStorage.getItem(p)}catch{return!1}})()&&!u?(window.clearTimeout(g),r.hidden=!1,r.classList.remove("is-dismissing")):r.classList.contains("is-dismissing")||y(!1),d().forEach(w)},L=()=>{u=!0,y(!0);try{localStorage.setItem(p,"true")}catch{}};d().forEach(e=>{v(e),e.addEventListener("wheel",t=>{if(!t.defaultPrevented&&t.shiftKey&&Math.abs(t.deltaY)>Math.abs(t.deltaX)&&l(e)){const n=e.scrollLeft;t.preventDefault(),e.scrollLeft+=t.deltaY,window.requestAnimationFrame(()=>{w(e),!m&&Math.abs(e.scrollLeft-n)>4&&L(),v(e)})}},{passive:!1}),e.addEventListener("scroll",()=>(e=>{if(w(e),!h||m)return void v(e);const t=f.get(e)??e.scrollLeft;Math.abs(e.scrollLeft-t)>4&&l(e)?L():v(e)})(e),{passive:!0})}),o?.addEventListener("click",L),s?.addEventListener("click",()=>{const e=i();if(!l(e))return void S();const t=e.scrollLeft,n=c(e)-t;let a=Math.min(220,n),r=1;a<24&&t>0&&(a=Math.min(220,t),r=-1),a<4||(m=!0,e.scrollTo({left:t+a*r,behavior:"smooth"}),window.setTimeout(()=>{e.scrollTo({left:t,behavior:"smooth"})},420),window.setTimeout(()=>{m=!1,d().forEach(e=>{v(e),w(e)}),S()},950))}),window.setTimeout(()=>{h=!0,d().forEach(v)},800),window.requestAnimationFrame(S),window.addEventListener("resize",S),window.addEventListener("plotline:timeline-layout-changed",S),n?.addEventListener("change",()=>window.requestAnimationFrame(S)),a?.addEventListener("change",()=>window.requestAnimationFrame(S))})(),y?.addEventListener("pointerdown",t=>{t.preventDefault(),document.body.classList.add("timeline-inspector-resizing"),y.setPointerCapture(t.pointerId);const n=t=>{const n=e.getBoundingClientRect().right-t.clientX;E(n)},a=()=>{document.body.classList.remove("timeline-inspector-resizing");const e=Math.round(v?.getBoundingClientRect().width||0);e>0&&localStorage.setItem(m,String(e)),window.dispatchEvent(new Event("plotline:timeline-layout-changed")),y.removeEventListener("pointermove",n),y.removeEventListener("pointerup",a),y.removeEventListener("pointercancel",a)};y.addEventListener("pointermove",n),y.addEventListener("pointerup",a),y.addEventListener("pointercancel",a)}),w?.addEventListener("click",e=>{e.preventDefault();const t=new URL(window.location.href),n=t.searchParams.get("FocusType")||t.searchParams.get("focusType");t.searchParams.delete("SelectedSceneID"),t.searchParams.delete("selectedSceneId"),t.searchParams.delete("selectedsceneid"),n&&"scene"!==n.toLowerCase()||(t.searchParams.delete("FocusType"),t.searchParams.delete("focusType"),t.searchParams.delete("FocusID"),t.searchParams.delete("focusId")),x(),window.location.href=t.toString()});const x=()=>{try{sessionStorage.setItem(u,JSON.stringify({path:window.location.pathname,top:window.scrollY,left:window.scrollX,workspaceLeft:t.scrollLeft,workspaceTop:t.scrollTop,containers:b().map((e,t)=>({index:t,left:e.scrollLeft,top:e.scrollTop}))}))}catch{}};window.PlotLineTimelineScroll={save:x};const I=(t,n,a)=>{a.forEach(n=>e.classList.remove(`${t}-${n}`)),e.classList.add(`${t}-${n}`)},q=e=>{const t=g.includes(e)?e:"comfortable";I("density",t,g),n&&(n.value=t),localStorage.setItem(c,t),window.requestAnimationFrame(k)},C=e=>{const t=f.includes(e)?e:"chapter";I("zoom",t,f),a&&(a.value=t),localStorage.setItem(d,t),window.requestAnimationFrame(k)},T=(t,n=!0)=>{const a=(t=>e.querySelector(`[data-scene-id='${CSS.escape(String(t))}']`))(t);a&&(a.classList.add("keyboard-focus"),a.scrollIntoView({behavior:"smooth",block:"center",inline:"center"}),n&&a.focus({preventScroll:!0}),window.setTimeout(()=>a.classList.remove("keyboard-focus"),1800))},k=()=>{e.querySelectorAll("[data-plot-line-svg-board]").forEach(e=>{const t=e.querySelector("[data-plot-line-svg]");if(!t)return;let n=e.querySelector("[data-plot-line-health-svg]");n||(n=document.createElementNS("http://www.w3.org/2000/svg","svg"),n.setAttribute("class","plot-lane-svg-overlay plot-lane-svg-health-overlay"),n.setAttribute("data-plot-line-health-svg",""),n.setAttribute("aria-hidden","true"),t.after(n)),t.replaceChildren(),n.replaceChildren();const a=e.getBoundingClientRect(),r=Math.max(e.scrollWidth,a.width),o=Math.max(e.scrollHeight,a.height);[t,n].forEach(e=>{e.setAttribute("viewBox",`0 0 ${r} ${o}`),e.setAttribute("width",String(r)),e.setAttribute("height",String(o))});const s=(e,t={})=>{const n=document.createElementNS("http://www.w3.org/2000/svg",e);return Object.entries(t).forEach(([e,t])=>n.setAttribute(e,String(t))),n},i=[...new Set([...e.querySelectorAll("[data-plot-line-slot]")].map(e=>{const t=e.getBoundingClientRect();return Math.round(t.left-a.left+t.width/2)}))].sort((e,t)=>e-t),l=Math.max(i.length-1,0),c=new Map;e.querySelectorAll("[data-plot-line-row]").forEach(e=>{e.dataset.plotLineId&&c.set(e.dataset.plotLineId,e)});const d=[...c.values()].map(e=>({row:e,plotLineId:e.dataset.plotLineId,colour:e.dataset.plotColour||"#2f6f63",points:[...e.querySelectorAll("[data-plot-event-node]")].map(e=>((e,t)=>{const n=t.closest("[data-plot-line-slot]");if(!n)return null;const r=n.getBoundingClientRect(),o=t.getBoundingClientRect();return{x:o.left-a.left+o.width/2,y:o.top-a.top+o.height/2,sceneX:r.left-a.left+r.width/2,radius:Math.max(o.width,o.height)/2,sceneIndex:0,type:(t.dataset.plotEventType||"Progress").toLowerCase(),targetPlotLineId:t.dataset.targetPlotLineId||"",targetPlotLineIds:(t.dataset.targetPlotLineIds||"").split(",").map(e=>e.trim()).filter(Boolean)}})(0,e)).filter(Boolean).map(e=>({...e,sceneIndex:Math.max(0,i.findIndex(t=>t===Math.round(e.sceneX)))})).sort((e,t)=>e.x-t.x),incomingStartXs:[]})),u=new Map(d.map(e=>[e.plotLineId,e])),p=(e,n,r,o)=>{if(!n)return void(window.console?.warn&&window.console.warn(`Plot line ${o} connector skipped because target plot line data is missing.`));e.x;const i=(e=>{const t=e.getBoundingClientRect();return t.top-a.top+t.height/2})(n),l=Math.max(28,Math.min(46,.28*Math.abs(i-e.y))),c=Math.max(8,e.radius||12),d=e.x+c,u=d+l,p=d+l/2;t.append(s("path",{class:`plot-line-svg-connector plot-line-svg-connector-${o}`,d:`M ${d} ${e.y} C ${p} ${e.y}, ${p} ${i}, ${u} ${i}`,stroke:r}))};d.forEach(e=>{e.points.forEach(e=>{"branch"===e.type&&e.targetPlotLineId&&u.get(e.targetPlotLineId)?.incomingStartXs.push(e.x),"split"===e.type&&e.targetPlotLineIds.forEach(t=>{u.get(t)?.incomingStartXs.push(e.x)})})}),d.forEach(e=>{e.health=(e=>{const t=e.some(e=>"resolve"===e.type),n=e.some(e=>"abandon"===e.type),a=e.find(e=>"resolve"===e.type),r=e.find(e=>"abandon"===e.type),o=e.some(e=>"merge"===e.type&&e.targetPlotLineId),s=e.some(e=>"split"===e.type&&e.targetPlotLineIds.length>=2),i=Boolean(a)&&e.some(e=>"branch"===e.type&&e.targetPlotLineId&&e.sceneIndex>=a.sceneIndex),c=e.reduce((e,t)=>Math.max(e,t.sceneIndex),0),d=!t&&!n&&l-c>=10,u=t&&!o&&!s&&!i;let p="active";return n?p="abandoned":t?p=u?"questionable":"resolved":d&&(p="neglected"),{state:p,isNeglected:d,isDangling:!t&&!n&&!o&&!s&&l>=c,isQuestionable:u,isAbandoned:n,resolvePoint:a,abandonPoint:r}})(e.points),e.state=e.health.state}),d.forEach(e=>{const{colour:n,points:a,incomingStartXs:r,state:o}=e;if(a.length>0){const i=a.find(e=>"start"===e.type),l=r.length?Math.min(...r):null,c=a.find(e=>"split"===e.type||"merge"===e.type),d=a[0],u=a[a.length-1],p=((null===l||i&&i.xe.x-t.x),h=c?m.indexOf(c):-1,g=h>=0?m.slice(0,h+1):m;null!==l&&l{const r=g[a+1];if(!r||r.x<=e.x)return;const i=Math.abs(r.sceneIndex-e.sceneIndex)>=f;t.append(s("path",{class:`plot-line-svg-path plot-line-svg-segment ${i?"plot-line-svg-segment-dormant":""} plotline-state-${o}`,d:`M ${e.x} ${e.y} L ${r.x} ${r.y}`,stroke:n}))})}}),d.forEach(({points:e,colour:t})=>{e.forEach(e=>{"branch"!==e.type&&"merge"!==e.type||p(e,c.get(e.targetPlotLineId),t,e.type),"split"===e.type&&e.targetPlotLineIds.length>=2?e.targetPlotLineIds.forEach(n=>{p(e,c.get(n),t,e.type)}):"split"===e.type&&e.targetPlotLineIds.length>0&&window.console?.warn&&window.console.warn("Plot line split connector skipped because fewer than two targets are available.")})}),d.forEach(e=>{const t=e.lineEndPoint||e.points[e.points.length-1],a=[];e.health?.isNeglected&&t&&a.push({point:t,kind:"neglected",label:"Dormant Thread",reason:"No activity for 10+ scenes.",action:"Add a Progress, Reveal or Resolve event."}),e.health?.isDangling&&t&&a.push({point:t,kind:"dangling",label:"Unresolved Thread",reason:"Thread contains no Resolve or Abandon event by the end of the current timeline.",action:"Review ending scenes and add Resolve or Abandon where appropriate."}),e.health?.isQuestionable&&e.health.resolvePoint&&a.push({point:e.health.resolvePoint,kind:"questionable",label:"Missing Closure",reason:"Resolved without merge, split, or branch.",action:"Verify this thread has sufficient payoff."}),e.health?.isAbandoned&&e.health.abandonPoint&&a.push({point:e.health.abandonPoint,kind:"abandoned",label:"Abandoned Thread",reason:"This plot line was abandoned.",action:"Check this is intentional."});const r=new Map;a.forEach(e=>{const t=`${Math.round(e.point.x)}:${Math.round(e.point.y)}`;r.has(t)||r.set(t,{point:e.point,warnings:[]}),r.get(t).warnings.push(e)}),r.forEach(({point:e,warnings:t})=>((e,t)=>{const a=Math.max(18,(e.radius||12)+8),r=t[0]?.kind||"warning",o=s("g",{class:`plotline-health-marker plotline-health-marker-${r}`}),i=s("title");i.textContent=(e=>e.map(e=>[`Warning: ${e.label}`,`Reason: ${e.reason}`,`Suggested Action: ${e.action}`].join("\n")).join("\n\n"))(t),o.append(i);const l=e.x+a,c=e.y-13;if("questionable"===r){o.append(s("circle",{cx:l,cy:c,r:9}));const e=s("text",{x:l,y:c+4,"text-anchor":"middle"});e.textContent=t.length>1?String(t.length):"?",o.append(e)}else if(o.append(s("circle",{cx:l,cy:c,r:10})),o.append(s("path",{d:`M ${l} ${c-6} L ${l+6} ${c+5} L ${l-6} ${c+5} Z`})),o.append(s("line",{x1:l,y1:c-2,x2:l,y2:c+2.5})),o.append(s("circle",{cx:l,cy:c+5.3,r:1.2})),t.length>1){const e=s("text",{x:l+11,y:c-6,"text-anchor":"middle",class:"plotline-health-count"});e.textContent=String(t.length),o.append(e)}n.append(o)})(e,t))})})},A=(e,t)=>{document.querySelectorAll(`[data-collapse-body='${CSS.escape(e)}']`).forEach(e=>{e.classList.toggle("timeline-section-collapsed",t)}),document.querySelectorAll(`[data-collapse-toggle='${CSS.escape(e)}']`).forEach(e=>{e.classList.toggle("is-collapsed",t),e.setAttribute("aria-expanded",String(!t))})};document.querySelectorAll("[data-collapse-toggle]").forEach(e=>{const t=e.dataset.collapseToggle;S||"collapsed"!==e.dataset.collapseDefault||L.add(t);const n=L.has(t);A(t,n),e.addEventListener("click",()=>{const e=!L.has(t);e?L.add(t):L.delete(t),A(t,e),localStorage.setItem(l,JSON.stringify([...L])),k(),window.dispatchEvent(new Event("plotline:timeline-layout-changed"))})}),n?.addEventListener("change",()=>q(n.value)),a?.addEventListener("change",()=>C(a.value)),q(localStorage.getItem(c)||"comfortable"),C(localStorage.getItem(d)||"chapter");const $=(()=>{try{return null!==sessionStorage.getItem(u)}catch{return!1}})();window.requestAnimationFrame(()=>{k(),((e="auto")=>{const t=o?.querySelector("[data-active-chapter='true']");if(!o||!t)return;const n=o.getBoundingClientRect(),a=t.getBoundingClientRect(),r=a.left+a.width/2,s=n.left+n.width/2;(a.leftn.right)&&o.scrollBy({left:r-s,behavior:e})})("auto"),$&&(()=>{let e=null;try{e=JSON.parse(sessionStorage.getItem(u)||"null"),sessionStorage.removeItem(u)}catch{try{sessionStorage.removeItem(u)}catch{}return}e&&e.path===window.location.pathname&&window.requestAnimationFrame(()=>{t.scrollLeft=Number(e.workspaceLeft)||0,t.scrollTop=Number(e.workspaceTop)||0;const n=b();(e.containers||[]).forEach(e=>{const t=n[e.index];t&&(t.scrollLeft=Number(e.left)||0,t.scrollTop=Number(e.top)||0)}),window.scrollTo(Number(e.left)||0,Number(e.top)||0)})})()}),window.addEventListener("resize",k),window.addEventListener("plotline:timeline-layout-changed",k);e.addEventListener("click",t=>{if(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;const n=t.target instanceof Element?t.target:null,a=n?.closest("a[href]");if(!a||!e.contains(a))return;[...new URL(a.href,window.location.href).searchParams.keys()].some(e=>"selectedsceneid"===e.toLowerCase())&&x()},{capture:!0});const D=()=>{const e=r?.value.trim().toLowerCase()||"";let t=null;return i.forEach(n=>{const a=!e||(n.dataset.timelineSearchText||"").toLowerCase().includes(e);n.classList.toggle("search-hit",Boolean(e&&a)),n.classList.toggle("search-dim",Boolean(e&&!a)),!t&&e&&a&&(t=n)}),t};r?.addEventListener("input",D),r?.addEventListener("keydown",e=>{if("Enter"!==e.key)return;const t=D();t&&(e.preventDefault(),T(t.dataset.sceneId))}),s.forEach(e=>{e.addEventListener("change",()=>{e.value&&T(e.value)})}),document.querySelectorAll("[data-jump-scene]").forEach(e=>{e.addEventListener("click",()=>{e.dataset.jumpScene&&T(e.dataset.jumpScene)})}),document.addEventListener("keydown",e=>{const n=document.activeElement?.tagName?.toLowerCase(),o=["input","select","textarea"].includes(n)||document.activeElement?.isContentEditable;if((e.ctrlKey||e.metaKey)&&"f"===e.key.toLowerCase()&&r)return e.preventDefault(),r.focus(),void r.select();if("Escape"===e.key){const e=new URL(window.location.href),t=e.searchParams.has("FocusType")||e.searchParams.has("FocusID");return e.searchParams.delete("FocusType"),e.searchParams.delete("FocusID"),void(t?window.location.href=e.toString():r?.value&&(r.value="",D()))}if(!o){if("ArrowLeft"===e.key||"ArrowRight"===e.key)return e.preventDefault(),void t.scrollBy({left:"ArrowLeft"===e.key?-260:260,behavior:"smooth"});if("+"===e.key||"="===e.key||"-"===e.key){const t=f.indexOf(a?.value||"chapter"),n="-"===e.key?-1:1,r=Math.min(f.length-1,Math.max(0,t+n));C(f[r])}}})})(),(()=>{const e=document.querySelector("[data-timeline-root]"),t=document.querySelector("[data-drag-drop-panel]");if(!t)return;const n=new Map([...document.querySelectorAll("[data-drag-form]")].map(e=>[e.dataset.dragForm,e])),a=t.querySelector("[data-drag-panel-title]"),r=t.querySelector("[data-drag-panel-kicker]"),o=t.querySelector("[data-drag-panel-summary]"),s=document.querySelector("[data-scene-move-modal]"),i=s&&window.bootstrap?.Modal?window.bootstrap.Modal.getOrCreateInstance(s):null,l=s?.querySelector("[data-scene-move-title]"),c=s?.querySelector("[data-scene-move-summary]"),d=s?.querySelector("[data-scene-move-submit]"),u="plotline.timeline.scroll";let p=null,m=0;const h=(e,t,n)=>{const a=e?.querySelector(`[name='${CSS.escape(t)}']`);a&&(a.value=n??"")},g=e=>e?.selectedOptions?.[0]?.textContent?.trim()||"",f=e=>`“${e||"this scene"}”`,v=(e,t,n,a,r)=>t&&n&&t===n?`Move ${f(e.label)} to this new position within ${n}?`:t&&n?`Move ${f(e.label)} from ${t} to ${n}?`:`Move ${f(e.label)} ${a.toLowerCase()} ${r}?`,y=(e,s,u,p)=>{if("scene"===e)return t.classList.add("d-none"),t.querySelectorAll("[data-drag-form]").forEach(e=>e.classList.add("d-none")),n.get("scene")?.classList.remove("d-none"),l&&(l.textContent=s),c&&(c.textContent=u),d&&d.classList.toggle("d-none",s.toLowerCase().startsWith("cannot")||s.toLowerCase().startsWith("scene already")),void(i?i.show():t.classList.remove("d-none"));n.forEach((t,n)=>t.classList.toggle("d-none",n!==e)),t.classList.remove("d-none"),a.textContent=s,r.textContent=p,o.textContent=u,t.scrollIntoView({behavior:"smooth",block:"center"})},w=()=>{t.classList.add("d-none"),n.forEach(e=>e.classList.add("d-none"))},S=()=>{document.querySelectorAll(".drop-target-active, .drop-before, .drop-after, .chapter-drop-active, .drop-chapter-end").forEach(e=>e.classList.remove("drop-target-active","drop-before","drop-after","chapter-drop-active","drop-chapter-end"))};try{const t=JSON.parse(sessionStorage.getItem(u)||"null");t&&(sessionStorage.removeItem(u),requestAnimationFrame(()=>{const n=e?.querySelector(".timeline-shell");n&&(n.scrollLeft=t.left||0),window.scrollTo({top:t.top||0})}))}catch{sessionStorage.removeItem(u)}const L=e=>{try{const t=JSON.parse(e.dataTransfer.getData("application/json")||"{}");return t.type?t:p||{}}catch{return p||{}}};document.querySelectorAll("[data-drag-type][draggable='true']").forEach(e=>{e.addEventListener("dragstart",t=>((e,t)=>{const n={type:t.dataset.dragType,id:t.dataset.dragId,label:t.dataset.dragLabel||t.textContent.trim()};e.dataTransfer.effectAllowed="copyMove",e.dataTransfer.setData("application/json",JSON.stringify(n)),e.dataTransfer.setData("text/plain",`${n.type}:${n.id}`),p=n,document.body.classList.add("drag-active",`dragging-${n.type}`),t.classList.add("is-dragging")})(t,e)),e.addEventListener("dragend",()=>{e.classList.remove("is-dragging"),document.body.classList.remove("drag-active","dragging-scene","dragging-character","dragging-asset","dragging-location"),p=null,S()})}),t.querySelectorAll("[data-drag-cancel]").forEach(e=>e.addEventListener("click",w)),n.get("scene")?.addEventListener("submit",()=>{const t=e?.querySelector(".timeline-shell");try{sessionStorage.setItem(u,JSON.stringify({left:t?.scrollLeft||0,top:window.scrollY||0}))}catch{}}),e?.querySelectorAll(".timeline-scene-card[data-scene-id]").forEach(t=>{t.addEventListener("click",e=>{Date.now(){const n=L(e);["scene","character","asset"].includes(n.type)&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="scene"===n.type?"move":"copy",t.classList.add("drop-target-active"),t.classList.toggle("drop-before","scene"===n.type&&e.offsetX=t.clientWidth/2))}),t.addEventListener("dragleave",()=>t.classList.remove("drop-target-active","drop-before","drop-after")),t.addEventListener("drop",a=>{const r=L(a);if(!["scene","character","asset"].includes(r.type))return;a.preventDefault(),a.stopPropagation(),m=Date.now()+800,t.classList.remove("drop-target-active","drop-before","drop-after");const o=t.dataset.sceneId;if("scene"===r.type){if(r.id===o)return void y("scene","Cannot move scene","Drop a scene before or after a different scene.","Scene move");const s=n.get("scene"),i=a.offsetX{const a=t.closest("[data-chapter-drop-target]"),r=t.dataset.chapterId||a?.dataset.chapterId,o=t.dataset.chapterLabel||a?.dataset.chapterLabel||"this chapter";t.addEventListener("dragover",e=>{"scene"===L(e).type&&r&&(e.target.closest(".timeline-scene-card[data-scene-id]")||(e.preventDefault(),e.dataTransfer.dropEffect="move",t.classList.add("drop-target-active","drop-chapter-end"),a?.classList.add("chapter-drop-active")))}),t.addEventListener("dragleave",e=>{t.contains(e.relatedTarget)||(t.classList.remove("drop-target-active","drop-chapter-end"),a?.classList.remove("chapter-drop-active"))}),t.addEventListener("drop",a=>{const s=L(a);if("scene"!==s.type||!r)return;if(a.target.closest(".timeline-scene-card[data-scene-id]"))return;a.preventDefault(),a.stopPropagation(),m=Date.now()+800,S();const i=e.querySelector(`.timeline-scene-card[data-scene-id='${CSS.escape(s.id)}']`);if(i?.dataset.chapterId===r&&t.lastElementChild?.dataset?.sceneId===s.id)return void y("scene","Scene already here",`${s.label} is already at the end of ${o}.`,"Scene move");const l=n.get("scene");h(l,"SceneID",s.id),h(l,"AnchorSceneID",""),h(l,"TargetChapterID",r),h(l,"Position","End"),y("scene","Move Scene?",v(s,i?.dataset.chapterLabel||"",o,"After",o),"Scene move")})});const b=n.get("asset-dependency"),E=()=>{const e=b?.dataset.sourceLabel||"Source asset",n=b?.dataset.targetLabel||"Target asset",a=g(b?.querySelector("[name='AssetDependencyTypeID']"))||"Requires",r=g(b?.querySelector("[name='SourceRequiredStateID']"))||"the required state",o=g(b?.querySelector("[name='TargetBlockedStateID']"))||"the blocked state",s=t.querySelector("[data-asset-dependency-preview]");s&&(s.textContent=`${e} ${a.toLowerCase()} ${n}. ${e} should be ${r} before ${n} can be ${o}.`)};b?.querySelectorAll("select").forEach(e=>e.addEventListener("change",E)),document.querySelectorAll("[data-asset-drop-target], .drag-chip.asset").forEach(e=>{e.addEventListener("dragover",t=>{"asset"===L(t).type&&(t.preventDefault(),t.dataTransfer.dropEffect="copy",e.classList.add("drop-target-active"))}),e.addEventListener("dragleave",()=>e.classList.remove("drop-target-active")),e.addEventListener("drop",t=>{const n=L(t),a=e.dataset.assetId||e.dataset.dragId,r=e.dataset.assetLabel||e.dataset.dragLabel||e.textContent.trim();"asset"===n.type&&a&&(t.preventDefault(),e.classList.remove("drop-target-active"),n.id!==a?(h(b,"SourceAssetID",n.id),h(b,"TargetAssetID",a),b.dataset.sourceLabel=n.label,b.dataset.targetLabel=r,E(),y("asset-dependency","Create asset dependency",`${n.label} -> ${r}`,"Asset dependency")):y("asset-dependency","Cannot create dependency","Drop one asset onto a different asset.","Asset dependency"))})}),document.querySelectorAll("[data-drag-type='location']").forEach(e=>{e.addEventListener("dragover",t=>{"location"===L(t).type&&(t.preventDefault(),t.dataTransfer.dropEffect="copy",e.classList.add("drop-target-active"))}),e.addEventListener("dragleave",()=>e.classList.remove("drop-target-active")),e.addEventListener("drop",t=>{const a=L(t),r=e.dataset.dragId,o=e.dataset.dragLabel||e.textContent.trim();if("location"!==a.type)return;if(t.preventDefault(),e.classList.remove("drop-target-active"),a.id===r)return void y("location-relationship","Cannot create relationship","Drop one location onto a different location.","Location relationship");const s=n.get("location-relationship");h(s,"FromLocationID",a.id),h(s,"ToLocationID",r),y("location-relationship","Create location relationship",`${a.label} -> ${o}`,"Location drop")})})})(); \ No newline at end of file +(()=>{const e="plotline.theme",t=document.querySelectorAll("[data-theme-choice]"),n=n=>{const a="dark"===n?"dark":"light";document.documentElement.dataset.theme=a,document.documentElement.dataset.bsTheme=a,(t=>{try{localStorage.setItem(e,t)}catch{}})(a),t.forEach(e=>{const t=e.dataset.themeChoice===a;e.classList.toggle("active",t),e.setAttribute("aria-pressed",String(t))})};t.forEach(e=>{e.addEventListener("click",()=>n(e.dataset.themeChoice))}),n((()=>{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.querySelector("[data-word-companion-follow-toggle]");if(!e||!window.signalR)return;const t="plotdirector.followWordCompanion",n=["/pricing","/about","/contact","/privacy","/terms","/admin","/billing","/account","/login","/register","/feature-requests/admin","/featurerequests/admin","/manageaccount"];let a=null,r=null;const o=()=>{try{return"true"===localStorage.getItem(t)}catch{return!1}},s=t=>{e.setAttribute("aria-pressed",String(t)),e.classList.toggle("active",t),e.title=t?"PlotDirector will follow the current Word Companion scene.":"Enable this to let PlotDirector follow the current Word Companion scene."},i=(e,t)=>{if("string"!=typeof e||!e.startsWith(t))return"";try{const t=new URL(e,window.location.origin);return t.origin===window.location.origin?`${t.pathname}${t.search}${t.hash}`:""}catch{return""}},l=e=>{if(!o()||!(()=>{const e=window.location.pathname.toLowerCase();return"/"!==e&&""!==e&&!n.some(t=>e===t||e.startsWith(`${t}/`))})()||!e)return;`${window.location.pathname}${window.location.search}${window.location.hash}`!==e&&window.location.assign(e)};s(o()),e.addEventListener("click",()=>{const e=!o();(e=>{try{localStorage.setItem(t,e?"true":"false")}catch{}})(e),s(e)});const c=(new signalR.HubConnectionBuilder).withUrl("/hubs/word-companion-follow").withAutomaticReconnect().build();c.on("wordCompanionSceneChanged",e=>{const t=Number.parseInt(e?.sceneId||e?.SceneId||"",10);if(!Number.isInteger(t)||t<=0||t===a)return;a=t;const n=i(e?.sceneUrl||e?.SceneUrl||"","/Scenes/Edit/");l(n)}),c.on("wordCompanionCharactersCreated",e=>{const t=Number.parseInt(e?.projectId||e?.ProjectId||"",10);if(!Number.isInteger(t)||t<=0||t===r)return;r=t;const n=i(e?.charactersUrl||e?.CharactersUrl||"","/Characters");l(n)}),c.start().catch(e=>{console.debug("Word Companion follow connection unavailable.",e)})})(),(()=>{const e=document.getElementById("plotlineConfirmModal"),t=e&&window.bootstrap?new bootstrap.Modal(e):null,n=e?.querySelector("#plotlineConfirmModalTitle"),a=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']"),h=u?.textContent||"",m=d.getAttribute("action")||"",g=/restore/i.test(h)||/\/restore\b/i.test(m),f=/delete forever/i.test(h)||/\/deleteforever\b/i.test(m),v=!g&&!f&&(/archive/i.test(h)||/\/archive\b/i.test(m)),y=!f&&/(delete|remove)/i.test(h);if(!(p||v||g||y||f))return;const w=p||(v?"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&&n&&a&&r))return;c.preventDefault();const b=(e=>{const t=e.split(/\n\s*\n/);return{title:t.shift()?.trim()||"Confirm action",body:t.join("\n\n").trim()}})(w);i=d,l=u,n.textContent=d.dataset.confirmTitle||b.title,a.textContent=d.dataset.confirmBody||b.body,r.textContent=d.dataset.confirmButtonText||h.trim()||"Confirm",r.className=`btn ${d.dataset.confirmButtonClass||(g?"btn-primary":"btn-danger")}`;const L="true"===d.dataset.requireDeleteText||f;o?.classList.toggle("d-none",!L),L&&r&&(r.disabled=!0,s?.focus()),t.show(),L&&window.setTimeout(()=>s?.focus(),200)})})(),(()=>{const e=document.querySelectorAll("[data-help-icon]");if(!e.length||!window.bootstrap)return;const t=new Map;let n=null;const a=e=>e.querySelector("[data-help-tooltip]")||e,r=e=>bootstrap.Tooltip.getInstance(a(e))?.hide(),o=(e=null)=>{n&&n!==e&&bootstrap.Popover.getInstance(n)?.hide()},s=()=>e.forEach(e=>r(e));e.forEach(e=>{const i=a(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"),n=document.createElement("p");n.className="mb-2",n.textContent=d;const a=document.createElement("a");return a.href=e.dataset.helpUrl||"#",a.textContent="More...",a.className="plotline-help-more",a.addEventListener("click",t=>{t.preventDefault(),o(),s(),e.dispatchEvent(new CustomEvent("plotline:help-more",{bubbles:!0,detail:{key:e.dataset.helpKey||""}}))}),t.append(n,a),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",()=>{n=e,r(e)}),e.addEventListener("hidden.bs.popover",()=>{n===e&&(n=null)})}),document.addEventListener("click",e=>{const t=e.target instanceof Element?e.target:null;if(!t||!n)return;if(t.closest("[data-help-icon]"))return;const a=document.querySelector(`#${n.getAttribute("aria-describedby")}`);a?.contains(t)||o()}),document.addEventListener("keydown",e=>{"Escape"===e.key&&o()}),window.PlotLineHelpPopovers={hideAll(){t.forEach(e=>e.hide()),s(),n=null}}})(),(()=>{const e=document.querySelector("[data-help-layout]"),t=document.querySelector("[data-help-drawer]"),n=document.querySelector("[data-help-content]"),a=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||!n)return;const c="plotline.helpDrawer.width",d="plotline.helpDrawer.pinned",p="plotline.helpDrawer.key",u="plotline.helpDrawer.collapsed",h=e=>{try{return"true"===localStorage.getItem(e)}catch{return!1}},m=(e,t)=>{try{localStorage.setItem(e,t)}catch{}},g=t=>{const n=`${((e,t,n)=>Math.min(n,Math.max(t,e)))(Number.parseFloat(t)||25,20,50)}%`;e.style.setProperty("--help-drawer-width",n),m(c,n)},f=e=>{m(d,String(e)),i?.setAttribute("aria-pressed",String(e)),i&&(i.textContent=e?"Unpin":"Pin")},v=t=>{e.classList.toggle("help-collapsed",t),m(u,String(t)),o&&(o.textContent=t?"Expand":"Collapse")},y=async(t,a={})=>{const r=t||"";e.classList.add("help-open"),a.keepCollapsed||v(!1),m(p,r),l&&(l.textContent=r||"Help"),n.innerHTML='

Loading help...

';try{const e=await fetch(`/HelpDrawer/Article?key=${encodeURIComponent(r)}`,{headers:{"X-Requested-With":"XMLHttpRequest"}});n.innerHTML=e.ok?await e.text():'

Help for this feature has not yet been written.

';const t=n.querySelector(".help-drawer-article h2")?.textContent?.trim();l&&t&&(l.textContent=t)}catch{n.innerHTML='

Help for this feature has not yet been written.

'}};window.PlotLineHelpDrawer={isActive:()=>e.classList.contains("help-open"),open:e=>y(e)},g(localStorage.getItem(c)||"25%"),f(h(d)),v(h(u)),document.addEventListener("plotline:help-more",e=>{const t=e.detail?.key||e.target?.dataset?.helpKey||"";window.PlotLineHelpPopovers?.hideAll(),y(t)}),document.addEventListener("click",e=>{const t=e.target instanceof Element?e.target.closest("[data-help-open]"):null;t&&(e.preventDefault(),window.PlotLineHelpPopovers?.hideAll(),y(t.dataset.helpOpen||""))}),r?.addEventListener("click",()=>{e.classList.remove("help-open","help-collapsed"),f(!1)}),o?.addEventListener("click",()=>v(!e.classList.contains("help-collapsed"))),s?.addEventListener("click",()=>v(!1)),s?.addEventListener("keydown",e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),v(!1))}),i?.addEventListener("click",()=>f(!h(d))),a?.addEventListener("pointerdown",t=>{if(!e.classList.contains("help-open")||e.classList.contains("help-collapsed"))return;t.preventDefault(),document.body.classList.add("help-resizing"),a.setPointerCapture?.(t.pointerId);const n=t=>{const n=e.getBoundingClientRect(),a=(n.right-t.clientX)/n.width*100;g(a)},r=()=>{document.body.classList.remove("help-resizing"),document.removeEventListener("pointermove",n),document.removeEventListener("pointerup",r)};document.addEventListener("pointermove",n),document.addEventListener("pointerup",r)});const w=(()=>{try{return localStorage.getItem(p)||""}catch{return""}})();h(d)&&w&&y(w,{keepCollapsed:!0})})(),(()=>{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"],n=new Set(["Overall Intensity","Tension","Emotional Weight","Action"]),a=[],r=e=>{const t=e.querySelector(".metric-chart-frame");if(!t)return;let n=Number(t.dataset.metricNaturalWidth||0);if(n&&"true"===t.dataset.metricCanvasConstrained||(t.style.width="",n=t.getBoundingClientRect().width,n&&(t.dataset.metricNaturalWidth=String(n))),!n)return;const a=Math.max(window.devicePixelRatio||1,1),r=Math.floor(3e4/a);n>r?(t.style.width=`${r}px`,t.dataset.metricCanvasConstrained="true"):(t.style.width="",t.dataset.metricCanvasConstrained="false")},o=()=>{window.requestAnimationFrame(()=>{a.forEach(({chart:e,root:t})=>{r(t),e.resize()})})};window.PlotLineMetricCharts={resizeAll:o},window.addEventListener("plotline:timeline-layout-changed",o);const s={id:"plotlineChapterGuides",afterDraw(e){const t=e.config.options.plugins.plotlineScenes||[],{ctx:n,chartArea:a,scales:r}=e;if(!t.length||!r.x)return;n.save(),n.strokeStyle="rgba(47, 111, 99, 0.16)",n.fillStyle="rgba(82, 75, 65, 0.58)",n.lineWidth=1,n.font="700 10px system-ui, -apple-system, Segoe UI, sans-serif";const o=[];t.forEach((e,n)=>{n&&e.chapterLabel===t[n-1].chapterLabel||o.push({scene:e,index:n})});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);n.beginPath(),n.moveTo(c,a.top),n.lineTo(c,a.bottom),n.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)&&n.fillText(o.chapterLabel,Math.min(c+4,a.right-70),a.bottom+22)}),n.restore()}};window.Chart&&Chart.register(s),e.forEach(e=>{const o=e.querySelector("script[type='application/json']"),s=e.querySelector("canvas"),i=e.querySelector("[data-metric-toggles]"),l=e.querySelector("[data-chart-fallback]"),c=e.querySelector("[data-timeline-metric-edit-toolbar]"),d=e.querySelector("[data-edit-metric-status]"),p=e.hasAttribute("data-timeline-metric-editor")&&c&&d;if(!o||!s)return;let u;try{u=JSON.parse(o.textContent||"{}")}catch{return void l?.classList.remove("d-none")}if(!window.Chart||!u.scenes?.length||!u.metrics?.length)return void l?.classList.remove("d-none");const h=new Set(u.defaultMetrics?.length?u.defaultMetrics:n),m=u.scenes.length,g=m>80?10:m>40?5:m>24?4:m>14?2:1,f=u.metrics.map((e,n)=>{const a=new Map(e.points.map(e=>[e.sceneId,e.value])),r=t[n%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:u.scenes.map((e,t)=>{const n=a.get(e.sceneId);return null==n?{x:t+.5,y:null,sceneId:e.sceneId}:{x:t+.5,y:n,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:!h.has(e.metricName)}});let v=null,y=!1;r(e);const w=e=>{d&&(d.textContent=e)},b=()=>f.map((e,t)=>t).filter(e=>E?.isDatasetVisible(e)),L=()=>{const e=b();return 1===e.length?e[0]:-1},S=()=>{if(!p)return;const e=L();f.forEach((t,n)=>{t.pointRadius=n===e?5:3,t.pointHoverRadius=n===e?7:5,t.borderWidth=n===e?3:2});const t=b(),n=e>=0;s.classList.toggle("metric-curve-editing",n),d.classList.toggle("d-none",0===t.length),0===t.length?w(""):w(n?"Drag points up or down to edit this metric.":"Show only one metric line to edit its curve."),E?.update()};i.innerHTML="",f.forEach((e,t)=>{const n=`metric-toggle-${Math.random().toString(36).slice(2)}-${t}`,a=document.createElement("label");a.className="metric-toggle-pill",a.style.setProperty("--metric-colour",e.borderColor),a.innerHTML=`${e.label}`,i.appendChild(a),a.querySelector("input").addEventListener("change",e=>{E.setDatasetVisibility(t,e.target.checked),S(),E.update()})});const E=new Chart(s,{type:"line",data:{datasets:f},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 n=u.scenes[t];return 0!==t&&t!==m-1&&t%g!==0||n?.isPlaceholder?"":n?.axisLabel||""}},afterBuildTicks(e){e.ticks=u.scenes.map((e,t)=>({value:t+.5}))},grid:{display:!1}}},plugins:{legend:{display:!1},plotlineScenes:u.scenes,tooltip:{callbacks:{title(e){const t=Math.floor(e[0].parsed.x),n=u.scenes[t];return n.isPlaceholder?n.sceneTitle||"No scene":`${n.chapterLabel}, Scene ${n.sceneNumber}: ${n.sceneTitle}`},label:e=>`${e.dataset.label}: ${e.formattedValue}`,afterBody(e){const t=Math.floor(e[0].parsed.x),n=u.scenes[t],a=[];return n.characterPresence?a.push(n.characterPresence):void 0!==n.characterAppears&&a.push(n.characterAppears?"Character appears":"Character does not appear"),n.bookTitle&&a.push(n.bookTitle),a}}}}}});p&&(S(),s.addEventListener("pointerdown",e=>{v=(e=>{if(!p)return null;const t=L();if(t<0)return null;const n=E.getElementsAtEventForMode(e,"nearest",{intersect:!0},!0).find(e=>e.datasetIndex===t);if(!n)return null;const a=E.data.datasets[n.datasetIndex],r=a?.data?.[n.index];return r?.sceneId&&null!=r.y?{datasetIndex:n.datasetIndex,pointIndex:n.index,previousValue:r.y}:null})(e),v&&(e.preventDefault(),s.setPointerCapture?.(e.pointerId),y=!0)}),s.addEventListener("pointermove",e=>{if(!v)return;const t=E.data.datasets[v.datasetIndex],n=t?.data?.[v.pointIndex];t&&n&&(n.y=((e,t)=>{const n=E.scales.y.getValueForPixel(e.offsetY),a=Math.round(n);return Math.max(t.minValue,Math.min(t.maxValue,a))})(e,t),E.update("none"))}),s.addEventListener("pointerup",async t=>{if(!v)return;const n=v;v=null,s.releasePointerCapture?.(t.pointerId),await(async t=>{const n=E.data.datasets[t.datasetIndex],a=n?.data?.[t.pointIndex];if(!n||!a?.sceneId)return;const r=c?.querySelector("input[name='__RequestVerificationToken']")?.value||"";w("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(a.sceneId),metricId:Number(n.metricTypeId),value:Number(a.y)})}),o=await t.json().catch(()=>({}));if(!t.ok||!o.success)throw new Error(o.message||"Save failed");a.y=o.value,w("Saved"),E.update()}catch{a.y=t.previousValue,w("Save failed"),E.update()}})(n),window.setTimeout(()=>{y=!1},0)}),s.addEventListener("pointercancel",e=>{if(!v)return;const t=E.data.datasets[v.datasetIndex],n=t?.data?.[v.pointIndex];n&&(n.y=v.previousValue),v=null,s.releasePointerCapture?.(e.pointerId),y=!1,E.update()})),s.addEventListener("click",e=>{if(y)return void e.preventDefault();const t=E.getElementsAtEventForMode(e,"nearest",{intersect:!0},!0);if(!t.length)return;const n=E.data.datasets[t[0].datasetIndex]?.data?.[t[0].index],a=n?Math.floor(n.x):t[0].index,r=u.scenes[a];r?.timelineUrl&&(window.PlotLineTimelineScroll?.save(),window.location.href=r.timelineUrl)}),a.push({chart:E,root:e});const x=window.ResizeObserver?new ResizeObserver(()=>{r(e),E.resize()}):null;x&&(x.observe(e),x.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 n="plotline.timeline.visibility",a={"scene-cards":!0,"plot-lines":!0,assets:!0,characters:!0,locations:!0,warnings:!0,metrics:!0},r=t=>{Object.entries(t).forEach(([t,n])=>{e.classList.toggle(`hide-${t}`,!n),document.querySelectorAll(`[data-timeline-section='${t}']`).forEach(e=>{e.classList.toggle("timeline-section-hidden",!n)})}),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{...a,...JSON.parse(localStorage.getItem(n)||"{}")}}catch{return{...a}}})();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(n,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,n=document.querySelector("[data-timeline-density]"),a=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",h="plotline.timeline.inspectorWidth",m=[".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","scene-overview"],v=e.querySelector("[data-inspector-drawer]"),y=e.querySelector("[data-inspector-resizer]"),w=e.querySelector("[data-inspector-close]"),b=null!==localStorage.getItem(l),L=(e=>{try{return new Set(JSON.parse(localStorage.getItem(e)||"[]"))}catch{return new Set}})(l),S=()=>[...e.querySelectorAll(m)],E=t=>{if(!v)return;const{minimum:n,maximum:a,defaultWidth:r}=(()=>{const t=e.getBoundingClientRect().width||window.innerWidth,n=Math.min(420,Math.max(320,t-360)),a=Math.max(n,Math.min(.65*t,t-420));return{minimum:n,maximum:a,defaultWidth:Math.max(n,Math.min(a,.4*t))}})(),o=Math.max(n,Math.min(a,Number(t)||r));e.style.setProperty("--timeline-inspector-width",`${Math.round(o)}px`)};v&&(E(localStorage.getItem(h)),window.addEventListener("resize",()=>E(localStorage.getItem(h)))),(()=>{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,...S()].filter((e,t,n)=>e&&n.indexOf(e)===t);let p=!1,h=!1,m=!1,g=null;const f=new WeakMap,v=e=>f.set(e,e.scrollLeft),y=(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)},w=e=>{const t=l(e),n=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{l(i())&&!(()=>{try{return"true"===localStorage.getItem(u)}catch{return!1}})()&&!p?(window.clearTimeout(g),r.hidden=!1,r.classList.remove("is-dismissing")):r.classList.contains("is-dismissing")||y(!1),d().forEach(w)},L=()=>{p=!0,y(!0);try{localStorage.setItem(u,"true")}catch{}};d().forEach(e=>{v(e),e.addEventListener("wheel",t=>{if(!t.defaultPrevented&&t.shiftKey&&Math.abs(t.deltaY)>Math.abs(t.deltaX)&&l(e)){const n=e.scrollLeft;t.preventDefault(),e.scrollLeft+=t.deltaY,window.requestAnimationFrame(()=>{w(e),!h&&Math.abs(e.scrollLeft-n)>4&&L(),v(e)})}},{passive:!1}),e.addEventListener("scroll",()=>(e=>{if(w(e),!m||h)return void v(e);const t=f.get(e)??e.scrollLeft;Math.abs(e.scrollLeft-t)>4&&l(e)?L():v(e)})(e),{passive:!0})}),o?.addEventListener("click",L),s?.addEventListener("click",()=>{const e=i();if(!l(e))return void b();const t=e.scrollLeft,n=c(e)-t;let a=Math.min(220,n),r=1;a<24&&t>0&&(a=Math.min(220,t),r=-1),a<4||(h=!0,e.scrollTo({left:t+a*r,behavior:"smooth"}),window.setTimeout(()=>{e.scrollTo({left:t,behavior:"smooth"})},420),window.setTimeout(()=>{h=!1,d().forEach(e=>{v(e),w(e)}),b()},950))}),window.setTimeout(()=>{m=!0,d().forEach(v)},800),window.requestAnimationFrame(b),window.addEventListener("resize",b),window.addEventListener("plotline:timeline-layout-changed",b),n?.addEventListener("change",()=>window.requestAnimationFrame(b)),a?.addEventListener("change",()=>window.requestAnimationFrame(b))})(),y?.addEventListener("pointerdown",t=>{t.preventDefault(),document.body.classList.add("timeline-inspector-resizing"),y.setPointerCapture(t.pointerId);const n=t=>{const n=e.getBoundingClientRect().right-t.clientX;E(n)},a=()=>{document.body.classList.remove("timeline-inspector-resizing");const e=Math.round(v?.getBoundingClientRect().width||0);e>0&&localStorage.setItem(h,String(e)),window.dispatchEvent(new Event("plotline:timeline-layout-changed")),y.removeEventListener("pointermove",n),y.removeEventListener("pointerup",a),y.removeEventListener("pointercancel",a)};y.addEventListener("pointermove",n),y.addEventListener("pointerup",a),y.addEventListener("pointercancel",a)}),w?.addEventListener("click",e=>{e.preventDefault();const t=new URL(window.location.href),n=t.searchParams.get("FocusType")||t.searchParams.get("focusType");t.searchParams.delete("SelectedSceneID"),t.searchParams.delete("selectedSceneId"),t.searchParams.delete("selectedsceneid"),n&&"scene"!==n.toLowerCase()||(t.searchParams.delete("FocusType"),t.searchParams.delete("focusType"),t.searchParams.delete("FocusID"),t.searchParams.delete("focusId")),x(),window.location.href=t.toString()});const x=()=>{try{sessionStorage.setItem(p,JSON.stringify({path:window.location.pathname,top:window.scrollY,left:window.scrollX,workspaceLeft:t.scrollLeft,workspaceTop:t.scrollTop,containers:S().map((e,t)=>({index:t,left:e.scrollLeft,top:e.scrollTop}))}))}catch{}};window.PlotLineTimelineScroll={save:x};const I=(t,n,a)=>{a.forEach(n=>e.classList.remove(`${t}-${n}`)),e.classList.add(`${t}-${n}`)},q=e=>{const t=g.includes(e)?e:"comfortable";I("density",t,g),n&&(n.value=t),localStorage.setItem(c,t),window.requestAnimationFrame(A)},C=e=>{const t=f.includes(e)?e:"chapter";I("zoom",t,f),a&&(a.value=t),localStorage.setItem(d,t),window.requestAnimationFrame(A)},k=(t,n=!0)=>{const a=(t=>e.querySelector(`[data-scene-id='${CSS.escape(String(t))}']`))(t);a&&(a.classList.add("keyboard-focus"),a.scrollIntoView({behavior:"smooth",block:"center",inline:"center"}),n&&a.focus({preventScroll:!0}),window.setTimeout(()=>a.classList.remove("keyboard-focus"),1800))},A=()=>{e.querySelectorAll("[data-plot-line-svg-board]").forEach(e=>{const t=e.querySelector("[data-plot-line-svg]");if(!t)return;let n=e.querySelector("[data-plot-line-health-svg]");n||(n=document.createElementNS("http://www.w3.org/2000/svg","svg"),n.setAttribute("class","plot-lane-svg-overlay plot-lane-svg-health-overlay"),n.setAttribute("data-plot-line-health-svg",""),n.setAttribute("aria-hidden","true"),t.after(n)),t.replaceChildren(),n.replaceChildren();const a=e.getBoundingClientRect(),r=Math.max(e.scrollWidth,a.width),o=Math.max(e.scrollHeight,a.height);[t,n].forEach(e=>{e.setAttribute("viewBox",`0 0 ${r} ${o}`),e.setAttribute("width",String(r)),e.setAttribute("height",String(o))});const s=(e,t={})=>{const n=document.createElementNS("http://www.w3.org/2000/svg",e);return Object.entries(t).forEach(([e,t])=>n.setAttribute(e,String(t))),n},i=[...new Set([...e.querySelectorAll("[data-plot-line-slot]")].map(e=>{const t=e.getBoundingClientRect();return Math.round(t.left-a.left+t.width/2)}))].sort((e,t)=>e-t),l=Math.max(i.length-1,0),c=new Map;e.querySelectorAll("[data-plot-line-row]").forEach(e=>{e.dataset.plotLineId&&c.set(e.dataset.plotLineId,e)});const d=[...c.values()].map(e=>({row:e,plotLineId:e.dataset.plotLineId,colour:e.dataset.plotColour||"#2f6f63",points:[...e.querySelectorAll("[data-plot-event-node]")].map(e=>((e,t)=>{const n=t.closest("[data-plot-line-slot]");if(!n)return null;const r=n.getBoundingClientRect(),o=t.getBoundingClientRect();return{x:o.left-a.left+o.width/2,y:o.top-a.top+o.height/2,sceneX:r.left-a.left+r.width/2,radius:Math.max(o.width,o.height)/2,sceneIndex:0,type:(t.dataset.plotEventType||"Progress").toLowerCase(),targetPlotLineId:t.dataset.targetPlotLineId||"",targetPlotLineIds:(t.dataset.targetPlotLineIds||"").split(",").map(e=>e.trim()).filter(Boolean)}})(0,e)).filter(Boolean).map(e=>({...e,sceneIndex:Math.max(0,i.findIndex(t=>t===Math.round(e.sceneX)))})).sort((e,t)=>e.x-t.x),incomingStartXs:[]})),p=new Map(d.map(e=>[e.plotLineId,e])),u=(e,n,r,o)=>{if(!n)return void(window.console?.warn&&window.console.warn(`Plot line ${o} connector skipped because target plot line data is missing.`));e.x;const i=(e=>{const t=e.getBoundingClientRect();return t.top-a.top+t.height/2})(n),l=Math.max(28,Math.min(46,.28*Math.abs(i-e.y))),c=Math.max(8,e.radius||12),d=e.x+c,p=d+l,u=d+l/2;t.append(s("path",{class:`plot-line-svg-connector plot-line-svg-connector-${o}`,d:`M ${d} ${e.y} C ${u} ${e.y}, ${u} ${i}, ${p} ${i}`,stroke:r}))};d.forEach(e=>{e.points.forEach(e=>{"branch"===e.type&&e.targetPlotLineId&&p.get(e.targetPlotLineId)?.incomingStartXs.push(e.x),"split"===e.type&&e.targetPlotLineIds.forEach(t=>{p.get(t)?.incomingStartXs.push(e.x)})})}),d.forEach(e=>{e.health=(e=>{const t=e.some(e=>"resolve"===e.type),n=e.some(e=>"abandon"===e.type),a=e.find(e=>"resolve"===e.type),r=e.find(e=>"abandon"===e.type),o=e.some(e=>"merge"===e.type&&e.targetPlotLineId),s=e.some(e=>"split"===e.type&&e.targetPlotLineIds.length>=2),i=Boolean(a)&&e.some(e=>"branch"===e.type&&e.targetPlotLineId&&e.sceneIndex>=a.sceneIndex),c=e.reduce((e,t)=>Math.max(e,t.sceneIndex),0),d=!t&&!n&&l-c>=10,p=t&&!o&&!s&&!i;let u="active";return n?u="abandoned":t?u=p?"questionable":"resolved":d&&(u="neglected"),{state:u,isNeglected:d,isDangling:!t&&!n&&!o&&!s&&l>=c,isQuestionable:p,isAbandoned:n,resolvePoint:a,abandonPoint:r}})(e.points),e.state=e.health.state}),d.forEach(e=>{const{colour:n,points:a,incomingStartXs:r,state:o}=e;if(a.length>0){const i=a.find(e=>"start"===e.type),l=r.length?Math.min(...r):null,c=a.find(e=>"split"===e.type||"merge"===e.type),d=a[0],p=a[a.length-1],u=((null===l||i&&i.xe.x-t.x),m=c?h.indexOf(c):-1,g=m>=0?h.slice(0,m+1):h;null!==l&&l{const r=g[a+1];if(!r||r.x<=e.x)return;const i=Math.abs(r.sceneIndex-e.sceneIndex)>=f;t.append(s("path",{class:`plot-line-svg-path plot-line-svg-segment ${i?"plot-line-svg-segment-dormant":""} plotline-state-${o}`,d:`M ${e.x} ${e.y} L ${r.x} ${r.y}`,stroke:n}))})}}),d.forEach(({points:e,colour:t})=>{e.forEach(e=>{"branch"!==e.type&&"merge"!==e.type||u(e,c.get(e.targetPlotLineId),t,e.type),"split"===e.type&&e.targetPlotLineIds.length>=2?e.targetPlotLineIds.forEach(n=>{u(e,c.get(n),t,e.type)}):"split"===e.type&&e.targetPlotLineIds.length>0&&window.console?.warn&&window.console.warn("Plot line split connector skipped because fewer than two targets are available.")})}),d.forEach(e=>{const t=e.lineEndPoint||e.points[e.points.length-1],a=[];e.health?.isNeglected&&t&&a.push({point:t,kind:"neglected",label:"Dormant Thread",reason:"No activity for 10+ scenes.",action:"Add a Progress, Reveal or Resolve event."}),e.health?.isDangling&&t&&a.push({point:t,kind:"dangling",label:"Unresolved Thread",reason:"Thread contains no Resolve or Abandon event by the end of the current timeline.",action:"Review ending scenes and add Resolve or Abandon where appropriate."}),e.health?.isQuestionable&&e.health.resolvePoint&&a.push({point:e.health.resolvePoint,kind:"questionable",label:"Missing Closure",reason:"Resolved without merge, split, or branch.",action:"Verify this thread has sufficient payoff."}),e.health?.isAbandoned&&e.health.abandonPoint&&a.push({point:e.health.abandonPoint,kind:"abandoned",label:"Abandoned Thread",reason:"This plot line was abandoned.",action:"Check this is intentional."});const r=new Map;a.forEach(e=>{const t=`${Math.round(e.point.x)}:${Math.round(e.point.y)}`;r.has(t)||r.set(t,{point:e.point,warnings:[]}),r.get(t).warnings.push(e)}),r.forEach(({point:e,warnings:t})=>((e,t)=>{const a=Math.max(18,(e.radius||12)+8),r=t[0]?.kind||"warning",o=s("g",{class:`plotline-health-marker plotline-health-marker-${r}`}),i=s("title");i.textContent=(e=>e.map(e=>[`Warning: ${e.label}`,`Reason: ${e.reason}`,`Suggested Action: ${e.action}`].join("\n")).join("\n\n"))(t),o.append(i);const l=e.x+a,c=e.y-13;if("questionable"===r){o.append(s("circle",{cx:l,cy:c,r:9}));const e=s("text",{x:l,y:c+4,"text-anchor":"middle"});e.textContent=t.length>1?String(t.length):"?",o.append(e)}else if(o.append(s("circle",{cx:l,cy:c,r:10})),o.append(s("path",{d:`M ${l} ${c-6} L ${l+6} ${c+5} L ${l-6} ${c+5} Z`})),o.append(s("line",{x1:l,y1:c-2,x2:l,y2:c+2.5})),o.append(s("circle",{cx:l,cy:c+5.3,r:1.2})),t.length>1){const e=s("text",{x:l+11,y:c-6,"text-anchor":"middle",class:"plotline-health-count"});e.textContent=String(t.length),o.append(e)}n.append(o)})(e,t))})})},$=(e,t)=>{document.querySelectorAll(`[data-collapse-body='${CSS.escape(e)}']`).forEach(e=>{e.classList.toggle("timeline-section-collapsed",t)}),document.querySelectorAll(`[data-collapse-toggle='${CSS.escape(e)}']`).forEach(e=>{e.classList.toggle("is-collapsed",t),e.setAttribute("aria-expanded",String(!t))})};document.querySelectorAll("[data-collapse-toggle]").forEach(e=>{const t=e.dataset.collapseToggle;b||"collapsed"!==e.dataset.collapseDefault||L.add(t);const n=L.has(t);$(t,n),e.addEventListener("click",()=>{const e=!L.has(t);e?L.add(t):L.delete(t),$(t,e),localStorage.setItem(l,JSON.stringify([...L])),A(),window.dispatchEvent(new Event("plotline:timeline-layout-changed"))})}),n?.addEventListener("change",()=>q(n.value)),a?.addEventListener("change",()=>C(a.value)),q(localStorage.getItem(c)||"comfortable"),C(localStorage.getItem(d)||"chapter");const M=(()=>{try{return null!==sessionStorage.getItem(p)}catch{return!1}})();window.requestAnimationFrame(()=>{A(),((e="auto")=>{const t=o?.querySelector("[data-active-chapter='true']");if(!o||!t)return;const n=o.getBoundingClientRect(),a=t.getBoundingClientRect(),r=a.left+a.width/2,s=n.left+n.width/2;(a.leftn.right)&&o.scrollBy({left:r-s,behavior:e})})("auto"),M&&(()=>{let e=null;try{e=JSON.parse(sessionStorage.getItem(p)||"null"),sessionStorage.removeItem(p)}catch{try{sessionStorage.removeItem(p)}catch{}return}e&&e.path===window.location.pathname&&window.requestAnimationFrame(()=>{t.scrollLeft=Number(e.workspaceLeft)||0,t.scrollTop=Number(e.workspaceTop)||0;const n=S();(e.containers||[]).forEach(e=>{const t=n[e.index];t&&(t.scrollLeft=Number(e.left)||0,t.scrollTop=Number(e.top)||0)}),window.scrollTo(Number(e.left)||0,Number(e.top)||0)})})()}),window.addEventListener("resize",A),window.addEventListener("plotline:timeline-layout-changed",A);e.addEventListener("click",t=>{if(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;const n=t.target instanceof Element?t.target:null,a=n?.closest("a[href]");if(!a||!e.contains(a))return;[...new URL(a.href,window.location.href).searchParams.keys()].some(e=>"selectedsceneid"===e.toLowerCase())&&x()},{capture:!0});const T=()=>{const e=r?.value.trim().toLowerCase()||"";let t=null;return i.forEach(n=>{const a=!e||(n.dataset.timelineSearchText||"").toLowerCase().includes(e);n.classList.toggle("search-hit",Boolean(e&&a)),n.classList.toggle("search-dim",Boolean(e&&!a)),!t&&e&&a&&(t=n)}),t};r?.addEventListener("input",T),r?.addEventListener("keydown",e=>{if("Enter"!==e.key)return;const t=T();t&&(e.preventDefault(),k(t.dataset.sceneId))}),s.forEach(e=>{e.addEventListener("change",()=>{e.value&&k(e.value)})}),document.querySelectorAll("[data-jump-scene]").forEach(e=>{e.addEventListener("click",()=>{e.dataset.jumpScene&&k(e.dataset.jumpScene)})}),document.addEventListener("keydown",e=>{const n=document.activeElement?.tagName?.toLowerCase(),o=["input","select","textarea"].includes(n)||document.activeElement?.isContentEditable;if((e.ctrlKey||e.metaKey)&&"f"===e.key.toLowerCase()&&r)return e.preventDefault(),r.focus(),void r.select();if("Escape"===e.key){const e=new URL(window.location.href),t=e.searchParams.has("FocusType")||e.searchParams.has("FocusID");return e.searchParams.delete("FocusType"),e.searchParams.delete("FocusID"),void(t?window.location.href=e.toString():r?.value&&(r.value="",T()))}if(!o){if("ArrowLeft"===e.key||"ArrowRight"===e.key)return e.preventDefault(),void t.scrollBy({left:"ArrowLeft"===e.key?-260:260,behavior:"smooth"});if("+"===e.key||"="===e.key||"-"===e.key){const t=f.indexOf(a?.value||"chapter"),n="-"===e.key?-1:1,r=Math.min(f.length-1,Math.max(0,t+n));C(f[r])}}})})(),(()=>{const e=document.querySelector("[data-timeline-root]"),t=document.querySelector("[data-drag-drop-panel]");if(!t)return;const n=new Map([...document.querySelectorAll("[data-drag-form]")].map(e=>[e.dataset.dragForm,e])),a=t.querySelector("[data-drag-panel-title]"),r=t.querySelector("[data-drag-panel-kicker]"),o=t.querySelector("[data-drag-panel-summary]"),s=document.querySelector("[data-scene-move-modal]"),i=s&&window.bootstrap?.Modal?window.bootstrap.Modal.getOrCreateInstance(s):null,l=s?.querySelector("[data-scene-move-title]"),c=s?.querySelector("[data-scene-move-summary]"),d=s?.querySelector("[data-scene-move-submit]"),p="plotline.timeline.scroll";let u=null,h=0;const m=(e,t,n)=>{const a=e?.querySelector(`[name='${CSS.escape(t)}']`);a&&(a.value=n??"")},g=e=>e?.selectedOptions?.[0]?.textContent?.trim()||"",f=e=>`“${e||"this scene"}”`,v=(e,t,n,a,r)=>t&&n&&t===n?`Move ${f(e.label)} to this new position within ${n}?`:t&&n?`Move ${f(e.label)} from ${t} to ${n}?`:`Move ${f(e.label)} ${a.toLowerCase()} ${r}?`,y=(e,s,p,u)=>{if("scene"===e)return t.classList.add("d-none"),t.querySelectorAll("[data-drag-form]").forEach(e=>e.classList.add("d-none")),n.get("scene")?.classList.remove("d-none"),l&&(l.textContent=s),c&&(c.textContent=p),d&&d.classList.toggle("d-none",s.toLowerCase().startsWith("cannot")||s.toLowerCase().startsWith("scene already")),void(i?i.show():t.classList.remove("d-none"));n.forEach((t,n)=>t.classList.toggle("d-none",n!==e)),t.classList.remove("d-none"),a.textContent=s,r.textContent=u,o.textContent=p,t.scrollIntoView({behavior:"smooth",block:"center"})},w=()=>{t.classList.add("d-none"),n.forEach(e=>e.classList.add("d-none"))},b=()=>{document.querySelectorAll(".drop-target-active, .drop-before, .drop-after, .chapter-drop-active, .drop-chapter-end").forEach(e=>e.classList.remove("drop-target-active","drop-before","drop-after","chapter-drop-active","drop-chapter-end"))};try{const t=JSON.parse(sessionStorage.getItem(p)||"null");t&&(sessionStorage.removeItem(p),requestAnimationFrame(()=>{const n=e?.querySelector(".timeline-shell");n&&(n.scrollLeft=t.left||0),window.scrollTo({top:t.top||0})}))}catch{sessionStorage.removeItem(p)}const L=e=>{try{const t=JSON.parse(e.dataTransfer.getData("application/json")||"{}");return t.type?t:u||{}}catch{return u||{}}};document.querySelectorAll("[data-drag-type][draggable='true']").forEach(e=>{e.addEventListener("dragstart",t=>((e,t)=>{const n={type:t.dataset.dragType,id:t.dataset.dragId,label:t.dataset.dragLabel||t.textContent.trim()};e.dataTransfer.effectAllowed="copyMove",e.dataTransfer.setData("application/json",JSON.stringify(n)),e.dataTransfer.setData("text/plain",`${n.type}:${n.id}`),u=n,document.body.classList.add("drag-active",`dragging-${n.type}`),t.classList.add("is-dragging")})(t,e)),e.addEventListener("dragend",()=>{e.classList.remove("is-dragging"),document.body.classList.remove("drag-active","dragging-scene","dragging-character","dragging-asset","dragging-location"),u=null,b()})}),t.querySelectorAll("[data-drag-cancel]").forEach(e=>e.addEventListener("click",w)),n.get("scene")?.addEventListener("submit",()=>{const t=e?.querySelector(".timeline-shell");try{sessionStorage.setItem(p,JSON.stringify({left:t?.scrollLeft||0,top:window.scrollY||0}))}catch{}}),e?.querySelectorAll(".timeline-scene-card[data-scene-id]").forEach(t=>{t.addEventListener("click",e=>{Date.now(){const n=L(e);["scene","character","asset"].includes(n.type)&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="scene"===n.type?"move":"copy",t.classList.add("drop-target-active"),t.classList.toggle("drop-before","scene"===n.type&&e.offsetX=t.clientWidth/2))}),t.addEventListener("dragleave",()=>t.classList.remove("drop-target-active","drop-before","drop-after")),t.addEventListener("drop",a=>{const r=L(a);if(!["scene","character","asset"].includes(r.type))return;a.preventDefault(),a.stopPropagation(),h=Date.now()+800,t.classList.remove("drop-target-active","drop-before","drop-after");const o=t.dataset.sceneId;if("scene"===r.type){if(r.id===o)return void y("scene","Cannot move scene","Drop a scene before or after a different scene.","Scene move");const s=n.get("scene"),i=a.offsetX{const a=t.closest("[data-chapter-drop-target]"),r=t.dataset.chapterId||a?.dataset.chapterId,o=t.dataset.chapterLabel||a?.dataset.chapterLabel||"this chapter";t.addEventListener("dragover",e=>{"scene"===L(e).type&&r&&(e.target.closest(".timeline-scene-card[data-scene-id]")||(e.preventDefault(),e.dataTransfer.dropEffect="move",t.classList.add("drop-target-active","drop-chapter-end"),a?.classList.add("chapter-drop-active")))}),t.addEventListener("dragleave",e=>{t.contains(e.relatedTarget)||(t.classList.remove("drop-target-active","drop-chapter-end"),a?.classList.remove("chapter-drop-active"))}),t.addEventListener("drop",a=>{const s=L(a);if("scene"!==s.type||!r)return;if(a.target.closest(".timeline-scene-card[data-scene-id]"))return;a.preventDefault(),a.stopPropagation(),h=Date.now()+800,b();const i=e.querySelector(`.timeline-scene-card[data-scene-id='${CSS.escape(s.id)}']`);if(i?.dataset.chapterId===r&&t.lastElementChild?.dataset?.sceneId===s.id)return void y("scene","Scene already here",`${s.label} is already at the end of ${o}.`,"Scene move");const l=n.get("scene");m(l,"SceneID",s.id),m(l,"AnchorSceneID",""),m(l,"TargetChapterID",r),m(l,"Position","End"),y("scene","Move Scene?",v(s,i?.dataset.chapterLabel||"",o,"After",o),"Scene move")})});const S=n.get("asset-dependency"),E=()=>{const e=S?.dataset.sourceLabel||"Source asset",n=S?.dataset.targetLabel||"Target asset",a=g(S?.querySelector("[name='AssetDependencyTypeID']"))||"Requires",r=g(S?.querySelector("[name='SourceRequiredStateID']"))||"the required state",o=g(S?.querySelector("[name='TargetBlockedStateID']"))||"the blocked state",s=t.querySelector("[data-asset-dependency-preview]");s&&(s.textContent=`${e} ${a.toLowerCase()} ${n}. ${e} should be ${r} before ${n} can be ${o}.`)};S?.querySelectorAll("select").forEach(e=>e.addEventListener("change",E)),document.querySelectorAll("[data-asset-drop-target], .drag-chip.asset").forEach(e=>{e.addEventListener("dragover",t=>{"asset"===L(t).type&&(t.preventDefault(),t.dataTransfer.dropEffect="copy",e.classList.add("drop-target-active"))}),e.addEventListener("dragleave",()=>e.classList.remove("drop-target-active")),e.addEventListener("drop",t=>{const n=L(t),a=e.dataset.assetId||e.dataset.dragId,r=e.dataset.assetLabel||e.dataset.dragLabel||e.textContent.trim();"asset"===n.type&&a&&(t.preventDefault(),e.classList.remove("drop-target-active"),n.id!==a?(m(S,"SourceAssetID",n.id),m(S,"TargetAssetID",a),S.dataset.sourceLabel=n.label,S.dataset.targetLabel=r,E(),y("asset-dependency","Create asset dependency",`${n.label} -> ${r}`,"Asset dependency")):y("asset-dependency","Cannot create dependency","Drop one asset onto a different asset.","Asset dependency"))})}),document.querySelectorAll("[data-drag-type='location']").forEach(e=>{e.addEventListener("dragover",t=>{"location"===L(t).type&&(t.preventDefault(),t.dataTransfer.dropEffect="copy",e.classList.add("drop-target-active"))}),e.addEventListener("dragleave",()=>e.classList.remove("drop-target-active")),e.addEventListener("drop",t=>{const a=L(t),r=e.dataset.dragId,o=e.dataset.dragLabel||e.textContent.trim();if("location"!==a.type)return;if(t.preventDefault(),e.classList.remove("drop-target-active"),a.id===r)return void y("location-relationship","Cannot create relationship","Drop one location onto a different location.","Location relationship");const s=n.get("location-relationship");m(s,"FromLocationID",a.id),m(s,"ToLocationID",r),y("location-relationship","Create location relationship",`${a.label} -> ${o}`,"Location drop")})})})(); \ No newline at end of file