Make the primary nav customer-facing and keep the services submenu readable.

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>
This commit is contained in:
2026-08-26 12:52:17 +02:00
parent 86d6dd085d
commit 646b39b200
9 changed files with 52 additions and 45 deletions

View File

@@ -89,16 +89,19 @@ describe('App', () => {
expect(compiled.querySelector('footer')).toBeTruthy();
});
it('keeps the palette trigger in the header and the dialog outside .site', async () => {
it('renders the terminal dock outside .site and keeps the header free of a CV link', async () => {
const fixture = TestBed.createComponent(App);
await fixture.whenStable();
const compiled = fixture.nativeElement as HTMLElement;
const site = compiled.querySelector('.site');
const trigger = compiled.querySelector('header .command-palette-trigger');
const dock = compiled.querySelector('app-terminal-dock');
const trigger = compiled.querySelector('.terminal-dock-trigger');
expect(site).toBeTruthy();
expect(trigger).toBeTruthy();
expect(site?.contains(trigger)).toBe(true);
expect(dock).toBeTruthy();
expect(site?.contains(dock)).toBe(false);
expect(compiled.querySelector('header a[href="/cv/CV.pdf"]')).toBeNull();
expect(compiled.querySelector('header .command-palette-trigger')).toBeNull();
(trigger as HTMLButtonElement).click();
fixture.detectChanges();
@@ -106,10 +109,10 @@ describe('App', () => {
TestBed.inject(ApplicationRef).tick();
fixture.detectChanges();
const dialog = compiled.querySelector('[role="dialog"]');
expect(dialog).toBeTruthy();
expect(site?.contains(dialog)).toBe(false);
expect(site?.hasAttribute('inert')).toBe(true);
const panel = compiled.querySelector('.terminal-dock-panel');
expect(panel).toBeTruthy();
expect(site?.contains(panel)).toBe(false);
expect(site?.hasAttribute('inert')).toBe(false);
});
it('keeps the server-rendered nav expanded and collapses after hydration on a narrow viewport', async () => {