Stack and the CV leave the chrome so Contact stays the main action. The desktop submenu now uses an opaque surface token and a stacking context above page content. Co-authored-by: Cursor <cursoragent@cursor.com>
65 lines
1.4 KiB
TypeScript
65 lines
1.4 KiB
TypeScript
import { type AppLocale } from '../i18n/locale';
|
|
import { type RouteId } from '../routing/route-ids';
|
|
|
|
export interface NavItem {
|
|
readonly routeId: RouteId;
|
|
readonly label: Record<AppLocale, string>;
|
|
readonly children?: readonly NavItem[];
|
|
}
|
|
|
|
export const PRIMARY_NAV: readonly NavItem[] = [
|
|
{
|
|
routeId: 'home',
|
|
label: { de: 'Startseite', en: 'Home' },
|
|
},
|
|
{
|
|
routeId: 'services',
|
|
label: { de: 'Leistungen', en: 'Services' },
|
|
children: [
|
|
{
|
|
routeId: 'servicesSoftware',
|
|
label: { de: 'Software', en: 'Software' },
|
|
},
|
|
{
|
|
routeId: 'servicesHardwareNetwork',
|
|
label: { de: 'Hardware und Netzwerk', en: 'Hardware and network' },
|
|
},
|
|
{
|
|
routeId: 'servicesClusters',
|
|
label: { de: 'Cluster', en: 'Clusters' },
|
|
},
|
|
{
|
|
routeId: 'servicesAi',
|
|
label: { de: 'KI-Integration', en: 'AI integration' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
routeId: 'projects',
|
|
label: { de: 'Projekte', en: 'Projects' },
|
|
},
|
|
{
|
|
routeId: 'about',
|
|
label: { de: 'Über mich', en: 'About' },
|
|
},
|
|
{
|
|
routeId: 'contact',
|
|
label: { de: 'Kontakt', en: 'Contact' },
|
|
},
|
|
];
|
|
|
|
export const FOOTER_NAV: readonly NavItem[] = [
|
|
{
|
|
routeId: 'imprint',
|
|
label: { de: 'Impressum', en: 'Legal notice' },
|
|
},
|
|
{
|
|
routeId: 'privacy',
|
|
label: { de: 'Datenschutz', en: 'Privacy' },
|
|
},
|
|
{
|
|
routeId: 'contact',
|
|
label: { de: 'Kontakt', en: 'Contact' },
|
|
},
|
|
];
|