{
 "note": "18 builds = 3 per Atlas path (Iron, Steel, Wind, Storm, Lantern, Jade). Each build gets exactly 8 Codex picks by level 34 (levels from progression.skillPickLevels); pick 7 is the codex finisher by default. picks[] is a recommended plan, not a lock. hotbar.chain is the Mouse1 chain list (attack skills only, up to 8); Q/E/Z/X/C take any skill or buff; quick holds buffs (consumables are added per scenario).",
 "skillPickLevels": [
  1,
  3,
  6,
  10,
  15,
  20,
  27,
  34
 ],
 "builds": [
  {
   "id": "ravager",
   "name": "Ravager",
   "weapon": "greataxe",
   "path": "str",
   "phase": "alpha",
   "difficulty": 1,
   "range": "melee",
   "element": "physical / bleed",
   "palette": [
    "#8c2f1f",
    "#d9822b",
    "#3b2a1f"
   ],
   "lineage": "orc",
   "origin": "stoneward",
   "fantasy": "A berserker of the caravan wall who opens wounds and spins through crowds.",
   "playstyle": "Stack bleeds, then cash them in with Falling Wedge and Earthsplitter. Quarry Wheel clears packs while moving.",
   "combo": "Rending Cleave (2× bleed) → Rend Apart (launch) → Falling Wedge (+30% vs bleed) → Earthsplitter on the landing pack.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "ravager.falling_wedge"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "ravager.quarry_wheel"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "ravager.rending_cleave"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "ravager.reavers_charge"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "ravager.blood_frenzy"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "ravager.earthsplitter"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "ravager.crimson_reckoning"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_str.bloodrage"
    }
   ],
   "hotbar": {
    "chain": [
     "ravager.falling_wedge",
     "ravager.quarry_wheel",
     "ravager.rending_cleave",
     "ravager.earthsplitter",
     "ravager.crimson_reckoning"
    ],
    "Q": "ravager.reavers_charge",
    "E": "ravager.blood_frenzy",
    "Z": "pole_str.bloodrage",
    "X": "ravager.earthsplitter",
    "C": "ravager.crimson_reckoning",
    "quick": []
   },
   "notables": [
    "Storm Carving (axe vs shock)",
    "Emberwake (vs burn)",
    "Ravager lane notable"
   ],
   "weaponName": "Greataxe",
   "codices": [
    "ravager",
    "pole_str"
   ],
   "availableSkills": [
    "pole_str.iron_banner",
    "pole_str.war_drum",
    "pole_str.bastion_skin",
    "pole_str.rallying_roar",
    "pole_str.bloodrage",
    "pole_str.unbroken_will",
    "ravager.falling_wedge",
    "ravager.quarry_wheel",
    "ravager.rending_cleave",
    "ravager.reavers_charge",
    "ravager.blood_frenzy",
    "ravager.earthsplitter",
    "ravager.crimson_reckoning"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "party",
     "out": "pole_str.bloodrage",
     "in": "pole_str.iron_banner",
     "why": "In a party a team buff multiplies across 4 players."
    },
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "warblade",
   "name": "Warblade",
   "weapon": "greatsword",
   "path": "str",
   "phase": "vertical-slice",
   "difficulty": 2,
   "range": "melee + waves",
   "element": "physical / sun",
   "palette": [
    "#e2b04a",
    "#fff1c1",
    "#6b4a1f"
   ],
   "lineage": "human",
   "origin": "stoneward",
   "fantasy": "A disciplined sun-sworn swordmaster: big readable swings, parries and sword waves.",
   "playstyle": "Chain Horizon Cleave and Crescent Wave, parry big monster swings with Iron Riposte, finish with Sunbreaker.",
   "combo": "Iron Riposte (stagger) → Sunfall Thrust (+knockback) → Crescent Wave → Sunbreaker (+60% vs staggered with High Noon).",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "warblade.horizon_cleave"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "warblade.crescent_wave"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "warblade.sunfall_thrust"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "warblade.iron_riposte"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "warblade.blade_oath"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "warblade.sunbreaker"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "warblade.zenith_cut"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_str.war_drum"
    }
   ],
   "hotbar": {
    "chain": [
     "warblade.horizon_cleave",
     "warblade.crescent_wave",
     "warblade.iron_riposte",
     "warblade.sunbreaker",
     "warblade.zenith_cut"
    ],
    "Q": "warblade.sunfall_thrust",
    "E": "warblade.blade_oath",
    "Z": "pole_str.war_drum",
    "X": "warblade.sunbreaker",
    "C": "warblade.zenith_cut",
    "quick": []
   },
   "notables": [
    "Cinder Oath (sword vs burn)",
    "Sundered Sun (vs knockdown)",
    "Warblade lane notable"
   ],
   "weaponName": "Greatsword",
   "codices": [
    "warblade",
    "pole_str"
   ],
   "availableSkills": [
    "pole_str.iron_banner",
    "pole_str.war_drum",
    "pole_str.bastion_skin",
    "pole_str.rallying_roar",
    "pole_str.bloodrage",
    "pole_str.unbroken_will",
    "warblade.horizon_cleave",
    "warblade.crescent_wave",
    "warblade.sunfall_thrust",
    "warblade.iron_riposte",
    "warblade.blade_oath",
    "warblade.sunbreaker",
    "warblade.zenith_cut"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "duel",
     "out": "pole_str.war_drum",
     "in": "pole_str.bastion_skin",
     "why": "Team buffs are wasted in a 1v1; take a self buff."
    },
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "earthshaker",
   "name": "Earthshaker",
   "weapon": "warhammer",
   "path": "str",
   "phase": "alpha",
   "difficulty": 2,
   "range": "melee",
   "element": "physical / earth",
   "palette": [
    "#7a6a55",
    "#c9a66b",
    "#3e3428"
   ],
   "lineage": "orc",
   "origin": "stoneward",
   "fantasy": "Every swing is a landslide: stuns, fissures and leaps that crater the desert.",
   "playstyle": "Stun with Rimquake, uppercut stunned targets for bonus damage, ride Stoneheart through dangerous packs.",
   "combo": "Rimquake (stun) → Bell-Toll Uppercut (+40% vs stun, launch) → Tremor Line (knockdown) → Mountain Fall.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "earthshaker.anvil_strike"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "earthshaker.rimquake"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "earthshaker.bell_toll_uppercut"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "earthshaker.tremor_line"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "earthshaker.stoneheart"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "earthshaker.mountain_fall"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "earthshaker.tolling_verdict"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "earthshaker.mountain_fall",
     "facet": "Avalanche"
    }
   ],
   "hotbar": {
    "chain": [
     "earthshaker.anvil_strike",
     "earthshaker.rimquake",
     "earthshaker.bell_toll_uppercut",
     "earthshaker.tremor_line",
     "earthshaker.mountain_fall",
     "earthshaker.tolling_verdict"
    ],
    "Q": "earthshaker.stoneheart",
    "E": "earthshaker.mountain_fall",
    "Z": "earthshaker.tolling_verdict",
    "X": "earthshaker.anvil_strike",
    "C": "earthshaker.rimquake",
    "quick": []
   },
   "notables": [
    "Bellbreaker (vs stun)",
    "Sundered Sun (vs knockdown)"
   ],
   "weaponName": "Warhammer",
   "codices": [
    "earthshaker",
    "pole_str"
   ],
   "availableSkills": [
    "pole_str.iron_banner",
    "pole_str.war_drum",
    "pole_str.bastion_skin",
    "pole_str.rallying_roar",
    "pole_str.bloodrage",
    "pole_str.unbroken_will",
    "earthshaker.anvil_strike",
    "earthshaker.rimquake",
    "earthshaker.bell_toll_uppercut",
    "earthshaker.tremor_line",
    "earthshaker.stoneheart",
    "earthshaker.mountain_fall",
    "earthshaker.tolling_verdict"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "twinblade",
   "name": "Twinblade",
   "weapon": "dual_swords",
   "path": "str_agi",
   "phase": "beta",
   "difficulty": 2,
   "range": "melee",
   "element": "physical / wind",
   "palette": [
    "#7fc4a6",
    "#e8f3ea",
    "#2f4a40"
   ],
   "lineage": "elf",
   "origin": "wayfarer",
   "fantasy": "A blade-dancer who never stops moving: dashes, flurries and a storm of spectral swords.",
   "playstyle": "Very fast M1 chain; weave Gale Step in and out; Blade Rhythm turns every fourth hit into extra damage.",
   "combo": "Gale Step Slash → Twin Crossing (Exposed) → Thousand Cuts (launch) → Return Gale → Tempest of Blades.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "twinblade.twin_crossing"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "twinblade.cyclone_dance"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "twinblade.thousand_cuts"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "twinblade.gale_step_slash"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "twinblade.blade_rhythm"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "twinblade.tempest_of_blades"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "twinblade.final_meridian"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "twinblade.thousand_cuts",
     "facet": "Blur"
    }
   ],
   "hotbar": {
    "chain": [
     "twinblade.twin_crossing",
     "twinblade.cyclone_dance",
     "twinblade.thousand_cuts",
     "twinblade.tempest_of_blades",
     "twinblade.final_meridian"
    ],
    "Q": "twinblade.gale_step_slash",
    "E": "twinblade.blade_rhythm",
    "Z": "twinblade.tempest_of_blades",
    "X": "twinblade.final_meridian",
    "C": "twinblade.twin_crossing",
    "quick": []
   },
   "notables": [
    "Paired Meridian (dual wield)",
    "Steel crossing notable"
   ],
   "weaponName": "Dual Blades",
   "codices": [
    "twinblade",
    "pole_str",
    "pole_agi"
   ],
   "availableSkills": [
    "pole_str.iron_banner",
    "pole_str.war_drum",
    "pole_str.bastion_skin",
    "pole_str.rallying_roar",
    "pole_str.bloodrage",
    "pole_str.unbroken_will",
    "twinblade.twin_crossing",
    "twinblade.cyclone_dance",
    "twinblade.thousand_cuts",
    "twinblade.gale_step_slash",
    "twinblade.blade_rhythm",
    "twinblade.tempest_of_blades",
    "twinblade.final_meridian",
    "pole_agi.caravan_pace",
    "pole_agi.windwalk",
    "pole_agi.hunters_mark",
    "pole_agi.keen_eye_chant",
    "pole_agi.evasive_instinct",
    "pole_agi.quickening"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "vanguard",
   "name": "Vanguard",
   "weapon": "sword_shield",
   "path": "str_agi",
   "phase": "beta",
   "difficulty": 1,
   "range": "melee",
   "element": "physical / jade",
   "palette": [
    "#3f8f6b",
    "#c9a24a",
    "#24382e"
   ],
   "lineage": "human",
   "origin": "stoneward",
   "fantasy": "The caravan’s shield-wall: blocks, taunts, counters and a jade dome for the party.",
   "playstyle": "Block more, counter more. Shield Charge and Bulwark Slam gather and taunt packs; Jade Aegis protects the party.",
   "combo": "Shield Charge (taunt) → Bulwark Slam (knockdown) → Gate Reversal (stun) → Shieldline Cut (+40% after block).",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "vanguard.shieldline_cut"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "vanguard.gate_reversal"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "vanguard.shield_charge"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "vanguard.bulwark_slam"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "vanguard.retribution_stance"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "vanguard.jade_aegis"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "vanguard.shield_verdict"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_str.iron_banner"
    }
   ],
   "hotbar": {
    "chain": [
     "vanguard.shieldline_cut",
     "vanguard.gate_reversal",
     "vanguard.bulwark_slam",
     "vanguard.shield_verdict"
    ],
    "Q": "vanguard.shield_charge",
    "E": "vanguard.retribution_stance",
    "Z": "vanguard.jade_aegis",
    "X": "pole_str.iron_banner",
    "C": "vanguard.shield_verdict",
    "quick": []
   },
   "notables": [
    "Guarded Promise (recent block)",
    "Winter Poise (shield vs chill)",
    "Bellbreaker (vs stun)"
   ],
   "weaponName": "Sword & Shield",
   "codices": [
    "vanguard",
    "pole_str",
    "pole_agi"
   ],
   "availableSkills": [
    "pole_str.iron_banner",
    "pole_str.war_drum",
    "pole_str.bastion_skin",
    "pole_str.rallying_roar",
    "pole_str.bloodrage",
    "pole_str.unbroken_will",
    "vanguard.shieldline_cut",
    "vanguard.gate_reversal",
    "vanguard.shield_charge",
    "vanguard.bulwark_slam",
    "vanguard.retribution_stance",
    "vanguard.jade_aegis",
    "vanguard.shield_verdict",
    "pole_agi.caravan_pace",
    "pole_agi.windwalk",
    "pole_agi.hunters_mark",
    "pole_agi.keen_eye_chant",
    "pole_agi.evasive_instinct",
    "pole_agi.quickening"
   ],
   "role": "tank",
   "scenarioSwaps": [
    {
     "scenario": "duel",
     "out": "pole_str.iron_banner",
     "in": "pole_str.bastion_skin",
     "why": "Team buffs are wasted in a 1v1; take a self buff."
    },
    {
     "scenario": "farm",
     "note": "For farming, rank up an area skill instead of the finisher."
    }
   ]
  },
  {
   "id": "boltwright",
   "name": "Boltwright",
   "weapon": "crossbow",
   "path": "str_agi",
   "phase": "beta",
   "difficulty": 2,
   "range": "ranged",
   "element": "lightning / fire",
   "palette": [
    "#b8743a",
    "#7fd0ff",
    "#2d2620"
   ],
   "lineage": "human",
   "origin": "wayfarer",
   "fantasy": "A caravan engineer with traps, turrets and alchemical mortar shells.",
   "playstyle": "Prepare the battlefield: traps and a turret, then lob payloads. Recoil Shot keeps you safe.",
   "combo": "Spark Trap (root, shock) → Thunder Quarrel (+40% vs shocked) → Incendiary Payload → Ballista Turret cleans up.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "boltwright.rapid_bolts"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "boltwright.spark_trap"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "boltwright.thunder_quarrel"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "boltwright.recoil_shot"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "boltwright.ballista_turret"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "boltwright.incendiary_payload"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "boltwright.siege_quarrel"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "boltwright.thunder_quarrel",
     "facet": "Chain Quarrel"
    }
   ],
   "hotbar": {
    "chain": [
     "boltwright.rapid_bolts",
     "boltwright.spark_trap",
     "boltwright.thunder_quarrel",
     "boltwright.incendiary_payload",
     "boltwright.siege_quarrel"
    ],
    "Q": "boltwright.recoil_shot",
    "E": "boltwright.ballista_turret",
    "Z": "boltwright.incendiary_payload",
    "X": "boltwright.siege_quarrel",
    "C": "boltwright.rapid_bolts",
    "quick": []
   },
   "notables": [
    "Thunder Witness (vs shock)",
    "Emberwake (vs burn)"
   ],
   "weaponName": "Crossbow",
   "codices": [
    "boltwright",
    "pole_str",
    "pole_agi"
   ],
   "availableSkills": [
    "pole_str.iron_banner",
    "pole_str.war_drum",
    "pole_str.bastion_skin",
    "pole_str.rallying_roar",
    "pole_str.bloodrage",
    "pole_str.unbroken_will",
    "boltwright.rapid_bolts",
    "boltwright.spark_trap",
    "boltwright.thunder_quarrel",
    "boltwright.recoil_shot",
    "boltwright.ballista_turret",
    "boltwright.incendiary_payload",
    "boltwright.siege_quarrel",
    "pole_agi.caravan_pace",
    "pole_agi.windwalk",
    "pole_agi.hunters_mark",
    "pole_agi.keen_eye_chant",
    "pole_agi.evasive_instinct",
    "pole_agi.quickening"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "nightblade",
   "name": "Nightblade",
   "weapon": "daggers",
   "path": "agi",
   "phase": "alpha",
   "difficulty": 3,
   "range": "melee",
   "element": "physical / bleed",
   "palette": [
    "#5b3a7a",
    "#c8a2e8",
    "#1d1426"
   ],
   "lineage": "elf",
   "origin": "windrunner",
   "fantasy": "A shadow among the dunes: backstabs, blinks and a lotus of blades.",
   "playstyle": "Position behind targets, Expose with Cross Stitch, blink with Shadow Step for guaranteed crits, chain Death Lotus through packs.",
   "combo": "Shadow Step (crit) → Cross Stitch (Exposed) → Threadcut from behind (+30%) → Death Lotus.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "nightblade.threadcut"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "nightblade.cross_stitch"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "nightblade.fan_of_knives"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "nightblade.shadow_step"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "nightblade.nightshade_coat"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "nightblade.death_lotus"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "nightblade.severance"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "nightblade.shadow_step",
     "facet": "Second Shadow"
    }
   ],
   "hotbar": {
    "chain": [
     "nightblade.threadcut",
     "nightblade.cross_stitch",
     "nightblade.fan_of_knives",
     "nightblade.death_lotus",
     "nightblade.severance"
    ],
    "Q": "nightblade.shadow_step",
    "E": "nightblade.nightshade_coat",
    "Z": "nightblade.death_lotus",
    "X": "nightblade.severance",
    "C": "nightblade.threadcut",
    "quick": []
   },
   "notables": [
    "Wind lane notable",
    "Paired Meridian (dual wield)"
   ],
   "weaponName": "Daggers",
   "codices": [
    "nightblade",
    "pole_agi"
   ],
   "availableSkills": [
    "pole_agi.caravan_pace",
    "pole_agi.windwalk",
    "pole_agi.hunters_mark",
    "pole_agi.keen_eye_chant",
    "pole_agi.evasive_instinct",
    "pole_agi.quickening",
    "nightblade.threadcut",
    "nightblade.cross_stitch",
    "nightblade.fan_of_knives",
    "nightblade.shadow_step",
    "nightblade.nightshade_coat",
    "nightblade.death_lotus",
    "nightblade.severance"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "talon",
   "name": "Talon",
   "weapon": "claws",
   "path": "agi",
   "phase": "alpha",
   "difficulty": 2,
   "range": "melee",
   "element": "physical / lightning",
   "palette": [
    "#3a6fb0",
    "#e0b45c",
    "#20283a"
   ],
   "lineage": "vanara",
   "origin": "windrunner",
   "fantasy": "A feral storm-hunter that pounces, drags prey in and mauls with a spectral beast.",
   "playstyle": "Hook enemies in, pounce between packs, sustain through life leech; shock to empower everything.",
   "combo": "Pounce (knockdown) → Hooking Palm (pull a second target) → Storm Rend (shock) → Beast Within.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "talon.rake_flurry"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "talon.hooking_palm"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "talon.pounce"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "talon.storm_rend"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "talon.predators_instinct"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "talon.beast_within"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "talon.apex_rend"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_agi.windwalk"
    }
   ],
   "hotbar": {
    "chain": [
     "talon.rake_flurry",
     "talon.hooking_palm",
     "talon.storm_rend",
     "talon.beast_within",
     "talon.apex_rend"
    ],
    "Q": "talon.pounce",
    "E": "talon.predators_instinct",
    "Z": "pole_agi.windwalk",
    "X": "talon.beast_within",
    "C": "talon.apex_rend",
    "quick": []
   },
   "notables": [
    "Thunder Witness (vs shock)",
    "Paired Meridian"
   ],
   "weaponName": "Claws",
   "codices": [
    "talon",
    "pole_agi"
   ],
   "availableSkills": [
    "pole_agi.caravan_pace",
    "pole_agi.windwalk",
    "pole_agi.hunters_mark",
    "pole_agi.keen_eye_chant",
    "pole_agi.evasive_instinct",
    "pole_agi.quickening",
    "talon.rake_flurry",
    "talon.hooking_palm",
    "talon.pounce",
    "talon.storm_rend",
    "talon.predators_instinct",
    "talon.beast_within",
    "talon.apex_rend"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "party",
     "out": "pole_agi.windwalk",
     "in": "pole_agi.caravan_pace",
     "why": "In a party a team buff multiplies across 4 players."
    },
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "windarcher",
   "name": "Windarcher",
   "weapon": "bow",
   "path": "agi",
   "phase": "vertical-slice",
   "difficulty": 2,
   "range": "ranged",
   "element": "physical / wind",
   "palette": [
    "#6fae7a",
    "#efe2b8",
    "#2c3d2c"
   ],
   "lineage": "elf",
   "origin": "windrunner",
   "fantasy": "A desert ranger who kites with backflips and calls down storms of arrows.",
   "playstyle": "Pin and kite; charge Piercing Gale through lines of monsters; Tumble Shot to reset distance.",
   "combo": "Pinning Shot (root) → Tumble Shot (Free Draw) → full-charge Piercing Gale → Rain of Arrows.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "windarcher.pinning_shot"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "windarcher.split_horizon"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "windarcher.piercing_gale"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "windarcher.tumble_shot"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "windarcher.hawk_focus"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "windarcher.rain_of_arrows"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "windarcher.heartpiercer"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_agi.hunters_mark"
    }
   ],
   "hotbar": {
    "chain": [
     "windarcher.pinning_shot",
     "windarcher.split_horizon",
     "windarcher.piercing_gale",
     "windarcher.rain_of_arrows",
     "windarcher.heartpiercer"
    ],
    "Q": "windarcher.tumble_shot",
    "E": "windarcher.hawk_focus",
    "Z": "pole_agi.hunters_mark",
    "X": "windarcher.rain_of_arrows",
    "C": "windarcher.heartpiercer",
    "quick": []
   },
   "notables": [
    "Glass Reckoning (vs chill)",
    "Wind lane notable"
   ],
   "weaponName": "Bow",
   "codices": [
    "windarcher",
    "pole_agi"
   ],
   "availableSkills": [
    "pole_agi.caravan_pace",
    "pole_agi.windwalk",
    "pole_agi.hunters_mark",
    "pole_agi.keen_eye_chant",
    "pole_agi.evasive_instinct",
    "pole_agi.quickening",
    "windarcher.pinning_shot",
    "windarcher.split_horizon",
    "windarcher.piercing_gale",
    "windarcher.tumble_shot",
    "windarcher.hawk_focus",
    "windarcher.rain_of_arrows",
    "windarcher.heartpiercer"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "duel",
     "out": "pole_agi.hunters_mark",
     "in": "pole_agi.windwalk",
     "why": "Team buffs are wasted in a 1v1; take a self buff."
    },
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "songweaver",
   "name": "Songweaver",
   "weapon": "pipa",
   "path": "agi_int",
   "phase": "alpha",
   "difficulty": 2,
   "range": "ranged / support",
   "element": "sonic",
   "palette": [
    "#4fae8c",
    "#e7c766",
    "#1f2e2a"
   ],
   "lineage": "auralin",
   "origin": "wayfarer",
   "fantasy": "A Silk Road musician whose pipa lulls, shatters and heals the caravan.",
   "playstyle": "Party support with real damage: sleep packs, heal the party, build a Crescendo for burst.",
   "combo": "Lullaby of Dunes (sleep) → Crescendo charge (Superarmour) → release on waking pack → Hymn for sustain.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "songweaver.plucked_note"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "songweaver.discordant_chord"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "songweaver.lullaby_of_dunes"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "songweaver.resonant_echo"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "songweaver.hymn_of_the_caravan"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "songweaver.crescendo"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "songweaver.final_cadence"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_agi.keen_eye_chant"
    }
   ],
   "hotbar": {
    "chain": [
     "songweaver.plucked_note",
     "songweaver.discordant_chord",
     "songweaver.lullaby_of_dunes",
     "songweaver.crescendo",
     "songweaver.final_cadence"
    ],
    "Q": "songweaver.resonant_echo",
    "E": "songweaver.hymn_of_the_caravan",
    "Z": "pole_agi.keen_eye_chant",
    "X": "songweaver.crescendo",
    "C": "songweaver.final_cadence",
    "quick": []
   },
   "notables": [
    "Quiet Verdict (vs sleep)",
    "Lantern lane notable"
   ],
   "weaponName": "Pipa",
   "codices": [
    "songweaver",
    "pole_agi",
    "pole_int"
   ],
   "availableSkills": [
    "pole_agi.caravan_pace",
    "pole_agi.windwalk",
    "pole_agi.hunters_mark",
    "pole_agi.keen_eye_chant",
    "pole_agi.evasive_instinct",
    "pole_agi.quickening",
    "songweaver.plucked_note",
    "songweaver.discordant_chord",
    "songweaver.lullaby_of_dunes",
    "songweaver.resonant_echo",
    "songweaver.hymn_of_the_caravan",
    "songweaver.crescendo",
    "songweaver.final_cadence",
    "pole_int.elemental_attunement",
    "pole_int.lantern_light",
    "pole_int.resonant_ward",
    "pole_int.sanctuary_glyph",
    "pole_int.arcane_surge",
    "pole_int.kindred_flame"
   ],
   "role": "buffer",
   "scenarioSwaps": [
    {
     "scenario": "duel",
     "out": "pole_agi.keen_eye_chant",
     "in": "pole_agi.windwalk",
     "why": "Team buffs are wasted in a 1v1; take a self buff."
    },
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "windmender",
   "phase": "beta",
   "difficulty": 2,
   "lineage": "auralin",
   "origin": "wayfarer",
   "notables": [
    "Storm lane notable",
    "Night Sky"
   ],
   "name": "Windmender",
   "weapon": "war_fan",
   "weaponName": "War Fan",
   "path": "agi_int",
   "range": "mid",
   "element": "wind",
   "role": "healer",
   "palette": [
    "#5fc4b0",
    "#f0e2c0",
    "#2f5f62"
   ],
   "fantasy": "A caravan healer who reads the wind and turns paired iron fans into healing gales.",
   "playstyle": "Heal with Healing Gale, cleanse with Cleansing Breeze, launch packs with Updraft and finish them with Eye of the Storm.",
   "combo": "Updraft (launch) → Eye of the Storm on the launched target (heals the party).",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "windmender.fan_cut"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "windmender.healing_gale"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "windmender.updraft"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "windmender.zephyr_glide"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "windmender.cleansing_breeze"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "windmender.monsoon_blessing"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "windmender.eye_of_the_storm"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_int.sanctuary_glyph"
    }
   ],
   "codices": [
    "windmender",
    "pole_agi",
    "pole_int"
   ],
   "availableSkills": [
    "pole_agi.caravan_pace",
    "pole_agi.windwalk",
    "pole_agi.hunters_mark",
    "pole_agi.keen_eye_chant",
    "pole_agi.evasive_instinct",
    "pole_agi.quickening",
    "windmender.fan_cut",
    "windmender.healing_gale",
    "windmender.updraft",
    "windmender.zephyr_glide",
    "windmender.cleansing_breeze",
    "windmender.monsoon_blessing",
    "windmender.eye_of_the_storm",
    "pole_int.elemental_attunement",
    "pole_int.lantern_light",
    "pole_int.resonant_ward",
    "pole_int.sanctuary_glyph",
    "pole_int.arcane_surge",
    "pole_int.kindred_flame"
   ],
   "hotbar": {
    "chain": [
     "windmender.fan_cut",
     "windmender.updraft",
     "windmender.monsoon_blessing",
     "windmender.eye_of_the_storm"
    ],
    "Q": "windmender.zephyr_glide",
    "E": "windmender.healing_gale",
    "Z": "windmender.cleansing_breeze",
    "X": "pole_int.sanctuary_glyph",
    "C": "windmender.monsoon_blessing",
    "quick": []
   },
   "scenarioSwaps": [
    {
     "scenario": "duel",
     "out": "pole_int.sanctuary_glyph",
     "in": "pole_agi.windwalk",
     "why": "Team buffs are wasted in a 1v1; take a self buff."
    },
    {
     "scenario": "farm",
     "note": "For farming, rank up an area skill instead of the finisher."
    }
   ]
  },
  {
   "id": "ringdancer",
   "name": "Ringdancer",
   "weapon": "chakram",
   "path": "agi_int",
   "phase": "beta",
   "difficulty": 3,
   "range": "mid",
   "element": "physical / cold",
   "palette": [
    "#cfd8e6",
    "#7aa7d8",
    "#232a36"
   ],
   "lineage": "vanara",
   "origin": "wayfarer",
   "fantasy": "A moonlit performer whose silver rings ricochet through whole packs and return.",
   "playstyle": "Mid-range dancing: ricochets, orbiting rings for defence and teleport-throws.",
   "combo": "Ring Step (chill landing) → Glass Crescent (+50% vs chilled) → Moonring Toss chain → Ricochet Storm pull.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "ringdancer.moonring_toss"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "ringdancer.orbit_ward"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "ringdancer.glass_crescent"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "ringdancer.ring_step"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "ringdancer.hovering_halo"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "ringdancer.ricochet_storm"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "ringdancer.eclipse_reckoning"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_int.resonant_ward"
    }
   ],
   "hotbar": {
    "chain": [
     "ringdancer.moonring_toss",
     "ringdancer.orbit_ward",
     "ringdancer.glass_crescent",
     "ringdancer.ricochet_storm",
     "ringdancer.eclipse_reckoning"
    ],
    "Q": "ringdancer.ring_step",
    "E": "ringdancer.hovering_halo",
    "Z": "pole_int.resonant_ward",
    "X": "ringdancer.ricochet_storm",
    "C": "ringdancer.eclipse_reckoning",
    "quick": []
   },
   "notables": [
    "Glass Reckoning (vs chill)",
    "Storm lane notable"
   ],
   "weaponName": "Chakram",
   "codices": [
    "ringdancer",
    "pole_agi",
    "pole_int"
   ],
   "availableSkills": [
    "pole_agi.caravan_pace",
    "pole_agi.windwalk",
    "pole_agi.hunters_mark",
    "pole_agi.keen_eye_chant",
    "pole_agi.evasive_instinct",
    "pole_agi.quickening",
    "ringdancer.moonring_toss",
    "ringdancer.orbit_ward",
    "ringdancer.glass_crescent",
    "ringdancer.ring_step",
    "ringdancer.hovering_halo",
    "ringdancer.ricochet_storm",
    "ringdancer.eclipse_reckoning",
    "pole_int.elemental_attunement",
    "pole_int.lantern_light",
    "pole_int.resonant_ward",
    "pole_int.sanctuary_glyph",
    "pole_int.arcane_surge",
    "pole_int.kindred_flame"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "party",
     "out": "pole_int.resonant_ward",
     "in": "pole_agi.caravan_pace",
     "why": "In a party a team buff multiplies across 4 players."
    },
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "pyromancer",
   "name": "Pyromancer",
   "weapon": "wand",
   "path": "int",
   "phase": "vertical-slice",
   "difficulty": 2,
   "range": "ranged",
   "element": "fire",
   "palette": [
    "#e86a2c",
    "#6fb7ff",
    "#b38cff"
   ],
   "lineage": "human",
   "origin": "scholar",
   "fantasy": "An oasis archivist who keeps the old kiln-fires in a reed wand and sets whole packs alight.",
   "playstyle": "Spread burns with Cinder Needle and Lantern Fan, detonate them with Kiln Burst, and end burning elites with Ashfall Verdict.",
   "combo": "Lantern Fan (burn) → Pyre Mantle (spread) → Kiln Burst (+40% per burn) → Ashfall Verdict on the burning target.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "pyromancer.cinder_needle"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "pyromancer.lantern_fan"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "pyromancer.kiln_burst"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "pyromancer.ember_step"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "pyromancer.pyre_mantle"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "pyromancer.prism_barrage"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "pyromancer.ashfall_verdict"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_int.arcane_surge"
    }
   ],
   "hotbar": {
    "chain": [
     "pyromancer.cinder_needle",
     "pyromancer.lantern_fan",
     "pyromancer.kiln_burst",
     "pyromancer.prism_barrage",
     "pyromancer.ashfall_verdict"
    ],
    "Q": "pyromancer.ember_step",
    "E": "pyromancer.pyre_mantle",
    "Z": "pole_int.arcane_surge",
    "X": "pyromancer.prism_barrage",
    "C": "pyromancer.ashfall_verdict",
    "quick": []
   },
   "notables": [
    "Emberwake (vs burn)",
    "Prismatic Mind (wand)"
   ],
   "weaponName": "Wand",
   "codices": [
    "pyromancer",
    "pole_int"
   ],
   "availableSkills": [
    "pole_int.elemental_attunement",
    "pole_int.lantern_light",
    "pole_int.resonant_ward",
    "pole_int.sanctuary_glyph",
    "pole_int.arcane_surge",
    "pole_int.kindred_flame",
    "pyromancer.cinder_needle",
    "pyromancer.lantern_fan",
    "pyromancer.kiln_burst",
    "pyromancer.ember_step",
    "pyromancer.pyre_mantle",
    "pyromancer.prism_barrage",
    "pyromancer.ashfall_verdict"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "party",
     "out": "pole_int.arcane_surge",
     "in": "pole_int.lantern_light",
     "why": "In a party a team buff multiplies across 4 players."
    },
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "stormcaller",
   "name": "Stormcaller",
   "weapon": "storm_staff",
   "path": "int",
   "phase": "beta",
   "difficulty": 2,
   "range": "mid + spells",
   "element": "lightning",
   "palette": [
    "#8f6ad8",
    "#e6e0ff",
    "#2a2140"
   ],
   "lineage": "vanara",
   "origin": "scholar",
   "fantasy": "A storm-reader of the salt flats who calls lightning down a bronze-shod staff.",
   "playstyle": "Shock with Staff Cascade and Arc Thread, stun with Heaven’s Pillar, then draw Judgement Bolt on shocked targets.",
   "combo": "Storm Circle (shock) → Arc Thread (chain) → Judgement Bolt on the shocked target.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "stormcaller.staff_cascade"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "stormcaller.storm_circle"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "stormcaller.thunderclap_vault"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "stormcaller.arc_thread"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "stormcaller.storm_mantle"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "stormcaller.heavens_pillar"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "stormcaller.judgement_bolt"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_int.elemental_attunement"
    }
   ],
   "hotbar": {
    "chain": [
     "stormcaller.staff_cascade",
     "stormcaller.storm_circle",
     "stormcaller.arc_thread",
     "stormcaller.heavens_pillar",
     "stormcaller.judgement_bolt"
    ],
    "Q": "stormcaller.thunderclap_vault",
    "E": "stormcaller.storm_mantle",
    "Z": "pole_int.elemental_attunement",
    "X": "stormcaller.heavens_pillar",
    "C": "stormcaller.judgement_bolt",
    "quick": []
   },
   "notables": [
    "Thunder Witness (vs shock)",
    "Thunder Monk (staff)"
   ],
   "weaponName": "Storm Staff",
   "codices": [
    "stormcaller",
    "pole_int"
   ],
   "availableSkills": [
    "pole_int.elemental_attunement",
    "pole_int.lantern_light",
    "pole_int.resonant_ward",
    "pole_int.sanctuary_glyph",
    "pole_int.arcane_surge",
    "pole_int.kindred_flame",
    "stormcaller.staff_cascade",
    "stormcaller.storm_circle",
    "stormcaller.thunderclap_vault",
    "stormcaller.arc_thread",
    "stormcaller.storm_mantle",
    "stormcaller.heavens_pillar",
    "stormcaller.judgement_bolt"
   ],
   "role": "dps",
   "scenarioSwaps": [
    {
     "scenario": "party",
     "out": "pole_int.elemental_attunement",
     "in": "pole_int.lantern_light",
     "why": "In a party a team buff multiplies across 4 players."
    },
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "frostweaver",
   "phase": "beta",
   "difficulty": 2,
   "lineage": "elf",
   "origin": "scholar",
   "notables": [
    "Glass Reckoning (vs chill)",
    "Quiet Verdict (vs sleep)"
   ],
   "name": "Frostweaver",
   "weapon": "tome",
   "weaponName": "Rime Tome",
   "path": "int",
   "range": "ranged",
   "element": "cold",
   "role": "dps",
   "palette": [
    "#9ad4ff",
    "#3f6f9e",
    "#e8f4ff"
   ],
   "fantasy": "A glass-scribe of the cold oasis wells who freezes the desert night into lances and blizzards.",
   "playstyle": "Chill everything, freeze chilled enemies with Frost Bloom, then shatter them with Shatterpoint.",
   "combo": "Rime Lance (chill) → Frost Bloom (freeze) → Shatterpoint on the frozen target.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "frostweaver.rime_lance"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "frostweaver.glass_shard"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "frostweaver.frost_bloom"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "frostweaver.mirror_glide"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "frostweaver.stillwater_seal"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "frostweaver.moonfrost_tempest"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "frostweaver.shatterpoint"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "frostweaver.frost_bloom",
     "facet": "Hard Freeze"
    }
   ],
   "codices": [
    "frostweaver",
    "pole_int"
   ],
   "availableSkills": [
    "pole_int.elemental_attunement",
    "pole_int.lantern_light",
    "pole_int.resonant_ward",
    "pole_int.sanctuary_glyph",
    "pole_int.arcane_surge",
    "pole_int.kindred_flame",
    "frostweaver.rime_lance",
    "frostweaver.glass_shard",
    "frostweaver.frost_bloom",
    "frostweaver.mirror_glide",
    "frostweaver.stillwater_seal",
    "frostweaver.moonfrost_tempest",
    "frostweaver.shatterpoint"
   ],
   "hotbar": {
    "chain": [
     "frostweaver.rime_lance",
     "frostweaver.glass_shard",
     "frostweaver.frost_bloom",
     "frostweaver.stillwater_seal",
     "frostweaver.moonfrost_tempest",
     "frostweaver.shatterpoint"
    ],
    "Q": "frostweaver.mirror_glide",
    "E": "frostweaver.moonfrost_tempest",
    "Z": "frostweaver.shatterpoint",
    "X": "frostweaver.rime_lance",
    "C": "frostweaver.glass_shard",
    "quick": []
   },
   "scenarioSwaps": [
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  },
  {
   "id": "lanternbinder",
   "name": "Lanternbinder",
   "weapon": "scepter",
   "path": "int_str",
   "phase": "alpha",
   "difficulty": 1,
   "range": "ranged / summons",
   "element": "spirit fire",
   "palette": [
    "#f0a43a",
    "#ffe7a8",
    "#3a2412"
   ],
   "lineage": "auralin",
   "origin": "wayfarer",
   "fantasy": "A keeper of lantern spirits who curses the road and burns it clean.",
   "playstyle": "Summon wisps and a Lamp Warden to tank, curse packs, drain life, then consume wisps in a pyre.",
   "combo": "Lantern Wisps ×2 → Ember Curse → Soul Tether (sustain) → Pyre Procession (+30% per wisp).",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "lanternbinder.luminous_bolt"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "lanternbinder.ember_curse"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "lanternbinder.summon_wisps"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "lanternbinder.soul_tether"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "lanternbinder.lamp_warden"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "lanternbinder.pyre_procession"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "lanternbinder.last_lantern"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_int.resonant_ward"
    }
   ],
   "hotbar": {
    "chain": [
     "lanternbinder.luminous_bolt",
     "lanternbinder.soul_tether",
     "lanternbinder.pyre_procession",
     "lanternbinder.last_lantern"
    ],
    "Q": "pole_int.resonant_ward",
    "E": "lanternbinder.summon_wisps",
    "Z": "lanternbinder.lamp_warden",
    "X": "lanternbinder.ember_curse",
    "C": "lanternbinder.pyre_procession",
    "quick": []
   },
   "notables": [
    "Emberwake (vs burn)",
    "Lantern lane notable"
   ],
   "weaponName": "Lantern Scepter",
   "codices": [
    "lanternbinder",
    "pole_int",
    "pole_str"
   ],
   "availableSkills": [
    "pole_str.iron_banner",
    "pole_str.war_drum",
    "pole_str.bastion_skin",
    "pole_str.rallying_roar",
    "pole_str.bloodrage",
    "pole_str.unbroken_will",
    "pole_int.elemental_attunement",
    "pole_int.lantern_light",
    "pole_int.resonant_ward",
    "pole_int.sanctuary_glyph",
    "pole_int.arcane_surge",
    "pole_int.kindred_flame",
    "lanternbinder.luminous_bolt",
    "lanternbinder.ember_curse",
    "lanternbinder.summon_wisps",
    "lanternbinder.soul_tether",
    "lanternbinder.lamp_warden",
    "lanternbinder.pyre_procession",
    "lanternbinder.last_lantern"
   ],
   "role": "summoner",
   "scenarioSwaps": [
    {
     "scenario": "party",
     "out": "pole_int.resonant_ward",
     "in": "pole_str.iron_banner",
     "why": "In a party a team buff multiplies across 4 players."
    },
    {
     "scenario": "farm",
     "note": "For farming, rank up an area skill instead of the finisher."
    }
   ]
  },
  {
   "id": "ashwarden",
   "phase": "beta",
   "difficulty": 1,
   "lineage": "orc",
   "origin": "wayfarer",
   "notables": [
    "Emberwake (vs burn)",
    "Bellbreaker (vs stun)"
   ],
   "name": "Ashwarden",
   "weapon": "censer",
   "weaponName": "Censer",
   "path": "int_str",
   "range": "melee + aura",
   "element": "fire",
   "role": "aura",
   "palette": [
    "#c4511f",
    "#4a3a2a",
    "#f2c27a"
   ],
   "fantasy": "A shrine-keeper who walks into packs swinging a burning censer; everything near them smoulders.",
   "playstyle": "Open Pyre Halo and walk through monsters; Thurible Flare stuns, Last Rites crushes stunned targets. Incense of Valor carries a party.",
   "combo": "Pyre Halo (open aura) → Thurible Flare (stun) → Last Rites on the stunned target.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "ashwarden.censer_swing"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "ashwarden.pyre_halo"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "ashwarden.thurible_flare"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "ashwarden.ashen_stride"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "ashwarden.incense_of_valor"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "ashwarden.smouldering_rite"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "ashwarden.last_rites"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "ashwarden.pyre_halo",
     "facet": "Wide Halo"
    }
   ],
   "codices": [
    "ashwarden",
    "pole_int",
    "pole_str"
   ],
   "availableSkills": [
    "pole_str.iron_banner",
    "pole_str.war_drum",
    "pole_str.bastion_skin",
    "pole_str.rallying_roar",
    "pole_str.bloodrage",
    "pole_str.unbroken_will",
    "pole_int.elemental_attunement",
    "pole_int.lantern_light",
    "pole_int.resonant_ward",
    "pole_int.sanctuary_glyph",
    "pole_int.arcane_surge",
    "pole_int.kindred_flame",
    "ashwarden.censer_swing",
    "ashwarden.pyre_halo",
    "ashwarden.thurible_flare",
    "ashwarden.ashen_stride",
    "ashwarden.incense_of_valor",
    "ashwarden.smouldering_rite",
    "ashwarden.last_rites"
   ],
   "hotbar": {
    "chain": [
     "ashwarden.censer_swing",
     "ashwarden.thurible_flare",
     "ashwarden.smouldering_rite",
     "ashwarden.last_rites"
    ],
    "Q": "ashwarden.ashen_stride",
    "E": "ashwarden.pyre_halo",
    "Z": "ashwarden.incense_of_valor",
    "X": "ashwarden.smouldering_rite",
    "C": "ashwarden.last_rites",
    "quick": []
   },
   "scenarioSwaps": [
    {
     "scenario": "farm",
     "note": "For farming, rank up an area skill instead of the finisher."
    }
   ]
  },
  {
   "id": "oathkeeper",
   "name": "Oathkeeper",
   "weapon": "glaive",
   "path": "int_str",
   "phase": "beta",
   "difficulty": 2,
   "range": "melee reach",
   "element": "cold / physical",
   "palette": [
    "#bcd7ef",
    "#5e86b8",
    "#1e2733"
   ],
   "lineage": "auralin",
   "origin": "wayfarer",
   "fantasy": "A temple guard sworn to the convoy, holding the line with a moon-bladed glaive and binding oaths.",
   "playstyle": "Sweep packs down with Reed Sweep, taunt and shield the party with Oath Challenge, and drive Oathfall into knocked-down enemies.",
   "combo": "Reed Sweep (knockdown) → Oath Challenge (taunt + barrier) → Oathfall on the downed enemy.",
   "picks": [
    {
     "pickNumber": 1,
     "atLevel": 1,
     "skill": "oathkeeper.reed_sweep"
    },
    {
     "pickNumber": 2,
     "atLevel": 3,
     "skill": "oathkeeper.moon_crescent"
    },
    {
     "pickNumber": 3,
     "atLevel": 6,
     "skill": "oathkeeper.bracepoint"
    },
    {
     "pickNumber": 4,
     "atLevel": 10,
     "skill": "oathkeeper.tidewalk"
    },
    {
     "pickNumber": 5,
     "atLevel": 15,
     "skill": "oathkeeper.oath_challenge"
    },
    {
     "pickNumber": 6,
     "atLevel": 20,
     "skill": "oathkeeper.falling_moon"
    },
    {
     "pickNumber": 7,
     "atLevel": 27,
     "skill": "oathkeeper.oathfall"
    },
    {
     "pickNumber": 8,
     "atLevel": 34,
     "skill": "pole_str.iron_banner"
    }
   ],
   "hotbar": {
    "chain": [
     "oathkeeper.reed_sweep",
     "oathkeeper.moon_crescent",
     "oathkeeper.bracepoint",
     "oathkeeper.falling_moon",
     "oathkeeper.oathfall"
    ],
    "Q": "oathkeeper.tidewalk",
    "E": "oathkeeper.oath_challenge",
    "Z": "pole_str.iron_banner",
    "X": "oathkeeper.falling_moon",
    "C": "oathkeeper.oathfall",
    "quick": []
   },
   "notables": [
    "Reed Harvest (glaive vs knockdown)",
    "Winter Poise"
   ],
   "weaponName": "Glaive",
   "codices": [
    "oathkeeper",
    "pole_int",
    "pole_str"
   ],
   "availableSkills": [
    "pole_str.iron_banner",
    "pole_str.war_drum",
    "pole_str.bastion_skin",
    "pole_str.rallying_roar",
    "pole_str.bloodrage",
    "pole_str.unbroken_will",
    "pole_int.elemental_attunement",
    "pole_int.lantern_light",
    "pole_int.resonant_ward",
    "pole_int.sanctuary_glyph",
    "pole_int.arcane_surge",
    "pole_int.kindred_flame",
    "oathkeeper.reed_sweep",
    "oathkeeper.moon_crescent",
    "oathkeeper.bracepoint",
    "oathkeeper.tidewalk",
    "oathkeeper.oath_challenge",
    "oathkeeper.falling_moon",
    "oathkeeper.oathfall"
   ],
   "role": "protector",
   "scenarioSwaps": [
    {
     "scenario": "duel",
     "out": "pole_str.iron_banner",
     "in": "pole_str.bastion_skin",
     "why": "Team buffs are wasted in a 1v1; take a self buff."
    },
    {
     "scenario": "farm",
     "note": "Already farm-ready: keep the area skills in the chain front."
    }
   ]
  }
 ]
}
