Implemented Phase B guidance/discoverability work.

This commit is contained in:
Nick Beckley 2026-06-19 20:06:00 +01:00
parent 3b60634667
commit 0410afb124
70 changed files with 970 additions and 81 deletions

View File

@ -19,6 +19,12 @@ Asset states record what condition or story status the object has. Dependencies
Assets create continuity obligations. If a letter is burned, it should not be read later unless another copy exists. If a weapon is with one character, another character needs a reason to use it. If evidence is hidden, discovery should happen in a recorded scene.
# What To Track
Track objects that affect plot, knowledge, conflict or continuity: letters, weapons, keys, evidence, documents, phones, vehicles, heirlooms, medicines, disguises and records.
Use state changes for what the object becomes, location for where it is, and custody for who controls it. These three ideas often overlap but they are not the same.
# Related Guides
- [Timeline Asset Events](/Help/Article/timeline.assetEvents)

View File

@ -14,3 +14,9 @@ screenshot:
Attachments are for supporting material: research links, images, maps, interview notes, historical references, sketches or source documents.
Use notes to explain why the attachment matters. Future-you should not have to reopen every file to remember what it was for.
# Storage And Best Practice
Files can affect storage usage and subscription limits. Attach the material that genuinely supports the scene, and prefer links when the source can safely remain external.
Good attachments include a floor plan for a locked-room scene, a photo reference for clothing, a research article for a medical detail, a map for travel logic or a note explaining a real-world source.

View File

@ -19,6 +19,12 @@ Use them when a scene changes how a character should be described or understood
Attribute changes become part of the character's story history. Future scenes can then be checked against what has already been established. If a character is injured in one scene and perfectly fine in the next without explanation, PlotDirector has evidence to help you notice.
# What To Track
Track details that create future obligations: injuries, disguises, clothing that will be recognised, emotional state that affects later behaviour, new skills, lost abilities, scars, pregnancy, intoxication, fatigue or anything the reader would expect to remain true.
Do not use attributes for ordinary description that has no continuity consequence. The best attribute events are the ones future-you will be glad to see.
# Related Guides
- [Characters](/Help/Article/sceneInspector.characters)

View File

@ -15,6 +15,16 @@ The Characters section records who appears in the scene, how they participate an
Role tells you whether a character is the point of view, a main participant, a supporting presence or only mentioned. Presence and location details help the story remember who was actually there.
# Why Adding Characters Matters
Characters drive many PlotDirector systems. Once a character is attached to a scene, they can appear in Timeline lanes, character-focused filters, relationship review, knowledge tracking, attribute history and continuity checks.
You do not need to fill every character field every time. Add the details that matter: POV when reader access matters, role when participation matters, location when movement or continuity matters, and notes when the scene changes what future scenes need to remember.
# Continuity Implications
Character location and movement help answer whether someone could witness an event, hold an object, know a secret or appear in the next scene without a travel gap.
# Related Guides
- [Character Appearances](/Help/Article/timeline.characterAppearances)

View File

@ -14,3 +14,9 @@ screenshot:
The checklist is for concrete scene tasks: add sensory detail, check the alibi, rewrite the argument, verify the date, add the missing clue, or trim the ending.
Use it for actions you want to complete, not for permanent story facts. Story facts belong in the relevant scene, character, thread or asset fields.
# Editable Tasks
Checklist labels are editable because scene tasks often change as you revise. "Fix ending" might become "Make Beth choose to lie before Arun enters." Keep the label as specific as the work requires.
Tick completion when the task is done. Remove items that no longer matter so the checklist stays trustworthy.

View File

@ -19,6 +19,12 @@ Custody can differ from location. A car may be parked outside, but one character
Custody helps PlotDirector spot impossible possession. If Beth gives the key to Arun in one scene, Beth should not use it later unless it returns to her or a duplicate exists.
# Ownership Versus Possession
Ownership is who the object belongs to. Possession is who has it now. Control is who can use or access it. These can be different: a stolen car, borrowed keys, guarded evidence or a document locked in someone else's safe.
Use custody events for transfers, thefts, handoffs, losses, recoveries and moments where control changes.
# Related Guides
- [Assets](/Help/Article/sceneInspector.assets)

View File

@ -0,0 +1,14 @@
---
title: Asset Event Type
category: Scene Inspector
tags: scene inspector, fields, assets
contextKey: sceneInspector.fields.assetEventType
micro: Describe what happens to the asset in this scene.
quickTitle: Asset event type
quickSummary: Asset event type records whether an object is found, moved, revealed, damaged, used, hidden or otherwise changed.
screenshot:
---
# Overview
Choose the event that best describes the object's story beat. This is what appears in Timeline asset lanes and helps continuity understand why the asset's state changed.

View File

@ -0,0 +1,14 @@
---
title: Asset Kind
category: Scene Inspector
tags: scene inspector, fields, assets
contextKey: sceneInspector.fields.assetKind
micro: Classify a new story asset.
quickTitle: Asset kind
quickSummary: Asset kind helps distinguish evidence, weapons, documents, keys, vehicles and other important objects.
screenshot:
---
# Overview
Use kind to make assets easier to find and review later. The category should describe how the object functions in the story.

View File

@ -0,0 +1,14 @@
---
title: Asset Location
category: Scene Inspector
tags: scene inspector, fields, assets, locations
contextKey: sceneInspector.fields.assetLocation
micro: Record where an asset is in this scene.
quickTitle: Asset location
quickSummary: Asset location fields support last-known-location tracking and continuity checks.
screenshot:
---
# Overview
Use asset location when an object's place matters separately from who holds it. A letter can be in a drawer, a vehicle in a garage, or evidence under a floorboard.

View File

@ -0,0 +1,14 @@
---
title: Asset Selector
category: Scene Inspector
tags: scene inspector, fields, assets
contextKey: sceneInspector.fields.assetSelector
micro: Choose the asset this scene changes or places.
quickTitle: Asset selector
quickSummary: Asset selectors connect scene events to important objects, clues, evidence, documents, weapons, keys or vehicles.
screenshot:
---
# Overview
Choose an existing asset when this scene changes a known object. Create a new asset when the object should be tracked beyond this scene.

View File

@ -0,0 +1,14 @@
---
title: Asset State
category: Scene Inspector
tags: scene inspector, fields, assets, state
contextKey: sceneInspector.fields.assetState
micro: Record an asset state before or after this event.
quickTitle: Asset state
quickSummary: Asset state transitions help continuity know whether an object is hidden, found, damaged, destroyed, active or otherwise changed.
screenshot:
---
# Overview
Use From state when the event depends on where the asset started. Use To state when the event changes what should be true afterward. Leave state blank when the object matters but its condition does not change.

View File

@ -0,0 +1,14 @@
---
title: Attachment Type
category: Scene Inspector
tags: scene inspector, fields, attachments, research
contextKey: sceneInspector.fields.attachmentType
micro: Classify scene research or reference material.
quickTitle: Attachment type
quickSummary: Attachment type helps distinguish research, images, maps, notes, references and other scene-specific resources.
screenshot:
---
# Overview
Use attachment type to keep references findable. Files and links can count against storage or subscription limits, so attach material that genuinely supports this scene.

View File

@ -0,0 +1,14 @@
---
title: Character Attribute Type
category: Scene Inspector
tags: scene inspector, fields, character attributes
contextKey: sceneInspector.fields.attributeType
micro: Choose what kind of character state changes here.
quickTitle: Attribute type
quickSummary: Attribute type identifies whether the scene changes appearance, injury, emotion, skill or another trackable state.
screenshot:
---
# Overview
Choose the attribute type that best describes what future scenes need to remember. Attribute events are most useful for changes that persist, such as injuries, disguises, emotional state, visible clothing or learned skills.

View File

@ -0,0 +1,14 @@
---
title: Character Attribute Value
category: Scene Inspector
tags: scene inspector, fields, character attributes
contextKey: sceneInspector.fields.attributeValue
micro: Record the new state created by this scene.
quickTitle: Attribute value
quickSummary: Attribute value is the concise state future scenes should remember.
screenshot:
---
# Overview
Use a short value such as "bruised ribs", "black dress", "furious but hiding it" or "can pick simple locks". Add detail only when it will help future continuity.

View File

@ -0,0 +1,14 @@
---
title: Character Location Fields
category: Scene Inspector
tags: scene inspector, fields, characters, locations
contextKey: sceneInspector.fields.characterLocation
micro: Track where a character is, enters from and exits to.
quickTitle: Character location
quickSummary: Character location fields support movement, travel and continuity checks across future scenes.
screenshot:
---
# Overview
Current location records where the character is during this scene. Entry and exit locations record movement into and out of the scene. Use them when geography or continuity matters; leave them unset when location is irrelevant.

View File

@ -0,0 +1,14 @@
---
title: Character Presence
category: Scene Inspector
tags: scene inspector, fields, characters, presence
contextKey: sceneInspector.fields.characterPresence
micro: Record whether the character is physically present, mentioned or otherwise involved.
quickTitle: Character presence
quickSummary: Presence helps distinguish being in the room from being referenced, absent or indirectly affecting the scene.
screenshot:
---
# Overview
Use presence to clarify what "appears" means. A character can drive a scene through a letter, memory or phone call without physically standing there.

View File

@ -0,0 +1,14 @@
---
title: Character Role
category: Scene Inspector
tags: scene inspector, fields, characters, role
contextKey: sceneInspector.fields.characterRole
micro: Describe what the character does in this scene.
quickTitle: Character role
quickSummary: Role distinguishes POV, main participant, supporting presence and minor mentions for Timeline and review.
screenshot:
---
# Overview
Use role to show how actively the character participates. A POV or main participant carries more story weight than a mentioned character, and that difference matters in appearance lanes and character-focused review.

View File

@ -0,0 +1,14 @@
---
title: Character Selector
category: Scene Inspector
tags: scene inspector, fields, characters
contextKey: sceneInspector.fields.characterSelector
micro: Choose which character the scene detail applies to.
quickTitle: Character selector
quickSummary: Character selectors connect scene evidence to the right person for Timeline, continuity and character history.
screenshot:
---
# Overview
Choose an existing character when this scene updates someone already in the project. Create a new character from the scene only when the person should become part of the project record.

View File

