{
  "version": "1.2.0",
  "updated": "2026-08-11",
  "host": "https://ui.grudge-studio.com",
  "doc": "/docs/CANONICAL_GAME_UI_SYSTEMS.md",
  "apiDoc": "/docs/UI_API_ARCHITECTURE.md",
  "runtime": "/game-ui-runtime.js",
  "packsIndex": "/game-ui-packs/index.json",
  "uiAssets": "/ui-assets-ssot.js",
  "fontsCss": "/grudge-fonts.css",
  "health": "/api/health",
  "api": {
    "systems": "/api/systems",
    "uiPacks": "/api/ui-packs",
    "craftpixUsage": "/api/craftpix/usage",
    "craftpixManifest": "/api/craftpix/manifest",
    "auth": "/api/auth",
    "characters": "/api/characters",
    "account": "/api/account",
    "ai": "/api/ai",
    "objectstore": "/api/objectstore",
    "cdnProxy": "/api/assets"
  },
  "craftpix": {
    "browser": "/craftpix",
    "swapsJs": "/craftpix-swaps.js",
    "usage": "/data/craftpix-usage.json",
    "manifest": "/craftpix-manifest.json",
    "base": "/assets/craftpix/",
    "renderRules": "pixelated; slot=bg→icon→overlay→cooldown→press; bars=track+fill%"
  },
  "assetRoots": {
    "craftpix": "/assets/craftpix/",
    "craftpixRpgCss": "https://assets.grudge-studio.com/ui/craftpix-rpg/craftpix-rpg-ui.css",
    "cyberpunk": "/assets/cyberpunk/",
    "rpg": "/assets/rpg/",
    "fantasy": "/assets/fantasy/",
    "equipment": "/assets/equipment/",
    "iconsCdn": "https://assets.grudge-studio.com/game-assets/icons/",
    "iconRegistry": "https://assets.grudge-studio.com/game-assets/api/v1/icon-registry.json",
    "iconPathIndex": "https://assets.grudge-studio.com/game-assets/api/v1/icon-path-index.json",
    "objectStore": "https://objectstore.grudge-studio.com/api/v1/",
    "professionBackgrounds": "https://grudgewarlords.com/assets/professions/",
    "fonts": "/grudge-fonts.css"
  },
  "packages2d": {
    "craftpix": {
      "id": "craftpix-ui4",
      "path": "/assets/craftpix/",
      "role": "Warlords / grudge6 fantasy HUD chrome",
      "cdnCss": "https://assets.grudge-studio.com/ui/craftpix-rpg/craftpix-rpg-ui.css",
      "browser": "/craftpix",
      "swapsJs": "/craftpix-swaps.js"
    },
    "cyberpunk": { "id": "cyberpunk-ui", "path": "/assets/cyberpunk/", "role": "Mech / neon" },
    "rpg": { "id": "craftpix-rpg-parts", "path": "/assets/rpg/", "role": "RPG part slices" },
    "fantasy": { "id": "fantasy-frames", "path": "/assets/fantasy/", "role": "Frame kits" },
    "kenneyPixel": { "id": "kenney-pixel-ui", "role": "VoxGrudge only — not Warlords main-panel" }
  },
  "fonts": {
    "warlords": { "display": "Cinzel", "body": "Crimson Text", "css": "/grudge-fonts.css", "source": "fontsource@jsdelivr" },
    "tools": { "display": "Space Grotesk", "body": "Inter", "mono": "JetBrains Mono", "css": "/grudge-fonts.css" }
  },
  "icons": {
    "ssot": "assets.grudge-studio.com game-assets + icon-registry",
    "professions": {
      "miner": "https://assets.grudge-studio.com/game-assets/icons/professions/miner_profession_game_icon.png",
      "forester": "https://assets.grudge-studio.com/game-assets/icons/professions/forester_profession_game_icon.png",
      "engineer": "https://assets.grudge-studio.com/game-assets/icons/professions/engineer_profession_game_icon.png",
      "mystic": "https://assets.grudge-studio.com/game-assets/icons/professions/mystic_profession_game_icon.png",
      "chef": "https://assets.grudge-studio.com/game-assets/icons/professions/chef_profession_game_icon.png"
    },
    "notSsot": [
      "emoji as production item/skill art",
      "molochdagod.github.io/ObjectStore icon pages",
      "info.grudge-studio.com/api/v1/master-items (404)",
      "Res_* chips as profession headers (use profession_game_icon)"
    ]
  },
  "surfaces": {
    "mainPanel": {
      "url": "/main-panel.html?era=warlords",
      "hotkey": "P",
      "systems": ["equipment", "inventory", "class-skills", "weapon-skills", "professions", "crafting", "quests"]
    },
    "spellbook": {
      "url": "/spellbook.html",
      "hotkey": "B",
      "pack": "grudge6",
      "systems": ["weapon-skills", "class-skills", "magic", "utility"]
    },
    "studio": { "url": "/studio.html", "systems": ["layout-editor", "craftpix-browser"] },
    "gamePacks": { "url": "/games.html", "systems": ["pack-gallery"] },
    "craftpix": {
      "url": "/craftpix",
      "systems": ["craftpix-swaps", "usage-options", "layer-preview"],
      "api": ["/api/craftpix/usage", "/api/craftpix/manifest"]
    },
    "hotkeys": { "url": "/hotkeys.html", "systems": ["bindings"] },
    "assets": { "url": "/assets.html", "systems": ["3d-browser", "objectstore"] },
    "kit": { "url": "/", "systems": ["hydra-editor", "theme", "export"] }
  },
  "gameSystems": [
    {
      "id": "hud-combat",
      "label": "Combat HUD",
      "components": ["player-frame", "target-frame", "action-bar", "cast-bar", "minimap", "quest-tracker"],
      "packStates": ["combat", "explore", "casting"]
    },
    {
      "id": "spellbook",
      "label": "Spellbook",
      "components": ["spellbook"],
      "packStates": ["spellbook", "menu"],
      "url": "/spellbook.html"
    },
    {
      "id": "character-panel",
      "label": "Main Panel / Paperdoll",
      "components": ["paperdoll-equipment", "inventory-grid", "attr-panel", "skill-tree"],
      "url": "/main-panel.html?era=warlords"
    },
    {
      "id": "professions",
      "label": "WCS Professions",
      "icons": "icons/professions/*_profession_game_icon.png",
      "backgrounds": "grudgewarlords.com/assets/professions/",
      "data": "data/wcs-professions.json + ObjectStore master-professions"
    },
    {
      "id": "hotbar-macros",
      "label": "Hotbar + Skill Macros",
      "slots": { "weapon": "1-5", "consumable": "6-8", "class": "Shift+1-5" },
      "client": "GrudgeBuilder SkillMacroSystem + hotbarLayout"
    },
    {
      "id": "mode-play",
      "label": "Combat / Harvest dual mode",
      "client": "ModePlayHUD",
      "notes": "Interactive controls stay in React; craftpix for slots/frames"
    },
    {
      "id": "craftpix-swaps",
      "label": "CraftPix layer swaps",
      "url": "/craftpix",
      "api": ["/api/craftpix/usage", "/api/craftpix/manifest"],
      "runtime": "/craftpix-swaps.js"
    }
  ],
  "fleetPacks": [
    "grudge6",
    "warlords",
    "open",
    "grudox",
    "player-grass",
    "survival",
    "arena",
    "mech",
    "grim-armada",
    "dcq",
    "space-rts",
    "drive",
    "foundry",
    "water-island",
    "wcs",
    "forge"
  ],
  "bestPractices": [
    "ui.grudge-studio.com is SSOT — do not host third main-panel/spellbook on random domains",
    "Warlords/grudge6 chrome = craftpix fantasy; VoxGrudge can use Kenney pixel",
    "Interactive input in game client; packs are chrome + layout + bindData",
    "Prefer ObjectStore + assets CDN skill icons; craftpix Icons 128 as chrome fallback only",
    "Profession headers = profession_game_icon; backgrounds = grudgewarlords.com/assets/professions",
    "Fonts via /grudge-fonts.css (fontsource) — not fonts.googleapis.com",
    "Embed with ?embed=1 to hide studio nav",
    "postMessage: GRUDGE_MAIN_PANEL, GRUDGE_SPELLBOOK, GRUDGE_MESH_EQUIP",
    "CraftPix slots: pixelated; stack bg→icon→overlay→cooldown→press (CraftpixSwaps.renderSlot)"
  ]
}
