diff --git a/packages/dashboard/app/components/SecretsView.css b/packages/dashboard/app/components/SecretsView.css index 644ddf1ed5..e7edfa1679 100644 --- a/packages/dashboard/app/components/SecretsView.css +++ b/packages/dashboard/app/components/SecretsView.css @@ -1,7 +1,14 @@ +/* +FNXC:SecretsView 2026-06-14-10:02: +The standalone Secrets page is mounted as a flex item inside the .project-content row on mobile and desktop. Grow and zero the min-width here so the page fills the viewport width instead of collapsing to intrinsic secret-card content (FN-6446); keep height behavior unchanged so the Settings modal section does not gain nested scrolling. +*/ .secrets-view { display: flex; + flex: 1 1 auto; flex-direction: column; gap: var(--space-lg); + min-width: 0; + width: 100%; padding-block: var(--space-md); padding-inline: var(--space-xl); } diff --git a/packages/dashboard/app/components/__tests__/SecretsView.mobile.test.tsx b/packages/dashboard/app/components/__tests__/SecretsView.mobile.test.tsx index 369b76ba49..53c299f92e 100644 --- a/packages/dashboard/app/components/__tests__/SecretsView.mobile.test.tsx +++ b/packages/dashboard/app/components/__tests__/SecretsView.mobile.test.tsx @@ -126,6 +126,13 @@ describe("SecretsView mobile layout contracts", () => { expect(normalizedCss).not.toMatch(/\b\d+px\b/); }); + it("grows the root container to fill the project-content flex row", () => { + const rootBlock = extractRuleBlock(secretsViewCss, ".secrets-view"); + + expect(rootBlock).toMatch(/flex\s*:\s*1\s+1\s+auto/); + expect(rootBlock).toMatch(/width\s*:\s*100%/); + }); + it("keeps the mobile media block free of button and modal-close overrides", () => { const mobileCss = extractMobileMediaBlocks(secretsViewCss);