@ -0,0 +1,14 @@
---
title: Checklist Completion
category: Scene Inspector
tags: scene inspector, fields, checklist
contextKey: sceneInspector.fields.checklistCompletion
micro: Mark whether a scene task is done.
quickTitle: Checklist completion
quickSummary: Checklist completion tracks practical scene tasks; labels stay editable so the task can evolve.
screenshot:
---
# Overview
Tick a checklist item when the task is complete. Edit the label as the task becomes clearer. Remove items that no longer matter so the checklist stays useful.

View File

@ -0,0 +1,14 @@
---
title: Custodians
category: Scene Inspector
tags: scene inspector, fields, custody, characters
contextKey: sceneInspector.fields.custodians
micro: Choose who has or controls the asset.
quickTitle: Custodians
quickSummary: Custodians identify the characters who possess, guard, control or are responsible for an asset.
screenshot:
---
# Overview
Choose existing characters when possible so continuity can connect custody to character appearances and future actions. Use names only for off-page, unknown or temporary custodians.

View File

@ -0,0 +1,14 @@
---
title: Custody Event Type
category: Scene Inspector
tags: scene inspector, fields, custody
contextKey: sceneInspector.fields.custodyEventType
micro: Describe the custody change for an asset.
quickTitle: Custody event type
quickSummary: Custody event type records possession, transfer, loss, theft, handoff or control of an important asset.
screenshot:
---
# Overview
Choose the custody event that explains who controls the object after this scene. Custody can mean possession, access, responsibility or control, not only legal ownership.

View File

@ -0,0 +1,14 @@
---
title: Custody Role
category: Scene Inspector
tags: scene inspector, fields, custody
contextKey: sceneInspector.fields.custodyRole
micro: Choose how the custodian relates to the asset.
quickTitle: Custody role
quickSummary: Custody role distinguishes holder, owner, guardian, thief, borrower or other control relationship.
screenshot:
---
# Overview
Use role to explain the nature of possession. A character may own a car, borrow a key, steal a letter or guard evidence for someone else.

View File

@ -0,0 +1,14 @@
---
title: Scene Dependency Controls
category: Scene Inspector
tags: scene inspector, fields, dependencies
contextKey: sceneInspector.fields.dependencyControls
micro: Record why scene order matters.
quickTitle: Dependency controls
quickSummary: Dependency controls explain whether this scene relies on another scene, or another scene relies on this one.
screenshot:
---
# Overview
Use direction to express the dependency in plain English, then choose the related scene and type. Mark it hard only when the order is essential for story logic.

View File

@ -0,0 +1,14 @@
---
title: Duration Unit
category: Scene Inspector
tags: scene inspector, fields, time, duration
contextKey: sceneInspector.fields.durationUnit
micro: Choose the unit for the scene's duration.
quickTitle: Duration unit
quickSummary: Duration helps pacing, travel and chronology make sense when scene length matters.
screenshot:
---
# Overview
Use duration when the amount of time consumed by the scene matters. Minutes may matter in a chase; days may matter for travel, recovery or relationship distance.

View File

@ -0,0 +1,14 @@
---
title: Knowledge State
category: Scene Inspector
tags: scene inspector, fields, knowledge, awareness
contextKey: sceneInspector.fields.knowledgeState
micro: Record what the character knows at this point.
quickTitle: Knowledge state
quickSummary: Knowledge state tracks whether a character is unaware, suspicious, partly informed or fully aware.
screenshot:
---
# Overview
Use knowledge state to capture the character's current awareness. This supports mysteries, dramatic irony and warnings when someone acts on information they should not have yet.

View File

@ -0,0 +1,14 @@
---
title: Knowledge Subject
category: Scene Inspector
tags: scene inspector, fields, knowledge
contextKey: sceneInspector.fields.knowledgeSubject
micro: Connect knowledge to an asset or plot thread when relevant.
quickTitle: Knowledge subject
quickSummary: Knowledge subjects explain what the character's awareness is about: an object, clue, secret or plot thread.
screenshot:
---
# Overview
Choose an asset when the knowledge concerns an object or evidence. Choose a plot thread when it concerns a question, secret or storyline. Leave one blank when the knowledge is broader.

View File

@ -0,0 +1,14 @@
---
title: Move Controls
category: Scene Inspector
tags: scene inspector, fields, move, reorder
contextKey: sceneInspector.fields.moveControls
micro: Choose where the scene should move.
quickTitle: Move controls
quickSummary: Move controls preview structural changes before changing the scene's chapter position.
screenshot:
---
# Overview
Choose the target chapter and whether the scene should go at the start or end. Renumber scenes when the chapter order should be cleaned up after the move.

View File

@ -0,0 +1,14 @@
---
title: Scene Note Type
category: Scene Inspector
tags: scene inspector, fields, notes
contextKey: sceneInspector.fields.noteType
micro: Classify a working note by purpose.
quickTitle: Note type
quickSummary: Note type keeps drafting thoughts, research reminders and revision questions easier to scan.
screenshot:
---
# Overview
Use note type to separate kinds of working memory. A research reminder, revision question and drafting idea may all belong to the same scene, but they ask for different follow-up.

View File

@ -0,0 +1,14 @@
---
title: Primary Location
category: Scene Inspector
tags: scene inspector, fields, locations, continuity
contextKey: sceneInspector.fields.primaryLocation
micro: Choose the main place where the scene happens.
quickTitle: Primary location
quickSummary: Primary location anchors the scene for Timeline review, location continuity and travel reasoning.
screenshot:
---
# Overview
Choose the location the reader would treat as the scene's main place. Use asset locations and custody for object-specific placement when the object is elsewhere.

View File

@ -0,0 +1,14 @@
---
title: Relationship Characters
category: Scene Inspector
tags: scene inspector, fields, relationships
contextKey: sceneInspector.fields.relationshipCharacters
micro: Choose the people involved in a relationship event.
quickTitle: Relationship characters
quickSummary: Character A and Character B define the direction of the relationship event.
screenshot:
---
# Overview
Direction matters for one-sided feelings, mistaken trust, secrecy and asymmetrical conflict. Choose the order that best represents whose relationship state is changing.

View File

@ -0,0 +1,14 @@
---
title: Other Character Knows
category: Scene Inspector
tags: scene inspector, fields, relationships, knowledge
contextKey: sceneInspector.fields.relationshipKnown
micro: Mark whether the relationship change is known to the other person.
quickTitle: Other character knows
quickSummary: This is useful for one-sided attraction, secret resentment, hidden loyalty or dramatic irony.
screenshot:
---
# Overview
Tick this when the other character is aware of the relationship state or change. Leave it unticked for hidden feelings, secret betrayal or private assumptions.

View File

@ -0,0 +1,14 @@
---
title: Relationship Selector
category: Scene Inspector
tags: scene inspector, fields, relationships
contextKey: sceneInspector.fields.relationshipSelector
micro: Choose an existing relationship or create one from the event.
quickTitle: Relationship selector
quickSummary: Relationship selector links this scene event to the relationship history it changes.
screenshot:
---
# Overview
Choose an existing relationship if this scene changes a known bond. Create or choose characters only when the relationship does not exist yet. You do not need to fill every relationship field for every event.

View File

@ -0,0 +1,14 @@
---
title: Relationship State
category: Scene Inspector
tags: scene inspector, fields, relationships
contextKey: sceneInspector.fields.relationshipState
micro: Record the relationship's state after this scene.
quickTitle: Relationship state
quickSummary: Relationship state captures the current condition of the bond after the scene's change.
screenshot:
---
# Overview
Use state to mark what has changed: trust, conflict, attraction, estrangement, alliance or another relationship condition. Leave detail in the description only when the nuance matters.

View File

@ -0,0 +1,14 @@
---
title: Relationship Type
category: Scene Inspector
tags: scene inspector, fields, relationships
contextKey: sceneInspector.fields.relationshipType
micro: Identify the kind of relationship being changed.
quickTitle: Relationship type
quickSummary: Relationship type describes the bond: family, friendship, romance, rivalry, mentorship, professional or another category.
screenshot:
---
# Overview
Choose type when the kind of bond matters to the story. It helps later review separate romance beats from professional loyalty, rivalry, family conflict or friendship.

View File

@ -0,0 +1,14 @@
---
title: Scene Revision Status
category: Scene Inspector
tags: scene inspector, fields, revision, workflow
contextKey: sceneInspector.fields.revisionStatus
micro: Mark where this scene is in the writing process.
quickTitle: Revision status
quickSummary: Revision status feeds writing queues, project overview and revision workflow without changing story continuity.
screenshot:
---
# Overview
Use revision status to show whether the scene is planned, drafted, revising, ready or otherwise in progress. It helps workflow views decide what needs attention next.

View File

@ -0,0 +1,14 @@
---
title: Plot Thread Selector
category: Scene Inspector
tags: scene inspector, fields, threads
contextKey: sceneInspector.fields.threadSelector
micro: Choose the plot line and thread this event belongs to.
quickTitle: Thread selector
quickSummary: Thread selectors connect this scene beat to the storyline it starts, develops, twists or resolves.
screenshot:
---
# Overview
Choose the plot line first, then an existing thread if one already carries this question or promise. Create a new thread only when the scene introduces a distinct unresolved concern.

View File

@ -0,0 +1,14 @@
---
title: Thread Event Targets
category: Scene Inspector
tags: scene inspector, fields, threads, branches, merges
contextKey: sceneInspector.fields.threadTarget
micro: Choose target plot lines for branch, split or merge events.
quickTitle: Thread targets
quickSummary: Targets explain where a thread branches, splits or merges so Timeline lanes can show the story shape.
screenshot:
---
# Overview
Use a target plot line when an event creates or joins story lanes. Branch points to a new related lane, split can target several lanes, and merge shows where separate concerns come together.

View File

@ -0,0 +1,14 @@
---
title: Thread Type
category: Scene Inspector
tags: scene inspector, fields, threads
contextKey: sceneInspector.fields.threadType
micro: Classify a new thread by narrative purpose.
quickTitle: Thread type
quickSummary: Thread type helps distinguish mystery questions, relationship arcs, promises, subplots and other unresolved story concerns.
screenshot:
---
# Overview
Use thread type to make later review easier. A mystery thread, emotional promise and relationship subplot may all need different kinds of development and payoff.

View File

@ -0,0 +1,14 @@
---
title: Time Confidence
category: Scene Inspector
tags: scene inspector, fields, time, confidence
contextKey: sceneInspector.fields.timeConfidence
micro: Mark how settled the scene timing is.
quickTitle: Time confidence
quickSummary: Time confidence separates firm chronology from provisional planning.
screenshot:
---
# Overview
Use lower confidence when timing is a placeholder. Use higher confidence when the timing is part of story truth and continuity checks should treat it as reliable.

