diff --git a/frontend/index.html b/frontend/index.html
index 2308b95..1f64ff4 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -73,6 +73,12 @@ textarea { resize: vertical; min-height: 120px; }
.review-file, .review-history { padding:8px 0; border-bottom:1px solid #1b2d45; overflow-wrap:anywhere; }
.review-file-toggle { min-height:44px; width:100%; display:flex; align-items:flex-start; justify-content:space-between; gap:8px; text-align:left; }
.review-file-toggle strong { overflow-wrap:anywhere; }
+.review-file.reviewed { opacity:.72; }
+.review-file.reviewed .review-file-toggle { border-color:#22c55e; }
+.review-mark { min-height:44px; width:100%; margin-top:8px; }
+.review-mark[aria-pressed="true"] { border-color:#22c55e; background:#123c2a; }
+.review-progress-actions { position:sticky; bottom:0; z-index:2; display:flex; align-items:center; justify-content:space-between; gap:10px; margin:8px -4px 0; padding:10px 4px; background:rgba(11,21,38,.96); border-top:1px solid #2a496e; }
+.review-progress-actions button { min-height:44px; max-width:100%; }
.review-diff { overflow-x:auto; max-width:100%; margin-top:8px; white-space:pre; }
.review-diff-line { display:block; min-width:max-content; }
.review-diff-line.hunk { color:#93c5fd; }
@@ -220,6 +226,10 @@ textarea { resize: vertical; min-height: 120px; }
' + escapeHtml(review.user?.login || 'Reviewer') + ' · ' +
escapeHtml(review.state || 'commented') + (review.body ? '
' + escapeHtml(review.body) + '
' : '') + '
'
@@ -403,6 +466,7 @@ textarea { resize: vertical; min-height: 120px; }
function closeReviewSheet() {
qs('#review-sheet').classList.remove('open');
selectedReview = null;
+ progress = null;
if (reviewTrigger?.isConnected) reviewTrigger.focus();
}
@@ -513,6 +577,9 @@ textarea { resize: vertical; min-height: 120px; }
document.addEventListener('keydown', (e) => { if ((e.metaKey||e.ctrlKey) && e.key==='k') { e.preventDefault(); qs('#cmd-palette').classList.toggle('open'); if(qs('#cmd-palette').classList.contains('open')){ qs('#cmd-input').focus(); renderCommands(''); } } });
qs('#close-whiteboard').addEventListener('click', () => closeModal('whiteboard-modal'));
qs('#close-review-sheet').addEventListener('click', closeReviewSheet);
+ qs('#next-unreviewed-review').addEventListener('click', () => {
+ if (progress) openNextUnreviewed(progress.snapshot());
+ });
const contextPoller = createContextPoller({
fetchContext: fetchContextSnapshot,
diff --git a/frontend/review-sheet.js b/frontend/review-sheet.js
index cbc853c..292e08b 100644
--- a/frontend/review-sheet.js
+++ b/frontend/review-sheet.js
@@ -38,10 +38,12 @@ function renderDiffFile(file, index, escapeHtml) {
preview = '' + message +
(file.diff_truncated ? ' The response was truncated.' : '') + '
';
}
- return '