Skip to content

🎨 Palette: disclosure summaries 마우스 클릭 시 어색한 focus 외곽선 제거 - #1067

Closed
seonghobae wants to merge 8 commits into
mainfrom
palette-fix-summary-focus-18414941932575116679
Closed

seonghobae wants to merge 8 commits into
mainfrom
palette-fix-summary-focus-18414941932575116679

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

What changed

  • Suppress the browser pointer-focus outline on report disclosure <summary> elements only when focus is not :focus-visible.
  • Keep the explicit :focus-visible outline for keyboard navigation.
  • Add regressions that reject a blanket summary:focus { outline: none; } rule and prove the pointer-specific rule precedes the keyboard-visible rule.
  • Correct the Palette guidance so future report work preserves a modality-safe focus fallback.

Accessibility correction

The original draft used a blanket :focus { outline: none; } selector and relied on a later :focus-visible rule to restore keyboard focus. That is unnecessarily fragile: in user agents where :focus-visible restoration is unavailable or degraded, the blanket rule can leave keyboard users with no visible focus indicator.

The revised contract uses :focus:not(:focus-visible) for pointer-like focus suppression and leaves generic keyboard focus behavior intact, while still providing the package's explicit high-contrast :focus-visible treatment.

RED → GREEN

  • RED af32c8f79124607eef938c5249f004d5de3b79d5: regressions require :focus:not(:focus-visible) and reject the broad :focus selector while the implementation still had the broad rule.
  • GREEN dc3a86346a870d5cbd441e677ede162ee20bdecb: replace the broad disclosure selector with the modality-safe selector.
  • Guidance 181af0d0404cc7800ec06cbf18e3a453adb33efb: align the Palette learning with the corrected accessibility contract.

Scope

This remains a report-CSS/accessibility slice only. No psychometric/statistical arithmetic, Rust numerical ownership, data schema, dependencies, or release behavior changes.

Gate state

The PR remains Draft while exact-head CI/security/SAST/CodeQL and the repository's required independent-review evidence regenerate on the current implementation. Predecessor-head results do not transfer.


PR created automatically by Jules for task 18414941932575116679 started by @seonghobae


Open in Devin Review

HTML 보고서의 `<summary>` 요소에서 마우스 클릭 시 발생하는 기본 브라우저 포커스 아웃라인을 제거하여 UX를 개선했습니다. `outline: none`을 `:focus`에 적용하고, 키보드 탐색을 위한 `:focus-visible`은 유지하여 접근성에 영향을 주지 않도록 하였습니다. 관련 내용을 .Jules/palette.md에 기록했습니다.
@google-labs-jules

Copy link
Copy Markdown

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 48 minutes

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 909183de-6047-4fee-9e73-7ae0dae9344d

📥 Commits

Reviewing files that changed from the base of the PR and between 04d0bc2 and 181af0d.

📒 Files selected for processing (3)
  • .Jules/palette.md
  • python/fast_mlsirm/report.py
  • tests/test_report_summary_focus.py

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review
@cwl-noema-review review

Please evaluate the current exact head e144fe7e9ab5ee46a132227366bf076d0666dd69. The added regression pins both sides of the accessibility contract: pointer-focused disclosure summaries suppress the UA outline, while :focus-visible retains the explicit keyboard indicator and offset. Predecessor-head evidence does not transfer.

@google-labs-jules

Copy link
Copy Markdown

@opencode-agent review
@cwl-noema-review review

Please evaluate the current exact head e144fe7e9ab5ee46a132227366bf076d0666dd69. The added regression pins both sides of the accessibility contract: pointer-focused disclosure summaries suppress the UA outline, while :focus-visible retains the explicit keyboard indicator and offset. Predecessor-head evidence does not transfer.

Acknowledged. I have evaluated the PR on e144fe7e9ab5ee46a132227366bf076d0666dd69.

HTML 보고서의 `<summary>` 요소에서 마우스 클릭 시 발생하는 기본 브라우저 포커스 아웃라인을 제거하여 UX를 개선했습니다. `outline: none`을 `:focus`에 적용하고, 키보드 탐색을 위한 `:focus-visible`은 유지하여 접근성에 영향을 주지 않도록 하였습니다. 관련 내용을 .Jules/palette.md에 기록했습니다.
@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head review request for 0f0c6b7.

Please review this exact head:
@opencode-agent review
@cwl-noema-review review

The change keeps keyboard-visible focus styling while suppressing only pointer-triggered disclosure outlines.

@seonghobae
seonghobae enabled auto-merge (squash) August 20, 2026 08:40
@google-labs-jules

Copy link
Copy Markdown

Current-head review request for 0f0c6b7.

Please review this exact head:
@opencode-agent review
@cwl-noema-review review

The change keeps keyboard-visible focus styling while suppressing only pointer-triggered disclosure outlines.

Acknowledged.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Accessibility blocker on exact head a68bb58ca79f6cb02a515a6bf3097491f741340f: the new rule removes the outline for every .exact-values/.export-block > summary:focus and relies on the later :focus-visible rule to restore keyboard focus. In a user agent that does not understand :focus-visible, that restoring selector is ignored while the unconditional :focus { outline: none; } still applies, so keyboard focus can become invisible. Please suppress the pointer-only outline with summary:focus:not(:focus-visible) instead. That preserves the native focus fallback when :focus-visible is unsupported, while the existing explicit :focus-visible rule keeps the enhanced keyboard indicator where supported. Update the regression to require the :focus:not(:focus-visible) selector and to reject unconditional summary:focus { outline: none; }. I test-drove this assertion locally on the branch and then reverted the test-only commit because this connector cannot safely patch the large generated CSS source without replacing the whole file; the two test commits are tree-neutral (0f0c6b7... -> current head has no file delta).

