{
  "version": 1,
  "classes": [
    {
      "id": "arbiter",
      "name": "Arbiter",
      "color": "#F48CBA",
      "colorDark": "#C45A8A",
      "powerStyle": "mana",
      "critChance": 0.15
    },
    {
      "id": "phase-drifter",
      "name": "Phase Drifter",
      "color": "#FFF468",
      "powerStyle": "stamina",
      "critChance": 0.15
    },
    {
      "id": "beast-master",
      "name": "Beast Master",
      "color": "#AAD372",
      "powerStyle": "stamina",
      "critChance": 0.15
    },
    {
      "id": "soulbinder",
      "name": "Soulbinder",
      "color": "#33937F",
      "powerStyle": "mana",
      "critChance": 0.15
    },
    {
      "id": "primordialist",
      "name": "Primordialist",
      "color": "#3FC7EB",
      "powerStyle": "mana",
      "critChance": 0.15
    },
    {
      "id": "engineer",
      "name": "Engineer",
      "color": "#0070DD",
      "powerStyle": "stamina",
      "critChance": 0.15
    },
    {
      "id": "phaseweaver",
      "name": "Phaseweaver",
      "color": "#8788EE",
      "powerStyle": "mana",
      "critChance": 0.15
    },
    {
      "id": "gunslinger",
      "name": "Gunslinger",
      "color": "#C41E3A",
      "powerStyle": "stamina",
      "critChance": 0.15
    },
    {
      "id": "herald",
      "name": "Herald",
      "color": "#1B5E3B",
      "colorDark": "#FF7C0A",
      "powerStyle": "mana",
      "critChance": 0.15
    },
    {
      "id": "avatar-of-might",
      "name": "Avatar of Might",
      "color": "#C69B6D",
      "powerStyle": "rage",
      "critChance": 0.15
    },
    {
      "id": "biotech",
      "name": "Biotech",
      "color": "#32CD32",
      "colorDark": "#1C711C",
      "powerStyle": "mana",
      "critChance": 0.15
    }
  ],
  "auras": [
    {
      "id": "twinFlames",
      "name": "Twin Flames",
      "spellId": "twinFlames",
      "kind": "buff",
      "tint": "green",
      "iconUrl": "/icons/twin-flames.png"
    },
    {
      "id": "char",
      "name": "Char",
      "spellId": "char",
      "kind": "buff",
      "tint": "red",
      "iconUrl": "/icons/char.png"
    },
    {
      "id": "beckon",
      "name": "Beckon",
      "spellId": "beckon",
      "kind": "buff",
      "tint": "blue",
      "iconUrl": "/icons/beckon.png"
    },
    {
      "id": "healingRay",
      "name": "Healing Ray",
      "spellId": "healingGun",
      "kind": "buff",
      "tint": "green",
      "iconUrl": "/icons/healing-gun.png"
    },
    {
      "id": "nurture",
      "name": "Nurture",
      "spellId": "nurture",
      "kind": "buff",
      "tint": "green",
      "iconUrl": "/icons/nurture.png"
    },
    {
      "id": "inspire",
      "name": "Inspire",
      "spellId": "bubble",
      "kind": "buff",
      "tint": "blue",
      "iconUrl": "/icons/bubble.png",
      "longestWins": true
    },
    {
      "id": "hallowedBond",
      "name": "Hallowed Bond",
      "spellId": "hallowedBond",
      "kind": "buff",
      "tint": "blue"
    },
    {
      "id": "ward",
      "name": "Ward",
      "spellId": "bubble",
      "kind": "buff",
      "tint": "blue",
      "iconUrl": "/icons/bubble.png"
    },
    {
      "id": "manaWell",
      "name": "Mana Well",
      "spellId": "manaWell",
      "kind": "buff",
      "tint": "blue",
      "iconUrl": "/icons/mana-well.png"
    },
    {
      "id": "ringOfConfluence",
      "name": "Ring of Confluence",
      "spellId": "ringOfConfluence",
      "kind": "buff",
      "tint": "blue",
      "iconUrl": "/icons/ring-of-confluence.png"
    },
    {
      "id": "forcefield",
      "name": "Forcefield",
      "spellId": "forcefield",
      "kind": "buff",
      "tint": "blue",
      "iconUrl": "/icons/forcefield.png"
    },
    {
      "id": "ignite",
      "name": "Ignite",
      "spellId": "brandakar",
      "kind": "debuff",
      "tint": "red",
      "longestWins": true
    },
    {
      "id": "poison",
      "name": "Poison",
      "spellId": "poison",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/poison.png"
    },
    {
      "id": "bleed",
      "name": "Bleed",
      "spellId": "viciousStrikes",
      "kind": "debuff",
      "tint": "red",
      "longestWins": true,
      "iconUrl": "/icons/bleed.png"
    },
    {
      "id": "sever",
      "name": "Sever",
      "spellId": "sever",
      "kind": "debuff",
      "tint": "red",
      "longestWins": true,
      "iconUrl": "/icons/sever.png"
    },
    {
      "id": "phaseSickness",
      "name": "Phase Sickness",
      "spellId": "phaseSickness",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/phase-sickness.png",
      "longestWins": true
    },
    {
      "id": "forsake",
      "name": "Forsake",
      "spellId": "geolocation",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/geolocation.png",
      "longestWins": true
    },
    {
      "id": "geolocationPoison",
      "name": "Noxious Mist",
      "spellId": "geolocation",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/geolocation.png",
      "longestWins": true
    },
    {
      "id": "chill",
      "name": "Chill",
      "spellId": "coneOfCold",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/cone-of-cold.png"
    },
    {
      "id": "freeze",
      "name": "Freeze",
      "spellId": "frostNova",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/vattronach.png"
    },
    {
      "id": "immobilize",
      "name": "Immobilized",
      "spellId": "caltrops",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/caltrops.png"
    },
    {
      "id": "cower",
      "name": "Cower",
      "spellId": "miasma",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/miasma.png"
    },
    {
      "id": "confusion",
      "name": "Confusion",
      "spellId": "miasma",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/miasma.png"
    },
    {
      "id": "blind",
      "name": "Blind",
      "spellId": "bubble",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/bubble.png"
    },
    {
      "id": "overload",
      "name": "Overload",
      "spellId": "attune",
      "kind": "debuff",
      "tint": "red",
      "iconUrl": "/icons/attune.png"
    },
    {
      "id": "manaShield",
      "name": "Mana Shield",
      "spellId": "manaShield",
      "kind": "buff",
      "tint": "blue",
      "iconUrl": "/icons/mana-shield.png"
    },
    {
      "id": "voidWard",
      "name": "Void Ward",
      "spellId": "unleashElements",
      "kind": "buff",
      "tint": "blue",
      "iconUrl": "/icons/unleash-elements.png"
    },
    {
      "id": "bolster",
      "name": "Bolster",
      "spellId": "phaseBolt",
      "kind": "buff",
      "tint": "blue",
      "iconUrl": "/icons/phase-sickness.png",
      "longestWins": true
    },
    {
      "id": "unsummon",
      "name": "Bolster",
      "spellId": "unsummon",
      "kind": "buff",
      "tint": "blue",
      "iconUrl": "/icons/unsummon.png"
    }
  ],
  "spells": [
    {
      "id": "brandakar",
      "classId": "primordialist",
      "name": "Brandar",
      "description": "3-stage fire charge: tap Firebolt, hold Fireball, hold Meteor.",
      "iconUrl": "/icons/brandakar.png",
      "cost": "13–38 Mana",
      "tip": {
        "range": "30 yd",
        "cast": "≤5s"
      },
      "actionBar": true,
      "fx": "brandakar"
    },
    {
      "id": "firebolt",
      "classId": "primordialist",
      "name": "Firebolt",
      "description": "Instant firebolt.",
      "iconUrl": "/icons/firebolt.png",
      "cost": "13 Mana",
      "tip": {
        "damage": "12",
        "duration": "6s",
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionSpellId": "brandakar"
    },
    {
      "id": "fireball",
      "classId": "primordialist",
      "name": "Fireball",
      "description": "Growing fireball with AoE blast.",
      "iconUrl": "/icons/fireball.png",
      "cost": "25 Mana",
      "tip": {
        "damage": "~21",
        "duration": "12s",
        "range": "30 yd",
        "cast": "≤2s"
      },
      "actionSpellId": "brandakar",
      "fx": "fireball"
    },
    {
      "id": "meteor",
      "classId": "primordialist",
      "name": "Meteor",
      "description": "Placeable meteor — no target snap.",
      "iconUrl": "/icons/meteor.png",
      "cost": "38 Mana",
      "tip": {
        "damage": "~53",
        "duration": "24s",
        "range": "40 yd",
        "cast": "≤5s"
      },
      "actionSpellId": "brandakar",
      "fx": "meteor"
    },
    {
      "id": "combust",
      "classId": "primordialist",
      "name": "Combust",
      "description": "Detonate Ignite on every nearby hostile for its remaining damage.",
      "iconUrl": "/icons/combust.png",
      "cost": "150 Mana",
      "tip": {
        "damage": "Full Ignite",
        "cd": "45s",
        "range": "50 yd",
        "cast": "Instant"
      },
      "bookParentId": "brandakar",
      "actionBar": true,
      "fx": "combust"
    },
    {
      "id": "vattronach",
      "classId": "primordialist",
      "name": "Vattnach",
      "description": "3-stage frost charge: tap Ice Lance, hold Cone of Cold, hold Frost Nova.",
      "iconUrl": "/icons/vattronach.png",
      "cost": "10–30 Mana",
      "tip": {
        "range": "30 yd",
        "cast": "≤3s"
      },
      "actionBar": true,
      "fx": "coneOfCold"
    },
    {
      "id": "iceLance",
      "classId": "primordialist",
      "name": "Ice Lance",
      "description": "Chills the target briefly.",
      "iconUrl": "/icons/ice-lance.png",
      "cost": "10 Mana",
      "tip": {
        "damage": "10",
        "duration": "0.5s",
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionSpellId": "vattronach"
    },
    {
      "id": "coneOfCold",
      "classId": "primordialist",
      "name": "Cone of Cold",
      "description": "Widening cone with Chill.",
      "iconUrl": "/icons/cone-of-cold.png",
      "cost": "20 Mana",
      "tip": {
        "damage": "~15",
        "cast": "≤2s"
      },
      "actionSpellId": "vattronach",
      "fx": "coneOfCold"
    },
    {
      "id": "frostNova",
      "classId": "primordialist",
      "name": "Frost Nova",
      "description": "Frost burst with Freeze.",
      "iconUrl": "/icons/vattronach.png",
      "cost": "30 Mana",
      "tip": {
        "damage": "~30",
        "cast": "≤3s"
      },
      "actionSpellId": "vattronach",
      "fx": "frostNova"
    },
    {
      "id": "yordaren",
      "classId": "primordialist",
      "name": "Yorden",
      "description": "Tap: a boulder erupts behind the target and hurls toward you, damaging enemies in its path and stacking stones overhead (max 5). Hold: Stalagmite auto-fires at 2s — consumes the pile, 1–5 yd telegraph, spike launches foes toward you. Keep holding +1s: six stone shards erupt around you and pierce the target.",
      "cost": "16 / 28 / 22 Mana",
      "tip": {
        "damage": "14 / 20–45 / 6×12",
        "range": "30 yd",
        "cast": "Tap / 2s / +1s"
      },
      "actionBar": true,
      "iconUrl": "/icons/yordaren.png",
      "fx": "yordaren"
    },
    {
      "id": "yordarenI",
      "classId": "primordialist",
      "name": "Boulder",
      "description": "Rock erupts behind the target and hurls toward you, hurting enemies on the way. Stones clump and hover overhead.",
      "cost": "16 Mana",
      "actionSpellId": "yordaren",
      "iconUrl": "/icons/yordaren.png",
      "tip": {
        "damage": "14",
        "range": "30 yd",
        "cast": "Tap"
      }
    },
    {
      "id": "yordarenII",
      "classId": "primordialist",
      "name": "Stalagmite",
      "description": "Consume piled boulders. Charge up to 2s with a growing 1–5 yd telegraph; Stalagmite fires on its own at 2s. A spike launches the enemy toward you.",
      "cost": "28 Mana",
      "actionSpellId": "yordaren",
      "iconUrl": "/icons/yordaren.png",
      "tip": {
        "damage": "20–45",
        "range": "30 yd",
        "cast": "2s auto"
      }
    },
    {
      "id": "yordarenIII",
      "classId": "primordialist",
      "name": "Collapse",
      "description": "Keep holding after Stalagmite. After 1s more, six pointy stone shards erupt from the ground all around you and pierce through the target.",
      "cost": "22 Mana",
      "actionSpellId": "yordaren",
      "iconUrl": "/icons/yordaren.png",
      "tip": {
        "damage": "6×12",
        "range": "30 yd",
        "cast": "+1s"
      }
    },
    {
      "id": "luftdraka",
      "classId": "primordialist",
      "name": "Luftdrak",
      "description": "3-stage air charge: Lightning Bolt, Chain Lightning, Thunderstorm.",
      "iconUrl": "/icons/luftdraka.png",
      "cost": "15–45 Mana",
      "tip": {
        "range": "30 yd",
        "cast": "≤5s"
      },
      "actionBar": true,
      "fx": "luftdraka"
    },
    {
      "id": "lightningBolt",
      "classId": "primordialist",
      "name": "Lightning Bolt",
      "description": "Twin bolts. Chance to blind and knock the target.",
      "cost": "15 Mana",
      "tip": {
        "damage": "2×5.5",
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionSpellId": "luftdraka"
    },
    {
      "id": "chainLightning",
      "classId": "primordialist",
      "name": "Chain Lightning",
      "description": "Forking lightning. Grants a yellow Element Orb.",
      "cost": "23 Mana",
      "tip": {
        "damage": "35",
        "range": "30 yd",
        "cast": "≤2s"
      },
      "actionSpellId": "luftdraka"
    },
    {
      "id": "thunderstorm",
      "classId": "primordialist",
      "name": "Thunderstorm",
      "description": "Three skybolts that confuse and blind in the circle. Each bolt spends one third of the stage-3 mana.",
      "cost": "15×3 Mana",
      "tip": {
        "damage": "65",
        "range": "5 yd",
        "channel": "3s",
        "cast": "3s"
      },
      "actionSpellId": "luftdraka"
    },
    {
      "id": "morkenvel",
      "classId": "primordialist",
      "name": "Morken",
      "description": "2-stage Void Dash: tap blink, hold for an absorb shield.",
      "cost": "25 Mana",
      "tip": {
        "range": "30 yd",
        "cast": "≤3s"
      }
    },
    {
      "id": "teleport",
      "classId": "primordialist",
      "name": "Void Dash",
      "description": "Tap blinks 30 yd. Hold to dash with a scaling absorb shield.",
      "iconUrl": "/icons/teleport.png",
      "cost": "25 Mana",
      "tip": {
        "duration": "30s",
        "range": "30 yd",
        "cast": "≤3s"
      },
      "actionBar": true,
      "fx": "teleport"
    },
    {
      "id": "morkenvelI",
      "classId": "primordialist",
      "name": "Void Dash",
      "description": "Blink 30 yd (1 charge).",
      "iconUrl": "/icons/teleport.png",
      "cost": "25 Mana",
      "tip": {
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionSpellId": "teleport"
    },
    {
      "id": "morkenvelII",
      "classId": "primordialist",
      "name": "Void Dash: Shield",
      "description": "Dash and gain overhealth that scales with hold time.",
      "iconUrl": "/icons/teleport.png",
      "cost": "25 Mana",
      "tip": {
        "duration": "30s",
        "range": "30 yd",
        "cast": "≤3s"
      },
      "actionSpellId": "teleport"
    },
    {
      "id": "unleashElements",
      "classId": "primordialist",
      "name": "Maelstrom",
      "description": "Spend Element Orbs to dump stored damage and trigger orb effects. Void Ward lasts 30s.",
      "iconUrl": "/icons/unleash-elements.png",
      "cost": "100 Mana + Orbs",
      "tip": {
        "damage": "15% / orb",
        "duration": "8s",
        "cd": "30s",
        "range": "14 yd",
        "cast": "1.5s"
      },
      "actionBar": true,
      "fx": "unleashElements"
    },
    {
      "id": "ringOfConfluence",
      "classId": "primordialist",
      "name": "Ring of Confluence",
      "description": "Ring at your feet: mana users inside gain spell power and resist.",
      "iconUrl": "/icons/ring-of-confluence.png",
      "cost": "25 Mana",
      "tip": {
        "duration": "15s",
        "cd": "24s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true,
      "fx": "ringOfConfluence"
    },
    {
      "id": "staticDischarge",
      "classId": "primordialist",
      "name": "Static Discharge",
      "description": "Melee lightning cone that knocks hostiles far along your facing.",
      "iconUrl": "/icons/static-discharge.png",
      "cost": "75 Mana",
      "tip": {
        "damage": "22",
        "cd": "24s",
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionBar": true,
      "fx": "staticDischarge"
    },
    {
      "id": "pyroclasticFlow",
      "classId": "primordialist",
      "name": "Pyroclastic Flow",
      "description": "Charge a 30° lava wave. Tap for 8 yards; hold up to 2s for 30 yards. Damage scales with charge.",
      "iconUrl": "/icons/pyroclastic-flow.png",
      "cost": "30 Mana",
      "tip": {
        "damage": "18–40",
        "duration": "8s",
        "range": "8–30 yd",
        "cast": "≤2s"
      },
      "actionBar": true,
      "fx": "pyroclasticFlow"
    },
    {
      "id": "phaseStep",
      "classId": "phase-drifter",
      "name": "Phase Step",
      "description": "Blink behind the target with a triple pierce. Hold to step again.",
      "iconUrl": "/icons/phase-step.png",
      "cost": "30 Energy",
      "tip": {
        "damage": "25×3",
        "cd": "8s",
        "range": "30 yd",
        "cast": "Instant",
        "sickness": "+15"
      },
      "actionBar": true,
      "handler": "phaseStep",
      "fx": "phaseStepThrust"
    },
    {
      "id": "bladeFlurry",
      "classId": "phase-drifter",
      "name": "Phase Daggers",
      "description": "Tap a soft or hard target. Hold to charge an 8 yd strike zone at the aim point — no target required; hits everyone in the area.",
      "iconUrl": "/icons/phase-daggers.png",
      "cost": "20-60 Energy",
      "tip": {
        "damage": "5",
        "range": "25 yd",
        "cast": "≤1.5s",
        "sickness": "+20–30"
      },
      "actionBar": true,
      "handler": "bladeFlurry",
      "fx": "twinSpectralDaggers"
    },
    {
      "id": "backstab",
      "classId": "phase-drifter",
      "name": "Stab",
      "description": "Instant.",
      "iconUrl": "/icons/backstab.png",
      "cost": "10 Sickness",
      "tip": {
        "damage": "60",
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionBar": true,
      "handler": "backstab",
      "fx": "backstab"
    },
    {
      "id": "viciousStrikes",
      "classId": "phase-drifter",
      "name": "Vicious Cuts",
      "description": "Two thrusts that apply Bleed.",
      "iconUrl": "/icons/vicious-strikes.png",
      "cost": "15 Sickness",
      "tip": {
        "damage": "40×2",
        "duration": "15s",
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionBar": true,
      "handler": "viciousStrikes",
      "fx": "viciousStrikes"
    },
    {
      "id": "sever",
      "classId": "phase-drifter",
      "name": "Sever",
      "description": "Stab, then hemorrhage. Increases Bleed damage on the target.",
      "iconUrl": "/icons/sever.png",
      "cost": "45 Sickness",
      "tip": {
        "damage": "65 + 120",
        "duration": "18s",
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionBar": true,
      "handler": "sever",
      "fx": "sever"
    },
    {
      "id": "obliterate",
      "classId": "phase-drifter",
      "name": "Obliterate",
      "description": "Consume all Displacement Sickness for a huge melee hit.",
      "iconUrl": "/icons/obliterate.png",
      "cost": "All Sickness",
      "tip": {
        "damage": "~93",
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionBar": true,
      "handler": "obliterate",
      "fx": "obliterate"
    },
    {
      "id": "kick",
      "classId": "phase-drifter",
      "name": "Kick",
      "description": "Tap interrupts one target. Hold the full 1.5s for a roundhouse around you.",
      "iconUrl": "/icons/kick.png",
      "cost": "20 Energy",
      "tip": {
        "cd": "15s",
        "range": "5 yd",
        "cast": "≤1.5s"
      },
      "actionBar": true,
      "handler": "kick",
      "fx": "kick"
    },
    {
      "id": "closeGap",
      "classId": "phase-drifter",
      "name": "Close Gap",
      "description": "Dash to the target. 2 charges.",
      "iconUrl": "/icons/close-gap.png",
      "cost": "40 Energy",
      "tip": {
        "cd": "45s",
        "range": "30 yd",
        "cast": "Instant",
        "sickness": "+20"
      },
      "actionBar": true,
      "handler": "closeGap"
    },
    {
      "id": "bladeDance",
      "classId": "phase-drifter",
      "name": "Blade Dance",
      "description": "150 damage split across the aerial flurry hits.",
      "iconUrl": "/icons/blade-dance.png",
      "cost": "15 Sickness",
      "tip": {
        "damage": "150",
        "cd": "12s",
        "range": "14 yd",
        "cast": "Instant"
      },
      "actionBar": true,
      "handler": "bladeDance",
      "fx": "bladeDance"
    },
    {
      "id": "daggerfall",
      "classId": "phase-drifter",
      "name": "Daggerfall",
      "description": "Tap one target. Hold to portal-drop through a growing ground disc.",
      "iconUrl": "/icons/daggerfall.png",
      "cost": "25 / 40 Energy",
      "tip": {
        "damage": "44",
        "range": "18 yd",
        "cast": "≤1.5s",
        "sickness": "+15 / +20"
      },
      "actionBar": true,
      "handler": "daggerfall",
      "fx": "daggerfallSlash"
    },
    {
      "id": "drift",
      "classId": "phase-drifter",
      "name": "Drift",
      "description": "Out of combat. Fall into the Phase — recast to return.",
      "iconUrl": "/icons/drift.png",
      "cost": "10 Energy",
      "tip": {
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true,
      "handler": "drift",
      "fx": "dimensionalPortal"
    },
    {
      "id": "walkTheLine",
      "classId": "phase-drifter",
      "name": "Walk the Line",
      "description": "Intangible until the duration ends or you use another kit ability.",
      "iconUrl": "/icons/walk-the-line.png",
      "cost": "20 Energy",
      "tip": {
        "duration": "6s",
        "cd": "60s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true,
      "handler": "walkTheLine",
      "fx": "walkTheLine"
    },
    {
      "id": "phaseSickness",
      "classId": "phaseweaver",
      "name": "Phase Sickness",
      "description": "Infect a hostile with dimensional sickness. Spreads once to a new nearby uninfected foe (5 yd). A Phase Bolt that hits a sick target flares for 3 yd splash.",
      "iconUrl": "/icons/phase-sickness.png",
      "cost": "Free",
      "tip": {
        "damage": "8",
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "miasma",
      "classId": "phaseweaver",
      "name": "Miasma",
      "description": "2-stage fear: tap one target, hold to place fog. Cooldown scales with fog size (6–15s).",
      "iconUrl": "/icons/miasma.png",
      "cost": "Free",
      "tip": {
        "cd": "6–15s",
        "range": "25 yd",
        "cast": "≤2s"
      },
      "actionBar": true
    },
    {
      "id": "miasmaSingle",
      "classId": "phaseweaver",
      "name": "Miasma",
      "description": "Cower or Confusion on the locked hostile.",
      "iconUrl": "/icons/miasma.png",
      "cost": "Free",
      "tip": {
        "duration": "6s",
        "range": "25 yd",
        "cast": "Instant"
      },
      "actionSpellId": "miasma"
    },
    {
      "id": "miasmaAoe",
      "classId": "phaseweaver",
      "name": "Miasma: Bloom",
      "description": "Place black fog that sows Cower and Confusion.",
      "iconUrl": "/icons/miasma.png",
      "cost": "Free",
      "tip": {
        "range": "10 yd",
        "cast": "≤2s"
      },
      "actionSpellId": "miasma"
    },
    {
      "id": "coalescence",
      "classId": "phaseweaver",
      "name": "Orb of Zaroth",
      "description": "Call an Orb of Zaroth that wanders and arcs nearby foes for 15s. Cooldown starts when the orb ends.",
      "iconUrl": "/icons/coalescence.png",
      "cost": "100 Mana",
      "tip": {
        "damage": "25",
        "duration": "15s",
        "cd": "30s",
        "range": "15 yd",
        "cast": "≤2s"
      },
      "actionBar": true
    },
    {
      "id": "phaseBreach",
      "classId": "phaseweaver",
      "name": "Phase Breach",
      "description": "Out of combat. Open a Phase door — recast while phased for a new exit.",
      "iconUrl": "/icons/drift.png",
      "cost": "Free",
      "tip": {
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "phaseBolt",
      "classId": "phaseweaver",
      "name": "Phase Bolt",
      "description": "3-stage Phase charge. Tap Phase Blast (35, Bolster minion 15s). Hold Phase Bolt (50, Bolster 30s). Hold Volley: bolts every minion and every target in 30 yd (75), Bolstering minions for their remaining life. Bolstered summons no longer intercept later Bolts. Hitting a Phase-Sick target flares 3 yd splash for the bolt's damage.",
      "iconUrl": "/icons/phase-bolt.png",
      "cost": "Free",
      "tip": {
        "damage": "35 / 50 / 75",
        "range": "30 yd",
        "cast": "≤4s"
      },
      "actionBar": true,
      "fx": "phaseBolt"
    },
    {
      "id": "altarOfReascendence",
      "classId": "phaseweaver",
      "name": "Altar of Reascendence",
      "description": "Call a Phase altar that rises from the earth. Allies who die within 50 yd respawn at the altar. Three charges.",
      "iconUrl": "/icons/altar-of-reascendence.png",
      "cost": "150 Mana",
      "tip": {
        "range": "Self",
        "cast": "3s"
      },
      "actionBar": true,
      "fx": "altarOfReascendence"
    },
    {
      "id": "summonSpawn",
      "classId": "phaseweaver",
      "name": "Summon Spawn",
      "description": "Call a small Phase creature. It blinks into range, waits 1s, volleys 3 Phase Bolts (12 each), waits 1s, then blinks again inside a 20 yd leash. Recast replaces the living spawn. Phase Bolt Bolster splits it in two.",
      "iconUrl": "/icons/summon-spawn.png",
      "cost": "Free",
      "tip": {
        "damage": "3×12",
        "duration": "45s",
        "range": "20 yd",
        "cast": "1.5s"
      },
      "actionBar": true,
      "fx": "summonSpawn"
    },
    {
      "id": "summonBeast",
      "classId": "phaseweaver",
      "name": "Summon Beast",
      "description": "Call a hulking Phase beast. Slow walk, 12 yd leash, heavy single-target melee. Recast replaces the living beast. Phase Bolt Bolster unlocks a 90° 5 yd Cleave.",
      "iconUrl": "/icons/summon-beast.png",
      "cost": "Free",
      "tip": {
        "damage": "75",
        "duration": "60s",
        "range": "12 yd",
        "cast": "1.5s"
      },
      "actionBar": true,
      "fx": "summonBeast"
    },
    {
      "id": "unsummon",
      "classId": "phaseweaver",
      "name": "Unsummon",
      "description": "Sacrifice all active Phase minions. Pink liquid smoke streams into you, Bolstering your damage by 25% for 15s.",
      "iconUrl": "/icons/unsummon.png",
      "cost": "Free",
      "tip": {
        "duration": "15s",
        "cd": "18s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true,
      "fx": "unsummon"
    },
    {
      "id": "chainHeal",
      "classId": "soulbinder",
      "name": "Chain Heal",
      "description": "2-stage bouncing heal: tap hops, hold for Mass.",
      "iconUrl": "/icons/chain-heal.png",
      "cost": "1 Soul / hop",
      "tip": {
        "heal": "10+",
        "range": "30 yd",
        "cast": "≤4s"
      },
      "actionBar": true
    },
    {
      "id": "chainHealChain",
      "classId": "soulbinder",
      "name": "Chain Heal",
      "description": "Tap hops 3 allies. Hold up to 5.",
      "iconUrl": "/icons/chain-heal.png",
      "cost": "1 Soul / hop",
      "tip": {
        "heal": "10+",
        "range": "30 yd",
        "cast": "≤2s"
      },
      "actionSpellId": "chainHeal"
    },
    {
      "id": "chainHealMass",
      "classId": "soulbinder",
      "name": "Chain Heal: Mass",
      "description": "Wide Mass heal through up to four tendrils.",
      "iconUrl": "/icons/chain-heal.png",
      "cost": "1 Soul / hop",
      "tip": {
        "heal": "10+",
        "range": "20 yd",
        "cast": "≤4s"
      },
      "actionSpellId": "chainHeal"
    },
    {
      "id": "harvest",
      "classId": "soulbinder",
      "name": "Harvest",
      "description": "Charge to grow siphon range and pull Fractured Souls faster.",
      "iconUrl": "/icons/harvest.png",
      "cost": "Free",
      "tip": {
        "duration": "3s",
        "range": "5 yd",
        "cast": "≤3s"
      },
      "actionBar": true
    },
    {
      "id": "harvestNear",
      "classId": "soulbinder",
      "name": "Harvest: Near",
      "description": "Close siphon — slower pull.",
      "cost": "Free",
      "tip": {
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionSpellId": "harvest"
    },
    {
      "id": "harvestFar",
      "classId": "soulbinder",
      "name": "Harvest: Far",
      "description": "Full siphon range — faster pull.",
      "cost": "Free",
      "tip": {
        "range": "30 yd",
        "cast": "3s"
      },
      "actionSpellId": "harvest"
    },
    {
      "id": "channelPain",
      "classId": "soulbinder",
      "name": "Channel Pain",
      "description": "Hold a pain tendril. Crits bank an extra Soulwell soul.",
      "iconUrl": "/icons/channel-pain.png",
      "cost": "Free",
      "tip": {
        "damage": "25",
        "channel": "6s",
        "range": "24 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "damnation",
      "classId": "soulbinder",
      "name": "Damnation",
      "description": "Detonate nearby Fractured Souls. Overlapping blasts stack.",
      "iconUrl": "/icons/damnation.png",
      "cost": "Free",
      "tip": {
        "heal": "10 / soul",
        "damage": "8 / soul",
        "range": "50 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "beckon",
      "classId": "soulbinder",
      "name": "Beckon",
      "description": "Slowly draw nearby Fractured Souls toward you. Harvest still works.",
      "iconUrl": "/icons/beckon.png",
      "cost": "Free",
      "tip": {
        "duration": "10m",
        "range": "50 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "bubble",
      "classId": "soulbinder",
      "name": "Ward",
      "description": "Tap a personal Ward. Hold to place Greater Ward. Recast the dome to detonate.",
      "iconUrl": "/icons/bubble.png",
      "cost": "15% / 20% Mana",
      "tip": {
        "duration": "15s",
        "cd": "20s",
        "range": "30 yd",
        "cast": "≤2s"
      },
      "actionBar": true
    },
    {
      "id": "ward",
      "classId": "soulbinder",
      "name": "Ward",
      "description": "Golden shield on a friendly or yourself.",
      "iconUrl": "/icons/bubble.png",
      "cost": "15% Mana",
      "tip": {
        "duration": "15s",
        "cd": "20s",
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionSpellId": "bubble"
    },
    {
      "id": "greaterWard",
      "classId": "soulbinder",
      "name": "Greater Ward",
      "description": "Place a holy absorb dome. Allies inside gain overhealth.",
      "iconUrl": "/icons/bubble.png",
      "cost": "20% Mana",
      "tip": {
        "duration": "30s",
        "range": "30 yd",
        "cast": "≤2s"
      },
      "actionSpellId": "bubble"
    },
    {
      "id": "detonateWard",
      "classId": "soulbinder",
      "name": "Detonate Ward",
      "description": "Explode the ground ward for AoE heal and damage.",
      "iconUrl": "/icons/bubble.png",
      "cost": "15 Souls",
      "tip": {
        "range": "12 yd",
        "cast": "Instant"
      },
      "actionSpellId": "bubble"
    },
    {
      "id": "mend",
      "classId": "soulbinder",
      "name": "Mend",
      "description": "Instant single-target heal.",
      "iconUrl": "/icons/mend.png",
      "cost": "Free",
      "tip": {
        "heal": "25",
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "holyTouch",
      "classId": "soulbinder",
      "name": "Healing Touch",
      "description": "3-stage holy heal: Flash, Wave, then Nova.",
      "iconUrl": "/icons/healing-touch.png",
      "cost": "3–16 Souls",
      "tip": {
        "heal": "~71",
        "range": "10 yd",
        "cast": "≤4s"
      },
      "actionBar": true
    },
    {
      "id": "holyFlash",
      "classId": "soulbinder",
      "name": "Healing Flash",
      "description": "Narrow forward flash heal.",
      "iconUrl": "/icons/healing-touch.png",
      "cost": "3 Souls",
      "tip": {
        "heal": "30",
        "range": "10 yd",
        "cast": "Instant"
      },
      "actionSpellId": "holyTouch"
    },
    {
      "id": "holyCone",
      "classId": "soulbinder",
      "name": "Healing Wave",
      "description": "Widening gold cone heal.",
      "iconUrl": "/icons/healing-touch.png",
      "cost": "6–9 Souls",
      "tip": {
        "heal": "~49",
        "range": "10 yd",
        "cast": "≤2s"
      },
      "actionSpellId": "holyTouch"
    },
    {
      "id": "holyNova",
      "classId": "soulbinder",
      "name": "Healing Nova",
      "description": "Expanding nova that also heals you.",
      "iconUrl": "/icons/healing-touch.png",
      "cost": "12–16 Souls",
      "tip": {
        "heal": "~86",
        "range": "10 yd",
        "cast": "≤4s"
      },
      "actionSpellId": "holyTouch"
    },
    {
      "id": "duality",
      "classId": "arbiter",
      "name": "Duality",
      "description": "Switch Seraph ↔ Shade.",
      "iconUrl": "/icons/duality.png",
      "cost": "Free",
      "tip": {
        "duration": "15s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "divineShield",
      "classId": "arbiter",
      "name": "Divine Shield",
      "description": "Hold to raise a golden aegis.",
      "cost": "Free",
      "actionBar": true,
      "tip": {
        "duration": "12s",
        "range": "Self",
        "cast": "Instant"
      }
    },
    {
      "id": "hallowedBond",
      "classId": "arbiter",
      "name": "Hallowed Bond",
      "description": "Share incoming damage with a linked ally.",
      "cost": "Free",
      "tip": {
        "cd": "45s",
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "darkShield",
      "classId": "arbiter",
      "name": "Dark Shield",
      "description": "Hold to aim a void barrier.",
      "iconUrl": "/icons/dark-shield.png",
      "cost": "Free",
      "tip": {
        "cd": "20s",
        "range": "Self",
        "cast": "Instant"
      }
    },
    {
      "id": "lightfall",
      "classId": "arbiter",
      "name": "Lightfall",
      "description": "Leap up, hover, then crash down.",
      "cost": "Free",
      "tip": {
        "damage": "29",
        "cd": "10s",
        "range": "10 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "darkPull",
      "classId": "arbiter",
      "name": "Dark Pull",
      "description": "2-stage Shade pull: tap one target, hold for more.",
      "cost": "Free",
      "tip": {
        "cd": "8s",
        "range": "20 yd",
        "cast": "≤2.5s"
      }
    },
    {
      "id": "darkPullYank",
      "classId": "arbiter",
      "name": "Dark Pull",
      "description": "Yank one target in range.",
      "cost": "Free",
      "tip": {
        "range": "20 yd",
        "cast": "Instant"
      },
      "actionSpellId": "darkPull"
    },
    {
      "id": "darkPullMass",
      "classId": "arbiter",
      "name": "Dark Pull: Mass",
      "description": "Hold to pull more units, then everyone in range.",
      "cost": "Free",
      "tip": {
        "range": "20 yd",
        "cast": "≤2.5s"
      },
      "actionSpellId": "darkPull"
    },
    {
      "id": "cleave",
      "classId": "arbiter",
      "name": "Cleave",
      "description": "3-stage Seraph melee charge (GCD only).",
      "cost": "Free",
      "tip": {
        "range": "Melee",
        "cast": "≤1.5s"
      },
      "actionBar": true
    },
    {
      "id": "cleaveArc",
      "classId": "arbiter",
      "name": "Cleave: Arc",
      "description": "Narrow slash. Extra reach if you and the target are both moving.",
      "cost": "Free",
      "tip": {
        "damage": "12",
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionSpellId": "cleave"
    },
    {
      "id": "cleaveCone",
      "classId": "arbiter",
      "name": "Cleave: Cone",
      "description": "8 yd cone to 90°.",
      "cost": "Free",
      "tip": {
        "damage": "~18",
        "range": "8 yd",
        "cast": "≤1.5s"
      },
      "actionSpellId": "cleave"
    },
    {
      "id": "cleaveSweep",
      "classId": "arbiter",
      "name": "Cleave: Sweep",
      "description": "8 yd full sweep; extra charge boosts damage only.",
      "cost": "Free",
      "tip": {
        "damage": "~32",
        "range": "8 yd",
        "cast": "≤2.5s"
      },
      "actionSpellId": "cleave"
    },
    {
      "id": "shadowCleave",
      "classId": "arbiter",
      "name": "Shadow Cleave",
      "description": "3-stage Shade melee charge (GCD only).",
      "cost": "Free",
      "tip": {
        "range": "Melee",
        "cast": "≤1.5s"
      }
    },
    {
      "id": "shadowCleaveArc",
      "classId": "arbiter",
      "name": "Shadow Cleave: Arc",
      "description": "Narrow slash. Extra reach if you and the target are both moving.",
      "cost": "Free",
      "tip": {
        "damage": "12",
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionSpellId": "shadowCleave"
    },
    {
      "id": "shadowCleaveCone",
      "classId": "arbiter",
      "name": "Shadow Cleave: Cone",
      "description": "8 yd cone to 90°.",
      "cost": "Free",
      "tip": {
        "damage": "~18",
        "range": "8 yd",
        "cast": "≤1.5s"
      },
      "actionSpellId": "shadowCleave"
    },
    {
      "id": "shadowCleaveSweep",
      "classId": "arbiter",
      "name": "Shadow Cleave: Sweep",
      "description": "8 yd full sweep; extra charge boosts damage only.",
      "cost": "Free",
      "tip": {
        "damage": "~32",
        "range": "8 yd",
        "cast": "≤2.5s"
      },
      "actionSpellId": "shadowCleave"
    },
    {
      "id": "attune",
      "classId": "herald",
      "name": "Alignment",
      "description": "Switch Gaia ↔ Sol.",
      "iconUrl": "/icons/attune.png",
      "cost": "Free",
      "tip": {
        "cd": "8s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "poison",
      "classId": "herald",
      "name": "Neralith Spore",
      "description": "Tap a venom cone, or hold to drop spore mines.",
      "iconUrl": "/icons/poison.png",
      "cost": "50 Mana + 50 / spore",
      "tip": {
        "damage": "6",
        "channel": "3s",
        "range": "30 yd",
        "cast": "Instant",
        "align": "10 / 20 per spore"
      },
      "actionBar": true,
      "fx": "poison"
    },
    {
      "id": "poisonTap",
      "classId": "herald",
      "name": "Neralith Spore: Tap",
      "description": "Narrow cone of venom.",
      "iconUrl": "/icons/poison.png",
      "cost": "50 Mana",
      "tip": {
        "damage": "6",
        "range": "30 yd",
        "cast": "Instant",
        "align": "10"
      },
      "actionSpellId": "poison"
    },
    {
      "id": "poisonChannel",
      "classId": "herald",
      "name": "Neralith Spore: Channel",
      "description": "Hold to drop spore mines on a moving telegraph. 50 Mana and 20 Align per mushroom.",
      "iconUrl": "/icons/poison.png",
      "cost": "50 Mana / spore",
      "tip": {
        "channel": "3s",
        "cd": "15s",
        "range": "30 yd",
        "cast": "Instant",
        "align": "20"
      },
      "actionSpellId": "poison"
    },
    {
      "id": "nurture",
      "classId": "herald",
      "name": "Nurture",
      "description": "Tap Bloom, or channel a heal beam that can detonate Bloom.",
      "iconUrl": "/icons/nurture.png",
      "cost": "25–75 Mana",
      "tip": {
        "heal": "12 / 30",
        "channel": "4s",
        "range": "10 yd",
        "cast": "Instant",
        "align": "5–10"
      },
      "actionBar": true,
      "fx": "nurture"
    },
    {
      "id": "nurtureHot",
      "classId": "herald",
      "name": "Nurture: Bloom",
      "description": "Apply a nature HoT.",
      "iconUrl": "/icons/nurture.png",
      "cost": "25 Mana",
      "tip": {
        "heal": "12",
        "duration": "15s",
        "range": "10 yd",
        "cast": "Instant",
        "align": "5"
      },
      "actionSpellId": "nurture"
    },
    {
      "id": "nurtureChannel",
      "classId": "herald",
      "name": "Nurture: Channel",
      "description": "Heal beam. Full channel detonates Bloom on nearby allies.",
      "iconUrl": "/icons/nurture.png",
      "cost": "75 Mana",
      "tip": {
        "heal": "30×4",
        "channel": "4s",
        "range": "10 yd",
        "align": "10"
      },
      "actionSpellId": "nurture"
    },
    {
      "id": "geolocation",
      "classId": "herald",
      "name": "Geolocation",
      "description": "Sink, leave a poison patch, then burrow to the aimed ground.",
      "iconUrl": "/icons/geolocation.png",
      "cost": "25 Mana",
      "tip": {
        "damage": "8",
        "duration": "12s",
        "cd": "16s",
        "range": "5 yd",
        "cast": "1.5s",
        "align": "10"
      },
      "actionBar": true
    },
    {
      "id": "throwSpear",
      "classId": "herald",
      "name": "Spear of Judgment",
      "description": "Tap to hurl your spear. Hold to drive a solar lance through all enemies in a 30 yard line.",
      "iconUrl": "/icons/spear-of-judgment.png",
      "cost": "25–50 Mana",
      "tip": {
        "damage": "32 / 70",
        "range": "30 yd",
        "cast": "Instant / Hold ≤1.5s",
        "align": "10 / 18"
      },
      "actionBar": true
    },
    {
      "id": "throwSpearThrow",
      "classId": "herald",
      "name": "Spear: Throw",
      "description": "Hurl your spear.",
      "iconUrl": "/icons/spear-of-judgment.png",
      "cost": "25 Mana",
      "tip": {
        "damage": "32",
        "range": "30 yd",
        "cast": "Instant",
        "align": "10"
      },
      "actionSpellId": "throwSpear"
    },
    {
      "id": "throwSpearPierce",
      "classId": "herald",
      "name": "Spear: Solar Lance",
      "description": "Hold. A solar-bolstered spear pierces every enemy in a 30 yard line.",
      "iconUrl": "/icons/spear-of-judgment.png",
      "cost": "50 Mana",
      "tip": {
        "damage": "70",
        "range": "30 yd",
        "cast": "Hold ≤1.5s",
        "align": "18"
      },
      "actionSpellId": "throwSpear"
    },
    {
      "id": "rise",
      "classId": "herald",
      "name": "Rise",
      "description": "Hold to hover. Release to glide down.",
      "cost": "Free",
      "tip": {
        "range": "Self",
        "cast": "Instant",
        "align": "15"
      },
      "actionBar": true
    },
    {
      "id": "manaWell",
      "classId": "herald",
      "name": "Mana Well",
      "description": "Root well at your feet. Allies inside restore 40% of their max mana over the duration.",
      "iconUrl": "/icons/mana-well.png",
      "cost": "No cost",
      "tip": {
        "mana": "40% max",
        "duration": "15s",
        "range": "Self",
        "cast": "Instant",
        "align": "10"
      },
      "actionBar": true
    },
    {
      "id": "healingGrove",
      "classId": "herald",
      "name": "Healing Grove",
      "description": "3-stage Gaia heal: Hand, Mist, then Spring.",
      "iconUrl": "/icons/healing-grove.png",
      "cost": "60–100 Mana",
      "tip": {
        "range": "30 yd",
        "cast": "≤3s",
        "align": "10–20"
      },
      "actionBar": true
    },
    {
      "id": "healingHand",
      "classId": "herald",
      "name": "Healing Hand",
      "description": "Melee single-target heal.",
      "iconUrl": "/icons/healing-grove.png",
      "cost": "100 Mana",
      "tip": {
        "heal": "80",
        "range": "5 yd",
        "cast": "Instant",
        "align": "20"
      },
      "actionSpellId": "healingGrove"
    },
    {
      "id": "healingMist",
      "classId": "herald",
      "name": "Healing Mist",
      "description": "Forward heal cone that lengthens as it narrows.",
      "iconUrl": "/icons/healing-grove.png",
      "cost": "80 Mana",
      "tip": {
        "heal": "~45",
        "range": "8–15 yd",
        "cast": "≤2s",
        "align": "15"
      },
      "actionSpellId": "healingGrove"
    },
    {
      "id": "healingSpring",
      "classId": "herald",
      "name": "Healing Spring",
      "description": "Place a pulsing heal spring.",
      "iconUrl": "/icons/healing-grove.png",
      "cost": "60 Mana",
      "tip": {
        "heal": "25",
        "duration": "24s",
        "range": "30 yd",
        "cast": "3s",
        "align": "10"
      },
      "actionSpellId": "healingGrove"
    },
    {
      "id": "twinFlames",
      "classId": "herald",
      "name": "Flame of Creation",
      "description": "Gaia heals the most wounded ally. Sol burns the most wounded enemy. Both may be active at once.",
      "iconUrl": "/icons/twin-flames.png",
      "cost": "18% Mana",
      "tip": {
        "heal": "40",
        "duration": "40s",
        "cd": "40s",
        "range": "30 yd",
        "cast": "Instant",
        "align": "20"
      },
      "actionBar": true,
      "fx": "twinFlames"
    },
    {
      "id": "char",
      "classId": "herald",
      "name": "Char",
      "description": "Hold to scorched earth: 5–15 yd of smoldering ash and solar-fire cracks.",
      "iconUrl": "/icons/char.png",
      "cost": "50 Mana",
      "tip": {
        "damage": "8/0.75s",
        "duration": "8s",
        "cd": "12s",
        "range": "5–15 yd",
        "cast": "Hold ≤2s",
        "align": "15"
      },
      "actionBar": true,
      "fx": "char"
    },
    {
      "id": "decimate",
      "classId": "herald",
      "name": "Decimate",
      "description": "Tap a Solar Blast around you, or hold 2s for a 15° Solar Flare cone out to 24 yd.",
      "iconUrl": "/icons/decimate.png",
      "cost": "40–65 Mana",
      "tip": {
        "damage": "48 / 85",
        "cd": "10s",
        "range": "8 / 24 yd",
        "cast": "Hold ≤2s",
        "align": "10–18"
      },
      "actionBar": true,
      "fx": "decimate"
    },
    {
      "id": "decimateBlast",
      "classId": "herald",
      "name": "Solar Blast",
      "description": "Detonate solar fire around you.",
      "iconUrl": "/icons/decimate.png",
      "cost": "40 Mana",
      "tip": {
        "damage": "48",
        "range": "8 yd",
        "cast": "Instant",
        "align": "10"
      },
      "actionSpellId": "decimate"
    },
    {
      "id": "decimateFlare",
      "classId": "herald",
      "name": "Solar Flare",
      "description": "Hold 2s. 15° cone of solar fire out to 24 yd.",
      "iconUrl": "/icons/decimate.png",
      "cost": "65 Mana",
      "tip": {
        "damage": "85",
        "range": "24 yd",
        "cast": "2s",
        "align": "18"
      },
      "actionSpellId": "decimate"
    },
    {
      "id": "repel",
      "classId": "herald",
      "name": "Repel",
      "description": "Hold to plant Solar Force. Full charge channels three pulses; each knocks enemies back 10 yards.",
      "iconUrl": "/icons/repel.png",
      "cost": "40–75 Mana",
      "tip": {
        "damage": "25–65",
        "duration": "6s",
        "range": "30 yd",
        "cast": "≤3s",
        "channel": "6s",
        "align": "15–25"
      },
      "actionBar": true
    },
    {
      "id": "repelPlant",
      "classId": "herald",
      "name": "Repel: Solar Force",
      "description": "Skyfall-plant for a Solar Force pulse that knocks enemies back 10 yards.",
      "iconUrl": "/icons/repel.png",
      "cost": "40 Mana",
      "tip": {
        "damage": "~45",
        "range": "30 yd",
        "cast": "≤3s",
        "align": "15"
      },
      "actionSpellId": "repel"
    },
    {
      "id": "repelChannel",
      "classId": "herald",
      "name": "Repel: Judgment",
      "description": "Plant and channel three Solar Force pulses. Each pulse knocks back 10 yards. Release to recall.",
      "iconUrl": "/icons/repel.png",
      "cost": "75 Mana",
      "tip": {
        "damage": "65",
        "duration": "6s",
        "range": "30 yd",
        "cast": "3s",
        "channel": "6s",
        "align": "25"
      },
      "actionSpellId": "repel"
    },
    {
      "id": "evasiveManeuver",
      "classId": "gunslinger",
      "name": "Evasive Maneuver",
      "description": "W front, S back, A/D cartwheel.",
      "iconUrl": "/icons/evasive-maneuver.png",
      "cost": "2 Energy / flip",
      "tip": {
        "cd": "0.5s",
        "range": "12 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "alphaOmega",
      "classId": "gunslinger",
      "name": "Alpha & Omega",
      "description": "Alternate twin-pistol shots (right, then left). Hold to keep firing. Becomes Boomstick in shotgun stance.",
      "iconUrl": "/icons/alpha-omega.png",
      "cost": "15 Energy",
      "tip": {
        "damage": "15",
        "cd": "GCD",
        "range": "15 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "lockNLoad",
      "classId": "gunslinger",
      "name": "Lock n Load",
      "description": "Hold to lock hostiles, then fire. 5 Energy per lock.",
      "iconUrl": "/icons/lock-n-load.png",
      "cost": "5 Energy / lock",
      "tip": {
        "damage": "45",
        "channel": "4s",
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "fanTheHammer",
      "classId": "gunslinger",
      "name": "Fan the Hammer",
      "description": "Pistols: dump 6 rounds into one target (15 each). Shotgun: three pump-action full cones. 175 damage split.",
      "iconUrl": "/icons/fan-the-hammer.png",
      "cost": "25 Energy",
      "tip": {
        "damage": "15×6 / 175÷3",
        "cd": "6s",
        "range": "12 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "doubleTap",
      "classId": "gunslinger",
      "name": "Double Tap",
      "description": "Execute: target must be below 30% health. Pistols: one round from each gun in sequence (70 each, 50% crit). Shotgun: two full cones; the second knocks the target back 10 yd (2× damage, 50% crit).",
      "iconUrl": "/icons/double-tap.png",
      "cost": "20 Energy",
      "tip": {
        "damage": "70×2 / 80 split",
        "cd": "10s",
        "range": "15 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "caltrops",
      "classId": "gunslinger",
      "name": "Caltrops",
      "description": "Scatter jack-stars at your feet.",
      "iconUrl": "/icons/caltrops.png",
      "cost": "20 Energy",
      "tip": {
        "duration": "4s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "sprayNPray",
      "classId": "gunslinger",
      "name": "Spray n Pray",
      "description": "Aim a frontal cone, then unload every loaded pistol round from Alpha and Omega.",
      "iconUrl": "/icons/spray-n-pray.png",
      "cost": "25 Energy",
      "tip": {
        "damage": "15",
        "cd": "12s",
        "range": "15 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "needleDrop",
      "classId": "gunslinger",
      "name": "Snipe",
      "description": "Slow-fall sniper shot from a flip or hover.",
      "iconUrl": "/icons/needle-drop.png",
      "cost": "40 Energy",
      "tip": {
        "damage": "120",
        "cd": "14s",
        "range": "40 yd",
        "cast": "1s"
      },
      "actionBar": true
    },
    {
      "id": "spin2Win",
      "classId": "gunslinger",
      "name": "Spin2Win",
      "description": "Spin and unload every loaded pistol round in a full 360° ring around you.",
      "iconUrl": "/icons/spin2-win.png",
      "cost": "40 Energy",
      "tip": {
        "damage": "15",
        "channel": "All loaded rounds",
        "cd": "20s",
        "range": "12 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "reload",
      "classId": "gunslinger",
      "name": "Reload",
      "description": "Load pistol rounds one at a time into Alpha and Omega. Cylinder spin when a barrel fills.",
      "iconUrl": "/icons/reload.png",
      "cost": "Free",
      "tip": {
        "cast": "Channel",
        "range": "Self"
      },
      "actionBar": true
    },
    {
      "id": "dash",
      "classId": "gunslinger",
      "name": "Dash",
      "description": "Slide in the WASD direction held.",
      "iconUrl": "/icons/dash.png",
      "cost": "20 Energy",
      "tip": {
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "n00bTube",
      "classId": "gunslinger",
      "name": "N00bTube",
      "description": "Hold to aim the gravity arc. Release to fire. Explodes on impact. 8 yd splash. No max range.",
      "iconUrl": "/icons/n00btube.png",
      "cost": "40 Energy",
      "tip": {
        "damage": "60",
        "cd": "10s",
        "cast": "Hold"
      },
      "actionBar": true
    },
    {
      "id": "swapWeapon",
      "classId": "gunslinger",
      "name": "Swap Weapon",
      "description": "Holster pistols and draw the shotgun (Boomstick), or stow the shotgun and draw pistols (Alpha & Omega).",
      "iconUrl": "/icons/swap-weapon.png",
      "cost": "Free",
      "tip": {
        "cd": "1s",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "tacticalRetreat",
      "classId": "gunslinger",
      "name": "Tacticool Retreat",
      "description": "Melee. Backflip 16 yd while firing N00bTube, blasting the target 15 yd away.",
      "iconUrl": "/icons/tactical-retreat.png",
      "cost": "40 Energy",
      "tip": {
        "damage": "60",
        "cd": "16s",
        "range": "5 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "boomstick",
      "classId": "gunslinger",
      "name": "Boomstick",
      "description": "Shotgun stance. Hold to widen the cone and shorten range. Damage splits among hits.",
      "iconUrl": "/icons/boomstick.png",
      "cost": "Free",
      "tip": {
        "damage": "40 total",
        "range": "20 yd",
        "cast": "≤1.2s"
      },
      "actionBar": true
    },
    {
      "id": "boomstickNarrow",
      "classId": "gunslinger",
      "name": "Boomstick: Tight",
      "description": "Tap — 5° cone at 20 yd. Damage split among targets hit.",
      "iconUrl": "/icons/boomstick.png",
      "cost": "Free",
      "tip": {
        "damage": "40 total",
        "range": "20 yd",
        "cast": "Instant"
      },
      "actionSpellId": "boomstick"
    },
    {
      "id": "boomstickWide",
      "classId": "gunslinger",
      "name": "Boomstick: Spread",
      "description": "Full charge — 95° cone at 13 yd. Damage split among targets hit.",
      "iconUrl": "/icons/boomstick.png",
      "cost": "Free",
      "tip": {
        "damage": "40 total",
        "range": "13 yd",
        "cast": "≤1.2s"
      },
      "actionSpellId": "boomstick"
    },
    {
      "id": "deployTurret",
      "classId": "engineer",
      "name": "Deploy Turret",
      "description": "2 charges. Tap to place, hold to recall. Beams, then despawns.",
      "iconUrl": "/icons/deploy-turret.png",
      "cost": "Free",
      "tip": {
        "damage": "25",
        "channel": "6s",
        "cd": "30s",
        "range": "15 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "deployCombatDrone",
      "classId": "engineer",
      "name": "Combat Drone",
      "description": "Hovering auto-gunner that wanders near you.",
      "iconUrl": "/icons/deploy-combat-drone.png",
      "cost": "Free",
      "tip": {
        "damage": "15",
        "duration": "10m",
        "range": "15 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "deployHealingDrone",
      "classId": "biotech",
      "name": "Deploy Healing Drone",
      "description": "Hovering healer. Prefers you, then the lowest-HP ally nearby.",
      "iconUrl": "/icons/deploy-healing-drone.png",
      "cost": "Free",
      "tip": {
        "heal": "15",
        "channel": "4s",
        "duration": "10m",
        "range": "15 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "healingGun",
      "classId": "biotech",
      "name": "Healing Gun",
      "description": "Tap: burst heal. Hold 2s: Healing Ray.",
      "iconUrl": "/icons/healing-gun.png",
      "cost": "20–45 Mana",
      "tip": {
        "heal": "30 / 16",
        "range": "15 yd",
        "cast": "Tap / ≤2s"
      },
      "actionBar": true
    },
    {
      "id": "biomenditeGrenade",
      "classId": "biotech",
      "name": "Biomendite Grenade",
      "description": "Lob a grenade that bursts into healing goo. Friendlies in the splash are healed instantly; enemies are immobilized for 4s (breaks on hit, scales with damage vs HP).",
      "iconUrl": "/icons/biomendite-grenade.png",
      "cost": "40 Mana",
      "tip": {
        "heal": "40",
        "duration": "4s",
        "cd": "12s",
        "range": "8 yd",
        "cast": "Hold to aim"
      },
      "actionBar": true
    },
    {
      "id": "forcefield",
      "classId": "engineer",
      "name": "Forcefield",
      "description": "Plasma dome at your feet — 20% max HP overhealth.",
      "iconUrl": "/icons/forcefield.png",
      "cost": "Free",
      "tip": {
        "duration": "12s",
        "cd": "90s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "barrier",
      "classId": "engineer",
      "name": "Barrier",
      "description": "3-tile wall in front — 150 absorb.",
      "iconUrl": "/icons/barrier.png",
      "cost": "Free",
      "tip": {
        "duration": "8s",
        "cd": "18s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "translocator",
      "classId": "engineer",
      "name": "Translocator",
      "description": "Throw a beacon, then blink to the landing. 2 charges.",
      "iconUrl": "/icons/translocator.png",
      "cost": "Free",
      "tip": {
        "cd": "15s",
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "teleporter",
      "classId": "engineer",
      "name": "Teleporter",
      "description": "Place a recall pad, then blink back (or mass-recall).",
      "iconUrl": "/icons/teleporter.png",
      "cost": "Free",
      "tip": {
        "cd": "60s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "teleporterPlace",
      "classId": "engineer",
      "name": "Place Pad",
      "description": "Stage 1 — drop a recall pad at your feet.",
      "iconUrl": "/icons/teleporter.png",
      "cost": "Free",
      "tip": {
        "range": "Self",
        "cast": "Instant"
      },
      "actionSpellId": "teleporter"
    },
    {
      "id": "teleporterRecall",
      "classId": "engineer",
      "name": "Recall",
      "description": "Stage 2 tap — blink only yourself to the pad.",
      "iconUrl": "/icons/teleporter.png",
      "cost": "Free",
      "tip": {
        "cast": "Instant"
      },
      "actionSpellId": "teleporter"
    },
    {
      "id": "massTeleport",
      "classId": "engineer",
      "name": "Mass Teleport",
      "description": "Stage 2 hold — rooted cast; recall allies in range.",
      "iconUrl": "/icons/teleporter.png",
      "cost": "Free",
      "tip": {
        "range": "5 yd",
        "cast": "≤2s"
      },
      "actionSpellId": "teleporter"
    },
    {
      "id": "sawtellite",
      "classId": "engineer",
      "name": "Sawtellite",
      "description": "Hold to lock hostiles, then release the saws.",
      "iconUrl": "/icons/sawtellite.png",
      "cost": "Free",
      "tip": {
        "damage": "22",
        "channel": "≤4s",
        "cd": "18s",
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "deployProxyMine",
      "classId": "engineer",
      "name": "Deploy Proxy Mine",
      "description": "2 charges. Arms at your feet; 5 yd proximity blast.",
      "iconUrl": "/icons/deploy-proxy-mine.png",
      "cost": "Free",
      "tip": {
        "damage": "75",
        "cd": "60s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "noxiumMine",
      "classId": "engineer",
      "name": "Noxium Mine",
      "description": "2 charges (shared). Burst, then 35 dmg/s Noxium mire.",
      "iconUrl": "/icons/noxium-mine.png",
      "cost": "Free",
      "tip": {
        "damage": "35/s",
        "duration": "8s",
        "cd": "60s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "cryodisc",
      "classId": "engineer",
      "name": "Cryodisc",
      "description": "Hovering ice disc. Bounces off walls up to 5 times. First enemy hit: 8 yd Freeze (breaks on hit).",
      "iconUrl": "/icons/cryodisc.png",
      "cost": "Free",
      "tip": {
        "duration": "6s Freeze",
        "cd": "16s",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "whirlwind",
      "classId": "avatar-of-might",
      "name": "Whirlwind",
      "description": "Instant melee ring around you.",
      "iconUrl": "/icons/whirlwind.png",
      "cost": "Generates 10 Rage",
      "tip": {
        "damage": "22",
        "range": "Melee",
        "cast": "Instant"
      },
      "actionBar": true
    },
    {
      "id": "charge",
      "classId": "avatar-of-might",
      "name": "Charge",
      "description": "2-stage charge: tap Rush, hold Line.",
      "iconUrl": "/icons/charge.png",
      "cost": "Generates 10 Rage",
      "tip": {
        "damage": "8 / ~45",
        "cd": "12s",
        "range": "30 yd",
        "cast": "≤1s"
      },
      "actionBar": true
    },
    {
      "id": "chargeRush",
      "classId": "avatar-of-might",
      "name": "Charge: Rush",
      "description": "Rush one hostile in range.",
      "iconUrl": "/icons/charge.png",
      "cost": "Generates 10 Rage",
      "tip": {
        "damage": "8",
        "cd": "12s",
        "range": "8–30 yd",
        "cast": "Instant"
      },
      "actionSpellId": "charge"
    },
    {
      "id": "chargeLine",
      "classId": "avatar-of-might",
      "name": "Charge: Line",
      "description": "Narrow strip through all targets. Damage scales with size.",
      "iconUrl": "/icons/charge.png",
      "cost": "Generates 10 Rage",
      "tip": {
        "damage": "~45",
        "cd": "12s",
        "range": "30 yd",
        "cast": "1s"
      },
      "actionSpellId": "charge"
    },
    {
      "id": "shieldBash",
      "classId": "avatar-of-might",
      "name": "Shield Bash",
      "description": "Melee bash that interrupts a charged cast.",
      "iconUrl": "/icons/shield-bash.png",
      "tip": {
        "damage": "18",
        "cd": "10s",
        "range": "5 yd",
        "cast": "≤1s"
      },
      "actionBar": true,
      "cost": "Generates 10 Rage"
    },
    {
      "id": "shockwave",
      "classId": "avatar-of-might",
      "name": "Shockwave",
      "description": "3-stage ground slam.",
      "iconUrl": "/icons/shockwave.png",
      "tip": {
        "damage": "~22",
        "cd": "12s",
        "range": "8 yd",
        "cast": "≤1s"
      },
      "actionBar": true,
      "cost": "Generates 10 Rage"
    },
    {
      "id": "rendingStrike",
      "classId": "avatar-of-might",
      "name": "Rending Strike",
      "description": "Melee charge that finishes in a Whirlwind channel.",
      "iconUrl": "/icons/rending-strike.png",
      "tip": {
        "damage": "~20",
        "channel": "6s",
        "cd": "12s",
        "range": "Melee",
        "cast": "≤1.5s"
      },
      "actionBar": true,
      "cost": "Generates 10 Rage"
    },
    {
      "id": "shootArrows",
      "classId": "beast-master",
      "bookSection": "The Hunter",
      "name": "Shoot Arrows",
      "description": "3-stage bow charge: tap Shoot Arrow (free), hold ≤2s Piercing Shot (30 Energy), hold ≤3s Volley (30 Energy).",
      "iconUrl": "/icons/shoot-arrows.png",
      "cost": "Free / 30 / 30 Energy",
      "tip": {
        "damage": "15 / 50 / 175",
        "range": "30 yd",
        "cast": "≤3s"
      },
      "actionBar": true
    },
    {
      "id": "shootArrow",
      "classId": "beast-master",
      "bookSection": "The Hunter",
      "name": "Shoot Arrow",
      "description": "Instant arcing arrow.",
      "iconUrl": "/icons/shoot-arrows.png",
      "cost": "Free",
      "tip": {
        "damage": "15",
        "cd": "0.5s",
        "range": "30 yd",
        "cast": "Instant"
      },
      "actionSpellId": "shootArrows"
    },
    {
      "id": "piercingShot",
      "classId": "beast-master",
      "bookSection": "The Hunter",
      "name": "Piercing Shot",
      "description": "Line pierce. Target count scales with charge.",
      "iconUrl": "/icons/shoot-arrows.png",
      "cost": "30 Energy",
      "tip": {
        "damage": "50",
        "range": "30 yd",
        "cast": "≤2s"
      },
      "actionSpellId": "shootArrows"
    },
    {
      "id": "volley",
      "classId": "beast-master",
      "bookSection": "The Hunter",
      "name": "Volley",
      "description": "Aim a growing rain, then a signal arrow and volley. Total damage is split among all targets hit.",
      "iconUrl": "/icons/shoot-arrows.png",
      "cost": "30 Energy",
      "tip": {
        "damage": "175 split",
        "range": "30 yd",
        "cast": "≤3s"
      },
      "actionSpellId": "shootArrows"
    },
    {
      "id": "spearStrike",
      "classId": "beast-master",
      "bookSection": "The Hunter",
      "name": "Spear Strike",
      "description": "Thrust your hunting spear three times at melee range. Full movement control — no leap. Master-only (also usable mounted; upper body only on the saddle).",
      "iconUrl": "/icons/spear-strike.png",
      "cost": "30 Energy",
      "actionBar": true,
      "tip": {
        "damage": "25×3",
        "cd": "8s",
        "range": "Melee",
        "cast": "Instant"
      }
    },
    {
      "id": "spearDive",
      "classId": "beast-master",
      "bookSection": "The Hunter",
      "name": "Spear Dive",
      "description": "Leap up to 30 yards and plant your hunting spear in the target. Hunter-only — unusable while mounted.",
      "iconUrl": "/icons/spear-dive.png",
      "cost": "30 Energy",
      "actionBar": true,
      "tip": {
        "damage": "28",
        "cd": "10s",
        "range": "30 yd",
        "cast": "Instant"
      }
    },
    {
      "id": "controlBeast",
      "classId": "beast-master",
      "bookSection": "The Hunter",
      "name": "Control Beast",
      "description": "Take direct control of your panther. The hunter stays where you left them. Off-GCD.",
      "iconUrl": "/icons/control-beast.png",
      "cost": "Free",
      "actionBar": true,
      "gcd": false,
      "cooldown": 0,
      "tip": {
        "range": "Self",
        "cast": "Instant",
        "cd": "None"
      }
    },
    {
      "id": "swipe",
      "classId": "beast-master",
      "bookSection": "The Beast",
      "name": "Swipe",
      "description": "Toggle panther auto-attack. While driving the beast with Swipe on, only basic Swipes fire every 2 seconds — Lunge and Maul stay manual. The undriven panther in combat cycles Lunge → Swipe → Maul → Swipe → Swipe on its own. Panther-only — unusable while mounted.",
      "iconUrl": "/icons/swipe.png",
      "cost": "Free",
      "actionBar": true,
      "gcd": false,
      "cooldown": 0,
      "tip": {
        "damage": "7×2",
        "cd": "2s swing",
        "range": "8 yd",
        "cast": "Toggle"
      }
    },
    {
      "id": "maul",
      "classId": "beast-master",
      "bookSection": "The Beast",
      "name": "Maul",
      "description": "Your panther delivers a heavy claw strike. Panther-only — unusable while mounted.",
      "iconUrl": "/icons/maul.png",
      "cost": "30 Energy",
      "actionBar": true,
      "tip": {
        "damage": "75",
        "cd": "6s",
        "range": "8 yd",
        "cast": "Instant"
      }
    },
    {
      "id": "lunge",
      "classId": "beast-master",
      "bookSection": "The Beast",
      "name": "Lunge",
      "description": "Leap up to 40 yards onto the target, then bite for heavy damage on impact. Usable while controlling the panther or mounted. Dismounting mid-leap does not cancel the panther attack.",
      "iconUrl": "/icons/lunge.png",
      "cost": "30 Energy",
      "actionBar": true,
      "tip": {
        "damage": "45",
        "cd": "12s",
        "range": "40 yd",
        "cast": "Instant"
      }
    },
    {
      "id": "attackPatternDelta",
      "classId": "beast-master",
      "bookSection": "The Beast",
      "name": "Attack Pattern Delta",
      "description": "Lock jaws into the target for two bites, then hurl them 8 yards skyward. Hold 1s for Tandem Impale (costs 1 Tandem orb, 45s CD) — the hunter leaps in as soon as the cast completes (no hang), impales midair, and drags them 20 yards while falling. Beast-only. Tap does not use Tandem orbs.",
      "iconUrl": "/icons/attack-pattern-delta.png",
      "cost": "30 Energy",
      "actionBar": true,
      "cooldown": 12,
      "tip": {
        "damage": "30×2",
        "cd": "12s",
        "range": "8 yd",
        "cast": "Tap / ≤1s"
      }
    },
    {
      "id": "tandemImpale",
      "classId": "beast-master",
      "bookSection": "The Beast",
      "name": "Tandem Impale",
      "description": "Attack Pattern Delta hold: at 1s the hunter leaps to the knockup apex, impales midair, and drags them 20 yards as both fall. Costs 1 Tandem orb (regen 30s). 45s CD, separate from Attack Pattern Omega. Control returns to the hunter.",
      "iconUrl": "/icons/attack-pattern-delta.png",
      "cost": "30 Energy + 1 Tandem",
      "tip": {
        "damage": "30×2",
        "range": "8 yd",
        "cast": "1s hold",
        "cd": "45s"
      },
      "actionSpellId": "attackPatternDelta"
    },
    {
      "id": "attackPatternOmega",
      "classId": "beast-master",
      "bookSection": "The Beast",
      "name": "Attack Pattern Omega",
      "description": "Tandem ability. Press: forward X instantly (1 orb). Hold ≥1s and release: reverse X from beyond the target (1 more orb). Usable in all forms. Mounted: hunter and beast spread to flank. Both dash in an X through the target (15 yd past + pre-dash flank) — beast lunge/swipe flyby, hunter spear charge (same trail as Avatar of Might Charge). Hits once for 150 per pass. 45s CD, separate from Tandem Impale.",
      "iconUrl": "/icons/attack-pattern-omega.png",
      "cost": "30 Energy + 1–2 Tandem",
      "actionBar": true,
      "cooldown": 45,
      "tip": {
        "damage": "150",
        "cd": "45s",
        "range": "30 yd",
        "cast": "Press / hold 1s"
      }
    },
    {
      "id": "controlMaster",
      "classId": "beast-master",
      "bookSection": "The Beast",
      "name": "Control Master",
      "description": "Return control to the hunter. The panther stays where you left it. Off-GCD.",
      "iconUrl": "/icons/control-master.png",
      "cost": "Free",
      "actionBar": true,
      "gcd": false,
      "cooldown": 0,
      "tip": {
        "range": "Self",
        "cast": "Instant",
        "cd": "None"
      }
    },
    {
      "id": "mountCompanion",
      "classId": "beast-master",
      "bookSection": "Mounted",
      "name": "Mount Companion",
      "description": "Tap to mount your panther. Within 15 yards you cartwheel onto the saddle; from 16–40 yards both leap toward each other and mount mid-air. Usable from the hunter or while controlling the beast — the current driver keeps control until you seat. Off-GCD. Dismount does not cancel a panther attack already in motion.",
      "iconUrl": "/icons/mount-companion.png",
      "cost": "20 Energy",
      "actionBar": true,
      "gcd": false,
      "cooldown": 0,
      "tip": {
        "range": "15 yd / 40 yd",
        "cast": "Instant",
        "cd": "None"
      }
    },
    {
      "id": "manaShield",
      "classId": "common",
      "name": "Mana Shield",
      "description": "Tap Deflect, charge Reflect, full Persist against magic.",
      "iconUrl": "/icons/mana-shield.png",
      "cost": "25 / 50 / 100 Mana",
      "actionBar": true,
      "tip": {
        "duration": "0.5s / 1–3s / 6s",
        "range": "Self",
        "cast": "≤3s"
      }
    },
    {
      "id": "manaShieldDeflect",
      "classId": "common",
      "name": "Deflect",
      "description": "Glance Step-1 magic aside onto terrain.",
      "iconUrl": "/icons/mana-shield.png",
      "cost": "25 Mana",
      "tip": {
        "duration": "0.5s",
        "range": "Self",
        "cast": "Instant"
      },
      "actionSpellId": "manaShield"
    },
    {
      "id": "manaShieldReflect",
      "classId": "common",
      "name": "Reflect",
      "description": "Charge-scaled grace that can reflect weaker Step-2 magic.",
      "iconUrl": "/icons/mana-shield.png",
      "cost": "50 Mana",
      "tip": {
        "duration": "~2s",
        "range": "Self",
        "cast": "≤3s"
      },
      "actionSpellId": "manaShield"
    },
    {
      "id": "manaShieldPersist",
      "classId": "common",
      "name": "Persist",
      "description": "Resist all incoming magic for the duration.",
      "iconUrl": "/icons/mana-shield.png",
      "cost": "100 Mana",
      "tip": {
        "duration": "6s",
        "range": "Self",
        "cast": "3s"
      },
      "actionSpellId": "manaShield"
    },
    {
      "id": "consumePotion",
      "classId": "common",
      "name": "Consume Potion",
      "description": "Restore a portion of max HP. 2 charges.",
      "iconUrl": "/icons/consume-potion.png",
      "cost": "Free",
      "tip": {
        "heal": "40%",
        "cd": "30s",
        "range": "Self",
        "cast": "Instant"
      }
    }
  ],
  "stancePairs": [
    {
      "seraph": "divineShield",
      "shade": "darkShield",
      "cooldownId": "divineShield"
    },
    {
      "seraph": "lightfall",
      "shade": "darkPull",
      "cooldownId": "lightfall"
    },
    {
      "seraph": "cleave",
      "shade": "shadowCleave",
      "cooldownId": "cleave"
    }
  ],
  "combat": {
    "kick": {
      "tap": 0.5,
      "roundhouseCharge": 1,
      "cap": 1.5,
      "costTap": 20,
      "costRoundhouse": 30,
      "cooldown": 15,
      "range": 4.572,
      "aoeRadius": 4.572
    },
    "sever": {
      "sicknessCost": 45,
      "damage": 65,
      "range": 4.572,
      "rangeMoving": 6.858,
      "targetHeight": 0.95,
      "dotDuration": 18,
      "dotInterval": 1.5,
      "dotTickDamage": 10,
      "bleedAmp": 0.25
    },
    "obliterate": {
      "minSickness": 10,
      "capSickness": 95,
      "dmgAtMin": 10,
      "dmgAtCap": 175,
      "range": 4.572,
      "rangeMoving": 6.858,
      "targetHeight": 0.95
    },
    "phaseStep": {
      "strikeDamage": 25,
      "strikeHits": 3,
      "strikeStagger": 0.085,
      "strikeHeight": 0.95,
      "strikeFallU": 0.08,
      "step2Hold": 1
    },
    "daggerfall": {
      "tap": 0.5,
      "charge": 1.5,
      "aoeRadiusMin": 2.7432,
      "aoeRadiusMax": 7.3152,
      "aoeCost": 40,
      "aoeSickness": 20,
      "hitShake": 1.5,
      "targetTransit": 0.02
    },
    "nurture": {
      "channel": 4,
      "hotDuration": 15,
      "hotTick": 3,
      "hotHeal": 12,
      "channelTick": 1,
      "channelHeal": 30,
      "burstRadius": 9.144,
      "channelDetonateHeal": 60,
      "moveMul": 0.5,
      "alignmentTap": 5,
      "alignmentChannel": 10,
      "manaTap": 25,
      "manaChannel": 75
    },
    "charge": {
      "step2Hold": 1,
      "lineWidth": 1.8288,
      "lineDamageMin": 25,
      "lineDamageMax": 65,
      "puntSizeU": 0.8,
      "puntSide": 4.572,
      "puntBack": 1.8288,
      "puntPeak": 1.35,
      "puntFlight": 0.42
    },
    "luftdraka": {
      "tap": 0.5,
      "chainTime": 2,
      "stormChannel": 3,
      "stormCap": 5,
      "manaBolt": 15,
      "manaChain": 23,
      "manaStorm": 45,
      "boltDamage": 5.5,
      "chainDamage": 35,
      "stormDamage": 65,
      "boltRange": 27.432,
      "stormPlaceRange": 27.432,
      "stormRadius": 4.572,
      "chainJump": 9.144,
      "chainMinTargets": 5,
      "chainMaxTargets": 20,
      "chainForks": 4,
      "chainBranches": 5,
      "backlashChance": 0.15,
      "backlashKnock": 1.8288,
      "blindDuration": 6,
      "stormDropTimes": [
        1,
        2,
        3
      ],
      "stormCcDuration": 6
    },
    "brandakar": {
      "tap": 0.5,
      "fireballTime": 2,
      "meteorCap": 5,
      "fireboltDamage": 12,
      "fireboltRange": 27.432,
      "fireballDamageMin": 6,
      "fireballDamageMax": 35,
      "fireballBlastMin": 0.9144,
      "fireballBlastMax": 2.286,
      "fireballRange": 27.432,
      "meteorDamageMin": 30,
      "meteorDamageMax": 75,
      "meteorRange": 36.576,
      "igniteTickDamage": 6,
      "igniteTickInterval": 2,
      "igniteFireboltDuration": 6,
      "igniteFireballDuration": 12,
      "igniteMeteorDuration": 24,
      "combustRange": 45.72,
      "combustCooldown": 45
    },
    "vattronach": {
      "iceLanceDamage": 10,
      "iceLanceRange": 27.432,
      "coneDamageMin": 5,
      "coneDamageMax": 25,
      "novaDamageMin": 20,
      "novaDamageMax": 40,
      "coneRange": 10
    },
    "poison": {
      "range": 27.432,
      "duration": 18,
      "cooldown": 15,
      "tickDamage": 6,
      "tickInterval": 3,
      "sporeHeal": 24,
      "sporeBlast": 7.3152
    },
    "npc": {
      "meleeDamage": 18,
      "meleeCooldown": 1.35,
      "hostileMaxHp": 500,
      "friendlyMaxHp": 100,
      "dummyMaxHp": 500,
      "dummyOocIdle": 6,
      "dummyOocFullBar": 30,
      "respawnSec": 30
    },
    "hits": {
      "brandakar:firebolt": {
        "damage": 12,
        "range": 27.432
      },
      "brandakar:fireball": {
        "damageMin": 6,
        "damageMax": 35,
        "range": 27.432
      },
      "brandakar:meteor": {
        "damageMin": 30,
        "damageMax": 75,
        "range": 36.576
      },
      "brandakar:ignite": {
        "damage": 6,
        "range": 45.72,
        "tickInterval": 2
      },
      "combust:hit": {
        "damageMin": 6,
        "damageMax": 72,
        "range": 45.72
      },
      "vattronach:iceLance": {
        "damage": 10,
        "range": 27.432
      },
      "vattronach:cone": {
        "damageMin": 5,
        "damageMax": 25,
        "range": 10
      },
      "vattronach:nova": {
        "damageMin": 20,
        "damageMax": 40,
        "range": 10
      },
      "luftdraka:bolt": {
        "damage": 5.5,
        "range": 27.432
      },
      "luftdraka:chain": {
        "damage": 35,
        "range": 27.432
      },
      "luftdraka:storm": {
        "damage": 65,
        "range": 27.432
      },
      "staticDischarge:hit": {
        "damage": 22,
        "range": 4.572
      },
      "unleashElements:tick": {
        "damage": 1,
        "range": 12.8016,
        "tickInterval": 2
      },
      "poison:tick": {
        "damage": 6,
        "range": 27.432,
        "tickInterval": 3
      },
      "poison:blast": {
        "damage": 6,
        "range": 27.432
      },
      "geolocation:burst": {
        "damage": 14,
        "range": 27.432
      },
      "geolocation:mist": {
        "damage": 8,
        "range": 27.432,
        "tickInterval": 3
      },
      "twinFlames:hit": {
        "damage": 60,
        "range": 27.432
      },
      "char:tick": {
        "damage": 8,
        "range": 13.716,
        "tickInterval": 0.75
      },
      "decimate:blast": {
        "damage": 48,
        "range": 7.3152
      },
      "decimate:flare": {
        "damage": 85,
        "range": 21.9456
      },
      "throwSpear:hit": {
        "damage": 32,
        "range": 27.432
      },
      "throwSpear:pierce": {
        "damage": 70,
        "range": 27.432
      },
      "repel:pulse": {
        "damageMin": 25,
        "damageMax": 65,
        "range": 27.432
      },
      "alignment:sol": {
        "damage": 16,
        "range": 10.9728
      },
      "alignment:warn": {
        "damage": 8,
        "range": 10.9728
      },
      "kick:hit": {
        "damage": 20,
        "range": 4.572
      },
      "sever:hit": {
        "damage": 65,
        "range": 6.858
      },
      "sever:dot": {
        "damage": 10,
        "range": 6.858,
        "tickInterval": 1.5
      },
      "obliterate:hit": {
        "damageMin": 10,
        "damageMax": 175,
        "range": 6.858
      },
      "phaseStep:strike": {
        "damage": 25,
        "range": 27.432
      },
      "daggerfall:hit": {
        "damage": 44,
        "range": 16.4592
      },
      "backstab:hit": {
        "damage": 60,
        "range": 6.858
      },
      "viciousStrikes:hit": {
        "damage": 40,
        "range": 6.858
      },
      "bladeFlurry:hit": {
        "damage": 5,
        "range": 22.86
      },
      "bladeDance:hit": {
        "damage": 25,
        "range": 12.8016
      },
      "charge:hit": {
        "damageMin": 25,
        "damageMax": 65,
        "range": 27.432
      },
      "whirlwind:hit": {
        "damage": 22,
        "range": 7.3152
      },
      "shockwave:hit": {
        "damageMin": 16,
        "damageMax": 28,
        "range": 13.716
      },
      "shieldBash:hit": {
        "damage": 18,
        "range": 4.572
      },
      "rendingStrike:tap": {
        "damage": 18,
        "range": 4.572
      },
      "rendingStrike:cone": {
        "damageMin": 16,
        "damageMax": 24,
        "range": 7.3152
      },
      "rendingStrike:ww": {
        "damage": 12,
        "range": 7.3152,
        "tickInterval": 0.45
      },
      "cleave:tap": {
        "damage": 12,
        "range": 6.858
      },
      "cleave:cone": {
        "damageMin": 14,
        "damageMax": 22,
        "range": 7.3152
      },
      "cleave:sweep": {
        "damageMin": 24,
        "damageMax": 40,
        "range": 7.3152
      },
      "lightfall:hit": {
        "damage": 29,
        "range": 32.004
      },
      "channelPain:tick": {
        "damage": 25,
        "range": 21.9456,
        "tickInterval": 1
      },
      "damnation:hit": {
        "damage": 8,
        "range": 45.72
      },
      "detonateWard:hit": {
        "damage": 40,
        "range": 27.432
      },
      "phaseSickness:tick": {
        "damage": 8,
        "range": 27.432,
        "tickInterval": 2
      },
      "coalescence:tick": {
        "damage": 25,
        "range": 13.716,
        "tickInterval": 0.85
      },
      "phaseBolt:blast": {
        "damage": 35,
        "range": 27.432
      },
      "phaseBolt:hit": {
        "damage": 50,
        "range": 27.432
      },
      "phaseBolt:volley": {
        "damage": 75,
        "range": 27.432
      },
      "phaseBolt:splash": {
        "range": 2.7432,
        "aoeRadius": 2.7432
      },
      "summonSpawn:bolt": {
        "damage": 12,
        "range": 18.288
      },
      "summonBeast:hit": {
        "damage": 75,
        "range": 3.2004
      },
      "summonBeast:cleave": {
        "damage": 28,
        "range": 4.572
      },
      "miasma:confusion": {
        "damage": 18,
        "range": 22.86
      },
      "shootArrows:arrow": {
        "damage": 14,
        "range": 27.432
      },
      "shootArrows:pierce": {
        "damage": 12,
        "range": 27.432
      },
      "shootArrows:volley": {
        "damage": 16,
        "range": 27.432
      },
      "maul:hit": {
        "damage": 75,
        "range": 7.3152
      },
      "lunge:hit": {
        "damage": 45,
        "range": 36.576
      },
      "swipe:hit": {
        "damage": 7,
        "range": 4.572
      },
      "spearStrike:hit": {
        "damage": 25,
        "range": 4.572
      },
      "spearDive:hit": {
        "damage": 28,
        "range": 18.288
      },
      "attackPatternDelta:hit": {
        "damage": 30,
        "range": 9.144
      },
      "attackPatternOmega:hit": {
        "damage": 150,
        "range": 27.432
      },
      "sprayNPray:hit": {
        "damage": 15,
        "range": 13.716
      },
      "fanTheHammer:hit": {
        "damage": 15,
        "range": 10.9728
      },
      "doubleTap:hit": {
        "damage": 70,
        "range": 13.716
      },
      "spin2Win:hit": {
        "damage": 15,
        "range": 10.9728
      },
      "n00bTube:hit": {
        "damage": 60,
        "range": 7.3152
      },
      "needleDrop:hit": {
        "damage": 120,
        "range": 36.576
      },
      "lockNLoad:hit": {
        "damage": 45,
        "range": 27.432
      },
      "alphaOmega:hit": {
        "damage": 15,
        "range": 13.716
      },
      "boomstick:hit": {
        "damage": 40,
        "range": 18.288
      },
      "turret:hit": {
        "damage": 25,
        "range": 13.716,
        "tickInterval": 1.5
      },
      "sawtellite:hit": {
        "damage": 22,
        "range": 27.432
      },
      "mines:proxy": {
        "damage": 75,
        "range": 7.3152
      },
      "mines:noxiumBurst": {
        "damage": 16,
        "range": 7.3152
      },
      "mines:noxiumTick": {
        "damage": 35,
        "range": 7.3152,
        "tickInterval": 1
      },
      "drones:hit": {
        "damage": 15,
        "range": 13.716,
        "tickInterval": 1
      },
      "npc:melee": {
        "damage": 18,
        "range": 1.55
      },
      "npc:firebolt": {
        "damage": 12,
        "range": 27.432
      },
      "npc:iceLance": {
        "damage": 10,
        "range": 27.432
      },
      "npc:fireball": {
        "damageMin": 6,
        "damageMax": 35,
        "range": 27.432
      },
      "npc:boomstick": {
        "damage": 40,
        "range": 18.288
      },
      "npc:turret": {
        "damage": 25,
        "range": 13.716
      },
      "npc:drone": {
        "damage": 15,
        "range": 13.716
      },
      "npc:sawtellite": {
        "damage": 22,
        "range": 27.432
      },
      "npc:mine": {
        "damage": 75,
        "range": 7.3152
      },
      "npc:noxium": {
        "damage": 35,
        "range": 7.3152
      }
    }
  }
}
