Skip to content

feat(dashboard): page transitions, dialog motion and layout fixes - #90

Closed
ALikesToCode wants to merge 3 commits into
mainfrom
feat/dashboard-motion-ux
Closed

ALikesToCode wants to merge 3 commits into
mainfrom
feat/dashboard-motion-ux

Conversation

@ALikesToCode

@ALikesToCode ALikesToCode commented Oct 24, 2026 •

Copy link
Copy Markdown
Owner

Summary

Adds page transitions and motion to the dashboard, and fixes UI issues found in a desktop and mobile review of the preview server.

Motion

  • Same-origin page navigations cross-fade. The signed-in header holds still, and the current-page underline slides to the new link.
  • Dialogs rise in over a fading backdrop and close with a shorter, quieter exit.
  • The mobile menu fades in. Buttons and the menu button press in slightly.
  • With prefers-reduced-motion, the page-transition animations are cancelled, and the press scale and menu-button press are disabled.

Fixes

  • Limits dialog wrote official_only = 0 for keys left unrestricted. Saving Limits with the box clear sent false, which made the row count as controlled (official_only != null). It now sends null unless the box is ticked.
  • Dialogs opened in the top-left corner. The Tailwind base reset zeroes every margin, which overrode the browser's margin: auto centring for <dialog>. Dialogs are centred again, scroll inside the viewport, and keep their action row visible at the bottom.
  • Child-safety and cascade panels had no form layout. They now use the shared form stack, checkbox field and field classes, and JSON editors use the monospace field style.
  • The model catalog heading overflowed on phones. Its "200 shown · 210 matching" tag now wraps.
  • Bare disclosure summaries were 20 px tall. They now have a 40 px hit area.
  • Added font smoothing at the root.

Why the opt-in is inline

Chromium missed a @view-transition opt-in that sat in a stylesheet still being revalidated. Static files are no-cache, and production assets take about 0.7 s each, so in testing the transition was skipped on most navigations. With the rule inline (<style>@view-transition{navigation:auto}</style>), the transition fired on every navigation, even with 800 ms of simulated revalidation latency. The page CSP allows exactly that rule by its sha256 hash (routes/dashboard_security.py). The policy still has no unsafe-inline, and the animations stay in shell.css.

Changed assets get new ?v= versions, and the service worker cache moves to multillm-proxy-v14.

Testing

  • node --test tests/test_dashboard_scripts.mjs tests/test_cascades_dashboard.mjs tests/test_child_safety_dashboard.mjs tests/test_frontend_build.mjs tests/test_operations_dashboard.mjs
  • pytest tests/test_control_plane_ui.py tests/test_key_controls.py tests/test_dashboard_sso.py
  • Full pytest -q: 5,328 passed and 1 failed. The failure was the outbound inventory hash for routes/dashboard_security.py, whose diff touches no transport. After updating the reviewed hash in tests/outbound_inventory.json, tests/test_outbound_inventory.py passes.
  • Full npm run test:worker: 2,024 passed (with the project venv's python3 on PATH).
  • CI's node and python jobs fail at the dependency audits, the same as on main (certifi, pillow and wrangler's undici). The audits skip the CI test steps, so the local runs above are the test evidence. cloudflare-build and integration pass.
  • In headless Chromium against scripts/preview_ui.py, at desktop and phone widths:
    • Link navigation produced a view transition every time across Operations, Access and Usage (root fade, header and nav-indicator groups present).
    • Under reduced motion the transition ran with no animations.
    • The Limits dialog opens centred with its actions visible.
    • Phones no longer scroll horizontally.

Not deployed. Production deploys are manual with scripts/deploy.sh while Workers Builds is disconnected.

Saving the Limits dialog sent official_only: false for a key with no
restriction. Storage keeps that as 0, and a non-null official_only marks
the account as controlled, so every save turned on key-control handling
for keys the operator never restricted. A clear box now sends null.
Same-origin navigations now cross-fade: the signed-in header holds
still and the current-page underline slides to the new link. Dialogs
rise in over a fading backdrop, the mobile menu fades in, and buttons
press in slightly. Reduced motion cancels the page-transition
animations and the press effects.

The @view-transition opt-in is inline in base.html. Chromium missed it
in shell.css whenever that stylesheet was still being revalidated, and
static files are no-cache, so most navigations skipped the transition.
The page CSP allows exactly that rule by its sha256 hash; there is still
no unsafe-inline.

Fixes found in a desktop and phone review:
- Dialogs opened in the top-left corner because the base reset zeroes
  the margin that centres a modal dialog. They are centred again, scroll
  within the viewport and keep their action row in view.
- The child-safety and cascade panels had no form layout; they now use
  the shared form stack, checkbox field and field classes, and JSON
  editors are monospace.
- The model catalog heading tag overflowed on phones; it now wraps.
- Bare disclosure summaries get a 40 px hit area.
- Root font smoothing.

Changed assets get new ?v= versions and the service worker cache moves
to multillm-proxy-v14.
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-10-24T19:46:36.977804Z
We couldn’t complete this review. Comment @codex review to try again.
87d01e9 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@coderabbitai

coderabbitai Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 72dc790d-a960-48bc-b3df-21119d4a333e
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

The new base.html comment used the bare word that Tailwind reads as
its transition utility, which added an unused rule to style.css and
failed the committed-assets check.
@ALikesToCode

Copy link
Copy Markdown
Owner Author

Closing without merging; the owner decided not to ship this change.

@ALikesToCode
ALikesToCode deleted the feat/dashboard-motion-ux branch October 25, 2026 08:22
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