docforge UX slice S1 (PRD docs/plans/prd-docforge-ux-2026-06-01.md §3).
Kills the invisible two-equal-buttons confusion (G1-b) on both catalog
surfaces, consistently, while keeping each surface's distinct context.
- New shared kebab helper frontend/src/client/row-action-menu.ts: an
accessible ⋯ trigger + body-attached, position:fixed popover (the
.entity-table-wrap clips with overflow-x:auto, so the popover is
body-attached like the event-card choices popover). Outside-click /
Escape / scroll / resize close it; one open at a time.
- Project Schriftsätze tab (client/submissions.ts): primary 'Entwurf
öffnen' (was 'Bearbeiten') + ⋯ menu { Direkt exportieren (.docx) [was
the 'Generieren' button], Vorschau Vorlagenbasis [disabled stub, S3
wires it] }. onGenerateClick→generateAndDownload (busy-cursor feedback,
no button to relabel).
- Global picker (client/submissions-new.ts): primary 'Entwurf starten'
(project-less free-start, kept first-class) + ⋯ menu { Mit Projekt
verknüpfen… [the modal picker], Vorschau Vorlagenbasis [disabled stub] }.
- i18n: new projects.detail.submissions.action.open (DE/EN); kebab item
labels inline isEN() (matches the picker's dynamic-row convention).
- CSS: .row-action-menu* in global.css.
The 'Vorschau Vorlagenbasis' entries are disabled stubs ('Bald verfügbar')
until S3 lands the truthful base-preview modal. TS/CSS only, no backend.
bun build + go vet ./... + go test ./... clean.