From f665482ff9627bb7baaa51835ed60976a421e0a1 Mon Sep 17 00:00:00 2001 From: hhff Date: Tue, 3 Nov 2026 12:17:58 -0500 Subject: [PATCH] Dashboard: a review opens as a wide side panel, the agent's page fills it, and the answer bar stays short The owner found the review view messy: a tall header pushed the agent's page into a 480px box, and 'What you're answering' listed every row in a sticky panel that ran off the page. The review now opens over the dashboard as a side panel (96vw, up to 1600px) with a one-line header (the full question and pins fold under 'The question in full'), the agent's page filling the remaining height, and a footer bar whose counts are the summary; every row opens on demand and scrolls inside the bar. Close, Escape and the scrim go back to where it was opened from, or to the Inbox from a link. On a phone the bar stacks. Co-Authored-By: Claude Opus 5.5 --- docs/devteam/dashboard/index.html | 101 +++++++++++++++++++----------- 1 file changed, 66 insertions(+), 35 deletions(-) diff --git a/docs/devteam/dashboard/index.html b/docs/devteam/dashboard/index.html index cb33c10..9dffb7d 100644 --- a/docs/devteam/dashboard/index.html +++ b/docs/devteam/dashboard/index.html @@ -316,8 +316,25 @@ /* review questions: three bands, the middle one the agent's (sandboxed) page */ .qcard.review { border-left-color: var(--blue); } - main.reviewing { max-width: 1280px; } - main.reviewing > section:not(#review-view) { display: none !important; } + /* the review opens as a wide side panel over the page: a slim header, the agent's page filling + the height, and a compact answer bar whose row list scrolls inside it */ + #review-view:not([hidden]) { position: fixed; top: 0; right: 0; bottom: 0; width: min(1600px, 96vw); z-index: 21; background: var(--surface); border-left: 1px solid var(--line); box-shadow: -16px 0 48px rgba(0,0,0,.28); display: flex; flex-direction: column; gap: 6px; padding: 10px 16px 0; overflow: hidden; } + @media (max-width: 900px) { #review-view:not([hidden]) { width: 100vw; padding: 8px 10px 0; } } + .rv-top { display: flex; align-items: center; gap: 8px; min-width: 0; } + .rv-top h4 { flex: 1; min-width: 0; margin: 0; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + .rv-top .icon-btn { flex: none; margin: 0; } + .rv-sub { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: center; font-size: 11.5px; color: var(--muted); } + .rv-sub details { font-size: 12px; color: var(--fg-2); } + .rv-sub details[open] { flex-basis: 100%; } + .rv-sub details > div { padding: 6px 0 2px; max-height: 22vh; overflow: auto; } + #rv-frame-wrap { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; } + #rv-frame-wrap .rv-frame { flex: 1 1 auto; height: auto; min-height: 200px; } + #rv-frame-wrap .rv-frame-label { margin: 0 0 4px; } + #review-view .rv-panel { position: static; flex: none; margin: 0 -16px; border-radius: 0; border-width: 1px 0 0; box-shadow: none; max-height: 48vh; grid-template-columns: minmax(0, 1fr) minmax(220px, 280px); padding: 10px 16px 12px; } + #review-view #rv-preview { max-height: calc(48vh - 24px); overflow: auto; } + @media (max-width: 900px) { #review-view .rv-panel { grid-template-columns: minmax(0, 1fr); overflow: auto; max-height: 45vh; } #review-view #rv-preview { max-height: none; overflow: visible; } } + .rv-rows > summary { cursor: pointer; list-style: none; } + .rv-rows > summary::-webkit-details-marker { display: none; } #review-view { margin-top: 0; } .rv-back { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--fg-2); margin: 0 0 10px; } .rv-back:hover { color: var(--fg); } @@ -326,7 +343,7 @@ .rv-pins code { font-size: 11px; } .rv-preview-banner { display: inline-block; font-size: 11px; font-weight: 600; letter-spacing: .04em; color: var(--amber-fg); border: 1px solid color-mix(in srgb, var(--amber) 45%, var(--line)); background: color-mix(in srgb, var(--amber) 9%, var(--surface)); border-radius: 6px; padding: 2px 8px; margin-bottom: 6px; } .rv-frame-label { display: flex; gap: 8px; align-items: center; font-size: 11.5px; color: var(--muted); margin: 14px 0 4px; } - .rv-frame { display: block; width: 100%; height: 480px; min-height: 320px; border: 2px dashed var(--line-2); border-radius: 8px; background: var(--bg); } + .rv-frame { display: block; width: 100%; height: 480px; min-height: 200px; border: 2px dashed var(--line-2); border-radius: 8px; background: var(--bg); } .rv-panel { position: sticky; bottom: 0; z-index: 4; margin-top: 12px; background: var(--surface); border: 1px solid var(--line-2); border-radius: 10px 10px 0 0; box-shadow: 0 -8px 28px rgba(0,0,0,.10); padding: 12px 16px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(220px, 300px); gap: 10px 18px; max-height: 46vh; } .rv-panel h3 { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; margin: 0 0 6px; color: var(--fg); } .rv-panel h3 .dim { font-weight: 400; } @@ -474,7 +491,6 @@

Checks before merge the automated