- ui/save.tsx: core.drawTip(validation.message) -> TipStore.get('main-tip')?.drawTip(...) (C:drawTip)
- ui/settings.tsx: core.playSound('confirm.opus') -> props.state.soundPlayer.play('confirm.opus') (C:playSound)
- no client singleton; no new naming; no import type
- delete fallback/{index,audio,ui,weather,load}.ts (A-7/A-1/A-4)
- index.ts: drop patchAll import/call and export * from './fallback'
- create() keeps createRender(); no new naming
- 4-button quantity << < n > >> (step 10/1), clamped to stock (buy) or owned (sell), remembered per item and per mode
- price info row shows buy/sell/stock/owned/total above buttons
- buy/sell via props.shopSystem.buyItem/sellItem; openShop(props.shop) in setup; exit via controller.close
- new shop.tsx exporting Shop/ShopUI/ShopProps/IShopItemEntry
- top buy/sell mode toggle; left scrollable shop list sorted by num with stock right-aligned
- right column name / description / price info (buy via getPrice)
- new ui/equipbox.tsx: left status column, right desc/slot/owned regions
- owned equipment sorted by item.num; slots from hero.equip.slots
- diff via hero.equip.compareEquip (-1 = no equipment)
- remove replayStatus/leftStatus/rightStatus defs, updateStatus, updateDataFallback
- remove dead write-only locked ref and attributeHook + its onUnmounted
- drop status={...} props on LeftStatusBar/RightStatusBar
- hideStatus now reads flag default once at setup + // TODO: (flags has no listen system)
- preserve hideStatus consumers, map render, interaction handlers, mainUIController, MainSceneUI
- drop now-unused imports (onUnmounted/reactive/ILeftHeroStatus/IRightHeroStatus/ReplayingStatus)
- LeftStatusBar/RightStatusBar self-own leftStatus/rightStatus (reactive)
- attributes+lv refresh via hero.attribute.addHook({ onUpdateAttribute })
- floor trigger via hero.location.addHook({ onSetFloor }); value stays legacy core.status.floorId
- no-hook fields (up/items/debuff/replay/exampleHard) left as // TODO:
- onUnmounted unloads both hooks; StatusBarProps drops status member and generic
- Move render/ui/{main,settings,statusBar,toolbar}.tsx to src/ui/ with only relative specifiers rewritten
- Rewrite render capabilities to leaf modules (../render/use, ../render/renderer), never the ../render barrel
- Complete src/ui/index.ts with ./main ./settings ./statusBar ./toolbar + createUI()
- Delete the four old render/ui files