- base dialog: z raised to 300/301 (was below sidebar z-200 - dialogs
appeared sunken under navigation), overlay bg-black/45 + 2px blur,
unified close button with hover/focus-visible states, footer pt-4
- FormDialog normalized: width presets sm/md/lg/xl + optional
description, single scrollable body (header/footer fixed), unified
top-right close from base
- ModalOverlay rewritten on radix kernel, same props (+title/noScroll):
portal/focus trap/scroll lock/ESC with proper nesting (fixes
chain-close when ticket detail opens quick-review), 200ms animation,
z-300 layering - was a bare div with no a11y, no animation, ESC
via document listener that leaked to nested dialogs
- killed box-in-box: all 14 ModalOverlay callers stripped their inner
card wrapper (double border/shadow/radius/padding gone) and duplicate
scroll containers; EditInstanceDialog (4th standalone system) migrated
to ModalOverlay, gains ESC/animation/portal
- visual unification per guide: dialog title text-base semibold
(was 4 sizes), close button one form (was 5), footer buttons on
dg-btn system (secondary/primary/danger, was 4 systems), primary
color var(--dg-blue) everywhere (yellow/emerald/blue-500/600 mixed
before), widths 4 presets (was 7 arbitrary values)
- dead code removed: 3 orphaned LDAP dialog components, leftover
create-OU state/handler in BatchImportModal, unused icon imports
verified in browser: users create dialog shows single card (0 inner
cards), 12px radius, z-301/300, overlay blur, sidebar correctly
covered; tsc/build/audit gates green