diff --git a/CHANGELOG.md b/CHANGELOG.md index e586578c..96fab0bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ ## [Unreleased] +## [v0.51.529] — 2026-06-20 — Release SN (per-response jump button matches the session jump pill) + +### Fixed + +- **The per-response "jump to question" button now matches the session jump pill instead of rendering as a smaller, inconsistent control (#2246 follow-up).** The response jump button reuses the session jump button's class stack and dimensions (height, padding, border, background, hover lift), so the two jump affordances look like one consistent control; on mobile (≤600px) it collapses to the same 32px circular icon button as the session pill. Thanks @TomBanksAU. + ## [v0.51.528] — 2026-06-20 — Release SM (isolated HERMES_HOME single-profile mode) ### Added diff --git a/static/style.css b/static/style.css index a3e2c6b1..a6eefe59 100644 --- a/static/style.css +++ b/static/style.css @@ -4898,26 +4898,42 @@ main.main > #mainPlugin{display:none;} } .msg-foot .msg-actions { opacity: 1; margin-left: 0; } .msg-foot .msg-time { font-size: 10.5px; opacity: .75; } +.session-jump-btn--inline { + position: static; + right: auto; + top: auto; + bottom: auto; + z-index: auto; + min-width: 32px; + margin-left: auto; + flex-shrink: 0; +} .msg-question-jump-btn { display: inline-flex; align-items: center; - gap: 4px; + justify-content: center; + gap: 5px; + height: 32px; + min-width: 32px; margin-left: auto; - padding: 3px 8px; - border: 1px solid var(--border-subtle); + padding: 0 11px; + border: 1px solid var(--border2); border-radius: 999px; - background: var(--surface-subtle); + background: var(--code-bg); color: var(--muted); - font-size: 11px; - line-height: 1.3; + font-size: 12px; + font-weight: 600; + line-height: 1; cursor: pointer; - transition: color .12s, border-color .12s, background .12s; + box-shadow: 0 2px 8px rgba(0,0,0,.25); + transition: color .12s, border-color .12s, background .12s, transform .12s; } .msg-question-jump-btn:hover, .msg-question-jump-btn:focus-visible { color: var(--text); border-color: var(--border); background: var(--hover-bg); + transform: translateY(-1px); outline: none; } .msg-question-highlight .msg-body { @@ -4929,7 +4945,15 @@ main.main > #mainPlugin{display:none;} 100% { box-shadow: 0 0 0 0 rgba(0,0,0,0); } } @media (max-width: 600px) { - .msg-question-jump-btn { padding: 3px 4px; } + .msg-question-jump-btn { + width: 32px; + height: 32px; + min-width: 32px; + max-width: 32px; + padding: 0; + border-radius: 50%; + gap: 0; + } .msg-question-jump-btn span:last-child { display: none; } } .msg-foot-with-usage { diff --git a/static/ui.js b/static/ui.js index ee692925..c5bdfc1d 100644 --- a/static/ui.js +++ b/static/ui.js @@ -959,7 +959,7 @@ function _questionJumpButtonHtml(questionRawIdx, assistantRawIdx){ const label=t('jump_to_question')||'Response'; const title=t('jump_to_question_label')||'Jump to the start of this response'; const aIdx=(typeof assistantRawIdx==='number'&&assistantRawIdx>=0)?assistantRawIdx:-1; - return ``; + return ``; } function _highlightQuestionRow(row){ diff --git a/tests/test_issue2246_question_jump.py b/tests/test_issue2246_question_jump.py index 20bd238f..5c26e72d 100644 --- a/tests/test_issue2246_question_jump.py +++ b/tests/test_issue2246_question_jump.py @@ -23,7 +23,7 @@ def test_assistant_footer_gets_completed_turn_question_jump_button(): assert "const _qJumpTarget=(!isUser&&!m._live)?questionRawIdxByAssistantRawIdx.get(rawIdx):undefined;" in UI_JS assert "const questionJumpBtn = (_qJumpTarget!==undefined&&_qJumpTarget!==null)" in UI_JS assert "_questionJumpButtonHtml(_qJumpTarget, assistantRawIdxByQuestionRawIdx.get(_qJumpTarget)??rawIdx)" in UI_JS - assert "msg-question-jump-btn" in UI_JS + assert "msg-question-jump-btn session-jump-btn session-jump-btn--inline" in UI_JS def test_multi_segment_turn_jumps_to_first_assistant_segment(): @@ -48,13 +48,19 @@ def test_question_jump_expands_windowed_history_and_highlights_question(): assert "msg-question-highlight" in UI_JS -def test_question_jump_button_is_quiet_and_compact_on_mobile(): +def test_question_jump_button_matches_bottom_button_size_on_mobile(): assert ".msg-question-jump-btn" in STYLE_CSS + assert ".session-jump-btn--inline" in STYLE_CSS + assert "height: 32px;" in STYLE_CSS + assert "min-width: 32px;" in STYLE_CSS + assert "padding: 0 11px;" in STYLE_CSS assert "margin-left: auto;" in STYLE_CSS assert ".msg-question-highlight .msg-body" in STYLE_CSS assert "@keyframes question-highlight-pulse" in STYLE_CSS assert "@media (max-width: 600px)" in STYLE_CSS - assert ".msg-question-jump-btn { padding: 3px 4px; }" in STYLE_CSS + assert "width: 32px;" in STYLE_CSS + assert "max-width: 32px;" in STYLE_CSS + assert ".msg-question-jump-btn span:last-child { display: none; }" in STYLE_CSS def test_question_jump_text_is_localized():