[
  {
    "id": "test-wizard-001",
    "name": "Elara Moonwhisper",
    "pronouns": "she/her",
    "race": "High Elf",
    "background": "Sage",
    "alignment": "Neutral Good",
    "xp": 6500,
    "inspiration": 1,
    "classes": [{ "name": "wizard", "subclass": "School of Evocation", "level": 5 }],
    "bgBonus1Ability": "int", "bgBonus1Val": 2,
    "bgBonus2Ability": "", "bgBonus2Val": 0,
    "bgBonus3Ability": "",
    "appearance": "Slender and silver-haired, with pale violet eyes that seem to glow faintly in the dark. A crescent moon tattoo marks her left wrist.",
    "abilities": { "str": 8, "dex": 14, "con": 14, "int": 16, "wis": 12, "cha": 10 },
    "saveProficiencies": ["int", "wis"],
    "skillProficiencies": [
      { "name": "Acrobatics",      "level": "none" },
      { "name": "Animal Handling", "level": "none" },
      { "name": "Arcana",          "level": "expertise" },
      { "name": "Athletics",       "level": "none" },
      { "name": "Deception",       "level": "none" },
      { "name": "History",         "level": "proficient" },
      { "name": "Insight",         "level": "none" },
      { "name": "Intimidation",    "level": "none" },
      { "name": "Investigation",   "level": "proficient" },
      { "name": "Medicine",        "level": "none" },
      { "name": "Nature",          "level": "none" },
      { "name": "Perception",      "level": "proficient" },
      { "name": "Performance",     "level": "none" },
      { "name": "Persuasion",      "level": "none" },
      { "name": "Religion",        "level": "proficient" },
      { "name": "Sleight of Hand", "level": "none" },
      { "name": "Stealth",         "level": "none" },
      { "name": "Survival",        "level": "none" }
    ],
    "jackOfAllTrades": false,
    "languages": "Common, Elvish, Draconic, Dwarvish",
    "tools": "None",
    "hpCurrent": 28,
    "hpMaxOverride": null,
    "hpTemp": 0,
    "hdUsed": 1,
    "acMode": "auto",
    "acManual": 10,
    "armorType": "none",
    "shield": 0,
    "acBonus": 0,
    "speed": 30,
    "conditions": ["Concentration"],
    "deathSaves": { "successes": 0, "failures": 0 },
    "concentration": "Fly",
    "attacks": [
      { "name": "Fire Bolt", "bonus": "+7", "damage": "2d10 fire", "range": "120 ft.", "notes": "Cantrip, ranged spell attack" },
      { "name": "Dagger", "bonus": "+5", "damage": "1d4+2 piercing", "range": "20/60 ft.", "notes": "Finesse, thrown" }
    ],
    "spells": [
      {
        "id": "sp-eb-001", "name": "Fire Bolt", "level": 0, "school": "Evocation",
        "castingTime": "1 action", "range": "120 ft.", "components": "V, S",
        "materials": "", "duration": "Instantaneous", "concentration": false, "ritual": false,
        "desc": "Ranged spell attack; 2d10 fire (at 5th level). Ignites flammable objects.",
        "prepared": false
      },
      {
        "id": "sp-eb-002", "name": "Mage Hand", "level": 0, "school": "Conjuration",
        "castingTime": "1 action", "range": "30 ft.", "components": "V, S",
        "materials": "", "duration": "1 minute", "concentration": false, "ritual": false,
        "desc": "Spectral floating hand; carry up to 10 lb., manipulate objects.",
        "prepared": false
      },
      {
        "id": "sp-eb-003", "name": "Minor Illusion", "level": 0, "school": "Illusion",
        "castingTime": "1 action", "range": "30 ft.", "components": "S, M",
        "materials": "a bit of fleece", "duration": "1 minute", "concentration": false, "ritual": false,
        "desc": "Create sound or image within a 5-ft. cube.",
        "prepared": false
      },
      {
        "id": "sp-eb-004", "name": "Prestidigitation", "level": 0, "school": "Transmutation",
        "castingTime": "1 action", "range": "10 ft.", "components": "V, S",
        "materials": "", "duration": "Up to 1 hour", "concentration": false, "ritual": false,
        "desc": "Minor magical tricks.",
        "prepared": false
      },
      {
        "id": "sp-l1-001", "name": "Mage Armor", "level": 1, "school": "Abjuration",
        "castingTime": "1 action", "range": "Touch", "components": "V, S, M",
        "materials": "a piece of cured leather", "duration": "8 hours", "concentration": false, "ritual": false,
        "desc": "Willing creature not wearing armor has AC = 13 + Dex mod.",
        "prepared": true
      },
      {
        "id": "sp-l1-002", "name": "Magic Missile", "level": 1, "school": "Evocation",
        "castingTime": "1 action", "range": "120 ft.", "components": "V, S",
        "materials": "", "duration": "Instantaneous", "concentration": false, "ritual": false,
        "desc": "3 darts, each 1d4+1 force, automatically hit. Higher slots: +1 dart per slot.",
        "prepared": true
      },
      {
        "id": "sp-l1-003", "name": "Shield", "level": 1, "school": "Abjuration",
        "castingTime": "1 reaction", "range": "Self", "components": "V, S",
        "materials": "", "duration": "1 round", "concentration": false, "ritual": false,
        "desc": "Reaction when hit. +5 AC until start of next turn. Immune to magic missile.",
        "prepared": true
      },
      {
        "id": "sp-l1-004", "name": "Detect Magic", "level": 1, "school": "Divination",
        "castingTime": "1 action", "range": "Self", "components": "V, S",
        "materials": "", "duration": "Concentration, up to 10 minutes", "concentration": true, "ritual": true,
        "desc": "Sense magic within 30 ft. See aura around magical objects/creatures.",
        "prepared": true
      },
      {
        "id": "sp-l1-005", "name": "Identify", "level": 1, "school": "Divination",
        "castingTime": "1 minute", "range": "Touch", "components": "V, S, M",
        "materials": "a pearl worth at least 100 gp and an owl feather", "duration": "Instantaneous", "concentration": false, "ritual": true,
        "desc": "Learn magic item properties, attunement requirement, and active spells on creature/object.",
        "prepared": false
      },
      {
        "id": "sp-l2-001", "name": "Misty Step", "level": 2, "school": "Conjuration",
        "castingTime": "1 bonus action", "range": "Self", "components": "V",
        "materials": "", "duration": "Instantaneous", "concentration": false, "ritual": false,
        "desc": "Teleport up to 30 ft. to an unoccupied space you can see.",
        "prepared": true
      },
      {
        "id": "sp-l2-002", "name": "Scorching Ray", "level": 2, "school": "Evocation",
        "castingTime": "1 action", "range": "120 ft.", "components": "V, S",
        "materials": "", "duration": "Instantaneous", "concentration": false, "ritual": false,
        "desc": "3 rays; each ranged spell attack deals 2d6 fire on hit. Higher slots: +1 ray per slot.",
        "prepared": true
      },
      {
        "id": "sp-l2-003", "name": "Mirror Image", "level": 2, "school": "Illusion",
        "castingTime": "1 action", "range": "Self", "components": "V, S",
        "materials": "", "duration": "1 minute", "concentration": false, "ritual": false,
        "desc": "3 duplicates intercept attacks. Duplicates AC = 10 + Dex.",
        "prepared": false
      },
      {
        "id": "sp-l3-001", "name": "Fireball", "level": 3, "school": "Evocation",
        "castingTime": "1 action", "range": "150 ft.", "components": "V, S, M",
        "materials": "a tiny ball of bat guano and sulfur", "duration": "Instantaneous", "concentration": false, "ritual": false,
        "desc": "20-ft.-radius sphere; Dex save or 8d6 fire, half on save. Higher slots: +1d6 per slot.",
        "prepared": true
      },
      {
        "id": "sp-l3-002", "name": "Counterspell", "level": 3, "school": "Abjuration",
        "castingTime": "1 reaction", "range": "60 ft.", "components": "S",
        "materials": "", "duration": "Instantaneous", "concentration": false, "ritual": false,
        "desc": "Interrupt spell of 3rd level or lower (auto). Higher spells: ability check DC 10 + spell level.",
        "prepared": true
      },
      {
        "id": "sp-l3-003", "name": "Fly", "level": 3, "school": "Transmutation",
        "castingTime": "1 action", "range": "Touch", "components": "V, S, M",
        "materials": "a wing or feather from any bird", "duration": "Concentration, up to 10 minutes", "concentration": true, "ritual": false,
        "desc": "Touch willing creature; flying speed 60 ft. Higher slots: +1 target per slot.",
        "prepared": true
      }
    ],
    "spellSlotsUsed": { "1": 2, "2": 1, "3": 0 },
    "pactSlotsUsed": 0,
    "currency": { "cp": 0, "sp": 15, "ep": 0, "gp": 145, "pp": 2 },
    "items": [
      { "name": "Arcane Focus (crystal orb)", "qty": 1, "wt": 1, "notes": "Spellcasting focus" },
      { "name": "Dagger", "qty": 1, "wt": 1, "notes": "" },
      { "name": "Spellbook", "qty": 1, "wt": 3, "notes": "Contains all known spells" },
      { "name": "Scholar's Pack", "qty": 1, "wt": 10, "notes": "Backpack, book, ink, quill, parchment, sand, knife, letter" },
      { "name": "Pearl", "qty": 1, "wt": 0, "notes": "Identify spell component (100 gp)" },
      { "name": "Robe of the Archmagi", "qty": 1, "wt": 4, "notes": "AC 15 if wearing no armor, +2 to spell save DC and spell attack" }
    ],
    "resources": { "Arcane Recovery (levels)": 0 },
    "classFeatures": "Arcane Recovery (1/day: recover spell slots totaling up to 3 levels on short rest)\nEvocation Savant (half cost and time to copy evocation spells)\nSculpt Spells (create pockets of safety in evocation spells — allies automatically succeed saves and take no damage)",
    "backgroundFeature": "Researcher: When you attempt to learn or recall a piece of lore, if you don't know it you often know where to find it.",
    "feats": "War Caster: Advantage on concentration saves, can cast spells as opportunity attacks, can perform somatic components with hands full.",
    "backstory": "Elara spent two decades studying at the Arcane Academy of Silverymoon before a catastrophic magical accident destroyed her mentor's laboratory and scattered her research across the planes. She now travels in search of the lost arcane texts, honing her evocation magic as both tool and weapon.",
    "personality": "I am always trying to learn something new, often to the annoyance of those around me.",
    "ideals": "Knowledge. The path to power and self-improvement is through knowledge.",
    "bonds": "My mentor's spellbook was the only thing that survived the accident. I will find the rest of the lost research.",
    "flaws": "I speak without thinking and often say the wrong thing at the wrong moment.",
    "allies": "The Arcane Academy of Silverymoon (complicated relationship after the accident)\nBrendan Ashwood, fellow scholar and old friend",
    "notes": "Currently investigating the Moonwhisper ruins east of Phandalin.\nCarrying a sealed letter from the Academy — haven't opened it yet."
  },
  {
    "id": "test-fighter-rogue-002",
    "name": "Gareth Ironforge",
    "pronouns": "he/him",
    "race": "Mountain Dwarf",
    "background": "Soldier",
    "alignment": "Lawful Neutral",
    "xp": 6500,
    "inspiration": 0,
    "classes": [
      { "name": "fighter", "subclass": "Battle Master", "level": 3 },
      { "name": "rogue",   "subclass": "Thief",          "level": 2 }
    ],
    "bgBonus1Ability": "str", "bgBonus1Val": 2,
    "bgBonus2Ability": "con", "bgBonus2Val": 1,
    "bgBonus3Ability": "",
    "appearance": "Stocky even for a dwarf, with a braided auburn beard and a scar running through his left eyebrow. Wears battered but well-maintained chain mail.",
    "abilities": { "str": 16, "dex": 14, "con": 14, "int": 10, "wis": 12, "cha": 8 },
    "saveProficiencies": ["str", "con"],
    "skillProficiencies": [
      { "name": "Acrobatics",      "level": "none" },
      { "name": "Animal Handling", "level": "none" },
      { "name": "Arcana",          "level": "none" },
      { "name": "Athletics",       "level": "expertise" },
      { "name": "Deception",       "level": "none" },
      { "name": "History",         "level": "none" },
      { "name": "Insight",         "level": "none" },
      { "name": "Intimidation",    "level": "proficient" },
      { "name": "Investigation",   "level": "none" },
      { "name": "Medicine",        "level": "none" },
      { "name": "Nature",          "level": "none" },
      { "name": "Perception",      "level": "proficient" },
      { "name": "Performance",     "level": "none" },
      { "name": "Persuasion",      "level": "none" },
      { "name": "Religion",        "level": "none" },
      { "name": "Sleight of Hand", "level": "proficient" },
      { "name": "Stealth",         "level": "proficient" },
      { "name": "Survival",        "level": "proficient" }
    ],
    "jackOfAllTrades": false,
    "languages": "Common, Dwarvish, Thieves' Cant",
    "tools": "Thieves' tools (proficient), Smith's tools (proficient), dice set, playing card set",
    "hpCurrent": 44,
    "hpMaxOverride": null,
    "hpTemp": 0,
    "hdUsed": 0,
    "acMode": "auto",
    "acManual": 10,
    "armorType": "chain",
    "shield": 0,
    "acBonus": 0,
    "speed": 25,
    "conditions": [],
    "deathSaves": { "successes": 0, "failures": 0 },
    "concentration": "",
    "attacks": [
      { "name": "Longsword (one-hand)", "bonus": "+6", "damage": "1d8+3 slashing", "range": "5 ft.", "notes": "Versatile" },
      { "name": "Longsword (two-hand)", "bonus": "+6", "damage": "1d10+3 slashing", "range": "5 ft.", "notes": "Versatile" },
      { "name": "Handaxe", "bonus": "+6", "damage": "1d6+3 slashing", "range": "20/60 ft.", "notes": "Thrown, light" },
      { "name": "Sneak Attack (with adv. or ally adjacent)", "bonus": "—", "damage": "+1d6 piercing", "range": "—", "notes": "Once per turn when conditions met" },
      { "name": "Pommel Strike (Battle Master)", "bonus": "+6", "damage": "1d8+3 bludgeoning + 1d8 superiority", "range": "5 ft.", "notes": "Spend 1 superiority die; target Con save DC 14 or stunned" }
    ],
    "spells": [],
    "spellSlotsUsed": {},
    "pactSlotsUsed": 0,
    "currency": { "cp": 22, "sp": 8, "ep": 0, "gp": 67, "pp": 0 },
    "items": [
      { "name": "Chain Mail", "qty": 1, "wt": 55, "notes": "AC 16" },
      { "name": "Longsword", "qty": 1, "wt": 3, "notes": "+1 magic weapon (heirloom)" },
      { "name": "Handaxe", "qty": 2, "wt": 2, "notes": "Thrown" },
      { "name": "Thieves' Tools", "qty": 1, "wt": 1, "notes": "Proficient" },
      { "name": "Explorer's Pack", "qty": 1, "wt": 59, "notes": "Backpack, bedroll, mess kit, tinderbox, torches x10, rations x10, waterskin, rope" },
      { "name": "Insignia of rank (old military)", "qty": 1, "wt": 0, "notes": "Former sergeant's badge, bent and tarnished" },
      { "name": "Healing Potion", "qty": 2, "wt": 1, "notes": "2d4+2 HP each" }
    ],
    "resources": { "Second Wind": 0, "Action Surge": 0 },
    "classFeatures": "Action Surge (1/short rest: take one additional action)\nSecond Wind (1/short rest: bonus action heal 1d10+5)\nBattle Master Maneuvers (4 superiority dice d8, DC 14): Commanding Strike, Disarming Attack, Menacing Attack, Pommel Strike — recharge on short or long rest\nSneak Attack (1d6): once per turn when you have advantage or an ally is adjacent\nCunning Action: Dash, Disengage, or Hide as bonus action\nThief: Fast Hands (use Sleight of Hand as bonus action cunning action), Second-Story Work (climb full speed, running jump uses Dex)",
    "backgroundFeature": "Military Rank: Soldiers loyal to your former military organization still recognize your authority and provide deference. You can invoke your rank to exert influence over other soldiers and requisition simple equipment.",
    "feats": "Tavern Brawler: Proficient with improvised weapons; unarmed strike 1d4; can grapple as bonus action after unarmed/improvised hit.",
    "backstory": "A veteran of the Ironpeak Wars, Gareth served twelve years as a sergeant before his unit was betrayed by a corrupt commander. Dishonorably discharged on false charges, he turned to less reputable work to survive — a decision that suited his temperament more than he expected. He's not proud of everything he's done, but he's very good at it.",
    "personality": "I face problems head-on. A simple direct solution is better than a complicated one.",
    "ideals": "Responsibility. I do what I must and face the consequences.",
    "bonds": "Those who fight beside me are worth dying for. I've already decided who those people are.",
    "flaws": "My hatred of the corrupt nobles who destroyed my career is blind and sometimes clouds my judgment.",
    "allies": "Mira Stoneback — retired soldier, runs the Broken Shield tavern in Neverwinter. Will fence goods no-questions-asked.\nThe Iron Circle — Gareth's old unit, scattered. Two members are known to still be active.",
    "notes": "Owes 50 gp to Mira from a card game gone wrong.\nHas a forged set of papers identifying him as a merchant — works for getting into cities.\nCurrently tracking the corrupt commander (General Aldric Vane) who destroyed the unit."
  }
]
