Guard sync path resolution against unmounted volumes
Details
ResolveCloudSubdir now validates that the storage root is accessible
before returning a path. On macOS, /Volumes/{name} mount points are
checked for existence. This prevents UnauthorizedAccessException when
exporting snapshots or writing sync events at shutdown with a
disconnected NAS or network volume.
Widen page content area for better table visibility
Details
Increase ThemePageMaxWidth from 1000 to 1060 pixels so tables and
other block content have more horizontal room, reducing text
truncation in multi-column data tables.
Remove table border/radius and make drag handles hover-only
Details
Removed CornerRadius, BoxShadow, BorderThickness, and background
binding from the grid container border for a flat, borderless look.
Drag handles now start at opacity 0 and fade to 0.6 on pointer enter,
disappearing again on exit. Handle opacity resets after drag release.
Fix TableGrid to use base theme, fill width, and remove borders
Details
Header cells now use ThemeTableHeaderBrush (falls back to
ThemeSurfaceElevatedBrush) for proper theme-aware coloring. Removed all
cell border lines from both read-only and editable cells. The last
column now uses Star sizing with MinWidth to fill available width
instead of leaving empty space on the right.
Embed OAuth client IDs as compiled-in defaults
Details
OAuth client IDs for native desktop apps are public by design (PKCE and
device flow don't rely on client secret confidentiality). Previously the
app required env vars to be set at runtime, causing
TypeInitializationException when they weren't present. Now the client IDs
are compiled-in constants with optional env var override for development
or custom deployments.
This fixes the build pipeline gap where Windows CI (and future Linux/Mac
CI) didn't pass OAuth env vars, producing binaries that couldn't connect
to Google, Microsoft, or GitHub. No GitHub secrets needed for these since
native-app client IDs are inherently public.
Get notified about new releases