Grid: hide the selection square while touch-scrolling, restore it on d-pad.
Square (□) slides the top search bar in/out; the grid fills the vacated strip
(escroll = scroll + bar_hidden). Smart search now requests withExif so results
carry aspect ratios and use the justified layout instead of uniform columns.
START no longer exits the running app (PS button only); dropped the HUD hints.
Cloud page: a top-right O/Back button, and PlayStation face-button glyphs beside
each control (X details, /\ upload all, [] auto-upload) drawn as anti-aliased
outline masks on flat dark discs; the search clear is a bare red O ring. Added
cov_tri/cov_sq/cov_cross/cov_circle glyphs with a shared GLYPH_W stroke, and an
anti-aliased disc helper (disc_tex/draw_disc) for the buttons and toggle knob.
goals.md: recorded the UI-polish round.
- new photos on the server appear automatically: the grid polls the
newest page every ~30 s while settled; dedup_new_assets drops
already-known ids (and also guards page fetches against server-side
pagination drift)
- rebuild_keep_view pins the scroll and selection to the same photo
across every relayout (page fetch, poll, sync), so loads no longer
move the view
- R/L month jump anchors the landed month's header to the top of the
screen, and R fetches ahead until the next month is actually loaded
- portrait videos play upright: the asset's exif orientation is kept
(g_asset_rot) and the player rotates decoded frames (draw_video_frame)
- "loading..." texts replaced by a spinning throbber: centered when an
item has no preview yet, a small corner one while the full-res loads
over the thumb (never both)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Dynamic arrays for assets (remove 1000/500 caps)
- Zoom (R/L triggers) and pan (analog stick) in detail view
- Group gallery by month/year with headers
- Fix fast-scroll crashes via texture pooling and thread safety
- Serialize curl calls (OpenSSL 1.0.2 lacks thread support)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>