Iters 8-9 combinadas. Tres mejoras pequeñas que cierran la
integración del theme:
1) text-input caret blinking: caret_visible bool toggea cada 500ms
via cx.spawn loop. _blink_task se mantiene en self para que
drop cancele. render dibuja | sólo si focused && caret_visible.
2) yahweh-theme: 5 slots ornament secundario como methods (no
fields) derivados de is_dark via ornament_slots() helper:
bg_input/bg_button/bg_button_hover/accent_destructive/
bg_destructive_hover. No requiere modificar los 6 presets.
3) MetaApp ornament cleanup: 11 rgb(0x...) hardcoded → slots del
theme. Sidebar menu items, list row separator/buttons, icon ✕
delete y su hover, EntityRef selector hovers, form submit
button + fallback input bg, confirm modal hint y hovers.
Pattern: let X = theme.slot() antes de las closures + move |d|
d.bg(X) en hover/when para tomar ownership.
Antes MetaApp tenía la paleta principal themed (iter 5) pero el
ornament secundario seguía hardcoded. Ahora el theme switcher
cambia absolutamente todo el chrome.
Tests: 117 verdes. Downstream compila. Smoke nakui-ui: bootstrap
OK.
Limitación: nouser-explorer todavía hardcoded — próxima iter.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>