diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index a5a0b5a2..bd5d0810 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -20,7 +20,8 @@ "minHeight": 520, "resizable": true, "zoomHotkeysEnabled": true, - "fullscreen": false + "fullscreen": false, + "maximized": true } ], "security": { diff --git a/src/settings/AccountSection.tsx b/src/settings/AccountSection.tsx index eb411262..e99a74a9 100644 --- a/src/settings/AccountSection.tsx +++ b/src/settings/AccountSection.tsx @@ -29,7 +29,7 @@ function Band({ tone, ok, icon, title, children, action }: { tone: "ready" | "at } function WhatSyncs() { - return
+ return

What syncs

{whatSyncs}

; } diff --git a/src/ui/app.css b/src/ui/app.css index 377a8c68..3a616107 100644 --- a/src/ui/app.css +++ b/src/ui/app.css @@ -188,7 +188,7 @@ h1, h2, h3, p { margin: 0; letter-spacing: 0; } .sidebar-footer { margin-top: auto; padding: 12px 16px 0; color: var(--muted); } main { min-width: 0; } -.view { width: min(100%, 1100px); margin: 0 auto; padding: 32px; container-type: inline-size; } +.view { width: min(100%, 1760px); margin: 0 auto; padding: 32px clamp(32px, 3vw, 56px); container: page / inline-size; } .page-header, .section-header { display: flex; align-items: center; justify-content: space-between; gap: 16px 24px; } .page-header { margin-bottom: 24px; } .page-header h1 { font-size: 30px; line-height: 1.2; font-weight: 700; } @@ -443,6 +443,7 @@ fieldset:disabled :is(.color-options, .scanner-colours) label:not(:has(input:che /* --- Scanning ---------------------------------------------------------------- */ .scanner-settings { max-width: 920px; } +@container page (min-width: 1200px) { .scanner-settings { max-width: none; } } .scanner-status { margin-bottom: 28px; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 20px; border: 1px solid var(--border); border-radius: var(--radius-card); padding: 16px 20px; background: var(--surface-muted); } .scanner-help { margin: 24px 0 16px; border: 1px solid var(--border); border-radius: var(--radius-card); background: var(--surface); color: var(--muted); } .scanner-help summary { justify-content: space-between; gap: 12px; padding: 12px 20px; color: var(--text); list-style: none; } @@ -700,3 +701,35 @@ fieldset:disabled :is(.color-options, .scanner-colours) label:not(:has(input:che keeps its width instead of wrapping beside them. */ .status-list > article.stacked-row { grid-auto-flow: row; } .status-list > article.stacked-row > .row-actions { grid-column: 2; justify-self: start; } + +/* --- Wide windows ---------------------------------------------------------- + A maximised window gives pages far more width than one column can use + well. From 1200px of page width: settings sections put their title beside + their controls, lists of rows become two columns of tiles, and tabs stop + stretching. Paragraphs keep their reading width throughout. Measured + against the page itself (the named container), not inner lists. */ +@container page (min-width: 1200px) { + .tab-bar .btn { flex: 0 1 auto; min-width: 160px; } + + .setting-group { grid-template-columns: minmax(220px, 1fr) minmax(0, 2.4fr); align-items: start; column-gap: 48px; } + .setting-group > header { position: sticky; top: 24px; } + .setting-group > .setting-controls { max-width: 1040px; } + + :is(.status-list, .task-list, .profile-list):has(> :nth-child(2)) { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); } + :is(.status-list, .task-list):has(> :nth-child(2)) > article:nth-child(odd), + .profile-list:has(> :nth-child(2)) > .profile-row:nth-child(odd) { border-right: 1px solid var(--border); } + :is(.status-list, .task-list):has(> :nth-child(2)) > article:nth-last-child(2):nth-child(odd), + .profile-list:has(> :nth-child(2)) > .profile-row:nth-last-child(2):nth-child(odd) { border-bottom: 0; } + + /* Content outside setting groups keeps a usable width. */ + .setting-note { max-width: 80ch; } + .scanner-preferences > .more-options > .more-options-content { max-width: 1040px; } + + .account-page { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; } + .account-page > .connection-band { grid-column: 1 / -1; } + /* What syncs sits beside the actions instead of leaving a ragged gap. */ + .account-page > .connection-band + .status-list { margin-top: 0; } + .account-page > .what-syncs { grid-column: 2; grid-row: 2; } + .account-page:has(> .status-list:nth-child(4)) > .what-syncs { grid-row: 2 / span 2; } + .scanner-panel-heading > p { max-width: 80ch; } +}