/* ============================================================
   认证页共享样式 — login / register
   冷调设计系统 + 毛玻璃卡片 + 流光主按钮 + metaball 第三方融合
   ============================================================ */

.auth-page {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: calc(100vh - 120px);
  padding: 60px 24px;
}

@keyframes authEnter {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}

.auth-card {
  width: 100%;
  max-width: 400px;
  background: rgba(255, 255, 255, 0.86);
  backdrop-filter: blur(24px) saturate(180%);
  -webkit-backdrop-filter: blur(24px) saturate(180%);
  border-radius: 20px;
  border: 1px solid var(--divider, #E2E5EC);
  box-shadow: 0 10px 40px rgba(20, 20, 28, 0.1);
  padding: 44px 36px 36px;
  animation: authEnter 0.6s var(--ease-out, cubic-bezier(0.16,0.84,0.3,1)) both;
}

.auth-icon {
  width: 56px; height: 56px;
  border-radius: 16px;
  background: rgba(10, 89, 247, 0.08);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto 20px;
}

.auth-title {
  font-size: 1.5rem; font-weight: 700;
  color: var(--ink, #14141C);
  text-align: center; margin-bottom: 4px;
  letter-spacing: -0.3px;
}

.auth-subtitle {
  font-size: 0.88rem; color: var(--ink-tertiary, #5C6172);
  text-align: center; margin-bottom: 28px;
}

.auth-card .form-control {
  border-radius: 12px;
  padding: 12px 16px;
  border: 1px solid var(--divider, #E2E5EC);
  background: rgba(255, 255, 255, 0.72);
  font-size: 0.92rem;
  transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;
}
.auth-card .form-control:focus {
  border-color: #0a59f7;
  box-shadow: 0 0 0 3px rgba(10, 89, 247, 0.1);
  background: #fff;
}

.auth-card .form-label {
  font-weight: 500; font-size: 0.82rem;
  color: var(--ink, #14141C); margin-bottom: 6px;
}

.auth-card .btn-primary {
  width: 100%;
  padding: 12px;
  border-radius: 999px;
  font-weight: 600; font-size: 0.92rem;
  background: #0a59f7; border: none;
  color: #fff;
  position: relative; overflow: hidden;
  transition: background-color 0.25s ease, box-shadow 0.25s ease;
}
.auth-card .btn-primary:hover {
  background: #084ac8;
  box-shadow: 0 6px 18px rgba(10, 89, 247, 0.22);
}
/* 流光掠过：按钮 hover 时一道光从左流到右（按钮本身无缩放） */
.auth-card .btn-primary::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.32), transparent);
  transform: translateX(-120%);
  transition: transform 0.6s var(--ease-out, ease);
  pointer-events: none;
}
.auth-card .btn-primary:hover::after { transform: translateX(120%); }

.auth-card .form-check-label {
  font-size: 0.85rem; color: var(--ink-secondary, #4B4F5C);
}

.auth-divider {
  display: flex; align-items: center; gap: 12px;
  margin: 24px 0 18px;
  color: var(--ink-quaternary, #8A8E9C);
  font-size: 0.78rem;
}
.auth-divider::before,
.auth-divider::after {
  content: ''; height: 1px; flex: 1;
  background: var(--divider, #E2E5EC);
}

/* 第三方登录按钮区——metaball 相邻融合 */
.third-party-area {
  display: flex; flex-direction: column;
  align-items: center; gap: 10px;
  position: relative;
}
.third-party-area .g_id_signin,
.third-party-area .g_id_signin iframe {
  width: 240px !important;
  max-width: 100%;
}
.third-party-btn {
  position: relative; z-index: 1;
  display: inline-flex; align-items: center; justify-content: center;
  gap: 10px;
  height: 44px;
  padding: 0 22px;
  width: 100%; max-width: 240px;
  border-radius: 999px;
  border: 1px solid var(--divider, #E2E5EC);
  background: #fff;
  color: var(--ink, #14141C);
  font-size: 0.9rem; font-weight: 500;
  text-decoration: none;
  transition: background-color 0.25s ease, border-color 0.25s ease, color 0.25s ease;
  overflow: visible;
}
/* metaball 渗出球：hover 时朝相邻按钮渗出一颗蓝球，blur 重叠即融合 */
.third-party-btn::after {
  content: '';
  position: absolute; top: 50%; left: 50%;
  width: 38px; height: 38px;
  border-radius: 50%;
  background: rgba(10, 89, 247, 0.5);
  filter: blur(7px);
  opacity: 0;
  transform: translate(-50%, -50%) scale(0.5);
  transition: opacity 0.45s var(--ease-out, ease), transform 0.5s var(--ease-spring, ease);
  z-index: -1; pointer-events: none;
}
.third-party-area .third-party-btn:not(:first-child)::after { left: -14px; }
.third-party-area .third-party-btn:first-child:not(:last-child)::after { left: auto; right: -14px; }
.third-party-btn:hover {
  border-color: rgba(10, 89, 247, 0.4);
  background: var(--primary-tint, rgba(10, 89, 247, 0.06));
  color: var(--ink, #14141C);
}
.third-party-btn:hover::after { opacity: 0.85; transform: translate(0, -50%) scale(1); }
.third-party-area .third-party-btn:not(:first-child):hover::after { transform: translate(0, -50%) scale(1); }
.third-party-area .third-party-btn:first-child:not(:last-child):hover::after { transform: translate(0, -50%) scale(1); }
.third-party-btn img {
  width: 18px; height: 18px; object-fit: contain;
}

.auth-footer {
  text-align: center; margin-top: 24px;
  font-size: 0.85rem; color: var(--ink-tertiary, #5C6172);
}
.auth-footer a { color: #0a59f7; font-weight: 500; }
.auth-footer a:hover { color: #084ac8; }
.auth-footer .sep {
  margin: 0 8px; color: var(--divider, #E2E5EC);
}

@media (max-width: 480px) {
  .auth-page { padding: 40px 16px; }
  .auth-card { padding: 32px 24px 28px; border-radius: 18px; }
}

/* from templates/change_password.html / forget_password_request.html / reset_password.html
   这三页使用 .auth-wrapper 包裹，卡片样式与 login/register (.auth-page) 略有差异，
   通过 .auth-wrapper 作用域隔离，避免重复的 .auth-card 规则覆盖 login/register 与移动端 media。 */

.auth-wrapper {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 60vh;
  padding: 40px 20px;
}

.auth-wrapper .auth-card {
  max-width: 420px;
  background: rgba(255, 255, 255, 0.82);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid rgba(20, 20, 28, 0.04);
  box-shadow: 0 4px 24px rgba(20, 20, 28, 0.06);
  padding: 40px 36px;
}

.auth-wrapper .auth-card .auth-title {
  font-size: 1.6rem;
  margin-bottom: 8px;
}

.auth-wrapper .auth-card .auth-subtitle {
  font-size: 0.9rem;
  margin-bottom: 28px;
}

.auth-wrapper .auth-card .form-control {
  border: 1px solid rgba(20, 20, 28, 0.08);
  background: rgba(255, 255, 255, 0.86);
  font-size: 0.95rem;
}

.auth-wrapper .auth-card .btn-primary {
  font-size: 0.95rem;
}

.auth-wrapper .auth-card .btn-secondary {
  width: 100%;
  padding: 12px;
  border-radius: 999px;
  font-weight: 500;
  font-size: 0.95rem;
  background: transparent;
  border: 1.5px solid #d1d1d6;
  color: var(--ink-secondary, #4B4F5C);
}

.auth-wrapper .auth-card .btn-secondary:hover {
  background: rgba(20, 20, 28, 0.04);
  border-color: var(--ink-tertiary, #5C6172);
  color: var(--ink, #14141C);
}

.auth-wrapper .auth-card .auth-footer {
  margin-top: 20px;
  font-size: 0.88rem;
}


/* from register_confirmation.html */

    .confirm-page {
        max-width: 440px;
        margin: 0 auto;
        padding: 60px 20px;
        text-align: center;
        animation: cfFadeUp 0.5s ease-out both;
    }

    @keyframes cfFadeUp {
        from { opacity: 0; transform: translateY(14px); }
        to { opacity: 1; transform: translateY(0); }
    }

    .confirm-icon svg {
        animation: cfFloat 3s ease-in-out infinite;
    }

    @keyframes cfFloat {
        0%, 100% { transform: translateY(0); }
        50% { transform: translateY(-5px); }
    }

    .confirm-page h1 {
        font-size: 1.4rem;
        font-weight: 700;
        color: var(--ink, #14141C);
        margin: 20px 0 8px;
    }

    .confirm-page .confirm-desc {
        font-size: 0.9rem;
        color: var(--ink-tertiary, #5C6172);
        margin-bottom: 24px;
        line-height: 1.6;
    }

    .confirm-page .confirm-desc strong { color: var(--ink, #14141C); }

    .confirm-card {
        background: rgba(255, 255, 255, 0.82);
        backdrop-filter: blur(20px);
        -webkit-backdrop-filter: blur(20px);
        border: 1px solid rgba(20, 20, 28, 0.04);
        border-radius: 18px;
        padding: 24px;
        text-align: left;
    }

    .info-note {
        background: rgba(10, 89, 247, 0.04);
        border-radius: 10px;
        padding: 12px 14px;
        font-size: 0.82rem;
        color: var(--ink, #14141C);
        margin-bottom: 16px;
    }

    .hint-text {
        font-size: 0.78rem;
        color: #c7c7cc;
        margin-bottom: 16px;
    }

    .confirm-btn {
        width: 100%;
        padding: 14px;
        border-radius: 999px;
        font-weight: 600;
        font-size: 0.92rem;
        background: #0a59f7;
        color: white;
        border: none;
        cursor: pointer;
        transition: background-color 0.2s, box-shadow 0.2s;
    }

    .confirm-btn:hover { background: #084ac8; box-shadow: 0 4px 16px rgba(10, 89, 247, 0.25); }

    .back-login {
        display: inline-block;
        margin-top: 16px;
        font-size: 0.82rem;
        color: #0a59f7;
        text-decoration: none;
        font-weight: 500;
        transition: opacity 0.2s;
    }

    .back-login:hover { opacity: 0.7; }


/* from verify_waiting.html */

    .vw-page {
        max-width: 440px;
        margin: 0 auto;
        padding: 60px 20px;
        text-align: center;
        animation: vwFadeUp 0.5s ease-out both;
    }

    @keyframes vwFadeUp {
        from { opacity: 0; transform: translateY(14px); }
        to { opacity: 1; transform: translateY(0); }
    }

    .vw-icon svg {
        animation: vwFloat 3s ease-in-out infinite;
    }

    @keyframes vwFloat {
        0%, 100% { transform: translateY(0); }
        50% { transform: translateY(-5px); }
    }

    .vw-page h1 {
        font-size: 1.4rem;
        font-weight: 700;
        color: var(--ink, #14141C);
        margin: 20px 0 8px;
    }

    .vw-desc {
        font-size: 0.9rem;
        color: var(--ink-tertiary, #5C6172);
        margin-bottom: 24px;
        line-height: 1.6;
    }

    .vw-desc strong { color: var(--ink, #14141C); }

    .vw-card {
        background: rgba(255, 255, 255, 0.82);
        backdrop-filter: blur(20px);
        -webkit-backdrop-filter: blur(20px);
        border: 1px solid rgba(20, 20, 28, 0.04);
        border-radius: 18px;
        padding: 24px;
        text-align: left;
    }

    .vw-note {
        background: rgba(10, 89, 247, 0.04);
        border-radius: 10px;
        padding: 12px 14px;
        font-size: 0.82rem;
        color: var(--ink, #14141C);
        margin-bottom: 16px;
        line-height: 1.6;
    }

    .vw-hint {
        font-size: 0.78rem;
        color: #c7c7cc;
        margin-bottom: 20px;
    }

    .vw-btn {
        width: 100%;
        padding: 14px;
        border-radius: 999px;
        font-weight: 600;
        font-size: 0.92rem;
        border: none;
        cursor: pointer;
        transition: background-color 0.2s, box-shadow 0.2s;
        margin-bottom: 10px;
    }

    .vw-btn-primary {
        background: #0a59f7;
        color: white;
    }

    .vw-btn-primary:hover {
        background: #084ac8;
        box-shadow: 0 4px 16px rgba(10, 89, 247, 0.25);
    }

    .vw-btn-secondary {
        background: transparent;
        color: var(--ink-tertiary, #5C6172);
        border: 1.5px solid rgba(20, 20, 28, 0.08);
    }

    .vw-btn-secondary:hover {
        background: rgba(20, 20, 28, 0.02);
        color: var(--ink, #14141C);
    }

    .vw-btn:disabled {
        opacity: 0.5;
        cursor: not-allowed;
    }

    .back-link {
        display: inline-block;
        margin-top: 16px;
        font-size: 0.82rem;
        color: #0a59f7;
        text-decoration: none;
        font-weight: 500;
        transition: opacity 0.2s;
    }

    .back-link:hover { opacity: 0.7; }

    .vw-toast {
        position: fixed;
        top: 80px;
        left: 50%;
        transform: translateX(-50%) translateY(-20px);
        background: rgba(255, 255, 255, 0.92);
        backdrop-filter: blur(20px);
        -webkit-backdrop-filter: blur(20px);
        border: 1px solid rgba(52, 199, 89, 0.2);
        border-radius: 14px;
        padding: 12px 20px;
        font-size: 0.85rem;
        color: var(--ink, #14141C);
        box-shadow: 0 8px 32px rgba(20, 20, 28, 0.08);
        opacity: 0;
        pointer-events: none;
        transition: opacity 0.3s, transform 0.3s;
        z-index: 1000;
    }

    .vw-toast.show {
        opacity: 1;
        transform: translateX(-50%) translateY(0);
        pointer-events: auto;
    }
