Motivation: Tidepool looks extremely outdated — the same 90s-app problem DeslanStudio had before its upgrade train. DeslanStudio went from that to modern with three concrete moves; Tidepool gets the same treatment.
1. Theme layer (the core of the visual upgrade). Tidepool has no theme module — it runs lib/ui default chrome with ad-hoc inline colors (title.color is [220, 220, 240], per-widget one-offs). Build src/theme.eigs on the DeslanStudio pattern (src/client/theme.eigs there):
- A coherent named palette (TP_COLORS) — ocean/tidepool aesthetic: deep-water dark bg, aqua/teal accents, kelp/coral secondary colors — replacing scattered RGB literals.
- Mapped onto lib/ui's theme keys (bg, panel_bg, btn_bg/hover/pressed, slider, tab, menu, tooltip, focus_ring, selection…).
- Applied in place, field by field, BEFORE widget construction — copy DeslanStudio's
ds_theme_apply exactly. Trap documented in their theme.eigs header: set_theme REPLACES the theme wholesale and nulls every sizing/shade key (font_scale, char_w/h, radius, hover_shade…); panel/toolbar constructors bake theme colors at construction time.
- Per-widget accent tints via the
bg/text_color fields (upstream PR #596; live in our pinned v0.34.0, no forward-compat dance needed) — color-code the load-bearing actions the way DeslanStudio tinted Play green / Record red.
2. First-impression pass (DeslanStudio #6/#7 analog): title screen, screen fit, empty/loading states, HUD readability. The hand-rolled HUD in renderer.eigs and the pause/title surfaces adopt the themed toolkit where widgets fit; whatever stays canvas-drawn reads its colors from TP_COLORS, so the whole app shifts palette together.
3. Toolkit-adoption + workaround audit (supporting, not the headline): the diet overlay and editor already use ui.panel/ui.label/ui.button; sweep the remaining hand-rolled key handling/modal surfaces through the toolkit (DeslanStudio #22–#25 pattern). Toolkit gaps the game surfaces (e.g. HUD-style widgets, gradients) go upstream and bank in GAPS.md — no local forks.
Acceptance:
- Before/after screenshots via the desktop-gui-qa flow — the "after" must read as a modern app, which is the point of the issue.
- Suite green (
test_gfx, test_input, test_regressions); headless asserts pin the themed fields (DeslanStudio pins its tints in test_shell.eigs).
- Real-flow click/key verification (popup click-trap classes).
- No RGB literals left in UI code paths that TP_COLORS should own.
Owner: eigenscript-stdlib-applied-engineer (Tidepool axis), with eigenscript-ui-toolkit-engineer picking up upstream lib/ui gaps.
Motivation: Tidepool looks extremely outdated — the same 90s-app problem DeslanStudio had before its upgrade train. DeslanStudio went from that to modern with three concrete moves; Tidepool gets the same treatment.
1. Theme layer (the core of the visual upgrade). Tidepool has no theme module — it runs lib/ui default chrome with ad-hoc inline colors (
title.color is [220, 220, 240], per-widget one-offs). Buildsrc/theme.eigson the DeslanStudio pattern (src/client/theme.eigsthere):ds_theme_applyexactly. Trap documented in their theme.eigs header:set_themeREPLACES the theme wholesale and nulls every sizing/shade key (font_scale, char_w/h, radius, hover_shade…); panel/toolbar constructors bake theme colors at construction time.bg/text_colorfields (upstream PR #596; live in our pinned v0.34.0, no forward-compat dance needed) — color-code the load-bearing actions the way DeslanStudio tinted Play green / Record red.2. First-impression pass (DeslanStudio #6/#7 analog): title screen, screen fit, empty/loading states, HUD readability. The hand-rolled HUD in
renderer.eigsand the pause/title surfaces adopt the themed toolkit where widgets fit; whatever stays canvas-drawn reads its colors from TP_COLORS, so the whole app shifts palette together.3. Toolkit-adoption + workaround audit (supporting, not the headline): the diet overlay and editor already use
ui.panel/ui.label/ui.button; sweep the remaining hand-rolled key handling/modal surfaces through the toolkit (DeslanStudio #22–#25 pattern). Toolkit gaps the game surfaces (e.g. HUD-style widgets, gradients) go upstream and bank inGAPS.md— no local forks.Acceptance:
test_gfx,test_input,test_regressions); headless asserts pin the themed fields (DeslanStudio pins its tints intest_shell.eigs).Owner: eigenscript-stdlib-applied-engineer (Tidepool axis), with eigenscript-ui-toolkit-engineer picking up upstream lib/ui gaps.