- PlayerCard removed — it duplicated the sidebar editors; the character
page now shows only prepared spells and attunements
- headings are plain RU: Заготовленные заклинания / Атюнменты
(no EN/RU double labels; h6 no longer lowercased)
- Attunements is Vec<Option<String>> instead of a fixed 3-slot array;
'+ слот' appends a slot, so custom campaigns can track more items
(old saved JSON parses: arrays map to Vec)
- PlayerData.ac (u8, serde default 0): manual armor-class input in the
sidebar HP block (hp/оз, ac/КД), editable like the HP numbers
- PlayerCard: read-only portrait, name, class, level, XP (the sidebar
holds the editors for this data)
- PreparedSpells: growable slot list; a vacant slot has a free-text
input and '+' to fill it, an occupied slot shows name/level/
description and '×' to empty it; '+ слот' appends a vacant slot
- Attunements: three slots, free-text entry and per-slot clear
- rows are plain functions called from For's let(...) children —
component tags are not allowed directly inside them (view macro)
- Field<...> conversions for the Subfield prop types, state-in-key
keys so changed rows re-render (same convention as sidebar pips)
- SCSS: _character.scss with card, slot rows, buttons (mixins)