Tender Sync Layouts #1814 · panel 854 px wide, 454 px tall on the Deck

Layout
The page
Sync is a wide page reached from Main's Sync button and its Last sync row. It holds the preview as a table, the controls that end a preview (Apply, Refresh, Cancel), Skip preview, Force Full Sync, Steam memory now and the last run's delta, the session-budget card with Restart Steam now and Resume, and the last runs. All three layouts hold the same things; they differ in where each sits and what is visible without scrolling.
Width
The panel is 854 px and the content 806 px, the same on every display. On the Deck that is the whole screen. Nothing here needs to be responsive in width.
Height
The scarce axis. On the Deck the panel is 454 px and the body about 300 px after the title bar, Back and the page title; Sync has no tab row, so it gets 40 px more than Library. Every layout is drawn at the Deck's height, the worst case.
Data
The preview answer carries one row per platform with a change (New · Updated · Removed, and whether the platform is in the run), the added and removed collection names, and the totals. The run history answers the ten newest runs with start, end, status, planned counts, completed platforms and collections, and an error text. Skip preview is a saved setting. The example numbers on the boards are invented.
Frame
A wide page without tabs owns its scroll regions (ownRegions) and lays them out with Columns; a page with one column takes the frame's own region. Every row a reader must reach is a focus stop, and a region scrolls only by moving focus; a region reveals its top and its end when focus reaches its first or last stop.

A · Table and controls

The preview takes the left column, everything that is not the preview stands in a 270 px column on the right. This is the layout the prototype drew and the design record describes.

‹ Tender
‹ BackSync
Preview 1computed 09:41 · expires in 4:12
PlatformNewUpdatedRemoved
PlayStation410
SNES820
Game Boy Advance002
Sega Saturn · no longer synced003
Collections · Favorites added, Beat 'em ups removed101
Total1336
Estimated duration
about 2 min
Progress is saved every ~200 games. Keep the Deck awake for runs over 10 min.
Apply Sync
Refresh 2
Cancel
Options 3
Skip preview
Apply without asking
Force Full Sync
Forgets what was synced and rebuilds everything.
Steam memory 4
Now
1.2 GB
Last run
+0.3 GB
Last runs 5
Today 09:41
14 platforms · 3 collections
completed
Yesterday 21:03
6 of 14 platforms
paused
Aug 30 18:20
14 platforms · 3 collections
completed
Left column flexible, 520 px · right column 270 pxTwo regions, each scrolls on its ownEntry focus: the first table row

Notes

  1. 1

    The preview is the page. One row per platform with a change, the collections row built from the added and removed names, a total row. A platform that has left the run but still has shortcuts to remove is marked, not hidden. Every row is a focus stop, so the reader can walk the table and the region scrolls with them.

  2. 2

    Three ways to end a preview. Apply, Refresh and Cancel sit under the table. Refresh is new: it discards the pending preview on both sides and computes another. These three replace Main's two buttons and Main's second-press discard.

  3. 3

    Options. Skip preview is a saved setting now, read back on every mount. Force Full Sync is red and last in its group, with its one-line explanation; whether it gets a confirmation is an open decision, today it has none.

  4. 4

    Steam memory. The same reading Main's status row shows, plus the last run's delta. When the last run paused on the budget, the session-budget card with Restart Steam now and Resume takes the top of the left column and the preview moves under it.

  5. 5

    Last runs. Ten at most, newest first; each row is a focus stop with the start time, what the run covered and how it ended. A run that did not finish says so in the status word, not in a count.

