﻿/* ============================================
   登录页样式 - login.css
   ============================================
   作用：
   1. 搭建登录页“潜前门厅”的背景、玻璃卡、品牌门厅和认证表单。
   2. 维护登录 / 注册切换、粒子漂浮、轻呼吸等情绪化动画。
   3. 让认证页看起来像进入海前的观察舱，而不是普通后台登录框。
   阅读顺序：
   1. 页面舞台与玻璃卡
   2. 品牌门厅与表单区
   3. 背景氛围与动画
   4. 组件细节与响应式
*/

/* 文件导读：登录页样式很多，但主线很简单，就是“先营造门厅，再承接认证动作”。 */
/* 登录页整体背景与页面框架 */
.login-page {
    --login-stage-safe-gap-y: clamp(10px, 1.8vh, 18px);
    --login-stage-accent: rgba(175, 226, 245, 0.88);
    --login-stage-accent-soft: rgba(153, 206, 227, 0.34);
    --login-stage-border: rgba(211, 236, 247, 0.18);
    --login-stage-fog: rgba(11, 35, 54, 0.72);
    --login-stage-sheen: rgba(244, 250, 254, 0.12);
    --login-stage-min-height: min(
        524px,
        calc(100dvh - (var(--login-stage-safe-gap-y) * 2) - (clamp(14px, 2vw, 28px) * 2))
    );
    --login-stage-min-height-tablet: min(
        500px,
        calc(100dvh - (var(--login-stage-safe-gap-y) * 2) - (clamp(12px, 1.8vw, 22px) * 2))
    );
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow-x: hidden;
    overflow-y: auto;
    background: #0d2b44;
    color: #f5f5f5;
    font-family: "Noto Sans SC", "Source Han Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
}

/* 页面主舞台：page-stage 把登录舞台整体向右收一些，给左侧品牌门厅和海面留白预留空间。*/
.login-page .page-stage {
    min-height: 100vh;
    min-height: 100dvh;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding-top: max(clamp(12px, 2vh, 22px), var(--login-stage-safe-gap-y));
    padding-bottom: max(10px, var(--login-stage-safe-gap-y));
    padding-left: clamp(40px, 12vw, 240px);
    padding-right: clamp(20px, 6vw, 96px);
}

/* 登录舞台主容器：这里控制整块内容在视口中的宽度和外层留白，不让它变成普通居中的登录框。*/
.login-container {
    position: relative;
    z-index: 2;
    width: auto;
    max-width: calc(100vw - clamp(36px, 8vw, 160px));
    /* `min(920px, 62vw)`：理想宽度上限是 920px；如果屏幕更窄，就退到视口宽度的 62%。*/
    /* 这样做是为了保住左侧品牌门厅的留白，不让右侧表单把整页挤成普通后台登录框。*/
    /* `min(920px, 62vw)`：理想宽度上限是 920px。
       如果屏幕没有这么宽，就退到视口宽度的 62%，避免舞台显得又满又硬。*/
    /* 登录舞台的目标宽度最多到 920px，同时只占视口约 62%，避免整页像普通居中登录框。*/
    padding: clamp(12px, 1.6vw, 22px); /* 小屏收紧，大屏舒展，避免外层安全留白忽大忽小 */
    margin: 0;
    animation: login-shell-rise 0.78s cubic-bezier(0.2, 0.9, 0.24, 1) both;
}

/* 登录页的舞台调试入口：
   没有导航时，把入口收在右上角，避开深度计与主门厅。 */
.login-page .stage-debug-toggle {
    position: fixed;
    top: max(18px, var(--depth-gauge-top, 20px));
    right: calc(var(--depth-gauge-side, 3px) + 74px + 18px);
    z-index: 1110;
}

/* login-stage-shell：
   这层是整块“潜前门厅”的可调舞台。
   用户拖拽边缘时，我们只改这层的宽高，内部玻璃卡和表单布局继续按既有规则重排。 */
.login-stage-shell {
    --login-stage-width: min(860px, 58vw);
    --login-stage-height: auto;
    --login-stage-shift-x: 0px;
    --login-stage-shift-y: 0px;
    position: relative;
    width: var(--login-stage-width);
    max-width: min(1240px, calc(100vw - clamp(40px, 8vw, 160px)));
    min-width: 720px;
    height: var(--login-stage-height);
    min-height: var(--login-stage-min-height);
    margin: 0 auto;
    transform: translate3d(var(--login-stage-shift-x), var(--login-stage-shift-y), 0);
}

/* 登录页的尺寸 HUD 与拖拽句柄默认只留给调试态，
   正常进入门厅时不暴露“可编辑舞台”的语言。 */
.login-stage-hud,
.login-stage-resize-layer {
    display: none;
}

.yanqi-stage-debug .login-stage-hud {
    display: grid;
}

.yanqi-stage-debug .login-stage-resize-layer {
    display: block;
}

/* login-stage-hud：
   给潜前门厅补一层轻量的尺度反馈。它像漂在门厅上沿的小型仪表，
   告诉用户当前门厅大小，并提供回到默认尺度的入口。 */
.login-stage-hud {
    position: fixed;
    left: calc(var(--depth-gauge-side, 3px) + 74px + 18px);
    bottom: max(20px, var(--depth-gauge-bottom, 20px));
    z-index: 1100;
    display: none;
    width: min(220px, calc(100vw - 132px));
    gap: 8px;
    padding: 12px 14px;
    border-radius: 24px;
    border: 1px solid rgba(213, 238, 248, 0.16);
    background:
        linear-gradient(180deg, rgba(244, 250, 254, 0.16) 0%, rgba(170, 208, 225, 0.04) 100%),
        rgba(8, 27, 42, 0.66);
    box-shadow:
        0 16px 32px rgba(2, 12, 22, 0.24),
        0 0 24px rgba(111, 178, 208, 0.08),
        inset 0 1px 0 rgba(255, 255, 255, 0.12);
    backdrop-filter: blur(18px) saturate(136%);
    -webkit-backdrop-filter: blur(18px) saturate(136%);
    pointer-events: none;
    opacity: 0;
    filter: blur(12px);
    transform: translate3d(0, 12px, 0);
    transition:
        opacity 0.52s ease,
        transform 0.72s cubic-bezier(0.18, 0.84, 0.22, 1),
        filter 0.72s ease,
        border-color 220ms ease,
        box-shadow 220ms ease;
}

.login-page.is-entered .login-stage-hud {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0);
    transition-delay: 280ms;
}

body.page-transition-active .login-stage-hud {
    opacity: 0;
    pointer-events: none;
}

.login-stage-hud-copy {
    position: relative;
    display: grid;
    gap: 3px;
    min-width: 0;
    padding-left: 12px;
}

.login-stage-hud-copy::before {
    content: "";
    position: absolute;
    left: 0;
    top: 50%;
    width: 5px;
    height: 5px;
    border-radius: 999px;
    background: rgba(175, 221, 238, 0.56);
    box-shadow: 0 0 14px rgba(143, 210, 233, 0.32);
    transform: translateY(-50%);
    transition: background-color 220ms ease, box-shadow 220ms ease;
}

.login-stage-hud-label,
.login-stage-hud-hint {
    font-size: 0.66rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
}

.login-stage-hud-label {
    color: rgba(201, 226, 238, 0.62);
}

.login-stage-hud-value {
    color: #f4fbff;
    font-size: 0.84rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    white-space: nowrap;
    text-shadow: 0 8px 20px rgba(2, 16, 28, 0.24);
}

.login-stage-hud-hint {
    color: rgba(198, 223, 234, 0.52);
}

.login-stage-reset {
    appearance: none;
    -webkit-appearance: none;
    border: 1px solid rgba(211, 236, 247, 0.16);
    border-radius: 999px;
    background: linear-gradient(180deg, rgba(243, 251, 255, 0.14), rgba(129, 178, 201, 0.1));
    color: rgba(239, 248, 252, 0.88);
    min-height: 36px;
    width: 100%;
    padding: 0 14px;
    font-size: 0.76rem;
    letter-spacing: 0.08em;
    pointer-events: auto;
    cursor: pointer;
    transition:
        transform 220ms ease,
        border-color 220ms ease,
        background 220ms ease,
        color 220ms ease,
        opacity 220ms ease,
        box-shadow 220ms ease;
}

.login-stage-reset:hover,
.login-stage-reset:focus-visible {
    transform: translate3d(0, -1px, 0);
    border-color: rgba(220, 240, 248, 0.28);
    background: linear-gradient(180deg, rgba(243, 251, 255, 0.2), rgba(129, 178, 201, 0.16));
    color: #f8fdff;
    box-shadow:
        0 10px 22px rgba(4, 18, 30, 0.18),
        0 0 0 1px rgba(221, 241, 249, 0.08);
}

.login-stage-reset:focus-visible {
    outline: none;
}

.login-stage-reset:disabled {
    opacity: 0.54;
    cursor: default;
    transform: none;
    box-shadow: none;
}

.login-stage-shell[data-stage-size-mode="custom"] .login-stage-hud {
    border-color: rgba(209, 236, 247, 0.24);
    box-shadow:
        0 16px 32px rgba(2, 12, 22, 0.24),
        0 0 28px rgba(98, 166, 194, 0.12),
        inset 0 1px 0 rgba(255, 255, 255, 0.12);
}

.login-stage-shell[data-stage-size-mode="custom"] .login-stage-hud-copy::before {
    background: rgba(189, 235, 248, 0.88);
    box-shadow: 0 0 18px rgba(159, 223, 242, 0.4);
}

.login-stage-shell[data-stage-size-mode="custom"] .login-stage-hud-hint {
    color: rgba(216, 240, 248, 0.7);
}

/* login-stage-glow：
   拖拽时这层会一起跟着舞台尺寸变化，保持门厅边缘那层很淡的海雾光晕。 */
.login-stage-glow {
    position: absolute;
    inset: -16px -20px -22px;
    border-radius: 38px;
    background:
        radial-gradient(circle at 12% 18%, rgba(189, 229, 241, 0.22), transparent 30%),
        radial-gradient(circle at 84% 70%, rgba(111, 178, 208, 0.16), transparent 26%),
        radial-gradient(circle at 48% 100%, rgba(12, 46, 70, 0.24), transparent 54%);
    filter: blur(30px);
    opacity: 0.88;
    pointer-events: none;
    z-index: 0;
}

/* login-stage-resize-layer：
   这一层只负责接住拖拽动作。
   默认几乎隐身，hover 或拖拽时才轻微露出，不抢主舞台。 */
.login-stage-resize-layer {
    position: absolute;
    inset: -10px;
    z-index: 3;
    overflow: visible;
    pointer-events: none;
}

.login-stage-resize-handle {
    position: absolute;
    appearance: none;
    -webkit-appearance: none;
    border: none;
    padding: 0;
    margin: 0;
    background: transparent;
    pointer-events: auto;
    z-index: 1;
    touch-action: none;
    opacity: 0;
    transition: opacity 220ms ease, transform 220ms ease;
}

/* 拖拽点只在舞台 hover 或实际拖拽时显影，
   这样调试入口存在，但不会破坏门厅平时的完整感。 */
.login-stage-shell:hover .login-stage-resize-handle,
.login-stage-shell.is-resizing .login-stage-resize-handle {
    opacity: 1;
}

/* 所有拖拽点的公共视觉核心：
   真正可点的是 button，本体前面的微光胶囊只是给调试态一个轻量提示。 */
.login-stage-resize-handle::before {
    content: "";
    position: absolute;
    inset: 50%;
    transform: translate(-50%, -50%);
    border-radius: 999px;
    background: linear-gradient(180deg, rgba(209, 236, 248, 0.28), rgba(101, 156, 181, 0.16));
    box-shadow:
        0 0 0 1px rgba(185, 222, 239, 0.18),
        0 10px 22px rgba(6, 20, 32, 0.12);
}

/* 左右边缘手柄：允许单独调宽，不改门厅高度。 */
.login-stage-resize-handle.is-east,
.login-stage-resize-handle.is-west {
    top: 36px;
    bottom: 36px;
    width: 18px;
}

.login-stage-resize-handle.is-east {
    right: -10px;
    cursor: ew-resize;
}

.login-stage-resize-handle.is-west {
    left: -10px;
    cursor: ew-resize;
}

.login-stage-resize-handle.is-east::before,
.login-stage-resize-handle.is-west::before {
    width: 4px;
    height: 72px;
}

/* 上下边缘手柄：允许单独调高，保持左右边界稳定。 */
.login-stage-resize-handle.is-north,
.login-stage-resize-handle.is-south {
    left: 32px;
    right: 32px;
    height: 24px;
}

.login-stage-resize-handle.is-north {
    top: -14px;
    cursor: ns-resize;
}

.login-stage-resize-handle.is-south {
    bottom: -14px;
    cursor: ns-resize;
}

.login-stage-resize-handle.is-north::before,
.login-stage-resize-handle.is-south::before {
    width: 86px;
    height: 4px;
}

/* 四角手柄：允许同时改宽高，适合快速把门厅向某个方向整体放大或收紧。 */
.login-stage-resize-handle.is-north-east,
.login-stage-resize-handle.is-south-east,
.login-stage-resize-handle.is-south-west,
.login-stage-resize-handle.is-north-west {
    width: 30px;
    height: 30px;
}

.login-stage-resize-handle.is-north-east {
    top: -14px;
    right: -14px;
    cursor: nesw-resize;
}

/* 右下角：最符合桌面端“自由放大”直觉的入口，常用于把门厅向右下继续展开。 */
.login-stage-resize-handle.is-south-east {
    right: -14px;
    bottom: -14px;
    cursor: nwse-resize;
}

/* 左下角：和右下角成对，适合在保住顶部位置时回收左侧宽度。 */
.login-stage-resize-handle.is-south-west {
    left: -14px;
    bottom: -14px;
    cursor: nesw-resize;
}

/* 左上角：允许从顶部和左边一起收放，主要用于校正门厅在大屏里的靠位。 */
.login-stage-resize-handle.is-north-west {
    left: -14px;
    top: -14px;
    cursor: nwse-resize;
}

.login-stage-resize-handle.is-north-east::before,
.login-stage-resize-handle.is-south-east::before,
.login-stage-resize-handle.is-south-west::before,
.login-stage-resize-handle.is-north-west::before {
    width: 14px;
    height: 14px;
}

.login-stage-shell.is-resizing {
    user-select: none;
}

.login-page.is-resizing-login-stage {
    cursor: default;
}

.login-page.is-resizing-login-stage .glass-card {
    animation-play-state: paused;
}

/* 登录舞台外壳：
   glass-card 是整张“入海观察舱”，不是普通玻璃卡。
   这里的背景、阴影和模糊叠在一起，是为了做出更安静的深海门厅感。 */
.glass-card {
    position: relative;
    isolation: isolate;
    width: 100%;
    height: 100%;
    background:
        linear-gradient(145deg, rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0.06)),
        linear-gradient(180deg, rgba(141, 182, 206, 0.1), rgba(112, 156, 183, 0.04)),
        rgba(20, 39, 58, 0.2);
    backdrop-filter: blur(28px) saturate(128%);
    /* 毛玻璃不只是单纯模糊，还稍微提高一点饱和度和层次，避免背景变灰。*/
       /* 这样后面的海水颜色透过来时，仍然能保持清楚的深浅关系。*/
    -webkit-backdrop-filter: blur(28px) saturate(128%);
    border: 1px solid rgba(255, 255, 255, 0.24);
    border-radius: 28px;
    box-shadow:
        0 28px 64px rgba(3, 12, 21, 0.3),
        0 12px 24px rgba(5, 20, 34, 0.16),
        inset 0 1px 0 rgba(255, 255, 255, 0.28),
        inset 0 -1px 0 rgba(255, 255, 255, 0.06);
    overflow: hidden;
    transform-origin: center center;
    animation: glass-card-breathe 5.6s ease-in-out 1s infinite alternate;
}

.login-stage-divider {
    position: absolute;
    inset: 20px auto 20px 35%;
    width: 1px;
    background: linear-gradient(
        180deg,
        rgba(225, 242, 249, 0) 0%,
        rgba(225, 242, 249, 0.2) 20%,
        rgba(145, 199, 221, 0.18) 52%,
        rgba(225, 242, 249, 0) 100%
    );
    box-shadow: 0 0 24px rgba(136, 197, 223, 0.08);
    opacity: 0.82;
    pointer-events: none;
    transform: translateX(-0.5px);
    z-index: 1;
}

.login-stage-divider::before,
.login-stage-divider::after {
    content: "";
    position: absolute;
    top: 8%;
    bottom: 8%;
    width: 56px;
    pointer-events: none;
}

.login-stage-divider::before {
    right: -8px;
    background: linear-gradient(90deg, rgba(214, 238, 247, 0.12), transparent 78%);
    filter: blur(18px);
    opacity: 0.78;
}

.login-stage-divider::after {
    left: -8px;
    background: linear-gradient(90deg, transparent 18%, rgba(119, 187, 216, 0.12) 100%);
    filter: blur(18px);
    opacity: 0.56;
}

/* .glass-card::before：前置高光层，给观察舱加一层缓慢扫过的冷白雾光。*/
.glass-card::before {
    content: "";
    position: absolute;
    inset: 0;
    background:
        radial-gradient(circle at 14% 0%, rgba(255, 255, 255, 0.24), rgba(255, 255, 255, 0) 40%),
        radial-gradient(circle at 88% 100%, rgba(120, 176, 208, 0.1), rgba(120, 176, 208, 0) 34%),
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0) 38%);
    pointer-events: none;
    z-index: 0;
    animation: card-light-sweep 12s ease-in-out infinite;
}

/* .glass-card::after：后置纹理层，用细微流线和暗部梯度补足海水内部的层次。*/
.glass-card::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image:
        radial-gradient(circle at 20% 24%, rgba(255, 255, 255, 0.08) 0.8px, transparent 1px),
        radial-gradient(circle at 72% 64%, rgba(255, 255, 255, 0.06) 0.8px, transparent 1px),
        linear-gradient(120deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0) 34%);
    background-size: 4px 4px, 5px 5px, 100% 100%;
    opacity: 0.2;
    pointer-events: none;
    z-index: 0;
}

/* 左右分区布局：
   左边是品牌门厅，右边是认证动作。
   这里没有做 50/50 平分，而是明确让右侧获得更多空间，避免像普通宣传页双栏。 */
.card-layout {
    position: relative;
    z-index: 1;
    display: grid;
    grid-template-columns: minmax(270px, 35%) minmax(0, 65%);
    /* 左侧至少保留 205px 给品牌门厅，右侧把更多空间留给表单，避免变成平均分栏。*/
    min-height: var(--login-stage-min-height);
    height: 100%;
}

/* .glass-card.is-rippled .card-layout：卡片被点击反馈触发时，让内部布局跟着做一次轻微水波回弹。*/
.glass-card.is-rippled .card-layout {
    animation: card-water-feedback 0.34s ease-out;
}

/* 兼容不支持 backdrop-filter 的浏览器：退回更实的底色，保证内容依然清楚。*/
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
/* 这一层是模糊失效时的兜底背景，让玻璃卡仍然有足够对比度。*/
    .glass-card {
        background: rgba(245, 251, 255, 0.9);
    }
}

/* 左侧品牌门厅。
   负责让用户先进入盐憩的呼吸节奏，再去操作登录或注册。*/
.login-side {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: clamp(20px, 2.3vw, 32px);
    border-right: 1px solid rgba(255, 255, 255, 0.1);
    background:
        radial-gradient(circle at 24% 18%, rgba(255, 255, 255, 0.12) 0%, rgba(255, 255, 255, 0) 48%),
        linear-gradient(160deg, rgba(12, 39, 61, 0.56), rgba(8, 26, 41, 0.46));
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
}

/* .login-side::after：品牌区上的轻雾覆盖层，用来压住背景亮度并统一色调。*/
.login-side::after {
    content: "";
    position: absolute;
    inset: 0;
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0)),
        linear-gradient(135deg, rgba(163, 209, 229, 0.04), transparent 38%),
        linear-gradient(90deg, transparent 68%, rgba(165, 214, 233, 0.07) 100%);
    pointer-events: none;
}

.login-side-atmosphere {
    position: absolute;
    inset: 0;
    overflow: hidden;
    pointer-events: none;
}

.login-side-orbit {
    position: absolute;
    border-radius: 999px;
    border: 1px solid rgba(211, 238, 247, 0.1);
    opacity: 0.26;
}

.orbit-a {
    top: 10%;
    right: -22%;
    width: 280px;
    height: 280px;
    animation: ripple-pulse 18s ease-out infinite;
}

.orbit-b {
    bottom: 18%;
    left: -18%;
    width: 200px;
    height: 200px;
    animation: ripple-pulse 14s ease-out infinite 2.5s;
}

.orbit-c {
    top: 52%;
    right: 8%;
    width: 120px;
    height: 120px;
    animation: ripple-pulse 12s ease-out infinite 4s;
}

/* login-brand-copy：
   左侧品牌门厅只保留四层信息，作为进入盐憩前的一道安静签名。 */
.login-brand-copy {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;
    gap: 20px;
    width: min(352px, 100%);
}

.side-depth-tag {
    display: inline-flex;
    align-items: center;
    width: fit-content;
    margin: -4px 0 2px;
    padding: 6px 12px;
    border-radius: 999px;
    border: 1px solid rgba(209, 235, 246, 0.16);
    background:
        linear-gradient(180deg, rgba(244, 250, 254, 0.08), rgba(138, 194, 220, 0.04)),
        rgba(8, 31, 48, 0.28);
    color: rgba(236, 247, 252, 0.88);
    font-size: 0.72rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    box-shadow:
        0 12px 24px rgba(3, 14, 25, 0.14),
        inset 0 1px 0 rgba(255, 255, 255, 0.08);
    text-shadow: 0 6px 14px rgba(3, 14, 25, 0.18);
}

/* side-kicker：
   英文小标识只负责建立门厅语气，不抢品牌名的主锚点。 */
.side-kicker {
    margin: 0;
    font-size: 0.7rem;
    letter-spacing: 0.34em;
    text-transform: uppercase;
    color: rgba(236, 244, 249, 0.7);
}

/* .side-title：左侧品牌主标题，是整页唯一明确的品牌锚点。*/
.side-title {
    position: relative;
    z-index: 1;
    font-family: "Noto Serif SC", "Source Han Serif SC", "Songti SC", serif;
    font-size: clamp(3.1rem, 5.2vw, 4.9rem);
    letter-spacing: 0.12em;
    color: #f5f5f5;
    text-shadow:
        0 10px 30px rgba(2, 14, 25, 0.36),
        0 0 18px rgba(197, 230, 242, 0.08);
    margin: 0;
}

/* .side-title::after：品牌副标识，补充英文锚点和层级。*/
.side-title::after {
    content: none;
}

/* side-quote：
   这是品牌区最明确的一句引导，语气更稳、权重高于补充文案。 */
.side-quote {
    margin: 0;
    max-width: 13em;
    font-size: clamp(1.04rem, 1.12vw, 1.18rem);
    line-height: 1.7;
    color: rgba(247, 250, 252, 0.98);
    text-shadow: 0 8px 22px rgba(3, 15, 27, 0.16);
}

/* side-meta：
   最后一层补充文案只保留一句，帮助用户把岸上的节奏放下。 */
.side-meta {
    margin: -4px 0 0;
    max-width: 18em;
    font-size: 0.9rem;
    line-height: 1.72;
    color: rgba(233, 242, 247, 0.88);
}

.side-observatory {
    position: relative;
    margin-top: 12px;
    padding: 4px 0 2px;
    border-radius: 0;
    background:
        linear-gradient(90deg, rgba(216, 239, 247, 0.055), transparent 88%);
    border: 0;
    box-shadow: none;
    overflow: visible;
}

.side-observatory::before {
    content: none;
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background:
        linear-gradient(90deg, rgba(208, 235, 245, 0.045), transparent 34%),
        radial-gradient(circle at 82% 18%, rgba(217, 241, 249, 0.045), transparent 24%);
    pointer-events: none;
    opacity: 0.74;
}

.side-observatory::after {
    content: "";
    position: absolute;
    top: 44px;
    bottom: 8px;
    left: 0;
    width: 1px;
    background: linear-gradient(180deg, rgba(214, 239, 247, 0.08), rgba(116, 187, 218, 0.015));
    opacity: 0.44;
    pointer-events: none;
}

.side-observatory-title {
    position: relative;
    z-index: 1;
    margin: 0 0 10px;
    color: rgba(240, 248, 252, 0.82);
    font-size: 0.86rem;
    line-height: 1.62;
}

.side-observatory-grid {
    position: relative;
    z-index: 1;
    display: grid;
    gap: 0;
}

.side-observatory-item {
    position: relative;
    margin: 0;
    display: grid;
    grid-template-columns: minmax(38px, 0.34fr) minmax(0, 1fr);
    align-items: baseline;
    gap: 10px;
    padding: 7px 0 7px 14px;
    border-top: 1px solid rgba(214, 238, 247, 0.035);
    transition:
        color 260ms ease,
        border-color 260ms ease,
        transform 320ms cubic-bezier(0.2, 0.82, 0.24, 1),
        background 320ms ease;
}