View File

@ -0,0 +1,16 @@
---
title: Time Mode
category: Scene Inspector
tags: scene inspector, fields, time, continuity
contextKey: sceneInspector.fields.timeMode
micro: Choose how precisely the scene's time is known.
quickTitle: Time mode
quickSummary: Time mode controls whether exact date, exact date-time or relative timing fields are used for chronology and continuity.
screenshot:
---
# Overview
Use exact date-time when hour-level order matters, such as alibis, travel, deadlines or overlapping scenes. Use exact date when the day matters but the hour does not. Use relative or loose timing when the draft only needs "later that night" or "three weeks later".
The visible date and time inputs change with the mode. More precise modes give continuity checks stronger evidence; looser modes are useful while outlining.

View File

@ -0,0 +1,14 @@
---
title: Update Current Location
category: Scene Inspector
tags: scene inspector, fields, assets, locations
contextKey: sceneInspector.fields.updateAssetLocation
micro: Decide whether this scene should become the asset's current location.
quickTitle: Update current location
quickSummary: Tick this when the scene establishes the asset's new last-known location for future continuity.
screenshot:
---
# Overview
Leave this ticked when the object really moves or is confirmed here. Untick it when the scene only mentions a past location or hypothetical location.

View File

@ -0,0 +1,14 @@
---
title: Warning Actions
category: Scene Inspector
tags: scene inspector, fields, warnings
contextKey: sceneInspector.fields.warningActions
micro: Decide how to handle a continuity warning.
quickTitle: Warning actions
quickSummary: Validate, dismiss and intentional actions help you investigate warnings without losing deliberate story choices.
screenshot:
---
# Overview
Validate after major scene changes. Dismiss a warning when it is no longer useful. Mark intentional when the apparent contradiction is a deliberate author choice you still want recorded.

View File

@ -0,0 +1,14 @@
---
title: Writer Blocked
category: Scene Inspector
tags: scene inspector, fields, writer workspace, blockers
contextKey: sceneInspector.fields.writerBlocked
micro: Mark a scene as blocked when writing cannot proceed normally.
quickTitle: Blocked scene
quickSummary: Blocked scenes can be surfaced in writing workflow so you can resolve the reason before drafting.
screenshot:
---
# Overview
Tick Blocked when the scene needs research, a plot decision, continuity repair or another dependency before it can move forward. Use the reason field to name the obstacle.

View File

@ -0,0 +1,14 @@
---
title: Writer Priority
category: Scene Inspector
tags: scene inspector, fields, writer workspace
contextKey: sceneInspector.fields.writerPriority
micro: Set how urgent this scene is for drafting or revision.
quickTitle: Writer priority
quickSummary: Priority helps writing queues and project workflow surface the scenes that need attention first.
screenshot:
---
# Overview
Use higher priority for blocked structural scenes, scenes needed before others can be drafted, or revision work that unlocks the next pass.

View File

@ -37,6 +37,12 @@ Reader knowledge is separate from character knowledge. If the reader knows the v
Use knowledge events for reveals, discoveries, corrected assumptions, regressions and secrets changing hands. Continuity warnings can then help find scenes where a character acts on information they should not yet have, or fails to know something they already learned.
# Mystery And Dramatic Irony
Knowledge is especially useful for mysteries, thrillers, conspiracies and romance secrets. It lets you separate what the reader knows from what each character knows. That makes fair clues, hidden motives, mistaken beliefs and delayed reveals much easier to audit.
You do not need to record every fact. Track knowledge when it changes what a character can reasonably say, suspect, hide, reveal or act on.
# Related Guides
- [Continuity Warnings](/Help/Article/warnings.overview)

View File

@ -15,6 +15,12 @@ Asset locations record where an important object is during this scene. Use them
This is useful for hidden evidence, parked vehicles, locked rooms, documents left on a desk or objects that can be found later.
# Movement And Last Known Location
When you update an asset's current location, this scene becomes evidence for where the object should be after this point. That helps future continuity checks catch objects that appear somewhere else without a recorded move.
If the scene only mentions an old location, do not update current location. Use the description to explain the reference instead.
# Related Guides
- [Assets](/Help/Article/sceneInspector.assets)

View File

@ -0,0 +1,22 @@
---
title: Move and Reorder
category: Scene Inspector
tags: scene inspector, move, reorder, structure
contextKey: sceneInspector.move
micro: Move a scene while preserving its planning links.
quickTitle: Move and reorder
quickSummary: Move and reorder controls help restructure chapters while keeping scene-linked characters, threads, assets, metrics and warnings with the scene.
screenshot:
---
# Overview
Move and Reorder is for structural editing. Use it when a scene belongs in a different chapter or should sit at the start or end of the current chapter.
Moving a scene does not mean rewriting its planning data. The scene keeps its characters, assets, plot thread events, metrics, notes, warnings and attachments. After moving, review chronology, dependencies and continuity warnings because the same event may now occur at a different point in the story.
# Related Guides
- [Timeline](/Help/Article/timeline.overview)
- [Scene Dependencies](/Help/Article/sceneInspector.dependencies)
- [Continuity Warnings](/Help/Article/sceneInspector.warnings)

View File

@ -29,6 +29,12 @@ Intensity records relationship strength. A low-intensity rivalry might be irrita
Use events when the relationship state changes in this scene. This helps you see whether a breakup has setup, whether forgiveness arrives too quickly, or whether a character behaves as if a relationship has changed before the scene that actually changes it.
# How Much To Fill In
You do not need to populate every field for every relationship event. If the scene only nudges an existing friendship, choose the relationship and state. If the scene creates a new bond, choose the characters and type. If one person knows and the other does not, use direction and knowledge deliberately.
The goal is to capture meaningful relationship movement, not to turn every conversation into admin.
# Related Guides
- [Characters](/Help/Article/characters.overview)

View File

@ -19,6 +19,12 @@ Use importance to show how central a thread is. Use lifecycle events to show whe
Thread events prevent story promises from becoming invisible. If a clue is planted, mark it. If the reader receives a reveal, mark it. If a subplot is intentionally abandoned, mark that too so thread health knows the silence is deliberate.
# Thread Health
Thread health uses the pattern of events to highlight possible neglected, dangling, questionable or abandoned threads. These are prompts for revision, not automatic mistakes.
For example, a clue thread that starts in chapter two and then disappears for ten scenes may be a deliberate slow burn, or it may be a forgotten promise. Marking progress, reveal, merge, resolve or abandon events helps the Timeline show the difference.
# Related Guides
- [Plot Thread Lanes](/Help/Article/timeline.plotThreadLanes)

View File

@ -15,6 +15,20 @@ Time fields tell PlotDirector when a scene happens. Use exact dates when chronol
Accurate time helps continuity checks find impossible sequences, age issues, travel gaps and story events that happen in the wrong order.
# Time Modes
Exact date-time is best when hours or minutes matter: alibis, overlapping scenes, travel deadlines, injuries, messages, curfews or timed reveals.
Exact date is best when the day matters but the hour does not. This is often enough for birthdays, school days, public events, journeys or multi-day investigations.
Relative or loose timing is useful while planning. "Later that night" may be more helpful than a precise date during early drafting.
The visible date and time fields change depending on the mode. More precise timing gives Timeline, age checks and continuity validation stronger evidence. Looser timing keeps the outline flexible.
# Writer Tip
Do not force precision too early. Use exact timing when the story depends on it; otherwise use confidence and relative time to show that the chronology is still being shaped.
# Related Guides
- [Continuity Warnings](/Help/Article/warnings.overview)

View File

@ -14,3 +14,13 @@ screenshot:
Warnings are prompts for review. They point to places where PlotDirector's recorded evidence suggests something may be missing, contradictory or worth checking.
Dismiss a warning when it is no longer useful. Mark it intentional when the apparent contradiction is a deliberate author choice.
# How Warnings Are Generated
Warnings are generated from recorded story evidence: scene order, time, characters, assets, custody, locations, knowledge, dependencies and related continuity data. A warning usually means either the story has a contradiction or PlotDirector needs more evidence to understand the intended logic.
Severity helps triage. Investigate high-severity warnings first, then review lower-severity prompts during cleanup passes.
# Investigation Workflow
Read the warning, inspect the scene data, then decide whether to fix the underlying story evidence, add missing detail, dismiss the warning or mark it intentional.

View File

@ -14,3 +14,9 @@ screenshot:
Writer Workspace fields are practical drafting tools. They help you decide what to write next, estimate effort, record progress and mark blockers.
These fields do not change story continuity. They support the working process around the scene.
# How It Connects
Writer Workspace information can support project overview, writing progress, revision workflow, writing plans and Word Companion workflows. Use it to record whether the scene is ready to draft, blocked, in revision, or already worked on.
Priority and blockers help surface what needs attention. Word counts and worked-on dates help progress tracking. Revision status belongs with the scene because it describes the scene's writing state.

View File

@ -0,0 +1,14 @@
---
title: Timeline Chapter Range
category: Timeline
tags: timeline, fields, filters, chapters
contextKey: timeline.fields.chapterRange
micro: Limit the Timeline to a chapter span.
quickTitle: Chapter range
quickSummary: Chapter range filters show only the selected structural span while keeping matching context inside that range.
screenshot:
---
# Overview
Use chapter range filters when you are reviewing one act, sequence or revision pass rather than the whole book. Scenes outside the selected chapter span are hidden from the filtered view; the story data itself is unchanged.

View File

@ -0,0 +1,14 @@
---
title: Timeline Density
category: Timeline
tags: timeline, fields, density, view
contextKey: timeline.fields.density
micro: Choose how compact the Timeline appears.
quickTitle: Density
quickSummary: Density changes how much space each scene card and lane uses without changing story data.
screenshot:
---
# Overview
Use compact density for scanning a large book. Use expanded density when you need more readable scene summaries and lane detail.

View File

@ -0,0 +1,14 @@
---
title: Timeline Asset Dependency Drop
category: Timeline
tags: timeline, fields, assets, dependencies, drag drop
contextKey: timeline.fields.dragAssetDependency
micro: Connect two assets when one depends on the other.
quickTitle: Asset dependency drop
quickSummary: Asset dependency fields describe how one asset's state affects another object's availability or meaning.
screenshot:
---
# Overview
Use dependencies for linked objects: a key unlocks a box, a document validates a clue, a battery powers a device, or evidence blocks a false alibi.