What it costs

  • The right column is 270 px: a run row gets one line of description and long platform lists are counted, not listed.
  • The table has 520 px for a name and three numbers, which is enough; a fourth column would not fit beside a long platform name.
  • The import choice (#1364, later) goes under the table and pushes Apply down; on the Deck the buttons are then a scroll away while a choice is offered.
  • Two regions means two focus columns; moving from Apply to Force Full Sync is a right press, not a down press.

A, while a run is in flight — the run view

With Skip preview on, or after Apply, a run is in flight and there is no preview to show. The left column becomes the run view: the whole run as one bar, and under it every unit of the plan with its own state, the running one with its own bar.

‹ Tender
‹ BackSync
Sync running 6unit 3 of 14 · about 4 min left
UnitStatusResult
PlayStationdone4 added · 1 updated
Nintendo 64skipped, unchanged since last run—
SNESapplying shortcuts 7
120 of 800
Game Boy Advancewaiting2 to remove
Sega Saturnwaiting3 to remove
Game Boywaiting212 ROMs
Collections · 3waitinglast
Cancel Sync
Options
Skip preview
Apply without asking
Force Full Sync
Not while a run is in flight.
Steam memory
Now
1.8 GB
Last run
+0.3 GB
Last runs
Today 13:26
3 of 14 platforms so far
running
Today 09:41
14 platforms · 3 collections
completed
One bar for the run, one row per planned unit, one bar for the running unitMain keeps its compact bar; both read the same numbersEvery unit row is a focus stop

Notes

  1. 6

    Two levels, from data the frontend already has. The plan event lists every unit up front with its ROM count and whether the fetch is expected to skip it; each progress frame names the running unit, its stage (fetching, covers, applying) and its item counter; the apply loop knows what each unit produced. Done units keep their result, the running unit gets its own bar, waiting units show what is planned for them. The rows are flatter and set smaller than the preview's rows on purpose: a plan of fourteen platforms and three collections has to fit the column without eating the height the total bar and Cancel need. The total bar and the estimate are the ones Main shows, read through one shared hook rather than a second copy of Main's derivation.

  2. 7

    What each stage says. fetching counts ROM pages, covers counts downloads, applying counts shortcuts written, in the same row and the same bar. A pause on the session budget or a cancel leaves the table standing with the last state of every row, which is what the reader wants to see when deciding whether to resume.

What it costs

  • The numbers come from Main's progress derivation, which lives inside the Main component today; a shared hook has to be lifted out of it before both pages can read it, and Main's progress tests move with it.
  • Per-unit results are counted on the frontend as the apply loop runs; a page opened mid-run sees results only for units finished after it opened, unless the loop records them in a module store.
  • Fourteen platforms and three collections fill the column; the region scrolls, and the running row stays where it is rather than being kept in view.

B · One column

Everything in one column, in reading order: the table with the whole width, the buttons, then history and options side by side under them. The frame's own region scrolls the page as one.

‹ Tender
‹ BackSync
Preview 1computed 09:41 · expires in 4:12
PlatformIn this runNewUpdatedRemoved
PlayStationyes410
SNESyes820
Game Boy Advanceyes002
Sega Saturnno longer003
Collections · Favorites added, Beat 'em ups removed3101
Total1336
Estimated duration Progress is saved every ~200 games.
about 2 min
Apply Sync
Refresh
Cancel
Force Full Sync 2
Last runs 3
Today 09:41
14 platforms · 3 collections
completed
Yesterday 21:03
6 of 14 platforms
paused
Options
Skip preview
Apply without asking
Steam memory now
1.2 GB
One region, 806 px wideBelow the fold on the Deck: history, options, Steam memoryEntry focus: the first table row

Notes

  1. 1

    The table gets the whole width. Room for a fourth column, drawn here as In this run, the flag the breakdown already carries, and for the collection names inside the row instead of a hint.

  2. 2

    One button row. Apply, Refresh, Cancel, and Force Full Sync at the right end of the same row, red. Four buttons on one row read as one group, which they are not: three end a preview, one forgets the past.

  3. 3

    History and options under the fold. Side by side to halve their height, still below the Deck's fold on any preview with more than three platform rows.

What it costs

  • Height is spent twice: the table first, then everything else. On the Deck the last runs are one or two scrolls away, and the paused card would push the table down.
  • One region scrolls as one piece; reaching Skip preview means walking the whole table's rows first, because a region scrolls only by moving focus.
  • Row order is reading order, so the primary and the peripheral share one column and one focus lane.
  • Uses the frame's own region, no Columns; the simplest to build.

C · List and detail

The page shaped like Settings and Data Management will be: four entries on the left, the focused one on the right. The preview is one entry among four.

‹ Tender
‹ BackSync
Preview13 new · 3 updated · 6 removed
Last runs10
Optionsskip preview off
Steam memory1.2 GB
Preview 1computed 09:41 · expires in 4:12
PlatformNewUpdatedRemoved
PlayStation410
SNES820
Game Boy Advance002
Sega Saturn · no longer synced003
Collections101
Total1336
Estimated duration
about 2 min
Apply Sync 2
Refresh
Cancel
List 264 px · detail 526 pxFocus selects: moving down the list swaps the detailEntry focus: the Preview row

Notes

  1. 1

    One shape for three pages. Settings and Data Management are list and detail; Sync would be too, and each list row can carry a summary, so the totals, the run count and the memory reading are visible without opening anything.

  2. 2

    Apply lives in the detail. Entry focus is the Preview row; the reader moves right into the table and down to Apply. Two presses more than A before the first action.

What it costs

  • A page with one primary object hides it behind a list: the preview is what the reader came for, and three of the four entries are read once a month.
  • The paused card has no natural home; it would have to sit above the list or inside the Preview detail, where it competes with the table.
  • Focus selects, so glancing at Last runs mid-decision swaps the table out; the preview comes back on the way up, at its top.
  • Reuses ListDetail as it stands, with selectOnActivate for the label rows.
 A · table and controlsB · one columnC · list and detail
Visible without scrolling (Deck)the whole preview and its buttons, plus options, memory and three runsthe whole preview and its buttons; nothing elsethe whole preview and its buttons, plus the four summaries
Width for the table520 px, name and three numbers806 px, room for a fourth column526 px, name and three numbers
Last runsthree visible, the rest a scroll away in their own regionbelow the fold, behind every table rowone press away, then the whole detail
The paused cardtop of the left column, preview under itpushes the table downno natural home
Room for the import choice (#1364)under the table, pushes Apply downunder the table, whole widthunder the table
Frame piecesownRegions + Columnsthe frame's own region onlyListDetail with selectOnActivate
Matches the design recordyes, it is the prototype's pagenono, the record makes Sync two columns
Recommendation A. The preview is the page's one job and A gives it a column of its own with its three buttons in view; everything peripheral fits a 270 px column beside it, so the Deck shows the whole page at rest. B has the best table and the worst fold: on the Deck it is a table with its buttons and nothing else. C is right for Settings and Data Management, where five peers share a page, and wrong here, where one object matters and three do not. A is also the page the design record already describes, so the doc changes are additions, not reversals.