.side-observatory-item::before {
    content: "";
    position: absolute;
    left: 0;
    top: 50%;
    width: 4px;
    height: 4px;
    border-radius: 999px;
    background: rgba(221, 243, 250, 0.68);
    box-shadow: 0 0 12px rgba(171, 226, 244, 0.18);
    transform: translate3d(-2px, -50%, 0);
    opacity: 0.28;
    transition:
        opacity 260ms ease,
        box-shadow 320ms ease,
        transform 320ms cubic-bezier(0.2, 0.82, 0.24, 1);
}

.side-observatory-item:first-child {
    border-top: none;
}

.side-observatory-label {
    color: rgba(216, 238, 246, 0.58);
    font-size: 0.66rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    transition: color 260ms ease;
}

.side-observatory-item strong {
    color: rgba(245, 250, 252, 0.78);
    font-size: 0.84rem;
    font-weight: 500;
    line-height: 1.46;
    transition: color 260ms ease, text-shadow 320ms ease;
}

.login-page[data-auth-progress-step="recognizing"] .side-observatory-item[data-observatory-item="entrance"],
.login-page[data-auth-progress-step="opening"] .side-observatory-item[data-observatory-item="rhythm"],
.login-page[data-auth-progress-step="keying"] .side-observatory-item[data-observatory-item="rhythm"],
.login-page[data-auth-progress-step="confirming"] .side-observatory-item[data-observatory-item="rhythm"],
.login-page[data-auth-progress-step="anchored"] .side-observatory-item[data-observatory-item="entrance"],
.login-page[data-auth-progress-step="accord"] .side-observatory-item[data-observatory-item="entrance"],
.login-page[data-auth-progress-step="ready"] .side-observatory-item[data-observatory-item="layer"] {
    border-color: rgba(218, 241, 249, 0.16);
    transform: translate3d(2px, 0, 0);
}

.login-page[data-auth-progress-step="recognizing"] .side-observatory-item[data-observatory-item="entrance"]::before,
.login-page[data-auth-progress-step="opening"] .side-observatory-item[data-observatory-item="rhythm"]::before,
.login-page[data-auth-progress-step="keying"] .side-observatory-item[data-observatory-item="rhythm"]::before,
.login-page[data-auth-progress-step="confirming"] .side-observatory-item[data-observatory-item="rhythm"]::before,
.login-page[data-auth-progress-step="anchored"] .side-observatory-item[data-observatory-item="entrance"]::before,
.login-page[data-auth-progress-step="accord"] .side-observatory-item[data-observatory-item="entrance"]::before,
.login-page[data-auth-progress-step="ready"] .side-observatory-item[data-observatory-item="layer"]::before {
    opacity: 0.9;
    transform: translate3d(-2px, -50%, 0) scale(1.2);
    box-shadow:
        0 0 12px rgba(200, 238, 249, 0.34),
        0 0 22px rgba(118, 195, 225, 0.16);
}

.login-page[data-auth-progress-step="recognizing"] .side-observatory-item[data-observatory-item="entrance"] strong,
.login-page[data-auth-progress-step="opening"] .side-observatory-item[data-observatory-item="rhythm"] strong,
.login-page[data-auth-progress-step="keying"] .side-observatory-item[data-observatory-item="rhythm"] strong,
.login-page[data-auth-progress-step="confirming"] .side-observatory-item[data-observatory-item="rhythm"] strong,
.login-page[data-auth-progress-step="anchored"] .side-observatory-item[data-observatory-item="entrance"] strong,
.login-page[data-auth-progress-step="accord"] .side-observatory-item[data-observatory-item="entrance"] strong,
.login-page[data-auth-progress-step="ready"] .side-observatory-item[data-observatory-item="layer"] strong {
    color: rgba(249, 253, 255, 0.98);
    text-shadow: 0 0 18px rgba(168, 224, 243, 0.14);
}

.side-waterline {
    position: relative;
    margin-top: 12px;
    display: grid;
    gap: 8px;
    padding-top: 10px;
}

.side-waterline::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 1px;
    background: linear-gradient(90deg, rgba(211, 238, 247, 0.08), transparent 76%);
    opacity: 0.52;
}

.side-waterline-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.side-waterline-label {
    color: rgba(212, 235, 244, 0.56);
    font-size: 0.66rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
}

.side-waterline-value {
    color: rgba(239, 249, 252, 0.72);
    font-size: 0.76rem;
    letter-spacing: 0.12em;
    transition: color 220ms ease, transform 320ms ease;
}

.side-waterline-track {
    position: relative;
    height: 8px;
    border-radius: 999px;
    overflow: hidden;
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(103, 158, 186, 0.03)),
        rgba(210, 238, 248, 0.07);
    border: 1px solid rgba(212, 238, 247, 0.055);
    transition: border-color 220ms ease, box-shadow 320ms ease, background-color 220ms ease;
}

.side-waterline-track::before,
.side-waterline-track::after {
    content: "";
    position: absolute;
    pointer-events: none;
}

.side-waterline-track::before {
    inset: 1px;
    border-radius: inherit;
    background:
        linear-gradient(90deg, rgba(255, 255, 255, 0.12), transparent 28%, rgba(255, 255, 255, 0.08) 56%, transparent 82%),
        repeating-linear-gradient(90deg, transparent 0 16px, rgba(216, 241, 249, 0.05) 16px 18px);
    opacity: 0.56;
}

.side-waterline-track::after {
    top: 1px;
    bottom: 1px;
    left: calc(var(--waterline-progress, 0%) - 10px);
    width: 22px;
    border-radius: 999px;
    background: radial-gradient(circle at 50% 50%, rgba(234, 249, 253, 0.52), rgba(152, 218, 240, 0.14) 44%, transparent 72%);
    opacity: 0;
    filter: blur(0.3px);
    transition: left 560ms cubic-bezier(0.2, 0.86, 0.24, 1), opacity 260ms ease;
}

.side-waterline-fill {
    position: absolute;
    inset: 1px;
    width: var(--waterline-progress, 0%);
    border-radius: inherit;
    background:
        linear-gradient(90deg, rgba(235, 247, 251, 0.78), rgba(174, 226, 243, 0.44) 52%, rgba(111, 190, 222, 0.28)),
        rgba(161, 216, 237, 0.22);
    box-shadow:
        0 0 18px rgba(164, 221, 239, 0.18),
        0 0 28px rgba(127, 196, 222, 0.08);
    opacity: 0.92;
    transform-origin: left center;
    transition:
        width 420ms cubic-bezier(0.2, 0.86, 0.24, 1),
        opacity 220ms ease,
        box-shadow 320ms ease,
        background 320ms ease,
        transform 320ms ease;
}

.side-waterline-fill::before {
    content: "";
    position: absolute;
    inset: -5px -16px;
    border-radius: inherit;
    background:
        linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.28), transparent 68%),
        radial-gradient(circle at 72% 50%, rgba(238, 251, 255, 0.28), transparent 42%);
    opacity: 0.48;
    transform: translate3d(-34%, 0, 0);
    animation: waterline-current 4.8s ease-in-out infinite;
}

.side-waterline-status {
    margin: 0;
    color: rgba(232, 243, 248, 0.68);
    font-size: 0.78rem;
    line-height: 1.55;
    min-height: 2.5em;
    transition: color 220ms ease, transform 320ms ease, opacity 320ms ease;
}

.login-page[data-auth-progress-state="active"] .side-waterline-track {
    border-color: rgba(188, 228, 242, 0.18);
    box-shadow:
        0 0 0 1px rgba(214, 238, 247, 0.03),
        0 0 20px rgba(125, 197, 224, 0.08),
        0 0 42px rgba(101, 174, 205, 0.07);
}

.login-page[data-auth-progress-state="active"] .side-waterline-track::after,
.login-page[data-auth-progress-state="complete"] .side-waterline-track::after {
    opacity: 0.82;
}

.login-page[data-auth-progress-state="complete"] .side-waterline-track {
    border-color: rgba(214, 239, 247, 0.24);
    box-shadow:
        0 0 0 1px rgba(224, 243, 250, 0.05),
        0 0 24px rgba(160, 222, 243, 0.12),
        0 0 48px rgba(119, 193, 224, 0.08);
}

.login-page[data-auth-progress-state="complete"] .side-waterline-fill {
    background:
        linear-gradient(90deg, rgba(236, 248, 252, 0.84), rgba(150, 213, 235, 0.42)),
        rgba(167, 222, 240, 0.28);
    box-shadow:
        0 0 20px rgba(179, 232, 248, 0.26),
        0 0 36px rgba(101, 177, 209, 0.12);
    transform: scaleY(1.04);
}

.login-page[data-auth-progress-state="complete"] .side-waterline-status {
    color: rgba(236, 247, 252, 0.9);
}

.login-page[data-auth-progress-state="active"] .side-waterline-value,
.login-page[data-auth-progress-state="complete"] .side-waterline-value {
    transform: translate3d(0, -1px, 0);
}

.side-waterline-track.is-pulsing .side-waterline-fill {
    animation: waterline-swell 620ms cubic-bezier(0.24, 0.82, 0.24, 1);
}

.side-waterline-value.is-updating {
    animation: status-breathe 340ms cubic-bezier(0.24, 0.82, 0.24, 1);
}

.side-waterline-status.is-updating {
    animation: status-breathe 360ms cubic-bezier(0.24, 0.82, 0.24, 1);
}

.login-page[data-auth-progress-step="recognizing"] .side-waterline-fill {
    opacity: 0.96;
}

.login-page[data-auth-progress-step="opening"] .side-waterline-fill,
.login-page[data-auth-progress-step="keying"] .side-waterline-fill,
.login-page[data-auth-progress-step="confirming"] .side-waterline-fill {
    box-shadow:
        0 0 18px rgba(174, 228, 245, 0.2),
        0 0 30px rgba(110, 184, 214, 0.1);
}

.login-page[data-auth-progress-step="anchored"] .side-waterline-track,
.login-page[data-auth-progress-step="accord"] .side-waterline-track,
.login-page[data-auth-progress-step="ready"] .side-waterline-track {
    border-color: rgba(217, 239, 247, 0.22);
}

/* 左侧四层文案分开出现。
   先看见门厅标识，再看见品牌名，最后才是呼吸提示。*/
.login-side .side-kicker,
.login-side .side-depth-tag,
.login-side .side-title,
.login-side .side-quote,
.login-side .side-meta,
.login-side .side-observatory,
.login-side .side-waterline {
    opacity: 0;
    animation: content-rise-in 0.72s cubic-bezier(0.2, 0.86, 0.24, 1) forwards;
}

.login-side .side-kicker {
    animation-delay: 0.12s;
}

.login-side .side-depth-tag {
    animation-delay: 0.18s;
}

.login-side .side-title {
    animation-delay: 0.28s;
}

.login-side .side-quote {
    animation-delay: 0.42s;
}

.login-side .side-meta {
    animation-delay: 0.56s;
}

.login-side .side-observatory {
    animation-delay: 0.7s;
}

.login-side .side-waterline {
    animation-delay: 0.82s;
}

/* 右侧认证区：
   承接登录 / 注册交互，但视觉上仍然保持“静水里的控制台”感。*/
.form-side {
    position: relative;
    padding: clamp(20px, 2.35vw, 30px) clamp(20px, 2.45vw, 30px) 8px;
}

.form-side::before {
    content: "";
    position: absolute;
    top: 10px;
    bottom: 10px;
    left: -34px;
    width: 72px;
    background:
        linear-gradient(90deg, rgba(198, 232, 243, 0.06), transparent 68%),
        radial-gradient(circle at 28% 50%, rgba(173, 221, 239, 0.12), transparent 62%);
    filter: blur(18px);
    opacity: 0.84;
    pointer-events: none;
}

.form-side::after {
    content: "";
    position: absolute;
    top: 18px;
    bottom: 18px;
    left: -6px;
    width: 64px;
    background:
        linear-gradient(90deg, rgba(7, 27, 42, 0.38), transparent 74%),
        radial-gradient(circle at 14% 50%, rgba(187, 228, 242, 0.08), transparent 62%);
    filter: blur(18px);
    opacity: 0.78;
    pointer-events: none;
}

/* 登录模式下的表单区：多给一点底部空间，避免按钮和底链显得太挤。*/
.login-page[data-auth-mode="login"] .form-side {
    padding-bottom: clamp(18px, 2.8vw, 26px);
}

.auth-panel-shell {
    position: relative;
    padding: 8px;
    border-radius: 24px;
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.035), rgba(164, 205, 223, 0.012)),
        rgba(5, 24, 38, 0.08);
    border: 1px solid rgba(212, 238, 247, 0.038);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.026),
        0 18px 36px rgba(3, 14, 23, 0.09),
        0 0 24px rgba(97, 170, 202, 0.02);
    overflow: hidden;
    animation: auth-shell-breathe 8.6s ease-in-out 1.2s infinite alternate;
}

.auth-panel-shell::after {
    content: none;
    position: absolute;
    inset: 0;
    background:
        radial-gradient(circle at 86% 16%, rgba(225, 243, 250, 0.08), transparent 24%),
        linear-gradient(180deg, rgba(255, 255, 255, 0.04), transparent 22%);
    opacity: 0.54;
    pointer-events: none;
}

.auth-panel-glass {
    position: absolute;
    inset: 4px;
    border-radius: 19px;
    background:
        radial-gradient(circle at 84% 14%, rgba(255, 255, 255, 0.035), transparent 26%),
        linear-gradient(180deg, rgba(17, 45, 65, 0.22), rgba(8, 26, 39, 0.14));
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.026),
        inset 0 -14px 34px rgba(2, 13, 23, 0.055);
    opacity: 0.82;
    pointer-events: none;
}

.auth-panel-inner {
    position: relative;
    z-index: 1;
    isolation: isolate;
    padding: clamp(16px, 1.8vw, 22px);
}

.auth-panel-inner::before {
    content: none;
    position: absolute;
    inset: clamp(64px, 8.2vw, 78px) 0 clamp(58px, 7vw, 72px);
    z-index: -1;
    border-radius: 20px;
    background:
        linear-gradient(180deg, rgba(6, 27, 44, 0.34), rgba(5, 22, 36, 0.26)),
        radial-gradient(circle at 50% 0%, rgba(226, 244, 250, 0.045), transparent 42%);
    border: 1px solid rgba(213, 238, 247, 0.045);
    box-shadow:
        0 16px 34px rgba(2, 13, 23, 0.08),
        inset 0 1px 0 rgba(255, 255, 255, 0.035);
    pointer-events: none;
}

.auth-waterline {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 16px;
    padding: 0 2px 9px;
    border-radius: 0;
    border: 0;
    border-bottom: 1px solid rgba(211, 236, 247, 0.06);
    background:
        linear-gradient(90deg, rgba(244, 250, 254, 0.035), transparent 72%);
    box-shadow: none;
    transition: transform 280ms ease, border-color 220ms ease, box-shadow 280ms ease;
}

.auth-waterline-kicker,
.auth-waterline-copy {
    margin: 0;
    font-size: 0.66rem;
    letter-spacing: 0.13em;
    text-transform: uppercase;
}

.auth-waterline-kicker {
    color: rgba(231, 244, 249, 0.62);
}

.auth-waterline-copy {
    color: rgba(209, 233, 242, 0.56);
    transition: color 240ms ease, transform 320ms ease, opacity 240ms ease;
}

/* .form-brand：承接右侧标题、小字和说明文案的整体容器。*/
.form-brand {
    margin-bottom: 16px;
}

/* .form-kicker：右侧认证区的小标题，用来建立“进入动作”层级。*/
.form-kicker {
    margin: 0 0 8px;
    font-size: 0.66rem;
    letter-spacing: 0.28em;
    text-transform: uppercase;
    color: rgba(241, 247, 250, 0.58);
}

/* .form-copy：登录态和注册态各自的说明文案容器。*/
.form-copy {
    display: none;
}

/* 根据当前模式只显示对应说明文案，避免登录和注册的文案同时占位。*/
.login-page[data-auth-mode="login"] .form-copy-login,
.login-page[data-auth-mode="register"] .form-copy-register {
    display: block;
}

/* .form-title：右侧当前动作标题，例如“欢迎回来”或“创建你的账户”。*/
.form-title {
    margin: 0;
    font-family: "Noto Serif SC", "Source Han Serif SC", "Songti SC", serif;
    font-size: clamp(1.5rem, 2.15vw, 1.9rem);
    font-weight: 600;
    line-height: 1.2;
    color: #f5f5f5;
}



/* .form-subtitle：右侧的辅助说明，负责把“进入盐憩”说得更柔和。*/
.form-subtitle {
    margin: 8px 0 0;
    max-width: 34em;
    font-size: 0.9rem;
    line-height: 1.68;
    color: rgba(235, 243, 248, 0.78);
}

.login-page[data-auth-progress-state="active"] .auth-waterline-copy {
    color: rgba(216, 237, 245, 0.8);
}

.login-page[data-auth-progress-step="opening"] .auth-waterline,
.login-page[data-auth-progress-step="keying"] .auth-waterline,
.login-page[data-auth-progress-step="confirming"] .auth-waterline {
    border-color: rgba(206, 235, 246, 0.16);
    box-shadow:
        0 14px 28px rgba(2, 12, 21, 0.14),
        0 0 24px rgba(123, 196, 223, 0.08),
        inset 0 1px 0 rgba(255, 255, 255, 0.08);
}

.login-page[data-auth-progress-step="anchored"] .auth-waterline,
.login-page[data-auth-progress-step="accord"] .auth-waterline,
.login-page[data-auth-progress-step="ready"] .auth-waterline {
    border-color: rgba(218, 239, 247, 0.2);
    transform: translate3d(0, -1px, 0);
}

/* ============================================
   Background
   ============================================ */

/* 背景氛围总容器：承接海水层、渐变层和漂浮装饰。*/
.bg-container {
    position: fixed;
    inset: 0;
    z-index: 1;
    pointer-events: none;
}

.login-atmosphere {
    position: absolute;
    inset: 0;
    overflow: hidden;
}

.atmosphere-haze,
.atmosphere-wave,
.atmosphere-current,
.atmosphere-ripple {
    position: absolute;
    display: block;
    border-radius: 999px;
    pointer-events: none;
}

.atmosphere-haze {
    filter: blur(26px);
    opacity: 0.48;
}

.atmosphere-haze.haze-a {
    top: 8%;
    left: -10%;
    width: 44vw;
    height: 24vh;
    background: radial-gradient(circle at 50% 50%, rgba(181, 223, 240, 0.22), transparent 70%);
    animation: atmosphere-drift-a 18s ease-in-out infinite;
}

.atmosphere-haze.haze-b {
    right: -12%;
    bottom: 6%;
    width: 42vw;
    height: 28vh;
    background: radial-gradient(circle at 50% 50%, rgba(102, 167, 199, 0.18), transparent 72%);
    animation: atmosphere-drift-b 22s ease-in-out infinite;
}

.atmosphere-wave {
    left: 50%;
    width: 120vw;
    height: 26vh;
    border: 1px solid rgba(203, 235, 248, 0.08);
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.03), transparent);
    filter: blur(1px);
    opacity: 0.48;
}

.wave-a {
    top: 10vh;
    transform: translateX(-52%) rotate(-5deg);
    animation: atmosphere-wave-float 20s linear infinite;
}

.wave-b {
    top: 34vh;
    transform: translateX(-48%) rotate(3deg);
    opacity: 0.32;
    animation: atmosphere-wave-float 24s linear infinite reverse;
}

.wave-c {
    bottom: 10vh;
    transform: translateX(-50%) rotate(-2deg);
    opacity: 0.24;
    animation: atmosphere-wave-float 28s linear infinite;
}

.atmosphere-current {
    width: clamp(220px, 24vw, 360px);
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(214, 239, 247, 0.18), transparent);
    box-shadow: 0 0 16px rgba(174, 219, 237, 0.08);
    opacity: 0.44;
}

.current-a {
    --current-angle: -12deg;
    top: 22%;
    left: 10%;
    transform: rotate(-12deg);
    animation: current-drift 12s ease-in-out infinite;
}

.current-b {
    --current-angle: 8deg;
    top: 48%;
    right: 8%;
    transform: rotate(8deg);
    animation: current-drift 14s ease-in-out infinite reverse;
}

.current-c {
    --current-angle: -6deg;
    bottom: 18%;
    left: 26%;
    transform: rotate(-6deg);
    animation: current-drift 16s ease-in-out infinite;
}

.atmosphere-ripple {
    border: 1px solid rgba(223, 241, 248, 0.12);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
    opacity: 0.24;
}

.ripple-a {
    top: 16%;
    right: 14%;
    width: 240px;
    height: 240px;
    animation: ripple-pulse 14s ease-out infinite;
}

.ripple-b {
    bottom: 8%;
    left: 6%;
    width: 320px;
    height: 320px;
    animation: ripple-pulse 18s ease-out infinite 3s;
}

/* 背景主水体层：用纵向渐变和顶部微光打出“海面下第一层静水”的底色。*/
.gradient-bg {
    position: absolute;
    inset: 0;
    background:
        radial-gradient(circle at 50% -10%, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 32%),
        radial-gradient(circle at 20% 14%, rgba(128, 193, 223, 0.1), transparent 28%),
        linear-gradient(180deg, rgba(6, 24, 38, 0.26) 0%, rgba(13, 43, 68, 0.66) 46%, rgba(7, 28, 45, 0.9) 100%);
    animation: gradient-shift 14s ease-in-out infinite;
}

/* .gradient-bg::before：背景主图层，把潜点图压暗后融进整页水体。*/
.gradient-bg::before {
    content: "";
    position: absolute;
    inset: 0;
    background:
        linear-gradient(180deg, rgba(2, 14, 24, 0.18) 0%, rgba(4, 24, 40, 0.34) 32%, rgba(7, 31, 50, 0.72) 100%),
        url("../assets/images/sipadan.jpg") center center / cover no-repeat;
    transform: scale(1.05);
    filter: saturate(0.48) contrast(0.96) brightness(0.42);
}

/* .gradient-bg::after：顶部水光层，补一层很弱的海面折射感。*/
.gradient-bg::after {
    content: "";
    position: absolute;
    inset: 0;
    background:
        radial-gradient(circle at 22% 14%, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0) 16%),
        linear-gradient(180deg, rgba(116, 177, 214, 0.06), rgba(5, 35, 62, 0.12));
    opacity: 0.92;
    mix-blend-mode: screen;
    animation: sea-light-sweep 18s ease-in-out infinite;
}

/* 定义 gradient-shift 动画的关键帧 */
@keyframes gradient-shift {
/* gradient-shift 在 0% 和 100%：回到初始位置，形成完整呼吸循环。 */
    0%,
    100% {
        transform: scale(1) translate3d(0, 0, 0);
    }
/* gradient-shift 在 50%：轻微放大并平移，让背景像水体一样缓慢漂移。 */
    50% {
        transform: scale(1.025) translate3d(-1.2%, 0.8%, 0);
    }
}

/* 定义 sea-light-sweep 动画的关键帧 */
@keyframes sea-light-sweep {
/* sea-light-sweep 。0% 。100%：保持原位，作为一轮水光循环的起点和终点。*/
    0%,
    100% {
        transform: translate3d(0, 0, 0) scale(1);
        opacity: 0.82;
    }
/* sea-light-sweep 。50%：轻微偏移并放大，让光感像在水里慢慢滑过。*/
    50% {
        transform: translate3d(1.4%, -1.2%, 0) scale(1.04);
        opacity: 1;
    }
}

/* .salt-particles：承载背景里缓慢漂浮的小颗粒。*/
.salt-particles {
    position: absolute;
    width: 100%;
    height: 100%;
}

/* 单颗粒子：设置背景里漂浮粒子的基础外观和动画参数组*/
.particle {
    position: absolute;
    background: radial-gradient(circle, rgba(255, 255, 255, 0.82) 0%, rgba(255, 255, 255, 0.16) 100%);
    border-radius: 50%;
    opacity: 0.24;
    filter: blur(0.4px);
    mix-blend-mode: screen;
    animation: float-up 14s ease-in-out infinite;
}

/* 第 1 颗粒子：较大、偏左、节奏更快一点。 */
.particle:nth-child(1) {
    width: 20px;
    height: 20px;
    left: 10%;
    bottom: -50px;
    animation-delay: 0s;
    animation-duration: 10s;
}

/* 。2 颗粒子：尺寸较小，延迟一点出现。*/
.particle:nth-child(2) {
    width: 15px;
    height: 15px;
    left: 25%;
    bottom: -50px;
    animation-delay: 1s;
    animation-duration: 12s;
}

/* 。3 颗粒子：尺寸更大，用来补足中间区域的漂浮层次。*/
.particle:nth-child(3) {
    width: 25px;
    height: 25px;
    left: 40%;
    bottom: -50px;
    animation-delay: 2s;
    animation-duration: 14s;
}

/* 。4 颗粒子：落在偏右位置，避免画面左重右轻。*/
.particle:nth-child(4) {
    width: 18px;
    height: 18px;
    left: 55%;
    bottom: -50px;
    animation-delay: 0.5s;
    animation-duration: 11s;
}

/* 。5 颗粒子：补足右侧偏中的漂浮层次。*/
.particle:nth-child(5) {
    width: 22px;
    height: 22px;
    left: 70%;
    bottom: -50px;
    animation-delay: 1.5s;
    animation-duration: 13s;
}

