/* 公共认证布局:主题、顶部导航及登录/注册卡片。 */ /* 导入方:app/layouts/blank.vue。 */ .blank-layout { font-size: max(14px, 1rem); line-height: 1.6; } .auth-shell { border: 1px solid var(--p-content-border-color); background: var(--p-content-background); border-radius: 16px; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); width: min(880px, 100%); display: grid; overflow: hidden; box-shadow: 0 10px 30px #0f172a0f; } .auth-shell > .auth-card { width: 100%; min-width: 0; box-shadow: none; border: 0; border-radius: 0; align-self: center; } /* 认证卡片与品牌区域共同构成公共布局;窄屏覆盖将其收敛为可滚动内容。 */ .auth-card { border: 1px solid var(--p-content-border-color); background: var(--p-content-background); border-radius: 16px; width: min(480px, 100%); padding: 32px; box-shadow: 0 10px 30px #0f172a0f; } .auth-card h1 { text-align: center; margin: 0 0 12px; font-size: 1.71429em; font-weight: 600; line-height: 1.4; } .auth-card .login-brand { text-align: center; margin-bottom: 28px; } .auth-card .login-brand p { color: var(--p-text-muted-color); margin: 0; } .auth-card a { color: var(--p-primary-color); text-underline-offset: 3px; text-decoration: none; } .auth-card a:hover { text-decoration: underline; } .auth-card .bind-form, .auth-card .login-form { flex-direction: column; gap: 20px; display: flex; } .auth-card .field { flex-direction: column; gap: 8px; min-width: 0; display: flex; } .auth-card .field-label-row { justify-content: space-between; align-items: center; gap: 12px; display: flex; } .auth-card .field label, .auth-card .method-label, .auth-card legend { color: var(--p-text-color); font-size: 1em; font-weight: 500; } .auth-card .field-link { font-size: 1em; } .auth-card .p-inputtext { min-width: 0; min-height: 44px; padding: 10px 12px; font-size: 1em; line-height: 1.5; } .auth-card .p-password { font-size: 1em; } .auth-card .p-inputtext::placeholder { color: var(--p-text-muted-color); opacity: 1; } .auth-card .p-button { min-height: 44px; font-size: 1em; } .auth-card .p-message { font-size: 1em; } .auth-card .p-message-text { font-size: 1em; line-height: 1.6; } .auth-card .field .img { height: 44px; color: var(--p-text-color); } .auth-card .field .row > input { width: 0; min-width: 0; } .auth-card .login-btn { min-height: 44px; margin-top: 4px; } .auth-card .seg { background: var(--p-content-hover-background); border-radius: var(--radius-lg); gap: 4px; padding: 4px; display: flex; } .auth-card .seg button { min-height: 44px; color: var(--p-text-color); cursor: pointer; background: 0 0; border: 1px solid #0000; border-radius: var(--radius-md); flex: 1; padding: 8px; font-size: 1em; } .auth-card .seg button.active { border-color: var(--p-content-border-color); background: var(--p-content-background); color: var(--p-primary-color); font-weight: 600; box-shadow: 0 1px 3px #0f172a0f; } .auth-card .code-row { gap: 10px; display: flex; } .auth-card .code-row > input { flex: 1; width: 0; min-width: 0; } .auth-card .code-row > button { flex-shrink: 0; } .auth-card .login-links { justify-content: center; display: flex; } .auth-card .req { color: var(--p-red-600, #dc2626); } /* 视口条件 (width<=768px) 下的响应式覆盖;保留相对基础规则的层叠顺序。 */ @media (width<=768px) { .auth-shell { grid-template-columns: minmax(0, 1fr); width: min(480px, 100%); } .auth-card .p-inputtext { font-size: max(16px, 1em); } } /* 视口条件 (width<=480px) 下的响应式覆盖;保留相对基础规则的层叠顺序。 */ @media (width<=480px) { .auth-card { padding: 32px 24px; } } /* 视口条件 (width<=360px) 下的响应式覆盖;保留相对基础规则的层叠顺序。 */ @media (width<=360px) { .auth-card { padding: 28px 20px; } .auth-card .code-row { flex-wrap: wrap; } .auth-card .code-row > input { flex-basis: 100%; } .auth-card .code-row > button { width: 100%; } } .auth-card a.register-btn { width: 100%; color: var(--p-button-secondary-color); text-decoration: none; } .blank-layout[data-v-69ca9392] { min-height: 100dvh; color: var(--p-text-color); background: #f7fcff; } /* 应用深色主题覆盖,保持在基础颜色之后;主题切换只改变外观,不改变业务状态。 */ .app-dark .blank-layout { background: #09090b; } .auth-topbar[data-v-69ca9392] { background: var(--p-content-background); border-bottom: 1px solid var(--p-content-border-color); justify-content: space-between; height: 56px; padding: 0 14px; } .auth-logo[data-v-69ca9392], .auth-topbar[data-v-69ca9392] { align-items: center; display: flex; } .auth-logo[data-v-69ca9392] { color: var(--p-text-color); text-decoration: none; } .auth-logo img[data-v-69ca9392] { -o-object-fit: contain; object-fit: contain; width: 164px; height: auto; max-height: 34px; display: block; } .auth-top-actions[data-v-69ca9392] { align-items: center; gap: 14px; display: flex; } .auth-theme[data-v-69ca9392] { color: inherit; cursor: pointer; background: 0 0; border: 0; padding: 9px; } .auth-login[data-v-69ca9392] { color: #fff; background: var(--p-primary-color); border-radius: var(--radius-md); padding: 7px 10.5px; text-decoration: none; } .auth-main[data-v-69ca9392] { justify-content: center; align-items: center; min-height: calc(100dvh - 56px); padding: 28px 14px; display: flex; } /* 视口条件 (width<=640px) 下的响应式覆盖;保留相对基础规则的层叠顺序。 */ @media (width<=640px) { .auth-logo img[data-v-69ca9392] { width: 144px; } .auth-main[data-v-69ca9392] { padding: 21px 14px; } }