View File

@ -0,0 +1,14 @@
---
title: Timeline Asset Drop Event
category: Timeline
tags: timeline, fields, assets, drag drop
contextKey: timeline.fields.dragAssetEvent
micro: Record what happens to a dropped asset in the scene.
quickTitle: Dropped asset event
quickSummary: Asset drop fields turn a quick Timeline action into continuity evidence for object state, location and custody.
screenshot:
---
# Overview
Use event type to describe what happens to the object. Use state transition when its story condition changes, such as hidden to found, intact to damaged, or unknown to revealed.

View File

@ -0,0 +1,14 @@
---
title: Timeline Character Drop Role
category: Timeline
tags: timeline, fields, characters, drag drop
contextKey: timeline.fields.dragCharacterRole
micro: Choose how a dropped character participates in the scene.
quickTitle: Dropped character role
quickSummary: Role and presence decide whether a character is a POV, main participant, background presence or mentioned figure.
screenshot:
---
# Overview
When dropping a character onto a scene, choose role and presence to record how the scene uses them. This affects character lanes, POV review and continuity.

View File

@ -0,0 +1,14 @@
---
title: Timeline Location Relationship Drop
category: Timeline
tags: timeline, fields, locations, drag drop
contextKey: timeline.fields.dragLocationRelationship
micro: Describe how two locations connect.
quickTitle: Location relationship drop
quickSummary: Location relationship fields help continuity understand hearing, visibility and travel between places.
screenshot:
---
# Overview
Use these fields when spatial relationships matter. If two rooms share a wall, a hallway connects them, or a character can hear through a door, the relationship can support later continuity reasoning.

View File

@ -0,0 +1,14 @@
---
title: Timeline Jump Controls
category: Timeline
tags: timeline, fields, jump, navigation
contextKey: timeline.fields.jumpControls
micro: Move quickly to scenes, warnings or lane items.
quickTitle: Jump controls
quickSummary: Jump controls are navigation shortcuts for large timelines; they do not change filters or story data.
screenshot:
---
# Overview
Use scene jump when you know the scene. Use warning jump during continuity review. Use lane item jump when you want the first visible occurrence of a character, asset or plot line.

View File

@ -0,0 +1,14 @@
---
title: Timeline Location Filter
category: Timeline
tags: timeline, fields, filters, locations
contextKey: timeline.fields.locationFilter
micro: Show scenes connected to a location.
quickTitle: Location filter
quickSummary: Location filters help you follow where scenes happen and where continuity may depend on place.
screenshot:
---
# Overview
Use the location filter when geography matters: who could hear something, whether a character can travel in time, or where an asset was last seen. Matching scenes remain visible; unrelated scenes are dimmed or hidden by the current filter lens.

View File

@ -0,0 +1,14 @@
---
title: Timeline POV Character Filter
category: Timeline
tags: timeline, fields, pov, characters
contextKey: timeline.fields.povCharacter
micro: Focus on scenes told through a point-of-view character.
quickTitle: POV character
quickSummary: POV filters help you review viewpoint balance, character access to information and reader experience.
screenshot:
---
# Overview
Use the POV character filter to review who is carrying the reader through the story. It is especially useful for multi-POV books, mysteries where knowledge is limited, and scenes where reader access matters.

View File

@ -0,0 +1,14 @@
---
title: Timeline Revision Status Filter
category: Timeline
tags: timeline, fields, revision, filters
contextKey: timeline.fields.revisionStatus
micro: Focus the Timeline by drafting or revision state.
quickTitle: Revision status
quickSummary: Revision status filters help you review scenes that are planned, drafted, revised or ready.
screenshot:
---
# Overview
Use revision status filters to plan work. For example, show only outline scenes before drafting, or show only revision-needed scenes before a polishing pass.

View File

@ -0,0 +1,14 @@
---
title: Timeline Scene Purpose Filter
category: Timeline
tags: timeline, fields, scene purpose, filters
contextKey: timeline.fields.scenePurpose
micro: Show scenes with a particular narrative job.
quickTitle: Scene purpose
quickSummary: Purpose filters help you find reveals, payoffs, transitions, action beats or relationship scenes.
screenshot:
---
# Overview
Use purpose filters to inspect story balance. If a section has too many setup scenes and not enough payoff, or if relationship development disappears, this filter helps you see it.

View File

@ -0,0 +1,14 @@
---
title: Timeline Scene Range
category: Timeline
tags: timeline, fields, filters, scenes
contextKey: timeline.fields.sceneRange
micro: Limit the Timeline to a scene span.
quickTitle: Scene range
quickSummary: Scene range filters help you inspect a tight run of scenes without changing the story order.
screenshot:
---
# Overview
Use scene range filters for close revision: a chase sequence, a clue chain, a relationship turn or the run-up to a chapter ending. Scenes outside the range are hidden only for the current Timeline view.

View File

@ -0,0 +1,14 @@
---
title: Timeline Warning Options
category: Timeline
tags: timeline, fields, warnings, filters
contextKey: timeline.fields.warningOptions
micro: Choose which warning states appear in the Timeline.
quickTitle: Warning options
quickSummary: Warning options let you include only active warnings or also review dismissed and intentional warnings.
screenshot:
---
# Overview
Use "Warnings only" for a continuity pass. Include dismissed warnings when you want to audit old decisions. Include intentional warnings when a contradiction is deliberate but still worth seeing in context.

View File

@ -0,0 +1,14 @@
---
title: Timeline Warning Severity Filter
category: Timeline
tags: timeline, fields, warnings, filters
contextKey: timeline.fields.warningSeverity
micro: Focus on warnings by seriousness.
quickTitle: Warning severity
quickSummary: Severity filters help you review critical continuity issues before lower-risk reminders.
screenshot:
---
# Overview
Use severity when you want to triage warnings. High-severity warnings usually deserve attention before smaller consistency prompts. The filter changes the warning review lens, not the underlying warnings.

View File

@ -0,0 +1,14 @@
---
title: Timeline Warning Type Filter
category: Timeline
tags: timeline, fields, warnings, filters
contextKey: timeline.fields.warningType
micro: Focus on one kind of continuity issue.
quickTitle: Warning type
quickSummary: Warning type filters help you review one class of continuity issue at a time.
screenshot:
---
# Overview
Use warning type when you are doing a targeted pass, such as locations, asset custody, knowledge, age or unresolved threads. This keeps the review focused and reduces noise.

View File

@ -0,0 +1,14 @@
---
title: Timeline Zoom
category: Timeline
tags: timeline, fields, zoom, view
contextKey: timeline.fields.zoom
micro: Choose the level of Timeline detail.
quickTitle: Zoom
quickSummary: Zoom changes whether the Timeline feels like a book overview, chapter review or scene-level inspection.
screenshot:
---
# Overview
Use book zoom to see overall shape, chapter zoom for structural review, and scene detail when you are checking individual beats.

View File