/* 。6 颗粒子：更小、更慢，作为边缘的细碎气泡感。*/
.particle:nth-child(6) {
    width: 16px;
    height: 16px;
    left: 85%;
    bottom: -50px;
    animation-delay: 3s;
    animation-duration: 15s;
}

/* 。7 颗粒子：回到左侧区域，避免漂浮分布失衡。*/
.particle:nth-child(7) {
    width: 20px;
    height: 20px;
    left: 15%;
    bottom: -50px;
    animation-delay: 2.5s;
    animation-duration: 11.5s;
}

/* 。8 颗粒子：放在中部，补一点均匀的漂浮密度。*/
.particle:nth-child(8) {
    width: 18px;
    height: 18px;
    left: 50%;
    bottom: -50px;
    animation-delay: 1s;
    animation-duration: 12.5s;
}

/* 。9 颗粒子：尺寸更大一些，让右侧背景不显得空。*/
.particle:nth-child(9) {
    width: 24px;
    height: 24px;
    left: 75%;
    bottom: -50px;
    animation-delay: 2s;
    animation-duration: 10.5s;
}

/* 。10 颗粒子：靠左中部的小粒子，用来打散节奏。*/
.particle:nth-child(10) {
    width: 17px;
    height: 17px;
    left: 30%;
    bottom: -50px;
    animation-delay: 0.2s;
    animation-duration: 14.5s;
}

/* 定义 float-up 动画的关键帧 */
@keyframes float-up {
/* float-up 。0%：粒子从画面底部、较小且透明的状态开始。*/
    0% {
        transform: translate3d(0, 0, 0) scale(0.92);
        opacity: 0;
    }
/* float-up 在 10%：先快速露出一点存在感，避免粒子突然冒出来。 */
    10% {
        opacity: 0.48;
    }
/* float-up 。90%：准备离场前先降低透明度，让上浮更柔和。*/
    90% {
        opacity: 0.28;
    }
/* float-up 。100%：沿对角线漂出视口，同时略微放大，像气泡散掉。*/
    100% {
        transform: translate3d(42px, -118vh, 0) scale(1.18);
        opacity: 0;
    }
}

/* ============================================
   Tabs and Form
   ============================================ */

/* .tab-section：包住登录 / 注册切换器的外层。 */
.tab-section {
    margin-bottom: 10px;
}

/* .tabs：登录 / 注册分段控制器的整体玻璃底板。*/
.tabs {
    position: relative;
    isolation: isolate;
    display: flex;
    gap: 6px;
    padding: 3px;
    border-radius: 17px;
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.035), rgba(178, 213, 229, 0.015)),
        rgba(7, 29, 45, 0.12);
    border: 1px solid rgba(255, 255, 255, 0.045);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.05),
        0 6px 14px rgba(8, 37, 63, 0.055);
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    overflow: hidden;
}

.tabs::before {
    content: none;
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background:
        radial-gradient(circle at 20% 50%, rgba(216, 239, 248, 0.045), transparent 26%),
        radial-gradient(circle at 84% 54%, rgba(137, 200, 226, 0.05), transparent 24%);
    opacity: 0.74;
    pointer-events: none;
}

/* 登录 / 注册切换按钮：控制分段按钮的外观、边界和状态过渡。 */
.tab-btn {
    flex: 1;
    position: relative;
    z-index: 1;
    border: 1px solid transparent;
    border-radius: 15px;
    min-height: 48px;
    padding: 10px 12px;
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.02), rgba(122, 174, 198, 0.02)),
        rgba(255, 255, 255, 0.01);
    color: rgba(231, 240, 247, 0.8);
    font-weight: 600;
    font-size: 0.95rem;
    transition:
        color var(--transition-fast),
        border-color var(--transition-fast),
        background var(--transition-fast),
        box-shadow var(--transition-fast),
        transform var(--transition-fast),
        filter var(--transition-fast);
    cursor: pointer;
}

/* .tab-btn:hover：鼠标移入时轻微提亮，提示可以切换。*/
.tab-btn:hover {
    color: rgba(244, 250, 253, 0.92);
    border-color: rgba(202, 232, 244, 0.12);
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(154, 206, 228, 0.05)),
        rgba(255, 255, 255, 0.03);
    transform: translate3d(0, -1px, 0);
}

.tab-btn:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px rgba(96, 180, 220, 0.16);
}

/* 当前入口被选中时，不做纯白分段块，而像静水层被轻轻推开。*/
.tab-btn.active,
.tab-btn[aria-selected="true"] {
    background:
        linear-gradient(180deg, rgba(247, 251, 253, 0.13), rgba(156, 207, 229, 0.075)),
        rgba(228, 243, 249, 0.035);
    color: rgba(246, 251, 253, 0.96);
    border-color: rgba(220, 240, 248, 0.16);
    box-shadow:
        0 8px 16px rgba(6, 31, 51, 0.08),
        0 0 10px rgba(130, 199, 225, 0.045),
        inset 0 1px 0 rgba(255, 255, 255, 0.11);
    transform: translate3d(0, -1px, 0) scale(1.008);
    filter: saturate(1.04);
}

.login-page.is-switching .tab-btn[aria-selected="true"] {
    box-shadow:
        0 14px 26px rgba(6, 31, 51, 0.18),
        0 0 22px rgba(130, 199, 225, 0.12),
        inset 0 1px 0 rgba(255, 255, 255, 0.26);
}

/* .auth-form：表单总容器，负责承接登录 / 注册两层内容和高度变化。*/
.auth-form {
    position: relative;
    isolation: isolate;
    margin-top: 0;
    margin-bottom: 10px;
    padding: 4px 4px 8px;
    border-radius: 14px;
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.018), transparent 52%);
    border: 0;
    box-shadow: none;
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    transition:
        min-height 0.56s cubic-bezier(0.2, 0.9, 0.24, 1),
        border-color 260ms ease,
        box-shadow 320ms ease,
        background 320ms ease;
    /* 登录和注册字段数量不同，这里只过渡 min-height，让卡片高度变化更平滑。*/
}

.auth-form::before {
    content: none;
    position: absolute;
    inset: 1px;
    z-index: -1;
    border-radius: inherit;
    background:
        radial-gradient(circle at 22% 8%, rgba(231, 247, 252, 0.045), transparent 28%),
        linear-gradient(90deg, rgba(214, 239, 247, 0.03), transparent 54%);
    pointer-events: none;
}

.login-page.is-field-focus .auth-form,
.login-page[data-auth-progress-state="complete"] .auth-form {
    box-shadow: none;
}

.auth-entry-form {
    min-height: auto;
}

.entry-panel {
    position: relative;
    padding: 18px 18px 20px;
    border-radius: 22px;
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.11), rgba(196, 220, 237, 0.06)),
        rgba(10, 41, 66, 0.2);
    border: 1px solid rgba(255, 255, 255, 0.12);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.16),
        0 20px 44px rgba(4, 17, 28, 0.18);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
}

.entry-intro {
    margin-bottom: 18px;
}

.entry-kicker {
    margin: 0 0 10px;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    font-size: 0.72rem;
    color: rgba(189, 223, 240, 0.72);
}

.entry-copy {
    margin: 0;
    color: rgba(231, 239, 245, 0.76);
    line-height: 1.72;
    font-size: 0.96rem;
}

.entry-actions {
    display: grid;
    gap: 12px;
}

.entry-secondary-button {
    width: 100%;
    min-height: clamp(44px, 5vw, 50px);
    border-radius: 999px;
    border: 1px solid rgba(255, 255, 255, 0.16);
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.1), rgba(196, 220, 237, 0.05)),
        rgba(33, 73, 104, 0.2);
    color: rgba(238, 246, 251, 0.9);
    font-weight: 600;
    cursor: pointer;
    transition: transform 0.28s ease, border-color 0.28s ease, box-shadow 0.28s ease, color 0.28s ease;
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.14),
        0 12px 28px rgba(4, 19, 31, 0.18);
}

.entry-secondary-button:hover {
    transform: translate3d(0, -2px, 0);
    border-color: rgba(152, 214, 244, 0.44);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.18),
        0 16px 32px rgba(3, 19, 31, 0.22),
        0 0 22px rgba(91, 175, 216, 0.12);
    color: #f7fbfe;
}

.entry-note {
    padding-top: 2px;
}

/* .tab-content：单个表单面板的默认隐藏状态，先收起透明度、位移和模糊。*/
.tab-content {
    position: absolute;
    inset: 0;
    visibility: hidden;
    pointer-events: none; /* 隐藏的表单层不能接收点击或参与输入。*/
    opacity: 0;
    transform: translate3d(0, 16px, 0) scale(0.985);
    filter: blur(6px);
}

/* .tab-content.active：当前表单层进入前台，恢复可见和可交互状态。*/
.tab-content.active {
    position: relative;
    visibility: visible;
    pointer-events: auto;
    opacity: 1;
    transform: translate3d(0, 0, 0) scale(1);
    filter: blur(0);
}

/* .tab-content.is-entering：新表单切入前台时的入场状态。*/
.tab-content.is-entering {
    animation: tab-content-enter 0.56s cubic-bezier(0.2, 0.82, 0.24, 1) both;
}

/* .tab-content.is-leaving：旧表单离场时暂时保留一层退后动画。*/
.tab-content.is-leaving {
    position: absolute;
    inset: 0;
    visibility: visible;
    pointer-events: none;
    animation: tab-content-leave 0.52s cubic-bezier(0.45, 0.03, 0.58, 0.99) both;
}

/* 定义 tab-content-enter 动画的关键帧 */
@keyframes tab-content-enter {
/* tab-content-enter 。0%：新表单从略微下沉和模糊的状态开始靠近。*/
    0% {
        opacity: 0;
        transform: translate3d(0, 18px, 0) scale(0.987);
        filter: blur(8px);
    }
/* tab-content-enter 。100%：新表单回到清晰、稳定的阅读位置*/
    100% {
        opacity: 1;
        transform: translate3d(0, 0, 0) scale(1);
        filter: blur(0);
    }
}

/* 定义 tab-content-leave 动画的关键帧 */
@keyframes tab-content-leave {
/* tab-content-leave 。0%：旧表单先从当前稳定状态开始离场。*/
    0% {
        opacity: 1;
        transform: translate3d(0, 0, 0) scale(1);
        filter: blur(0);
    }
/* tab-content-leave 。100%：旧表单上移并模糊，像退回同一层静水后方。*/
    100% {
        opacity: 0;
        transform: translate3d(0, -10px, 0) scale(0.982);
        filter: blur(7px);
    }
}

/* .input-group：单个输入项容器，负责 label、输入框和状态过渡。*/
.input-group {
    position: relative;
    margin-bottom: 10px;
    transition: transform 0.24s ease;
}

.input-group::before,
.input-group::after {
    content: "";
    position: absolute;
    pointer-events: none;
    opacity: 0;
    transition:
        opacity 260ms ease,
        transform 360ms cubic-bezier(0.2, 0.82, 0.24, 1);
}

.input-group::before {
    left: 8px;
    right: 8px;
    bottom: 0;
    height: 44px;
    border-radius: 14px;
    background:
        radial-gradient(ellipse at 24% 50%, rgba(220, 244, 252, 0.075), transparent 52%),
        linear-gradient(90deg, rgba(104, 183, 216, 0.045), transparent 72%);
    filter: blur(10px);
    transform: translate3d(0, 4px, 0) scaleX(0.96);
}

.input-group::after {
    left: 16px;
    right: 16px;
    bottom: 11px;
    height: 1px;
    border-radius: 999px;
    background: linear-gradient(90deg, transparent, rgba(226, 246, 252, 0.42), transparent);
    transform: translate3d(-16px, 0, 0) scaleX(0.68);
}

/* 输入项标签：控制字段标题的字重、颜色和上下间距。*/
.input-group label {
    position: relative;
    z-index: 1;
    display: block;
    margin-bottom: 7px;
    font-size: 0.86rem;
    font-weight: 600;
    color: rgba(242, 247, 251, 0.9);
    transition: color 0.3s ease, letter-spacing 0.3s ease;
}

/* 输入框本体：设置玻璃质感、圆角、阴影和聚焦过渡。*/
.input-group input {
    position: relative;
    z-index: 1;
    width: 100%;
    border: 1px solid rgba(218, 239, 247, 0.095);
    border-radius: 12px;
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.075), rgba(191, 218, 234, 0.04)),
        rgba(9, 33, 52, 0.18);
    padding: 11px 13px;
    color: rgba(244, 250, 253, 0.94);
    caret-color: rgba(222, 245, 252, 0.92);
    font-size: 0.92rem;
    transition:
        transform var(--transition-fast),
        border-color var(--transition-fast),
        box-shadow var(--transition-fast),
        background var(--transition-fast),
        color var(--transition-fast);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.07),
        0 8px 16px rgba(3, 15, 26, 0.075),
        0 0 0 1px rgba(211, 238, 247, 0.035);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    transform: translate3d(0, 0, 0);
    will-change: transform, box-shadow, border-color;
    transform-origin: center center;
    backface-visibility: hidden;
}

.input-group.is-filled input {
    border-color: rgba(202, 232, 243, 0.18);
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(177, 212, 229, 0.05)),
        rgba(7, 29, 46, 0.28);
    color: rgba(250, 253, 255, 0.98);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.09),
        0 10px 20px rgba(4, 17, 28, 0.1),
        0 0 0 1px rgba(198, 231, 243, 0.035);
}

.input-group.is-filled::before {
    opacity: 0.38;
    transform: translate3d(0, 1px, 0) scaleX(1);
}

.input-group.is-complete input {
    border-color: rgba(190, 229, 243, 0.34);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.14),
        0 0 0 1px rgba(165, 221, 240, 0.07),
        0 14px 24px rgba(4, 17, 28, 0.16),
        0 0 24px rgba(120, 198, 228, 0.07);
}

.input-group.is-complete label {
    color: rgba(234, 246, 251, 0.94);
}

.input-group input.is-invalid {
    border-color: rgba(255, 170, 170, 0.42);
    box-shadow:
        0 0 0 3px rgba(201, 111, 111, 0.12),
        0 14px 24px rgba(30, 10, 14, 0.18);
}

.input-group.is-invalid label {
    color: rgba(248, 229, 234, 0.92);
}

/* .input-group:focus-within：字段被聚焦时，整组内容轻微上提。*/
.input-group:focus-within {
    transform: translate3d(0, -3px, 0);
}

.input-group:focus-within::before {
    opacity: 0.54;
    transform: translate3d(0, -1px, 0) scaleX(1.02);
}

.input-group:focus-within::after {
    opacity: 0.82;
    transform: translate3d(0, 0, 0) scaleX(1);
}

/* 聚焦时同步提。label，让用户更容易感知当前输入位置*/
.input-group:focus-within label {
    color: rgba(233, 248, 252, 0.98);
    letter-spacing: 0.01em;
}

/* 输入框聚焦状态：不是系统蓝边，而是更柔和的海水提亮。*/
.input-group input:focus {
    outline: none;
    transform: translate3d(0, -2px, 0) scale(1.002);
    border-color: rgba(176, 229, 248, 0.42);
    box-shadow:
        0 0 0 2px rgba(111, 195, 228, 0.07),
        0 0 18px rgba(105, 189, 224, 0.09),
        0 12px 24px rgba(3, 18, 29, 0.14);
    background:
        radial-gradient(ellipse at 18% 0%, rgba(229, 247, 253, 0.085), transparent 46%),
        linear-gradient(180deg, rgba(255, 255, 255, 0.11), rgba(196, 226, 239, 0.06)),
        rgba(13, 43, 64, 0.3);
}

/* 输入框 placeholder：弱化提示文字，避免和真实输入内容抢层级。*/
.input-group input::placeholder {
    color: rgba(231, 241, 247, 0.72);
    transition: color 0.28s ease, opacity 0.28s ease;
}

/* 聚焦时进一步淡化 placeholder，把视觉优先级让给真实输入。*/
.input-group input:focus::placeholder {
    color: rgba(231, 239, 246, 0.38);
    opacity: 0.52;
}

.input-group.is-invaliding input {
    animation: field-invalid-jolt 320ms cubic-bezier(0.34, 0.84, 0.28, 1);
}

.input-group.is-invaliding label {
    animation: invalid-label-drift 300ms cubic-bezier(0.34, 0.84, 0.28, 1);
}

/* 复选区域：控制“记住我 / 协议”这一行的横向排布和间距。*/
.checkbox-group {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: 5px 0 12px;
    transition: transform 0.24s ease;
}

.checkbox-group:focus-within {
    transform: translate3d(0, -1px, 0);
}

/* 原生复选框：这里只保留点击能力和基础尺寸，视觉重点交给整行文案。*/
.checkbox-group input[type="checkbox"] {
    appearance: none;
    -webkit-appearance: none;
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 30px;
    width: 30px;
    height: 18px;
    border-radius: 999px;
    border: 1px solid rgba(211, 236, 247, 0.22);
    background:
        linear-gradient(180deg, rgba(248, 251, 253, 0.12), rgba(140, 194, 216, 0.05)),
        rgba(7, 27, 42, 0.34);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.08),
        0 8px 18px rgba(3, 14, 23, 0.12);
    cursor: pointer;
    transition:
        transform 220ms ease,
        border-color 220ms ease,
        background 220ms ease,
        box-shadow 220ms ease;
    transform-origin: center center;
    backface-visibility: hidden;
}

.checkbox-group input[type="checkbox"]::before {
    content: "";
    position: absolute;
    inset: 2px;
    border-radius: inherit;
    background:
        linear-gradient(180deg, rgba(247, 251, 253, 0.14), rgba(149, 205, 228, 0.03)),
        rgba(10, 33, 51, 0.36);
    opacity: 0.92;
    transition: opacity 220ms ease, background 220ms ease;
}

.checkbox-group input[type="checkbox"]::after {
    content: "";
    position: absolute;
    left: 3px;
    top: 50%;
    width: 10px;
    height: 10px;
    border-radius: 999px;
    background: rgba(232, 247, 252, 0.88);
    box-shadow: 0 0 14px rgba(176, 230, 247, 0.28);
    transform: translate3d(0, -50%, 0);
    transition: transform 220ms ease, background 220ms ease, box-shadow 220ms ease;
}

.checkbox-group input[type="checkbox"]:hover,
.checkbox-group input[type="checkbox"]:focus-visible {
    border-color: rgba(186, 228, 243, 0.34);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.1),
        0 0 0 3px rgba(110, 194, 229, 0.12),
        0 10px 22px rgba(3, 14, 23, 0.14);
}

.checkbox-group input[type="checkbox"]:focus-visible {
    outline: none;
}

.checkbox-group input[type="checkbox"]:checked {
    border-color: rgba(190, 232, 246, 0.38);
    background:
        linear-gradient(180deg, rgba(242, 250, 253, 0.22), rgba(152, 210, 232, 0.16)),
        rgba(69, 132, 163, 0.34);
}

.checkbox-group input[type="checkbox"]:checked::before {
    background:
        linear-gradient(180deg, rgba(245, 252, 254, 0.2), rgba(158, 214, 236, 0.08)),
        rgba(45, 101, 132, 0.38);
}

.checkbox-group input[type="checkbox"]:checked::after {
    transform: translate3d(12px, -50%, 0);
    background: rgba(246, 251, 253, 0.96);
    box-shadow:
        0 0 16px rgba(188, 236, 249, 0.34),
        0 2px 8px rgba(8, 30, 47, 0.18);
}

.checkbox-group input[type="checkbox"].is-invalid {
    outline: 2px solid rgba(255, 177, 177, 0.36);
    outline-offset: 2px;
}

/* .checkbox-label：显示复选项说明文字，避免这一行显得像系统表单。*/
.checkbox-label {
    font-size: 0.86rem;
    color: rgba(233, 242, 248, 0.82);
    user-select: none;
    line-height: 1.48;
    transition: color 220ms ease;
}

.checkbox-group.is-invalid .checkbox-label {
    color: rgba(248, 231, 236, 0.9);
}

.checkbox-group.is-invaliding input[type="checkbox"] {
    animation: checkbox-invalid-jolt 280ms cubic-bezier(0.34, 0.84, 0.28, 1);
}

.checkbox-group.is-invaliding .checkbox-label {
    animation: invalid-label-drift 280ms cubic-bezier(0.34, 0.84, 0.28, 1);
}

.checkbox-group.is-complete .checkbox-label {
    color: rgba(236, 246, 251, 0.84);
}

/* .checkbox-label a：弱化的辅助链接，用于协议等次级入口。*/
.checkbox-label a {
    color: rgba(188, 228, 243, 0.94);
}

.auth-feedback {
    margin-bottom: 10px;
    padding: 10px 12px;
    border-radius: 18px;
    border: 1px solid rgba(211, 236, 247, 0.08);
    background:
        linear-gradient(180deg, rgba(244, 250, 254, 0.06), rgba(138, 194, 220, 0.03)),
        rgba(8, 29, 45, 0.28);
    color: rgba(226, 236, 244, 0.84);
    font-size: 0.86rem;
    line-height: 1.62;
    opacity: 0;
    transform: translate3d(0, 10px, 0);
    filter: blur(8px);
    pointer-events: none;
    transition:
        opacity 280ms ease,
        transform 420ms cubic-bezier(0.2, 0.86, 0.24, 1),
        filter 420ms ease,
        border-color 220ms ease,
        color 220ms ease;
}

.auth-feedback.is-visible {
    opacity: 1;
    transform: translate3d(0, 0, 0);
    filter: blur(0);
}

.auth-feedback.is-error {
    border-color: rgba(243, 170, 170, 0.18);
    color: rgba(255, 224, 224, 0.92);
}

.auth-feedback.is-success {
    border-color: rgba(189, 235, 212, 0.18);
    color: rgba(224, 250, 236, 0.94);
}

/* ============================================
   Login Button
   ============================================ */

/* 主按钮：承担“进入下一层海”的动作，不做普通实心系统按钮。*/
.auth-cta {
    position: relative;
    width: 100%;
    min-height: clamp(42px, 4.6vw, 46px);
    transition:
        transform 320ms cubic-bezier(0.18, 0.84, 0.22, 1),
        box-shadow 320ms ease,
        border-color 320ms ease,
        background 320ms ease,
        filter 320ms ease;
    box-shadow:
        0 14px 26px rgba(2, 12, 21, 0.16),
        0 0 18px rgba(113, 190, 220, 0.05),
        inset 0 1px 0 rgba(255, 255, 255, 0.16),
        inset 0 -10px 20px rgba(5, 50, 76, 0.08);
    padding-block: 0.42rem;
    padding-inline: 1.25rem;
    background:
        radial-gradient(ellipse at 22% 0%, rgba(255, 255, 255, 0.34), transparent 38%),
        linear-gradient(135deg, rgba(220, 244, 250, 0.74), rgba(128, 197, 224, 0.46) 58%, rgba(64, 143, 182, 0.42)),
        rgba(18, 110, 158, 0.48);
    border-radius: 9999px;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    color: #072033;
    gap: 8px;
    font-weight: 700;
    border: 1px solid rgba(241, 250, 254, 0.28);
    outline: none;
    overflow: hidden;
    font-size: clamp(13px, 1.8vw, 14px);
    letter-spacing: 0.08em;
    will-change: transform, box-shadow;
}

.auth-cta > span,
.auth-cta .icon {
    position: relative;
    z-index: 1;
}

/* .icon：按钮里的轻量箭头图标，hover 时会配合轻微前移。*/
.icon {
    width: clamp(18px, 2.4vw, 24px);
    height: clamp(18px, 2.4vw, 24px);
    transition:
        transform 320ms cubic-bezier(0.18, 0.84, 0.22, 1),
        filter 320ms ease,
        opacity 320ms ease;
}

/* 主按钮 hover：轻微放大并提亮边框，像开始往下一层海推进。*/
.auth-cta:hover {
    transform: translate3d(3px, -2px, 0) scale(1.008);
    border-color: rgba(255, 255, 255, 0.46);
    box-shadow:
        0 18px 32px rgba(2, 12, 21, 0.18),
        0 0 22px rgba(164, 221, 239, 0.1),
        inset 0 1px 0 rgba(255, 255, 255, 0.19),
        inset 0 -12px 22px rgba(5, 50, 76, 0.1);
    filter: saturate(1.04) brightness(1.02);
}

/* 按钮 hover 时箭头轻轻前移，增强进入感。*/
.auth-cta:hover .icon {
    transform: translate3d(7px, 0, 0);
    filter: drop-shadow(0 0 6px rgba(230, 248, 253, 0.34));
}

.auth-cta:active {
    transform: translate3d(2px, 2px, 0) scale(0.994);
    box-shadow:
        0 12px 22px rgba(2, 12, 21, 0.2),
        0 0 20px rgba(103, 184, 218, 0.1),
        inset 0 1px 0 rgba(255, 255, 255, 0.18),
        inset 0 12px 24px rgba(4, 29, 45, 0.12);
}

.auth-cta:active .icon {
    transform: translate3d(10px, 1px, 0);
}

/* hover 时启动按钮表面的扫光。*/
.auth-cta:hover::before {
    animation: shine 1.5s ease-out infinite;
}

/* 按钮内部的细长高光片，用来制造缓慢掠过的光感。*/
.auth-cta::before {
    content: "";
    position: absolute;
    z-index: 0;
    width: 120px;
    height: 100%;
    background-image: linear-gradient(
        120deg,
        rgba(255, 255, 255, 0) 30%,
        rgba(255, 255, 255, 0.62),
        rgba(255, 255, 255, 0) 70%
    );
    top: 0;
    left: -100px;
    opacity: 0.28;
}

.auth-cta::after {
    content: "";
    position: absolute;
    inset: 1px;
    z-index: 0;
    border-radius: inherit;
    background:
        linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent 68%),
        radial-gradient(circle at 76% 50%, rgba(239, 251, 255, 0.12), transparent 36%);
    opacity: 0.38;
    transform: translate3d(-18%, 0, 0);
    transition: opacity 320ms ease, transform 420ms cubic-bezier(0.18, 0.84, 0.22, 1);
    pointer-events: none;
}

.auth-cta:hover::after,
.auth-cta.is-entering-mainline::after {
    opacity: 0.78;
    transform: translate3d(16%, 0, 0);
}

/* 定义 shine 动画的关键帧 */
@keyframes shine {
/* shine 在 0%：高光片从按钮左侧外部开始。 */
    0% {
        left: -100px;
    }
/* shine 在 60% 和 100%：高光片穿过整颗按钮，完成一次扫光。 */
    60%,
    100% {
        left: 100%;
    }
}

/* 主按钮 focus-visible：保留键盘可见焦点。*/
.auth-cta:focus-visible {
    box-shadow:
        0 22px 38px rgba(2, 12, 21, 0.22),
        0 0 0 4px rgba(115, 200, 233, 0.2),
        inset 0 1px 0 rgba(255, 255, 255, 0.22);
}

.login-page[data-auth-progress-state="complete"] .auth-cta {
    box-shadow:
        0 16px 30px rgba(2, 12, 21, 0.17),
        0 0 20px rgba(171, 226, 245, 0.09),
        inset 0 1px 0 rgba(255, 255, 255, 0.16);
}

.auth-cta.is-entering-mainline,
.login-page.is-auth-entering-mainline .auth-cta.is-entering-mainline {
    transform: translate3d(8px, -1px, 0) scale(1.012);
    border-color: rgba(244, 252, 255, 0.5);
    box-shadow:
        0 24px 44px rgba(2, 12, 21, 0.24),
        0 0 34px rgba(180, 234, 248, 0.2),
        inset 0 1px 0 rgba(255, 255, 255, 0.26);
    filter: saturate(1.06) brightness(1.03);
}

.auth-cta.is-entering-mainline .icon {
    transform: translate3d(12px, 0, 0);
}

/* ============================================
   Footer and Social
   ============================================ */

/* .footer-links：底部辅助链接区，承接忘记密码和游客进入等次级入口。*/
.footer-links {
    display: grid;
    gap: 8px;
    padding: 8px 0 0;
    margin-bottom: 0;
    border-top: 1px solid rgba(255, 255, 255, 0.045);
}

/* 登录模式下的 footer-links：给底链更多留白，让首屏结尾更从容。*/
.login-page[data-auth-mode="login"] .footer-links {
    padding: 12px 0 2px;
    margin-bottom: 0;
}

.footer-links-label {
    margin: 0;
    color: rgba(224, 240, 247, 0.56);
    font-size: 0.68rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    text-align: center;
}

.footer-links-row {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 8px;
}

/* .link-forgot / .link-guest：弱化的底部辅助入口。*/
.link-forgot,
.link-guest {
    font-size: 0.84rem;
    color: rgba(240, 246, 250, 0.74);
    text-decoration: none;
    border: none;
    background: transparent;
    transition: color var(--transition-fast), transform var(--transition-fast), opacity var(--transition-fast);
    opacity: 0.92;
}

/* 底部辅助链接 hover：只做轻微提亮和下划线，不抢主按钮存在感。*/
.link-forgot:hover,
.link-guest:hover {
    color: rgba(223, 243, 250, 0.96);
    text-decoration: underline;
    transform: translate3d(0, -1px, 0);
    opacity: 1;
}

/* .divider：分隔底部两个辅助链接。*/
.divider {
    color: rgba(229, 239, 247, 0.58);
}

@media (max-height: 860px) and (min-width: 769px) {
    .login-page {
        --login-stage-safe-gap-y: clamp(12px, 2.1vh, 20px);
        --login-stage-min-height: min(
            512px,
            calc(100dvh - (var(--login-stage-safe-gap-y) * 2) - (clamp(12px, 1.8vw, 22px) * 2))
        );
        --login-stage-min-height-tablet: min(
            488px,
            calc(100dvh - (var(--login-stage-safe-gap-y) * 2) - (clamp(12px, 1.6vw, 20px) * 2))
        );
    }

    .login-page .page-stage {
        min-height: auto;
        align-items: flex-start;
        padding-top: max(clamp(18px, 2.4vh, 24px), var(--login-stage-safe-gap-y));
        padding-bottom: max(clamp(18px, 2.4vh, 24px), var(--login-stage-safe-gap-y));
    }

    .login-container {
        width: min(980px, calc(100vw - clamp(32px, 6vw, 104px)));
        max-width: none;
        padding: clamp(12px, 1.6vw, 22px);
    }

    .login-stage-shell {
        width: 100%;
        min-height: auto;
    }

    .glass-card {
        height: auto;
        min-height: 0;
    }

    .card-layout {
        min-height: auto;
        height: auto;
    }

    .login-side {
        padding: clamp(18px, 2vw, 28px);
    }

    .form-side {
        padding: clamp(18px, 2.4vw, 30px) clamp(18px, 2.6vw, 30px) clamp(18px, 2.8vw, 28px);
    }

    .login-page[data-auth-mode="login"] .form-side {
        padding-bottom: clamp(24px, 3.6vw, 34px);
    }

    .form-brand {
        margin-bottom: 12px;
    }

    .form-kicker {
        margin-bottom: 8px;
        font-size: 0.68rem;
    }

    .form-title {
        font-size: clamp(1.5rem, 2.2vw, 1.96rem);
    }

    .form-subtitle {
        margin-top: 9px;
        font-size: 0.9rem;
        line-height: 1.55;
    }

    .tab-section {
        margin-bottom: 4px;
    }

    .tabs {
        gap: 6px;
        padding: 4px;
    }

    .tab-btn {
        min-height: 48px;
        padding: 8px 10px;
        font-size: 0.9rem;
    }

    .auth-form {
        margin-bottom: 10px;
    }

    .entry-panel {
        padding: 16px 16px 18px;
        border-radius: 20px;
    }

    .entry-intro {
        margin-bottom: 14px;
    }

    .entry-copy {
        font-size: 0.9rem;
        line-height: 1.62;
    }

    .input-group {
        margin-bottom: 10px;
    }

    .input-group label {
        margin-bottom: 6px;
        font-size: 0.86rem;
    }

    .input-group input {
        padding: 10px 12px;
        font-size: 0.92rem;
    }

    .checkbox-group {
        gap: 8px;
        margin: 4px 0 12px;
    }

    .checkbox-label {
        font-size: 0.84rem;
        line-height: 1.45;
    }

    .auth-cta {
        min-height: 44px;
        padding-block: 0.4rem;
    }

    .entry-secondary-button {
        min-height: 44px;
    }

    .login-page[data-auth-mode="login"] .footer-links {
        padding: 8px 0 2px;
        margin-bottom: 0;
    }

    .footer-links {
        gap: 8px;
        padding: 4px 0 0;
        margin-bottom: 0;
    }

}

@keyframes atmosphere-drift-a {
    0%,
    100% {
        transform: translate3d(0, 0, 0) scale(1);
    }
    50% {
        transform: translate3d(4%, 8%, 0) scale(1.06);
    }
}

@keyframes atmosphere-drift-b {
    0%,
    100% {
        transform: translate3d(0, 0, 0) scale(1);
    }
    50% {
        transform: translate3d(-6%, -4%, 0) scale(1.08);
    }
}

@keyframes atmosphere-wave-float {
    0% {
        transform: translateX(-52%) translateY(0) rotate(-4deg);
    }
    50% {
        transform: translateX(-49%) translateY(8px) rotate(2deg);
    }
    100% {
        transform: translateX(-52%) translateY(0) rotate(-4deg);
    }
}

@keyframes current-drift {
    0%,
    100% {
        transform: translate3d(0, 0, 0) rotate(var(--current-angle, 0deg));
        opacity: 0.26;
    }
    50% {
        transform: translate3d(10px, -10px, 0) rotate(calc(var(--current-angle, 0deg) + 2deg));
        opacity: 0.46;
    }
}

@keyframes ripple-pulse {
    0% {
        transform: scale(0.94);
        opacity: 0;
    }
    18% {
        opacity: 0.22;
    }
    100% {
        transform: scale(1.18);
        opacity: 0;
    }
}

.login-page.is-field-focus .glass-card {
    box-shadow:
        0 30px 68px rgba(3, 12, 21, 0.34),
        0 16px 28px rgba(5, 20, 34, 0.18),
        0 0 32px rgba(128, 197, 225, 0.08),
        inset 0 1px 0 rgba(255, 255, 255, 0.28),
        inset 0 -1px 0 rgba(255, 255, 255, 0.06);
}

.login-page.is-field-focus .auth-panel-shell {
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.07),
        0 28px 52px rgba(3, 14, 23, 0.2),
        0 0 34px rgba(127, 196, 222, 0.07);
}

.login-page.is-field-focus .auth-waterline {
    transform: translate3d(0, -1px, 0);
    border-color: rgba(206, 236, 247, 0.16);
    box-shadow:
        0 14px 26px rgba(2, 12, 21, 0.12),
        0 0 20px rgba(126, 197, 223, 0.06),
        inset 0 1px 0 rgba(255, 255, 255, 0.08);
}

.login-page.is-switching .login-stage-divider {
    opacity: 1;
    box-shadow: 0 0 28px rgba(136, 197, 223, 0.12);
}

/* ============================================
   Animations and Responsive
   ============================================ */

/* 定义 login-shell-rise 动画的关键帧 */
@keyframes login-shell-rise {
/* login-shell-rise 。0%：整块门厅从略微下沉和缩放的状态开始出现。*/
    0% {
        opacity: 0;
        transform: translate3d(0, 36px, 0) scale(0.988);
    }
/* login-shell-rise 。100%：舞台回到稳定位置*/
    100% {
        opacity: 1;
        transform: translate3d(0, 0, 0) scale(1);
    }
}

/* 定义 glass-card-breathe 动画的关键帧 */
@keyframes glass-card-breathe {
/* glass-card-breathe 。0% 。100%：回到基准状态，形成一轮完整呼吸。*/
    0%,
    100% {
        transform: translate3d(0, 0, 0);
        box-shadow:
            0 28px 64px rgba(3, 12, 21, 0.3),
            0 12px 24px rgba(5, 20, 34, 0.16),
            inset 0 1px 0 rgba(255, 255, 255, 0.28),
            inset 0 -1px 0 rgba(255, 255, 255, 0.06);
    }
/* glass-card-breathe 。50%：轻微上浮，并把阴影和高光再托亮一点。*/
    50% {
        transform: translate3d(0, 0, 0);
        box-shadow:
            0 34px 72px rgba(3, 12, 21, 0.32),
            0 14px 28px rgba(5, 20, 34, 0.18),
            inset 0 1px 0 rgba(255, 255, 255, 0.28),
            inset 0 -1px 0 rgba(255, 255, 255, 0.05);
    }
}

/* 定义 card-water-feedback 动画的关键帧 */
@keyframes card-water-feedback {
/* card-water-feedback 。0%：从静止状态开始。*/
    0% {
        transform: translate3d(0, 0, 0);
    }
/* card-water-feedback 。30%：先往一个方向轻轻错位，像表面被碰到。*/
    30% {
        transform: translate3d(1px, -1px, 0);
    }
/* card-water-feedback 。62%：再反向回摆，形成柔和的水波反馈。*/
    62% {
        transform: translate3d(-1px, 1px, 0);
    }
/* card-water-feedback 在 100%：回到原位。 */
    100% {
        transform: translate3d(0, 0, 0);
    }
}

/* 定义 card-light-sweep 动画的关键帧 */
@keyframes card-light-sweep {
/* card-light-sweep 在 0% 和 100%：扫光回到基准位置。 */
    0%,
    100% {
        transform: translate3d(0, 0, 0);
        opacity: 0.94;
    }
/* card-light-sweep 。50%：扫光稍微偏移，模拟玻璃表面的流动高光。*/
    50% {
        transform: translate3d(1.6%, -1.2%, 0);
        opacity: 1;
    }
}

/* 定义 content-rise-in 动画的关键帧 */
@keyframes content-rise-in {
/* content-rise-in 。0%：内容从轻微下沉和模糊中开始出现。*/
    0% {
        opacity: 0;
        transform: translate3d(0, 18px, 0);
        filter: blur(6px);
    }
/* content-rise-in 在 100%：内容回到清晰、稳定的阅读状态。 */
    100% {
        opacity: 1;
        transform: translate3d(0, 0, 0);
        filter: blur(0);
    }
}

/* 定义 field-invalid-jolt 动画的关键帧 */
@keyframes field-invalid-jolt {
/* field-invalid-jolt 在 0% 和 100%：保持原位，不触发淡出或模糊。 */
    0%,
    100% {
        transform: translate3d(0, 0, 0);
    }
/* 先向左轻推，同时稍微压缩，像静水被打断一下。 */
    18% {
        transform: translate3d(-7px, 0, 0) scaleX(0.996);
    }
/* 再向右回摆，但控制在很小幅度内。 */
    42% {
        transform: translate3d(5px, 0, 0) scaleX(0.998);
    }
/* 开始收住，避免变成系统级抖动。 */
    66% {
        transform: translate3d(-3px, 0, 0) scaleX(0.999);
    }
/* 最后一次轻微回摆，再回到稳定状态。 */
    84% {
        transform: translate3d(2px, 0, 0) scaleX(1);
    }
}

@keyframes auth-shell-breathe {
    0%,
    100% {
        transform: translate3d(0, 0, 0);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.06),
            0 24px 46px rgba(3, 14, 23, 0.18);
    }
    50% {
        transform: translate3d(0, 0, 0);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.07),
            0 28px 52px rgba(3, 14, 23, 0.2),
            0 0 32px rgba(118, 191, 221, 0.06);
    }
}

/* 定义 checkbox-invalid-jolt 动画的关键帧 */
@keyframes checkbox-invalid-jolt {
/* 复选框错误时只做更小幅度的点状回摆。 */
    0%,
    100% {
        transform: translate3d(0, 0, 0) scale(1);
    }
    24% {
        transform: translate3d(-4px, 0, 0) scale(0.97);
    }
    52% {
        transform: translate3d(3px, 0, 0) scale(1.02);
    }
    78% {
        transform: translate3d(-1px, 0, 0) scale(0.99);
    }
}

/* 定义 invalid-label-drift 动画的关键帧 */
@keyframes invalid-label-drift {
/* 标签只做微弱跟随，不参与模糊或显隐。 */
    0%,
    100% {
        transform: translate3d(0, 0, 0);
    }
    20% {
        transform: translate3d(-3px, 0, 0);
    }
    44% {
        transform: translate3d(2px, 0, 0);
    }
    72% {
        transform: translate3d(-1px, 0, 0);
    }
}

@keyframes waterline-swell {
    0%,
    100% {
        transform: scaleY(1);
        opacity: 0.92;
    }
    46% {
        transform: scaleY(1.08);
        opacity: 1;
    }
}

@keyframes waterline-current {
    0%,
    100% {
        transform: translate3d(-38%, 0, 0);
        opacity: 0.32;
    }
    50% {
        transform: translate3d(18%, 0, 0);
        opacity: 0.58;
    }
}

@keyframes status-breathe {
    0% {
        opacity: 0.7;
        transform: translate3d(0, 4px, 0);
    }
    100% {
        opacity: 1;
        transform: translate3d(0, 0, 0);
    }
}

/* .fade-in-up：通用的轻微上浮淡入动画。*/
.fade-in-up {
    animation: content-rise-in 0.66s cubic-bezier(0.2, 0.86, 0.24, 1) forwards;
}

/* 减少动态效果模式：只收敛长期漂浮装饰，不关闭登录页本身的入场动画。*/
/* 平板断点：开始收紧登录舞台的宽度和左右结构。*/
@media (max-width: 980px) {
    .login-page .stage-debug-toggle {
        top: 16px;
        right: 16px;
    }

  /* page-stage 在平板宽度下继续居中，并缩小左右留白。*/
    .login-page .page-stage {
        justify-content: center;
        padding-left: clamp(18px, 4vw, 36px);
        padding-right: clamp(18px, 4vw, 36px);
    }

/* login-container 在平板下进一步放宽占比，让舞台保持完整但不过满。*/
    .login-container {
        width: min(1100px, 94vw);
        max-width: none;
    }

    .login-stage-shell {
        width: 100%;
        min-width: 0;
        max-width: none;
        min-height: var(--login-stage-min-height-tablet);
    }

    .login-stage-resize-layer {
        display: none;
    }

    .login-stage-hud {
        display: none;
    }

/* 左右双栏在平板下仍保留，但比例继续偏向表单区。*/
    .card-layout {
        grid-template-columns: 34% 66%;
        min-height: var(--login-stage-min-height-tablet);
    }

    .login-stage-divider {
        left: 34%;
    }

/* 品牌标题在平板下适当缩小，避免压住表单。*/
    .side-title {
        font-size: clamp(2.3rem, 5vw, 4rem);
    }

    .side-observatory {
        padding: 16px 16px 14px;
    }
}

/* 中小屏断点：把左右结构改成更适合竖向阅读的布局。*/
@media (max-width: 768px) {
    .login-page .stage-debug-toggle {
        min-height: 34px;
        padding: 6px 10px 6px 9px;
        gap: 7px;
    }

    .login-page .stage-debug-toggle-label {
        font-size: 0.68rem;
    }

    .login-page .stage-debug-toggle-state {
        font-size: 0.56rem;
    }

  /* 页面主舞台：
     page-stage 把登录舞台整体向右收一点，给左侧品牌门厅和海面留白预留空间。*/
    .login-page .page-stage {
        justify-content: center;
        padding-left: 12px;
        padding-right: 12px;
    }

/* 卡片内部改成单列，表单区成为手机端主视觉。*/
    .card-layout {
        grid-template-columns: 1fr;
        min-height: auto;
        height: auto;
    }

    .login-stage-divider {
        display: none;
    }

/* 手机端保留品牌门厅，但把它收成顶部静水层，不退回普通登录框。*/
    .login-side {
        display: block;
        padding: 22px 20px 18px;
        border-right: none;
        border-bottom: 1px solid rgba(216, 238, 247, 0.08);
        box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.04);
    }

    .login-brand-copy {
        width: 100%;
        gap: 14px;
    }

    .side-quote,
    .side-meta {
        max-width: 18em;
    }

    .side-observatory {
        padding: 14px;
        border-radius: 20px;
    }

    .side-observatory-grid {
        gap: 8px;
    }

    .side-waterline {
        gap: 8px;
    }

    .form-side {
        padding-top: 18px;
    }

    .login-stage-resize-layer {
        display: none;
    }

    .login-stage-hud {
        display: none;
    }

/* 品牌标题在窄屏下继续缩放，避免换行失控。*/
    .side-title {
        letter-spacing: 0.1em;
        font-size: clamp(2rem, 9vw, 3.2rem);
    }

    .auth-panel-shell {
        padding: 14px;
        border-radius: 24px;
    }

    .auth-panel-glass {
        inset: 8px;
        border-radius: 18px;
    }

    .auth-panel-inner {
        padding: 4px;
    }

    .auth-waterline {
        flex-wrap: wrap;
        align-items: center;
        border-radius: 18px;
    }
}

/* 超窄屏断点：进一步收紧舞台圆角、内边距。tab 尺寸。*/
@media (max-width: 480px) {
/* 登录舞台主容器：
   这里同时限制理想宽度和相对视口宽度，避免它在大屏上像后台系统那样铺得过满。*/
.login-container {
        width: 100vw;
        padding: 10px;
    }

    .login-stage-shell {
        width: 100%;
        min-height: auto;
    }

/* 超窄屏下缩小观察舱圆角，避免边角占太多空间。*/
    .glass-card {
        border-radius: 18px;
    }

/* 超窄屏下收紧表单区内边距，给输入区和按钮留出更合理比例。*/
    .form-side {
        padding: 16px 14px 4px;
    }

/* 登录模式下给表单区多留一点底部空间，避免按钮和底链显得太挤。*/
    .login-page[data-auth-mode="login"] .form-side {
        padding-bottom: 28px;
    }

/* 超窄屏下收紧 tabs 的内边距，保证登录 / 注册切换仍能放在一行为*/
    .tabs {
        padding: 4px;
    }

/* 超窄屏下同步缩小登录 / 注册切换按钮，保持一行可读。*/
    .tab-btn {
        font-size: 0.88rem;
        min-height: 46px;
        padding: 8px 10px;
    }

/* 超窄屏下缩小底部辅助链接的间距，避免页脚区域换行过散。*/
    .footer-links {
        gap: 8px;
    }

    .footer-links-row {
        gap: 8px;
    }

    .side-observatory-item strong {
        font-size: 0.88rem;
    }
}

/* 登录页高对比度保护层：保持门厅品牌文案、弱化链接和第三方入口在深色背景上仍然可读。 */
@media (forced-colors: active) {
    .login-page :is(
        .side-kicker,
        .form-kicker,
        .divider
    ) {
        forced-color-adjust: none;
        color: var(--yanqi-forced-kicker);
        -webkit-text-fill-color: var(--yanqi-forced-kicker);
    }

    .login-page :is(
        .side-title,
        .form-title
    ) {
        forced-color-adjust: none;
        color: var(--yanqi-forced-title);
        -webkit-text-fill-color: var(--yanqi-forced-title);
    }

    .login-page :is(
        .side-quote,
        .side-meta,
        .form-subtitle
    ) {
        forced-color-adjust: none;
        color: var(--yanqi-forced-copy);
        -webkit-text-fill-color: var(--yanqi-forced-copy);
    }

    .login-page :is(
        .link-forgot,
        .link-guest
    ),
    .login-page :is(
        .link-forgot,
        .link-guest
    ):visited,
    .login-page :is(
        .link-forgot,
        .link-guest
    ):hover,
    .login-page :is(
        .link-forgot,
        .link-guest
    ):focus-visible,
    .login-page :is(
        .link-forgot,
        .link-guest
    ):active {
        forced-color-adjust: none;
        color: var(--yanqi-forced-link);
        -webkit-text-fill-color: var(--yanqi-forced-link);
    }

    .login-page :is(
        .link-forgot,
        .link-guest
    ):focus-visible {
        outline: 2px solid var(--yanqi-forced-ring);
        outline-offset: 3px;
    }
}

/* 静水入口控制台升级层：
   保留既有 DOM 和交互，只把桌面端入口收成更稳定的大圆角玻璃舱。 */
.field-hint {
    position: relative;
    z-index: 1;
    display: block;
    margin-top: 7px;
    color: rgba(218, 237, 246, 0.68);
    font-size: 0.77rem;
    line-height: 1.46;
    letter-spacing: 0.02em;
    text-shadow: 0 6px 16px rgba(2, 12, 22, 0.16);
    transition:
        color 240ms ease,
        transform 280ms ease,
        opacity 240ms ease;
}

.input-group:focus-within .field-hint,
.input-group.is-filled .field-hint,
.input-group.is-complete .field-hint {
    color: rgba(235, 248, 252, 0.86);
    transform: translate3d(2px, 0, 0);
}

.input-group.is-invalid .field-hint {
    color: rgba(250, 225, 230, 0.9);
}

@media (min-width: 981px) {
    .login-page {
        --login-stage-safe-gap-y: clamp(18px, 2.2vh, 30px);
        --login-stage-min-height: clamp(590px, 72vh, 760px);
        --login-stage-min-height-tablet: clamp(570px, 68vh, 700px);
    }

    .login-page .page-stage {
        justify-content: center;
        padding-top: max(clamp(20px, 2.6vh, 34px), var(--login-stage-safe-gap-y));
        padding-bottom: max(clamp(20px, 2.6vh, 34px), var(--login-stage-safe-gap-y));
        padding-left: clamp(76px, 5.4vw, 112px);
        padding-right: clamp(76px, 5.4vw, 112px);
    }

    .login-container {
        box-sizing: border-box;
        width: min(1520px, calc(100vw - clamp(150px, 11vw, 260px)));
        max-width: none;
        padding: clamp(8px, 1.1vw, 16px);
        display: flex;
        justify-content: center;
    }

    .login-stage-shell {
        --login-stage-width: 100%;
        width: min(var(--login-stage-width), 100%);
        min-width: min(1080px, 100%);
        max-width: none;
        min-height: var(--login-stage-min-height);
    }

    .login-stage-glow {
        inset: -28px -34px -36px;
        border-radius: clamp(58px, 5vw, 86px);
        background:
            radial-gradient(ellipse at 18% 4%, rgba(231, 249, 253, 0.28), transparent 34%),
            radial-gradient(ellipse at 82% 82%, rgba(105, 184, 216, 0.18), transparent 34%),
            radial-gradient(ellipse at 52% 112%, rgba(10, 49, 75, 0.42), transparent 58%);
        filter: blur(34px);
        opacity: 0.94;
    }

    .glass-card {
        min-height: var(--login-stage-min-height);
        border-radius: clamp(48px, 4.6vw, 72px);
        border-color: rgba(224, 244, 251, 0.24);
        background:
            linear-gradient(135deg, rgba(239, 250, 253, 0.16), rgba(153, 199, 219, 0.05) 42%, rgba(5, 24, 39, 0.2)),
            linear-gradient(180deg, rgba(13, 55, 80, 0.36), rgba(3, 20, 34, 0.42)),
            rgba(8, 32, 50, 0.48);
        box-shadow:
            0 34px 76px rgba(1, 10, 19, 0.44),
            0 0 0 1px rgba(177, 222, 239, 0.1),
            0 0 52px rgba(123, 199, 227, 0.1),
            inset 0 1px 0 rgba(255, 255, 255, 0.34),
            inset 0 0 0 1px rgba(255, 255, 255, 0.06),
            inset 0 -18px 38px rgba(2, 16, 29, 0.14);
        backdrop-filter: blur(34px) saturate(128%);
        -webkit-backdrop-filter: blur(34px) saturate(128%);
    }

    .glass-card::before {
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0) 18%),
            radial-gradient(ellipse at 22% 6%, rgba(255, 255, 255, 0.22), transparent 34%),
            radial-gradient(ellipse at 78% 98%, rgba(104, 184, 218, 0.14), transparent 38%);
        opacity: 0.96;
    }

    .glass-card::after {
        background-image:
            linear-gradient(100deg, transparent 0 35%, rgba(227, 246, 252, 0.07) 45%, transparent 56%),
            radial-gradient(circle at 18% 22%, rgba(238, 251, 254, 0.1) 0.8px, transparent 1.2px),
            radial-gradient(circle at 72% 66%, rgba(207, 238, 249, 0.08) 0.8px, transparent 1.2px),
            linear-gradient(180deg, transparent 58%, rgba(0, 13, 24, 0.18) 100%);
        background-size: 100% 100%, 7px 7px, 9px 9px, 100% 100%;
        opacity: 0.34;
    }

    .login-stage-divider {
        inset: 34px auto 34px 45%;
        background: linear-gradient(
            180deg,
            rgba(230, 247, 252, 0) 0%,
            rgba(230, 247, 252, 0.3) 18%,
            rgba(149, 211, 235, 0.22) 54%,
            rgba(230, 247, 252, 0) 100%
        );
        box-shadow:
            0 0 30px rgba(148, 214, 238, 0.15),
            0 0 1px rgba(245, 252, 254, 0.2);
        opacity: 0.9;
    }

    .card-layout {
        grid-template-columns: minmax(420px, 45%) minmax(0, 55%);
        min-height: var(--login-stage-min-height);
    }

    .login-side {
        padding: clamp(42px, 4vw, 72px) clamp(44px, 4.2vw, 76px);
        border-right-color: rgba(224, 244, 251, 0.06);
        background:
            radial-gradient(ellipse at 28% 14%, rgba(238, 250, 254, 0.13), transparent 38%),
            radial-gradient(ellipse at 82% 76%, rgba(77, 157, 193, 0.1), transparent 42%),
            linear-gradient(155deg, rgba(10, 42, 64, 0.46), rgba(3, 20, 34, 0.32));
    }

    .login-brand-copy {
        width: min(440px, 100%);
        gap: clamp(18px, 2vh, 26px);
    }

    .side-kicker {
        color: rgba(235, 247, 252, 0.82);
        font-size: 0.78rem;
        letter-spacing: 0.42em;
    }

    .side-depth-tag {
        margin-top: -2px;
        padding: 8px 18px;
        border-color: rgba(222, 242, 250, 0.18);
        background:
            linear-gradient(180deg, rgba(245, 252, 254, 0.11), rgba(122, 187, 214, 0.04)),
            rgba(5, 27, 43, 0.28);
        color: rgba(246, 252, 254, 0.92);
        font-size: 0.84rem;
        letter-spacing: 0.2em;
    }

    .side-title {
        font-size: clamp(4.4rem, 6.8vw, 6.7rem);
        letter-spacing: 0.16em;
        color: rgba(245, 251, 254, 0.98);
        text-shadow:
            0 16px 38px rgba(1, 11, 21, 0.42),
            0 0 26px rgba(212, 242, 251, 0.16);
    }

    .side-quote {
        max-width: 15em;
        font-size: clamp(1.12rem, 1.22vw, 1.32rem);
        color: rgba(249, 252, 254, 0.98);
    }

    .side-meta {
        max-width: 19em;
        font-size: 0.98rem;
        color: rgba(237, 246, 250, 0.92);
    }

    .side-observatory {
        margin-top: 8px;
        padding: 10px 0 4px;
        background:
            linear-gradient(90deg, rgba(230, 247, 252, 0.075), transparent 88%);
    }

    .side-observatory::after {
        top: 48px;
        bottom: 12px;
        background: linear-gradient(180deg, rgba(221, 243, 250, 0.2), rgba(116, 187, 218, 0.04));
        opacity: 0.72;
    }

    .side-observatory-title {
        margin-bottom: 12px;
        color: rgba(244, 250, 253, 0.9);
        font-size: 0.94rem;
    }

    .side-observatory-item {
        grid-template-columns: minmax(54px, 0.34fr) minmax(0, 1fr);
        gap: 16px;
        padding: 9px 0 9px 18px;
        border-top-color: rgba(218, 241, 249, 0.08);
    }

    .side-observatory-item::before {
        width: 5px;
        height: 5px;
        opacity: 0.5;
        box-shadow: 0 0 14px rgba(184, 232, 247, 0.22);
    }

    .side-observatory-label {
        color: rgba(223, 242, 249, 0.76);
        font-size: 0.74rem;
        letter-spacing: 0.16em;
    }

    .side-observatory-item strong {
        color: rgba(248, 252, 254, 0.92);
        font-size: 0.94rem;
        font-weight: 600;
    }

    .side-waterline {
        margin-top: 8px;
        gap: 11px;
        padding-top: 14px;
    }

    .side-waterline::before {
        background: linear-gradient(90deg, rgba(224, 243, 250, 0.18), transparent 82%);
        opacity: 0.78;
    }

    .side-waterline-label {
        color: rgba(224, 242, 249, 0.76);
        font-size: 0.76rem;
        letter-spacing: 0.2em;
    }

    .side-waterline-value {
        color: rgba(244, 251, 254, 0.92);
        font-size: 0.88rem;
    }

    .side-waterline-track {
        height: 12px;
        border-color: rgba(219, 241, 249, 0.13);
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(97, 156, 185, 0.035)),
            rgba(191, 230, 244, 0.08);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.08),
            0 10px 22px rgba(2, 12, 22, 0.12);
    }

    .side-waterline-status {
        color: rgba(236, 246, 250, 0.88);
        font-size: 0.88rem;
        line-height: 1.66;
    }

    .form-side {
        display: flex;
        align-items: center;
        padding: clamp(42px, 4vw, 72px) clamp(44px, 4.5vw, 78px);
    }

    .login-page[data-auth-mode="login"] .form-side {
        padding-bottom: clamp(42px, 4vw, 72px);
    }

    .auth-panel-shell {
        width: min(680px, 100%);
        margin: 0 auto;
        padding: clamp(18px, 2vw, 26px);
        border-radius: 34px;
        border-color: rgba(218, 241, 249, 0.13);
        background:
            linear-gradient(180deg, rgba(248, 252, 254, 0.075), rgba(147, 197, 219, 0.026)),
            linear-gradient(145deg, rgba(9, 43, 64, 0.34), rgba(3, 20, 33, 0.26)),
            rgba(4, 24, 39, 0.24);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.09),
            0 26px 54px rgba(2, 13, 24, 0.2),
            0 0 38px rgba(114, 194, 224, 0.06);
    }

    .auth-panel-shell::after {
        content: "";
        opacity: 0.72;
    }

    .auth-panel-glass {
        inset: 10px;
        border-radius: 26px;
        background:
            radial-gradient(ellipse at 86% 10%, rgba(238, 250, 254, 0.075), transparent 28%),
            linear-gradient(180deg, rgba(11, 44, 65, 0.38), rgba(4, 22, 36, 0.28));
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.06),
            inset 0 -18px 38px rgba(2, 13, 23, 0.08);
    }

    .auth-panel-inner {
        padding: clamp(8px, 0.9vw, 12px);
    }

    .auth-panel-inner::before {
        content: "";
        inset: clamp(130px, 12vw, 150px) 0 clamp(96px, 8vw, 118px);
        border-radius: 24px;
        background:
            linear-gradient(180deg, rgba(5, 27, 44, 0.34), rgba(4, 22, 36, 0.22)),
            radial-gradient(ellipse at 50% 0%, rgba(229, 247, 252, 0.055), transparent 46%);
        border-color: rgba(218, 241, 249, 0.07);
        box-shadow:
            0 18px 36px rgba(2, 13, 23, 0.1),
            inset 0 1px 0 rgba(255, 255, 255, 0.05);
    }

    .auth-waterline {
        margin-bottom: 20px;
        padding-bottom: 12px;
        border-bottom-color: rgba(218, 240, 248, 0.12);
        background: linear-gradient(90deg, rgba(244, 250, 254, 0.055), transparent 72%);
    }

    .auth-waterline-kicker,
    .auth-waterline-copy {
        font-size: 0.74rem;
    }

    .auth-waterline-kicker {
        color: rgba(235, 247, 252, 0.76);
        letter-spacing: 0.26em;
    }

    .auth-waterline-copy {
        color: rgba(224, 242, 249, 0.76);
    }

    .form-brand {
        margin-bottom: 20px;
    }

    .form-kicker {
        color: rgba(241, 248, 251, 0.74);
        font-size: 0.78rem;
        letter-spacing: 0.36em;
    }

    .form-title {
        font-size: clamp(2.15rem, 2.9vw, 2.9rem);
        color: rgba(249, 253, 255, 0.98);
        text-shadow:
            0 12px 28px rgba(1, 11, 21, 0.34),
            0 0 18px rgba(203, 235, 247, 0.1);
    }

    .form-subtitle {
        margin-top: 12px;
        color: rgba(239, 248, 252, 0.9);
        font-size: 1rem;
        line-height: 1.72;
    }

    .tab-section {
        margin-bottom: 16px;
    }

    .tabs {
        padding: 5px;
        border-radius: 20px;
        border-color: rgba(220, 241, 249, 0.1);
        background:
            linear-gradient(180deg, rgba(248, 252, 254, 0.075), rgba(159, 204, 225, 0.028)),
            rgba(5, 27, 43, 0.22);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.08),
            0 10px 22px rgba(2, 13, 23, 0.1);
    }

    .tab-btn {
        min-height: 54px;
        border-radius: 16px;
        color: rgba(232, 244, 250, 0.84);
        font-size: 1rem;
    }

    .tab-btn.active,
    .tab-btn[aria-selected="true"] {
        border-color: rgba(223, 243, 250, 0.22);
        background:
            linear-gradient(180deg, rgba(246, 252, 254, 0.16), rgba(147, 205, 229, 0.09)),
            rgba(182, 226, 242, 0.05);
        color: rgba(250, 253, 255, 0.98);
        box-shadow:
            0 10px 22px rgba(2, 13, 23, 0.14),
            0 0 20px rgba(126, 203, 231, 0.08),
            inset 0 1px 0 rgba(255, 255, 255, 0.16);
    }

    .auth-form {
        margin-bottom: 14px;
        padding: 16px 16px 18px;
        border-radius: 24px;
        border: 1px solid rgba(218, 240, 248, 0.07);
        background:
            linear-gradient(180deg, rgba(248, 252, 254, 0.045), rgba(137, 192, 217, 0.018)),
            rgba(4, 23, 38, 0.14);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.045),
            0 16px 34px rgba(2, 13, 23, 0.08);
    }

    .input-group {
        margin-bottom: 16px;
    }

    .input-group label {
        margin-bottom: 8px;
        color: rgba(246, 251, 253, 0.94);
        font-size: 0.94rem;
        letter-spacing: 0.02em;
    }

    .input-group input {
        min-height: 58px;
        border-radius: 18px;
        border-color: rgba(221, 242, 250, 0.18);
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.1), rgba(173, 213, 232, 0.05)),
            rgba(5, 27, 44, 0.34);
        padding: 14px 16px;
        color: rgba(249, 253, 255, 0.98);
        font-size: 1rem;
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.1),
            0 12px 22px rgba(2, 13, 23, 0.12),
            0 0 0 1px rgba(211, 238, 247, 0.045);
    }

    .input-group input::placeholder {
        color: rgba(225, 239, 247, 0.76);
    }

    .input-group input:focus {
        border-color: rgba(186, 234, 249, 0.52);
        background:
            radial-gradient(ellipse at 18% 0%, rgba(232, 249, 253, 0.12), transparent 46%),
            linear-gradient(180deg, rgba(255, 255, 255, 0.14), rgba(184, 222, 238, 0.07)),
            rgba(8, 38, 58, 0.44);
        box-shadow:
            0 0 0 3px rgba(116, 201, 231, 0.1),
            0 0 26px rgba(123, 207, 235, 0.12),
            0 16px 28px rgba(2, 13, 23, 0.16),
            inset 0 1px 0 rgba(255, 255, 255, 0.14);
    }

    .input-group.is-filled input {
        border-color: rgba(205, 237, 248, 0.28);
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(177, 215, 232, 0.06)),
            rgba(4, 26, 43, 0.42);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.12),
            0 14px 24px rgba(2, 13, 23, 0.14),
            0 0 0 1px rgba(198, 231, 243, 0.06);
    }

    .input-group.is-complete input {
        border-color: rgba(190, 233, 247, 0.42);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.16),
            0 0 0 1px rgba(168, 223, 240, 0.1),
            0 16px 28px rgba(2, 13, 23, 0.16),
            0 0 28px rgba(126, 206, 232, 0.1);
    }

    .checkbox-group {
        margin: 4px 0 18px;
    }

    .checkbox-label {
        color: rgba(238, 247, 251, 0.88);
        font-size: 0.92rem;
    }

    .auth-cta {
        min-height: 62px;
        border-radius: 20px;
        color: rgba(246, 252, 255, 0.98);
        font-size: 1.05rem;
        letter-spacing: 0.16em;
        background:
            radial-gradient(ellipse at 28% 0%, rgba(239, 252, 255, 0.28), transparent 42%),
            linear-gradient(180deg, rgba(29, 111, 168, 0.72), rgba(8, 60, 106, 0.74) 58%, rgba(4, 34, 69, 0.86)),
            rgba(8, 60, 106, 0.78);
        border-color: rgba(202, 238, 250, 0.36);
        box-shadow:
            0 18px 34px rgba(1, 11, 22, 0.24),
            0 0 28px rgba(118, 207, 237, 0.12),
            inset 0 1px 0 rgba(255, 255, 255, 0.22),
            inset 0 -14px 26px rgba(1, 21, 42, 0.18);
        text-shadow: 0 8px 18px rgba(1, 10, 20, 0.3);
    }

    .auth-cta:hover {
        transform: translate3d(5px, -2px, 0) scale(1.006);
        border-color: rgba(226, 248, 254, 0.52);
        box-shadow:
            0 22px 38px rgba(1, 11, 22, 0.28),
            0 0 36px rgba(142, 220, 243, 0.18),
            inset 0 1px 0 rgba(255, 255, 255, 0.26),
            inset 0 -16px 28px rgba(1, 21, 42, 0.2);
    }

    .auth-cta:active {
        transform: translate3d(4px, 3px, 0) scale(0.992);
        box-shadow:
            0 12px 24px rgba(1, 11, 22, 0.28),
            0 0 24px rgba(112, 197, 230, 0.12),
            inset 0 10px 24px rgba(1, 21, 42, 0.22);
    }

    .footer-links {
        gap: 11px;
        padding-top: 14px;
        border-top-color: rgba(224, 242, 249, 0.08);
    }

    .footer-links-label {
        color: rgba(225, 241, 248, 0.68);
        font-size: 0.74rem;
    }

    .link-forgot,
    .link-guest {
        color: rgba(239, 248, 252, 0.82);
        font-size: 0.9rem;
    }

    .divider {
        color: rgba(229, 243, 249, 0.52);
    }

    .login-atmosphere::before {
        content: "";
        position: absolute;
        left: 50%;
        top: -12vh;
        width: min(760px, 52vw);
        height: 64vh;
        transform: translateX(-50%);
        background:
            linear-gradient(98deg, transparent 4%, rgba(236, 251, 255, 0.13) 22%, transparent 34%),
            linear-gradient(83deg, transparent 22%, rgba(181, 227, 244, 0.09) 48%, transparent 64%),
            radial-gradient(ellipse at 50% 0%, rgba(248, 253, 255, 0.22), transparent 56%);
        filter: blur(8px);
        opacity: 0.8;
        mix-blend-mode: screen;
        pointer-events: none;
        animation: entrance-beam-breathe 16s ease-in-out infinite;
    }

    .login-atmosphere::after {
        content: "";
        position: absolute;
        inset: 0;
        background:
            radial-gradient(ellipse at 50% 38%, transparent 0%, rgba(1, 10, 19, 0.02) 42%, rgba(1, 9, 18, 0.36) 100%),
            linear-gradient(90deg, rgba(1, 8, 16, 0.24), transparent 20%, transparent 80%, rgba(1, 8, 16, 0.24));
        pointer-events: none;
    }
}

@media (min-width: 981px) and (max-height: 860px) {
    .login-page {
        --login-stage-min-height: clamp(560px, 68vh, 650px);
    }

    .login-container {
        width: min(1360px, calc(100vw - clamp(130px, 10vw, 220px)));
    }

    .login-side,
    .form-side {
        padding-top: clamp(28px, 3.2vw, 46px);
        padding-bottom: clamp(28px, 3.2vw, 46px);
    }

    .side-title {
        font-size: clamp(3.6rem, 5.8vw, 5.3rem);
    }

    .login-brand-copy {
        gap: 16px;
    }

    .auth-panel-shell {
        padding: 16px;
    }

    .auth-form {
        padding: 12px 14px 14px;
    }

    .input-group {
        margin-bottom: 11px;
    }

    .input-group input {
        min-height: 52px;
        padding-top: 12px;
        padding-bottom: 12px;
    }

    .field-hint {
        margin-top: 5px;
        font-size: 0.74rem;
    }

    .auth-cta {
        min-height: 54px;
    }
}

/* 首屏完整性修正层：
   这一层只收高度、间距和右侧层级，保留深海玻璃拟态方向。 */
@media (min-width: 981px) {
    .login-page {
        --login-stage-fit-height: min(720px, calc(100dvh - 100px));
        --login-stage-min-height: var(--login-stage-fit-height);
        --login-console-gap: clamp(8px, 1.05vh, 13px);
        overflow-y: hidden;
    }

    .login-page .page-stage {
        min-height: 100dvh;
        padding-top: clamp(44px, 5.2vh, 58px);
        padding-bottom: clamp(44px, 5.2vh, 58px);
    }

    .login-container {
        align-items: center;
        width: min(1460px, calc(100vw - clamp(148px, 10vw, 260px)));
        padding: 0;
    }

    .login-stage-shell {
        height: var(--login-stage-fit-height);
        min-height: 0;
        max-height: calc(100dvh - 100px);
    }

    .glass-card {
        height: 100%;
        min-height: 0;
        border-radius: clamp(42px, 4vw, 62px);
    }

    .card-layout {
        height: 100%;
        min-height: 0;
        grid-template-columns: minmax(390px, 44.5%) minmax(0, 55.5%);
    }

    .login-stage-divider {
        left: 44.5%;
        top: 28px;
        bottom: 28px;
    }

    .login-side {
        align-items: flex-start;
        padding: clamp(32px, 3.2vw, 50px) clamp(42px, 4vw, 66px) clamp(24px, 2.6vw, 38px);
    }

    .login-brand-copy {
        height: 100%;
        width: min(430px, 100%);
        justify-content: center;
        gap: clamp(12px, 1.45vh, 18px);
        transform: translate3d(0, -8px, 0);
    }

    .side-kicker {
        font-size: 0.74rem;
    }

    .side-depth-tag {
        padding: 7px 16px;
        font-size: 0.8rem;
    }

    .side-title {
        font-size: clamp(3.7rem, 5.9vw, 5.55rem);
        line-height: 1.02;
    }

    .side-quote {
        font-size: clamp(1.02rem, 1.08vw, 1.16rem);
        line-height: 1.5;
    }

    .side-meta {
        margin-top: -6px;
        font-size: 0.92rem;
        line-height: 1.55;
    }

    .side-observatory {
        margin-top: 2px;
        padding-top: 6px;
    }

    .side-observatory-title {
        margin-bottom: 7px;
        font-size: 0.86rem;
        line-height: 1.45;
    }

    .side-observatory::after {
        top: 36px;
        bottom: 8px;
    }

    .side-observatory-item {
        grid-template-columns: 48px minmax(0, 1fr);
        gap: 13px;
        padding: 6px 0 6px 16px;
    }

    .side-observatory-label {
        font-size: 0.68rem;
    }

    .side-observatory-item strong {
        font-size: 0.86rem;
        line-height: 1.32;
    }

    .side-waterline {
        margin-top: 2px;
        gap: 8px;
        padding-top: 11px;
    }

    .side-waterline-track {
        height: 10px;
    }

    .side-waterline-status {
        min-height: auto;
        font-size: 0.8rem;
        line-height: 1.44;
    }

    .form-side,
    .login-page[data-auth-mode="login"] .form-side {
        align-items: center;
        padding: clamp(26px, 3vw, 44px) clamp(42px, 4vw, 68px);
    }

    .auth-panel-shell {
        width: min(640px, 100%);
        padding: 0;
        border-radius: 30px;
        border-color: rgba(218, 241, 249, 0.1);
        background:
            radial-gradient(ellipse at 78% 4%, rgba(237, 250, 254, 0.075), transparent 32%),
            linear-gradient(180deg, rgba(247, 252, 254, 0.045), rgba(109, 176, 207, 0.018)),
            rgba(4, 24, 39, 0.11);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.06),
            0 18px 38px rgba(2, 13, 24, 0.14),
            0 0 28px rgba(114, 194, 224, 0.04);
    }

    .auth-panel-shell::after {
        opacity: 0.36;
    }

    .auth-panel-glass {
        inset: 0;
        border-radius: inherit;
        background:
            linear-gradient(180deg, rgba(9, 40, 60, 0.2), rgba(3, 20, 33, 0.12));
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.035),
            inset 0 -14px 32px rgba(2, 13, 23, 0.05);
        opacity: 0.62;
    }

    .auth-panel-inner {
        padding: clamp(20px, 2.3vw, 34px);
    }

    .auth-panel-inner::before {
        content: none;
    }

    .auth-waterline {
        margin-bottom: var(--login-console-gap);
        padding-bottom: 8px;
    }

    .auth-waterline-kicker,
    .auth-waterline-copy {
        font-size: 0.68rem;
    }

    .form-brand {
        margin-bottom: var(--login-console-gap);
    }

    .form-kicker {
        margin-bottom: 5px;
        font-size: 0.72rem;
    }

    .form-title {
        font-size: clamp(1.72rem, 2.35vw, 2.2rem);
        line-height: 1.08;
    }

    .form-subtitle {
        margin-top: 7px;
        font-size: 0.9rem;
        line-height: 1.48;
    }

    .tab-section {
        margin-bottom: var(--login-console-gap);
    }

    .tabs {
        padding: 4px;
        border-radius: 17px;
        background:
            linear-gradient(180deg, rgba(248, 252, 254, 0.065), rgba(159, 204, 225, 0.022)),
            rgba(5, 27, 43, 0.16);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.055),
            0 8px 18px rgba(2, 13, 23, 0.075);
    }

    .tab-btn {
        min-height: 42px;
        border-radius: 14px;
        padding: 7px 10px;
        font-size: 0.94rem;
    }

    .auth-form {
        padding: 10px 12px 12px;
        margin-bottom: var(--login-console-gap);
        border-color: rgba(218, 240, 248, 0.045);
        background:
            linear-gradient(180deg, rgba(248, 252, 254, 0.032), rgba(137, 192, 217, 0.012)),
            rgba(4, 23, 38, 0.08);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.025),
            0 12px 28px rgba(2, 13, 23, 0.055);
    }

    .input-group {
        margin-bottom: 9px;
        padding-top: 18px;
    }

    .input-group label {
        font-size: 0.86rem;
    }

    .field-hint {
        max-width: 58%;
        overflow: hidden;
        text-overflow: ellipsis;
        color: rgba(218, 237, 246, 0.56);
        font-size: 0.68rem;
    }

    .input-group input {
        min-height: 46px;
        border-radius: 15px;
        padding: 10px 14px;
        font-size: 0.95rem;
    }

    .checkbox-group {
        margin: 2px 0 10px;
    }

    .checkbox-label {
        font-size: 0.86rem;
    }

    .auth-cta {
        min-height: 50px;
        border-radius: 17px;
        font-size: 1rem;
    }

    .footer-links {
        gap: 6px;
        padding-top: 8px;
    }

    .footer-links-label {
        font-size: 0.68rem;
    }

    .link-forgot,
    .link-guest {
        font-size: 0.84rem;
    }
}

@media (min-width: 981px) and (max-height: 820px) {
    .login-page {
        --login-stage-fit-height: min(660px, calc(100dvh - 92px));
        --login-console-gap: 7px;
    }

    .login-page .page-stage {
        padding-top: 46px;
        padding-bottom: 46px;
    }

    .login-container {
        width: min(1320px, calc(100vw - clamp(130px, 9vw, 220px)));
    }

    .login-side,
    .form-side,
    .login-page[data-auth-mode="login"] .form-side {
        padding-top: 24px;
        padding-bottom: 24px;
    }

    .login-brand-copy {
        gap: 10px;
        transform: translate3d(0, -6px, 0);
    }

    .side-title {
        font-size: clamp(3.1rem, 5.1vw, 4.35rem);
    }

    .side-quote,
    .side-meta,
    .form-subtitle {
        font-size: 0.84rem;
    }

    .side-observatory-title {
        display: none;
    }

    .side-observatory::after {
        top: 12px;
    }

    .side-observatory-item {
        padding-top: 5px;
        padding-bottom: 5px;
    }

    .auth-panel-inner {
        padding: 18px 24px;
    }

    .auth-waterline {
        padding-bottom: 6px;
    }

    .form-title {
        font-size: clamp(1.52rem, 2.1vw, 1.95rem);
    }

    .tab-btn {
        min-height: 38px;
    }

    .input-group {
        margin-bottom: 7px;
    }

    .field-hint {
        display: none;
    }

    .input-group label {
        position: relative;
        margin-bottom: 5px;
        max-width: none;
    }

    .input-group {
        padding-top: 0;
    }

    .input-group input {
        min-height: 42px;
    }

    .auth-cta {
        min-height: 46px;
    }
}

/* 主入口按钮的入场动画会占用 transform；用独立 translate/scale 保留 hover 与 active 的推进反馈。 */
@media (min-width: 981px) {
    .auth-cta {
        translate: 0 0;
        scale: 1;
        transition:
            translate 320ms cubic-bezier(0.18, 0.84, 0.22, 1),
            scale 320ms cubic-bezier(0.18, 0.84, 0.22, 1),
            transform 320ms cubic-bezier(0.18, 0.84, 0.22, 1),
            box-shadow 320ms ease,
            border-color 320ms ease,
            background 320ms ease,
            filter 320ms ease;
    }

    .auth-cta:hover {
        translate: 5px -2px;
        scale: 1.006;
    }

    .auth-cta:active {
        translate: 4px 3px;
        scale: 0.992;
    }

    .auth-cta.is-entering-mainline,
    .login-page.is-auth-entering-mainline .auth-cta.is-entering-mainline {
        translate: 8px -1px;
        scale: 1.012;
    }
}

@keyframes entrance-beam-breathe {
    0%,
    100% {
        opacity: 0.62;
        transform: translateX(-50%) translate3d(-1.2%, 0, 0) scale(1);
    }
    50% {
        opacity: 0.86;
        transform: translateX(-50%) translate3d(1.2%, 1.4%, 0) scale(1.04);
    }
}

/* 桌面端首屏收束层：让 1440x900 投屏视口内也能完整看见入口舱。 */
@media (min-width: 981px) {
    .login-page {
        --login-stage-min-height: clamp(560px, 68vh, 720px);
    }

    .login-page .page-stage {
        padding-top: max(clamp(16px, 2.1vh, 28px), var(--login-stage-safe-gap-y));
        padding-bottom: max(clamp(16px, 2.1vh, 28px), var(--login-stage-safe-gap-y));
    }

    .login-side,
    .form-side,
    .login-page[data-auth-mode="login"] .form-side {
        padding-top: clamp(30px, 3.2vw, 54px);
        padding-bottom: clamp(30px, 3.2vw, 54px);
    }

    .auth-panel-shell {
        padding: clamp(14px, 1.55vw, 20px);
    }

    .auth-panel-inner {
        padding: clamp(4px, 0.55vw, 8px);
    }

    .auth-waterline {
        margin-bottom: 14px;
        padding-bottom: 9px;
    }

    .form-brand {
        margin-bottom: 14px;
    }

    .form-title {
        font-size: clamp(1.86rem, 2.45vw, 2.38rem);
    }

    .form-subtitle {
        margin-top: 8px;
        font-size: 0.95rem;
        line-height: 1.58;
    }

    .tab-section {
        margin-bottom: 12px;
    }

    .tab-btn {
        min-height: 48px;
    }

    .auth-form {
        padding: 12px 14px 14px;
        margin-bottom: 10px;
    }

    .input-group {
        margin-bottom: 12px;
        padding-top: 20px;
    }

    .input-group label {
        position: absolute;
        left: 0;
        top: 0;
        margin-bottom: 0;
        max-width: 42%;
    }

    .field-hint {
        position: absolute;
        top: 1px;
        right: 2px;
        max-width: 62%;
        margin-top: 0;
        font-size: 0.72rem;
        line-height: 1.34;
        text-align: right;
        white-space: nowrap;
    }

    .input-group input {
        min-height: 52px;
        padding: 12px 15px;
    }

    .checkbox-group {
        margin: 3px 0 13px;
    }

    .auth-cta {
        min-height: 54px;
    }

    .footer-links {
        gap: 8px;
        padding-top: 10px;
    }
}

@media (min-width: 981px) and (max-height: 860px) {
    .login-page {
        --login-stage-min-height: clamp(540px, 64vh, 610px);
    }

    .side-title {
        font-size: clamp(3.35rem, 5.4vw, 4.86rem);
    }

    .side-quote {
        font-size: clamp(1rem, 1.08vw, 1.14rem);
    }

    .side-meta,
    .form-subtitle {
        font-size: 0.9rem;
    }

    .side-observatory-item {
        padding-top: 7px;
        padding-bottom: 7px;
    }

    .side-waterline-status {
        font-size: 0.82rem;
        line-height: 1.5;
    }
}

/* 最终首屏防裁切层：
   放在所有登录页桌面覆盖之后，确保任何 16:9 桌面视口里主按钮和进度条都不掉出玻璃舱。 */
@media (min-width: 981px) {
    .login-page {
        --login-stage-fit-height: min(700px, calc(100dvh - 100px));
        --login-stage-min-height: var(--login-stage-fit-height);
        --login-console-gap: clamp(7px, 0.92vh, 11px);
    }

    .login-page .page-stage {
        padding-top: calc((100dvh - var(--login-stage-fit-height)) / 2);
        padding-bottom: calc((100dvh - var(--login-stage-fit-height)) / 2);
    }

    .login-stage-shell,
    .glass-card {
        height: var(--login-stage-fit-height);
        min-height: 0;
        max-height: calc(100dvh - 100px);
    }

    .card-layout,
    .login-side,
    .form-side {
        min-height: 0;
        height: 100%;
        box-sizing: border-box;
    }

    .form-side,
    .login-page[data-auth-mode="login"] .form-side {
        overflow: hidden;
        padding-top: clamp(20px, 2.3vw, 34px);
        padding-bottom: clamp(20px, 2.3vw, 34px);
    }

    .auth-panel-shell {
        max-height: 100%;
        padding: 0;
        overflow: hidden;
    }

    .auth-panel-inner {
        padding: clamp(18px, 2vw, 28px);
    }

    .auth-waterline {
        margin-bottom: var(--login-console-gap);
        padding-bottom: 6px;
    }

    .form-brand {
        margin-bottom: var(--login-console-gap);
    }

    .form-title {
        font-size: clamp(1.62rem, 2.18vw, 2.06rem);
    }

    .form-subtitle {
        margin-top: 6px;
        font-size: 0.86rem;
        line-height: 1.42;
    }

    .tab-section {
        margin-bottom: var(--login-console-gap);
    }

    .tab-btn {
        min-height: 40px;
        padding-top: 6px;
        padding-bottom: 6px;
    }

    .auth-form {
        padding: 9px 12px 11px;
        margin-bottom: var(--login-console-gap);
    }

    .input-group {
        margin-bottom: 8px;
        padding-top: 17px;
    }

    .input-group input {
        min-height: 44px;
        padding-top: 9px;
        padding-bottom: 9px;
    }

    .checkbox-group {
        margin-top: 1px;
        margin-bottom: 9px;
    }

    .auth-cta {
        min-height: 48px;
    }

    .footer-links {
        gap: 5px;
        padding-top: 7px;
    }

    .login-side {
        overflow: hidden;
        padding-top: clamp(26px, 2.8vw, 44px);
        padding-bottom: clamp(20px, 2.2vw, 34px);
    }

    .login-brand-copy {
        justify-content: center;
        gap: clamp(10px, 1.25vh, 16px);
        transform: translate3d(0, -10px, 0);
    }

    .side-title {
        font-size: clamp(3.45rem, 5.55vw, 5.2rem);
    }

    .side-observatory {
        margin-top: 0;
    }

    .side-observatory-title {
        margin-bottom: 6px;
    }

    .side-observatory-item {
        padding-top: 5px;
        padding-bottom: 5px;
    }

    .side-waterline {
        margin-top: 0;
        padding-top: 9px;
    }
}

@media (min-width: 981px) and (max-height: 820px) {
    .login-page {
        --login-stage-fit-height: min(620px, calc(100dvh - 92px));
        --login-console-gap: 6px;
    }

    .auth-panel-inner {
        padding: 16px 22px;
    }

    .auth-waterline-copy {
        max-width: 18em;
        text-align: right;
    }

    .form-kicker {
        margin-bottom: 3px;
    }

    .form-title {
        font-size: clamp(1.44rem, 1.9vw, 1.82rem);
    }

    .tab-btn {
        min-height: 36px;
    }

    .auth-form {
        padding-top: 8px;
        padding-bottom: 9px;
    }

    .input-group {
        margin-bottom: 6px;
        padding-top: 0;
    }

    .input-group label {
        position: relative;
        max-width: none;
        margin-bottom: 4px;
    }

    .field-hint {
        display: none;
    }

    .input-group input {
        min-height: 40px;
    }

    .auth-cta {
        min-height: 44px;
    }

    .footer-links-label {
        display: none;
    }

    .footer-links {
        padding-top: 6px;
    }

    .side-title {
        font-size: clamp(3rem, 4.9vw, 4.1rem);
    }

    .side-quote,
    .side-meta,
    .side-observatory-title,
    .side-waterline-status {
        font-size: 0.8rem;
    }
}

/* 静水入口减重层：
   在既有深海玻璃拟态方向上做最后的“减厚、减硬、减套娃”收束。 */
@media (min-width: 981px) {
    .card-layout::before {
        content: "";
        position: absolute;
        inset: 0;
        z-index: -1;
        background:
            radial-gradient(ellipse at 22% 18%, rgba(223, 246, 252, 0.055), transparent 38%),
            radial-gradient(ellipse at 72% 58%, rgba(76, 151, 187, 0.035), transparent 48%),
            linear-gradient(90deg, rgba(9, 36, 56, 0.08), rgba(5, 25, 41, 0.055) 45%, rgba(6, 30, 48, 0.085));
        pointer-events: none;
    }

    .login-page {
        --login-stage-fit-height: min(640px, calc(100dvh - 128px));
        --login-stage-min-height: var(--login-stage-fit-height);
        --login-console-gap: clamp(9px, 1.05vh, 13px);
    }

    .login-page .page-stage {
        justify-content: center;
        padding-inline: clamp(76px, 8vw, 150px);
        padding-top: calc((100dvh - var(--login-stage-fit-height)) / 2);
        padding-bottom: calc((100dvh - var(--login-stage-fit-height)) / 2);
    }

    .login-container {
        width: 100%;
        max-width: none;
        padding: 0;
    }

    .login-stage-shell {
        width: min(76vw, 1240px, calc(100vw - clamp(152px, 16vw, 300px)));
        min-width: min(980px, calc(100vw - clamp(152px, 16vw, 300px)));
        max-width: 1240px;
        height: var(--login-stage-fit-height);
        min-height: 0;
    }

    .login-stage-glow {
        inset: -18px -24px -24px;
        border-radius: 54px;
        background:
            radial-gradient(ellipse at 18% 2%, rgba(223, 246, 252, 0.18), transparent 32%),
            radial-gradient(ellipse at 78% 88%, rgba(84, 166, 201, 0.12), transparent 34%),
            radial-gradient(ellipse at 50% 110%, rgba(8, 42, 66, 0.28), transparent 58%);
        filter: blur(28px);
        opacity: 0.62;
    }

    .glass-card {
        height: var(--login-stage-fit-height);
        min-height: 0;
        max-height: calc(100dvh - 128px);
        border-radius: clamp(36px, 3vw, 46px);
        border-color: rgba(224, 244, 251, 0.16);
        background:
            linear-gradient(132deg, rgba(240, 250, 253, 0.1), rgba(125, 185, 211, 0.035) 44%, rgba(4, 21, 35, 0.14)),
            linear-gradient(180deg, rgba(11, 45, 67, 0.24), rgba(3, 20, 34, 0.3)),
            rgba(7, 28, 45, 0.24);
        box-shadow:
            0 24px 58px rgba(1, 10, 19, 0.34),
            0 0 0 1px rgba(179, 223, 239, 0.06),
            0 0 34px rgba(122, 198, 226, 0.055),
            inset 0 1px 0 rgba(255, 255, 255, 0.2),
            inset 0 -1px 0 rgba(255, 255, 255, 0.04);
        backdrop-filter: blur(22px) saturate(116%);
        -webkit-backdrop-filter: blur(22px) saturate(116%);
    }

    .glass-card::before {
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0) 16%),
            radial-gradient(ellipse at 20% 4%, rgba(255, 255, 255, 0.14), transparent 32%),
            radial-gradient(ellipse at 78% 96%, rgba(104, 184, 218, 0.08), transparent 36%);
        opacity: 0.72;
    }

    .glass-card::after {
        background-image:
            linear-gradient(104deg, transparent 0 38%, rgba(227, 246, 252, 0.035) 47%, transparent 58%),
            radial-gradient(circle at 18% 22%, rgba(238, 251, 254, 0.052) 0.7px, transparent 1.2px),
            radial-gradient(circle at 72% 66%, rgba(207, 238, 249, 0.044) 0.7px, transparent 1.2px),
            linear-gradient(180deg, transparent 60%, rgba(0, 13, 24, 0.14) 100%);
        background-size: 100% 100%, 10px 10px, 12px 12px, 100% 100%;
        opacity: 0.22;
    }

    .login-stage-divider {
        inset: 34px auto 34px 42%;
        background: linear-gradient(
            180deg,
            rgba(230, 247, 252, 0) 0%,
            rgba(230, 247, 252, 0.09) 22%,
            rgba(149, 211, 235, 0.07) 54%,
            rgba(230, 247, 252, 0) 100%
        );
        box-shadow: 0 0 14px rgba(148, 214, 238, 0.045);
        opacity: 0.26;
    }

    .login-stage-divider::before,
    .login-stage-divider::after {
        width: 42px;
        filter: blur(18px);
        opacity: 0.28;
    }

    .card-layout {
        grid-template-columns: minmax(360px, 42%) minmax(0, 58%);
        min-height: 0;
        height: 100%;
    }

    .login-side {
        padding: clamp(34px, 3vw, 48px) clamp(34px, 3.4vw, 56px);
        border-right: 0;
        background:
            radial-gradient(ellipse at 24% 12%, rgba(239, 250, 254, 0.06), transparent 36%),
            radial-gradient(ellipse at 92% 74%, rgba(77, 157, 193, 0.04), transparent 42%),
            linear-gradient(155deg, rgba(10, 42, 64, 0.105), rgba(3, 20, 34, 0.055));
        backdrop-filter: blur(4px);
        -webkit-backdrop-filter: blur(4px);
    }

    .login-side::after {
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.026), rgba(255, 255, 255, 0)),
            linear-gradient(90deg, transparent 72%, rgba(160, 214, 233, 0.018) 100%);
    }

    .login-brand-copy {
        width: min(360px, 100%);
        gap: clamp(12px, 1.35vh, 18px);
        transform: translate3d(0, -4px, 0);
    }

    .side-kicker {
        color: rgba(235, 247, 252, 0.76);
        font-size: 0.72rem;
        letter-spacing: 0.36em;
    }

    .side-depth-tag {
        padding: 6px 13px;
        border-color: rgba(222, 242, 250, 0.14);
        background:
            linear-gradient(180deg, rgba(245, 252, 254, 0.075), rgba(122, 187, 214, 0.025)),
            rgba(5, 27, 43, 0.18);
        font-size: 0.75rem;
        letter-spacing: 0.18em;
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.07);
    }

    .side-title {
        font-size: clamp(3.55rem, 5.5vw, 5.2rem);
        letter-spacing: 0.14em;
        color: rgba(247, 252, 254, 0.98);
        text-shadow:
            0 14px 34px rgba(1, 11, 21, 0.34),
            0 0 18px rgba(212, 242, 251, 0.1);
    }

    .side-quote {
        max-width: 15em;
        font-size: clamp(0.98rem, 1.05vw, 1.12rem);
        line-height: 1.58;
    }

    .side-meta {
        max-width: 19em;
        font-size: 0.86rem;
        line-height: 1.58;
        color: rgba(237, 246, 250, 0.86);
    }

    .side-observatory {
        margin-top: 0;
        padding: 12px 14px 10px;
        border-radius: 22px;
        border: 1px solid rgba(220, 241, 249, 0.09);
        background:
            linear-gradient(145deg, rgba(239, 250, 254, 0.055), rgba(93, 165, 198, 0.018)),
            rgba(5, 25, 41, 0.09);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.06),
            0 14px 26px rgba(2, 13, 23, 0.055);
    }

    .side-observatory::after {
        content: none;
    }

    .side-observatory-title {
        margin-bottom: 8px;
        color: rgba(239, 248, 252, 0.74);
        font-size: 0.72rem;
        line-height: 1.35;
        letter-spacing: 0.12em;
        text-transform: uppercase;
    }

    .side-observatory-title span {
        letter-spacing: 0.26em;
    }

    .side-observatory-item {
        grid-template-columns: minmax(38px, 0.32fr) minmax(0, 1fr);
        gap: 9px;
        padding: 5px 0 5px 12px;
        border-top-color: rgba(214, 238, 247, 0.045);
    }

    .side-observatory-label {
        color: rgba(216, 238, 246, 0.6);
        font-size: 0.64rem;
    }

    .side-observatory-item strong {
        color: rgba(245, 250, 252, 0.82);
        font-size: 0.8rem;
        line-height: 1.38;
    }

    .side-waterline {
        margin-top: 0;
        padding-top: 8px;
    }

    .side-waterline-label {
        font-size: 0.68rem;
        letter-spacing: 0.24em;
    }

    .side-waterline-track {
        height: 7px;
        border-color: rgba(218, 241, 249, 0.11);
        background:
            linear-gradient(90deg, rgba(3, 19, 31, 0.42), rgba(6, 34, 53, 0.26)),
            rgba(255, 255, 255, 0.025);
        box-shadow:
            inset 0 1px 2px rgba(0, 0, 0, 0.18),
            0 0 12px rgba(126, 205, 232, 0.035);
    }

    .side-waterline-status {
        font-size: 0.78rem;
        line-height: 1.46;
        color: rgba(236, 247, 251, 0.8);
    }

    .form-side,
    .login-page[data-auth-mode="login"] .form-side {
        padding: clamp(30px, 3vw, 44px) clamp(36px, 3.8vw, 58px);
        background:
            radial-gradient(ellipse at 0% 50%, rgba(188, 230, 244, 0.026), transparent 44%),
            linear-gradient(90deg, rgba(4, 20, 34, 0.012), rgba(6, 30, 48, 0.042));
    }

    .form-side::before {
        left: -48px;
        width: 104px;
        background:
            linear-gradient(90deg, rgba(198, 232, 243, 0.04), transparent 72%),
            radial-gradient(circle at 32% 50%, rgba(173, 221, 239, 0.06), transparent 64%);
        opacity: 0.46;
    }

    .form-side::after {
        content: none;
    }

    .auth-panel-shell {
        width: min(540px, 100%);
        max-height: 100%;
        margin: 0 auto;
        padding: 0;
        border-radius: 28px;
        border-color: rgba(218, 241, 249, 0.038);
        background:
            linear-gradient(180deg, rgba(248, 252, 254, 0.025), rgba(128, 188, 214, 0.008)),
            rgba(4, 24, 39, 0.018);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.032),
            0 14px 28px rgba(2, 13, 24, 0.055);
        overflow: visible;
        animation: none;
    }

    .auth-panel-shell::after,
    .auth-panel-inner::before {
        content: none;
    }

    .auth-panel-glass {
        inset: 0;
        border-radius: inherit;
        background:
            radial-gradient(ellipse at 88% 10%, rgba(238, 250, 254, 0.022), transparent 28%),
            linear-gradient(180deg, rgba(10, 44, 65, 0.045), rgba(4, 22, 36, 0.026));
        box-shadow: none;
        opacity: 0.42;
    }

    .auth-panel-inner {
        padding: clamp(20px, 2vw, 28px);
    }

    .auth-waterline {
        margin-bottom: var(--login-console-gap);
        padding: 0 0 8px;
        border-bottom-color: rgba(218, 240, 248, 0.075);
        background: none;
    }

    .auth-waterline-kicker,
    .auth-waterline-copy {
        font-size: 0.68rem;
    }

    .auth-waterline-kicker {
        color: rgba(235, 247, 252, 0.66);
        letter-spacing: 0.26em;
    }

    .auth-waterline-copy {
        color: rgba(224, 242, 249, 0.62);
    }

    .form-brand {
        margin-bottom: var(--login-console-gap);
    }

    .form-kicker {
        margin-bottom: 5px;
        color: rgba(241, 248, 251, 0.66);
        font-size: 0.7rem;
        letter-spacing: 0.34em;
    }

    .form-title {
        font-size: clamp(1.62rem, 2.1vw, 2.05rem);
        text-shadow:
            0 10px 24px rgba(1, 11, 21, 0.26),
            0 0 12px rgba(203, 235, 247, 0.07);
    }

    .form-subtitle {
        margin-top: 6px;
        color: rgba(239, 248, 252, 0.82);
        font-size: 0.86rem;
        line-height: 1.52;
    }

    .tab-section {
        margin-bottom: var(--login-console-gap);
    }

    .tabs {
        padding: 3px;
        border-radius: 999px;
        border-color: rgba(220, 241, 249, 0.07);
        background:
            linear-gradient(180deg, rgba(248, 252, 254, 0.052), rgba(159, 204, 225, 0.018)),
            rgba(5, 27, 43, 0.095);
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.052);
        backdrop-filter: blur(10px);
        -webkit-backdrop-filter: blur(10px);
    }

    .tab-btn {
        min-height: 40px;
        border-radius: 999px;
        color: rgba(232, 244, 250, 0.78);
        font-size: 0.92rem;
        background: transparent;
    }

    .tab-btn.active,
    .tab-btn[aria-selected="true"] {
        border-color: rgba(223, 243, 250, 0.15);
        background:
            linear-gradient(180deg, rgba(246, 252, 254, 0.105), rgba(147, 205, 229, 0.055)),
            rgba(182, 226, 242, 0.024);
        color: rgba(250, 253, 255, 0.94);
        box-shadow:
            0 7px 16px rgba(2, 13, 23, 0.08),
            inset 0 1px 0 rgba(255, 255, 255, 0.1);
    }

    .auth-form {
        margin-bottom: var(--login-console-gap);
        padding: 8px 0 6px;
        border: 0;
        border-radius: 0;
        background: transparent;
        box-shadow: none;
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
    }

    .input-group {
        margin-bottom: 11px;
        padding-top: 17px;
    }

    .input-group label {
        color: rgba(246, 251, 253, 0.88);
        font-size: 0.86rem;
    }

    .field-hint {
        color: rgba(216, 236, 244, 0.62);
    }

    .input-group input {
        min-height: 46px;
        border-radius: 16px;
        border-color: rgba(221, 242, 250, 0.15);
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.072), rgba(173, 213, 232, 0.03)),
            rgba(5, 27, 44, 0.22);
        padding: 10px 15px;
        color: rgba(249, 253, 255, 0.96);
        font-size: 0.95rem;
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.075),
            0 10px 20px rgba(2, 13, 23, 0.075);
    }

    .input-group input::placeholder {
        color: rgba(225, 239, 247, 0.68);
    }

    .input-group input:focus {
        border-color: rgba(186, 234, 249, 0.42);
        background:
            radial-gradient(ellipse at 18% 0%, rgba(232, 249, 253, 0.08), transparent 46%),
            linear-gradient(180deg, rgba(255, 255, 255, 0.105), rgba(184, 222, 238, 0.046)),
            rgba(8, 38, 58, 0.3);
        box-shadow:
            0 0 0 3px rgba(116, 201, 231, 0.075),
            0 0 18px rgba(123, 207, 235, 0.085),
            0 12px 22px rgba(2, 13, 23, 0.11),
            inset 0 1px 0 rgba(255, 255, 255, 0.11);
    }

    .input-group.is-filled input {
        border-color: rgba(205, 237, 248, 0.24);
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(177, 215, 232, 0.042)),
            rgba(4, 26, 43, 0.3);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.1),
            0 12px 22px rgba(2, 13, 23, 0.095),
            0 0 0 1px rgba(198, 231, 243, 0.045);
    }

    .input-group.is-complete input {
        border-color: rgba(190, 233, 247, 0.34);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.13),
            0 0 0 1px rgba(168, 223, 240, 0.075),
            0 12px 24px rgba(2, 13, 23, 0.11),
            0 0 20px rgba(126, 206, 232, 0.065);
    }

    .checkbox-group {
        margin: 3px 0 12px;
    }

    .checkbox-label {
        color: rgba(238, 247, 251, 0.82);
        font-size: 0.84rem;
    }

    .auth-cta {
        min-height: 50px;
        border-radius: 999px;
        color: rgba(247, 253, 255, 0.96);
        font-size: 0.95rem;
        letter-spacing: 0.1em;
        background:
            radial-gradient(ellipse at 24% 0%, rgba(245, 254, 255, 0.24), transparent 44%),
            linear-gradient(135deg, rgba(142, 219, 235, 0.66), rgba(51, 135, 170, 0.56) 48%, rgba(11, 67, 111, 0.68)),
            rgba(10, 62, 101, 0.48);
        border-color: rgba(209, 241, 250, 0.28);
        box-shadow:
            0 14px 28px rgba(1, 11, 22, 0.18),
            0 0 20px rgba(130, 213, 238, 0.085),
            inset 0 1px 0 rgba(255, 255, 255, 0.2),
            inset 0 -10px 20px rgba(1, 21, 42, 0.11);
        text-shadow: 0 7px 16px rgba(1, 10, 20, 0.24);
    }

    .auth-cta:hover {
        border-color: rgba(226, 248, 254, 0.42);
        box-shadow:
            0 18px 32px rgba(1, 11, 22, 0.22),
            0 0 28px rgba(142, 220, 243, 0.14),
            inset 0 1px 0 rgba(255, 255, 255, 0.24),
            inset 0 -12px 22px rgba(1, 21, 42, 0.14);
    }

    .auth-cta:active {
        box-shadow:
            0 10px 22px rgba(1, 11, 22, 0.24),
            0 0 20px rgba(112, 197, 230, 0.1),
            inset 0 10px 22px rgba(1, 21, 42, 0.18);
    }

    .footer-links {
        gap: 7px;
        padding-top: 9px;
        border-top-color: rgba(224, 242, 249, 0.055);
    }

    .footer-links-label {
        color: rgba(225, 241, 248, 0.58);
        font-size: 0.68rem;
    }

    .link-forgot,
    .link-guest {
        color: rgba(239, 248, 252, 0.78);
        font-size: 0.82rem;
    }

    .divider {
        color: rgba(229, 243, 249, 0.42);
    }

    .login-atmosphere::before {
        left: 50%;
        top: -11vh;
        width: min(600px, 42vw);
        height: 46vh;
        background:
            linear-gradient(98deg, transparent 6%, rgba(236, 251, 255, 0.08) 24%, transparent 36%),
            linear-gradient(83deg, transparent 26%, rgba(181, 227, 244, 0.052) 48%, transparent 62%),
            radial-gradient(ellipse at 50% 0%, rgba(248, 253, 255, 0.14), transparent 56%);
        filter: blur(8px);
        opacity: 0.5;
    }

    .login-atmosphere::after {
        background:
            radial-gradient(ellipse at 50% 38%, transparent 0%, rgba(1, 10, 19, 0.02) 44%, rgba(1, 9, 18, 0.4) 100%),
            linear-gradient(90deg, rgba(1, 8, 16, 0.32), transparent 22%, transparent 78%, rgba(1, 8, 16, 0.32));
    }

    .atmosphere-haze {
        opacity: 0.3;
    }
}

@media (min-width: 981px) and (max-height: 820px) {
    .login-page {
        --login-stage-fit-height: min(600px, calc(100dvh - 118px));
        --login-console-gap: 7px;
    }

    .login-stage-shell {
        width: min(76vw, 1180px, calc(100vw - clamp(152px, 16vw, 300px)));
    }

    .login-side {
        padding-top: 28px;
        padding-bottom: 28px;
    }

    .login-brand-copy {
        gap: 9px;
        transform: translate3d(0, -4px, 0);
    }

    .side-title {
        font-size: clamp(3rem, 4.7vw, 4rem);
    }

    .side-quote,
    .side-meta,
    .side-waterline-status {
        font-size: 0.78rem;
    }

    .side-observatory {
        padding: 10px 12px 8px;
    }

    .side-observatory-title {
        margin-bottom: 5px;
        font-size: 0.66rem;
    }

    .side-observatory-item {
        padding-top: 4px;
        padding-bottom: 4px;
    }

    .side-observatory-item strong {
        font-size: 0.76rem;
    }

    .form-side,
    .login-page[data-auth-mode="login"] .form-side {
        padding-top: 26px;
        padding-bottom: 26px;
    }

    .auth-panel-inner {
        padding: 16px 20px;
    }

    .input-group {
        margin-bottom: 7px;
    }

    .input-group input {
        min-height: 41px;
    }

    .auth-cta {
        min-height: 44px;
    }
}

/* 注册态比登录态多一组字段，单独收紧，避免轻量外舱缩小后底部入口被裁切。 */
@media (min-width: 981px) {
    .login-page[data-auth-mode="register"] {
        --login-console-gap: 6px;
    }

    .login-page[data-auth-mode="register"] .form-side {
        padding-top: clamp(22px, 2.4vw, 34px);
        padding-bottom: clamp(22px, 2.4vw, 34px);
    }

    .login-page[data-auth-mode="register"] .auth-panel-inner {
        padding-top: clamp(14px, 1.6vw, 22px);
        padding-bottom: clamp(14px, 1.6vw, 22px);
    }

    .login-page[data-auth-mode="register"] .auth-waterline {
        margin-bottom: 5px;
        padding-bottom: 5px;
    }

    .login-page[data-auth-mode="register"] .auth-waterline-copy {
        display: none;
    }

    .login-page[data-auth-mode="register"] .form-kicker {
        margin-bottom: 3px;
    }

    .login-page[data-auth-mode="register"] .form-title {
        font-size: clamp(1.38rem, 1.82vw, 1.72rem);
    }

    .login-page[data-auth-mode="register"] .form-subtitle {
        margin-top: 4px;
        font-size: 0.8rem;
        line-height: 1.36;
    }

    .login-page[data-auth-mode="register"] .tab-btn {
        min-height: 35px;
        padding-top: 5px;
        padding-bottom: 5px;
    }

    .login-page[data-auth-mode="register"] .auth-form {
        padding-top: 5px;
        padding-bottom: 4px;
    }

    .login-page[data-auth-mode="register"] .input-group {
        margin-bottom: 6px;
        padding-top: 0;
    }

    .login-page[data-auth-mode="register"] .input-group label {
        position: relative;
        max-width: none;
        margin-bottom: 3px;
        font-size: 0.8rem;
    }

    .login-page[data-auth-mode="register"] .field-hint {
        display: none;
    }

    .login-page[data-auth-mode="register"] .input-group input {
        min-height: 38px;
        padding-top: 7px;
        padding-bottom: 7px;
        font-size: 0.9rem;
    }

    .login-page[data-auth-mode="register"] .checkbox-group {
        margin-top: 1px;
        margin-bottom: 8px;
    }

    .login-page[data-auth-mode="register"] .checkbox-label {
        font-size: 0.78rem;
        line-height: 1.36;
    }

    .login-page[data-auth-mode="register"] .auth-cta {
        min-height: 42px;
        font-size: 0.88rem;
    }

    .login-page[data-auth-mode="register"] .footer-links-label {
        display: none;
    }

    .login-page[data-auth-mode="register"] .footer-links {
        padding-top: 6px;
        gap: 5px;
    }
}

@media (min-width: 981px) {
    .glass-card {
        animation: yanqi-light-glass-breathe 7.8s ease-in-out 1s infinite alternate;
    }

    .login-page.is-field-focus .glass-card {
        box-shadow:
            0 24px 58px rgba(1, 10, 19, 0.34),
            0 0 0 1px rgba(179, 223, 239, 0.06),
            0 0 34px rgba(122, 198, 226, 0.055),
            inset 0 1px 0 rgba(255, 255, 255, 0.2),
            inset 0 -1px 0 rgba(255, 255, 255, 0.04);
    }

    .login-page.is-field-focus .auth-panel-shell {
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.032),
            0 14px 28px rgba(2, 13, 24, 0.055);
    }

    .login-page.is-field-focus .auth-waterline {
        transform: none;
        border-color: rgba(218, 240, 248, 0.075);
        box-shadow: none;
    }

    .login-page.is-switching .login-stage-divider {
        opacity: 0.34;
        box-shadow: 0 0 14px rgba(148, 214, 238, 0.06);
    }
}

@keyframes yanqi-light-glass-breathe {
    0%,
    100% {
        transform: translate3d(0, 0, 0);
        box-shadow:
            0 22px 52px rgba(1, 10, 19, 0.3),
            0 0 0 1px rgba(179, 223, 239, 0.055),
            0 0 30px rgba(122, 198, 226, 0.045),
            inset 0 1px 0 rgba(255, 255, 255, 0.18),
            inset 0 -1px 0 rgba(255, 255, 255, 0.035);
    }

    50% {
        transform: translate3d(0.6px, -1.4px, 0);
        box-shadow:
            0 26px 58px rgba(1, 10, 19, 0.32),
            0 0 0 1px rgba(179, 223, 239, 0.065),
            0 0 34px rgba(122, 198, 226, 0.055),
            inset 0 1px 0 rgba(255, 255, 255, 0.2),
            inset 0 -1px 0 rgba(255, 255, 255, 0.035);
    }
}

/* 第四张参考图精修层：让静水舱更轻、分区更柔、档案与输入状态更清楚。 */
@media (min-width: 981px) {
    .gradient-bg {
        background:
            radial-gradient(ellipse at 50% -8%, rgba(242, 252, 255, 0.12), transparent 29%),
            radial-gradient(ellipse at 18% 18%, rgba(86, 157, 193, 0.055), transparent 28%),
            linear-gradient(180deg, rgba(2, 13, 23, 0.42) 0%, rgba(5, 29, 48, 0.74) 48%, rgba(2, 16, 29, 0.96) 100%);
    }

    .gradient-bg::before {
        filter: saturate(0.5) contrast(1.02) brightness(0.39);
    }

    .gradient-bg::after {
        background:
            linear-gradient(96deg, transparent 33%, rgba(226, 247, 254, 0.105) 48%, transparent 60%),
            radial-gradient(ellipse at 52% -6%, rgba(248, 254, 255, 0.18), rgba(210, 239, 250, 0.04) 30%, transparent 58%),
            linear-gradient(180deg, rgba(80, 151, 190, 0.025), rgba(0, 9, 18, 0.18));
        opacity: 0.74;
    }

    .login-atmosphere::before {
        top: -13vh;
        width: min(500px, 34vw);
        height: 43vh;
        background:
            linear-gradient(96deg, transparent 12%, rgba(238, 251, 255, 0.12) 28%, transparent 41%),
            linear-gradient(83deg, transparent 34%, rgba(157, 216, 238, 0.055) 50%, transparent 65%),
            radial-gradient(ellipse at 50% 0%, rgba(248, 253, 255, 0.13), transparent 52%);
        filter: blur(6px);
        opacity: 0.44;
    }

    .login-atmosphere::after {
        background:
            radial-gradient(ellipse at 50% 40%, transparent 0%, rgba(1, 10, 19, 0.04) 42%, rgba(0, 7, 15, 0.52) 100%),
            linear-gradient(90deg, rgba(0, 7, 15, 0.46), transparent 23%, transparent 76%, rgba(0, 7, 15, 0.46));
    }

    .atmosphere-haze {
        filter: blur(30px);
        opacity: 0.16;
    }

    .atmosphere-haze.haze-a {
        width: 34vw;
        height: 18vh;
        background: radial-gradient(circle at 50% 50%, rgba(169, 220, 240, 0.13), transparent 70%);
    }

    .atmosphere-haze.haze-b {
        width: 32vw;
        height: 20vh;
        background: radial-gradient(circle at 50% 50%, rgba(75, 150, 187, 0.12), transparent 74%);
    }

    .atmosphere-wave {
        border-color: rgba(203, 235, 248, 0.045);
        background: linear-gradient(180deg, rgba(255, 255, 255, 0.014), transparent);
        opacity: 0.24;
    }

    .wave-b {
        opacity: 0.18;
    }

    .wave-c {
        opacity: 0.14;
    }

    .atmosphere-current {
        height: 1px;
        background: linear-gradient(90deg, transparent, rgba(214, 239, 247, 0.115), transparent);
        box-shadow: 0 0 12px rgba(174, 219, 237, 0.045);
        opacity: 0.28;
    }

    .atmosphere-ripple {
        border-color: rgba(223, 241, 248, 0.045);
        box-shadow: none;
        opacity: 0.09;
    }

    .ripple-a {
        top: 18%;
        right: 12%;
        width: 142px;
        height: 142px;
    }

    .ripple-b {
        bottom: 7%;
        left: 8%;
        width: 164px;
        height: 164px;
    }

    .particle {
        width: 4px;
        height: 4px;
        background: radial-gradient(circle, rgba(238, 251, 255, 0.7) 0%, rgba(166, 221, 241, 0.12) 100%);
        opacity: 0.13;
        filter: blur(0.2px);
        animation-duration: 18s;
    }

    .particle:nth-child(1),
    .particle:nth-child(4),
    .particle:nth-child(8) {
        width: 5px;
        height: 5px;
    }

    .particle:nth-child(2),
    .particle:nth-child(3),
    .particle:nth-child(6),
    .particle:nth-child(10) {
        width: 3px;
        height: 3px;
    }

    .particle:nth-child(5),
    .particle:nth-child(7),
    .particle:nth-child(9) {
        display: none;
    }

    .login-stage-glow {
        inset: -12px -18px -18px;
        border-radius: 48px;
        background:
            radial-gradient(ellipse at 18% 2%, rgba(226, 247, 253, 0.11), transparent 31%),
            radial-gradient(ellipse at 80% 92%, rgba(71, 153, 189, 0.075), transparent 34%),
            radial-gradient(ellipse at 50% 108%, rgba(6, 37, 60, 0.18), transparent 60%);
        filter: blur(22px);
        opacity: 0.42;
    }

    .glass-card {
        border-color: rgba(226, 246, 252, 0.125);
        background:
            linear-gradient(132deg, rgba(245, 252, 254, 0.058), rgba(121, 184, 212, 0.018) 42%, rgba(3, 20, 34, 0.095)),
            linear-gradient(180deg, rgba(8, 38, 59, 0.145), rgba(2, 17, 30, 0.205)),
            rgba(5, 25, 42, 0.155);
        box-shadow:
            0 20px 48px rgba(1, 9, 18, 0.28),
            0 0 0 1px rgba(187, 229, 244, 0.04),
            0 0 28px rgba(118, 198, 227, 0.04),
            inset 0 1px 0 rgba(255, 255, 255, 0.15),
            inset 0 -1px 0 rgba(255, 255, 255, 0.026);
        backdrop-filter: blur(17px) saturate(110%);
        -webkit-backdrop-filter: blur(17px) saturate(110%);
        animation-name: yanqi-v4-glass-breathe;
    }

    .glass-card::before {
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.115), rgba(255, 255, 255, 0) 13%),
            linear-gradient(115deg, rgba(255, 255, 255, 0.105) 0%, transparent 16%, transparent 78%, rgba(205, 238, 249, 0.08) 100%),
            radial-gradient(ellipse at 19% 5%, rgba(255, 255, 255, 0.105), transparent 29%),
            radial-gradient(ellipse at 90% 4%, rgba(198, 236, 248, 0.09), transparent 22%);
        opacity: 0.66;
    }

    .glass-card::after {
        background-image:
            linear-gradient(104deg, transparent 0 42%, rgba(227, 246, 252, 0.022) 50%, transparent 60%),
            radial-gradient(circle at 18% 22%, rgba(238, 251, 254, 0.028) 0.55px, transparent 1.1px),
            radial-gradient(circle at 72% 66%, rgba(207, 238, 249, 0.024) 0.55px, transparent 1.1px),
            linear-gradient(180deg, transparent 63%, rgba(0, 12, 23, 0.16) 100%);
        opacity: 0.17;
    }

    .card-layout::before {
        background:
            radial-gradient(ellipse at 39% 18%, rgba(229, 248, 253, 0.035), transparent 34%),
            radial-gradient(ellipse at 61% 76%, rgba(78, 160, 196, 0.025), transparent 40%),
            linear-gradient(90deg, rgba(9, 38, 58, 0.035), rgba(7, 32, 52, 0.018) 43%, rgba(5, 27, 45, 0.032));
        opacity: 0.56;
    }

    .login-stage-divider {
        inset: 40px auto 40px 42%;
        background: linear-gradient(
            180deg,
            rgba(230, 247, 252, 0) 0%,
            rgba(230, 247, 252, 0.048) 24%,
            rgba(149, 211, 235, 0.04) 56%,
            rgba(230, 247, 252, 0) 100%
        );
        box-shadow: none;
        opacity: 0.16;
    }

    .login-stage-divider::before,
    .login-stage-divider::after {
        width: 30px;
        filter: blur(16px);
        opacity: 0.16;
    }

    .login-side {
        background:
            radial-gradient(ellipse at 22% 14%, rgba(238, 250, 254, 0.04), transparent 36%),
            radial-gradient(ellipse at 93% 72%, rgba(77, 157, 193, 0.025), transparent 42%),
            linear-gradient(155deg, rgba(9, 39, 60, 0.055), rgba(3, 20, 34, 0.026));
        backdrop-filter: blur(2px);
        -webkit-backdrop-filter: blur(2px);
    }

    .login-side::after {
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.018), rgba(255, 255, 255, 0)),
            linear-gradient(90deg, transparent 72%, rgba(160, 214, 233, 0.01) 100%);
    }

    .login-side-orbit {
        border-color: rgba(211, 238, 247, 0.045);
        opacity: 0.12;
    }

    .form-side,
    .login-page[data-auth-mode="login"] .form-side {
        background:
            radial-gradient(ellipse at 0% 52%, rgba(188, 230, 244, 0.018), transparent 44%),
            radial-gradient(ellipse at 92% 18%, rgba(211, 241, 251, 0.018), transparent 36%),
            linear-gradient(90deg, rgba(3, 18, 31, 0.004), rgba(6, 30, 48, 0.02));
    }

    .form-side::before {
        left: -58px;
        width: 116px;
        background:
            linear-gradient(90deg, rgba(198, 232, 243, 0.018), transparent 72%),
            radial-gradient(circle at 30% 50%, rgba(173, 221, 239, 0.028), transparent 64%);
        opacity: 0.32;
    }

    .auth-panel-shell {
        border-color: rgba(218, 241, 249, 0.026);
        background:
            radial-gradient(ellipse at 86% 8%, rgba(238, 250, 254, 0.018), transparent 30%),
            linear-gradient(180deg, rgba(248, 252, 254, 0.012), rgba(128, 188, 214, 0.004)),
            rgba(4, 24, 39, 0.008);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.026),
            0 12px 22px rgba(2, 13, 24, 0.035);
    }

    .auth-panel-glass {
        opacity: 0.28;
    }

    .side-observatory {
        padding: 13px 16px 11px;
        border-radius: 20px;
        border-color: rgba(220, 241, 249, 0.13);
        background:
            linear-gradient(145deg, rgba(241, 251, 254, 0.06), rgba(83, 158, 194, 0.016)),
            linear-gradient(90deg, rgba(5, 27, 45, 0.13), rgba(3, 20, 34, 0.06));
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.072),
            inset 0 -1px 0 rgba(255, 255, 255, 0.018),
            0 10px 22px rgba(2, 13, 23, 0.036);
    }

    .side-observatory-title {
        margin-bottom: 7px;
        padding-bottom: 7px;
        border-bottom: 1px solid rgba(216, 240, 248, 0.055);
        color: rgba(243, 250, 253, 0.82);
        font-size: 0.74rem;
    }

    .side-observatory-title span {
        color: rgba(248, 252, 254, 0.84);
        letter-spacing: 0.28em;
    }

    .side-observatory-item {
        padding: 5px 0 5px 14px;
        border-top-color: rgba(214, 238, 247, 0.03);
    }

    .side-observatory-item::before {
        width: 3px;
        height: 3px;
        opacity: 0.42;
        box-shadow: 0 0 10px rgba(171, 226, 244, 0.14);
    }

    .side-observatory-label {
        color: rgba(221, 240, 247, 0.68);
    }

    .side-observatory-item strong {
        color: rgba(247, 252, 254, 0.89);
        font-weight: 520;
    }

    .side-waterline {
        padding-top: 9px;
    }

    .side-waterline-label,
    .side-waterline-value {
        color: rgba(238, 248, 252, 0.82);
    }

    .side-waterline-track {
        height: 7px;
        border-color: rgba(218, 241, 249, 0.16);
        background:
            linear-gradient(90deg, rgba(2, 17, 29, 0.48), rgba(8, 42, 64, 0.28)),
            rgba(222, 244, 251, 0.04);
        box-shadow:
            inset 0 1px 2px rgba(0, 0, 0, 0.2),
            0 0 14px rgba(126, 205, 232, 0.045);
    }

    .side-waterline-fill {
        background:
            linear-gradient(90deg, rgba(239, 250, 253, 0.82), rgba(173, 228, 244, 0.5) 52%, rgba(103, 190, 222, 0.34)),
            rgba(161, 216, 237, 0.2);
        box-shadow:
            0 0 16px rgba(164, 221, 239, 0.2),
            0 0 28px rgba(127, 196, 222, 0.09);
    }

    .side-waterline-status {
        color: rgba(241, 249, 252, 0.86);
        text-shadow: 0 6px 16px rgba(0, 10, 20, 0.18);
    }

    .input-group label {
        color: rgba(249, 253, 255, 0.94);
        font-weight: 600;
        text-shadow: 0 6px 14px rgba(0, 10, 20, 0.16);
    }

    .field-hint {
        color: rgba(224, 241, 248, 0.68);
    }

    .input-group input {
        border-color: rgba(221, 244, 252, 0.24);
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.088), rgba(173, 213, 232, 0.036)),
            rgba(6, 31, 49, 0.29);
        color: rgba(250, 254, 255, 0.99);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.095),
            0 10px 20px rgba(2, 13, 23, 0.08),
            0 0 0 1px rgba(198, 231, 243, 0.026);
    }

    .input-group input::placeholder {
        color: rgba(231, 244, 249, 0.76);
    }

    .input-group:focus-within label {
        color: rgba(250, 254, 255, 0.98);
    }

    .input-group input:focus {
        border-color: rgba(190, 237, 250, 0.54);
        background:
            radial-gradient(ellipse at 18% 0%, rgba(232, 249, 253, 0.105), transparent 46%),
            linear-gradient(180deg, rgba(255, 255, 255, 0.125), rgba(184, 222, 238, 0.052)),
            rgba(8, 38, 58, 0.36);
        box-shadow:
            0 0 0 3px rgba(116, 201, 231, 0.095),
            0 0 20px rgba(123, 207, 235, 0.12),
            0 12px 22px rgba(2, 13, 23, 0.11),
            inset 0 1px 0 rgba(255, 255, 255, 0.13);
    }

    .input-group.is-filled input {
        border-color: rgba(205, 237, 248, 0.36);
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.104), rgba(177, 215, 232, 0.048)),
            rgba(5, 29, 47, 0.36);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.115),
            0 12px 22px rgba(2, 13, 23, 0.1),
            0 0 0 1px rgba(198, 231, 243, 0.065);
    }

    .input-group.is-complete input {
        border-color: rgba(196, 238, 250, 0.48);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.145),
            0 0 0 1px rgba(168, 223, 240, 0.1),
            0 12px 24px rgba(2, 13, 23, 0.11),
            0 0 22px rgba(126, 206, 232, 0.09);
    }
}

@media (min-width: 981px) and (max-height: 820px) {
    .side-observatory {
        padding: 10px 13px 8px;
    }

    .side-observatory-title {
        margin-bottom: 5px;
        padding-bottom: 5px;
    }

    .side-waterline-status {
        min-height: 2.2em;
    }
}