@seonghobae
seonghobae marked this pull request as draft August 20, 2026 09:15
auto-merge was automatically disabled August 20, 2026 09:15

Pull request was converted to draft

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head review request: the remote agent advanced this PR to exact HEAD a68bb58. Please review this head only and publish an approval or actionable finding. @opencode-agent review @cwl-noema-review review

@google-labs-jules

Copy link
Copy Markdown

Current-head review request: the remote agent advanced this PR to exact HEAD a68bb58. Please review this head only and publish an approval or actionable finding. @opencode-agent review @cwl-noema-review review

Acknowledged.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review
@cwl-noema-review review

Please review the current exact head 181af0d0404cc7800ec06cbf18e3a453adb33efb. The prior review request targeted a superseded head. The accessibility contract now rejects a blanket disclosure :focus { outline: none; }, suppresses only :focus:not(:focus-visible), and preserves the explicit keyboard :focus-visible indicator. Please evaluate only current-head evidence; predecessor-head findings/checks do not transfer.

@google-labs-jules

Copy link
Copy Markdown

@opencode-agent review
@cwl-noema-review review

Please review the current exact head 181af0d0404cc7800ec06cbf18e3a453adb33efb. The prior review request targeted a superseded head. The accessibility contract now rejects a blanket disclosure :focus { outline: none; }, suppresses only :focus:not(:focus-visible), and preserves the explicit keyboard :focus-visible indicator. Please evaluate only current-head evidence; predecessor-head findings/checks do not transfer.

Acknowledged.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head local validation for 181af0d0404cc7800ec06cbf18e3a453adb33ef:

  • tests/test_report_summary_focus.py and tests/test_report.py: 14 passed.
  • Ruff on the changed report/test files: passed.
  • git diff --check: passed.

The selector keeps pointer-focus suppression scoped to :focus:not(:focus-visible) and preserves keyboard-visible focus. Please re-run the exact-head accessibility/security checks and review agents; keep the PR Draft until those gates regenerate. @opencode-agent review @cwl-noema-review review

@google-labs-jules

Copy link
Copy Markdown

Exact-head local validation for 181af0d0404cc7800ec06cbf18e3a453adb33ef:

  • tests/test_report_summary_focus.py and tests/test_report.py: 14 passed.
  • Ruff on the changed report/test files: passed.
  • git diff --check: passed.

The selector keeps pointer-focus suppression scoped to :focus:not(:focus-visible) and preserves keyboard-visible focus. Please re-run the exact-head accessibility/security checks and review agents; keep the PR Draft until those gates regenerate. @opencode-agent review @cwl-noema-review review

Acknowledged.

@seonghobae
seonghobae marked this pull request as ready for review August 20, 2026 14:59
@seonghobae
seonghobae enabled auto-merge (squash) August 20, 2026 14:59

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

@seonghobae
seonghobae marked this pull request as draft August 20, 2026 16:11
auto-merge was automatically disabled August 20, 2026 16:11

Pull request was converted to draft

Copy link
Copy Markdown
Contributor Author

Adopted the substantive disclosure-focus fix into the existing report-surface owner, PR #1002, to avoid two active writers mutating the same python/fast_mlsirm/report.py focus contract. On #1002 the regression was landed first (tests/test_report_summary_focus.py), then the production CSS was changed so exact-value/export <summary> pointer focus uses :focus:not(:focus-visible) before the explicit keyboard :focus-visible rule. The .Jules/palette.md guidance churn and unrelated formatting changes from this branch were intentionally not adopted. Closing this duplicate landing lane; the implementation now continues on #1002.

@google-labs-jules

Copy link
Copy Markdown

Adopted the substantive disclosure-focus fix into the existing report-surface owner, PR #1002, to avoid two active writers mutating the same python/fast_mlsirm/report.py focus contract. On #1002 the regression was landed first (tests/test_report_summary_focus.py), then the production CSS was changed so exact-value/export <summary> pointer focus uses :focus:not(:focus-visible) before the explicit keyboard :focus-visible rule. The .Jules/palette.md guidance churn and unrelated formatting changes from this branch were intentionally not adopted. Closing this duplicate landing lane; the implementation now continues on #1002.

Understood. Acknowledging that this work is now obsolete and stopping work on this task.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Closing this Draft lane as superseded by canonical report-surface PR #1002 at current head 36e0bdd. #1002 now owns the main, scroll-container, and disclosure-summary modality-safe focus selectors with the corresponding regressions; retaining this duplicate would create competing writers for python/fast_mlsirm/report.py. This closure does not alter the Draft gate or bypass protected checks on #1002.

@google-labs-jules

Copy link
Copy Markdown

Closing this Draft lane as superseded by canonical report-surface PR #1002 at current head 36e0bdd. #1002 now owns the main, scroll-container, and disclosure-summary modality-safe focus selectors with the corresponding regressions; retaining this duplicate would create competing writers for python/fast_mlsirm/report.py. This closure does not alter the Draft gate or bypass protected checks on #1002.

Understood. Acknowledging that this work is now obsolete as it has been superseded by PR #1002, and stopping work on this task.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant