diff --git a/assets/css/routes/user-center/shell.css b/assets/css/routes/user-center/shell.css index 04d0a675..34b825fa 100644 --- a/assets/css/routes/user-center/shell.css +++ b/assets/css/routes/user-center/shell.css @@ -11,10 +11,21 @@ /* ==================== 用户中心容器 ==================== */ /* 主内容宽度由 frontend/layout.css 的 profile shell 合同统一管理。 */ -.user-center, .aksrt-profile.content-shell { width: 100%; + max-width: none; padding: 0 0 40px; + box-sizing: border-box; +} + +/* 顶部资料卡位于双栏布局之前,必须与用户中心外壳同宽,不能继续继承 + * legacy .content-wrap / .container 的收窄规则。 */ +.aksrt-profile.content-shell > .content-wrap, +.aksrt-profile.content-shell > .content-wrap > .uc-header, +.aksrt-profile.content-shell .uc-header { + width: 100%; + max-width: none; + box-sizing: border-box; } /* VIP, level and worn-medal marks share the global identity baseline. */ diff --git a/tests/widget-system/post-visual-contract.test.cjs b/tests/widget-system/post-visual-contract.test.cjs index 478c87e5..b5243fda 100644 --- a/tests/widget-system/post-visual-contract.test.cjs +++ b/tests/widget-system/post-visual-contract.test.cjs @@ -465,6 +465,8 @@ test('profile routes load versioned leaf styles and keep dialogs hidden initiall assert.equal(read('templates/pages/page-user-home.php').includes('aksrt-profile"'), false); assert.doesNotMatch(profileLayoutCss, /\.aksrt-profile\.content-shell\s*,[\s\S]*?max-width:\s*var\(--container/); assert.doesNotMatch(userCenterShellCss, /\.aksrt-user-center \.content-shell\s*,[\s\S]*?max-width:\s*var\(--container/); + assert.match(userCenterShellCss, /\.aksrt-profile\.content-shell\s*\{[\s\S]*?max-width:\s*none/); + assert.match(userCenterShellCss, /\.aksrt-profile\.content-shell > \.content-wrap,[\s\S]*?\.aksrt-profile\.content-shell \.uc-header\s*\{[\s\S]*?width:\s*100%;[\s\S]*?max-width:\s*none/); assert.match(profileLayoutCss, /\.aksrt-cover-menu__panel\[hidden\]\s*\{\s*display:\s*none\s*!important;\s*\}/); assert.match(profileLayoutCss, /#aksrt-bg-file-input\[hidden\],[\s\S]*?#aksrt-avatar-file-input\[hidden\][\s\S]*?display:\s*none\s*!important;/); assert.match(settingsSecurity, /data-modal="email-modal"[\s\S]*?<\/button>\s*<\/div>\s*