/* 第四张参考图二次收束：化开右侧大面板和中线硬切，压回更深的静水底色。 */
@media (min-width: 981px) {
    .gradient-bg {
        background:
            radial-gradient(ellipse at 50% -10%, rgba(242, 252, 255, 0.08), transparent 27%),
            radial-gradient(ellipse at 18% 18%, rgba(70, 143, 181, 0.045), transparent 28%),
            linear-gradient(180deg, rgba(1, 10, 19, 0.54) 0%, rgba(4, 24, 42, 0.82) 48%, rgba(1, 11, 22, 0.98) 100%);
    }

    .gradient-bg::after {
        opacity: 0.52;
    }

    .login-atmosphere::before {
        opacity: 0.34;
    }

    .glass-card {
        border-color: rgba(222, 244, 251, 0.11);
        background:
            linear-gradient(132deg, rgba(233, 249, 253, 0.032), rgba(93, 159, 190, 0.012) 42%, rgba(1, 15, 27, 0.13)),
            linear-gradient(180deg, rgba(5, 30, 49, 0.1), rgba(1, 14, 26, 0.24)),
            rgba(3, 19, 34, 0.14);
        box-shadow:
            0 18px 44px rgba(0, 8, 17, 0.28),
            0 0 0 1px rgba(187, 229, 244, 0.035),
            0 0 24px rgba(118, 198, 227, 0.035),
            inset 0 1px 0 rgba(255, 255, 255, 0.13),
            inset 0 -1px 0 rgba(255, 255, 255, 0.022);
        backdrop-filter: blur(13px) saturate(108%) brightness(0.88);
        -webkit-backdrop-filter: blur(13px) saturate(108%) brightness(0.88);
    }

    .glass-card::before {
        opacity: 0.5;
    }

    .glass-card::after {
        opacity: 0.12;
    }

    .card-layout::before {
        background:
            radial-gradient(ellipse at 43% 18%, rgba(229, 248, 253, 0.018), transparent 35%),
            radial-gradient(ellipse at 60% 76%, rgba(78, 160, 196, 0.018), transparent 40%),
            linear-gradient(90deg, rgba(7, 31, 50, 0.018), rgba(6, 29, 48, 0.016) 50%, rgba(4, 26, 44, 0.02));
        opacity: 0.42;
    }

    .login-stage-divider {
        background: linear-gradient(
            180deg,
            rgba(230, 247, 252, 0) 0%,
            rgba(230, 247, 252, 0.032) 25%,
            rgba(149, 211, 235, 0.026) 55%,
            rgba(230, 247, 252, 0) 100%
        );
        opacity: 0.11;
    }

    .login-stage-divider::before,
    .login-stage-divider::after {
        opacity: 0.09;
    }

    .login-side {
        background:
            radial-gradient(ellipse at 24% 14%, rgba(238, 250, 254, 0.025), transparent 36%),
            linear-gradient(155deg, rgba(7, 34, 55, 0.022), rgba(3, 20, 34, 0.014));
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
    }

    .login-side::after {
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.01), rgba(255, 255, 255, 0)),
            linear-gradient(90deg, transparent 72%, rgba(160, 214, 233, 0.006) 100%);
    }

    .form-side,
    .login-page[data-auth-mode="login"] .form-side,
    .login-page[data-auth-mode="register"] .form-side {
        background:
            radial-gradient(ellipse at 8% 48%, rgba(188, 230, 244, 0.012), transparent 44%),
            radial-gradient(ellipse at 88% 18%, rgba(211, 241, 251, 0.012), transparent 36%),
            linear-gradient(90deg, rgba(4, 23, 39, 0.008), rgba(4, 25, 42, 0.016));
    }

    .form-side::before {
        opacity: 0.18;
    }

    .auth-panel-shell {
        border-color: transparent;
        background: transparent;
        box-shadow: none;
    }

    .auth-panel-glass {
        opacity: 0.08;
        background:
            radial-gradient(ellipse at 86% 8%, rgba(238, 250, 254, 0.012), transparent 30%),
            linear-gradient(180deg, rgba(248, 252, 254, 0.006), rgba(128, 188, 214, 0.002));
    }

    .auth-waterline {
        border-bottom-color: rgba(218, 240, 248, 0.052);
    }
}

@keyframes yanqi-v4-glass-breathe {
    0%,
    100% {
        transform: translate3d(0, 0, 0);
        box-shadow:
            0 18px 44px rgba(0, 8, 17, 0.28),
            0 0 0 1px rgba(187, 229, 244, 0.035),
            0 0 24px rgba(118, 198, 227, 0.035),
            inset 0 1px 0 rgba(255, 255, 255, 0.13),
            inset 0 -1px 0 rgba(255, 255, 255, 0.022);
    }

    50% {
        transform: translate3d(0, 0, 0);
        box-shadow:
            0 20px 48px rgba(0, 8, 17, 0.3),
            0 0 0 1px rgba(187, 229, 244, 0.042),
            0 0 28px rgba(118, 198, 227, 0.042),
            inset 0 1px 0 rgba(255, 255, 255, 0.145),
            inset 0 -1px 0 rgba(255, 255, 255, 0.022);
    }
}

/* 入口档案与进度抛光层：只强化左侧记忆点、入口动作和背景参与感。 */
@media (min-width: 981px) {
    .gradient-bg::before {
        background:
            linear-gradient(180deg, rgba(1, 11, 20, 0.1) 0%, rgba(3, 22, 39, 0.24) 36%, rgba(2, 14, 27, 0.62) 100%),
            url("../assets/images/sipadan.jpg") center center / cover no-repeat;
        transform: scale(1.035);
        filter: saturate(0.56) contrast(1.06) brightness(0.45);
    }

    .gradient-bg::after {
        background:
            linear-gradient(96deg, transparent 34%, rgba(226, 247, 254, 0.07) 48%, transparent 61%),
            radial-gradient(ellipse at 52% -6%, rgba(248, 254, 255, 0.11), rgba(210, 239, 250, 0.032) 30%, transparent 58%),
            linear-gradient(180deg, rgba(80, 151, 190, 0.018), rgba(0, 9, 18, 0.18));
        opacity: 0.48;
    }

    .glass-card {
        background:
            linear-gradient(132deg, rgba(233, 249, 253, 0.028), rgba(93, 159, 190, 0.01) 42%, rgba(1, 15, 27, 0.115)),
            linear-gradient(180deg, rgba(5, 30, 49, 0.085), rgba(1, 14, 26, 0.215)),
            rgba(3, 19, 34, 0.125);
        backdrop-filter: blur(12px) saturate(110%) brightness(0.92);
        -webkit-backdrop-filter: blur(12px) saturate(110%) brightness(0.92);
    }

    .side-observatory {
        padding: 14px 16px 12px;
        border-color: rgba(222, 246, 252, 0.18);
        background:
            linear-gradient(145deg, rgba(245, 253, 255, 0.07), rgba(72, 151, 190, 0.018)),
            linear-gradient(90deg, rgba(5, 29, 47, 0.16), rgba(2, 19, 34, 0.075));
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.095),
            inset 0 -1px 0 rgba(255, 255, 255, 0.02),
            0 10px 22px rgba(1, 11, 22, 0.055),
            0 0 0 1px rgba(129, 206, 232, 0.02);
    }

    .side-observatory::before {
        content: "";
        position: absolute;
        inset: 1px;
        border-radius: inherit;
        background:
            linear-gradient(120deg, rgba(255, 255, 255, 0.075), transparent 18%, transparent 78%, rgba(150, 218, 240, 0.05)),
            radial-gradient(ellipse at 85% 12%, rgba(218, 246, 253, 0.05), transparent 28%);
        pointer-events: none;
        opacity: 0.75;
    }

    .side-observatory::after {
        content: "";
        position: absolute;
        top: 49px;
        bottom: 15px;
        left: 17px;
        width: 1px;
        background: linear-gradient(180deg, rgba(218, 244, 252, 0.2), rgba(122, 201, 230, 0.055));
        opacity: 0.72;
        pointer-events: none;
    }

    .side-observatory-title {
        display: flex;
        align-items: center;
        gap: 10px;
        margin-bottom: 8px;
        padding-bottom: 8px;
        color: rgba(246, 252, 254, 0.9);
        letter-spacing: 0.15em;
        text-shadow: 0 8px 18px rgba(0, 10, 20, 0.2);
    }

    .side-observatory-title::after {
        content: "";
        flex: 1;
        height: 1px;
        background: linear-gradient(90deg, rgba(221, 244, 252, 0.16), transparent);
    }

    .side-observatory-title span {
        color: rgba(250, 254, 255, 0.94);
    }

    .side-observatory-item {
        grid-template-columns: minmax(50px, 0.36fr) minmax(0, 1fr);
        gap: 12px;
        padding: 6px 0 6px 20px;
        border-top-color: rgba(218, 242, 250, 0.06);
    }

    .side-observatory-item::before {
        left: 7px;
        width: 4px;
        height: 4px;
        opacity: 0.64;
        background: rgba(229, 248, 254, 0.82);
        box-shadow:
            0 0 10px rgba(176, 230, 247, 0.22),
            0 0 18px rgba(94, 184, 220, 0.08);
    }

    .side-observatory-label {
        color: rgba(226, 244, 250, 0.78);
        font-size: 0.66rem;
    }

    .side-observatory-item strong {
        color: rgba(250, 254, 255, 0.93);
        font-weight: 540;
    }

    .login-page[data-auth-progress-step="recognizing"] .side-observatory-item[data-observatory-item="entrance"],
    .login-page[data-auth-progress-step="opening"] .side-observatory-item[data-observatory-item="rhythm"],
    .login-page[data-auth-progress-step="keying"] .side-observatory-item[data-observatory-item="rhythm"],
    .login-page[data-auth-progress-step="confirming"] .side-observatory-item[data-observatory-item="rhythm"],
    .login-page[data-auth-progress-step="anchored"] .side-observatory-item[data-observatory-item="entrance"],
    .login-page[data-auth-progress-step="accord"] .side-observatory-item[data-observatory-item="entrance"],
    .login-page[data-auth-progress-step="ready"] .side-observatory-item[data-observatory-item="layer"] {
        background: linear-gradient(90deg, rgba(212, 244, 253, 0.045), transparent 72%);
        border-color: rgba(222, 246, 252, 0.14);
    }

    .side-waterline {
        gap: 9px;
        padding-top: 11px;
    }

    .side-waterline::before {
        background: linear-gradient(90deg, rgba(221, 245, 252, 0.16), rgba(126, 204, 232, 0.06), transparent 78%);
        opacity: 0.84;
    }

    .side-waterline-label {
        color: rgba(238, 250, 253, 0.9);
        font-size: 0.7rem;
        letter-spacing: 0.25em;
    }

    .side-waterline-value {
        color: rgba(250, 254, 255, 0.94);
        font-weight: 650;
        text-shadow: 0 0 14px rgba(159, 225, 244, 0.16);
    }

    .side-waterline-track {
        height: 9px;
        border-color: rgba(223, 246, 252, 0.24);
        background:
            linear-gradient(90deg, rgba(1, 13, 25, 0.58), rgba(7, 39, 61, 0.36)),
            rgba(223, 246, 252, 0.055);
        box-shadow:
            inset 0 1px 3px rgba(0, 0, 0, 0.28),
            0 0 0 1px rgba(190, 232, 246, 0.035),
            0 0 18px rgba(113, 198, 229, 0.07);
    }

    .side-waterline-track::before {
        opacity: 0.78;
    }

    .side-waterline-track::after {
        width: 26px;
        background: radial-gradient(circle at 50% 50%, rgba(239, 252, 255, 0.66), rgba(153, 222, 243, 0.2) 45%, transparent 74%);
    }

    .side-waterline-fill {
        background:
            linear-gradient(90deg, rgba(244, 253, 255, 0.92), rgba(177, 234, 248, 0.62) 52%, rgba(93, 190, 225, 0.42)),
            rgba(152, 218, 240, 0.28);
        box-shadow:
            0 0 16px rgba(174, 230, 247, 0.26),
            0 0 30px rgba(104, 196, 229, 0.12);
        opacity: 1;
    }

    .side-waterline-status {
        color: rgba(246, 252, 254, 0.92);
        font-size: 0.8rem;
        text-shadow: 0 7px 18px rgba(0, 10, 20, 0.26);
    }

    .auth-cta {
        background:
            radial-gradient(ellipse at 24% 0%, rgba(247, 254, 255, 0.22), transparent 42%),
            linear-gradient(135deg, rgba(151, 225, 237, 0.6), rgba(59, 150, 180, 0.48) 46%, rgba(6, 62, 102, 0.62)),
            rgba(7, 53, 87, 0.44);
        border-color: rgba(218, 247, 253, 0.31);
        box-shadow:
            0 13px 26px rgba(0, 10, 21, 0.2),
            0 0 18px rgba(126, 218, 241, 0.1),
            inset 0 1px 0 rgba(255, 255, 255, 0.24),
            inset 0 -12px 22px rgba(0, 20, 42, 0.16);
        text-shadow: 0 8px 18px rgba(0, 9, 18, 0.28);
    }

    .auth-cta::before {
        opacity: 0.18;
    }

    .auth-cta::after {
        opacity: 0.48;
    }

    .auth-cta:hover {
        border-color: rgba(234, 252, 255, 0.48);
        box-shadow:
            0 17px 30px rgba(0, 10, 21, 0.24),
            0 0 26px rgba(147, 226, 248, 0.16),
            inset 0 1px 0 rgba(255, 255, 255, 0.28),
            inset 0 -13px 24px rgba(0, 20, 42, 0.17);
        filter: saturate(1.04) brightness(1.02);
    }

    .auth-cta:active {
        box-shadow:
            0 9px 20px rgba(0, 10, 21, 0.27),
            0 0 18px rgba(104, 205, 238, 0.12),
            inset 0 9px 22px rgba(0, 20, 42, 0.22);
        filter: saturate(1.02) brightness(0.97);
    }

    .login-page[data-auth-progress-state="complete"] .auth-cta {
        background:
            radial-gradient(ellipse at 24% 0%, rgba(249, 254, 255, 0.24), transparent 42%),
            linear-gradient(135deg, rgba(166, 232, 242, 0.64), rgba(70, 160, 189, 0.52) 46%, rgba(8, 67, 108, 0.64)),
            rgba(7, 57, 93, 0.46);
    }
}

@media (min-width: 981px) and (max-height: 820px) {
    .side-observatory {
        padding: 11px 14px 9px;
    }

    .side-observatory::after {
        top: 42px;
        bottom: 12px;
        left: 15px;
    }

    .side-observatory-item {
        padding-top: 4px;
        padding-bottom: 4px;
    }

    .side-waterline-track {
        height: 8px;
    }
}

/* 最终展示微调：补足玻璃边线、档案刻度、进度填充和入口按钮的细节层。 */
@media (min-width: 981px) {
    .gradient-bg::before {
        background:
            linear-gradient(180deg, rgba(1, 11, 20, 0.07) 0%, rgba(3, 22, 39, 0.2) 36%, rgba(2, 14, 27, 0.58) 100%),
            url("../assets/images/sipadan.jpg") center center / cover no-repeat;
        filter: saturate(0.58) contrast(1.08) brightness(0.47);
    }

    /* 玻璃卡：大屏下强化边框微光和四层阴影，让卡片浮在深海背景上的层次更分明。 */
    .glass-card {
        border-color: rgba(229, 248, 253, 0.15);
        box-shadow:
            0 18px 44px rgba(0, 8, 17, 0.3),
            0 0 0 1px rgba(203, 238, 249, 0.045),
            0 0 26px rgba(118, 198, 227, 0.045),
            inset 0 1px 0 rgba(255, 255, 255, 0.16),
            inset 0 -1px 0 rgba(255, 255, 255, 0.026);
    }

    /* 玻璃卡表面高光：三向渐变叠加模拟海面反射扫过玻璃的质感。 */
    .glass-card::before {
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.13), rgba(255, 255, 255, 0) 12%),
            linear-gradient(90deg, transparent 7%, rgba(232, 250, 255, 0.13) 24%, transparent 42%),
            linear-gradient(115deg, rgba(255, 255, 255, 0.08) 0%, transparent 18%, transparent 78%, rgba(205, 238, 249, 0.07) 100%);
        opacity: 0.62;
    }

    /* 玻璃卡纹理细节：斜向扫光 + 两点微尘 + 底部暗角，给玻璃增加微妙的材质层。 */
    .glass-card::after {
        background-image:
            linear-gradient(104deg, transparent 0 42%, rgba(227, 246, 252, 0.024) 50%, transparent 60%),
            radial-gradient(circle at 18% 22%, rgba(238, 251, 254, 0.03) 0.55px, transparent 1.1px),
            radial-gradient(circle at 72% 66%, rgba(207, 238, 249, 0.026) 0.55px, transparent 1.1px),
            linear-gradient(180deg, transparent 56%, rgba(0, 10, 20, 0.2) 100%);
        opacity: 0.15;
    }

    /* 认证面板内边距：大屏下用流体 clamp 控制上下呼吸空间。 */
    .auth-panel-inner {
        padding-top: clamp(18px, 1.85vw, 25px);
        padding-bottom: clamp(18px, 1.85vw, 25px);
    }

    /* 认证水位线：用 --login-console-gap 比例的底边距替代固定值，保持伸缩节奏。 */
    .auth-waterline {
        margin-bottom: calc(var(--login-console-gap) * 0.78);
    }

    /* 表单品牌区和标签区：共享 --login-console-gap 比例的底边距，维持统一的纵向节奏。 */
    .form-brand,
    .tab-section {
        margin-bottom: calc(var(--login-console-gap) * 0.9);
    }

    /* 侧边观察舱：大屏下强化边框颜色和四层阴影，内发光+外微影让观测舱更立体。 */
    .side-observatory {
        border-color: rgba(226, 248, 253, 0.2);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.11),
            inset 0 -1px 0 rgba(255, 255, 255, 0.024),
            0 10px 22px rgba(1, 11, 22, 0.065),
            0 0 0 1px rgba(129, 206, 232, 0.026);
    }

    /* 观测舱标题底部装饰线：从左到右渐隐的微光横线。 */
    .side-observatory-title::after {
        background: linear-gradient(90deg, rgba(226, 248, 253, 0.22), rgba(126, 204, 232, 0.055), transparent);
    }

    /* 观测舱数据条目：顶部微弱的青白分割线。 */
    .side-observatory-item {
        border-top-color: rgba(224, 246, 252, 0.075);
    }

    /* 条目数值：纯白高亮 + 深色投影，让关键数据从观测舱中跳出。 */
    .side-observatory-item strong {
        color: rgba(252, 254, 255, 0.96);
        text-shadow: 0 7px 16px rgba(0, 10, 20, 0.18);
    }

    /* 水位线标签：高亮白字，作为刻度尺的标识文字。 */
    .side-waterline-label {
        color: rgba(242, 251, 254, 0.94);
    }

    /* 水位线轨道：10px 高度 + 暗底渐变 + 竖条纹纹理，模拟仪器面板的刻度槽。 */
    .side-waterline-track {
        height: 10px;
        border-color: rgba(227, 248, 253, 0.28);
        background:
            repeating-linear-gradient(90deg, rgba(236, 250, 254, 0.08) 0 1px, transparent 1px 42px),
            linear-gradient(90deg, rgba(1, 13, 25, 0.6), rgba(7, 39, 61, 0.38)),
            rgba(223, 246, 252, 0.06);
    }

    /* 水位线填充条：蓝白渐变从左到右由亮转暗，模拟液体填充进度。 */
    .side-waterline-fill {
        inset: 1px;
        min-width: 0;
        background:
            linear-gradient(90deg, rgba(248, 254, 255, 0.96), rgba(178, 235, 249, 0.7) 52%, rgba(88, 190, 227, 0.48)),
            rgba(152, 218, 240, 0.32);
    }

    /* 水位线百分比文字：高亮白字标注当前进度数值。 */
    .side-waterline-status {
        color: rgba(248, 253, 255, 0.94);
    }

    /* 输入组间距：大屏下收紧至 9px 让表单更紧凑。 */
    .input-group {
        margin-bottom: 9px;
    }

    /* 输入框默认态：半透明边框 + 微亮渐变底，融入深色玻璃面板。 */
    .input-group input {
        border-color: rgba(225, 247, 253, 0.27);
        background:
            linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(173, 213, 232, 0.04)),
            rgba(5, 29, 48, 0.31);
    }

    /* 输入框聚焦态：边框提亮 + 三层外发光 + 内顶高光线，给出清晰的输入焦点反馈。 */
    .input-group input:focus {
        border-color: rgba(198, 241, 252, 0.6);
        box-shadow:
            0 0 0 3px rgba(117, 205, 234, 0.11),
            0 0 22px rgba(126, 214, 240, 0.14),
            0 12px 22px rgba(2, 13, 23, 0.12),
            inset 0 1px 0 rgba(255, 255, 255, 0.15);
    }

    /* 输入框已填态：边框和阴影微提亮，提示用户"这一项已完成"。 */
    .input-group.is-filled input {
        border-color: rgba(211, 241, 250, 0.42);
        box-shadow:
            inset 0 1px 0 rgba(255, 255, 255, 0.13),
            0 12px 22px rgba(2, 13, 23, 0.1),
            0 0 0 1px rgba(198, 231, 243, 0.075),
            0 0 16px rgba(116, 202, 232, 0.055);
    }

    /* 认证按钮：大屏下展开字间距，让"继续向海而行"在更宽的舞台上呼吸。 */
    .auth-cta {
        letter-spacing: 0.105em;
    }

    /* hover 时按钮顶部扫光提亮，强化可点击暗示。 */
    .auth-cta:hover::before {
        opacity: 0.26;
    }

    /* hover 时箭头右移 + 发光投影，模拟"向前推进"的动效。 */
    .auth-cta:hover .icon {
        transform: translate3d(10px, 0, 0);
        filter: drop-shadow(0 0 7px rgba(234, 252, 255, 0.38));
    }

    /* active 时箭头再推进一点并下沉 1px，给出按下的物理反馈。 */
    .auth-cta:active .icon {
        transform: translate3d(12px, 1px, 0);
    }
}

/* 矮屏大屏 (≤820px 高度)：压缩认证面板内边距、水位线轨道和输入间距，
   避免内容在较矮的屏幕上被截断或挤压。 */
@media (min-width: 981px) and (max-height: 820px) {
    .auth-panel-inner {
        padding-top: 15px;
        padding-bottom: 15px;
    }

    .side-waterline-track {
        height: 8px;
    }

    .input-group {
        margin-bottom: 6px;
    }
}

/* 终验投屏可读性微调：只提高清晰度和状态反馈，不改变入口结构。 */
@media (min-width: 981px) {
    /* 玻璃卡终验微调：边框和阴影略微提亮，增强大屏上的玻璃层次感。 */
    .glass-card {
        border-color: rgba(234, 250, 254, 0.17);
        box-shadow:
            0 18px 44px rgba(0, 8, 17, 0.3),
            0 0 0 1px rgba(211, 243, 252, 0.055),
            0 0 28px rgba(122, 204, 232, 0.05),
            inset 0 1px 0 rgba(255, 255, 255, 0.18),
            inset 0 -1px 0 rgba(255, 255, 255, 0.03);
    }

    /* 玻璃卡表面高光终验微调：提高伪元素可见度。 */
    .glass-card::before {
        opacity: 0.68;
    }

    .side-title {
        color: rgba(253, 255, 255, 1);
        text-shadow:
            0 14px 34px rgba(0, 9, 18, 0.42),
            0 0 20px rgba(221, 248, 255, 0.14);
    }

    .side-observatory-title,
    .side-observatory-label,
    .side-observatory-item strong {
        text-rendering: geometricPrecision;
    }

    .side-observatory-item strong {
        color: rgba(253, 255, 255, 0.98);
        font-weight: 560;
    }

    .side-observatory-label {
        color: rgba(232, 248, 253, 0.84);
    }

    .side-observatory::after {
        background: linear-gradient(180deg, rgba(226, 248, 253, 0.25), rgba(126, 207, 235, 0.08));
    }

    .side-observatory-item::before {
        opacity: 0.74;
    }

    .side-waterline-value {
        color: rgba(253, 255, 255, 0.98);
    }

    .side-waterline-status {
        color: rgba(250, 254, 255, 0.96);
        font-weight: 520;
    }

    .side-waterline-track {
        height: 10px;
        border-color: rgba(231, 250, 254, 0.3);
    }

    .side-waterline-fill {
        box-shadow:
            0 0 18px rgba(183, 236, 250, 0.3),
            0 0 34px rgba(111, 204, 235, 0.14);
    }

    /* 认证面板整体上移 12px，大屏上视觉居中更佳。 */
    .auth-panel-shell {
        translate: 0 -12px;
    }

    .form-title {
        color: rgba(253, 255, 255, 0.98);
    }

    .form-subtitle,
    .auth-waterline-copy {
        color: rgba(240, 250, 253, 0.86);
    }

    .input-group label {
        color: rgba(252, 255, 255, 0.97);
    }

    .input-group input {
        border-color: rgba(230, 250, 254, 0.3);
        color: rgba(253, 255, 255, 1);
    }

    .input-group input::placeholder {
        color: rgba(235, 248, 252, 0.8);
    }

    .input-group input:focus {
        border-color: rgba(207, 245, 254, 0.66);
        box-shadow:
            0 0 0 3px rgba(122, 211, 239, 0.13),
            0 0 24px rgba(134, 221, 244, 0.16),
            0 12px 22px rgba(2, 13, 23, 0.12),
            inset 0 1px 0 rgba(255, 255, 255, 0.16);
    }

    .input-group.is-filled input,
    .input-group.is-complete input {
        border-color: rgba(217, 246, 253, 0.48);
    }

    /* 认证按钮终验微调：强化外投影和内发光，让 CTA 在大屏上更有"按下去"的质感。 */
    .auth-cta {
        box-shadow:
            0 13px 26px rgba(0, 10, 21, 0.22),
            0 0 20px rgba(130, 222, 244, 0.12),
            inset 0 1px 0 rgba(255, 255, 255, 0.26),
            inset 0 -12px 22px rgba(0, 20, 42, 0.16);
    }

    /* hover 微提饱和度和亮度，按钮暖和地"亮起来"。 */
    .auth-cta:hover {
        filter: saturate(1.05) brightness(1.035);
    }

    /* active 微降亮度，按下时短暂变暗。 */
    .auth-cta:active {
        filter: saturate(1.02) brightness(0.965);
    }
}

@media (min-width: 981px) and (max-height: 820px) {
    .auth-panel-shell {
        translate: 0 -8px;
    }

    .side-waterline-track {
        height: 9px;
    }
}
