The delete confirmation adds a password field. Browsers and password managers paired it with the only other text field on the page and filled the account name into the server search box on the server list. The search input now stays out of the DOM while a delete confirmation is open, and the toolbar shows a suspended notice styled to match the field it replaces so the row does not jump. A jsdom test drives the real action menu and dialog instead of asserting page source strings.
platform_web/pages
First-party page implementations live here after routes and contracts are defined.
Required page groups:
homeserverspluginsusersai-providersplugin-pages
Do not put shared API clients, shared DTOs, route definitions, or bridge contracts in page files.
Visual Rules
Pages must use the shared black-mecha / magical-girl visual system from ../theme/ instead of page-local card systems or unrelated palettes.
- Reuse shared shell, card, panel, table, drawer, dialog, status, command, log, diff, plugin group, and operation history classes from
theme/base.css. - Keep management lists, grids, and tables full-width. Create, edit, and detail workflows belong in modals, drawers, or detail routes, not in permanent right-side panes or inline form panels beside/above the list.
- Keep page surfaces translucent enough for the selected built-in or uploaded background desktop to remain visible.
- Ambient magical particles are global shell chrome. Pages must not add fixed decorative sparkles, hearts, moons, snowflakes, sigils, or custom backdrop layers.
- Do not introduce opaque white cards, heavy dark dashboards, stock marketing layouts, or single-page custom gradients that bypass the theme tokens.
- Preserve text/icons for status and operation results; do not rely on color-only cues.
- Read
../theme/README.mdbefore adding a new page surface pattern.
Server Detail operations behavior
The Server Detail workspace consumes safe Platform projections for lifecycle, plugin-owned pages, terminal/log streams, and run distribution actions. Action buttons remain compact and disabled with the Platform-provided reason when declaration, permission, endpoint, artifact, target, or lifecycle state is not ready.