{
 "note": "Generated by scripts/gen-progression.mjs. Proposed tuning — validate in playtests (see docs/design/LEVELING.md).",
 "levelCap": 40,
 "futureLevelCap": 100,
 "totalEffectiveHoursTo40": 175,
 "floorDaysFor247": 7,
 "efficiencies": {
  "manual": 1,
  "party": 1.15,
  "onlineAuto": 0.6,
  "offlineAuto": 0.35
 },
 "paceRules": {
  "offlineAutoFromLevel": 30,
  "offlineAutoMaxH": 4,
  "contracts": {
   "fromLevel": 12,
   "perDay": 3,
   "levelShareEach": 0.05
  },
  "rested": {
   "shareOfLevelPer8hOffline": 0.05,
   "maxLevels": 1.5,
   "killShare": 0.6
  },
  "dailySoftCap": {
   "effectiveHours": 18,
   "multiplierAfter": 0.5
  }
 },
 "skillPickLevels": [
  1,
  3,
  6,
  10,
  15,
  20,
  27,
  34
 ],
 "skillPicksAt40": 8,
 "atlasPointsAt40": 45,
 "xpFormula": "xpToNext(L) = minutesToNext(L) × 7 kills/min × monsterXp(L); monsterXp(L) = round(18 × 1.115^(L−1))",
 "xpSourceMix": [
  {
   "band": "1–10",
   "mainQuest": 0.6,
   "sideAndDaily": 0.15,
   "hunting": 0.25
  },
  {
   "band": "10–20",
   "mainQuest": 0.5,
   "sideAndDaily": 0.2,
   "hunting": 0.3
  },
  {
   "band": "20–30",
   "mainQuest": 0.4,
   "sideAndDaily": 0.2,
   "hunting": 0.3,
   "dungeonAndEvents": 0.1
  },
  {
   "band": "30–40",
   "mainQuest": 0.3,
   "sideAndDaily": 0.2,
   "hunting": 0.35,
   "dungeonAndEvents": 0.15
  }
 ],
 "profiles": [
  {
   "id": "theoretical",
   "label": "Theoretical: perfect party play 24 h/day",
   "manualH": 24,
   "manualEff": 1.15,
   "onlineAutoH": 0,
   "offlineAutoH": 0,
   "note": "Not humanly possible; bounded by the daily soft cap.",
   "activeHoursPerDay": 24,
   "daysTo40": 7.3
  },
  {
   "id": "always_on_max",
   "label": "24/7 online, fastest human",
   "manualH": 14,
   "manualEff": 1.15,
   "onlineAutoH": 10,
   "offlineAutoH": 0,
   "note": "14 h party play + 10 h online Auto-Hunt while asleep, every day.",
   "activeHoursPerDay": 14,
   "daysTo40": 8.3
  },
  {
   "id": "always_on_auto",
   "label": "24/7 online, Auto-Hunt only",
   "manualH": 0,
   "manualEff": 1,
   "onlineAutoH": 24,
   "offlineAutoH": 0,
   "note": "Character left hunting around the clock.",
   "activeHoursPerDay": 0,
   "daysTo40": 11.3
  },
  {
   "id": "dedicated",
   "label": "Dedicated",
   "manualH": 4,
   "manualEff": 1,
   "onlineAutoH": 6,
   "offlineAutoH": 4,
   "note": "4 h play, 6 h online auto, offline auto at 30+.",
   "activeHoursPerDay": 4,
   "daysTo40": 17.6
  },
  {
   "id": "typical",
   "label": "Typical (design target)",
   "manualH": 1.5,
   "manualEff": 1,
   "onlineAutoH": 2,
   "offlineAutoH": 4,
   "note": "1.5 h play, 2 h online auto, offline auto at 30+.",
   "activeHoursPerDay": 1.5,
   "daysTo40": 34
  },
  {
   "id": "casual",
   "label": "Casual",
   "manualH": 0.75,
   "manualEff": 1,
   "onlineAutoH": 1,
   "offlineAutoH": 4,
   "note": "45 min play, 1 h online auto.",
   "activeHoursPerDay": 0.75,
   "daysTo40": 48.1
  }
 ],
 "levels": [
  {
   "level": 1,
   "minutesToNext": 10,
   "xpToNext": 1260,
   "monsterXp": 18,
   "cumulativeHoursAtLevelStart": 0,
   "atlasPointsTotal": 0,
   "skillPicksTotal": 1,
   "questAtlasPoint": null,
   "unlocks": [
    "Movement, camera, M1 basic chain",
    "Skill pick #1 (starter weapon skill)",
    "Starter weapon mastery from origin"
   ]
  },
  {
   "level": 2,
   "minutesToNext": 13,
   "xpToNext": 1820,
   "monsterXp": 20,
   "cumulativeHoursAtLevelStart": 0.17,
   "atlasPointsTotal": 1,
   "skillPicksTotal": 1,
   "questAtlasPoint": null,
   "unlocks": [
    "Movement gem on M2 (choose 1 of 6)",
    "Belt T5 with 1 socket"
   ]
  },
  {
   "level": 3,
   "minutesToNext": 17,
   "xpToNext": 2618,
   "monsterXp": 22,
   "cumulativeHoursAtLevelStart": 0.38,
   "atlasPointsTotal": 2,
   "skillPicksTotal": 2,
   "questAtlasPoint": null,
   "unlocks": [
    "Skill pick #2",
    "Hotbar Q/E"
   ]
  },
  {
   "level": 4,
   "minutesToNext": 21,
   "xpToNext": 3675,
   "monsterXp": 25,
   "cumulativeHoursAtLevelStart": 0.67,
   "atlasPointsTotal": 3,
   "skillPicksTotal": 2,
   "questAtlasPoint": null,
   "unlocks": [
    "Loot companion (rabbit / boar / fox / cat)"
   ]
  },
  {
   "level": 5,
   "minutesToNext": 25,
   "xpToNext": 4900,
   "monsterXp": 28,
   "cumulativeHoursAtLevelStart": 1.02,
   "atlasPointsTotal": 4,
   "skillPicksTotal": 2,
   "questAtlasPoint": null,
   "unlocks": [
    "Auto-Hunt (online) + potion quick slots 1–8",
    "Auto-Quest (main story)"
   ]
  },
  {
   "level": 6,
   "minutesToNext": 30,
   "xpToNext": 6510,
   "monsterXp": 31,
   "cumulativeHoursAtLevelStart": 1.43,
   "atlasPointsTotal": 6,
   "skillPicksTotal": 3,
   "questAtlasPoint": "Q1.07 Forged by Choice",
   "unlocks": [
    "Skill pick #3",
    "Atlas quest point",
    "Salvage-kit assembly at blacksmith"
   ]
  },
  {
   "level": 7,
   "minutesToNext": 36,
   "xpToNext": 8820,
   "monsterXp": 35,
   "cumulativeHoursAtLevelStart": 1.93,
   "atlasPointsTotal": 7,
   "skillPicksTotal": 3,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 8,
   "minutesToNext": 41,
   "xpToNext": 11193,
   "monsterXp": 39,
   "cumulativeHoursAtLevelStart": 2.53,
   "atlasPointsTotal": 8,
   "skillPicksTotal": 3,
   "questAtlasPoint": null,
   "unlocks": [
    "Party (4 players) + channel switching"
   ]
  },
  {
   "level": 9,
   "minutesToNext": 47,
   "xpToNext": 14147,
   "monsterXp": 43,
   "cumulativeHoursAtLevelStart": 3.22,
   "atlasPointsTotal": 9,
   "skillPicksTotal": 3,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 10,
   "minutesToNext": 62,
   "xpToNext": 20832,
   "monsterXp": 48,
   "cumulativeHoursAtLevelStart": 4,
   "atlasPointsTotal": 10,
   "skillPicksTotal": 4,
   "questAtlasPoint": null,
   "unlocks": [
    "Skill pick #4",
    "First mount: Reedback Strider (quest) + waypoints",
    "Pole Codex buffs (level 10 tier)"
   ]
  },
  {
   "level": 11,
   "minutesToNext": 70,
   "xpToNext": 25970,
   "monsterXp": 53,
   "cumulativeHoursAtLevelStart": 5.03,
   "atlasPointsTotal": 11,
   "skillPicksTotal": 4,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 12,
   "minutesToNext": 78,
   "xpToNext": 32760,
   "monsterXp": 60,
   "cumulativeHoursAtLevelStart": 6.2,
   "atlasPointsTotal": 12,
   "skillPicksTotal": 4,
   "questAtlasPoint": null,
   "unlocks": [
    "Stash (4 tabs) + bank",
    "Player stalls (browse)"
   ]
  },
  {
   "level": 13,
   "minutesToNext": 86,
   "xpToNext": 39732,
   "monsterXp": 66,
   "cumulativeHoursAtLevelStart": 7.5,
   "atlasPointsTotal": 13,
   "skillPicksTotal": 4,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 14,
   "minutesToNext": 94,
   "xpToNext": 48692,
   "monsterXp": 74,
   "cumulativeHoursAtLevelStart": 8.93,
   "atlasPointsTotal": 14,
   "skillPicksTotal": 4,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 15,
   "minutesToNext": 100,
   "xpToNext": 58100,
   "monsterXp": 83,
   "cumulativeHoursAtLevelStart": 10.5,
   "atlasPointsTotal": 16,
   "skillPicksTotal": 5,
   "questAtlasPoint": "Q2.06 Unclog the Locks",
   "unlocks": [
    "Skill pick #5",
    "T4 belt (1–2 sockets)",
    "Facet choice on rank 2 skills",
    "Duels (1v1, consensual)"
   ]
  },
  {
   "level": 16,
   "minutesToNext": 108,
   "xpToNext": 69552,
   "monsterXp": 92,
   "cumulativeHoursAtLevelStart": 12.17,
   "atlasPointsTotal": 17,
   "skillPicksTotal": 5,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 17,
   "minutesToNext": 114,
   "xpToNext": 82194,
   "monsterXp": 103,
   "cumulativeHoursAtLevelStart": 13.97,
   "atlasPointsTotal": 18,
   "skillPicksTotal": 5,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 18,
   "minutesToNext": 121,
   "xpToNext": 97405,
   "monsterXp": 115,
   "cumulativeHoursAtLevelStart": 15.87,
   "atlasPointsTotal": 19,
   "skillPicksTotal": 5,
   "questAtlasPoint": null,
   "unlocks": [
    "Refinement +1…+4 (safe band)"
   ]
  },
  {
   "level": 19,
   "minutesToNext": 127,
   "xpToNext": 113792,
   "monsterXp": 128,
   "cumulativeHoursAtLevelStart": 17.88,
   "atlasPointsTotal": 20,
   "skillPicksTotal": 5,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 20,
   "minutesToNext": 230,
   "xpToNext": 228620,
   "monsterXp": 142,
   "cumulativeHoursAtLevelStart": 20,
   "atlasPointsTotal": 21,
   "skillPicksTotal": 6,
   "questAtlasPoint": null,
   "unlocks": [
    "Skill pick #6",
    "Dungeon: Kiln Depths (8 h reward)",
    "Paid respec begins (free before 20)",
    "Mount: Duneplate Carrier (Stablemaster)"
   ]
  },
  {
   "level": 21,
   "minutesToNext": 250,
   "xpToNext": 278250,
   "monsterXp": 159,
   "cumulativeHoursAtLevelStart": 23.83,
   "atlasPointsTotal": 22,
   "skillPicksTotal": 6,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 22,
   "minutesToNext": 270,
   "xpToNext": 334530,
   "monsterXp": 177,
   "cumulativeHoursAtLevelStart": 28,
   "atlasPointsTotal": 23,
   "skillPicksTotal": 6,
   "questAtlasPoint": null,
   "unlocks": [
    "Lantern Convoy event (preview / sign-up)",
    "Open own stall"
   ]
  },
  {
   "level": 23,
   "minutesToNext": 285,
   "xpToNext": 393015,
   "monsterXp": 197,
   "cumulativeHoursAtLevelStart": 32.5,
   "atlasPointsTotal": 24,
   "skillPicksTotal": 6,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 24,
   "minutesToNext": 300,
   "xpToNext": 462000,
   "monsterXp": 220,
   "cumulativeHoursAtLevelStart": 37.25,
   "atlasPointsTotal": 26,
   "skillPicksTotal": 6,
   "questAtlasPoint": "Q3.04 The Quiet Shell",
   "unlocks": []
  },
  {
   "level": 25,
   "minutesToNext": 310,
   "xpToNext": 531650,
   "monsterXp": 245,
   "cumulativeHoursAtLevelStart": 42.25,
   "atlasPointsTotal": 27,
   "skillPicksTotal": 6,
   "questAtlasPoint": null,
   "unlocks": [
    "Elite bounties (daily)"
   ]
  },
  {
   "level": 26,
   "minutesToNext": 320,
   "xpToNext": 613760,
   "monsterXp": 274,
   "cumulativeHoursAtLevelStart": 47.42,
   "atlasPointsTotal": 28,
   "skillPicksTotal": 6,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 27,
   "minutesToNext": 330,
   "xpToNext": 704550,
   "monsterXp": 305,
   "cumulativeHoursAtLevelStart": 52.75,
   "atlasPointsTotal": 29,
   "skillPicksTotal": 7,
   "questAtlasPoint": null,
   "unlocks": [
    "Skill pick #7",
    "Rank 3 facets",
    "Codex finishers unlock"
   ]
  },
  {
   "level": 28,
   "minutesToNext": 345,
   "xpToNext": 821100,
   "monsterXp": 340,
   "cumulativeHoursAtLevelStart": 58.25,
   "atlasPointsTotal": 31,
   "skillPicksTotal": 7,
   "questAtlasPoint": "Q3.09 A Measured Hunt",
   "unlocks": []
  },
  {
   "level": 29,
   "minutesToNext": 360,
   "xpToNext": 955080,
   "monsterXp": 379,
   "cumulativeHoursAtLevelStart": 64,
   "atlasPointsTotal": 32,
   "skillPicksTotal": 7,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 30,
   "minutesToNext": 520,
   "xpToNext": 1539720,
   "monsterXp": 423,
   "cumulativeHoursAtLevelStart": 70,
   "atlasPointsTotal": 33,
   "skillPicksTotal": 7,
   "questAtlasPoint": null,
   "unlocks": [
    "World boss Kharuun (scheduled)",
    "T3 gear (1–3 sockets)",
    "Offline Auto-Hunt (4 h/day, visible actor)",
    "Mount: Emberhorn Aurochs",
    "Sand Arena (duels from 15)"
   ]
  },
  {
   "level": 31,
   "minutesToNext": 550,
   "xpToNext": 1817200,
   "monsterXp": 472,
   "cumulativeHoursAtLevelStart": 78.67,
   "atlasPointsTotal": 34,
   "skillPicksTotal": 7,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 32,
   "minutesToNext": 580,
   "xpToNext": 2135560,
   "monsterXp": 526,
   "cumulativeHoursAtLevelStart": 87.83,
   "atlasPointsTotal": 35,
   "skillPicksTotal": 7,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 33,
   "minutesToNext": 600,
   "xpToNext": 2461200,
   "monsterXp": 586,
   "cumulativeHoursAtLevelStart": 97.5,
   "atlasPointsTotal": 36,
   "skillPicksTotal": 7,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 34,
   "minutesToNext": 620,
   "xpToNext": 2838360,
   "monsterXp": 654,
   "cumulativeHoursAtLevelStart": 107.5,
   "atlasPointsTotal": 37,
   "skillPicksTotal": 8,
   "questAtlasPoint": null,
   "unlocks": [
    "Skill pick #8 (final MVP pick)"
   ]
  },
  {
   "level": 35,
   "minutesToNext": 640,
   "xpToNext": 3265920,
   "monsterXp": 729,
   "cumulativeHoursAtLevelStart": 117.83,
   "atlasPointsTotal": 38,
   "skillPicksTotal": 8,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 36,
   "minutesToNext": 660,
   "xpToNext": 3756060,
   "monsterXp": 813,
   "cumulativeHoursAtLevelStart": 128.5,
   "atlasPointsTotal": 40,
   "skillPicksTotal": 8,
   "questAtlasPoint": "Q4.09 Roots Remember",
   "unlocks": [
    "Refinement +8 auras visible"
   ]
  },
  {
   "level": 37,
   "minutesToNext": 690,
   "xpToNext": 4375980,
   "monsterXp": 906,
   "cumulativeHoursAtLevelStart": 139.5,
   "atlasPointsTotal": 41,
   "skillPicksTotal": 8,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 38,
   "minutesToNext": 710,
   "xpToNext": 5019700,
   "monsterXp": 1010,
   "cumulativeHoursAtLevelStart": 151,
   "atlasPointsTotal": 42,
   "skillPicksTotal": 8,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 39,
   "minutesToNext": 730,
   "xpToNext": 5753860,
   "monsterXp": 1126,
   "cumulativeHoursAtLevelStart": 162.83,
   "atlasPointsTotal": 43,
   "skillPicksTotal": 8,
   "questAtlasPoint": null,
   "unlocks": []
  },
  {
   "level": 40,
   "minutesToNext": 0,
   "xpToNext": 0,
   "monsterXp": 1256,
   "cumulativeHoursAtLevelStart": 175,
   "atlasPointsTotal": 45,
   "skillPicksTotal": 8,
   "questAtlasPoint": "Q5.06 Break the Bellbound Seal",
   "unlocks": [
    "Bellbound Regent (story boss)",
    "Mount: Mirage Drake",
    "Level cap (MVP). Endgame loop: bosses, dungeon, crafting, refinement, convoy, arena"
   ]
  }
 ]
}
