{
  "note": "Default bindings. Every binding is remappable (desktop + gamepad). Mobile layout is drag-to-rearrange with size presets.",
  "camera": {
    "type": "action-ARPG third person (elevated, follow)",
    "pitchDeg": {
      "default": 52,
      "min": 38,
      "max": 62
    },
    "distanceM": {
      "presets": [
        9,
        12.5,
        16
      ],
      "default": 12.5
    },
    "fovDeg": 42,
    "yaw": "Follows movement softly; hold Middle Mouse (or Ctrl+Right drag / two-finger drag) to orbit; Home resets.",
    "collision": "Sphere-cast pull-in; never clips terrain/walls; occluders between camera and player fade with a dither mask.",
    "views": {
      "tactical": {
        "label": "Tactical (ARPG)",
        "distanceM": [
          9,
          16
        ],
        "pitchDeg": [
          38,
          62
        ],
        "default": {
          "distanceM": 12.5,
          "pitchDeg": 52
        },
        "yaw": "Fixed north-up by default; follows movement softly; hold Mouse3 / Ctrl+Right drag to orbit; Home resets.",
        "aim": "Cursor on the ground (skills aim at the cursor; attack magnetism 60° / 5 m).",
        "reference": "Silkroad / Path of Exile-style zoomed-out overview"
      },
      "close": {
        "label": "Close (over the shoulder)",
        "reference": "Dynasty Warriors / Metal Gear-style third person",
        "distanceM": 3.6,
        "pitchDeg": 13,
        "shoulderOffsetM": 0.45,
        "targetHeightM": 1.55,
        "yaw": "Stays behind the character and swings to its facing when moving (slower during attacks); right-drag orbits and recentres after 1.5 s.",
        "aim": "Where the character faces / the camera looks (centre reticle); attack magnetism widens to 75° / 6 m so melee still connects.",
        "fovDeg": 55
      }
    },
    "zoom": "Mouse wheel / pinch zooms continuously from Tactical to Close; V (gamepad R3) toggles between them. Telegraphs, nameplates and the HUD are the same in both views.",
    "followRule": "Console style: the camera always follows the character; WASD is relative to the camera.",
    "viewToggle": "R3 toggles close ↔ tactical only; V on desktop; camera view control on touch. It does not also recenter or lock on.",
    "optionalLockOn": {
      "status": "documented_not_implemented",
      "enabledByDefault": false,
      "scope": "close-view boss/elite framing",
      "binding": "separate remappable command; select during input UX validation, never overload R3",
      "behavior": "explicit acquire/release and target switching; release on death, invalid target, range or sustained occlusion; preserve movement freedom and telegraphs"
    }
  },
  "desktop": [
    {
      "action": "move",
      "keys": [
        "W",
        "A",
        "S",
        "D"
      ],
      "group": "movement",
      "note": "Camera-relative 8-direction movement; the camera follows the character like a console game (tactical view: soft yaw follow; close view: stays behind the shoulder). Releasing stops within 0.08 s (no ice-skating). Any WASD input cancels a click-to-walk."
    },
    {
      "action": "primary_attack",
      "keys": [
        "Mouse1"
      ],
      "group": "combat",
      "note": "Mouse1 on a monster (or with a target locked) runs the chain list: up to 8 chain slots holding attack skills only. Each press performs the next ready chain skill in slot order; a basic hit fills the gap when none is ready. A finisher in the chain fires on the next step whenever its condition is true on the target and is skipped otherwise (Aion 2 / console style). Mouse1 on empty ground (no monster under the cursor) walks there; hold to keep walking toward the cursor. Auto-Hunt uses the same list."
    },
    {
      "action": "attack_in_place",
      "keys": [
        "Shift+Mouse1"
      ],
      "group": "combat",
      "note": "Attack without moving or magnet-stepping (PoE \"attack in place\"). Also works with skills: Shift+Q etc. The modifier is rebindable (Shift by default; Ctrl, Alt or Space in Options → Controls)."
    },
    {
      "action": "movement_skill",
      "keys": [
        "Mouse2"
      ],
      "group": "combat",
      "note": "Always the movement skill from the belt gem (Cairn Vault, Reed Rush, Silk Roll, Anchor Pull, Mirror Exchange, Veilstride) toward the cursor. Not assignable to anything else. ADR-027: when valid, takes priority over own attack windup, active and recovery, including signatures/finishers; invalid requests do not cancel or buffer. Preparation contract and proposed tuning: development-standards.json."
    },
    {
      "action": "slot_q",
      "keys": [
        "Q"
      ],
      "group": "skills",
      "note": "Quick skill slot: any learned skill or buff (attack, mobility, buff, aura toggle, summon)."
    },
    {
      "action": "slot_e",
      "keys": [
        "E"
      ],
      "group": "skills",
      "note": "Quick skill slot: any learned skill or buff (attack, mobility, buff, aura toggle, summon)."
    },
    {
      "action": "slot_z",
      "keys": [
        "Z"
      ],
      "group": "skills",
      "note": "Quick skill slot: any learned skill or buff (attack, mobility, buff, aura toggle, summon)."
    },
    {
      "action": "slot_x",
      "keys": [
        "X"
      ],
      "group": "skills",
      "note": "Quick skill slot: any learned skill or buff (attack, mobility, buff, aura toggle, summon)."
    },
    {
      "action": "slot_c",
      "keys": [
        "C"
      ],
      "group": "skills",
      "note": "Quick skill slot: any learned skill or buff (attack, mobility, buff, aura toggle, summon)."
    },
    {
      "action": "quick_a_1_8",
      "keys": [
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8"
      ],
      "group": "quick slots",
      "note": "Potions, elixirs, scrolls, food and buffs (buff skills may also live here)."
    },
    {
      "action": "quick_b_1_8",
      "keys": [
        "F1",
        "F2",
        "F3",
        "F4",
        "F5",
        "F6",
        "F7",
        "F8"
      ],
      "group": "quick slots",
      "note": "Second quick bar: teleport/return scrolls, speed scrolls, event items, more buffs."
    },
    {
      "action": "interact",
      "keys": [
        "F"
      ],
      "group": "world",
      "note": "Talk, loot, gather, open."
    },
    {
      "action": "target_next",
      "keys": [
        "Tab"
      ],
      "group": "combat",
      "note": "Cycle hostile targets by screen-centre distance; Shift+Tab previous; Esc clears."
    },
    {
      "action": "auto_hunt",
      "keys": [
        "G"
      ],
      "group": "automation",
      "note": "Toggle Auto-Hunt using the active preset."
    },
    {
      "action": "auto_quest",
      "keys": [
        "H"
      ],
      "group": "automation",
      "note": "Toggle Auto-Quest (follow tracked main quest)."
    },
    {
      "action": "mount",
      "keys": [
        "T"
      ],
      "group": "world",
      "note": "Summon / dismount caravan mount (out of combat)."
    },
    {
      "action": "show_labels",
      "keys": [
        "Alt"
      ],
      "group": "world",
      "note": "Hold to show ground item labels."
    },
    {
      "action": "inventory",
      "keys": [
        "I"
      ],
      "group": "windows"
    },
    {
      "action": "character",
      "keys": [
        "U"
      ],
      "group": "windows"
    },
    {
      "action": "codex",
      "keys": [
        "K"
      ],
      "group": "windows",
      "note": "Skill Codex: learn / rank skills, pick facets, set Smart Chain."
    },
    {
      "action": "atlas",
      "keys": [
        "P"
      ],
      "group": "windows",
      "note": "Passive Atlas (skill tree)."
    },
    {
      "action": "map",
      "keys": [
        "M"
      ],
      "group": "windows"
    },
    {
      "action": "quests",
      "keys": [
        "J"
      ],
      "group": "windows"
    },
    {
      "action": "social",
      "keys": [
        "O"
      ],
      "group": "windows",
      "note": "Party, friends, channel."
    },
    {
      "action": "chat",
      "keys": [
        "Enter"
      ],
      "group": "windows"
    },
    {
      "action": "menu",
      "keys": [
        "Esc"
      ],
      "group": "windows"
    },
    {
      "action": "zoom",
      "keys": [
        "MouseWheel"
      ],
      "group": "camera"
    },
    {
      "action": "orbit_camera",
      "keys": [
        "Mouse3 drag"
      ],
      "group": "camera"
    },
    {
      "action": "camera_view",
      "keys": [
        "V"
      ],
      "group": "camera",
      "note": "Toggle Tactical ↔ Close view (the mouse wheel zooms smoothly between them)."
    }
  ],
  "gamepad": [
    {
      "action": "move",
      "keys": [
        "Left stick"
      ]
    },
    {
      "action": "aim / camera",
      "keys": [
        "Right stick"
      ],
      "note": "Aims ground-targeted skills; flick to change target. R3 toggles camera view only. Recenter uses automatic follow or a separate remappable command."
    },
    {
      "action": "primary_attack",
      "keys": [
        "A / Cross"
      ],
      "note": "Hold or tap to run the chain list."
    },
    {
      "action": "movement_skill",
      "keys": [
        "B / Circle"
      ]
    },
    {
      "action": "slot_1",
      "keys": [
        "X / Square"
      ]
    },
    {
      "action": "slot_2",
      "keys": [
        "Y / Triangle"
      ]
    },
    {
      "action": "slot_3",
      "keys": [
        "RB / R1"
      ]
    },
    {
      "action": "slot_4",
      "keys": [
        "RT / R2"
      ]
    },
    {
      "action": "slot_5",
      "keys": [
        "LB / L1"
      ]
    },
    {
      "action": "attack_in_place",
      "keys": [
        "LT / L2 (hold)"
      ],
      "note": "Plants the character; skills fire in place."
    },
    {
      "action": "quick slots",
      "keys": [
        "D-pad",
        "LT + D-pad"
      ],
      "note": "8 quick slots on a radial."
    },
    {
      "action": "auto_hunt",
      "keys": [
        "View + A"
      ]
    },
    {
      "action": "menu",
      "keys": [
        "Menu / Options"
      ]
    },
    {
      "action": "map",
      "keys": [
        "View / Share"
      ]
    },
    {
      "action": "camera_view",
      "keys": [
        "R3"
      ],
      "note": "Toggle close third-person ↔ zoomed-out tactical view; R3 has no recenter or lock-on action."
    }
  ],
  "mobile": {
    "layout": "Landscape. Left: floating virtual joystick (appears where the thumb lands in the left 45% of screen). Right: large Attack button (Mouse1 chain list, hold = continuous), 5 quick skill buttons on an arc (Q E Z X C; skills or buffs), movement skill button (M2), 4 quick slots (expand to 8), Auto toggle, Target-switch and Lock buttons. Top: portrait + HP/MP, buffs, target frame, minimap, quest tracker. Bottom: EXP bar.",
    "gestures": [
      "Drag right half (not on a button) to orbit camera",
      "Pinch to zoom",
      "Tap enemy to target",
      "Drag a skill button to aim (cancel by dragging back to centre)"
    ],
    "editMode": "HUD Edit: drag every button, scale 80–130%, opacity 40–100%, left-handed mirror preset."
  },
  "settings": [
    {
      "id": "smart_chain",
      "label": "Mouse1 chain",
      "default": true,
      "options": [
        "off",
        "on"
      ],
      "note": "On: Mouse1 runs the chain list. Off: Mouse1 is the basic 3-hit chain only."
    },
    {
      "id": "chain_slots",
      "label": "Chain slots in use",
      "default": 4,
      "options": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8
      ],
      "note": "How many of the 8 chain slots Mouse1 cycles through. Only attack skills can be placed in a chain slot."
    },
    {
      "id": "finisher_in_chain",
      "label": "Finisher jumps the chain",
      "default": true,
      "options": [
        false,
        true
      ],
      "note": "When on, a finisher in the chain fires on the next Mouse1 press as soon as its condition is met. Off: it waits for its slot."
    },
    {
      "id": "attack_magnetism",
      "label": "Attack magnetism",
      "default": "medium",
      "options": [
        "off",
        "low",
        "medium",
        "high"
      ],
      "note": "Rotate up to 60° toward a target and slide up to 1.5 m (melee) to connect."
    },
    {
      "id": "target_priority",
      "label": "Auto-target priority",
      "default": "nearest",
      "options": [
        "nearest",
        "lowest_hp",
        "elite_first",
        "quest_first"
      ]
    },
    {
      "id": "click_to_move",
      "label": "Mouse1 on ground moves (PoE style)",
      "default": false,
      "options": [
        false,
        true
      ]
    },
    {
      "id": "camera_shake",
      "label": "Camera shake",
      "default": 70,
      "options": "0–100%",
      "note": "Owner 2026-10-06 (ADR-028): default 70%. The close view uses 60% of this value (CAM-01)."
    },
    {
      "id": "reduce_camera_motion",
      "label": "Reduce camera motion",
      "default": false,
      "options": [
        false,
        true
      ],
      "note": "No directional kick, no field-of-view punch, no look-ahead; shake at most 30% (CAM-08)."
    },
    {
      "id": "hitstop",
      "label": "Hit-stop (local)",
      "default": true,
      "options": [
        false,
        true
      ]
    },
    {
      "id": "damage_numbers",
      "label": "Damage numbers",
      "default": "full",
      "options": [
        "full",
        "compact",
        "crits_only",
        "off"
      ]
    },
    {
      "id": "others_damage_numbers",
      "label": "Other players' damage numbers",
      "default": false,
      "options": [
        false,
        true
      ],
      "note": "Owner 2026-10-06 (ADR-028): hidden by default."
    },
    {
      "id": "others_vfx",
      "label": "Other players' effects",
      "default": "reduced",
      "options": [
        "full",
        "reduced",
        "minimal"
      ],
      "note": "Own effects, boss telegraphs and party heals are never reduced."
    },
    {
      "id": "max_visible_players",
      "label": "Max visible players",
      "default": 60,
      "options": [
        25,
        40,
        60,
        100,
        150
      ]
    },
    {
      "id": "flash_reduction",
      "label": "Reduce flashes",
      "default": false,
      "options": [
        false,
        true
      ]
    },
    {
      "id": "colorblind",
      "label": "Color-blind palette",
      "default": "none",
      "options": [
        "none",
        "deuteranopia",
        "protanopia",
        "tritanopia"
      ]
    },
    {
      "id": "haptics",
      "label": "Haptics (mobile/gamepad)",
      "default": true,
      "options": [
        false,
        true
      ]
    },
    {
      "id": "alt_affix_tiers",
      "label": "Hold Alt to show affix tiers",
      "default": true,
      "options": [
        false,
        true
      ],
      "note": "Item popups show tiers (T5…T3) and ranges only while Alt is held."
    }
  ],
  "clickToTravel": {
    "proposed": true,
    "note": "Click (or tap) a point on the world map (M) or the minimap and the character walks there by itself, mounting first when the trip is long. Same movement command path as WASD; the server owns the path and validates every step.",
    "triggers": [
      {
        "platform": "desktop",
        "input": "Mouse1 on the map (M) or the minimap",
        "queue": "Shift + Mouse1 adds a stop (up to 5)"
      },
      {
        "platform": "gamepad",
        "input": "A on the map cursor",
        "queue": "X adds a stop"
      },
      {
        "platform": "mobile",
        "input": "Tap the map, then the \"Travel here\" button (prevents accidental trips)",
        "queue": "Long-press adds a stop"
      }
    ],
    "accessible": [
      "The point is on the walkable navmesh of the current region (not deep water, cliffs, building interiors or closed gates).",
      "A path exists within maxPathM; otherwise the target snaps to the nearest reachable point within snapRadiusM.",
      "If nothing is reachable within snapRadiusM: a red \"Can't reach there\" marker, and the character does not move.",
      "Areas above your level are allowed but marked \"Dangerous: L<min>–<max>\" on the destination pin.",
      "Not available inside dungeons, boss arenas during a fight, or while rooted, stunned, dead or trading."
    ],
    "snapRadiusM": 25,
    "maxPathM": 8192,
    "arriveRadiusM": 1.5,
    "autoMount": {
      "minPathM": 40,
      "requires": [
        "owns a mount (level 10+, quest Q1.11)",
        "out of combat",
        "the area allows mounts (towns, fields; not dungeons or arenas)"
      ],
      "mountTimeS": 1,
      "speedRule": "Uses the fastest owned mount (mounts.json speed); on foot 6.2 m/s.",
      "onArrive": "Stay mounted, except when the destination is an NPC, chest, portal or gathering node: dismount and interact.",
      "setting": "Auto-mount for map travel (default ON)"
    },
    "waypointOffer": {
      "minSavingS": 60,
      "rule": "If a discovered waypoint saves more than 60 s, the pin shows \"Use waypoint (saves N s)\". Never automatic for manual travel (Auto-Quest decides on its own)."
    },
    "cancelOn": [
      "any movement input (WASD, joystick, left stick)",
      "dodge, attack or skill",
      "taking damage: travel stops; mounted players are knocked off unless the mount perk prevents it",
      "Esc / B / the HUD chip"
    ],
    "feedback": [
      "Jade destination pin and dotted ground ribbon (same as Auto-Quest)",
      "Map line with distance and ETA (on foot vs mounted)",
      "HUD chip \"Travelling… 1:12 (Esc to cancel)\"",
      "Red pulse on the pin when the point is not reachable"
    ],
    "server": [
      "Path: navmesh A* + string pulling, recomputed when blocked; other players never block.",
      "Moves are ordinary move intents validated for speed and position; rate limit 1 travel command per 250 ms.",
      "Travel is presentation of the same movement system: no speed bonus, no teleport, no pathing through walls."
    ],
    "maxPathNote": "Long enough to cross the whole 4.1 km region along roads in one command."
  }
}
