1. Item normalization: normalizeItem() handles ALL formats:
- Inventory service (snake_case): current_wielded_location, object_class
- Plugin raw (PascalCase): CurrentWieldedLocation, ObjectClass
- Plugin IntValues: IntValues['10'] for wielded, ['5'] for burden
- Sentinel filtering: -1 values properly excluded
2. Equipment slots: armor (object_class=2) fills ALL matching slots.
Non-armor uses exact mask match first, then first bit overlap.
Body container ID detected to separate worn from pack items.
3. Slot colors: per-slot-type backgrounds matching v1:
purple (#3a2555) for jewelry, blue (#1e2e55) for armor,
teal (#1e3e3e) for clothing, dark blue (#142040) for weapons
4. Burden: fetches /character-stats/{name} for burden_units and
encumbrance_capacity. Shows percentage when available, raw burden
otherwise. Bar fills 0-200% mapped to 0-100% height with
green/orange/red thresholds.
5. Mana panel: shows equipped items with current/max mana + estimated
time remaining. State dot green/red. Sorted by mana ascending.
6. Fonts: switched to system font stack (-apple-system etc.) instead
of Palatino for crisp rendering.
7. Tooltip: proper system font, larger text (13px), structured sections
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. Equipment slots: armor (object_class=2) now renders in ALL matching
slots via bitmask, not just the first. E.g. a chest piece covering
upper arm + chest + abdomen appears in all 3 slots. Non-armor items
still use first-match. Matches v1's exact logic.
2. Pack fill bars: changed from horizontal-below to vertical-right of
each pack icon. 4px wide bar with fill from bottom, color-coded:
green <70%, orange 70-90%, red >90%.
3. Burden: removed garbled percentage (was dividing by 10). Now shows
"Burden" label with total burden in tooltip. Bar shows 50% as
placeholder until character_stats provides encumbrance_capacity.
4. PackIcon component: reusable for main backpack + sub-packs, shows
game icon + vertical fill bar + green active glow + gold ▶ arrow.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>