Segunda tanda de UX a partir de feedback de uso real:
- Zoom/pan reasignados: wheel = zoom puro (sin modifier). LMB drag
fuera del anillo de signos = pan; sobre el anillo = jog-dial
(rectificación). MMB sigue como pan secundario. Tecla `0`
resetea zoom + pan.
- Planetas legibles: el "dot rellenado" se reduce a 3 px (solo
marca el grado exacto). Encima va `planet_glyph` con disco-halo
del bg_panel y border del color del planeta — el glyph unicode
astronómico (☉☽☿♀♂♃♄♅♆♇) ahora se lee contra cualquier fondo.
- Aspectos hover-highlight: al hovear un planeta, sus líneas se
mantienen al 100 % y el resto cae a 18 %. Resuelve el "¿quién
contra quién?" sin desordenar la rueda.
- Ascensionales: cruz completa ASC-DESC + MC-IC (4 radios) con
α=0.55. Labels ASC/MC/DESC/IC como pills con bg-halo y border
`angle_highlight`, font 11 — antes eran texto chico que se
fundía con el dial.
- Universo: el wheel pierde su bg de cuadrado (que cortaba contra
el panel). El root del canvas pinta un starfield sutil ~130
puntos deterministas (xorshift32 con seed fija, sin parpadeo
entre frames). Solo activo en themes dark — sobre fondos claros
generaría ruido.
- Estilo 3D anillos: `stroke_circle_3d` (highlight +luma + base +
shadow -luma) reemplaza al stroke plano en sign_outer, sign_inner
y el outer ring. Más `paint_dial_bevel` con 10 strokes finos en
bell curve entre sign_inner y sign_outer — simula gradient radial
que gpui canvas no soporta nativo.
- Theme `Print Color`: papel crema, paleta astro con luminancia
0.26-0.34 y saturación alta, sin glow ni gradients.
- Theme `Print B&W`: monocromático sobre blanco puro. Aspectos
diferenciados por dash pattern en lugar de color:
conjunction/opposition sólidos, square dash medio, trine dash
largo, sextile dotted, minors dotted finísimo. `paint_segment`
con `dash: Option<(on,off)>` para implementar dashes (gpui
canvas no tiene stroke dash nativo).
Todos los tests siguen verdes (6 shell + 5 yahweh-theme +
2 tahuantinsuyu-theme).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Iter 13. El switcher ya cambiaba el chrome en runtime, pero al
cerrar/reabrir el theme volvía a Nebula default. Ahora se persiste
en $XDG_CONFIG_HOME/yahweh/theme (default ~/.config/yahweh/theme)
y se restaura al boot.
yahweh-theme:
- pub fn config_path() -> Option<PathBuf>: resuelve XDG; None en
sandbox/CI sin HOME ni XDG_CONFIG_HOME.
- pub fn load_persisted() / persist(theme): API pública.
Variantes load_from_path / persist_to_path con path explícito
para tests y apps custom.
- Theme::install_default(cx) ahora load_persisted o cae a Nebula.
- Theme::set(cx, theme) ahora persist + set_global. Best-effort:
io errors ignorados (no rebota la UX por un secundario).
- 5 tests nuevos: round-trip, missing file, unknown name, create
parent dir, XDG_CONFIG_HOME respetado.
API pública de install_default/set sin cambio de shape — todos los
downstream compilan sin tocar nada. Smoke run verificado.
Beneficio: 4 apps yahweh-themed comparten preferencia persistente.
Usuario puede preset via `echo Aurora > ~/.config/yahweh/theme`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>