1.6 KiB
Roundcube skin validation
This snapshot maps RustBox components onto the official Roundcube Classic and Elastic visual tokens and adds a Larry-compatible fixed interface style.
Source mapping
- Classic Light:
skins/classic/common.cssand Classic mail styles:#F6F6F6page background,#F2F2F2box background,#CC3333selected message/accent,#929292selected folder, square controls, Lucida/Verdana/Arial stack. - Classic Dark: upstream Classic has no official dark mode. RustBox preserves the Classic red/gray hierarchy, square controls and gradients while adapting surfaces/text for dark contrast.
- Elastic Light:
skins/elastic/styles/colors.lessand variables:#37beffmain,#00acfflink/accent,#f4f4f4header,#dddborders, white list/content surfaces. - Elastic Dark: upstream dark tokens:
#21292cbackground,#c5d1d3text,#4d6066border,#374549selected row,#2f3a3fdark header/task surface.
Automated checks
python3 tests/roundcube_skin_contract.py
The test verifies all migrations on a blank SQLite database, interface_skin, saved-response format, unique HTML ids, SVG back-arrow markup, both skin/theme selector pairs, upstream palette tokens, CSS parseability and frontend/backend registration.
build.rs consumes src/web/js/manifest.txt during Cargo builds. For a standalone syntax check, concatenate the manifest entries in order and run node --check on the resulting .js file.
The browser fixture in tests/theme_fixture.html is rendered with the real bundled CSS. Validation screenshots in tests/theme-shots/ cover Classic Light/Dark, Elastic Light/Dark and both mobile drawer variants.