@ -116,7 +116,7 @@
<input asp-for="SceneNumber" class="form-control form-control-sm" />
</div>
<div class="col-8">
<label asp-for="RevisionStatusID" class="form-label"></label>
<label asp-for="RevisionStatusID" class="form-label">Revision status <help-icon key="sceneInspector.fields.revisionStatus" mode="inline" /></label>
<select asp-for="RevisionStatusID" asp-items="Model.RevisionStatuses" class="form-select form-select-sm"></select>
</div>
<div class="col-12">
@ -129,7 +129,7 @@
<textarea asp-for="Summary" class="form-control" rows="4"></textarea>
</div>
<div class="col-12">
<label asp-for="PrimaryLocationID" class="form-label"></label>
<label asp-for="PrimaryLocationID" class="form-label">Primary location <help-icon key="sceneInspector.fields.primaryLocation" mode="inline" /></label>
<select asp-for="PrimaryLocationID" asp-items="Model.LocationOptions" class="form-select form-select-sm">
<option value="">No primary location</option>
</select>
@ -152,11 +152,11 @@
<h4 class="inspector-subheading">Time</h4>
<div class="row g-2">
<div class="col-sm-6">
<label asp-for="TimeModeID" class="form-label">Time mode <help-icon key="sceneInspector.time" mode="inline" /></label>
<label asp-for="TimeModeID" class="form-label">Time mode <help-icon key="sceneInspector.fields.timeMode" mode="inline" /></label>
<select asp-for="TimeModeID" asp-items="Model.TimeModes" class="form-select form-select-sm"></select>
</div>
<div class="col-sm-6">
<label asp-for="TimeConfidenceID" class="form-label">Time confidence <help-icon key="sceneInspector.time" mode="inline" /></label>
<label asp-for="TimeConfidenceID" class="form-label">Time confidence <help-icon key="sceneInspector.fields.timeConfidence" mode="inline" /></label>
<select asp-for="TimeConfidenceID" asp-items="Model.TimeConfidences" class="form-select form-select-sm"></select>
</div>
<div class="col-12">
@ -186,7 +186,7 @@
<input asp-for="DurationAmount" class="form-control form-control-sm" />
</div>
<div class="col-sm-8">
<label asp-for="DurationUnitID" class="form-label"></label>
<label asp-for="DurationUnitID" class="form-label">Duration unit <help-icon key="sceneInspector.fields.durationUnit" mode="inline" /></label>
<select asp-for="DurationUnitID" asp-items="Model.DurationUnits" class="form-select form-select-sm">
<option value="">Not set</option>
</select>
@ -311,6 +311,7 @@
<input type="hidden" name="SceneID" value="@Model.SceneID" />
<input type="hidden" name="ReturnProjectID" value="@Model.ReturnProjectID" />
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<label class="form-label mb-0">Note type <help-icon key="sceneInspector.fields.noteType" mode="inline" /></label>
<select class="form-select form-select-sm" name="SceneNoteTypeID">
@foreach (var option in Model.SceneNoteTypeOptions)
{
@ -342,6 +343,7 @@
<input type="hidden" name="SceneID" value="@Model.SceneID" />
<input type="hidden" name="ReturnProjectID" value="@Model.ReturnProjectID" />
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<label class="form-label mb-0">Note type <help-icon key="sceneInspector.fields.noteType" mode="inline" /></label>
<select class="form-select form-select-sm" name="SceneNoteTypeID" asp-items="Model.SceneNoteTypeOptions"></select>
<input class="form-control form-control-sm" name="NoteTitle" placeholder="Optional title" />
<textarea class="form-control form-control-sm" name="NoteText" rows="3" placeholder="Add a drafting, revision, research, or TODO note"></textarea>
@ -403,7 +405,7 @@
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<div class="row g-2">
<div class="col-6">
<label class="form-label" for="RoleInSceneTypeID-@character.SceneCharacterID">Role</label>
<label class="form-label" for="RoleInSceneTypeID-@character.SceneCharacterID">Role <help-icon key="sceneInspector.fields.characterRole" mode="inline" /></label>
<select class="form-select form-select-sm" id="RoleInSceneTypeID-@character.SceneCharacterID" name="RoleInSceneTypeID">
<option value="">Not set</option>
@foreach (var option in Model.CharacterRoleOptions)
@ -413,7 +415,7 @@
</select>
</div>
<div class="col-6">
<label class="form-label" for="PresenceTypeID-@character.SceneCharacterID">Presence</label>
<label class="form-label" for="PresenceTypeID-@character.SceneCharacterID">Presence <help-icon key="sceneInspector.fields.characterPresence" mode="inline" /></label>
<select class="form-select form-select-sm" id="PresenceTypeID-@character.SceneCharacterID" name="PresenceTypeID">
<option value="">Not set</option>
@foreach (var option in Model.PresenceTypeOptions)
@ -423,7 +425,7 @@
</select>
</div>
<div class="col-12">
<label class="form-label" for="CharacterLocationID-@character.SceneCharacterID">Current location</label>
<label class="form-label" for="CharacterLocationID-@character.SceneCharacterID">Current location <help-icon key="sceneInspector.fields.characterLocation" mode="inline" /></label>
<select class="form-select form-select-sm" id="CharacterLocationID-@character.SceneCharacterID" name="LocationID">
<option value="">Not set</option>
@foreach (var option in Model.LocationOptions)
@ -433,7 +435,7 @@
</select>
</div>
<div class="col-6">
<label class="form-label" for="EntryLocationID-@character.SceneCharacterID">Enters from</label>
<label class="form-label" for="EntryLocationID-@character.SceneCharacterID">Enters from <help-icon key="sceneInspector.fields.characterLocation" mode="inline" /></label>
<select class="form-select form-select-sm" id="EntryLocationID-@character.SceneCharacterID" name="EntryLocationID">
<option value="">Not set</option>
@foreach (var option in Model.LocationOptions)
@ -443,7 +445,7 @@
</select>
</div>
<div class="col-6">
<label class="form-label" for="ExitLocationID-@character.SceneCharacterID">Exits to</label>
<label class="form-label" for="ExitLocationID-@character.SceneCharacterID">Exits to <help-icon key="sceneInspector.fields.characterLocation" mode="inline" /></label>
<select class="form-select form-select-sm" id="ExitLocationID-@character.SceneCharacterID" name="ExitLocationID">
<option value="">Not set</option>
@foreach (var option in Model.LocationOptions)
@ -492,7 +494,7 @@
}
<div class="row g-2">
<div class="col-12">
<label class="form-label" for="CharacterID">Character</label>
<label class="form-label" for="CharacterID">Character <help-icon key="sceneInspector.fields.characterSelector" mode="inline" /></label>
<select class="form-select form-select-sm" id="CharacterID" name="CharacterID" asp-items="Model.CharacterOptions">
<option value="">Create or choose a character</option>
</select>
@ -502,31 +504,31 @@
<input class="form-control form-control-sm" id="NewCharacterName" name="NewCharacterName" placeholder="Optional" />
</div>
<div class="col-6">
<label class="form-label" for="RoleInSceneTypeID">Role</label>
<label class="form-label" for="RoleInSceneTypeID">Role <help-icon key="sceneInspector.fields.characterRole" mode="inline" /></label>
<select class="form-select form-select-sm" id="RoleInSceneTypeID" name="RoleInSceneTypeID" asp-items="Model.CharacterRoleOptions">
<option value="">Not set</option>
</select>
</div>
<div class="col-6">
<label class="form-label" for="PresenceTypeID">Presence</label>
<label class="form-label" for="PresenceTypeID">Presence <help-icon key="sceneInspector.fields.characterPresence" mode="inline" /></label>
<select class="form-select form-select-sm" id="PresenceTypeID" name="PresenceTypeID" asp-items="Model.PresenceTypeOptions">
<option value="">Not set</option>
</select>
</div>
<div class="col-12">
<label class="form-label" for="CharacterLocationID">Current location</label>
<label class="form-label" for="CharacterLocationID">Current location <help-icon key="sceneInspector.fields.characterLocation" mode="inline" /></label>
<select class="form-select form-select-sm" id="CharacterLocationID" name="LocationID" asp-items="Model.LocationOptions">
<option value="">Not set</option>
</select>
</div>
<div class="col-6">
<label class="form-label" for="EntryLocationID">Enters from</label>
<label class="form-label" for="EntryLocationID">Enters from <help-icon key="sceneInspector.fields.characterLocation" mode="inline" /></label>
<select class="form-select form-select-sm" id="EntryLocationID" name="EntryLocationID" asp-items="Model.LocationOptions">
<option value="">Not set</option>
</select>
</div>
<div class="col-6">
<label class="form-label" for="ExitLocationID">Exits to</label>
<label class="form-label" for="ExitLocationID">Exits to <help-icon key="sceneInspector.fields.characterLocation" mode="inline" /></label>
<select class="form-select form-select-sm" id="ExitLocationID" name="ExitLocationID" asp-items="Model.LocationOptions">
<option value="">Not set</option>
</select>
@ -573,12 +575,15 @@
}
<div class="row g-2">
<div class="col-12">
<label class="form-label mb-1">Character <help-icon key="sceneInspector.fields.characterSelector" mode="inline" /></label>
<select class="form-select form-select-sm" name="CharacterID" asp-items="Model.CharacterOptions"></select>
</div>
<div class="col-12">
<label class="form-label mb-1">Attribute type <help-icon key="sceneInspector.fields.attributeType" mode="inline" /></label>
<select class="form-select form-select-sm" name="CharacterAttributeTypeID" asp-items="Model.CharacterAttributeTypeOptions"></select>
</div>
<div class="col-12">
<label class="form-label mb-1">Attribute value <help-icon key="sceneInspector.fields.attributeValue" mode="inline" /></label>
<input class="form-control form-control-sm" name="AttributeValue" placeholder="Value, e.g. Bruised ribs" />
</div>
<div class="col-12">
@ -618,18 +623,20 @@
<input type="hidden" name="ReturnProjectID" value="@Model.ReturnProjectID" />
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<div class="row g-2">
<div class="col-12"><select class="form-select form-select-sm" name="CharacterID" asp-items="Model.CharacterOptions"></select></div>
<div class="col-12"><label class="form-label mb-1">Character <help-icon key="sceneInspector.fields.characterSelector" mode="inline" /></label><select class="form-select form-select-sm" name="CharacterID" asp-items="Model.CharacterOptions"></select></div>
<div class="col-12">
<label class="form-label mb-1">Related asset <help-icon key="sceneInspector.fields.knowledgeSubject" mode="inline" /></label>
<select class="form-select form-select-sm" name="StoryAssetID" asp-items="Model.AssetOptions">
<option value="">No asset</option>
</select>
</div>
<div class="col-12">
<label class="form-label mb-1">Related plot thread <help-icon key="sceneInspector.fields.knowledgeSubject" mode="inline" /></label>
<select class="form-select form-select-sm" name="PlotThreadID" asp-items="Model.PlotThreadOptions">
<option value="">No plot thread</option>
</select>
</div>
<div class="col-12"><select class="form-select form-select-sm" name="KnowledgeStateID" asp-items="Model.KnowledgeStateOptions"></select></div>
<div class="col-12"><label class="form-label mb-1">Knowledge state <help-icon key="sceneInspector.fields.knowledgeState" mode="inline" /></label><select class="form-select form-select-sm" name="KnowledgeStateID" asp-items="Model.KnowledgeStateOptions"></select></div>
<div class="col-12"><textarea class="form-control form-control-sm" name="Description" rows="2" placeholder="Description"></textarea></div>
</div>
<button class="btn btn-outline-primary btn-sm mt-2" type="submit">Add knowledge</button>
@ -675,15 +682,16 @@
else
{
<div class="col-12">
<label class="form-label mb-1">Relationship <help-icon key="sceneInspector.fields.relationshipSelector" mode="inline" /></label>
<select class="form-select form-select-sm" name="CharacterRelationshipID" asp-items="Model.RelationshipOptions">
<option value="">Create or choose relationship</option>
</select>
</div>
}
<div class="col-6"><select class="form-select form-select-sm" name="CharacterAID" asp-items="Model.CharacterOptions"><option value="">Character A</option></select></div>
<div class="col-6"><select class="form-select form-select-sm" name="CharacterBID" asp-items="Model.CharacterOptions"><option value="">Character B</option></select></div>
<div class="col-12"><select class="form-select form-select-sm" name="RelationshipTypeID" asp-items="Model.RelationshipTypeOptions"><option value="">Relationship type</option></select></div>
<div class="col-8"><select class="form-select form-select-sm" name="RelationshipStateID" asp-items="Model.RelationshipStateOptions"></select></div>
<div class="col-6"><label class="form-label mb-1">Character A <help-icon key="sceneInspector.fields.relationshipCharacters" mode="inline" /></label><select class="form-select form-select-sm" name="CharacterAID" asp-items="Model.CharacterOptions"><option value="">Character A</option></select></div>
<div class="col-6"><label class="form-label mb-1">Character B <help-icon key="sceneInspector.fields.relationshipCharacters" mode="inline" /></label><select class="form-select form-select-sm" name="CharacterBID" asp-items="Model.CharacterOptions"><option value="">Character B</option></select></div>
<div class="col-12"><label class="form-label mb-1">Relationship type <help-icon key="sceneInspector.fields.relationshipType" mode="inline" /></label><select class="form-select form-select-sm" name="RelationshipTypeID" asp-items="Model.RelationshipTypeOptions"><option value="">Relationship type</option></select></div>
<div class="col-8"><label class="form-label mb-1">Relationship state <help-icon key="sceneInspector.fields.relationshipState" mode="inline" /></label><select class="form-select form-select-sm" name="RelationshipStateID" asp-items="Model.RelationshipStateOptions"></select></div>
<div class="col-4">
<label class="form-label">Intensity <output>5</output> <help-icon key="sceneInspector.fields.relationshipIntensity" mode="inline" /></label>
<input class="form-range" name="Intensity" type="range" min="1" max="10" step="1" value="5" oninput="this.previousElementSibling.querySelector('output').value = this.value" />
@ -691,7 +699,7 @@
<div class="col-12">
<label class="form-check">
<input class="form-check-input" name="IsKnownToOtherCharacter" type="checkbox" value="true" />
<span class="form-check-label">Other character knows</span>
<span class="form-check-label">Other character knows <help-icon key="sceneInspector.fields.relationshipKnown" mode="inline" /></span>
</label>
</div>
<div class="col-12"><textarea class="form-control form-control-sm" name="Description" rows="2" placeholder="Description"></textarea></div>
@ -758,7 +766,7 @@
<div class="form-text">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.</div>
</div>
<div class="col-12" data-plot-event-target="branch">
<label class="form-label" for="TargetPlotLineID-@threadEvent.ThreadEventID">Target plot line</label>
<label class="form-label" for="TargetPlotLineID-@threadEvent.ThreadEventID">Target plot line <help-icon key="sceneInspector.fields.threadTarget" mode="inline" /></label>
<select class="form-select form-select-sm" id="TargetPlotLineID-@threadEvent.ThreadEventID" name="TargetPlotLineID" data-thread-event-target-single>
<option value="">Choose target plot line</option>
@foreach (var plotLine in Model.PlotLineEventOptions)
@ -775,7 +783,7 @@
</select>
</div>
<div class="col-12" data-plot-event-target="merge">
<label class="form-label" for="MergeTargetPlotLineID-@threadEvent.ThreadEventID">Merge into plot line</label>
<label class="form-label" for="MergeTargetPlotLineID-@threadEvent.ThreadEventID">Merge into plot line <help-icon key="sceneInspector.fields.threadTarget" mode="inline" /></label>
<select class="form-select form-select-sm" id="MergeTargetPlotLineID-@threadEvent.ThreadEventID" data-thread-event-target-merge>
<option value="">Choose merge target</option>
@foreach (var plotLine in Model.PlotLineEventOptions)
@ -792,7 +800,7 @@
</select>
</div>
<div class="col-12" data-plot-event-target="split">
<label class="form-label" for="SelectedTargetPlotLineIDs-@threadEvent.ThreadEventID">Target plot lines</label>
<label class="form-label" for="SelectedTargetPlotLineIDs-@threadEvent.ThreadEventID">Target plot lines <help-icon key="sceneInspector.fields.threadTarget" mode="inline" /></label>
<select class="form-select form-select-sm" id="SelectedTargetPlotLineIDs-@threadEvent.ThreadEventID" name="SelectedTargetPlotLineIDs" multiple size="4" data-thread-event-target-split>
@foreach (var plotLine in Model.PlotLineEventOptions)
{
@ -852,7 +860,7 @@
<div class="row g-2">
<div class="col-12">
<label class="form-label" for="PlotLineID">Plot line</label>
<label class="form-label" for="PlotLineID">Plot line <help-icon key="sceneInspector.fields.threadSelector" mode="inline" /></label>
<select class="form-select form-select-sm" id="PlotLineID" name="PlotLineID" data-thread-event-source-plot-line>
<option value="">Choose plot line</option>
@foreach (var plotLine in Model.PlotLineEventOptions)
@ -862,7 +870,7 @@
</select>
</div>
<div class="col-12">
<label class="form-label" for="PlotThreadID">Existing plot thread</label>
<label class="form-label" for="PlotThreadID">Existing plot thread <help-icon key="sceneInspector.fields.threadSelector" mode="inline" /></label>
<select class="form-select form-select-sm" id="PlotThreadID" name="PlotThreadID" data-thread-event-source-thread>
<option value="">Create or choose a thread</option>
@foreach (var plotThread in Model.PlotThreadEventOptions)
@ -876,7 +884,7 @@
<input class="form-control form-control-sm" id="NewThreadTitle" name="NewThreadTitle" placeholder="Optional" />
</div>
<div class="col-4" data-thread-event-new-thread-field>
<label class="form-label" for="NewThreadTypeID">Thread type</label>
<label class="form-label" for="NewThreadTypeID">Thread type <help-icon key="sceneInspector.fields.threadType" mode="inline" /></label>
<select class="form-select form-select-sm" id="NewThreadTypeID" name="NewThreadTypeID" asp-items="Model.ThreadTypeOptions">
<option value="">Default</option>
</select>
@ -900,7 +908,7 @@
<div class="form-text">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.</div>
</div>
<div class="col-12" data-plot-event-target="branch">
<label class="form-label" for="TargetPlotLineID">Target plot line</label>
<label class="form-label" for="TargetPlotLineID">Target plot line <help-icon key="sceneInspector.fields.threadTarget" mode="inline" /></label>
<select class="form-select form-select-sm" id="TargetPlotLineID" name="TargetPlotLineID" data-thread-event-target-single>
<option value="">Choose target plot line</option>
@foreach (var plotLine in Model.PlotLineEventOptions)
@ -910,7 +918,7 @@
</select>
</div>
<div class="col-12" data-plot-event-target="merge">
<label class="form-label" for="MergeTargetPlotLineID">Merge into plot line</label>
<label class="form-label" for="MergeTargetPlotLineID">Merge into plot line <help-icon key="sceneInspector.fields.threadTarget" mode="inline" /></label>
<select class="form-select form-select-sm" id="MergeTargetPlotLineID" data-thread-event-target-merge>
<option value="">Choose merge target</option>
@foreach (var plotLine in Model.PlotLineEventOptions)
@ -920,7 +928,7 @@
</select>
</div>
<div class="col-12" data-plot-event-target="split">
<label class="form-label" for="SelectedTargetPlotLineIDs">Target plot lines</label>
<label class="form-label" for="SelectedTargetPlotLineIDs">Target plot lines <help-icon key="sceneInspector.fields.threadTarget" mode="inline" /></label>
<select class="form-select form-select-sm" id="SelectedTargetPlotLineIDs" name="SelectedTargetPlotLineIDs" multiple size="4" data-thread-event-target-split>
@foreach (var plotLine in Model.PlotLineEventOptions)
{
@ -1054,7 +1062,7 @@
<div class="row g-2">
<div class="col-12">
<label class="form-label" for="StoryAssetID">Asset</label>
<label class="form-label" for="StoryAssetID">Asset <help-icon key="sceneInspector.fields.assetSelector" mode="inline" /></label>
<select class="form-select form-select-sm" id="StoryAssetID" name="StoryAssetID" asp-items="Model.AssetOptions">
<option value="">Create or choose an asset</option>
</select>
@ -1064,21 +1072,21 @@
<input class="form-control form-control-sm" id="NewAssetName" name="NewAssetName" placeholder="Optional" />
</div>
<div class="col-4">
<label class="form-label" for="NewAssetKindID">Kind</label>
<label class="form-label" for="NewAssetKindID">Kind <help-icon key="sceneInspector.fields.assetKind" mode="inline" /></label>
<select class="form-select form-select-sm" id="NewAssetKindID" name="NewAssetKindID" asp-items="Model.AssetKindOptions"></select>
</div>
<div class="col-12">
<label class="form-label" for="AssetEventTypeID">Event type <help-icon key="sceneInspector.assets" mode="inline" /></label>
<label class="form-label" for="AssetEventTypeID">Event type <help-icon key="sceneInspector.fields.assetEventType" mode="inline" /></label>
<select class="form-select form-select-sm" id="AssetEventTypeID" name="AssetEventTypeID" asp-items="Model.AssetEventTypeOptions"></select>
</div>
<div class="col-6">
<label class="form-label" for="FromStateID">From state</label>
<label class="form-label" for="FromStateID">From state <help-icon key="sceneInspector.fields.assetState" mode="inline" /></label>
<select class="form-select form-select-sm" id="FromStateID" name="FromStateID" asp-items="Model.AssetStateOptions">
<option value="">Any</option>
</select>
</div>
<div class="col-6">
<label class="form-label" for="ToStateID">To state</label>
<label class="form-label" for="ToStateID">To state <help-icon key="sceneInspector.fields.assetState" mode="inline" /></label>
<select class="form-select form-select-sm" id="ToStateID" name="ToStateID" asp-items="Model.AssetStateOptions">
<option value="">No change</option>
</select>
@ -1132,11 +1140,11 @@
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<div class="row g-2">
<div class="col-12">
<label class="form-label" for="SceneAssetStoryAssetID">Asset</label>
<label class="form-label" for="SceneAssetStoryAssetID">Asset <help-icon key="sceneInspector.fields.assetSelector" mode="inline" /></label>
<select class="form-select form-select-sm" id="SceneAssetStoryAssetID" name="StoryAssetID" asp-items="Model.AssetOptions"></select>
</div>
<div class="col-12">
<label class="form-label" for="SceneAssetLocationID">Location</label>
<label class="form-label" for="SceneAssetLocationID">Location <help-icon key="sceneInspector.fields.assetLocation" mode="inline" /></label>
<select class="form-select form-select-sm" id="SceneAssetLocationID" name="LocationID" asp-items="Model.LocationOptions"></select>
</div>
<div class="col-12">
@ -1145,7 +1153,7 @@
<div class="col-12">
<label class="form-check">
<input class="form-check-input" name="UpdateCurrentLocation" type="checkbox" value="true" checked />
<span class="form-check-label">Update asset's current location</span>
<span class="form-check-label">Update asset's current location <help-icon key="sceneInspector.fields.updateAssetLocation" mode="inline" /></span>
</label>
</div>
</div>
@ -1189,19 +1197,19 @@
<div class="row g-2">
<div class="col-12">
<label class="form-label" for="CustodyStoryAssetID">Asset</label>
<label class="form-label" for="CustodyStoryAssetID">Asset <help-icon key="sceneInspector.fields.assetSelector" mode="inline" /></label>
<select class="form-select form-select-sm" id="CustodyStoryAssetID" name="StoryAssetID" asp-items="Model.AssetOptions"></select>
</div>
<div class="col-6">
<label class="form-label" for="AssetCustodyEventTypeID">Custody event <help-icon key="sceneInspector.custody" mode="inline" /></label>
<label class="form-label" for="AssetCustodyEventTypeID">Custody event <help-icon key="sceneInspector.fields.custodyEventType" mode="inline" /></label>
<select class="form-select form-select-sm" id="AssetCustodyEventTypeID" name="AssetCustodyEventTypeID" asp-items="Model.AssetCustodyEventTypeOptions"></select>
</div>
<div class="col-6">
<label class="form-label" for="CustodyRoleID">Role</label>
<label class="form-label" for="CustodyRoleID">Role <help-icon key="sceneInspector.fields.custodyRole" mode="inline" /></label>
<select class="form-select form-select-sm" id="CustodyRoleID" name="CustodyRoleID" asp-items="Model.CustodyRoleOptions"></select>
</div>
<div class="col-12">
<label class="form-label" for="CustodianCharacterIds">Existing custodians</label>
<label class="form-label" for="CustodianCharacterIds">Existing custodians <help-icon key="sceneInspector.fields.custodians" mode="inline" /></label>
<select class="form-select form-select-sm" id="CustodianCharacterIds" name="CustodianCharacterIds" asp-items="Model.CharacterOptions" multiple></select>
</div>
<div class="col-12">
@ -1298,7 +1306,7 @@
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<div class="row g-2">
<div class="col-12">
<label class="form-label" for="Priority">Priority</label>
<label class="form-label" for="Priority">Priority <help-icon key="sceneInspector.fields.writerPriority" mode="inline" /></label>
<div class="writer-priority-control">
<input class="form-range" id="Priority" name="Priority" type="range" min="1" max="10" value="@(Model.Workflow.Priority ?? 5)" data-priority-slider />
<span class="status-pill" data-priority-label></span>
@ -1321,7 +1329,7 @@
<input class="form-control form-control-sm" id="LastWorkedOn" name="LastWorkedOn" type="date" value="@Model.Workflow.LastWorkedOn?.ToString("yyyy-MM-dd")" />
</div>
<div class="col-12 writer-checkbox-grid">
<label><input type="checkbox" name="IsBlocked" value="true" checked="@Model.Workflow.IsBlocked" /> Blocked</label>
<label><input type="checkbox" name="IsBlocked" value="true" checked="@Model.Workflow.IsBlocked" /> Blocked <help-icon key="sceneInspector.fields.writerBlocked" mode="inline" /></label>
</div>
<div class="col-12">
<label class="form-label" for="BlockedReason">Blocked reason</label>
@ -1364,7 +1372,8 @@
<input type="hidden" name="SceneID" value="@Model.SceneID" />
<input type="hidden" name="ReturnProjectID" value="@Model.ReturnProjectID" />
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<input type="checkbox" name="IsCompleted" value="true" checked="@item.IsCompleted" />
<label class="visually-hidden">Checklist completion <help-icon key="sceneInspector.fields.checklistCompletion" mode="inline" /></label>
<input type="checkbox" name="IsCompleted" value="true" checked="@item.IsCompleted" title="Checklist completion" />
<input class="form-control form-control-sm" name="ItemText" value="@item.ItemText" />
<button class="btn btn-outline-primary btn-sm" type="submit">Save</button>
</form>
@ -1461,6 +1470,7 @@
<input type="hidden" name="ReturnProjectID" value="@Model.ReturnProjectID" />
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<input type="hidden" name="FilePath" value="@attachment.FilePath" />
<label class="form-label mb-0">Attachment type <help-icon key="sceneInspector.fields.attachmentType" mode="inline" /></label>
<select class="form-select form-select-sm" name="SceneAttachmentTypeID">
@foreach (var option in Model.SceneAttachmentTypeOptions)
{
@ -1492,7 +1502,7 @@
<input type="hidden" name="SceneID" value="@Model.SceneID" />
<input type="hidden" name="ReturnProjectID" value="@Model.ReturnProjectID" />
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<label class="form-label mb-0">Attachment type</label>
<label class="form-label mb-0">Attachment type <help-icon key="sceneInspector.fields.attachmentType" mode="inline" /></label>
<select class="form-select form-select-sm" name="SceneAttachmentTypeID" asp-items="Model.SceneAttachmentTypeOptions"></select>
<label class="form-label mb-0">Title</label>
<input class="form-control form-control-sm" name="Title" placeholder="Reference title" />
@ -1518,6 +1528,7 @@
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="returnToTimeline" value="@Model.ReturnToTimeline.ToString().ToLowerInvariant()" />
<button class="btn btn-outline-primary btn-sm" type="submit">Validate scene</button>
<help-icon key="sceneInspector.fields.warningActions" mode="inline" />
</form>
}
</div>
@ -1542,6 +1553,7 @@
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="returnToTimeline" value="@Model.ReturnToTimeline.ToString().ToLowerInvariant()" />
<button class="btn btn-outline-secondary btn-sm" type="submit">Dismiss</button>
<help-icon key="sceneInspector.fields.warningActions" mode="inline" />
</form>
<form asp-controller="Warnings" asp-action="MarkIntentional" method="post">
<input type="hidden" name="id" value="@warning.ContinuityWarningID" />
@ -1550,6 +1562,7 @@
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="returnToTimeline" value="@Model.ReturnToTimeline.ToString().ToLowerInvariant()" />
<button class="btn btn-outline-secondary btn-sm" type="submit">Intentional</button>
<help-icon key="sceneInspector.fields.warningActions" mode="inline" />
</form>
</div>
</div>
@ -1632,24 +1645,24 @@
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<div class="row g-2">
<div class="col-12">
<label class="form-label" for="DependencyDirection">Plain English</label>
<label class="form-label" for="DependencyDirection">Plain English <help-icon key="sceneInspector.fields.dependencyControls" mode="inline" /></label>
<select class="form-select form-select-sm" id="DependencyDirection" name="Direction">
<option value="CurrentDependsOnRelated">This scene depends on another scene</option>
<option value="RelatedDependsOnCurrent">Another scene depends on this scene</option>
</select>
</div>
<div class="col-12">
<label class="form-label" for="RelatedSceneID">Related scene</label>
<label class="form-label" for="RelatedSceneID">Related scene <help-icon key="sceneInspector.fields.dependencyControls" mode="inline" /></label>
<select class="form-select form-select-sm" id="RelatedSceneID" name="RelatedSceneID" asp-items="Model.SceneOptions"></select>
</div>
<div class="col-8">
<label class="form-label" for="SceneDependencyTypeID">Dependency type</label>
<label class="form-label" for="SceneDependencyTypeID">Dependency type <help-icon key="sceneInspector.fields.dependencyControls" mode="inline" /></label>
<select class="form-select form-select-sm" id="SceneDependencyTypeID" name="SceneDependencyTypeID" asp-items="Model.SceneDependencyTypeOptions"></select>
</div>
<div class="col-4 d-flex align-items-end">
<label class="form-check mb-2">
<input class="form-check-input" name="IsHardDependency" type="checkbox" value="true" />
<span class="form-check-label">Hard</span>
<span class="form-check-label">Hard <help-icon key="sceneInspector.fields.dependencyControls" mode="inline" /></span>
</label>
</div>
<div class="col-12">
@ -1662,18 +1675,18 @@
<!-- Management -->
<section class="inspector-section scene-move-section" data-section-title="Move / Reorder" data-section-id="inspector-move">
<h3>Move / Reorder</h3>
<h3>Move / Reorder <help-icon key="sceneInspector.move" /></h3>
<form asp-controller="Scenes" asp-action="PreviewMove" method="post" class="asset-create-form">
<input type="hidden" name="SceneID" value="@Model.SceneID" />
<input type="hidden" name="ReturnProjectID" value="@Model.ReturnProjectID" />
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
<div class="row g-2">
<div class="col-12">
<label class="form-label" for="TargetChapterID">Move to chapter</label>
<label class="form-label" for="TargetChapterID">Move to chapter <help-icon key="sceneInspector.fields.moveControls" mode="inline" /></label>
<select class="form-select form-select-sm" id="TargetChapterID" name="TargetChapterID" asp-items="Model.ChapterOptions"></select>
</div>
<div class="col-6">
<label class="form-label" for="MovePosition">Position</label>
<label class="form-label" for="MovePosition">Position <help-icon key="sceneInspector.fields.moveControls" mode="inline" /></label>
<select class="form-select form-select-sm" id="MovePosition" name="Position">
<option value="End">End of chapter</option>
<option value="Start">Start of chapter</option>
@ -1682,7 +1695,7 @@
<div class="col-6 d-flex align-items-end">
<label class="form-check mb-2">
<input class="form-check-input" name="RenumberScenes" type="checkbox" value="true" />
<span class="form-check-label">Renumber scenes</span>
<span class="form-check-label">Renumber scenes <help-icon key="sceneInspector.fields.moveControls" mode="inline" /></span>
</label>
</div>
</div>

View File

@ -134,6 +134,7 @@
<select name="BookID" asp-items="Model.BookOptions" class="form-select" aria-label="Book filter">
<option value="">All books</option>
</select>
<help-icon key="timeline.fields.bookFilter" mode="inline" />
<button class="btn btn-outline-primary" type="submit">View</button>
</form>
<div class="button-row">
@ -171,25 +172,25 @@
</select>
</div>
<div>
<label class="form-label">From chapter</label>
<label class="form-label">From chapter <help-icon key="timeline.fields.chapterRange" mode="inline" /></label>
<select name="ChapterFromID" asp-items="Model.ChapterFromOptions" class="form-select form-select-sm">
<option value="">Start</option>
</select>
</div>
<div>
<label class="form-label">To chapter</label>
<label class="form-label">To chapter <help-icon key="timeline.fields.chapterRange" mode="inline" /></label>
<select name="ChapterToID" asp-items="Model.ChapterToOptions" class="form-select form-select-sm">
<option value="">End</option>
</select>
</div>
<div>
<label class="form-label">From scene</label>
<label class="form-label">From scene <help-icon key="timeline.fields.sceneRange" mode="inline" /></label>
<select name="SceneFromID" asp-items="Model.SceneFromOptions" class="form-select form-select-sm">
<option value="">Start</option>
</select>
</div>
<div>
<label class="form-label">To scene</label>
<label class="form-label">To scene <help-icon key="timeline.fields.sceneRange" mode="inline" /></label>
<select name="SceneToID" asp-items="Model.SceneToOptions" class="form-select form-select-sm">
<option value="">End</option>
</select>
@ -211,27 +212,27 @@
<select name="CharacterID" asp-items="Model.CharacterOptions" class="form-select form-select-sm"><option value="">Any</option></select>
</div>
<div>
<label class="form-label">Location</label>
<label class="form-label">Location <help-icon key="timeline.fields.locationFilter" mode="inline" /></label>
<select name="LocationID" asp-items="Model.LocationOptions" class="form-select form-select-sm"><option value="">Any</option></select>
</div>
<div>
<label class="form-label">Warning severity</label>
<label class="form-label">Warning severity <help-icon key="timeline.fields.warningSeverity" mode="inline" /></label>
<select name="WarningSeverityID" asp-items="Model.WarningSeverityOptions" class="form-select form-select-sm"><option value="">Any</option></select>
</div>
<div>
<label class="form-label">Warning type</label>
<label class="form-label">Warning type <help-icon key="timeline.fields.warningType" mode="inline" /></label>
<select name="WarningTypeID" asp-items="Model.WarningTypeOptions" class="form-select form-select-sm"><option value="">Any</option></select>
</div>
<div>
<label class="form-label">Revision status</label>
<label class="form-label">Revision status <help-icon key="timeline.fields.revisionStatus" mode="inline" /></label>
<select name="RevisionStatusID" asp-items="Model.RevisionStatusOptions" class="form-select form-select-sm"><option value="">Any</option></select>
</div>
<div>
<label class="form-label">Scene purpose</label>
<label class="form-label">Scene purpose <help-icon key="timeline.fields.scenePurpose" mode="inline" /></label>
<select name="ScenePurposeTypeID" asp-items="Model.ScenePurposeOptions" class="form-select form-select-sm"><option value="">Any</option></select>
</div>
<div>
<label class="form-label">POV character</label>
<label class="form-label">POV character <help-icon key="timeline.fields.povCharacter" mode="inline" /></label>
<select name="POVCharacterID" asp-items="Model.PovCharacterOptions" class="form-select form-select-sm"><option value="">Any</option></select>
</div>
<div>
@ -251,9 +252,9 @@
<input name="FocusID" value="@Model.Filter.FocusID" class="form-control form-control-sm" placeholder="Entity ID" />
</div>
<div class="timeline-filter-checks">
<label><input type="checkbox" name="ShowWarningsOnly" value="true" checked="@Model.Filter.ShowWarningsOnly" /> Warnings only</label>
<label><input type="checkbox" name="IncludeDismissedWarnings" value="true" checked="@Model.Filter.IncludeDismissedWarnings" /> Include dismissed</label>
<label><input type="checkbox" name="IncludeIntentionalWarnings" value="true" checked="@Model.Filter.IncludeIntentionalWarnings" /> Include intentional</label>
<label><input type="checkbox" name="ShowWarningsOnly" value="true" checked="@Model.Filter.ShowWarningsOnly" /> Warnings only <help-icon key="timeline.fields.warningOptions" mode="inline" /></label>
<label><input type="checkbox" name="IncludeDismissedWarnings" value="true" checked="@Model.Filter.IncludeDismissedWarnings" /> Include dismissed <help-icon key="timeline.fields.warningOptions" mode="inline" /></label>
<label><input type="checkbox" name="IncludeIntentionalWarnings" value="true" checked="@Model.Filter.IncludeIntentionalWarnings" /> Include intentional <help-icon key="timeline.fields.warningOptions" mode="inline" /></label>
</div>
<div class="timeline-filter-actions">
<button class="btn btn-outline-primary btn-sm" type="submit">Apply filters</button>
@ -265,14 +266,14 @@
<details class="timeline-control-group">
<summary>View</summary>
<div class="timeline-visibility-panel">
<label class="timeline-control-select">Density
<label class="timeline-control-select">Density <help-icon key="timeline.fields.density" mode="inline" />
<select class="form-select form-select-sm" data-timeline-density>
<option value="compact">Compact</option>
<option value="comfortable">Comfortable</option>
<option value="expanded">Expanded</option>
</select>
</label>
<label class="timeline-control-select">Zoom
<label class="timeline-control-select">Zoom <help-icon key="timeline.fields.zoom" mode="inline" />
<select class="form-select form-select-sm" data-timeline-zoom>
<option value="book">Book</option>
<option value="chapter">Chapter</option>
@ -292,6 +293,7 @@
<summary>Jump</summary>
<div class="timeline-jump-panel">
<input class="form-control form-control-sm" type="search" placeholder="Search timeline..." data-timeline-search />
<help-icon key="timeline.fields.jumpControls" mode="inline" />
<select class="form-select form-select-sm" data-timeline-jump>
<option value="">Jump to scene</option>
@foreach (var book in Model.Books)
@ -484,9 +486,9 @@
<input type="hidden" name="ReturnProjectID" value="@Model.Project.ProjectID" />
<input type="hidden" name="ReturnBookID" value="@Model.SelectedBookID" />
<div class="row g-2">
<div class="col-6"><label class="form-label">Role in scene</label><select class="form-select form-select-sm" name="RoleInSceneTypeID" asp-items="Model.CharacterRoleOptions"><option value="">Not set</option></select></div>
<div class="col-6"><label class="form-label">Presence type</label><select class="form-select form-select-sm" name="PresenceTypeID" asp-items="Model.PresenceTypeOptions"><option value="">Not set</option></select></div>
<div class="col-12"><label class="form-label">Current location</label><select class="form-select form-select-sm" name="LocationID" asp-items="Model.LocationOptions"><option value="">Optional</option></select></div>
<div class="col-6"><label class="form-label">Role in scene <help-icon key="timeline.fields.dragCharacterRole" mode="inline" /></label><select class="form-select form-select-sm" name="RoleInSceneTypeID" asp-items="Model.CharacterRoleOptions"><option value="">Not set</option></select></div>
<div class="col-6"><label class="form-label">Presence type <help-icon key="timeline.fields.dragCharacterRole" mode="inline" /></label><select class="form-select form-select-sm" name="PresenceTypeID" asp-items="Model.PresenceTypeOptions"><option value="">Not set</option></select></div>
<div class="col-12"><label class="form-label">Current location <help-icon key="sceneInspector.fields.characterLocation" mode="inline" /></label><select class="form-select form-select-sm" name="LocationID" asp-items="Model.LocationOptions"><option value="">Optional</option></select></div>
</div>
<div class="button-row mt-2">
<button class="btn btn-primary btn-sm" type="submit">Add Character</button>
@ -500,9 +502,9 @@
<input type="hidden" name="ReturnProjectID" value="@Model.Project.ProjectID" />
<input type="hidden" name="ReturnBookID" value="@Model.SelectedBookID" />
<div class="row g-2">
<div class="col-6"><label class="form-label">Event type</label><select class="form-select form-select-sm" name="AssetEventTypeID" asp-items="Model.AssetEventTypeOptions"></select></div>
<div class="col-6"><label class="form-label">State transition</label><select class="form-select form-select-sm" name="ToStateID" asp-items="Model.AssetStateOptions"><option value="">Optional</option></select></div>
<div class="col-12"><label class="form-label">Location</label><select class="form-select form-select-sm" name="LocationID" asp-items="Model.LocationOptions"><option value="">Optional</option></select></div>
<div class="col-6"><label class="form-label">Event type <help-icon key="timeline.fields.dragAssetEvent" mode="inline" /></label><select class="form-select form-select-sm" name="AssetEventTypeID" asp-items="Model.AssetEventTypeOptions"></select></div>
<div class="col-6"><label class="form-label">State transition <help-icon key="timeline.fields.dragAssetEvent" mode="inline" /></label><select class="form-select form-select-sm" name="ToStateID" asp-items="Model.AssetStateOptions"><option value="">Optional</option></select></div>
<div class="col-12"><label class="form-label">Location <help-icon key="sceneInspector.fields.assetLocation" mode="inline" /></label><select class="form-select form-select-sm" name="LocationID" asp-items="Model.LocationOptions"><option value="">Optional</option></select></div>
<div class="col-12"><label class="form-label">Event title</label><input class="form-control form-control-sm" name="EventTitle" /></div>
<div class="col-12"><label class="form-label">Custody note</label><textarea class="form-control form-control-sm" name="CustodyNote" rows="2"></textarea></div>
</div>
@ -519,9 +521,9 @@
<input type="hidden" name="SourceAssetID" />
<input type="hidden" name="TargetAssetID" />
<div class="row g-2">
<div class="col-12"><label class="form-label">Dependency type</label><select class="form-select form-select-sm" name="AssetDependencyTypeID" asp-items="Model.AssetDependencyTypeOptions"></select></div>
<div class="col-6"><label class="form-label">Source required state</label><select class="form-select form-select-sm" name="SourceRequiredStateID" asp-items="Model.AssetStateOptions"><option value="">Optional</option></select></div>
<div class="col-6"><label class="form-label">Target blocked state</label><select class="form-select form-select-sm" name="TargetBlockedStateID" asp-items="Model.AssetStateOptions"><option value="">Optional</option></select></div>
<div class="col-12"><label class="form-label">Dependency type <help-icon key="timeline.fields.dragAssetDependency" mode="inline" /></label><select class="form-select form-select-sm" name="AssetDependencyTypeID" asp-items="Model.AssetDependencyTypeOptions"></select></div>
<div class="col-6"><label class="form-label">Source required state <help-icon key="timeline.fields.dragAssetDependency" mode="inline" /></label><select class="form-select form-select-sm" name="SourceRequiredStateID" asp-items="Model.AssetStateOptions"><option value="">Optional</option></select></div>
<div class="col-6"><label class="form-label">Target blocked state <help-icon key="timeline.fields.dragAssetDependency" mode="inline" /></label><select class="form-select form-select-sm" name="TargetBlockedStateID" asp-items="Model.AssetStateOptions"><option value="">Optional</option></select></div>
<div class="col-12"><label class="form-label">Notes</label><textarea class="form-control form-control-sm" name="Description" rows="2"></textarea></div>
</div>
<p class="plain-preview" data-asset-dependency-preview></p>
@ -537,7 +539,7 @@
<input type="hidden" name="FromLocationID" />
<input type="hidden" name="ToLocationID" />
<div class="row g-2">
<div class="col-12"><label class="form-label">Relationship type</label><select class="form-select form-select-sm" name="LocationRelationshipTypeID" asp-items="Model.LocationRelationshipTypeOptions"></select></div>
<div class="col-12"><label class="form-label">Relationship type <help-icon key="timeline.fields.dragLocationRelationship" mode="inline" /></label><select class="form-select form-select-sm" name="LocationRelationshipTypeID" asp-items="Model.LocationRelationshipTypeOptions"></select></div>
<div class="col-12 drag-check-grid">
<label><input type="checkbox" name="IsBidirectional" value="true" /> Bidirectional</label>
<label><input type="checkbox" name="CanHearNormalSpeech" value="true" /> Can hear speech</label>