{
  "id": "b7e2a5b0-6f3f-4a4a-9a5f-1c9e6d2a8b7c",
  "title": "Ravensmoor",
  "createdAt": "2026-08-01T18:00:00.000Z",
  "updatedAt": "2026-08-30T23:40:00.000Z",
  "entities": [
    {
      "id": "pc-petra",
      "type": "character",
      "name": "Petra Voss",
      "summary": "Party paladin. Took the reeve’s coin and means to earn it honestly, which is not the same as simply.",
      "tags": [
        "party"
      ],
      "canvasPosition": {
        "x": -600,
        "y": -260
      },
      "fields": {
        "role": "Paladin, Oath of Devotion",
        "appearance": "Broad-shouldered, sun-browned, a chipped tooth she never got fixed.",
        "personality": "Direct to the point of bluntness. Slow to anger, slower to forgive an oath-breaker.",
        "backstory": "Raised in a temple orphanage in the capital; took her vows at nineteen and has been paying off the temple’s kindness in favors ever since.",
        "arc": "Learning that keeping a town honest sometimes means protecting a liar from a worse one.",
        "relationships": "Leads the party more by example than by rank. Trusts Oskar with her back and Corwin with her doubts.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 186,
          "month": 2,
          "day": 3
        }
      },
      "gameStats": {
        "kind": "pc",
        "system": "D&D 5e",
        "playerName": "Priya",
        "level": 4,
        "className": "Paladin",
        "ancestry": "Human",
        "maxHp": 36,
        "ac": 18,
        "speed": "30 ft.",
        "abilities": {
          "str": 16,
          "dex": 10,
          "con": 14,
          "int": 8,
          "wis": 12,
          "cha": 15
        },
        "initiativeBonus": 0,
        "passivePerception": 11,
        "features": [
          {
            "id": "feat-petra-longsword",
            "name": "Longsword",
            "kind": "action",
            "text": "Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 1d8 + 3 slashing damage, or 1d10 + 3 slashing damage two-handed."
          },
          {
            "id": "feat-petra-javelin",
            "name": "Javelin",
            "kind": "action",
            "text": "Melee or Ranged Weapon Attack: +5 to hit, reach 5 ft. or range 30/120 ft., one target. Hit: 1d6 + 3 piercing damage."
          },
          {
            "id": "feat-petra-1",
            "name": "Lay on Hands",
            "kind": "trait",
            "text": "A pool of 20 hit points; touch to restore hp or cure one disease or poison.",
            "uses": "20 hp/long rest"
          },
          {
            "id": "feat-petra-2",
            "name": "Divine Smite",
            "kind": "trait",
            "text": "Expend a spell slot on a melee hit to deal an extra 2d8 radiant damage (3d8 vs. undead or fiends).",
            "uses": "1/spell slot"
          },
          {
            "id": "feat-petra-3",
            "name": "Divine Sense",
            "kind": "action",
            "text": "Detect celestials, fiends, and undead within 60 feet for one round.",
            "uses": "4/long rest"
          },
          {
            "id": "feat-petra-4",
            "name": "Fighting Style: Defense",
            "kind": "classFeature",
            "text": "While wearing armor, +1 AC."
          },
          {
            "id": "feat-petra-5",
            "name": "Channel Divinity: Sacred Weapon",
            "kind": "action",
            "text": "For 1 minute her weapon sheds bright light and adds +2 (her Charisma modifier) to attack rolls.",
            "uses": "1/short rest"
          }
        ],
        "spells": [
          {
            "id": "spell-petra-1",
            "name": "Bless",
            "level": 1,
            "prepared": true,
            "text": "Up to three creatures add 1d4 to attack rolls and saving throws.",
            "castingTime": "1A",
            "range": "30 ft.",
            "components": "V,S,M",
            "duration": "Concentration, up to 1 minute",
            "reference": "PHB 219"
          },
          {
            "id": "spell-petra-2",
            "name": "Cure Wounds",
            "level": 1,
            "prepared": true,
            "text": "Touch a creature to restore 1d8 + 2 hit points.",
            "castingTime": "1A",
            "range": "Touch",
            "components": "V,S",
            "duration": "Instantaneous",
            "reference": "PHB 230"
          },
          {
            "id": "spell-petra-4",
            "name": "Heroism",
            "level": 1,
            "prepared": true,
            "text": "A willing creature is immune to being frightened and gains 2 temporary hit points at the start of each of its turns.",
            "castingTime": "1A",
            "range": "Touch",
            "components": "V,S",
            "duration": "Concentration, up to 1 minute",
            "reference": "PHB 250"
          },
          {
            "id": "spell-petra-5",
            "name": "Sanctuary",
            "level": 1,
            "prepared": true,
            "text": "A creature that targets the warded ally with an attack or harmful spell must first pass a Wisdom save or pick a new target. Oath spell, always prepared.",
            "castingTime": "1BA",
            "range": "30 ft.",
            "components": "V,S,M",
            "duration": "1 minute",
            "save": "WIS 12",
            "reference": "PHB 272"
          },
          {
            "id": "spell-petra-6",
            "name": "Protection from Evil and Good",
            "level": 1,
            "prepared": true,
            "text": "Aberrations, celestials, elementals, fey, fiends and undead have disadvantage to hit the warded creature. Oath spell, always prepared.",
            "castingTime": "1A",
            "range": "Touch",
            "components": "V,S,M",
            "duration": "Concentration, up to 10 minutes",
            "reference": "PHB 270"
          },
          {
            "id": "spell-petra-3",
            "name": "Shield of Faith",
            "level": 1,
            "prepared": false,
            "text": "A shimmering field surrounds an ally, and attacks against it find their mark less often: its AC rises by 2.",
            "castingTime": "1BA",
            "range": "60 ft.",
            "components": "V,S,M",
            "duration": "Concentration, up to 10 minutes",
            "reference": "PHB 275"
          }
        ],
        "notes": "Proficiencies & languages: All armor, shields, simple and martial weapons. Common, Dwarvish.\nHit dice: 4d10\nSpellcasting: Paladin · CHA · save DC 12 · attack +4\nSpell slots: 1st 3"
      }
    },
    {
      "id": "pc-oskar",
      "type": "character",
      "name": "Oskar Thane",
      "summary": "Party barbarian. Hires out his temper by the week and has never once regretted the invoice.",
      "tags": [
        "party"
      ],
      "canvasPosition": {
        "x": -600,
        "y": -120
      },
      "fields": {
        "role": "Barbarian",
        "appearance": "Half-orc, a tusk chipped short, forearms more scar than skin.",
        "personality": "Loud, generous, allergic to sitting still. Takes hits so his friends don’t have to.",
        "backstory": "Grew up on a river barge; left when the barge didn’t need a fourth hand anymore. Has been swinging an axe for coin ever since.",
        "arc": "Discovering that rage is a fine tool and a poor plan.",
        "relationships": "Needles Corwin about spending spell slots on “getting a look at things.” Would not admit how much he trusts him.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 190,
          "month": 6,
          "day": 21
        }
      },
      "gameStats": {
        "kind": "pc",
        "system": "D&D 5e",
        "playerName": "Dev",
        "level": 4,
        "className": "Barbarian",
        "ancestry": "Half-Orc",
        "maxHp": 44,
        "ac": 15,
        "speed": "40 ft.",
        "abilities": {
          "str": 18,
          "dex": 14,
          "con": 16,
          "int": 8,
          "wis": 10,
          "cha": 8
        },
        "initiativeBonus": 2,
        "passivePerception": 10,
        "features": [
          {
            "id": "feat-oskar-greataxe",
            "name": "Greataxe",
            "kind": "action",
            "text": "Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 1d12 + 4 slashing damage, +2 while raging."
          },
          {
            "id": "feat-oskar-handaxe",
            "name": "Handaxe",
            "kind": "action",
            "text": "Melee or Ranged Weapon Attack: +6 to hit, reach 5 ft. or range 20/60 ft., one target. Hit: 1d6 + 4 slashing damage."
          },
          {
            "id": "feat-oskar-1",
            "name": "Rage",
            "kind": "bonusAction",
            "text": "Advantage on Strength checks and saves, +2 melee damage, resistance to bludgeoning, piercing, and slashing.",
            "uses": "3/long rest"
          },
          {
            "id": "feat-oskar-2",
            "name": "Reckless Attack",
            "kind": "trait",
            "text": "Gain advantage on melee Strength attacks this turn; attacks against you have advantage until your next turn."
          },
          {
            "id": "feat-oskar-3",
            "name": "Danger Sense",
            "kind": "trait",
            "text": "Advantage on Dexterity saves against effects you can see, so long as you aren’t blinded, deafened, or incapacitated."
          },
          {
            "id": "feat-oskar-4",
            "name": "Totem Spirit: Bear",
            "kind": "classFeature",
            "text": "While raging, resistance to all damage except psychic."
          },
          {
            "id": "feat-oskar-5",
            "name": "Unarmored Defense",
            "kind": "classFeature",
            "text": "Without armor, AC equals 10 + Dexterity modifier + Constitution modifier."
          },
          {
            "id": "feat-oskar-6",
            "name": "Relentless Endurance",
            "kind": "trait",
            "text": "When reduced to 0 hit points but not killed outright, drops to 1 hit point instead.",
            "uses": "1/long rest"
          }
        ],
        "notes": "Senses: Darkvision 60 ft.\nProficiencies & languages: Light and medium armor, shields, simple and martial weapons. Common, Orc.\nHit dice: 4d12"
      },
      "aliases": [
        "Ox"
      ]
    },
    {
      "id": "pc-lyris",
      "type": "character",
      "name": "Lyris Fenwick",
      "summary": "Party ranger. Reads a room the way other people read a map.",
      "tags": [
        "party"
      ],
      "canvasPosition": {
        "x": -600,
        "y": 20
      },
      "fields": {
        "role": "Ranger",
        "appearance": "Wood elf, close-cropped hair, a longbow she has re-strung more times than she’s slept indoors.",
        "personality": "Watchful, dry-humored, says the true thing at the worst possible moment.",
        "backstory": "Warden’s daughter from a border wood the Duchy logged out from under her family. Took to the road rather than take the compensation.",
        "arc": "Weighing whether this job is the same kind of theft she grew up hating, dressed better.",
        "relationships": "Corwin’s oldest friend in the party. They arrived together, and neither will say why.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 101,
          "month": 3,
          "day": 9
        }
      },
      "gameStats": {
        "kind": "pc",
        "system": "D&D 5e",
        "playerName": "Sam",
        "level": 4,
        "className": "Ranger",
        "ancestry": "Wood Elf",
        "maxHp": 34,
        "ac": 16,
        "speed": "35 ft.",
        "abilities": {
          "str": 12,
          "dex": 18,
          "con": 13,
          "int": 10,
          "wis": 15,
          "cha": 8
        },
        "initiativeBonus": 4,
        "passivePerception": 16,
        "features": [
          {
            "id": "feat-lyris-longbow",
            "name": "Longbow",
            "kind": "action",
            "text": "Ranged Weapon Attack: +8 to hit, range 150/600 ft., one target. Hit: 1d8 + 4 piercing damage."
          },
          {
            "id": "feat-lyris-shortsword",
            "name": "Shortsword",
            "kind": "action",
            "text": "Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 1d6 + 4 piercing damage."
          },
          {
            "id": "feat-lyris-1",
            "name": "Favored Enemy: Humanoids",
            "kind": "trait",
            "text": "Advantage on Wisdom (Survival) checks to track humanoids, and recall information about them."
          },
          {
            "id": "feat-lyris-2",
            "name": "Fighting Style: Archery",
            "kind": "classFeature",
            "text": "+2 to attack rolls made with ranged weapons."
          },
          {
            "id": "feat-lyris-3",
            "name": "Hunter’s Prey: Colossus Slayer",
            "kind": "classFeature",
            "text": "Once per turn, a weapon hit deals an extra 1d8 damage to a creature already below its hit point maximum."
          },
          {
            "id": "feat-lyris-4",
            "name": "Mask of the Wild",
            "kind": "trait",
            "text": "Can try to hide when only lightly obscured by rain, mist, foliage or falling snow."
          }
        ],
        "spells": [
          {
            "id": "spell-lyris-1",
            "name": "Hunter’s Mark",
            "level": 1,
            "prepared": true,
            "text": "Mark a creature: your weapon attacks deal it an extra 1d6 damage, and you have advantage to track it.",
            "castingTime": "1BA",
            "range": "90 ft.",
            "components": "V",
            "duration": "Concentration, up to 1 hour",
            "reference": "PHB 251"
          },
          {
            "id": "spell-lyris-3",
            "name": "Fog Cloud",
            "level": 1,
            "prepared": true,
            "text": "A 20-foot sphere of fog heavily obscures the area.",
            "castingTime": "1A",
            "range": "120 ft.",
            "components": "V,S",
            "duration": "Concentration, up to 1 hour",
            "reference": "PHB 243"
          },
          {
            "id": "spell-lyris-2",
            "name": "Cure Wounds",
            "level": 1,
            "prepared": false,
            "text": "Touch a creature to restore 1d8 + 2 hit points.",
            "castingTime": "1A",
            "range": "Touch",
            "components": "V,S",
            "duration": "Instantaneous",
            "reference": "PHB 230"
          }
        ],
        "notes": "Senses: Darkvision 60 ft.\nProficiencies & languages: Light and medium armor, shields, simple and martial weapons. Common, Elvish, Sylvan.\nHit dice: 4d10\nSpellcasting: Ranger · WIS · save DC 12 · attack +4\nSpell slots: 1st 3"
      }
    },
    {
      "id": "pc-corwin",
      "type": "character",
      "name": "Corwin Ashby",
      "summary": "Party cleric. Keeps everyone upright and keeps his opinions about how they got hurt to himself. Mostly.",
      "tags": [
        "party"
      ],
      "canvasPosition": {
        "x": -600,
        "y": 160
      },
      "fields": {
        "role": "Cleric, Life Domain",
        "appearance": "Half-elf, soft-spoken, a traveling shrine kit that never quite fits back in its case.",
        "personality": "Patient with the party, impatient with excuses. Notices when someone is lying by omission.",
        "backstory": "Trained at a wayside shrine that patched up travelers on the road Lyris grew up beside. Left to see what he was patching them up for.",
        "arc": "Deciding how much mercy a warden who’s been stealing from the dead actually deserves.",
        "relationships": "Lyris’s oldest friend in the party. Quietly keeps count of everyone’s wounds so no one else has to.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 168,
          "month": 9,
          "day": 14
        }
      },
      "gameStats": {
        "kind": "pc",
        "system": "D&D 5e",
        "playerName": "Aja",
        "level": 4,
        "className": "Cleric",
        "ancestry": "Half-Elf",
        "maxHp": 32,
        "ac": 17,
        "speed": "30 ft.",
        "abilities": {
          "str": 10,
          "dex": 12,
          "con": 14,
          "int": 11,
          "wis": 17,
          "cha": 13
        },
        "initiativeBonus": 1,
        "passivePerception": 15,
        "features": [
          {
            "id": "feat-corwin-mace",
            "name": "Mace",
            "kind": "action",
            "text": "Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 1d6 bludgeoning damage."
          },
          {
            "id": "feat-corwin-crossbow",
            "name": "Light Crossbow",
            "kind": "action",
            "text": "Ranged Weapon Attack: +3 to hit, range 80/320 ft., one target. Hit: 1d8 + 1 piercing damage."
          },
          {
            "id": "feat-corwin-1",
            "name": "Channel Divinity: Preserve Life",
            "kind": "action",
            "text": "Restore a pool of hit points (5 × cleric level) split among wounded creatures, none above half their max.",
            "uses": "1/short rest"
          },
          {
            "id": "feat-corwin-2",
            "name": "Disciple of Life",
            "kind": "trait",
            "text": "Your healing spells restore additional hit points equal to 2 + the spell’s level."
          },
          {
            "id": "feat-corwin-3",
            "name": "Channel Divinity: Turn Undead",
            "kind": "action",
            "text": "Each undead within 30 feet that fails a DC 13 Wisdom save is turned for 1 minute.",
            "uses": "1/short rest"
          }
        ],
        "spells": [
          {
            "id": "spell-corwin-c1",
            "name": "Sacred Flame",
            "level": 0,
            "text": "A creature you can see makes a Dexterity save or takes 1d8 radiant damage. Cover does not help it.",
            "castingTime": "1A",
            "range": "60 ft.",
            "components": "V,S",
            "duration": "Instantaneous",
            "save": "DEX 13",
            "reference": "PHB 272"
          },
          {
            "id": "spell-corwin-c2",
            "name": "Guidance",
            "level": 0,
            "text": "The target adds 1d4 to one ability check of its choice.",
            "castingTime": "1A",
            "range": "Touch",
            "components": "V,S",
            "duration": "Concentration, up to 1 minute",
            "reference": "PHB 248"
          },
          {
            "id": "spell-corwin-c3",
            "name": "Spare the Dying",
            "level": 0,
            "text": "A living creature at 0 hit points becomes stable.",
            "castingTime": "1A",
            "range": "Touch",
            "components": "V,S",
            "duration": "Instantaneous",
            "reference": "PHB 277"
          },
          {
            "id": "spell-corwin-c4",
            "name": "Thaumaturgy",
            "level": 0,
            "text": "A minor wonder: a voice that booms, a flame that gutters, a tremor underfoot.",
            "castingTime": "1A",
            "range": "30 ft.",
            "components": "V",
            "duration": "Up to 1 minute",
            "reference": "PHB 282"
          },
          {
            "id": "spell-corwin-1",
            "name": "Cure Wounds",
            "level": 1,
            "prepared": true,
            "text": "Touch a creature to restore 1d8 + 6 hit points (Disciple of Life included). Domain spell, always prepared.",
            "castingTime": "1A",
            "range": "Touch",
            "components": "V,S",
            "duration": "Instantaneous",
            "reference": "PHB 230"
          },
          {
            "id": "spell-corwin-2",
            "name": "Bless",
            "level": 1,
            "prepared": true,
            "text": "Up to three creatures add 1d4 to attack rolls and saving throws. Domain spell, always prepared.",
            "castingTime": "1A",
            "range": "30 ft.",
            "components": "V,S,M",
            "duration": "Concentration, up to 1 minute",
            "reference": "PHB 219"
          },
          {
            "id": "spell-corwin-5",
            "name": "Healing Word",
            "level": 1,
            "prepared": true,
            "text": "A creature you can see regains 1d4 + 6 hit points (Disciple of Life included).",
            "castingTime": "1BA",
            "range": "60 ft.",
            "components": "V",
            "duration": "Instantaneous",
            "reference": "PHB 250"
          },
          {
            "id": "spell-corwin-4",
            "name": "Guiding Bolt",
            "level": 1,
            "prepared": true,
            "text": "A ranged spell attack for 4d6 radiant damage; the next attack roll against the target before your next turn ends has advantage.",
            "castingTime": "1A",
            "range": "120 ft.",
            "components": "V,S",
            "duration": "1 round",
            "save": "+5",
            "reference": "PHB 248"
          },
          {
            "id": "spell-corwin-3",
            "name": "Spiritual Weapon",
            "level": 2,
            "prepared": true,
            "text": "A floating spectral weapon makes a melee spell attack for 1d8 + 3 force damage; move it 20 feet and attack again as a bonus action. Domain spell, always prepared.",
            "castingTime": "1BA",
            "range": "60 ft.",
            "components": "V,S",
            "duration": "1 minute",
            "save": "+5",
            "reference": "PHB 278"
          },
          {
            "id": "spell-corwin-6",
            "name": "Lesser Restoration",
            "level": 2,
            "prepared": true,
            "text": "Ends one disease, or one of blinded, deafened, paralyzed or poisoned. Domain spell, always prepared.",
            "castingTime": "1A",
            "range": "Touch",
            "components": "V,S",
            "duration": "Instantaneous",
            "reference": "PHB 255"
          }
        ],
        "notes": "Proficiencies & languages: Light and medium armor, shields, simple weapons. Common, Elvish, Halfling.\nHit dice: 4d8\nSpellcasting: Cleric · WIS · save DC 13 · attack +5\nSpell slots: 1st 4 · 2nd 3"
      }
    },
    {
      "id": "npc-katja",
      "type": "character",
      "name": "Katja Amsel",
      "summary": "Reeve of Ravensmoor. Hired the party the day the numbers stopped adding up.",
      "tags": [
        "npc",
        "ally",
        "town"
      ],
      "canvasPosition": {
        "x": -300,
        "y": -260
      },
      "fields": {
        "role": "Reeve of Ravensmoor",
        "appearance": "Neat, gray at the temples early, ink permanently under two fingernails.",
        "personality": "Practical, underslept, allergic to being told a problem is smaller than it is.",
        "backstory": "Elected reeve six years ago on a promise to balance the town’s books. Has mostly kept it.",
        "arc": "Deciding whether exposing the Steward is worth what it will cost the town that elected her to keep things running.",
        "relationships": "Reports, on paper, to Steward Vane. Trusts him less with every season.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 175,
          "month": 13,
          "day": 2
        }
      },
      "aliases": [
        "the Reeve"
      ],
      "refs": [
        {
          "id": "ref-katja-lantern",
          "relation": "keeps a table at",
          "targetId": "loc-lantern"
        }
      ]
    },
    {
      "id": "npc-ilias",
      "type": "character",
      "name": "Brother Ilias Combe",
      "summary": "Warden of the Greyhold vault. Too calm about a broken seal for a man with nothing to hide.",
      "tags": [
        "npc",
        "suspect",
        "the-vigil"
      ],
      "canvasPosition": {
        "x": -300,
        "y": -120
      },
      "fields": {
        "role": "Warden of the Greyhold",
        "appearance": "Gaunt, close-shaved, the Vigil’s plain gray habit worn thin at the elbows.",
        "personality": "Correct, quiet, apologizes for things that aren’t his fault and stays silent about the ones that are.",
        "backstory": "Took his vows at the Greyhold fifteen years ago. His sister’s family owes a debt in the capital that the Vigil’s stipend was never going to cover.",
        "arc": "Deciding whether being caught is a mercy.",
        "relationships": "Answers to the Vigil in name and to a debt collector he’s never met in practice.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 170,
          "month": 1,
          "day": 18
        }
      },
      "secrets": [
        {
          "id": "sec-ilias-skim",
          "text": "Ilias has been skimming a fraction of every tithe for three years, routed to a debt collector in the capital who’s threatening his sister’s family. He never touched this season’s caravan. Someone else beat him to it, which is exactly why he can’t report the theft without confessing his own.",
          "revealedSessionId": "ses-2"
        },
        {
          "id": "sec-ilias-baron",
          "text": "Ilias found Baron Ashworth’s body himself, last midwinter, in the Greyhold’s lower cloister. He said nothing, certain the Vigil would be blamed before the steward ever was."
        }
      ],
      "aliases": [
        "the Warden",
        "Brother Ilias"
      ],
      "refs": [
        {
          "id": "ref-ilias-vigil",
          "relation": "member of",
          "targetId": "fac-vigil"
        },
        {
          "id": "ref-ilias-cloister",
          "relation": "resides in",
          "targetId": "loc-cloister"
        },
        {
          "id": "ref-ilias-faith",
          "relation": "faith",
          "targetId": "rel-kept-word"
        }
      ]
    },
    {
      "id": "npc-vane",
      "type": "character",
      "name": "Steward Aldric Vane",
      "summary": "Acting steward of Ravensmoor since the Baron stopped being seen. Signs everything now.",
      "tags": [
        "npc",
        "villain",
        "town"
      ],
      "canvasPosition": {
        "x": -300,
        "y": 20
      },
      "fields": {
        "role": "Acting Steward of Ravensmoor",
        "appearance": "Precise, silver signet ring worn loose on a shrinking finger, never without a document in hand.",
        "personality": "Composed to the point of coldness. Answers questions with other questions.",
        "backstory": "Served the Baron for eleven years. Since the Baron withdrew from public life at midwinter, has kept the town running on momentum and the Baron’s seal.",
        "arc": "Watching a lie he told to keep the peace outlive its usefulness.",
        "relationships": "Commands the Ducal Watch in the Baron’s name. Suspects Ilias knows more than he’s said.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 160,
          "month": 10,
          "day": 7
        }
      },
      "secrets": [
        {
          "id": "sec-vane-forgery",
          "text": "Vane has been forging Baron Ashworth’s signature and seal on every writ and order since midwinter, telling himself each time that it’s the last one.",
          "revealedSessionId": "ses-3"
        }
      ],
      "aliases": [
        "the Steward",
        "Aldric Vane"
      ],
      "refs": [
        {
          "id": "ref-vane-watch",
          "relation": "commands",
          "targetId": "fac-watch"
        },
        {
          "id": "ref-vane-hall",
          "relation": "resides in",
          "targetId": "loc-stewards-hall"
        }
      ],
      "gameStats": {
        "kind": "npc",
        "system": "D&D 5e",
        "maxHp": 27,
        "ac": 12,
        "speed": "30 ft.",
        "abilities": {
          "str": 9,
          "dex": 14,
          "con": 11,
          "int": 16,
          "wis": 14,
          "cha": 15
        },
        "initiativeBonus": 2,
        "passivePerception": 12,
        "cr": "1/2",
        "xp": 100,
        "features": [
          {
            "id": "feat-vane-1",
            "name": "Dagger",
            "kind": "action",
            "text": "Melee or Ranged Weapon Attack: +4 to hit, reach 5 ft. or range 20/60 ft., one target. Hit: 1d4 + 2 piercing damage."
          },
          {
            "id": "feat-vane-2",
            "name": "Command the Watch",
            "kind": "bonusAction",
            "text": "One member of the Ducal Watch within 30 feet who can hear him moves up to half its speed and makes one weapon attack."
          },
          {
            "id": "feat-vane-3",
            "name": "In the Baron’s Name",
            "kind": "trait",
            "text": "While the Watch can hear him, its members have advantage on saves against being charmed or frightened."
          },
          {
            "id": "feat-vane-4",
            "name": "A Better Offer",
            "kind": "reaction",
            "text": "When a creature he can see hits him, he offers it something it wants. It makes a DC 13 Wisdom save or its next attack against him has disadvantage."
          }
        ],
        "notes": "Not a fighter, and knows it. Holds his turn behind the Baron’s desk and acts only to keep the ledger out of the party’s hands."
      }
    },
    {
      "id": "npc-baron",
      "type": "character",
      "name": "Baron Corvin Ashworth",
      "summary": "Ravensmoor’s lord. Hasn’t been seen in public since midwinter, which is because he is dead.",
      "tags": [
        "npc",
        "deceased",
        "town"
      ],
      "canvasPosition": {
        "x": -300,
        "y": 160
      },
      "fields": {
        "role": "Baron of Ravensmoor",
        "appearance": "Tall, fair, going soft at the jaw. Painted at thirty in hunting green with the Ashworth heron on his sleeve, which is how most of Ravensmoor still pictures him.",
        "personality": "Genial, idle, bored by anything with columns in it. Generous with other people’s time, and with his own signature.",
        "backstory": "Inherited the barony young and governed it lightly, mostly by letting Vane handle the parts he found tedious. That trust outlived him.",
        "arc": "None left to him. Everything he left undone at midwinter is what the party now has to untangle.",
        "relationships": "Trusted Vane with everything, including, in the end, his own signature.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 172,
          "month": 4,
          "day": 30
        },
        "died": {
          "calendarId": "cal-vigil",
          "year": 211,
          "month": 11,
          "day": 3
        }
      },
      "secrets": [
        {
          "id": "sec-baron-death",
          "text": "The Baron didn’t die naturally. Vane poisoned his wine himself, alone, and has never told a living soul, not even Ilias, who only found the body."
        }
      ],
      "aliases": [
        "the Baron",
        "Lord Ashworth"
      ],
      "refs": [
        {
          "id": "ref-baron-hall",
          "relation": "seat",
          "targetId": "loc-stewards-hall"
        }
      ]
    },
    {
      "id": "npc-rook",
      "type": "character",
      "name": "Mother Rook",
      "summary": "Runs the Fenmarket docks and everything that moves through them after dark.",
      "tags": [
        "npc",
        "fenmarket",
        "rook-family"
      ],
      "canvasPosition": {
        "x": -300,
        "y": 300
      },
      "fields": {
        "role": "Boss of the Fenmarket Free Company",
        "appearance": "Broad, weathered, a coat with more pockets than anyone has counted.",
        "personality": "Warm to your face, exact about the ledger. Never raises her voice; never needs to.",
        "backstory": "Built the Fenmarket smuggling trade out of a single leaking rowboat, mostly out of spite for a Vigil toll she thought was theft with better manners.",
        "arc": "Learning that the Vigil she has spent twenty years spiting bleeds for the same collector she does. Whether that makes Ilias an ally or a rival is the docks’ open question.",
        "relationships": "Sella Rook is her niece and second, raised by her since the river took Tobin and Maren. Has never met Ilias Combe, though they’re paying the same debt from opposite ends.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 165,
          "month": 5,
          "day": 11
        }
      },
      "gameStats": {
        "kind": "npc",
        "system": "D&D 5e",
        "maxHp": 33,
        "ac": 13,
        "speed": "30 ft.",
        "abilities": {
          "str": 10,
          "dex": 14,
          "con": 12,
          "int": 13,
          "wis": 12,
          "cha": 16
        },
        "initiativeBonus": 2,
        "passivePerception": 11,
        "features": [
          {
            "id": "feat-rook-2",
            "name": "Multiattack",
            "kind": "action",
            "text": "Mother Rook makes two Rapier attacks."
          },
          {
            "id": "feat-rook-3",
            "name": "Rapier",
            "kind": "action",
            "text": "Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 1d8 + 2 piercing damage."
          },
          {
            "id": "feat-rook-4",
            "name": "Hand Crossbow",
            "kind": "action",
            "text": "Ranged Weapon Attack: +4 to hit, range 30/120 ft., one target. Hit: 1d6 + 2 piercing damage."
          },
          {
            "id": "feat-rook-5",
            "name": "Whistle Up the Crew",
            "kind": "bonusAction",
            "text": "Every Fenmarket smuggler within earshot moves up to its speed toward her without provoking.",
            "uses": "1/day"
          },
          {
            "id": "feat-rook-1",
            "name": "Parry",
            "kind": "reaction",
            "text": "+2 AC against one melee attack that would otherwise hit her."
          }
        ],
        "cr": "2",
        "xp": 450
      },
      "secrets": [
        {
          "id": "sec-rook-debt",
          "text": "The silver Mother Rook skims off every shipment goes to the same capital debt collector squeezing Brother Ilias. She started the arrangement years ago purely to spite the Vigil’s toll; she has never learned it’s the same collector, or that it still matters this much to keep paying."
        }
      ],
      "aliases": [
        "Hedda Rook"
      ],
      "refs": [
        {
          "id": "ref-rook-parent",
          "relation": "parent",
          "targetId": "npc-wat"
        },
        {
          "id": "ref-rook-company",
          "relation": "leads",
          "targetId": "fac-rooks"
        },
        {
          "id": "ref-rook-sib-tobin",
          "relation": "sibling",
          "targetId": "npc-tobin",
          "derived": true
        }
      ]
    },
    {
      "id": "npc-sella",
      "type": "character",
      "name": "Sella Rook",
      "summary": "Mother Rook’s niece and the one who actually walks the docks after dark.",
      "tags": [
        "npc",
        "fenmarket",
        "rook-family"
      ],
      "canvasPosition": {
        "x": -300,
        "y": 440
      },
      "fields": {
        "role": "Enforcer, Fenmarket Free Company",
        "appearance": "Wiry, quick, a dockworker’s hook worn at her hip like a blade.",
        "personality": "Loyal past the point of sense. Underestimated constantly, which she has learned to use.",
        "backstory": "Raised on the docks by her aunt after her parents, Tobin and Maren, drowned running the same crates she now runs.",
        "arc": "Choosing, when it comes to blows, between her aunt’s orders and her own idea of who started this.",
        "relationships": "Would take a knife meant for her aunt without being asked twice.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 190,
          "month": 8,
          "day": 1
        }
      },
      "gameStats": {
        "kind": "npc",
        "system": "D&D 5e",
        "maxHp": 22,
        "ac": 14,
        "speed": "30 ft.",
        "abilities": {
          "str": 12,
          "dex": 16,
          "con": 13,
          "int": 10,
          "wis": 12,
          "cha": 11
        },
        "initiativeBonus": 3,
        "passivePerception": 11,
        "features": [
          {
            "id": "feat-sella-2",
            "name": "Multiattack",
            "kind": "action",
            "text": "Sella makes two Dock Hook attacks."
          },
          {
            "id": "feat-sella-1",
            "name": "Dock Hook",
            "kind": "action",
            "text": "Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 1d6 + 3 slashing damage."
          },
          {
            "id": "feat-sella-3",
            "name": "Cunning Action",
            "kind": "bonusAction",
            "text": "Dash, Disengage or Hide."
          },
          {
            "id": "feat-sella-4",
            "name": "Take the Knife",
            "kind": "reaction",
            "text": "When a creature she can see attacks Mother Rook within 5 feet of her, Sella becomes the target instead."
          }
        ],
        "cr": "1",
        "xp": 200
      },
      "aliases": [
        "the Hook"
      ],
      "refs": [
        {
          "id": "ref-sella-father",
          "relation": "parent",
          "targetId": "npc-tobin"
        },
        {
          "id": "ref-sella-mother",
          "relation": "parent",
          "targetId": "npc-maren"
        },
        {
          "id": "ref-sella-company",
          "relation": "member of",
          "targetId": "fac-rooks"
        },
        {
          "id": "ref-sella-gp-wat",
          "relation": "grandparent",
          "targetId": "npc-wat",
          "derived": true
        }
      ]
    },
    {
      "id": "npc-ferris",
      "type": "character",
      "name": "Old Ferris",
      "summary": "Lights the lamps, hears everything, repeats most of it.",
      "tags": [
        "npc",
        "town"
      ],
      "canvasPosition": {
        "x": -300,
        "y": 580
      },
      "fields": {
        "role": "Lamplighter",
        "appearance": "Stooped, cheerful, a lantern pole worn smooth as glass.",
        "personality": "Chatty, harmless, occasionally right.",
        "backstory": "Has lit Ravensmoor’s lamps for forty years, since before the Baron’s father. Knows every door that opens after curfew, and who opens it.",
        "arc": "Has started telling the party things he tells nobody else, and the town is starting to notice who he talks to.",
        "relationships": "Drinks on the reeve’s tab at the Lantern & Eel. Sweeps the Greyhold steps every Vigilday and gossips with Sister Wren through the gate.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 150,
          "month": 12,
          "day": 20
        }
      },
      "aliases": [
        "the Lamplighter"
      ]
    },
    {
      "id": "npc-wren",
      "type": "character",
      "name": "Sister Wren Talbot",
      "summary": "The Greyhold’s second warden. Knows more about Vane’s paperwork than she’s said out loud.",
      "tags": [
        "npc",
        "witness",
        "the-vigil"
      ],
      "canvasPosition": {
        "x": -300,
        "y": 720
      },
      "fields": {
        "role": "Junior Warden of the Greyhold",
        "appearance": "Young, ink-stained sleeves, keeps her hood up indoors out of habit, not modesty.",
        "personality": "Careful. Watches Ilias more closely than she watches anyone else.",
        "backstory": "The newest sworn member of the Vigil, three years in. Handles most of the Greyhold’s correspondence with the Steward’s Hall.",
        "arc": "Covering for Ilias has made her part of Vane’s forgeries. The truth means admitting she signed the Warden’s Key out herself.",
        "relationships": "Covers for Ilias without fully knowing why she started.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 189,
          "month": 2,
          "day": 25
        }
      },
      "aliases": [
        "Sister Wren"
      ],
      "refs": [
        {
          "id": "ref-wren-vigil",
          "relation": "member of",
          "targetId": "fac-vigil"
        },
        {
          "id": "ref-wren-cloister",
          "relation": "resides in",
          "targetId": "loc-cloister"
        },
        {
          "id": "ref-wren-faith",
          "relation": "faith",
          "targetId": "rel-kept-word"
        }
      ]
    },
    {
      "id": "npc-daws",
      "type": "character",
      "name": "Sergeant Orrin Daws",
      "summary": "Sergeant of the Ducal Watch. Has carried out every order under the Baron’s seal for twenty-two years, and has started counting them.",
      "tags": [
        "npc",
        "witness",
        "the-watch"
      ],
      "aliases": [
        "the Sergeant"
      ],
      "canvasPosition": {
        "x": -300,
        "y": 860
      },
      "fields": {
        "role": "Sergeant of the Ducal Watch",
        "appearance": "Thick through the shoulders, gray stubble, a halberd he leans on like a walking stick until he doesn’t.",
        "personality": "Slow-spoken, stubborn, fair. Follows orders to the letter and reads the letter very carefully.",
        "backstory": "Joined the Watch at eighteen to guard the river crossing and never left. Has served three captains and one steward, and outlasted all of them.",
        "arc": "Choosing between the seal he swore to and the man he can no longer find under it.",
        "relationships": "Takes his orders from Steward Vane in the Baron’s name. Drinks with Old Ferris on Vigilday, which is how half the town’s rumors reach the garrison.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 172,
          "month": 6,
          "day": 6
        }
      },
      "refs": [
        {
          "id": "ref-daws-watch",
          "relation": "member of",
          "targetId": "fac-watch"
        }
      ],
      "gameStats": {
        "kind": "npc",
        "system": "D&D 5e",
        "maxHp": 39,
        "ac": 17,
        "speed": "30 ft.",
        "abilities": {
          "str": 16,
          "dex": 13,
          "con": 14,
          "int": 10,
          "wis": 12,
          "cha": 11
        },
        "initiativeBonus": 1,
        "passivePerception": 13,
        "cr": "2",
        "xp": 450,
        "features": [
          {
            "id": "feat-daws-1",
            "name": "Multiattack",
            "kind": "action",
            "text": "Daws makes two Halberd attacks."
          },
          {
            "id": "feat-daws-2",
            "name": "Halberd",
            "kind": "action",
            "text": "Melee Weapon Attack: +5 to hit, reach 10 ft., one target. Hit: 1d10 + 3 slashing damage."
          },
          {
            "id": "feat-daws-3",
            "name": "Heavy Crossbow",
            "kind": "action",
            "text": "Ranged Weapon Attack: +3 to hit, range 100/400 ft., one target. Hit: 1d10 + 1 piercing damage."
          },
          {
            "id": "feat-daws-4",
            "name": "Hold the Line",
            "kind": "reaction",
            "text": "When a creature moves to within 10 feet of him, he makes one Halberd attack against it."
          },
          {
            "id": "feat-daws-5",
            "name": "Orders Are Orders",
            "kind": "trait",
            "text": "Fights to disarm and detain. The moment anyone drops to 0 hit points, he calls the Watch off and waits for the Steward to say it again."
          }
        ]
      },
      "secrets": [
        {
          "id": "sec-daws-writs",
          "text": "Daws knows the Baron’s hand. Every writ since midwinter has carried the seal and a signature that isn’t it, and he has kept every one of them in a strongbox under his cot at the garrison house. Asked the right way, by someone who isn’t the Steward, he hands the box over."
        }
      ]
    },
    {
      "id": "npc-wat",
      "type": "character",
      "name": "Wat Rook",
      "summary": "Eel-fisher, toll-dodger, and the owner of the leaking rowboat the Fenmarket Free Company was built from.",
      "tags": [
        "npc",
        "deceased",
        "fenmarket",
        "rook-family"
      ],
      "canvasPosition": {
        "x": -300,
        "y": 1000
      },
      "fields": {
        "role": "Eel-fisher of Fenmarket",
        "appearance": "Remembered as small, bandy-legged and permanently wet.",
        "personality": "Cheerful, crooked in small ways, and loudly certain the Vigil’s river toll was robbery.",
        "backstory": "Fished the Wend for forty years and paid the Vigil’s toll for none of them. Taught his daughter every channel through the reeds before the marsh fever took him.",
        "arc": "Dead before the campaign began; lives on in what the docks remember.",
        "relationships": "Father of Hedda, now Mother Rook, and of Tobin. Grandfather to Sella, who never met him.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 138,
          "month": 1,
          "day": 4
        },
        "died": {
          "calendarId": "cal-vigil",
          "year": 196,
          "month": 9,
          "day": 2
        }
      },
      "refs": [
        {
          "id": "ref-wat-child-hedda",
          "relation": "child",
          "targetId": "npc-rook"
        },
        {
          "id": "ref-wat-child-tobin",
          "relation": "child",
          "targetId": "npc-tobin"
        },
        {
          "id": "ref-wat-gc-sella",
          "relation": "grandchild",
          "targetId": "npc-sella",
          "derived": true
        }
      ]
    },
    {
      "id": "npc-tobin",
      "type": "character",
      "name": "Tobin Rook",
      "summary": "Mother Rook’s younger brother. Drowned with his wife running crates through a Fogmonth flood.",
      "tags": [
        "npc",
        "deceased",
        "fenmarket",
        "rook-family"
      ],
      "canvasPosition": {
        "x": -300,
        "y": 1140
      },
      "fields": {
        "role": "Boatman, Fenmarket Free Company",
        "appearance": "Broad like his sister, with a laugh you could hear across the river.",
        "personality": "Reckless, warm, and the company’s best boatman until the night he wasn’t.",
        "backstory": "Ran the company’s boats while Hedda ran its ledger. Took the flat-bottom out in a Fogmonth flood against her advice and didn’t come back.",
        "arc": "Dead before the campaign began; lives on in what the docks remember.",
        "relationships": "Hedda’s brother, Maren’s husband, Sella’s father.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 168,
          "month": 4,
          "day": 15
        },
        "died": {
          "calendarId": "cal-vigil",
          "year": 199,
          "month": 9,
          "day": 14
        }
      },
      "refs": [
        {
          "id": "ref-tobin-parent",
          "relation": "parent",
          "targetId": "npc-wat"
        },
        {
          "id": "ref-tobin-spouse",
          "relation": "spouse",
          "targetId": "npc-maren"
        },
        {
          "id": "ref-tobin-child",
          "relation": "child",
          "targetId": "npc-sella"
        },
        {
          "id": "ref-tobin-sib-hedda",
          "relation": "sibling",
          "targetId": "npc-rook",
          "derived": true
        }
      ]
    },
    {
      "id": "npc-maren",
      "type": "character",
      "name": "Maren Rook",
      "summary": "Sella’s mother. Drowned beside Tobin in the same flood.",
      "tags": [
        "npc",
        "deceased",
        "fenmarket",
        "rook-family"
      ],
      "canvasPosition": {
        "x": -300,
        "y": 1280
      },
      "fields": {
        "role": "Boatwoman, Fenmarket Free Company",
        "appearance": "Small and quick, with the dockworker’s hook Sella wears now.",
        "personality": "Careful where Tobin was not, which is why she went with him that night.",
        "backstory": "Married into the company from a ferry family upriver. Her hook went to Sella the morning after the flood and has not left her belt since.",
        "arc": "Dead before the campaign began; lives on in what the docks remember.",
        "relationships": "Tobin’s wife, Sella’s mother.",
        "born": {
          "calendarId": "cal-vigil",
          "year": 170,
          "month": 5,
          "day": 28
        },
        "died": {
          "calendarId": "cal-vigil",
          "year": 199,
          "month": 9,
          "day": 14
        }
      },
      "refs": [
        {
          "id": "ref-maren-spouse",
          "relation": "spouse",
          "targetId": "npc-tobin"
        },
        {
          "id": "ref-maren-child",
          "relation": "child",
          "targetId": "npc-sella"
        }
      ]
    },
    {
      "id": "cre-sentinel",
      "type": "creature",
      "name": "Stone Sentinel",
      "summary": "The Greyhold’s vault guardian. Wakes for anyone who crosses the threshold without a warden’s key.",
      "tags": [
        "monster",
        "the-greyhold"
      ],
      "canvasPosition": {
        "x": 0,
        "y": -260
      },
      "fields": {
        "description": "A man-shaped construct of fused stone and old iron, worked into the Greyhold’s lowest archway.",
        "behavior": "Motionless until the wardstone at the threshold is crossed unkeyed, then relentless.",
        "habitat": "The Greyhold vault stair",
        "tactics": "Blocks the only exit and slams the nearest intruder; ignores anyone carrying a warden’s key entirely."
      },
      "gameStats": {
        "kind": "monster",
        "system": "D&D 5e",
        "maxHp": 60,
        "ac": 16,
        "cr": "3",
        "xp": 700,
        "speed": "20 ft.",
        "abilities": {
          "str": 18,
          "dex": 8,
          "con": 17,
          "int": 3,
          "wis": 10,
          "cha": 1
        },
        "features": [
          {
            "id": "feat-sentinel-1",
            "name": "Slam",
            "kind": "action",
            "text": "Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 2d8 + 4 bludgeoning damage."
          },
          {
            "id": "feat-sentinel-2",
            "name": "Warded Fury",
            "kind": "trait",
            "text": "Immune to being charmed, frightened, or poisoned, and to any spell that would alter its form."
          },
          {
            "id": "feat-sentinel-3",
            "name": "Ponderous Strike",
            "kind": "legendary",
            "text": "The sentinel makes one Slam attack.",
            "uses": "1/round, only while another creature acts"
          }
        ],
        "initiativeBonus": -1,
        "passivePerception": 10
      }
    },
    {
      "id": "cre-ghoul",
      "type": "creature",
      "name": "Ghoul",
      "summary": "Two of them, risen in the Greyhold’s lower floor grates: warden-flesh the vault’s ward soured long ago.",
      "tags": [
        "monster",
        "undead",
        "the-greyhold"
      ],
      "canvasPosition": {
        "x": 0,
        "y": -120
      },
      "fields": {
        "description": "Withered, gray-skinned, quick despite the rot. What’s left of an older generation of wardens who didn’t leave when they died.",
        "behavior": "Rises when the Stone Sentinel wakes, never before. Goes for whoever’s already down.",
        "habitat": "The Greyhold vault",
        "tactics": "Claws to paralyze, then piles onto anything that stops moving."
      },
      "gameStats": {
        "kind": "monster",
        "system": "D&D 5e",
        "maxHp": 22,
        "ac": 12,
        "cr": "1",
        "xp": 200,
        "speed": "30 ft.",
        "abilities": {
          "str": 13,
          "dex": 15,
          "con": 10,
          "int": 7,
          "wis": 10,
          "cha": 6
        },
        "features": [
          {
            "id": "feat-ghoul-1",
            "name": "Bite",
            "kind": "action",
            "text": "Melee Weapon Attack: +2 to hit, reach 5 ft., one creature. Hit: 2d6 + 2 piercing damage."
          },
          {
            "id": "feat-ghoul-2",
            "name": "Claws",
            "kind": "action",
            "text": "Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 2d4 + 2 slashing damage. On a failed Constitution save, paralyzed for 1 minute."
          }
        ],
        "initiativeBonus": 2,
        "passivePerception": 10
      },
      "compendiumRef": {
        "sourceId": "srd-2024",
        "slug": "ghoul"
      }
    },
    {
      "id": "cre-specter",
      "type": "creature",
      "name": "Specter",
      "summary": "The restless dead of a warden who died protecting the ledger from an earlier theft. Calms, if it’s given a reason to.",
      "tags": [
        "monster",
        "undead",
        "the-greyhold"
      ],
      "canvasPosition": {
        "x": 0,
        "y": 20
      },
      "fields": {
        "description": "A translucent, drifting shape with the vague outline of the old Greyhold habit.",
        "behavior": "Watches from the ceiling until the vault is disturbed, then attacks whoever holds anything that once belonged to it.",
        "habitat": "The Greyhold vault",
        "tactics": "Passes through walls to flank; drains rather than strikes."
      },
      "gameStats": {
        "kind": "monster",
        "system": "D&D 5e",
        "maxHp": 22,
        "ac": 12,
        "cr": "1",
        "xp": 200,
        "speed": "0 ft., fly 50 ft. (hover)",
        "abilities": {
          "str": 1,
          "dex": 14,
          "con": 11,
          "int": 10,
          "wis": 10,
          "cha": 11
        },
        "features": [
          {
            "id": "feat-specter-1",
            "name": "Incorporeal Movement",
            "kind": "trait",
            "text": "Can move through other creatures and objects as if they were difficult terrain."
          },
          {
            "id": "feat-specter-2",
            "name": "Life Drain",
            "kind": "action",
            "text": "Melee Spell Attack: +4 to hit, reach 5 ft., one creature. Hit: 3d6 necrotic damage; target’s hit point maximum is reduced by that amount."
          }
        ],
        "initiativeBonus": 2,
        "passivePerception": 10
      },
      "compendiumRef": {
        "sourceId": "srd-2024",
        "slug": "specter"
      }
    },
    {
      "id": "cre-lurker",
      "type": "creature",
      "name": "Marsh Lurker",
      "summary": "A patient thing in the reeds along the Sunken Road. Nobody’s lost more than a boot to one in years. Yet.",
      "tags": [
        "monster",
        "the-marsh"
      ],
      "canvasPosition": {
        "x": 0,
        "y": 160
      },
      "fields": {
        "description": "A long-bodied ambush predator, more shadow and ripple than shape until it’s already too close.",
        "behavior": "Watches from the waterline; rarely presses an attack against more than one target at a time.",
        "habitat": "The reed banks along the Sunken Road",
        "tactics": "Waits for something to wade or wander close, then a single strike and back under."
      },
      "gameStats": {
        "kind": "monster",
        "system": "D&D 5e",
        "maxHp": 19,
        "ac": 13,
        "cr": "1/2",
        "xp": 100,
        "speed": "30 ft., swim 30 ft.",
        "abilities": {
          "str": 15,
          "dex": 13,
          "con": 14,
          "int": 2,
          "wis": 12,
          "cha": 5
        },
        "features": [
          {
            "id": "feat-lurker-1",
            "name": "Bite",
            "kind": "action",
            "text": "Melee Weapon Attack: +4 to hit, reach 10 ft., one target. Hit: 2d6 + 2 piercing damage, and the target is grappled (escape DC 12)."
          },
          {
            "id": "feat-lurker-2",
            "name": "Ambush",
            "kind": "trait",
            "text": "Advantage on attack rolls against any creature it has surprised."
          }
        ],
        "initiativeBonus": 1,
        "passivePerception": 13
      },
      "refs": [
        {
          "id": "ref-lurker-road",
          "relation": "lairs in",
          "targetId": "loc-sunken-road"
        }
      ]
    },
    {
      "id": "loc-lantern",
      "type": "location",
      "name": "The Lantern & Eel",
      "summary": "Ravensmoor’s riverside tavern, and the closest thing the town has to a town hall after dark.",
      "tags": [
        "town"
      ],
      "canvasPosition": {
        "x": 300,
        "y": -260
      },
      "fields": {
        "region": "Ravensmoor",
        "description": "Low-beamed, always smells faintly of eel stew, and never quite empty even at closing.",
        "notableFeatures": "A back room the reeve keeps unofficially reserved."
      }
    },
    {
      "id": "loc-greyhold",
      "type": "location",
      "name": "The Greyhold",
      "summary": "A monastery-turned-vault beneath the chapter house, where three generations of tithes have been kept.",
      "tags": [
        "the-greyhold",
        "the-vigil"
      ],
      "canvasPosition": {
        "x": 300,
        "y": -120
      },
      "fields": {
        "region": "Ravensmoor",
        "description": "Cold stone corridors above a warded vault stair, worked by the Vigil for two hundred years.",
        "notableFeatures": "The Stone Sentinel at the vault threshold; a lower cloister few outsiders have seen."
      },
      "aliases": [
        "the vault",
        "the chapter house"
      ],
      "refs": [
        {
          "id": "ref-greyhold-vigil",
          "relation": "held by",
          "targetId": "fac-vigil"
        }
      ],
      "secrets": [
        {
          "id": "sec-greyhold-ossuary",
          "text": "The Baron lies in the lower cloister’s ossuary, in a niche marked for a Brother Corvin whom nobody in the Vigil remembers taking vows. Ilias cut the name himself the night he found the body."
        }
      ]
    },
    {
      "id": "loc-cloister",
      "type": "location",
      "name": "The Silent Cloister",
      "summary": "The Vigil’s living quarters, where the Greyhold’s two wardens keep the order’s few remaining vows.",
      "tags": [
        "the-greyhold",
        "the-vigil"
      ],
      "canvasPosition": {
        "x": 300,
        "y": 20
      },
      "fields": {
        "region": "Ravensmoor",
        "description": "A quiet colonnade around a dry garden, kept scrupulously plain.",
        "notableFeatures": "A correspondence desk that gets far more use than a monastery’s should."
      },
      "refs": [
        {
          "id": "ref-cloister-part",
          "relation": "part of",
          "targetId": "loc-greyhold"
        }
      ]
    },
    {
      "id": "loc-stewards-hall",
      "type": "location",
      "name": "The Steward’s Hall",
      "summary": "Where Ravensmoor is actually governed, in a Baron’s name that hasn’t answered to it in months.",
      "tags": [
        "town"
      ],
      "canvasPosition": {
        "x": 300,
        "y": 160
      },
      "fields": {
        "region": "Ravensmoor",
        "description": "A working hall more than a throne room: ledgers outnumber banners two to one.",
        "notableFeatures": "The Baron’s empty writing desk, kept exactly as he left it."
      },
      "secrets": [
        {
          "id": "sec-hall-desk",
          "text": "The Baron’s writing desk has a false bottom. Under it lie forty sheets of the Baron’s signature in Vane’s hand, the early ones clumsy and the last ones perfect. He has never been able to make himself burn them."
        }
      ]
    },
    {
      "id": "loc-fenmarket",
      "type": "location",
      "name": "Fenmarket",
      "summary": "The docks and market strip where the marsh meets the river, and where very little arrives with paperwork.",
      "tags": [
        "fenmarket"
      ],
      "canvasPosition": {
        "x": 300,
        "y": 300
      },
      "fields": {
        "region": "Ravensmoor",
        "description": "Stalls by day, quieter and busier business by night.",
        "notableFeatures": "A warehouse row Mother Rook treats as her own front hall."
      },
      "refs": [
        {
          "id": "ref-fenmarket-company",
          "relation": "run by",
          "targetId": "fac-rooks"
        }
      ]
    },
    {
      "id": "loc-sunken-road",
      "type": "location",
      "name": "The Sunken Road",
      "summary": "The low marsh causeway linking Ravensmoor to the capital road: slow, wet, and easy to go missing on.",
      "tags": [
        "the-marsh"
      ],
      "canvasPosition": {
        "x": 300,
        "y": 440
      },
      "fields": {
        "region": "Approaching Ravensmoor",
        "description": "A raised causeway through reed marsh, flooded ankle-deep in a hard rain.",
        "notableFeatures": "The wrecked tithe caravan, still half-sunk at the third mile-marker. A Steward’s writ closed the causeway “for flooding” the day after the caravan left, which is why nobody found it for a fortnight."
      },
      "aliases": [
        "the causeway"
      ]
    },
    {
      "id": "fac-vigil",
      "type": "faction",
      "name": "The Vigil of Greyhold",
      "summary": "The monastic order sworn to guard Ravensmoor’s tithes, for two centuries and counting.",
      "tags": [
        "the-vigil"
      ],
      "canvasPosition": {
        "x": 600,
        "y": -260
      },
      "fields": {
        "goals": "Keep the Greyhold vault, and the town’s trust in it, intact.",
        "members": "A handful of sworn wardens; Ilias Combe and Wren Talbot are the only two left in residence.",
        "resources": "The vault itself, and a stipend that hasn’t kept pace with what the wardens actually need.",
        "allegiances": "Nominally the Duke’s; practically its own, and has been for decades.",
        "history": "Founded when the chapter house was built, before Ravensmoor was more than a ford and a ferry."
      },
      "refs": [
        {
          "id": "ref-vigil-faith",
          "relation": "keeps the faith of",
          "targetId": "rel-kept-word"
        }
      ]
    },
    {
      "id": "fac-rooks",
      "type": "faction",
      "name": "The Fenmarket Free Company",
      "summary": "What Mother Rook calls her smuggling operation when she’s being polite about it.",
      "tags": [
        "fenmarket"
      ],
      "canvasPosition": {
        "x": 600,
        "y": -120
      },
      "fields": {
        "goals": "Move goods, and coin, past every toll Ravensmoor tries to charge for them.",
        "members": "Mother Rook, Sella Rook, and a rotating crew of dockhands who know better than to ask questions.",
        "resources": "A warehouse, three flat-bottomed boats, and a lot of the town’s goodwill, bought quietly.",
        "allegiances": "To the docks, and to Mother Rook.",
        "history": "Grew out of a single rowboat Rook used to dodge the Vigil’s river toll, out of pure spite, twenty years ago."
      },
      "aliases": [
        "the Rooks"
      ]
    },
    {
      "id": "fac-watch",
      "type": "faction",
      "name": "The Ducal Watch",
      "summary": "Ravensmoor’s garrison, commanded in the Baron’s name by a steward increasingly uneasy about saying it.",
      "tags": [
        "the-watch",
        "town"
      ],
      "canvasPosition": {
        "x": 600,
        "y": 20
      },
      "fields": {
        "goals": "Keep the peace, collect what the Steward’s Hall tells them to collect.",
        "members": "A garrison of two dozen, thin enough that Fenmarket mostly polices itself.",
        "resources": "The garrison house, and whatever the tithe actually funds this season.",
        "allegiances": "To the Baron’s seal, which is to say, currently, to Steward Vane.",
        "history": "Raised a generation ago to guard the river crossing; has done less crossing-guarding every year since."
      },
      "aliases": [
        "the Watch"
      ]
    },
    {
      "id": "itm-ledger",
      "type": "item",
      "name": "The Greyhold Ledger",
      "summary": "Three years of tithes in Ilias’s own hand, and the falsified lines that prove it.",
      "tags": [
        "evidence",
        "the-vigil"
      ],
      "canvasPosition": {
        "x": 900,
        "y": -260
      },
      "fields": {
        "itemType": "Document",
        "origin": "The Greyhold vault",
        "properties": "Plain, water-stained, unremarkable until you check the sums.",
        "significance": "Proves the skimming, and to anyone who reads closely, proves it isn’t what emptied the whole caravan.",
        "currentOwner": "Lyris Fenwick"
      },
      "refs": [
        {
          "id": "ref-ledger-ilias",
          "relation": "kept by",
          "targetId": "npc-ilias"
        },
        {
          "id": "ref-ledger-lyris",
          "relation": "kept by",
          "targetId": "pc-lyris",
          "from": {
            "kind": "scene",
            "sceneId": "scene-greyhold-vault"
          }
        }
      ]
    },
    {
      "id": "itm-seal",
      "type": "item",
      "name": "The Baron’s Seal",
      "summary": "A signet that hasn’t touched the Baron’s own hand since midwinter.",
      "tags": [
        "evidence",
        "town"
      ],
      "canvasPosition": {
        "x": 900,
        "y": -120
      },
      "fields": {
        "itemType": "Signet ring",
        "origin": "House Ashworth",
        "properties": "Heavy silver, the Ashworth heron worked into the face.",
        "significance": "Every order it stamps is legally the Baron’s, whoever’s hand is actually holding it.",
        "currentOwner": "Steward Aldric Vane"
      },
      "aliases": [
        "the Ashworth signet"
      ],
      "refs": [
        {
          "id": "ref-seal-baron",
          "relation": "worn by",
          "targetId": "npc-baron"
        },
        {
          "id": "ref-seal-vane",
          "relation": "worn by",
          "targetId": "npc-vane",
          "from": {
            "kind": "date",
            "date": {
              "calendarId": "cal-vigil",
              "year": 211,
              "month": 11,
              "day": 3
            }
          }
        }
      ]
    },
    {
      "id": "itm-key",
      "type": "item",
      "name": "The Warden’s Key",
      "summary": "The only thing the Stone Sentinel recognizes as permission.",
      "tags": [
        "evidence",
        "the-greyhold"
      ],
      "canvasPosition": {
        "x": 900,
        "y": 20
      },
      "fields": {
        "itemType": "Vault key",
        "origin": "The Greyhold",
        "properties": "Black iron, warm to the touch near the vault threshold. Two were cast: Ilias wears one, and the other sleeps in the correspondence desk at the Silent Cloister.",
        "significance": "Without it, the vault stair is a fight. Ilias never offered his. The tool mark on the caravan’s strongbox says somebody used one on the Sunken Road.",
        "currentOwner": "Brother Ilias Combe"
      },
      "refs": [
        {
          "id": "ref-key-ilias",
          "relation": "carried by",
          "targetId": "npc-ilias"
        },
        {
          "id": "ref-key-spare-wren",
          "relation": "spare kept by",
          "targetId": "npc-wren"
        },
        {
          "id": "ref-key-spare-vane",
          "relation": "spare kept by",
          "targetId": "npc-vane",
          "from": {
            "kind": "date",
            "date": {
              "calendarId": "cal-vigil",
              "year": 212,
              "month": 7,
              "day": 24
            }
          }
        },
        {
          "id": "ref-key-spare-back",
          "relation": "spare kept by",
          "targetId": "npc-wren",
          "from": {
            "kind": "date",
            "date": {
              "calendarId": "cal-vigil",
              "year": 212,
              "month": 7,
              "day": 26
            }
          }
        }
      ],
      "secrets": [
        {
          "id": "sec-key-writ",
          "text": "On 24 Tithemonth Sister Wren signed the spare key out to the Steward’s Hall on a writ under the Baron’s seal, “for an inventory of House Ashworth’s deposits.” It came back on the 26th, the morning after the tithe caravan left. It is the key that opened the strongbox on the Sunken Road. Ilias has never been told it left the desk.",
          "revealedSessionId": "ses-3"
        }
      ]
    },
    {
      "id": "itm-locket",
      "type": "item",
      "name": "The Widow’s Locket",
      "summary": "Belonged to the warden who is now the Greyhold’s specter. Offering it back seems to matter.",
      "tags": [
        "the-greyhold"
      ],
      "canvasPosition": {
        "x": 900,
        "y": 160
      },
      "fields": {
        "itemType": "Locket",
        "origin": "The Greyhold, generations back",
        "properties": "Tarnished silver, a lock of hair gone to dust inside.",
        "significance": "The one thing that calms the vault’s ghost, if anyone thinks to try it before drawing steel.",
        "currentOwner": "Brother Ilias Combe"
      },
      "refs": [
        {
          "id": "ref-locket-vault",
          "relation": "located in",
          "targetId": "loc-greyhold"
        }
      ]
    },
    {
      "id": "rel-kept-word",
      "type": "religion",
      "name": "The Kept Word",
      "summary": "The plain, stubborn faith the Vigil keeps: every oath is witnessed by the dead who swore it before you.",
      "tags": [
        "the-vigil",
        "the-greyhold"
      ],
      "canvasPosition": {
        "x": 1200,
        "y": -260
      },
      "fields": {
        "deities": "No god by name. The Witnesses: every warden who ever swore the Vigil’s oath, keeping count from the dark.",
        "coreBeliefs": "A promise is a debt, and the dead collect. A warden who dies with a broken oath does not rest; one who dies keeping it watches over the next. The faithful say the Greyhold’s ghouls are wardens who stole, and its specter one who died stopping a theft.",
        "practicesAndRites": "Oaths are sworn aloud, before witnesses, and written into the vault’s ledger. The Greyhold bell rings once at each vow and once at each death. Every Vigilday the wardens read the names of the Witnesses until the candle burns down.",
        "organization": "The Vigil of Greyhold is the whole of its clergy now: two wardens in residence and a stipend from the capital that has not risen in a decade.",
        "history": "As old as the Greyhold. The Vigil’s Reckoning counts its years from the first oath sworn on the vault stair."
      }
    },
    {
      "id": "hist-founding",
      "type": "historyEvent",
      "name": "The First Oath",
      "summary": "Year one of the Vigil’s Reckoning: the first warden swears on the vault stair, and Ravensmoor starts counting.",
      "tags": [
        "backstory",
        "the-vigil"
      ],
      "canvasPosition": {
        "x": 1200,
        "y": -120
      },
      "fields": {
        "era": "1 VR, two hundred and eleven years before the campaign.",
        "description": "When Ravensmoor was a ford, a ferry and a chapter house, the first warden swore to keep the district’s tithes whole until they reached the capital. The Stone Sentinel was worked into the vault arch the same year, and two keys were cast to pass it.",
        "participants": "The first wardens of the Vigil; the ferry families who became Ravensmoor.",
        "consequences": "The town’s calendar, the vault, the bell, and two hundred years of trust that the tithe arrives. That trust is what the stolen caravan is spending."
      }
    },
    {
      "id": "hist-baron-death",
      "type": "historyEvent",
      "name": "The Baron’s Last Midwinter",
      "summary": "Baron Ashworth goes down to the Greyhold vault on the third night of Midwinter and doesn’t come up.",
      "tags": [
        "backstory",
        "town"
      ],
      "canvasPosition": {
        "x": 1200,
        "y": 20
      },
      "fields": {
        "era": "3 Midwinter 211 VR, eight months before the campaign.",
        "description": "The Baron kept an old custom of counting the winter tithe himself. Vane poured the wine for the walk down. Ilias found the Baron in the lower cloister at dawn, cold, and buried him under a false name before anyone could ask the Vigil why its warden was standing over a dead lord.",
        "participants": "Baron Corvin Ashworth; Steward Aldric Vane; Brother Ilias Combe.",
        "consequences": "Vane has signed and sealed for a dead man ever since. Ilias has said nothing. Ravensmoor has been governed by momentum and forged authority for most of a year."
      }
    },
    {
      "id": "hist-caravan",
      "type": "historyEvent",
      "name": "The Tithe Caravan Lost",
      "summary": "The season’s tithe leaves for the capital on 25 Tithemonth and goes into the reeds three miles out.",
      "tags": [
        "backstory",
        "the-marsh"
      ],
      "canvasPosition": {
        "x": 1200,
        "y": 160
      },
      "fields": {
        "era": "25 Tithemonth 212 VR, a fortnight before the campaign opens.",
        "description": "Two wagons and four drovers left at dusk. At the third mile-marker someone with a warden’s key opened the strongbox, pried off the tithe seal and drove the wagons off the causeway. The drovers were paid to walk to the capital and keep walking. The next morning a Steward’s writ closed the road for flooding.",
        "participants": "Steward Vane, through hired hands; the spare Warden’s Key; the drovers, long gone.",
        "consequences": "The capital is owed a tithe it hasn’t received. Reeve Amsel hires the party. Vane needs someone to blame, and the Vigil’s own ledger is the nearest candidate."
      }
    },
    {
      "id": "note-gm-prep",
      "type": "note",
      "name": "GM prep: where this goes next",
      "summary": "Working notes for session four and the endgame. Not for the players.",
      "tags": [
        "gm-prep"
      ],
      "canvasPosition": {
        "x": 1200,
        "y": 300
      },
      "fields": {
        "body": "Where we stopped: round two in the Steward’s Hall. Daws fights to disarm, not to kill, and calls the Watch off the moment anyone drops. If the party walks out with the ledger, Vane lets them go and sends the Watch to the docks after dark instead.\n\nWhat each of them wants right now:\nVane: the ledger back, and Ilias blamed for the caravan.\nKatja: proof she can take to the capital without starting a riot.\nMother Rook: to find out why the party is asking about her silver, before the Watch does.\nDaws: someone other than the Steward to hand his strongbox of writs to.\nIlias: to be caught, mostly, though he’ll never say it.\n\nThe collector: Ilias and Mother Rook pay the same man in the capital. If the table asks, he’s Gideon Marr, a bonded factor with a house on the Duke’s Row. Not this arc’s villain; next arc’s problem.\n\nThree ways the Reckoning can land:\n1. Katja and the town: the ledger, the key writ and Daws’s strongbox read aloud at the Lantern & Eel.\n2. The Duke’s assize: a two-day ride on the Sunken Road with Vane in irons and the Watch not sure whose side it’s on.\n3. The Vigil: Ilias opens the ossuary and the Baron is found where Vane can’t deny him.\n\nDon’t forget: the Specter calmed for the locket, not for the party. If anyone takes the locket out of the vault, it follows."
      }
    },
    {
      "id": "pp-tithe",
      "type": "plotPoint",
      "name": "The Missing Tithe",
      "summary": "The season’s tithe never reached the capital, and the reeve wants to know why before someone above her does.",
      "tags": [
        "spine",
        "act-one"
      ],
      "canvasPosition": {
        "x": 0,
        "y": 0
      },
      "fields": {
        "description": "Reeve Amsel hires the party at the Lantern & Eel. The caravan’s wreck on the Sunken Road proves the theft was planned: a broken strongbox, a pried-off seal, and a tool mark that matches a warden’s key.",
        "consequences": "Points the party at the Greyhold, and at the only people who are supposed to hold that key."
      }
    },
    {
      "id": "pp-confession",
      "type": "plotPoint",
      "name": "The Warden’s Confession",
      "summary": "Brother Ilias breaks over his own ledger: a thief for three years, but not of this caravan.",
      "tags": [
        "spine",
        "act-one",
        "the-greyhold"
      ],
      "canvasPosition": {
        "x": 320,
        "y": 0
      },
      "fields": {
        "description": "The break-in at the Greyhold vault wakes the Stone Sentinel and the warden-ghouls. When the ledger comes out into the light, Ilias admits to skimming the tithe for a debt in the capital and swears he never touched the caravan.",
        "consequences": "The obvious suspect is the wrong one. The party keeps his secret and takes the ledger, which proves someone else emptied the caravan."
      }
    },
    {
      "id": "pp-seal",
      "type": "plotPoint",
      "name": "The Steward’s Seal",
      "summary": "Every writ since midwinter carries the Baron’s seal and someone else’s hand.",
      "tags": [
        "spine",
        "act-two",
        "villain"
      ],
      "canvasPosition": {
        "x": 640,
        "y": 0
      },
      "fields": {
        "description": "Sister Wren’s correspondence book shows the spare Warden’s Key signed out to the Steward’s Hall on a sealed writ the week the caravan left. Confronted with it, Steward Vane calls the Watch.",
        "consequences": "Vane knows the party knows. The Watch has seen its Steward order a fight over a ledger, and Sergeant Daws is watching the Steward’s hands."
      }
    },
    {
      "id": "sub-debt",
      "type": "subplot",
      "name": "Paid from Both Ends",
      "summary": "Ilias and Mother Rook are bleeding silver to the same collector in the capital, and neither knows it.",
      "tags": [
        "act-two",
        "fenmarket"
      ],
      "canvasPosition": {
        "x": 640,
        "y": 240
      },
      "fields": {
        "description": "The silver Mother Rook skims off every shipment goes to the same bonded factor who is threatening Ilias’s sister. Rook started paying him to spite the Vigil’s toll; Ilias started paying to keep his family safe.",
        "keyCharacters": "Mother Rook, Sella Rook, Brother Ilias Combe.",
        "arc": "From a stranger watching the party in Fenmarket, to an ambush on the docks, to whichever side Rook takes once she learns who else is paying.",
        "resolution": "Open. If the party brings Rook and Ilias to the same table, the collector becomes the next arc."
      }
    },
    {
      "id": "pp-reckoning",
      "type": "plotPoint",
      "name": "The Reckoning",
      "summary": "The forged seal comes apart. Who hears the truth first decides what Ravensmoor becomes.",
      "tags": [
        "spine",
        "act-three"
      ],
      "canvasPosition": {
        "x": 960,
        "y": 0
      },
      "fields": {
        "description": "With the ledger, the key writ and proof of midwinter in hand, the party chooses where to bring it: the town, the Duke’s assize, or the Vigil’s own ossuary.",
        "consequences": "Unwritten on purpose. The party’s choices in session four decide who stands with them."
      }
    },
    {
      "id": "scene-lantern",
      "type": "scene",
      "name": "The Lantern & Eel",
      "summary": "The party takes Katja Amsel’s coin to find out why the tithe caravan never reached the capital.",
      "tags": [
        "session-1",
        "act-one"
      ],
      "canvasPosition": {
        "x": 0,
        "y": 0
      },
      "fields": {
        "povCharacter": "Petra Voss",
        "setting": "The Lantern & Eel, Ravensmoor’s riverside tavern, evening.",
        "content": "Reeve Katja Amsel finds the party over supper and lays it out plainly: the season’s tithe caravan never reached the capital, and the Steward’s Hall hasn’t reported it missing. She wants to know why before someone above her does. Old Ferris works the room with rumor instead of ale.",
        "notes": "Play Katja worried, not desperate: she’s hiring competence, not panic. Ferris is a rumor delivery system; let the table pick which one lands.",
        "povEntityId": "pc-petra",
        "plotId": "pp-tithe",
        "placements": [
          {
            "entityId": "loc-lantern",
            "position": {
              "x": -240,
              "y": -200
            }
          },
          {
            "entityId": "pc-petra",
            "position": {
              "x": -240,
              "y": 0
            }
          },
          {
            "entityId": "pc-oskar",
            "position": {
              "x": -240,
              "y": 180
            }
          },
          {
            "entityId": "pc-lyris",
            "position": {
              "x": 0,
              "y": 0
            }
          },
          {
            "entityId": "pc-corwin",
            "position": {
              "x": 0,
              "y": 180
            }
          },
          {
            "entityId": "npc-katja",
            "position": {
              "x": 260,
              "y": -100
            }
          },
          {
            "entityId": "npc-ferris",
            "position": {
              "x": 260,
              "y": 120
            }
          }
        ],
        "decisions": [
          {
            "id": "dec-take-job",
            "prompt": "Take the reeve’s coin, or turn her down?",
            "options": [
              {
                "id": "opt-take-job",
                "text": "Take the job",
                "taken": {
                  "sessionId": "ses-1"
                }
              },
              {
                "id": "opt-refuse-job",
                "text": "Turn her down"
              }
            ]
          }
        ],
        "date": {
          "calendarId": "cal-vigil",
          "year": 212,
          "month": 8,
          "day": 9
        }
      }
    },
    {
      "id": "scene-sunken-road",
      "type": "scene",
      "name": "The Sunken Road",
      "summary": "Rain, a wrecked caravan, and the first proof the theft was planned.",
      "tags": [
        "session-1",
        "session-2",
        "act-one"
      ],
      "canvasPosition": {
        "x": 300,
        "y": 0
      },
      "fields": {
        "povCharacter": "Lyris Fenwick",
        "setting": "The Sunken Road, the marsh causeway toward the capital, the morning after.",
        "content": "The caravan wreckage sits half-sunk at the third mile-marker, exactly where the road narrows enough to force a stop. The strongbox is broken open and the tithe seal pried clean off. No accident. Something is watching from the reeds, in no hurry.",
        "notes": "Ran long at the table, so it split forward. The strongbox clue (tool mark, warden’s key) is the hook into the Greyhold; do not let it get missed twice.",
        "povEntityId": "pc-lyris",
        "plotId": "pp-tithe",
        "placements": [
          {
            "entityId": "loc-sunken-road",
            "position": {
              "x": -240,
              "y": -200
            }
          },
          {
            "entityId": "pc-petra",
            "position": {
              "x": -240,
              "y": 0
            }
          },
          {
            "entityId": "pc-oskar",
            "position": {
              "x": -240,
              "y": 180
            }
          },
          {
            "entityId": "pc-lyris",
            "position": {
              "x": 0,
              "y": 0
            }
          },
          {
            "entityId": "pc-corwin",
            "position": {
              "x": 0,
              "y": 180
            }
          },
          {
            "entityId": "cre-lurker",
            "position": {
              "x": 260,
              "y": 90
            }
          }
        ],
        "decisions": [
          {
            "id": "dec-push-on",
            "prompt": "Push on to the Greyhold tonight, or make camp and go in fresh?",
            "options": [
              {
                "id": "opt-push-on",
                "text": "Push on: Katja’s paying for speed",
                "taken": {
                  "sessionId": "ses-2"
                }
              },
              {
                "id": "opt-make-camp",
                "text": "Make camp and go in fresh"
              }
            ]
          }
        ],
        "date": {
          "calendarId": "cal-vigil",
          "year": 212,
          "month": 8,
          "day": 10
        }
      }
    },
    {
      "id": "scene-greyhold-vault",
      "type": "scene",
      "name": "The Greyhold Vault",
      "summary": "The break-in: a woken sentinel, ghouls from the floor grates, and a warden who breaks before the fight ends.",
      "tags": [
        "session-2",
        "act-one"
      ],
      "canvasPosition": {
        "x": 0,
        "y": 0
      },
      "fields": {
        "povCharacter": "Oskar Thane",
        "setting": "The Greyhold vault stair, beneath the chapter house.",
        "content": "Brother Ilias meets the party at the door, too calm about a broken seal. A botched attempt to scout ahead wakes the Stone Sentinel, and the vault’s ghouls come up through the floor grates with it. When the ledger finally comes out into the light, Ilias stops pretending he doesn’t recognize his own handwriting.",
        "notes": "Ilias folds fast once the ledger’s open. He’s been waiting three years to be caught. The locket is on a shelf near the specter’s corner if anyone thinks to look before swinging. He wears his key on his belt the whole time and never offers it.",
        "povEntityId": "pc-oskar",
        "plotId": "pp-confession",
        "placements": [
          {
            "entityId": "loc-greyhold",
            "position": {
              "x": -240,
              "y": -200
            }
          },
          {
            "entityId": "pc-petra",
            "position": {
              "x": -240,
              "y": 0
            }
          },
          {
            "entityId": "pc-oskar",
            "position": {
              "x": -240,
              "y": 180
            }
          },
          {
            "entityId": "pc-lyris",
            "position": {
              "x": 0,
              "y": 0
            }
          },
          {
            "entityId": "pc-corwin",
            "position": {
              "x": 0,
              "y": 180
            }
          },
          {
            "entityId": "npc-ilias",
            "position": {
              "x": 260,
              "y": -200
            }
          },
          {
            "entityId": "itm-key",
            "position": {
              "x": 500,
              "y": -200
            }
          },
          {
            "entityId": "itm-ledger",
            "position": {
              "x": 260,
              "y": 0
            }
          },
          {
            "entityId": "cre-specter",
            "position": {
              "x": 500,
              "y": 0
            }
          },
          {
            "entityId": "cre-sentinel",
            "position": {
              "x": 260,
              "y": 180
            }
          },
          {
            "entityId": "cre-ghoul",
            "position": {
              "x": 500,
              "y": 180
            }
          },
          {
            "entityId": "itm-locket",
            "position": {
              "x": 740,
              "y": 0
            }
          }
        ],
        "decisions": [
          {
            "id": "dec-calm-specter",
            "prompt": "Offer the locket to calm the specter, or fight through it?",
            "options": [
              {
                "id": "opt-offer-locket",
                "text": "Offer the locket",
                "taken": {
                  "sessionId": "ses-2"
                }
              },
              {
                "id": "opt-fight-specter",
                "text": "Fight through it"
              }
            ]
          },
          {
            "id": "dec-turn-in-ilias",
            "prompt": "Turn Ilias in to Katja, or keep his secret for now?",
            "options": [
              {
                "id": "opt-turn-in-ilias",
                "text": "Turn him in"
              },
              {
                "id": "opt-keep-secret-ilias",
                "text": "Keep his secret, for now",
                "taken": {
                  "sessionId": "ses-2"
                }
              }
            ]
          }
        ],
        "date": {
          "calendarId": "cal-vigil",
          "year": 212,
          "month": 8,
          "day": 10
        }
      }
    },
    {
      "id": "scene-cloister",
      "type": "scene",
      "name": "The Silent Cloister",
      "summary": "In the quiet after the vault, Sister Wren says almost enough about Vane.",
      "tags": [
        "session-3",
        "act-two"
      ],
      "canvasPosition": {
        "x": 0,
        "y": 0
      },
      "fields": {
        "povCharacter": "Corwin Ashby",
        "setting": "The Silent Cloister, the Vigil’s living quarters.",
        "content": "Sister Wren Talbot tends the party’s wounds and, carefully, their questions. She won’t say outright that Steward Vane’s writs don’t look right to her, but she doesn’t say they do, either. Pressed, she opens her correspondence book to the week the caravan left and the line she has been dreading.",
        "notes": "Wren knows more than she’ll volunteer. She’s protecting Vane out of habit, not loyalty; the right question cracks that. Sella Rook is at the gate if anyone looks: Mother Rook wants to know who’s asking about her silver.",
        "povEntityId": "pc-corwin",
        "plotId": "pp-seal",
        "placements": [
          {
            "entityId": "loc-cloister",
            "position": {
              "x": -240,
              "y": -200
            }
          },
          {
            "entityId": "pc-petra",
            "position": {
              "x": -240,
              "y": 0
            }
          },
          {
            "entityId": "pc-oskar",
            "position": {
              "x": -240,
              "y": 180
            }
          },
          {
            "entityId": "pc-lyris",
            "position": {
              "x": 0,
              "y": 0
            }
          },
          {
            "entityId": "pc-corwin",
            "position": {
              "x": 0,
              "y": 180
            }
          },
          {
            "entityId": "npc-wren",
            "position": {
              "x": 260,
              "y": -100
            }
          },
          {
            "entityId": "npc-ilias",
            "position": {
              "x": 260,
              "y": 100
            }
          },
          {
            "entityId": "itm-key",
            "position": {
              "x": 500,
              "y": -100
            }
          },
          {
            "entityId": "fac-vigil",
            "position": {
              "x": 500,
              "y": 100
            }
          },
          {
            "entityId": "npc-sella",
            "position": {
              "x": 740,
              "y": 180
            }
          }
        ],
        "decisions": [
          {
            "id": "dec-ilias-confess",
            "prompt": "Push Ilias to confess to the Vigil, or let him keep working both sides?",
            "options": [
              {
                "id": "opt-push-confess",
                "text": "Push him to confess"
              },
              {
                "id": "opt-let-him-work",
                "text": "Let him keep working both sides, for now",
                "taken": {
                  "sessionId": "ses-3"
                }
              }
            ]
          }
        ],
        "date": {
          "calendarId": "cal-vigil",
          "year": 212,
          "month": 8,
          "day": 11
        }
      }
    },
    {
      "id": "scene-stewards-hall",
      "type": "scene",
      "name": "The Steward’s Hall",
      "summary": "A polite, guarded conversation with the man who signs for an absent lord, until the ledger lands on the desk.",
      "tags": [
        "session-3",
        "act-two"
      ],
      "canvasPosition": {
        "x": 300,
        "y": 0
      },
      "fields": {
        "povCharacter": "Petra Voss",
        "setting": "The Steward’s Hall, Ravensmoor.",
        "content": "Steward Vane receives the party with every courtesy and answers nothing directly. The Baron’s writing desk sits behind him, exactly as its owner left it. When Lyris lays the ledger and the key writ on that desk, Vane reads both twice, folds the writ into his sleeve, and calls for the Watch.",
        "notes": "Vane never lies outright; he just never confirms anything either. Let the Baron’s desk do some of the talking. If it goes to blows, run the Watch as reluctant: Daws wants this over without a body.",
        "povEntityId": "pc-petra",
        "plotId": "pp-seal",
        "placements": [
          {
            "entityId": "loc-stewards-hall",
            "position": {
              "x": -240,
              "y": -200
            }
          },
          {
            "entityId": "pc-petra",
            "position": {
              "x": -240,
              "y": 0
            }
          },
          {
            "entityId": "pc-oskar",
            "position": {
              "x": -240,
              "y": 180
            }
          },
          {
            "entityId": "pc-lyris",
            "position": {
              "x": 0,
              "y": 0
            }
          },
          {
            "entityId": "pc-corwin",
            "position": {
              "x": 0,
              "y": 180
            }
          },
          {
            "entityId": "itm-ledger",
            "position": {
              "x": 0,
              "y": -200
            }
          },
          {
            "entityId": "npc-vane",
            "position": {
              "x": 260,
              "y": -100
            }
          },
          {
            "entityId": "itm-seal",
            "position": {
              "x": 500,
              "y": -100
            }
          },
          {
            "entityId": "npc-daws",
            "position": {
              "x": 260,
              "y": 100
            }
          },
          {
            "entityId": "fac-watch",
            "position": {
              "x": 500,
              "y": 100
            }
          }
        ],
        "decisions": [
          {
            "id": "dec-show-ledger",
            "prompt": "Lay the ledger on the Baron’s desk, or keep it back?",
            "options": [
              {
                "id": "opt-show-ledger",
                "text": "Lay it on the desk",
                "taken": {
                  "sessionId": "ses-3"
                }
              },
              {
                "id": "opt-keep-ledger",
                "text": "Keep it back and leave politely"
              }
            ]
          },
          {
            "id": "dec-hall-exit",
            "prompt": "If the Watch breaks: take Vane into custody, or get the ledger out to Katja?",
            "options": [
              {
                "id": "opt-take-vane",
                "text": "Take Vane"
              },
              {
                "id": "opt-run-ledger",
                "text": "Get the ledger to Katja"
              }
            ]
          }
        ],
        "date": {
          "calendarId": "cal-vigil",
          "year": 212,
          "month": 8,
          "day": 14
        }
      }
    },
    {
      "id": "scene-fenmarket-market",
      "type": "scene",
      "name": "Fenmarket, by Daylight",
      "summary": "A quieter visit to the docks, before anyone decides to make it a fight.",
      "tags": [
        "session-3",
        "act-two"
      ],
      "canvasPosition": {
        "x": 0,
        "y": 0
      },
      "fields": {
        "povCharacter": "Lyris Fenwick",
        "setting": "Fenmarket, midday.",
        "content": "By daylight Fenmarket is just a market: fish, rope, and a woman at a corner stall who watches the party a beat too long before going back to her scales. Katja meets them here, off the record, to hear what the Greyhold turned up.",
        "notes": "Rook clocks the party without confronting them: she’s deciding whether they’re a problem yet. Nothing violent happens here.",
        "povEntityId": "pc-lyris",
        "plotId": "sub-debt",
        "placements": [
          {
            "entityId": "loc-fenmarket",
            "position": {
              "x": -240,
              "y": -200
            }
          },
          {
            "entityId": "pc-petra",
            "position": {
              "x": -240,
              "y": 0
            }
          },
          {
            "entityId": "pc-oskar",
            "position": {
              "x": -240,
              "y": 180
            }
          },
          {
            "entityId": "pc-lyris",
            "position": {
              "x": 0,
              "y": 0
            }
          },
          {
            "entityId": "pc-corwin",
            "position": {
              "x": 0,
              "y": 180
            }
          },
          {
            "entityId": "npc-katja",
            "position": {
              "x": 260,
              "y": -100
            }
          },
          {
            "entityId": "npc-ferris",
            "position": {
              "x": 500,
              "y": -100
            }
          },
          {
            "entityId": "npc-rook",
            "position": {
              "x": 260,
              "y": 100
            }
          }
        ],
        "date": {
          "calendarId": "cal-vigil",
          "year": 212,
          "month": 8,
          "day": 15
        }
      }
    },
    {
      "id": "scene-fenmarket-docks",
      "type": "scene",
      "name": "Fenmarket Docks, After Dark",
      "summary": "Prepped, not yet played: the ambush waiting once the party comes back after dark.",
      "tags": [
        "session-4",
        "act-two"
      ],
      "canvasPosition": {
        "x": 300,
        "y": 0
      },
      "fields": {
        "povCharacter": "Oskar Thane",
        "setting": "Fenmarket, the warehouse row, night.",
        "content": "Mother Rook doesn’t like being investigated. If the party comes back to Fenmarket after dark asking about the caravan, Sella and a handful of dockhands are already in position among the crates.",
        "notes": "Prepped for next session. Rook wants to talk first and fight second, so let the party choose which one they get.",
        "povEntityId": "pc-oskar",
        "plotId": "sub-debt",
        "placements": [
          {
            "entityId": "loc-fenmarket",
            "position": {
              "x": -240,
              "y": -200
            }
          },
          {
            "entityId": "pc-petra",
            "position": {
              "x": -240,
              "y": 0
            }
          },
          {
            "entityId": "pc-oskar",
            "position": {
              "x": -240,
              "y": 180
            }
          },
          {
            "entityId": "pc-lyris",
            "position": {
              "x": 0,
              "y": 0
            }
          },
          {
            "entityId": "pc-corwin",
            "position": {
              "x": 0,
              "y": 180
            }
          },
          {
            "entityId": "npc-rook",
            "position": {
              "x": 260,
              "y": -100
            }
          },
          {
            "entityId": "npc-sella",
            "position": {
              "x": 260,
              "y": 100
            }
          },
          {
            "entityId": "fac-rooks",
            "position": {
              "x": 500,
              "y": -100
            }
          }
        ],
        "decisions": [
          {
            "id": "dec-sella-fate",
            "prompt": "If it comes to blows: take Sella alive, or let her run?",
            "options": [
              {
                "id": "opt-sella-alive",
                "text": "Take her alive"
              },
              {
                "id": "opt-sella-runs",
                "text": "Let her run"
              }
            ]
          }
        ],
        "date": {
          "calendarId": "cal-vigil",
          "year": 212,
          "month": 8,
          "day": 15
        }
      }
    },
    {
      "id": "scene-reckoning",
      "type": "scene",
      "name": "The Reckoning",
      "summary": "Unplanned. Whatever comes after the docks, once the party knows the whole shape of it.",
      "tags": [
        "session-4",
        "act-three"
      ],
      "canvasPosition": {
        "x": 0,
        "y": 0
      },
      "fields": {
        "povCharacter": "Corwin Ashby",
        "setting": "Wherever the party forces it: the Steward’s Hall, the Greyhold ossuary, or the Duke’s road.",
        "content": "The forged seal comes apart. Whoever the party brings the ledger, the key writ and the truth about midwinter to first decides what Ravensmoor becomes: a town that fixes its own books, a barony under the Duke’s assize, or a Vigil that finally opens its ossuary.",
        "notes": "Sitting in the picker for whenever the docks resolve. Don’t over-prep this one until session four actually happens; the three likely landings are in the GM prep note.",
        "povEntityId": "pc-corwin",
        "plotId": "pp-reckoning",
        "placements": [
          {
            "entityId": "loc-stewards-hall",
            "position": {
              "x": -240,
              "y": -200
            }
          },
          {
            "entityId": "pc-petra",
            "position": {
              "x": -240,
              "y": 0
            }
          },
          {
            "entityId": "pc-oskar",
            "position": {
              "x": -240,
              "y": 180
            }
          },
          {
            "entityId": "pc-lyris",
            "position": {
              "x": 0,
              "y": 0
            }
          },
          {
            "entityId": "pc-corwin",
            "position": {
              "x": 0,
              "y": 180
            }
          },
          {
            "entityId": "npc-vane",
            "position": {
              "x": 260,
              "y": -200
            }
          },
          {
            "entityId": "npc-ilias",
            "position": {
              "x": 260,
              "y": 0
            }
          },
          {
            "entityId": "npc-katja",
            "position": {
              "x": 260,
              "y": 180
            }
          },
          {
            "entityId": "itm-ledger",
            "position": {
              "x": 500,
              "y": -200
            }
          },
          {
            "entityId": "itm-seal",
            "position": {
              "x": 500,
              "y": 0
            }
          },
          {
            "entityId": "npc-daws",
            "position": {
              "x": 500,
              "y": 180
            }
          }
        ],
        "decisions": [
          {
            "id": "dec-reckoning-who",
            "prompt": "Who hears the truth first?",
            "options": [
              {
                "id": "opt-tell-town",
                "text": "Katja and the town"
              },
              {
                "id": "opt-tell-duke",
                "text": "The Duke’s assize"
              },
              {
                "id": "opt-tell-vigil",
                "text": "The Vigil, at the ossuary"
              }
            ]
          }
        ]
      }
    }
  ],
  "connections": [
    {
      "id": "conn-petra-oskar",
      "scope": "scene",
      "sourceEntityId": "pc-petra",
      "targetEntityId": "pc-oskar",
      "states": [
        {
          "id": "st-po-1",
          "fromSceneId": "scene-lantern",
          "label": "Hired for the same job, sizing each other up",
          "type": "relationship"
        },
        {
          "id": "st-po-2",
          "fromSceneId": "scene-greyhold-vault",
          "label": "Trusts him at her back now",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-lyris-corwin",
      "scope": "scene",
      "sourceEntityId": "pc-lyris",
      "targetEntityId": "pc-corwin",
      "states": [
        {
          "id": "st-lc-1",
          "fromSceneId": "scene-lantern",
          "label": "Old traveling companions, arrived together",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-petra-katja",
      "scope": "scene",
      "sourceEntityId": "pc-petra",
      "targetEntityId": "npc-katja",
      "states": [
        {
          "id": "st-pk-1",
          "fromSceneId": "scene-lantern",
          "label": "Hired to find the missing tithe",
          "type": "relationship"
        },
        {
          "id": "st-pk-2",
          "fromSceneId": "scene-fenmarket-market",
          "label": "Trusted enough to hear about Vane",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-ilias-vane",
      "scope": "scene",
      "sourceEntityId": "npc-ilias",
      "targetEntityId": "npc-vane",
      "states": [
        {
          "id": "st-iv-1",
          "fromSceneId": "scene-greyhold-vault",
          "label": "Correct and distant, warden to steward",
          "type": "relationship"
        },
        {
          "id": "st-iv-2",
          "fromSceneId": "scene-stewards-hall",
          "label": "Suspects him of something worse than skimming",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-vane-baron",
      "scope": "scene",
      "sourceEntityId": "npc-vane",
      "targetEntityId": "npc-baron",
      "states": [
        {
          "id": "st-vb-1",
          "fromSceneId": "scene-lantern",
          "label": "Loyal steward, absent lord",
          "type": "custom"
        },
        {
          "id": "st-vb-2",
          "fromSceneId": "scene-stewards-hall",
          "label": "Forges a dead man’s hand",
          "type": "custom"
        }
      ]
    },
    {
      "id": "conn-rook-sella",
      "scope": "scene",
      "sourceEntityId": "npc-rook",
      "targetEntityId": "npc-sella",
      "states": [
        {
          "id": "st-rs-1",
          "fromSceneId": "scene-fenmarket-market",
          "label": "Family, and the family business",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-rook-ilias",
      "scope": "scene",
      "sourceEntityId": "npc-rook",
      "targetEntityId": "npc-ilias",
      "states": [
        {
          "id": "st-ri-1",
          "fromSceneId": "scene-greyhold-vault",
          "label": "Strangers, so far as anyone knows",
          "type": "custom"
        },
        {
          "id": "st-ri-2",
          "fromSceneId": "scene-fenmarket-market",
          "label": "The same debt, paid from opposite ends",
          "type": "custom"
        }
      ]
    },
    {
      "id": "conn-ledger-ilias",
      "scope": "scene",
      "sourceEntityId": "itm-ledger",
      "targetEntityId": "npc-ilias",
      "states": [
        {
          "id": "st-li-1",
          "fromSceneId": "scene-greyhold-vault",
          "label": "The ledger that convicts him",
          "type": "custom"
        }
      ]
    },
    {
      "id": "conn-seal-vane",
      "scope": "scene",
      "sourceEntityId": "itm-seal",
      "targetEntityId": "npc-vane",
      "states": [
        {
          "id": "st-sv-1",
          "fromSceneId": "scene-stewards-hall",
          "label": "Forging a dead man’s signature",
          "type": "custom"
        }
      ]
    },
    {
      "id": "conn-vigil-ilias",
      "scope": "scene",
      "sourceEntityId": "fac-vigil",
      "targetEntityId": "npc-ilias",
      "states": [
        {
          "id": "st-vi-1",
          "fromSceneId": "scene-greyhold-vault",
          "label": "A brother of the Vigil, first and last",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-rooks-rook",
      "scope": "scene",
      "sourceEntityId": "fac-rooks",
      "targetEntityId": "npc-rook",
      "states": [
        {
          "id": "st-fr-1",
          "fromSceneId": "scene-fenmarket-market",
          "label": "Runs the Fenmarket docks",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-watch-vane",
      "scope": "scene",
      "sourceEntityId": "fac-watch",
      "targetEntityId": "npc-vane",
      "states": [
        {
          "id": "st-wv-1",
          "fromSceneId": "scene-stewards-hall",
          "label": "Commands the watch in the Baron’s name",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-wren-ilias",
      "scope": "scene",
      "sourceEntityId": "npc-wren",
      "targetEntityId": "npc-ilias",
      "states": [
        {
          "id": "st-wi-1",
          "fromSceneId": "scene-cloister",
          "label": "Covers for him, and no longer remembers why she started",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-daws-vane",
      "scope": "scene",
      "sourceEntityId": "npc-daws",
      "targetEntityId": "npc-vane",
      "states": [
        {
          "id": "st-dv-1",
          "fromSceneId": "scene-stewards-hall",
          "label": "Obeys the seal, and watches the hand holding it",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-katja-vane",
      "scope": "scene",
      "sourceEntityId": "npc-katja",
      "targetEntityId": "npc-vane",
      "states": [
        {
          "id": "st-kv-1",
          "fromSceneId": "scene-lantern",
          "label": "Reports to him on paper, trusts him less every season",
          "type": "relationship"
        },
        {
          "id": "st-kv-2",
          "fromSceneId": "scene-fenmarket-market",
          "label": "Ready to go over his head",
          "type": "relationship"
        }
      ]
    },
    {
      "id": "conn-key-vane",
      "scope": "scene",
      "sourceEntityId": "itm-key",
      "targetEntityId": "npc-vane",
      "states": [
        {
          "id": "st-kyv-1",
          "fromSceneId": "scene-cloister",
          "label": "Borrowed on a forged writ the week the caravan left",
          "type": "custom"
        }
      ]
    },
    {
      "id": "conn-sella-party",
      "scope": "scene",
      "sourceEntityId": "npc-sella",
      "targetEntityId": "pc-lyris",
      "states": [
        {
          "id": "st-sp-1",
          "fromSceneId": "scene-cloister",
          "label": "Watching from the gate, for her aunt",
          "type": "custom"
        },
        {
          "id": "st-sp-2",
          "fromSceneId": "scene-fenmarket-docks",
          "label": "Waiting among the crates",
          "type": "custom"
        }
      ]
    },
    {
      "id": "conn-tithe-confession",
      "scope": "story",
      "sourceEntityId": "pp-tithe",
      "targetEntityId": "pp-confession",
      "color": "var(--entity-scene)",
      "label": "the tool mark leads to"
    },
    {
      "id": "conn-confession-seal",
      "scope": "story",
      "sourceEntityId": "pp-confession",
      "targetEntityId": "pp-seal",
      "color": "var(--entity-scene)",
      "label": "if not Ilias, then who"
    },
    {
      "id": "conn-seal-reckoning",
      "scope": "story",
      "sourceEntityId": "pp-seal",
      "targetEntityId": "pp-reckoning",
      "color": "var(--entity-scene)",
      "label": "a forged seal can only hold so long"
    },
    {
      "id": "conn-confession-debt",
      "scope": "story",
      "sourceEntityId": "pp-confession",
      "targetEntityId": "sub-debt",
      "color": "var(--entity-subplot)",
      "label": "the same collector, paid from both ends"
    },
    {
      "id": "conn-debt-reckoning",
      "scope": "story",
      "sourceEntityId": "sub-debt",
      "targetEntityId": "pp-reckoning",
      "color": "var(--entity-subplot)",
      "label": "decides whose side the docks are on at"
    },
    {
      "id": "conn-lantern-road",
      "scope": "plot",
      "sourceEntityId": "scene-lantern",
      "targetEntityId": "scene-sunken-road",
      "label": "the next morning"
    },
    {
      "id": "conn-cloister-hall",
      "scope": "plot",
      "sourceEntityId": "scene-cloister",
      "targetEntityId": "scene-stewards-hall",
      "label": "three days later, an audience"
    },
    {
      "id": "conn-market-docks",
      "scope": "plot",
      "sourceEntityId": "scene-fenmarket-market",
      "targetEntityId": "scene-fenmarket-docks",
      "label": "back after dark"
    }
  ],
  "timeline": [
    "scene-lantern",
    "scene-sunken-road",
    "scene-greyhold-vault",
    "scene-cloister",
    "scene-stewards-hall",
    "scene-fenmarket-market",
    "scene-fenmarket-docks",
    "scene-reckoning"
  ],
  "stateChanges": [
    {
      "id": "sc-petra-gash",
      "entityId": "pc-petra",
      "sceneId": "scene-sunken-road",
      "description": "Takes a shallow gash from a spar in the caravan wreckage, nothing worth a spell slot.",
      "kind": "condition"
    },
    {
      "id": "sc-oskar-wound",
      "entityId": "pc-oskar",
      "sceneId": "scene-greyhold-vault",
      "description": "Takes the Stone Sentinel’s slam meant for Lyris and drops to a knee.",
      "kind": "condition"
    },
    {
      "id": "sc-oskar-heal",
      "entityId": "pc-oskar",
      "sceneId": "scene-cloister",
      "description": "The shoulder finally sets right after three proper nights’ rest at the Cloister. Fit to swing an axe again.",
      "kind": "status",
      "resolvesId": "sc-oskar-wound"
    },
    {
      "id": "sc-corwin-slots",
      "entityId": "pc-corwin",
      "sceneId": "scene-greyhold-vault",
      "description": "Spends every first-level slot he has holding Oskar together; down to cantrips until the party rests.",
      "kind": "status"
    },
    {
      "id": "sc-ledger-leaves",
      "entityId": "itm-ledger",
      "sceneId": "scene-greyhold-vault",
      "description": "Leaves the vault tucked into Lyris’s coat instead of the Greyhold’s strongroom.",
      "kind": "possession"
    },
    {
      "id": "sc-ilias-exposed",
      "entityId": "npc-ilias",
      "sceneId": "scene-greyhold-vault",
      "description": "Knows the party has read three years of his own handwriting in the ledger.",
      "kind": "knowledge"
    },
    {
      "id": "sc-petra-mended",
      "entityId": "pc-petra",
      "sceneId": "scene-cloister",
      "description": "Sister Wren stitches the gash from the Sunken Road. It will scar, and Petra seems pleased about that.",
      "kind": "status",
      "resolvesId": "sc-petra-gash"
    },
    {
      "id": "sc-corwin-rested",
      "entityId": "pc-corwin",
      "sceneId": "scene-cloister",
      "description": "Three nights’ sleep under the Vigil’s roof; every spell slot back.",
      "kind": "status",
      "resolvesId": "sc-corwin-slots"
    },
    {
      "id": "sc-wren-talks",
      "entityId": "npc-wren",
      "sceneId": "scene-cloister",
      "description": "Has shown the party the key writ in her own correspondence book. There is no taking it back.",
      "kind": "knowledge"
    },
    {
      "id": "sc-vane-suspects",
      "entityId": "npc-vane",
      "sceneId": "scene-stewards-hall",
      "description": "Doesn’t know how much the party has actually pieced together about midwinter, and it shows.",
      "kind": "knowledge",
      "visibility": "gm"
    },
    {
      "id": "sc-baron-dead",
      "entityId": "npc-baron",
      "sceneId": "scene-stewards-hall",
      "description": "Confirmed dead since midwinter behind the scenes, though the party has produced no body yet.",
      "kind": "whereabouts",
      "visibility": "gm"
    },
    {
      "id": "sc-ledger-desk",
      "entityId": "itm-ledger",
      "sceneId": "scene-stewards-hall",
      "description": "Lies open on the Baron’s desk between the party and the Watch, with the Watch ordered to take it.",
      "kind": "possession"
    },
    {
      "id": "sc-petra-ribs",
      "entityId": "pc-petra",
      "sceneId": "scene-stewards-hall",
      "description": "Takes a Watch halberd across the ribs holding the Hall doors.",
      "kind": "condition"
    },
    {
      "id": "sc-daws-doubts",
      "entityId": "npc-daws",
      "sceneId": "scene-stewards-hall",
      "description": "Saw the writ go into the Steward’s sleeve, and knows the hand on it isn’t the Baron’s.",
      "kind": "knowledge",
      "visibility": "gm"
    },
    {
      "id": "sc-rook-watching",
      "entityId": "npc-rook",
      "sceneId": "scene-fenmarket-market",
      "description": "Marks the party as a problem worth watching, not yet worth fighting.",
      "kind": "status"
    }
  ],
  "manuscript": {
    "chapters": [],
    "scenes": []
  },
  "maps": [
    {
      "id": "map-ravensmoor",
      "name": "Ravensmoor and the Sunken Road",
      "image": {
        "full": "/demo/ravensmoor-map.svg",
        "thumb": "/demo/ravensmoor-map.svg"
      },
      "pins": [
        {
          "id": "pin-lantern",
          "entityId": "loc-lantern",
          "x": 0.607,
          "y": 0.376
        },
        {
          "id": "pin-greyhold",
          "entityId": "loc-greyhold",
          "x": 0.313,
          "y": 0.386
        },
        {
          "id": "pin-cloister",
          "entityId": "loc-cloister",
          "x": 0.208,
          "y": 0.481
        },
        {
          "id": "pin-stewards-hall",
          "entityId": "loc-stewards-hall",
          "x": 0.507,
          "y": 0.448
        },
        {
          "id": "pin-fenmarket",
          "entityId": "loc-fenmarket",
          "x": 0.767,
          "y": 0.424
        },
        {
          "id": "pin-sunken-road",
          "entityId": "loc-sunken-road",
          "x": 0.74,
          "y": 0.806
        }
      ]
    }
  ],
  "familyTrees": [
    {
      "id": "ft-rooks",
      "name": "The Rooks of Fenmarket",
      "memberIds": [
        "npc-wat",
        "npc-rook",
        "npc-tobin",
        "npc-maren",
        "npc-sella"
      ]
    }
  ],
  "calendars": [
    {
      "id": "cal-vigil",
      "name": "The Vigil’s Reckoning",
      "months": [
        {
          "name": "Thawmonth",
          "days": 30
        },
        {
          "name": "Sowmonth",
          "days": 30
        },
        {
          "name": "Greenmonth",
          "days": 30
        },
        {
          "name": "Sunmonth",
          "days": 30
        },
        {
          "name": "Reedmonth",
          "days": 30
        },
        {
          "name": "Reapmonth",
          "days": 30
        },
        {
          "name": "Tithemonth",
          "days": 30
        },
        {
          "name": "Rainmonth",
          "days": 30
        },
        {
          "name": "Fogmonth",
          "days": 30
        },
        {
          "name": "Longnight",
          "days": 30
        },
        {
          "name": "Midwinter",
          "days": 5
        },
        {
          "name": "Deepfrost",
          "days": 30
        },
        {
          "name": "Candlemonth",
          "days": 30
        }
      ],
      "era": {
        "positive": "VR"
      },
      "weekdays": [
        "Bellday",
        "Ferryday",
        "Marketday",
        "Tollday",
        "Hearthday",
        "Vigilday"
      ]
    }
  ],
  "defaultCalendarId": "cal-vigil",
  "rollTables": [
    {
      "id": "rt-whispers",
      "name": "What Ravensmoor is whispering",
      "entries": [
        {
          "id": "rte-whisper-1",
          "text": "The bridge toll doubled overnight, and nobody signed for it."
        },
        {
          "id": "rte-whisper-2",
          "text": "A courier left for the capital and never arrived."
        },
        {
          "id": "rte-whisper-3",
          "text": "The bell in the Greyhold rang at an hour it shouldn’t.",
          "entityId": "loc-greyhold"
        },
        {
          "id": "rte-whisper-4",
          "text": "Someone paid off the miller’s whole debt, in silver, all at once."
        },
        {
          "id": "rte-whisper-5",
          "text": "The steward hasn’t taken supper in the hall for a month.",
          "entityId": "npc-vane"
        },
        {
          "id": "rte-whisper-6",
          "text": "A light was seen moving on the old vault stair after curfew.",
          "entityId": "loc-greyhold"
        },
        {
          "id": "rte-whisper-7",
          "text": "The Rooks are hiring, and paying better than the watch.",
          "entityId": "fac-rooks"
        },
        {
          "id": "rte-whisper-8",
          "text": "Nobody has seen the Baron’s hunting hounds since midwinter.",
          "entityId": "npc-baron"
        }
      ]
    },
    {
      "id": "rt-sunken-road",
      "name": "Trouble on the Sunken Road",
      "entries": [
        {
          "id": "rte-road-1",
          "text": "The rain finds a way through everything.",
          "weight": 5
        },
        {
          "id": "rte-road-2",
          "text": "A toll rider stops you, bored and thorough.",
          "weight": 4,
          "entityId": "fac-watch"
        },
        {
          "id": "rte-road-3",
          "text": "Something moved wrong in the reeds.",
          "weight": 3,
          "entityId": "cre-lurker"
        },
        {
          "id": "rte-road-4",
          "text": "The wreckage isn’t empty after all.",
          "weight": 3,
          "entityId": "cre-lurker"
        },
        {
          "id": "rte-road-5",
          "text": "A merchant’s cart, stuck to the axle, grateful for help.",
          "weight": 2
        },
        {
          "id": "rte-road-6",
          "text": "Wolves, and they’re not hungry. Just curious. For now.",
          "weight": 2
        },
        {
          "id": "rte-road-7",
          "text": "Riders in the Duke’s colors, moving fast, not stopping.",
          "weight": 1
        }
      ]
    },
    {
      "id": "rt-madness-short",
      "name": "Short-term madness",
      "sourceId": "srd-2014",
      "entries": [
        {
          "id": "rte-madness-1",
          "text": "The character retreats into his or her mind and becomes paralyzed. The effect ends if the character takes any damage.",
          "weight": 20
        },
        {
          "id": "rte-madness-2",
          "text": "The character becomes incapacitated and spends the duration screaming, laughing, or weeping.",
          "weight": 10
        },
        {
          "id": "rte-madness-3",
          "text": "The character becomes frightened and must use his or her action and movement each round to flee from the source of the fear.",
          "weight": 10
        },
        {
          "id": "rte-madness-4",
          "text": "The character begins babbling and is incapable of normal speech or spellcasting.",
          "weight": 10
        },
        {
          "id": "rte-madness-5",
          "text": "The character must use his or her action each round to attack the nearest creature.",
          "weight": 10
        },
        {
          "id": "rte-madness-6",
          "text": "The character experiences vivid hallucinations and has disadvantage on ability checks.",
          "weight": 10
        },
        {
          "id": "rte-madness-7",
          "text": "The character does whatever anyone tells him or her to do that isn't obviously self-destructive.",
          "weight": 5
        },
        {
          "id": "rte-madness-8",
          "text": "The character experiences an overpowering urge to eat something strange such as dirt, slime, or offal.",
          "weight": 5
        },
        {
          "id": "rte-madness-9",
          "text": "The character is stunned.",
          "weight": 10
        },
        {
          "id": "rte-madness-10",
          "text": "The character falls unconscious.",
          "weight": 10
        }
      ]
    }
  ],
  "encounters": [
    {
      "id": "enc-vault",
      "name": "The Greyhold Vault",
      "sceneId": "scene-greyhold-vault",
      "notes": "The Stone Sentinel wakes if the threshold is crossed without a warden’s key. The ghouls rise with it; the specter joins only if the fight turns violent before anyone tries the locket.",
      "combatants": [
        {
          "id": "cb-sentinel",
          "source": {
            "kind": "entity",
            "entityId": "cre-sentinel"
          },
          "count": 1
        },
        {
          "id": "cb-ghoul",
          "source": {
            "kind": "entity",
            "entityId": "cre-ghoul"
          },
          "count": 2,
          "label": "Vault ghoul"
        },
        {
          "id": "cb-specter",
          "source": {
            "kind": "entity",
            "entityId": "cre-specter"
          },
          "count": 1
        }
      ]
    },
    {
      "id": "enc-hall",
      "name": "The Steward Calls the Watch",
      "sceneId": "scene-stewards-hall",
      "notes": "Vane wants the ledger, not a body. The Watch fights to disarm and detain, and Daws calls a halt the moment anyone drops. Two more guards come up the stair from the gate at the end of round two. Vane holds his turn behind the Baron’s desk and acts only if the ledger changes hands.",
      "combatants": [
        {
          "id": "cb-hall-daws",
          "source": {
            "kind": "entity",
            "entityId": "npc-daws"
          },
          "count": 1
        },
        {
          "id": "cb-hall-guards",
          "source": {
            "kind": "srd",
            "srdId": "srd-2024:guard"
          },
          "count": 4,
          "label": "Watch guard"
        },
        {
          "id": "cb-hall-vane",
          "source": {
            "kind": "entity",
            "entityId": "npc-vane"
          },
          "count": 1
        }
      ],
      "run": {
        "round": 2,
        "activeIndex": 4,
        "order": [
          {
            "id": "run-hall-lyris",
            "source": {
              "kind": "party",
              "entityId": "pc-lyris"
            },
            "name": "Lyris Fenwick",
            "initiative": 21,
            "hp": 27,
            "maxHp": 34,
            "conditions": [
              "Blessed"
            ],
            "conditionTimers": {
              "Blessed": 9
            }
          },
          {
            "id": "run-hall-daws",
            "source": {
              "kind": "combatant",
              "combatantId": "cb-hall-daws",
              "instance": 1
            },
            "name": "Sergeant Orrin Daws",
            "initiative": 17,
            "hp": 24,
            "maxHp": 39,
            "conditions": []
          },
          {
            "id": "run-hall-oskar",
            "source": {
              "kind": "party",
              "entityId": "pc-oskar"
            },
            "name": "Oskar Thane",
            "initiative": 16,
            "hp": 31,
            "maxHp": 44,
            "conditions": [
              "Raging",
              "Blessed"
            ],
            "tempHp": 2,
            "conditionTimers": {
              "Raging": 9,
              "Blessed": 9
            }
          },
          {
            "id": "run-hall-guard-1",
            "source": {
              "kind": "combatant",
              "combatantId": "cb-hall-guards",
              "instance": 1
            },
            "name": "Watch guard 1",
            "initiative": 14,
            "hp": 4,
            "maxHp": 11,
            "conditions": [
              "Prone"
            ]
          },
          {
            "id": "run-hall-petra",
            "source": {
              "kind": "party",
              "entityId": "pc-petra"
            },
            "name": "Petra Voss",
            "initiative": 12,
            "hp": 30,
            "maxHp": 36,
            "conditions": [
              "Blessed"
            ],
            "conditionTimers": {
              "Blessed": 9
            },
            "concentratingOn": "Heroism"
          },
          {
            "id": "run-hall-vane",
            "source": {
              "kind": "combatant",
              "combatantId": "cb-hall-vane",
              "instance": 1
            },
            "name": "Steward Aldric Vane",
            "initiative": 11,
            "hp": 27,
            "maxHp": 27,
            "conditions": [],
            "delayed": true
          },
          {
            "id": "run-hall-guard-3",
            "source": {
              "kind": "combatant",
              "combatantId": "cb-hall-guards",
              "instance": 3
            },
            "name": "Watch guard 3",
            "initiative": 10,
            "hp": 11,
            "maxHp": 11,
            "conditions": [],
            "joinsNextRound": true
          },
          {
            "id": "run-hall-guard-4",
            "source": {
              "kind": "combatant",
              "combatantId": "cb-hall-guards",
              "instance": 4
            },
            "name": "Watch guard 4",
            "initiative": 10,
            "hp": 11,
            "maxHp": 11,
            "conditions": [],
            "joinsNextRound": true
          },
          {
            "id": "run-hall-corwin",
            "source": {
              "kind": "party",
              "entityId": "pc-corwin"
            },
            "name": "Corwin Ashby",
            "initiative": 9,
            "hp": 32,
            "maxHp": 32,
            "conditions": [],
            "concentratingOn": "Bless"
          },
          {
            "id": "run-hall-guard-2",
            "source": {
              "kind": "combatant",
              "combatantId": "cb-hall-guards",
              "instance": 2
            },
            "name": "Watch guard 2",
            "initiative": 6,
            "hp": 0,
            "maxHp": 11,
            "conditions": [
              "Unconscious"
            ],
            "defeated": true
          }
        ]
      }
    },
    {
      "id": "enc-docks",
      "name": "Ambush at Fenmarket Docks",
      "sceneId": "scene-fenmarket-docks",
      "notes": "Rook talks first if given the chance. If it goes loud, Sella and the dockhands come out of the warehouse row on the second exchange, not the first.",
      "combatants": [
        {
          "id": "cb-rook",
          "source": {
            "kind": "entity",
            "entityId": "npc-rook"
          },
          "count": 1
        },
        {
          "id": "cb-sella",
          "source": {
            "kind": "entity",
            "entityId": "npc-sella"
          },
          "count": 1
        },
        {
          "id": "cb-smugglers",
          "source": {
            "kind": "srd",
            "srdId": "srd-2024:tough"
          },
          "count": 4,
          "label": "Dock smuggler"
        },
        {
          "id": "cb-enforcer",
          "source": {
            "kind": "srd",
            "srdId": "srd-2024:tough-boss"
          },
          "count": 1,
          "label": "Smuggler enforcer"
        }
      ]
    }
  ],
  "sessions": [
    {
      "id": "ses-1",
      "title": "Session 1 · The Long Road to Ravensmoor",
      "when": "Sat Aug 2",
      "status": "done",
      "agendaSceneIds": [
        "scene-lantern",
        "scene-sunken-road"
      ],
      "log": [
        {
          "id": "l1-01",
          "kind": "note",
          "text": "Everyone at the table by half seven. Corwin’s player brought the good dice."
        },
        {
          "id": "l1-02",
          "kind": "meet",
          "entityId": "loc-lantern",
          "playerFacing": true
        },
        {
          "id": "l1-03",
          "kind": "meet",
          "entityId": "npc-katja",
          "playerFacing": true
        },
        {
          "id": "l1-04",
          "kind": "meet",
          "entityId": "npc-ferris",
          "playerFacing": true
        },
        {
          "id": "l1-05",
          "kind": "roll",
          "expression": "What Ravensmoor is whispering",
          "result": 3,
          "detail": "What Ravensmoor is whispering: 3 of 8. The bell in the Greyhold rang at an hour it shouldn’t.",
          "playerFacing": true
        },
        {
          "id": "l1-06",
          "kind": "decision",
          "prompt": "Take the reeve’s coin, or turn her down?",
          "outcome": "Took the job. Half now, half after.",
          "playerFacing": true
        },
        {
          "id": "l1-07",
          "kind": "note",
          "text": "Katja’s real worry: the caravan should have reached the capital eleven days ago, and she hasn’t told the Steward’s Hall yet.",
          "highlight": true
        },
        {
          "id": "l1-08",
          "kind": "note",
          "text": "Cut to the road the next morning. Skip the goodbyes."
        },
        {
          "id": "l1-09",
          "kind": "meet",
          "entityId": "loc-sunken-road",
          "playerFacing": true
        },
        {
          "id": "l1-10",
          "kind": "roll",
          "expression": "Trouble on the Sunken Road",
          "result": 18,
          "detail": "Trouble on the Sunken Road: 18 of 20. Wolves, and they’re not hungry. Just curious. For now.",
          "playerFacing": true
        },
        {
          "id": "l1-11",
          "kind": "roll",
          "expression": "1d20+3",
          "result": 17,
          "detail": "1d20 [14] → 14, +3 = 17",
          "playerFacing": true
        },
        {
          "id": "l1-12",
          "kind": "meet",
          "entityId": "cre-lurker",
          "playerFacing": true,
          "playerText": "Something long and patient watches the wreck from the reeds. It doesn’t follow. Yet."
        },
        {
          "id": "l1-13",
          "kind": "note",
          "text": "Runs long. Stop here at the wreck; pick up the search next week."
        }
      ],
      "recap": "Hired by Reeve Katja Amsel to find out why the season’s tithe caravan never reached the capital. Word at the Lantern & Eel already has the town uneasy: a bell rang in the Greyhold at the wrong hour, and nobody who works there will say why.\n\nOn the road out, the party found the caravan’s wreckage before anything else did. Ran out of night before they finished searching it."
    },
    {
      "id": "ses-2",
      "title": "Session 2 · The Greyhold Vault",
      "when": "Sat Aug 16",
      "status": "done",
      "agendaSceneIds": [
        "scene-sunken-road",
        "scene-greyhold-vault"
      ],
      "encounterIds": [
        "enc-vault"
      ],
      "currentSceneId": "scene-greyhold-vault",
      "log": [
        {
          "id": "l2-01",
          "kind": "split",
          "sceneId": "scene-sunken-road",
          "fromSessionId": "ses-1",
          "played": "Found the wreckage and the strongbox, chased off whatever was watching from the reeds.",
          "remaining": "Nobody’s finished searching the strongbox yet.",
          "playerFacing": true
        },
        {
          "id": "l2-02",
          "kind": "note",
          "text": "Finish the wreck: the tithe seal was snapped clean off, and the tool mark on the strongbox matches a warden’s key.",
          "highlight": true
        },
        {
          "id": "l2-03",
          "kind": "roll",
          "expression": "1d20+2",
          "result": 22,
          "detail": "1d20 [20] → 20, +2 = 22",
          "highlight": true,
          "playerFacing": true
        },
        {
          "id": "l2-04",
          "kind": "note",
          "text": "Natural twenty on the strongbox. Not just the tool mark: a scrap of gray habit cloth caught on the hinge. Vigil colors."
        },
        {
          "id": "l2-05",
          "kind": "decision",
          "prompt": "Push on to the Greyhold tonight, or make camp and go in fresh?",
          "outcome": "Push on. Katja’s paying for speed.",
          "playerFacing": true
        },
        {
          "id": "l2-06",
          "kind": "meet",
          "entityId": "npc-ilias",
          "playerFacing": true,
          "playerText": "Warden Ilias Combe meets you at the Greyhold door, keys at his belt."
        },
        {
          "id": "l2-07",
          "kind": "meet",
          "entityId": "loc-greyhold",
          "playerFacing": true
        },
        {
          "id": "l2-08",
          "kind": "note",
          "text": "Ilias is too calm about the broken seal. Watch him.",
          "highlight": true
        },
        {
          "id": "l2-09",
          "kind": "roll",
          "expression": "1d20+5",
          "result": 6,
          "detail": "1d20 [1] → 1, +5 = 6",
          "playerFacing": true
        },
        {
          "id": "l2-10",
          "kind": "note",
          "text": "Natural one on the scout ahead. The sentinel’s eyes go from dull to violet. Fight’s on.",
          "highlight": true
        },
        {
          "id": "l2-11",
          "kind": "roll",
          "expression": "Short-term madness",
          "result": 35,
          "detail": "Short-term madness: 35 of 100. The character becomes frightened and must use his or her action and movement each round to flee from the source of the fear.",
          "highlight": true,
          "playerFacing": true
        },
        {
          "id": "l2-12",
          "kind": "note",
          "text": "Corwin, frightened, spends his round backing away instead of casting. Good complication, no permanent harm."
        },
        {
          "id": "l2-13",
          "kind": "state",
          "changeId": "sc-oskar-wound",
          "playerFacing": true
        },
        {
          "id": "l2-14",
          "kind": "decision",
          "prompt": "Offer the locket to calm the specter, or fight through it?",
          "outcome": "Offered the locket. It stopped mid-strike and drifted back to its corner.",
          "playerFacing": true
        },
        {
          "id": "l2-15",
          "kind": "encounter",
          "encounterId": "enc-vault",
          "outcome": "The Stone Sentinel woke and the ghouls came up through the floor grates with it. Oskar took the slam meant for Lyris and went to a knee; Corwin spent his last first-level slot holding him together. Offering the locket back settled the specter before it joined properly. Petra finally got a hand on the sentinel’s ward-glyph and shut it down. Three rounds, nobody dropped for good.",
          "playerFacing": true
        },
        {
          "id": "l2-16",
          "kind": "meet",
          "entityId": "itm-ledger",
          "playerFacing": true
        },
        {
          "id": "l2-17",
          "kind": "state",
          "changeId": "sc-ledger-leaves"
        },
        {
          "id": "l2-18",
          "kind": "reveal",
          "entityId": "npc-ilias",
          "secretId": "sec-ilias-skim",
          "playerFacing": true,
          "playerText": "Ilias breaks. He’s been skimming the tithe himself for three years, paying off a debt collector who’s been threatening his sister’s family in the capital. He never touched this caravan; someone else beat him to it."
        },
        {
          "id": "l2-19",
          "kind": "decision",
          "prompt": "Turn Ilias in to Katja, or keep his secret for now?",
          "outcome": "Keep it. For now.",
          "playerFacing": true
        },
        {
          "id": "l2-20",
          "kind": "note",
          "text": "Filed away: Ilias owes them, whether he likes it or not.",
          "highlight": true
        }
      ],
      "recap": "Finished searching the wreck: a broken strongbox, a snapped tithe seal, and a tool mark that turned out to match a warden’s key. Pushed straight on to the Greyhold that night.\n\nA botched attempt to scout ahead woke the vault’s guardian, and the fight that followed nearly put Oskar down. When the dust settled, Brother Ilias confessed to skimming the tithe himself, though not to taking this season’s caravan. The party is keeping his secret, for now."
    },
    {
      "id": "ses-3",
      "title": "Session 3 · The Steward’s Hall",
      "when": "Sat Aug 30",
      "status": "running",
      "agendaSceneIds": [
        "scene-cloister",
        "scene-stewards-hall",
        "scene-fenmarket-market"
      ],
      "encounterIds": [
        "enc-hall"
      ],
      "currentSceneId": "scene-stewards-hall",
      "log": [
        {
          "id": "l3-01",
          "kind": "note",
          "text": "Picking up at the Silent Cloister. Half the table’s on time for once."
        },
        {
          "id": "l3-02",
          "kind": "meet",
          "entityId": "npc-wren",
          "playerFacing": true
        },
        {
          "id": "l3-03",
          "kind": "decision",
          "prompt": "Push Ilias to confess to the Vigil, or let him keep working both sides?",
          "outcome": "Let him keep working both sides, for now.",
          "playerFacing": true
        },
        {
          "id": "l3-04",
          "kind": "meet",
          "entityId": "loc-cloister",
          "playerFacing": true
        },
        {
          "id": "l3-05",
          "kind": "meet",
          "entityId": "fac-vigil",
          "playerFacing": true,
          "playerText": "Wren explains the Vigil: two wardens left in residence, a stipend nobody has raised in a decade, and vows older than the town."
        },
        {
          "id": "l3-06",
          "kind": "meet",
          "entityId": "npc-sella",
          "playerFacing": true,
          "playerText": "A wiry dockhand with a hook at her belt loiters at the Cloister gate, asks for nothing, and is gone the moment Lyris looks at her."
        },
        {
          "id": "l3-07",
          "kind": "roll",
          "expression": "1d20+5",
          "result": 19,
          "detail": "1d20 [14] → 14, +5 = 19",
          "playerFacing": true
        },
        {
          "id": "l3-08",
          "kind": "note",
          "text": "Wren all but confirms Vane’s been holding the seal himself. She won’t say why she’s covering for him yet.",
          "highlight": true
        },
        {
          "id": "l3-09",
          "kind": "reveal",
          "entityId": "itm-key",
          "secretId": "sec-key-writ",
          "playerFacing": true,
          "playerText": "Wren opens her correspondence book to the line she has been dreading. On 24 Tithemonth she signed the spare Warden’s Key out to the Steward’s Hall on a writ under the Baron’s seal. It came back two days later, the morning after the caravan left."
        },
        {
          "id": "l3-10",
          "kind": "reveal",
          "entityId": "npc-vane",
          "secretId": "sec-vane-forgery",
          "playerFacing": true,
          "playerText": "Wren lays the writ beside a letter the Baron sent the Vigil last autumn: the same seal, a different hand. Every writ out of the Steward’s Hall since midwinter is in that second hand."
        },
        {
          "id": "l3-11",
          "kind": "state",
          "changeId": "sc-petra-mended",
          "playerFacing": true
        },
        {
          "id": "l3-12",
          "kind": "note",
          "text": "Three days at the Cloister while Wren gets them an audience. One whisper roll a day; this one stuck."
        },
        {
          "id": "l3-13",
          "kind": "roll",
          "expression": "What Ravensmoor is whispering",
          "result": 7,
          "detail": "What Ravensmoor is whispering: 7 of 8. The Rooks are hiring, and paying better than the watch.",
          "playerFacing": true
        },
        {
          "id": "l3-14",
          "kind": "state",
          "changeId": "sc-oskar-heal",
          "playerFacing": true
        },
        {
          "id": "l3-15",
          "kind": "meet",
          "entityId": "loc-stewards-hall",
          "playerFacing": true
        },
        {
          "id": "l3-16",
          "kind": "meet",
          "entityId": "npc-vane",
          "playerFacing": true,
          "playerText": "Steward Aldric Vane receives you in the Hall with every courtesy, a document already in his hand."
        },
        {
          "id": "l3-17",
          "kind": "state",
          "changeId": "sc-baron-dead"
        },
        {
          "id": "l3-18",
          "kind": "decision",
          "prompt": "Lay the ledger on the Baron’s desk, or keep it back?",
          "outcome": "Lyris put the ledger and the key writ on the Baron’s own desk. Vane read both twice, folded the writ into his sleeve, and called for the Watch.",
          "playerFacing": true
        },
        {
          "id": "l3-19",
          "kind": "meet",
          "entityId": "npc-daws",
          "playerFacing": true
        },
        {
          "id": "l3-20",
          "kind": "meet",
          "entityId": "fac-watch",
          "playerFacing": true
        },
        {
          "id": "l3-21",
          "kind": "state",
          "changeId": "sc-petra-ribs",
          "playerFacing": true
        },
        {
          "id": "l3-22",
          "kind": "note",
          "highlight": true,
          "text": "Round two. Daws is fighting to disarm, not to kill, and keeps looking at Vane. Two more of the Watch are coming up the stair; Vane hasn’t moved from behind the desk."
        }
      ]
    },
    {
      "id": "ses-4",
      "title": "Session 4 · Fenmarket, After Dark",
      "when": "Sat Sep 13",
      "status": "planned",
      "agendaSceneIds": [
        "scene-fenmarket-docks",
        "scene-reckoning"
      ],
      "encounterIds": [
        "enc-docks"
      ]
    }
  ],
  "worldBible": {
    "v": 2,
    "sections": [
      {
        "section": {
          "kind": "title"
        },
        "options": {
          "subtitle": "Player Handout"
        }
      },
      {
        "section": {
          "kind": "overview"
        },
        "options": {}
      },
      {
        "section": {
          "kind": "entityType",
          "type": "character"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "location"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "faction"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "conflict"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "item"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "organization"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "deity"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "axiom"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "historyEvent"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "magicSystem"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "fauna"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "races"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "culture"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "religion"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "society"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "technology"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "language"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "note"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": false,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "plotPoint"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": true,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "subplot"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": true,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "entityType",
          "type": "scene"
        },
        "options": {
          "images": true,
          "fields": true,
          "summariesOnly": true,
          "sort": "name",
          "portraitOnly": false
        }
      },
      {
        "section": {
          "kind": "maps"
        },
        "options": {
          "images": true
        }
      },
      {
        "section": {
          "kind": "familyTrees"
        },
        "options": {}
      },
      {
        "section": {
          "kind": "calendars"
        },
        "options": {}
      },
      {
        "section": {
          "kind": "sessions"
        },
        "options": {
          "journal": true,
          "journalOnly": true,
          "heading": "The story so far"
        }
      }
    ],
    "style": {
      "theme": "classic",
      "toc": false,
      "pageNumbers": false
    },
    "spoilerFilter": {
      "knownToPlayers": true,
      "alwaysIds": [
        "pc-petra",
        "pc-oskar",
        "pc-lyris",
        "pc-corwin"
      ]
    }
  }
}
