design pass: responsive layout, clearer cards, better sync/log states

Dashboard:
- DEVICE card: storage is now a compact "276.2 GiB free · 40%" value plus a
  usage bar on its own row (only when it cannot collide with the text) — the
  old "total · free" value was truncated mid-number; gauge labels no longer
  set an explicit fg so ratatui's colour swap keeps them readable over both
  filled and empty bar cells
- LIBRARY card: paths are marked ✓/✗ (missing dirs are a common failure) and
  long values are ellipsized instead of hard-clipped; absolute local
  storagebox sources get the same check
- SYNC STATUS: device names adapt to the card width, statuses go time-only on
  narrow cards, and the summary footer is two compact lines (no trailing "…")
- responsive: sidebar 28/34 cols, compact labels for narrow cards, short
  terminal drops the decorative SYNC PATH card (it previously lost its only
  content row and rendered empty)

Sync tab:
- hero "READY TO SYNC" panel for the selected device (name, firmware, mount
  state, key hint, last sync) instead of a mostly empty LAST SYNC card
- after a run finishes, keep the step timeline visible with final statuses and
  a LAST RUN result banner, plus an "s run again" hint (previously the steps
  were discarded and only a summary line remained)
- steps connected as a timeline

Chrome:
- shared panel/firmware/chip/arrow/key-hint helpers in components; softer
  panel borders (theme::BORDER) and a softer sidebar selection highlight
- title bar reduced to one row and now shows mirror on/off + ready/syncing
  instead of the truncated config path
- logs header shows warning/error counts; cards use one consistent style

Bump to 0.3.0.
This commit is contained in:
Sebastian
2026-09-10 19:55:11 +02:00
parent ed492e7047
commit 42a3f0c35a
10 changed files with 699 additions and 310 deletions
-9
View File
@@ -108,15 +108,6 @@ pub struct Device {
pub last_status: String,
}
impl Device {
pub fn mount_str(&self) -> String {
match &self.mount_point {
Some(p) => p.display().to_string(),
None => "—".to_string(),
}
}
}
#[derive(Debug, Clone)]
pub struct Config {
pub config_file: PathBuf,