feat: centralize breadcrumbs in topbar and remove history navigation

Move breadcrumb rendering from individual page templates into the core
topbar. Each page now sets $breadcrumbs in its action .php file; the
topbar renders it automatically via the shared partial.

- Remove global back/forward buttons and app-nav-history.js component
- Remove Alt+Arrow keyboard shortcuts for history navigation
- Render breadcrumb in topbar-left section (replaces button area)
- Clean up breadcrumb CSS: context-neutral base (flex, no margin)
- Recalculate sticky titlebar offset in details container
- Migrate all 41 pages (core + helpdesk, audit, addressbook, api-docs)
- Add missing breadcrumbs to addressbook detail view
- Update architecture contract tests (nav-history references removed)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-05 17:17:06 +02:00
parent 7220aa7459
commit b749b5d192
91 changed files with 231 additions and 436 deletions

View File

@@ -122,6 +122,10 @@
}
@media (max-width: 576px) {
.app-topbar-left .app-breadcrumb {
display: none;
}
.app-topbar-search-trigger-text,
.app-topbar-search-trigger-shortcut {
display: none;
@@ -160,9 +164,7 @@
color var(--app-transition);
}
.app-topbar-left > li > a,
.app-topbar-right > li > a,
.app-topbar-left button,
.app-topbar-right button {
display: flex;
align-items: center;
@@ -181,39 +183,26 @@
color var(--app-transition);
}
.app-topbar-left > li > a:hover,
.app-topbar-right > li > a:hover,
.app-topbar-left button:hover,
.app-topbar-right button:hover,
.app-header details.dropdown > summary:not([role]):hover {
background: color-mix(in srgb, var(--app-contrast) 8%, transparent);
color: var(--app-color);
}
.app-topbar-left > li > a:active,
.app-topbar-right > li > a:active,
.app-topbar-left button:active,
.app-topbar-right button:active,
.app-header details.dropdown > summary:not([role]):active {
background: color-mix(in srgb, var(--app-contrast) 12%, transparent);
}
.app-topbar-left > li > a:focus-visible,
.app-topbar-right > li > a:focus-visible,
.app-topbar-left button:focus-visible,
.app-topbar-right button:focus-visible,
.app-header details.dropdown > summary:not([role]):focus-visible {
outline: 2px solid var(--app-primary);
outline-offset: -2px;
}
.app-header #global-back.is-disabled,
.app-header #global-forward.is-disabled {
opacity: 0.4;
cursor: not-allowed;
pointer-events: none;
}
.app-topbar-tenant-chip {
display: inline-flex;
align-items: center;