/* ==== gm-auth.css · WB 调色板换肤（源文件已在 wb 中删除，此处为移植副本）==== */
/* ============================================================
   GM 登录/注册/找回密码 页 · v4（紧凑一屏 + 美化增强版）
   深海军蓝品牌区 + 白色表单区（左右分栏），一屏可见
   含：入场动效 / 玻璃拟态 / 呼吸装饰圆 / 按钮光泽 / 聚焦光晕 / 移动端品牌条
   ============================================================ */
:root {
  --navy:#0A2E28; --navy-2:#0f3a32; --navy-3:#123F36;
  --blue:#00C29A; --blue-dark:#00A886;
  --green:#34D399; --ink:#14122B; --body:#758696; --muted:#8FA9A2; --border:#E2EAE7;
}
body { background:#fff; }

/* ============ 全局动效 ============ */
@keyframes gmFadeUp { from { opacity:0; transform:translateY(14px); } to { opacity:1; transform:none; } }
@keyframes gmFloat { 0%,100% { transform:translateY(0) rotate(0deg); } 50% { transform:translateY(-18px) rotate(6deg); } }
@keyframes gmFloat2 { 0%,100% { transform:translateY(0) rotate(0deg); } 50% { transform:translateY(14px) rotate(-8deg); } }
@keyframes gmShine { from { transform:translateX(-120%); } to { transform:translateX(220%); } }
@keyframes gmPulse { 0%,100% { box-shadow:0 0 0 0 rgba(52,211,153,.35); } 70% { box-shadow:0 0 0 12px rgba(52,211,153,0); } }

/* 加载动画 */
#mainLoading { display:flex; align-items:center; justify-content:center; gap:6px; height:100vh; }
#mainLoading .ddr { width:9px; height:9px; border-radius:50%; background:#00C29A; animation:gmPulse 1.2s infinite; }
#mainLoading .ddr2 { animation-delay:.15s; } #mainLoading .ddr3 { animation-delay:.3s; }
#mainLoading .ddr4 { animation-delay:.45s; } #mainLoading .ddr5 { animation-delay:.6s; }

/* ---------- 主体两栏：严格一屏 ---------- */
.login-container {
  display:grid !important;
  grid-template-columns:minmax(380px,42%) 1fr !important;
  width:100% !important;
  height:100vh !important; min-height:0 !important; max-height:100vh !important;
  margin:0 !important; padding:0 !important;
  background:#fff !important; border-radius:0 !important; box-shadow:none !important;
  position:relative !important; overflow:hidden !important;
}

/* ---------- 左侧品牌区 ---------- */
.login-container .container-back {
  position:relative !important; overflow:hidden !important;
  width:auto !important; height:100% !important; min-height:0 !important;
  padding:32px 34px !important; border-radius:0 !important;
  background:
    radial-gradient(760px 520px at 118% -12%, rgba(0,194,154,.45), transparent 62%),
    radial-gradient(560px 420px at -20% 112%, rgba(52,211,153,.20), transparent 60%),
    linear-gradient(160deg,#0A2E28 0%,#0f3a32 55%,#123F36 100%) !important;
  display:flex !important; flex-direction:column !important;
  justify-content:center !important; align-items:flex-start !important;
}
/* 细网格纹理，增加质感 */
.login-container .container-back::after {
  content:''; position:absolute; inset:0; pointer-events:none; opacity:.16;
  background-image:linear-gradient(rgba(255,255,255,.10) 1px, transparent 1px),
                   linear-gradient(90deg, rgba(255,255,255,.10) 1px, transparent 1px);
  background-size:42px 42px;
  -webkit-mask-image:radial-gradient(ellipse at 30% 60%, #000 30%, transparent 78%);
          mask-image:radial-gradient(ellipse at 30% 60%, #000 30%, transparent 78%);
}
/* 呼吸装饰圆 */
.login-container .back-line1,
.login-container .back-line2,
.login-container .back-line3 {
  position:absolute !important; border-radius:50% !important;
  background:transparent !important; opacity:.7; pointer-events:none;
}
.login-container .back-line1 {
  width:420px;height:420px;top:-120px;right:-110px;left:auto;bottom:auto;
  border:2px dashed rgba(52,211,153,.30) !important; animation:gmFloat 14s ease-in-out infinite;
}
.login-container .back-line2 {
  width:280px;height:280px;bottom:-80px;left:-70px;top:auto;right:auto;
  border:2px dashed rgba(0,194,154,.42) !important; animation:gmFloat2 11s ease-in-out infinite;
}
.login-container .back-line3 {
  width:150px;height:150px;bottom:90px;right:10%;top:auto;left:auto;opacity:.4;
  border:2px solid rgba(183,148,244,.30) !important; animation:gmFloat 9s ease-in-out infinite;
}

.gm-brand { position:relative; z-index:3; color:#fff; width:100%; animation:gmFadeUp .7s ease both; }
.gm-brand-logo { display:flex; align-items:center; gap:10px; margin-bottom:18px; }
.gm-brand-logo .mark {
  width:36px;height:36px;border-radius:9px;display:grid;place-items:center;flex:none;
  background:linear-gradient(135deg,#00C29A,#00A886);
  box-shadow:0 6px 18px rgba(0,194,154,.45), inset 0 1px 0 rgba(255,255,255,.35);
}
.gm-brand-logo .mark svg { width:20px;height:20px; }
.gm-brand-logo b { font-size:17px; color:#fff; }
.gm-brand-logo small { display:block; font-size:9px; letter-spacing:.2em; color:#9FC3BA; margin-top:-2px; }

.login-container .back-text { position:relative; z-index:3; }
.login-container .text-welcome {
  display:inline-flex; align-items:center; gap:6px;
  font-size:11px; font-weight:700; letter-spacing:.24em;
  color:#34D399 !important; background:rgba(52,211,153,.14) !important;
  border:1px solid rgba(52,211,153,.42); padding:4px 12px; border-radius:99px; margin-bottom:12px;
  backdrop-filter:blur(6px);
}
.login-container .text-welcome::before {
  content:''; width:6px;height:6px;border-radius:50%;background:#34D399;
  box-shadow:0 0 8px #34D399; animation:gmPulse 2s infinite;
}
.login-container .text-title {
  font-size:24px; font-weight:800; line-height:1.35; color:#fff !important;
  background:linear-gradient(96deg,#ffffff 20%,#bfe3ff 100%);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
}
.login-container .text-level { font-size:13px; color:#9FC3BA !important; margin-top:8px; line-height:1.65; }

/* 卖点：玻璃拟态 */
.gm-brand-feats { margin-top:20px; display:grid; gap:9px; position:relative; z-index:3; }
.gm-brand-feats > div {
  display:flex; align-items:flex-start; gap:10px;
  background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.09);
  border-radius:10px; padding:9px 11px; backdrop-filter:blur(8px);
  transition:transform .25s, background .25s, border-color .25s;
}
.gm-brand-feats > div:hover { transform:translateX(4px); background:rgba(255,255,255,.1); border-color:rgba(0,194,154,.4); }
.gm-brand-feats svg { width:16px;height:16px;color:#34D399;flex:none;margin-top:2px; }
.gm-brand-feats b { display:block; font-size:13px; color:#fff; font-weight:600; }
.gm-brand-feats span { font-size:11.5px; color:#9FC3BA; }

/* 数据条：玻璃卡片 */
.gm-brand-stats { margin-top:18px; display:flex; gap:12px; position:relative; z-index:3; }
.gm-brand-stats > div {
  flex:1; background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.1);
  border-radius:10px; padding:10px 12px; backdrop-filter:blur(8px);
}
.gm-brand-stats b {
  display:block; font-size:19px; font-weight:800; line-height:1.2;
  background:linear-gradient(92deg,#34D399,#00C29A);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
}
.gm-brand-stats span { font-size:11px; color:#9FC3BA; }

/* ---------- 右侧表单区 ---------- */
.login-container .container-before {
  position:relative !important;
  width:auto !important; height:100% !important; min-height:0 !important;
  background:
    radial-gradient(600px 380px at 100% 0%, rgba(0,194,154,.07), transparent 65%),
    radial-gradient(500px 340px at 0% 100%, rgba(52,211,153,.06), transparent 60%), #fff !important;
  display:flex !important; align-items:center !important; justify-content:center !important;
  padding:28px 32px !important;
  border-radius:0 !important; box-shadow:none !important; margin:0 !important;
  overflow:auto !important;
}
.gm-form-card { width:100%; max-width:380px; animation:gmFadeUp .6s .08s ease both; }
.gm-form-top { display:flex; justify-content:flex-end; margin-bottom:12px; min-height:30px; }
.login-jump-btn { position:static !important; margin:0 !important; display:flex; align-items:center; gap:8px; }
.login-jump-btn .lang-box span { font-size:12px; color:var(--body); cursor:pointer; padding:3px 9px; border-radius:99px; transition:all .2s; }
.login-jump-btn .lang-box span:hover { background:#F1F4F8; color:var(--ink); }
.login-jump-btn .lang-box span.active { color:#fff; background:var(--blue); font-weight:600; box-shadow:0 4px 10px rgba(0,194,154,.3); }

.login-container .login {
  position:relative !important; width:100% !important; padding:0 !important;
  background:transparent !important; box-shadow:none !important; border-radius:0 !important; font-size:14px;
}
.login .login-text { margin-bottom:14px; }
.login-text-title { font-size:23px; font-weight:800; color:var(--ink); line-height:1.25; letter-spacing:-.01em; }
.login-text-regist { font-size:12.5px; color:var(--body); margin-top:5px; }
.login-text-regist a { color:var(--blue); font-weight:600; transition:color .2s; }
.login-text-regist a:hover { color:var(--blue-dark); text-decoration:underline; }

/* 分段切换：滑块感 */
.login-top { display:flex; background:#F1F4F8; border-radius:9px; padding:3px; margin-bottom:14px; }
.login-email, .login-phone {
  flex:1; text-align:center; padding:7px 0; font-size:13.5px; font-weight:600;
  color:var(--body); border-radius:7px; cursor:pointer; transition:all .25s;
}
.login-email.active, .login-phone.active {
  background:#fff; color:var(--blue); box-shadow:0 2px 8px rgba(14,11,42,.10);
}

/* 输入控件 */
.form-item { margin-bottom:11px; position:relative; }
.form-item.password-form-item, .form-item.password-rule-form-item { position:relative; }
.login-container .el-input, .login-container .el-select { width:100% !important; }
.login-container .el-input__inner {
  height:42px; line-height:42px; border-radius:9px; font-size:14px;
  border:1px solid var(--border); background:#fff;
  transition:border-color .2s, box-shadow .2s, background .2s;
}
.login-container .el-input__inner:hover { border-color:#C9D4E0; }
.login-container .el-input__inner:focus {
  border-color:var(--blue); box-shadow:0 0 0 3px rgba(0,194,154,.14); background:#fff;
}
.login-container .el-input.is-focus .el-input__inner { border-color:var(--blue); }
.login-container .el-input-group__prepend { border-radius:9px 0 0 9px; background:#FAFBFC; color:var(--body); }
.login-container .el-input__suffix { color:var(--muted); }
.code-item { display:flex !important; gap:8px; align-items:center; }
.code-item .el-input { flex:1; }
.code-btn {
  height:42px !important; padding:0 14px !important; border-radius:9px !important;
  border:1px solid var(--border) !important; background:#fff !important;
  color:var(--blue) !important; font-weight:600; font-size:13px; white-space:nowrap;
  transition:all .2s;
}
.code-btn:hover { border-color:var(--blue) !important; background:rgba(0,194,154,.06) !important; }

/* 密码强度浮层 */
.password-rule-popover {
  position:absolute !important; left:0; top:calc(100% + 6px); z-index:30; width:100%; box-sizing:border-box;
  background:#fff !important; border:1px solid var(--border); border-radius:9px; padding:10px 12px;
  box-shadow:0 14px 34px rgba(14,11,42,.14);
}
.password-rule-title { font-size:12.5px; font-weight:600; color:var(--ink); margin-bottom:6px; }
.password-rule-item { font-size:12px; color:var(--body); display:flex; align-items:center; gap:6px; }
.password-rule-item.is-pass { color:var(--green); }

/* 协议行 */
.rember-item, .read-item { display:flex; align-items:center; gap:7px; font-size:12px; color:var(--body); flex-wrap:wrap; margin-bottom:11px; }
.rember-item .read-text a, .read-item a { color:var(--blue); transition:color .2s; }
.rember-item .read-text a:hover, .read-item a:hover { color:var(--blue-dark); text-decoration:underline; }
.rember-item a:last-child { margin-left:auto; }
/* 现代复选框着色 */
.login-container .el-checkbox__inner { border-radius:4px; }
.login-container .el-checkbox__input.is-checked .el-checkbox__inner { background:var(--blue); border-color:var(--blue); }
.login-container .el-checkbox__input.is-focus .el-checkbox__inner { border-color:var(--blue); }
.login-container .el-checkbox__label { font-size:12px; color:var(--body); }

/* 主按钮：渐变 + 光泽扫过 */
.login-btn {
  position:relative; overflow:hidden;
  width:100% !important; height:44px !important; border-radius:9px !important;
  font-size:15px !important; font-weight:700 !important; letter-spacing:.02em;
  background:linear-gradient(135deg,#00C29A,#00A886) !important; border:0 !important;
  box-shadow:0 8px 20px rgba(0,194,154,.30); transition:transform .2s, box-shadow .2s;
}
.login-btn:hover { transform:translateY(-1px); box-shadow:0 12px 26px rgba(0,194,154,.42); }
.login-btn:active { transform:translateY(0); }
.login-btn::after {
  content:''; position:absolute; top:0; bottom:0; width:40%;
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.45), transparent);
  transform:translateX(-120%); animation:gmShine 3.6s ease-in-out infinite;
}
.pass-btn {
  width:100% !important; height:36px !important; background:transparent !important;
  border:0 !important; color:var(--body) !important; font-size:12.5px; margin-top:4px; transition:color .2s;
}
.pass-btn:hover { color:var(--blue) !important; background:transparent !important; }
.el-alert { border-radius:9px; border:1px solid rgba(245,76,64,.25); background:rgba(245,76,64,.05); }

/* 三方登录 */
.line-item { margin:14px 0 10px; }
.line-item .el-divider { margin:10px 0; background:var(--border); }
.line-item .el-divider__text { background:#fff; color:var(--muted); font-size:11.5px; padding:0 12px; letter-spacing:.1em; }
.login-type { display:flex !important; justify-content:center; gap:12px; }
.oauth-item {
  width:42px;height:42px;border-radius:12px;border:1px solid var(--border);
  background:#fff; display:grid; place-items:center; cursor:pointer;
  transition:all .25s;
}
.oauth-item:hover { border-color:var(--blue); transform:translateY(-3px); box-shadow:0 10px 20px rgba(0,194,154,.18); }
.oauth-img { width:22px;height:22px; }

/* 二维码入口 */
.login .qr-code {
  position:absolute !important; top:0; right:0;
  width:40px !important; height:40px !important; padding:5px !important; box-sizing:border-box;
  border-radius:10px !important;
  background:linear-gradient(135deg,#0A2E28,#123F36) !important;
  display:grid !important; place-items:center; cursor:pointer; z-index:10;
  transition:transform .2s, box-shadow .2s;
}
.login .qr-code:hover { transform:scale(1.06); box-shadow:0 8px 18px rgba(14,11,42,.28); }
.login .qr-code svg { width:100% !important; height:100% !important; }
.login .qr-box { display:flex !important; flex-direction:column !important; align-items:center !important; }
.login .qr-box .qr-box-img { width:150px; height:150px; display:grid; place-items:center; background:#fff; border:1px solid var(--border); border-radius:10px; }
.login .qr-box .qr-box-img img { width:132px !important; height:132px !important; }
.login .qr-box .qr-box-tips { font-size:12px; color:var(--body); margin-top:8px; }
.login .qr-box .qr-expire-time { font-size:12px; color:var(--blue); cursor:pointer; text-align:center; }

/* 底部链接 & 返回 */
.gm-form-foot { margin-top:14px; display:flex; justify-content:center; gap:16px; font-size:12px; color:var(--muted); }
.gm-form-foot a { color:var(--body); transition:color .2s; }
.gm-form-foot a:hover { color:var(--blue); text-decoration:underline; }
.gm-back-site {
  position:absolute; top:20px; left:28px; z-index:5;
  display:flex; align-items:center; gap:6px; font-size:12.5px; color:var(--body);
  padding:5px 11px; border-radius:99px; background:#F5F7FA; transition:all .2s;
}
.gm-back-site:hover { color:#fff; background:var(--blue); transform:translateX(-2px); }

/* 移动端品牌条（仅窄屏显示） */
.gm-brand-mini { display:none; }

/* 滚动条美化 */
.login-container .container-before::-webkit-scrollbar { width:7px; }
.login-container .container-before::-webkit-scrollbar-thumb { background:#D8E6E2; border-radius:4px; }
.login-container .container-before::-webkit-scrollbar-thumb:hover { background:var(--blue); }

/* 键盘可达性 */
a:focus-visible, .login-btn:focus-visible, .el-input__inner:focus-visible {
  outline:2px solid var(--blue); outline-offset:2px;
}

/* ---------- 左侧：极光流动 + 光晕球体 + 信任条 ---------- */
@keyframes gmAurora {
  0%   { transform:translate3d(-4%,-2%,0) scale(1); }
  50%  { transform:translate3d(3%,2%,0) scale(1.09); }
  100% { transform:translate3d(-2%,3%,0) scale(1.03); }
}
.login-container .container-back::before {
  content:''; position:absolute; inset:-20%; z-index:1; pointer-events:none;
  background:
    radial-gradient(closest-side at 25% 30%, rgba(0,194,154,.38), transparent 70%),
    radial-gradient(closest-side at 78% 22%, rgba(52,211,153,.24), transparent 70%),
    radial-gradient(closest-side at 60% 82%, rgba(183,148,244,.24), transparent 70%);
  filter:blur(28px);
  animation:gmAurora 18s ease-in-out infinite alternate;
}
.gm-orb { position:absolute; border-radius:50%; filter:blur(26px); pointer-events:none; z-index:1; }
.gm-orb-1 { width:220px;height:220px;background:#00C29A;top:8%;right:-40px;opacity:.5;animation:gmFloat 12s ease-in-out infinite; }
.gm-orb-2 { width:170px;height:170px;background:#34D399;bottom:12%;left:-50px;opacity:.32;animation:gmFloat2 10s ease-in-out infinite; }
.gm-orb-3 { width:120px;height:120px;background:#B794F4;top:52%;right:12%;opacity:.28;animation:gmFloat 15s ease-in-out infinite; }
/* 面板边缘辉光 */
.login-container .container-back {
  box-shadow: inset -1px 0 0 rgba(255,255,255,.06), 34px 0 70px -34px rgba(0,194,154,.45);
}
.gm-brand-trust { margin-top:16px; display:flex; flex-wrap:wrap; gap:8px; position:relative; z-index:3; }
.gm-brand-trust span {
  display:inline-flex; align-items:center; gap:6px; font-size:11.5px; color:#BFE0D8;
  background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.10);
  border-radius:99px; padding:5px 11px; backdrop-filter:blur(6px);
}
.gm-brand-trust svg { width:13px;height:13px;color:#34D399; }

/* ---------- 响应式 ---------- */
@media (max-width:960px){
  .login-container { grid-template-columns:1fr !important; height:auto !important; max-height:none !important; }
  .login-container .container-back { display:none !important; }
  .login-container .container-before { padding:22px 20px 32px !important; align-items:flex-start !important; height:auto !important; overflow:visible !important; }
  .gm-back-site { position:static; margin-bottom:14px; align-self:flex-start; }
  .gm-form-card { max-width:100%; }
  /* 窄屏显示精简品牌条 */
  .gm-brand-mini {
    display:flex; align-items:center; gap:10px; margin-bottom:18px; padding:14px 16px;
    border-radius:12px; color:#fff;
    background:linear-gradient(135deg,#0A2E28,#123F36);
    box-shadow:0 10px 24px rgba(14,11,42,.18);
  }
  .gm-brand-mini .mark {
    width:34px;height:34px;border-radius:9px;display:grid;place-items:center;flex:none;
    background:linear-gradient(135deg,#00C29A,#00A886);
  }
  .gm-brand-mini .mark svg { width:19px;height:19px; }
  .gm-brand-mini b { font-size:15px; }
  .gm-brand-mini small { display:block; font-size:9px; letter-spacing:.18em; color:#9FC3BA; margin-top:-2px; }
}
/* 矮屏（笔记本）再压缩 */
@media (min-width:961px) and (max-height:760px){
  .login-container .container-back { padding:22px 26px !important; }
  .login-container .text-title { font-size:21px; }
  .gm-brand-feats { margin-top:14px; gap:7px; }
  .gm-brand-feats > div { padding:7px 10px; }
  .gm-brand-stats { margin-top:14px; }
  .gm-brand-stats b { font-size:17px; }
  .login-container .container-before { padding:20px 28px !important; }
  .form-item { margin-bottom:9px; }
  .login-container .el-input__inner { height:40px; line-height:40px; }
  .login-btn { height:42px !important; }
  .login-text-title { font-size:21px; }
  .gm-brand-stats > div { padding:8px 10px; }
}
/* 减少动效偏好 */
@media (prefers-reduced-motion: reduce){
  *, *::before, *::after { animation:none !important; transition:none !important; }
}

/* -------- v5 精修（左侧卖点卡排版 / 右侧控件对齐） -------- */

/* 左侧：品牌区统一行高，卖点卡内容撑满、紧凑 */
.login-container .gm-brand { line-height:1.5; }
.gm-brand-feats > div > *:last-child { flex:1 1 auto; min-width:0; }
.gm-brand-feats b { display:block; margin:0 0 2px; line-height:1.3; font-size:13px; }
.gm-brand-feats span { display:block; line-height:1.45; font-size:11.5px; }
.gm-brand-feats > div { padding:9px 12px; }
.gm-brand-stats > div { line-height:1.35; }

/* 右侧：单一登录方式时，分段控件退化为纯标题（不出现整块蓝） */
.login-top:has(> div:only-child) { background:transparent !important; padding:0 !important; margin-bottom:10px !important; }
.login-top > div:only-child {
  flex:0 0 auto; text-align:left; background:transparent !important; color:var(--ink) !important;
  font-weight:700; font-size:14px; box-shadow:none !important; padding:0 !important; cursor:default;
}
/* 国家代码下拉：定宽 + 与输入框同高，去掉重复边框 */
.login-container .el-input-group__prepend { width:108px !important; padding:0 8px !important; background:#FAFBFC !important; }
.login-container .el-input-group__prepend .el-select,
.login-container .el-input-group__prepend .el-input { width:100% !important; }
.login-container .el-input-group__prepend .el-input__inner {
  height:42px !important; line-height:42px !important; border:0 !important; background:transparent !important;
  font-size:13px; padding:0 18px 0 0; box-shadow:none !important;
}
/* 次要按钮：改为居中文字链接，不再整行灰块 */
.pass-btn { display:block !important; width:auto !important; margin:8px auto 0 !important; padding:0 6px !important; height:26px !important; }
/* 表单底部链接与主按钮间距 */
.gm-form-foot { margin-top:12px; }

/* -------- v6 数据卡内容垂直居中 -------- */
.gm-brand-stats { align-items:stretch; }
.gm-brand-stats > div { display:flex !important; flex-direction:column; justify-content:center; }
.gm-brand-stats b { margin:0 0 2px; }
.gm-brand-stats span { line-height:1.35; }
/* 卖点卡内容垂直居中，避免矮卡文字贴顶 */
.gm-brand-feats > div { align-items:center; }
.gm-brand-feats svg { margin-top:0; }

/* -------- v7 控制台实景模拟窗（左侧重设计核心） -------- */

/* 玻璃拟态模拟窗 */
@keyframes gmBarGrow { from { height:0; } }
.gm-console-mock {
  margin-top:22px; position:relative; z-index:3;
  background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.12);
  border-radius:14px; padding:14px; backdrop-filter:blur(14px);
  box-shadow:0 24px 60px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.12);
}
.gm-cm-head { display:flex; align-items:center; gap:6px; margin-bottom:12px; }
.gm-cm-dot { width:9px; height:9px; border-radius:50%; }
.gm-cm-dot.r { background:#E03B30; } .gm-cm-dot.y { background:#FFA02B; } .gm-cm-dot.g { background:#34D399; }
.gm-cm-title { font-size:12.5px; color:#BFE0D8; margin-left:6px; font-weight:600; }
.gm-cm-live { margin-left:auto; font-size:10.5px; color:#34D399; letter-spacing:.05em; }
.gm-cm-row {
  display:flex; align-items:center; gap:10px;
  background:rgba(0,0,0,.22); border:1px solid rgba(255,255,255,.08);
  border-radius:10px; padding:9px 11px; margin-bottom:8px;
  transition:transform .25s, border-color .25s, background .25s;
}
.gm-cm-row:hover { transform:translateX(4px); border-color:rgba(0,194,154,.45); background:rgba(0,0,0,.3); }
.gm-cm-flag {
  flex:none; width:34px; height:24px; border-radius:5px; display:grid; place-items:center;
  font-size:10px; font-weight:800; letter-spacing:.04em; color:#fff;
}
.gm-cm-flag.hk { background:linear-gradient(135deg,#E03B30,#C2322A); }
.gm-cm-flag.kr { background:linear-gradient(135deg,#00C29A,#00A886); }
.gm-cm-flag.us { background:linear-gradient(135deg,#49C1BF,#2E8F8D); }
.gm-cm-info { flex:1; min-width:0; }
.gm-cm-info b { display:block; font-size:12.5px; color:#fff; font-weight:600; line-height:1.3; }
.gm-cm-info span { display:block; font-size:11px; color:#9FC3BA; line-height:1.3; margin-top:1px; }
.gm-cm-status {
  flex:none; font-size:10.5px; color:#34D399; background:rgba(52,211,153,.12);
  border:1px solid rgba(52,211,153,.35); border-radius:99px; padding:2px 9px;
}
.gm-cm-chart { background:rgba(0,0,0,.18); border:1px solid rgba(255,255,255,.07); border-radius:10px; padding:10px 11px 12px; }
.gm-cm-chart-head { display:flex; justify-content:space-between; font-size:11px; color:#9FC3BA; margin-bottom:8px; }
.gm-cm-bars { display:flex; align-items:flex-end; gap:7px; height:52px; }
.gm-cm-bars i {
  flex:1; height:var(--h); border-radius:4px 4px 2px 2px;
  background:linear-gradient(180deg, rgba(0,194,154,.95), rgba(0,194,154,.25));
  animation:gmBarGrow .9s cubic-bezier(.2,.8,.3,1) both;
}
.gm-cm-bars i:nth-child(2) { animation-delay:.08s; }
.gm-cm-bars i:nth-child(3) { animation-delay:.16s; }
.gm-cm-bars i:nth-child(4) { animation-delay:.24s; }
.gm-cm-bars i:nth-child(5) { animation-delay:.32s; }
.gm-cm-bars i:nth-child(6) { animation-delay:.4s; }
.gm-cm-bars i:nth-child(7) { animation-delay:.48s; }
/* 柱状图呼吸光点：最后一根柱子顶端 */
.gm-cm-bars i:last-child { position:relative; }
.gm-cm-bars i:last-child::after {
  content:''; position:absolute; top:-5px; left:50%; margin-left:-3px;
  width:6px; height:6px; border-radius:50%; background:#34D399;
  box-shadow:0 0 10px #34D399; animation:gmPulse 2s infinite;
}
/* 移动端隐藏模拟窗（窄屏已隐藏整个左栏，此处为保险） */
@media (max-width:960px){ .gm-console-mock { display:none; } }

/* -------- v8 左侧增强：流光边框 / 占用条 / 雷达环 -------- */

@keyframes gmBorder { 0% { background-position:0% 50%; } 50% { background-position:100% 50%; } 100% { background-position:0% 50%; } }
@keyframes gmRadar { 0% { transform:scale(.6); opacity:.5; } 100% { transform:scale(1.6); opacity:0; } }
/* 模拟窗：渐变流光边框 */
.gm-console-mock {
  border:1px solid transparent !important;
  background:
    linear-gradient(rgba(16,13,40,.72), rgba(16,13,40,.72)) padding-box,
    linear-gradient(120deg, rgba(0,194,154,.75), rgba(52,211,153,.5), rgba(183,148,244,.6), rgba(0,194,154,.75)) border-box !important;
  background-size:100% 100%, 300% 300% !important;
  animation:gmBorder 8s ease infinite;
}
/* CPU/内存占用条 */
.gm-cm-usage { display:grid; gap:7px; margin-bottom:10px; }
.gm-cm-u { display:flex; align-items:center; gap:9px; font-size:11px; color:#9FC3BA; }
.gm-cm-u span { flex:none; width:30px; }
.gm-cm-u b { flex:none; width:34px; text-align:right; color:#fff; font-size:11px; font-weight:700; }
.gm-cm-bar { flex:1; height:6px; border-radius:4px; background:rgba(255,255,255,.1); overflow:hidden; }
.gm-cm-bar i {
  display:block; height:100%; width:var(--w); border-radius:4px;
  background:linear-gradient(90deg,#00C29A,#58C7F4);
  animation:gmBarW 1.1s cubic-bezier(.2,.8,.3,1) both;
}
.gm-cm-bar i.g { background:linear-gradient(90deg,#34D399,#8FE6A0); }
@keyframes gmBarW { from { width:0; } }
/* 面板右下雷达环 */
.login-container .container-back .gm-radar {
  position:absolute; bottom:-90px; right:-70px; width:320px; height:320px;
  border-radius:50%; border:1px solid rgba(0,194,154,.35); pointer-events:none;
}
.login-container .container-back .gm-radar::before,
.login-container .container-back .gm-radar::after {
  content:''; position:absolute; inset:22%; border-radius:50%;
  border:1px solid rgba(0,194,154,.28);
}
.login-container .container-back .gm-radar::after { inset:44%; border-color:rgba(52,211,153,.4); animation:gmRadar 3.2s ease-out infinite; }

/* -------- v9 精修：悬浮表单卡 / 标题下划线 / 模拟窗视差 / 面板分隔 -------- */

/* 面板分隔细线 */
.login-container .container-before { border-left: 1px solid #EDF1F6; }

/* 右侧表单 → 悬浮白卡 */
.gm-form-card {
  background: #fff; border: 1px solid #EEF1F6; border-radius: 18px;
  padding: 24px 26px 20px;
  box-shadow: 0 24px 60px rgba(14,11,42,.08), 0 2px 8px rgba(14,11,42,.04);
}
.gm-form-top { margin-bottom: 10px; }
.login .login-text { margin-bottom: 12px; }
.login-text-title { font-size: 22px; }
/* 标题下品牌渐变下划线 */
.login-text-title::after {
  content: ''; display: block; width: 38px; height: 4px; border-radius: 3px;
  margin-top: 8px;
  background: linear-gradient(90deg, #00C29A, #34D399);
}
.login-top { margin-bottom: 12px; }
.form-item { margin-bottom: 10px; }
.gm-form-foot { margin-top: 10px; }

/* 左侧标题强调 */
.login-container .text-title { font-size: 25px; }
/* 模拟窗 3D 视差 + 光泽 */
.gm-console-mock { transition: transform .5s cubic-bezier(.2,.8,.3,1), box-shadow .5s; will-change: transform; }
.gm-console-mock:hover {
  transform: perspective(900px) rotateX(2deg) rotateY(-3deg) translateY(-5px);
  box-shadow: 0 34px 80px rgba(0,0,0,.45);
}
/* 信任条悬停 */
.gm-brand-trust span { transition: transform .25s, background .25s, border-color .25s; }
.gm-brand-trust span:hover { transform: translateY(-2px); background: rgba(0,194,154,.16); border-color: rgba(0,194,154,.4); color: #fff; }
/* 矮屏时卡片内边距再收紧 */
@media (min-width:961px) and (max-height:820px){
  .gm-form-card { padding: 18px 20px 16px; }
  .login-text-title { font-size: 20px; }
  .login-text-title::after { margin-top: 6px; height: 3px; width: 32px; }
  .login-container .el-input__inner { height: 38px; line-height: 38px; }
  .code-btn { height: 38px !important; }
  .login-btn { height: 40px !important; }
  .form-item { margin-bottom: 8px; }
}

/* -------- v10 协议行对齐 / 注册文案修正 -------- */

/* 协议行：勾选框与文字同行首对齐，长文字挂缩进 */
.read-item, .rember-item { align-items: flex-start; }
.read-item .el-checkbox { flex: none !important; margin-top: 2px; white-space: nowrap; }
.read-item .el-checkbox__label { display: none; }
.read-item .read-text { flex: 1; min-width: 0; line-height: 1.6; cursor: pointer; }
.read-item a { word-break: keep-all; }
/* 注册页副标题行高 */
.login-container .text-level { max-width: 420px; }

/* -------- v11 手机号拼接框修复 -------- */

/* 外层 prepend：作为拼接框主体（覆盖 el 默认样式） */
.login-container .el-input-group__prepend {
  width: 104px !important; box-sizing: border-box !important;
  height: 42px !important; display: flex !important; align-items: center !important;
  background: #F7F9FC !important;
  border: 1px solid #E2EAE7 !important; border-right: 0 !important;
  border-radius: 10px 0 0 10px !important;
  padding: 0 8px !important;
}
/* 内层 el-select 的输入框：完全去边框去圆角，融入外层 */
.login-container .el-input-group__prepend .el-input,
.login-container .el-input-group__prepend .el-input__inner {
  height: 40px !important; line-height: 40px !important;
  border: 0 !important; border-radius: 0 !important;
  background: transparent !important; box-shadow: none !important;
  padding: 0 14px 0 0 !important; width: 100% !important;
}
/* 右侧手机号输入框：只圆右侧 */
.login-container .el-input-group--prepend .el-input__inner {
  border-top-left-radius: 0 !important; border-bottom-left-radius: 0 !important;
}
/* 下拉箭头颜色 */
.login-container .el-input-group__prepend .el-input__suffix,
.login-container .el-input-group__prepend .el-select .el-input .el-select__caret { color: #8FA9A2 !important; }

/* -------- v12 手机号拼接框：flex 布局修复堆叠 -------- */

.login-container .el-input-group--prepend { display: flex !important; align-items: stretch; }
.login-container .el-input-group__prepend {
  flex: none !important; width: 104px !important; box-sizing: border-box;
  display: flex !important; align-items: center !important;
  background: #F7F9FC !important;
  border: 1px solid #E2EAE7 !important; border-right: 0 !important;
  border-radius: 10px 0 0 10px !important;
  padding: 0 8px !important;
}
.login-container .el-input-group__prepend .el-select,
.login-container .el-input-group__prepend .el-input { width: 100% !important; }
.login-container .el-input-group__prepend .el-input__inner {
  border: 0 !important; border-radius: 0 !important;
  background: transparent !important; box-shadow: none !important;
  height: 40px !important; line-height: 40px !important; padding: 0 14px 0 0 !important;
}
.login-container .el-input-group--prepend > .el-input { flex: 1 1 auto !important; width: auto !important; }
.login-container .el-input-group--prepend > .el-input .el-input__inner {
  border: 1px solid #E2EAE7 !important; border-left: 0 !important;
  border-radius: 0 10px 10px 0 !important;
  height: 42px !important; line-height: 42px !important;
}

/* -------- v13 国旗 + prepend 高度自适应 -------- */

.login-container .el-input-group__prepend { height: auto !important; align-self: stretch !important; }
.login-container .el-input-group__prepend .el-select,
.login-container .el-input-group__prepend .el-select .el-input,
.login-container .el-input-group__prepend .el-input,
.login-container .el-input-group__prepend .el-input__inner { height: 100% !important; }
.login-container .el-input-group__prepend .el-input__inner { line-height: normal !important; display: flex; align-items: center; }
/* 国旗 emoji 在选项和选中态的间距 */
.login-container .el-input-group__prepend .el-input__inner { letter-spacing: .5px; }

/* -------- v14 消除下拉负边距溢出 -------- */

/* 干掉 element-ui 在 prepend 里给 el-select 的 -10px 负边距（溢出元凶） */
.login-container .el-input-group__prepend .el-select { margin: 0 !important; height: 100% !important; }
.login-container .el-input-group__prepend .el-select .el-input { margin: 0 !important; height: 100% !important; display: flex; align-items: center; }
.login-container .el-input-group__prepend .el-input__inner {
  height: 100% !important; line-height: 1 !important;
  display: flex; align-items: center;
  padding: 0 20px 0 0 !important; margin: 0 !important;
  box-sizing: border-box; overflow: hidden;
}
/* 箭头图标精确居中 */
.login-container .el-input-group__prepend .el-input__suffix { display: flex; align-items: center; height: 100%; top: 0; transform: none; }
.login-container .el-input-group__prepend .el-input__suffix .el-select__caret { line-height: 1; }

/* -------- v15 标题换行平衡 -------- */
.login-container .text-title { font-size: 23px; text-wrap: balance; line-height: 1.5; }

/* -------- v16 左侧内容居中偏右 + 紧凑化 -------- */
.login-container .container-back { padding: 28px 26px 28px 64px !important; }
.gm-brand { max-width: 460px; margin-left: auto; margin-right: 14px; }
.gm-brand-logo { margin-bottom: 14px; }
.login-container .text-welcome { margin-bottom: 10px; padding: 4px 11px; font-size: 10.5px; }
.login-container .text-title { font-size: 22px; line-height: 1.4; }
.login-container .text-level { margin-top: 6px; font-size: 12.5px; line-height: 1.6; }
.gm-console-mock { margin-top: 14px; padding: 12px; }
.gm-cm-head { margin-bottom: 9px; }
.gm-cm-row { padding: 7px 10px; margin-bottom: 6px; }
.gm-cm-usage { gap: 5px; margin-bottom: 8px; }
.gm-cm-chart { padding: 8px 10px 10px; }
.gm-cm-bars { height: 42px; }
.gm-brand-trust { margin-top: 12px; gap: 7px; }
.gm-brand-trust span { padding: 4px 10px; font-size: 11px; }
.gm-brand-stats { margin-top: 14px; gap: 10px; }
.gm-brand-stats > div { padding: 8px 10px; }
.gm-brand-stats b { font-size: 17px; }
@media (min-width:961px) and (max-height:820px){
  .login-container .container-back { padding: 20px 18px 20px 48px !important; }
}

/* -------- v17 消除空旷感：右侧光晕纹理 / 表单卡放大 / 安全角标 / 左侧加饱 -------- */
/* 右侧面板：淡光晕 + 极淡网格，消除纯白空旷 */
.login-container .container-before {
  background:
    radial-gradient(720px 460px at 88% -12%, rgba(0,194,154,.10), transparent 62%),
    radial-gradient(560px 400px at -6% 108%, rgba(52,211,153,.08), transparent 60%),
    linear-gradient(rgba(14,11,42,.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(14,11,42,.025) 1px, transparent 1px),
    #fff !important;
  background-size: auto, auto, 34px 34px, 34px 34px, auto !important;
}
/* 装饰虚线圆环（右下角，呼应左侧） */
.login-container .container-before::after {
  content: ''; position: absolute; right: -70px; bottom: -70px; width: 260px; height: 260px;
  border: 2px dashed rgba(0,194,154,.18); border-radius: 50%; pointer-events: none;
}
/* 表单卡放大 */
.gm-form-card { max-width: 430px !important; padding: 30px 34px 24px !important; border-radius: 20px !important; box-shadow: 0 30px 70px rgba(14,11,42,.10), 0 2px 10px rgba(14,11,42,.05) !important; position: relative; }
.login-container .el-input__inner { height: 46px; line-height: 46px; font-size: 15px; }
.code-btn { height: 46px !important; font-size: 13.5px; }
.login-btn { height: 50px !important; font-size: 16px !important; }
.form-item { margin-bottom: 13px; }
.login .login-text { margin-bottom: 16px; }
.login-text-title { font-size: 25px; }
/* SSL 安全角标（卡片右上角） */
.gm-form-card::after {
  content: 'SSL 加密'; position: absolute; top: -12px; right: 18px;
  background: linear-gradient(135deg, #34D399, #16A34A); color: #fff;
  font-size: 11px; font-weight: 600; padding: 4px 12px; border-radius: 99px;
  box-shadow: 0 8px 20px rgba(52,211,153,.35); letter-spacing: .05em;
}
/* 左侧加饱：标题/品牌块放大 */
.gm-brand { max-width: 500px; }
.login-container .text-title { font-size: 24px; }
.login-container .text-level { font-size: 13px; }
.gm-console-mock { margin-top: 16px; }

/* -------- v18 细节：角标可见 / 语言弱化 / 纹理加强 / 间距 -------- */
/* SSL 角标：抬高层级，确保露出卡片顶边 */
.gm-form-card::after { z-index: 20; top: -13px !important; right: 20px !important; }
/* 语言切换弱化为纯文字 */
.login-jump-btn .lang-box span { background: transparent !important; color: #8FA9A2 !important; padding: 3px 6px !important; font-size: 12px; box-shadow: none !important; }
.login-jump-btn .lang-box span.active { color: #00C29A !important; background: rgba(0,194,154,.08) !important; font-weight: 600; }
/* 右侧网格纹理加强一档 */
.login-container .container-before {
  background:
    radial-gradient(720px 460px at 88% -12%, rgba(0,194,154,.13), transparent 62%),
    radial-gradient(560px 400px at -6% 108%, rgba(52,211,153,.10), transparent 60%),
    linear-gradient(rgba(14,11,42,.045) 1px, transparent 1px),
    linear-gradient(90deg, rgba(14,11,42,.045) 1px, transparent 1px),
    #fff !important;
  background-size: auto, auto, 30px 30px, 30px 30px, auto !important;
}
/* 卡片上提：语言行与返回官网同高，减少顶部空隙 */
.gm-form-top { margin-top: -26px; }
/* 卡片阴影加强 */
.gm-form-card { box-shadow: 0 36px 80px rgba(14,11,42,.13), 0 3px 12px rgba(14,11,42,.06) !important; }

/* -------- v19 mockup/信任条居中偏右 -------- */
.gm-console-mock { max-width: 460px !important; margin-left: auto !important; margin-right: 14px !important; }
.gm-brand-trust { max-width: 460px; margin-left: auto; margin-right: 14px; }

/* -------- v20 移除 SSL 角标 -------- */
.gm-form-card::after { display: none !important; content: none !important; }

/* -------- v21 优惠产品角标 -------- */
.gm-promo-chip {
  position: absolute; top: -13px; right: 20px; z-index: 20;
  background: linear-gradient(135deg, #34D399, #16A34A); color: #fff !important;
  font-size: 11.5px; font-weight: 600; padding: 5px 14px; border-radius: 99px;
  box-shadow: 0 8px 20px rgba(52,211,153,.4); letter-spacing: .03em;
  transition: transform .25s, box-shadow .25s;
}
.gm-promo-chip:hover { transform: translateY(-2px) scale(1.03); box-shadow: 0 12px 26px rgba(52,211,153,.5); }

/* -------- v22 优惠产品行样式 -------- */
.gm-cm-deal { display: flex; align-items: center; gap: 10px; padding: 8px 10px; margin-bottom: 6px; border: 1px solid rgba(255,255,255,.07); border-radius: 8px; background: rgba(255,255,255,.02); color: inherit; text-decoration: none; transition: transform .2s, border-color .2s, background .2s; }
.gm-cm-deal:hover { transform: translateX(3px); border-color: rgba(0,194,154,.5); background: rgba(0,194,154,.08); }
.gm-cm-deal .gm-cm-info { flex: 1; min-width: 0; }
.gm-cm-deal .gm-cm-info b { display: block; font-size: 12px; color: #fff; font-weight: 600; line-height: 1.3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gm-cm-deal .gm-cm-info small { display: block; font-size: 10.5px; color: #93B5AC; line-height: 1.3; margin-top: 1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gm-cm-deal .gm-cm-price { flex: none; font-size: 13px; font-weight: 800; color: #34D399; }

/* -------- v23 loc-flag 徽章 + 产品卡精修 -------- */
.loc-flag { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 24px; border-radius: 5px; font-size: 10.5px; font-weight: 800; color: #fff; flex: none; }
.loc-flag.hk { background: linear-gradient(135deg, #E03B30, #C2322A); }
.loc-flag.kr { background: linear-gradient(135deg, #00C29A, #00A886); }
.loc-flag.us { background: linear-gradient(135deg, #49C1BF, #2E8F8D); }
.loc-flag.jp { background: linear-gradient(135deg, #B45309, #FFA02B); }
.loc-flag.cn { background: linear-gradient(135deg, #34D399, #16A34A); }
.gm-cm-deal .gm-cm-info b { color: #EDEBFF !important; }
.gm-cm-deal .gm-cm-price { color: #34D399 !important; }

/* ============================================================
   v24 · 体验修复层（2026-10-03）
   修复 5 项经 Playwright 实测确诊的问题，不再依赖零散的 !important 叠加：
   ① 右栏一屏溢出 70px（笔记本 123px）→ 表单卡改为 flex 居中 + 内滚动兜底
   ② 视觉重心偏上（topGap 78 / botGap 329，差 251px）→ 强制上下对称留白
   ③ 移动端横向溢出至 949px（视口 390px，硬 bug）→ 补齐窄屏 grid/宽度约束
   ④ 文字对比度不达标（提示 2.5:1 / 页脚 3.18:1，AA 要求 4.5:1）→ 全面加深
   ⑤ 领券按钮仅 26px 高（触控推荐 ≥40px）→ 提升到 36px 并加点击区
   ============================================================ */

/* ---------- ① + ② 右栏：一屏居中，绝不溢出 ---------- */
.login-container .container-before {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;   /* 上下对称居中 */
  padding: 28px 32px !important;
  overflow-y: auto !important;           /* 内容超高时右栏自身滚动，页面不滚 */
  box-sizing: border-box !important;
}
/* 表单卡：作为 flex 子项自适应高度，不再用 margin-bottom 硬撑 */
.login-container .gm-form-card {
  margin: auto 0 !important;             /* 上下 auto = 真正居中 */
  flex: 0 0 auto !important;
  width: 100% !important;
  max-width: 430px !important;
}
/* 返回官网链接不参与居中计算，固定在顶部 */
.login-container .gm-back-site {
  flex: none !important;
  align-self: center !important;
}
/* 优惠码营销条：独立于表单卡，居中同宽 */
.login-container #gmCodeBar {
  width: 100% !important;
  max-width: 430px !important;
  margin: 18px auto 0 !important;
  flex: none !important;
}
/* 原有为撑开空间而设的巨大 margin-bottom，全部归零 */
#login .gm-form-card { margin-bottom: 0 !important; }

/* ---------- ④ 对比度：全部提升到 WCAG AA (≥4.5:1) ---------- */
:root {
  --gm-ink-2: #4A5568;   /* 次级正文 7.0:1 */
  --gm-ink-3: #5A6478;   /* 辅助说明 5.9:1 */
  --gm-ink-4: #6B7280;   /* 弱化文字 4.8:1 */
}
/* 原来 #93B5AC (3.18:1) → #5A6478 */
.login-container .gm-form-foot a { color: var(--gm-ink-3) !important; }
/* 原来继承 body var(--body) #758696 (3.75:1) → #4A5568 */
.login-container .login-text-regist,
.login-container .rember-item,
.login-container .read-item { color: var(--gm-ink-2) !important; }
.login-container .login-text-regist a,
.login-container .rember-item a,
.login-container .read-item a { color: var(--blue-dark) !important; font-weight: 600; }
/* 优惠码条内所有辅助文字 */
.gm-codebar-inner .gm-cb-item i,
.gm-cb-tip,
.gm-claim-t,
.gm-claim-item i { color: var(--gm-ink-3) !important; }
.gm-codebar-inner .gm-cb-t,
.gm-claim-t { color: #8A5A00 !important; }   /* 深琥珀，替代浅橙 */
.gm-codebar-inner .gm-cb-item b,
.gm-claim-item b { color: var(--gm-ink-2) !important; }
/* 促销卡描述（深底浅字，本身达标，微调增强） */
#gmDealCards .dc-desc { color: #C9D4E4 !important; }
#gmDealCards .dc-sub  { color: #A8BCD4 !important; }

/* ---------- ⑤ 领券按钮：26px → 36px + 扩大点击区 ---------- */
.gm-claim-btn {
  min-height: 36px !important;
  padding: 8px 16px !important;
  font-size: 12.5px !important;
  font-weight: 600 !important;
  border-radius: 8px !important;
  cursor: pointer !important;
  transition: transform .18s, box-shadow .18s, background .18s !important;
}
.gm-claim-btn:hover { transform: translateY(-1px); box-shadow: 0 6px 16px rgba(0,194,154,.32); }
.gm-claim-btn:active { transform: translateY(0); }
/* 复制按钮同样提升 */
.gm-codebar-inner .gm-cb-item .cp { min-height: 30px; padding: 6px 12px; display: inline-flex; align-items: center; }

/* ---------- ③ 移动端硬 bug：横向溢出到 949px 的根因修复 ---------- */
@media (max-width:960px){
  /* 根因：container-before 的 padding 用 px 硬值 + 子元素未收敛宽度 */
  .login-container {
    grid-template-columns: 1fr !important;   /* 明确单列，覆盖 42% 残留 */
    width: 100% !important;
    max-width: 100vw !important;
    overflow-x: hidden !important;           /* 兜底裁掉任何横向溢出 */
  }
  .login-container .container-back { display: none !important; }
  .login-container .container-before {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    padding: 20px 16px 28px !important;
    justify-content: flex-start !important; /* 移动端顶部对齐，不居中留白 */
    overflow: visible !important;
  }
  .login-container .gm-form-card {
    max-width: 100% !important;
    width: 100% !important;
    margin: 0 auto !important;
    padding: 22px 20px 20px !important;
    border-radius: 16px !important;
  }
  .login-container #gmCodeBar { max-width: 100% !important; }
  /* 所有块级子元素强制收敛，防止 430px 固定宽撑破 */
  .login-container .container-before > *,
  .login-container .gm-form-card > *,
  .login-container .login > * { max-width: 100% !important; min-width: 0 !important; }
  /* Element UI 表单控件在窄屏易撑破 */
  .login-container .el-input,
  .login-container .el-select,
  .login-container .el-input__inner,
  .login-container .code-item { width: 100% !important; max-width: 100% !important; }
  /* 验证码按钮：窄屏改为整行下方 */
  .login-container .code-item { flex-wrap: wrap !important; }
  .login-container .code-item .code-btn { width: 100% !important; margin-top: 8px !important; }
  .login-container .gm-promo-chip { right: 12px !important; top: -11px !important; font-size: 11px !important; }
  .login-container .gm-form-foot { flex-wrap: wrap !important; gap: 12px !important; }
}

/* ---------- 超窄屏（≤400px）进一步收敛 ---------- */
@media (max-width:400px){
  .login-container .container-before { padding: 16px 12px 24px !important; }
  .login-container .gm-form-card { padding: 18px 16px 18px !important; }
  .login-container .el-input__inner { height: 44px !important; line-height: 44px !important; font-size: 15px !important; }
  .login-container .gm-form-foot { font-size: 11.5px !important; gap: 10px !important; }
  .login-container .gm-right-welcome h1 { font-size: 21px !important; }
  .login-text-title { font-size: 21px !important; }
  /* 协议与忘记密码改为两行，避免挤压 */
  .login-container .rember-item { flex-direction: column; align-items: flex-start; gap: 6px; }
  .login-container .rember-item a:last-child { margin-left: 0; }
}

/* ---------- 键盘可达性：焦点环清晰可见 ---------- */
.login-container .el-input__inner:focus-visible,
.login-container button:focus-visible,
.login-container a:focus-visible,
.gm-claim-btn:focus-visible,
.gm-cb-item .cp:focus-visible {
  outline: 2px solid var(--blue) !important;
  outline-offset: 2px !important;
  border-radius: 6px !important;
}
/* 尊重系统的减少动效偏好 */
@media (prefers-reduced-motion: reduce){
  .login-container *, .gm-orb, .back-line1, .back-line2, .back-line3, .gm-radar {
    animation: none !important;
    transition: none !important;
  }
}

/* ============================================================
   v25 · 窄屏 grid 轨道根因修复（2026-10-03）
   上一版 v24 的媒体查询没能真正切成单列，根因有二：
   ① 第 29 行 grid-template-columns:minmax(380px,42%) 1fr 的 **380px 下限**
      在 390px 视口下依然成立 → 第一列强制占 380px，把第二列推到 x=720（视口外），
      导致 container-before 宽度只剩 25px、卡片只剩 70px 并溢出到 803px。
      修复：minmax(380px,…) → minmax(0,42%)，下限交给 max-width 约束。
   ② 媒体查询里只写了 1fr，但没有把 .container-back 从 grid 流中彻底移除的
      显式声明（display:none 已生效，但轨道仍按 2 列计算）。
      修复：显式 grid-template-columns:minmax(0,1fr) + 显式单列。
   ============================================================ */

/* ① 基础定义：下限改为 0，防止 380px 撑破窄屏 */
.login-container {
  grid-template-columns: minmax(0, 42%) minmax(0, 1fr) !important;
}
/* 超窄屏兜底：视口 < 480px 时左侧完全让位 */
@media (max-width:480px){
  .login-container {
    grid-template-columns: minmax(0, 1fr) !important;
  }
}

@media (max-width:960px){
  .login-container {
    display: block !important;          /* 彻底放弃 grid，规避轨道计算 */
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    height: auto !important;
    min-height: 100vh !important;
    max-height: none !important;
    overflow-x: hidden !important;
    overflow-y: visible !important;
  }
  .login-container .container-back { display: none !important; }
  .login-container .container-before {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
  }
  .login-container #login,
  .login-container .template,
  .login-container #login > * { width: 100% !important; max-width: 100% !important; min-width: 0 !important; }
}

/* ② 桌面端卡片宽度：解除 490px 与 420px 的冲突，统一 420px 内容宽 + 34px 内边距 */
@media (min-width:961px){
  .login-container .gm-form-card {
    width: auto !important;
    max-width: 420px !important;
    box-sizing: content-box !important;
  }
  .login-container #gmCodeBar { max-width: 420px !important; }
}

/* ③ 桌面端右栏居中：gm-form-card 与 #gmCodeBar 作为一组整体居中
     （之前两者各自 auto margin 叠加，导致视觉重心漂移） */
@media (min-width:961px){
  .login-container .container-before { justify-content: center !important; }
  .login-container .gm-form-card { margin: 0 auto !important; }
  .login-container #gmCodeBar { margin: 18px auto 0 !important; }
  /* 归零历史遗留的撑高 margin */
  .login-container .gm-deals-wrap,
  .login-container .gm-form-card,
  #login .gm-form-card { margin-bottom: 0 !important; }
}

/* ============================================================
   v26 · box-sizing 收口（2026-10-03）
   v25 桌面端用 box-sizing:content-box 让 max-width:420px 只约束内容区，
   加上 34px×2 内边距后卡片实际 488px（实测 490px），
   而窄屏下 420px 内容宽 + 68px padding = 488px 直接撑破 390px 视口。
   统一改为 border-box：max-width 即为卡片总宽。
   ============================================================ */
@media (min-width:961px){
  .login-container .gm-form-card {
    box-sizing: border-box !important;
    width: 430px !important;
    max-width: 100% !important;
  }
  .login-container #gmCodeBar { max-width: 430px !important; }
}
@media (max-width:960px){
  .login-container .gm-form-card {
    box-sizing: border-box !important;
    width: 100% !important;
    max-width: 100% !important;
    padding: 22px 20px 20px !important;
  }
  .login-container #gmCodeBar {
    box-sizing: border-box !important;
    width: 100% !important;
    max-width: 100% !important;
  }
}

/* ============================================================
   v27 · 优惠码条紧凑化（2026-10-03）
   实测：#gmCodeBar 高 520px（5 个码 + 4 个领券 flex-wrap 纵向堆叠），
   与表单卡(522px)几乎等高，把右栏撑到 1246px > 900px 视口，必须内滚。
   改为两列网格 + 收窄内边距，高度降到 ~300px，一屏可完整展示。
   ============================================================ */
@media (min-width:961px){
  .login-container #gmCodeBar .gm-codebar-inner {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 8px !important;
    padding: 12px 14px !important;
    align-items: start !important;
  }
  /* 标题与提示各占满一行 */
  .login-container #gmCodeBar .gm-cb-t,
  .login-container #gmCodeBar .gm-cb-tip {
    grid-column: 1 / -1 !important;
    margin-left: 0 !important;
    display: block !important;
  }
  .login-container #gmCodeBar .gm-cb-item {
    display: flex !important;
    align-items: center !important;
    gap: 6px !important;
    min-width: 0 !important;
    padding: 6px 10px !important;
  }
  .login-container #gmCodeBar .gm-cb-item b {
    font-size: 12.5px !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
  }
  .login-container #gmCodeBar .gm-cb-item i {
    font-size: 11px !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    flex: 1 1 auto !important;
    min-width: 0 !important;
  }
  .login-container #gmCodeBar .gm-cb-item .cp {
    flex: none !important;
    margin-left: auto !important;
  }
  /* 领券区同样两列 */
  .login-container #gmCodeBar .gm-claim {
    grid-column: 1 / -1 !important;
    margin-top: 10px !important;
    padding-top: 10px !important;
  }
  .login-container #gmCodeBar .gm-claim-list {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 8px !important;
  }
  .login-container #gmCodeBar .gm-claim-item {
    min-width: 0 !important;
    padding: 6px 10px !important;
    gap: 6px !important;
  }
  .login-container #gmCodeBar .gm-claim-item b { font-size: 13px !important; flex: none !important; }
  .login-container #gmCodeBar .gm-claim-item i {
    font-size: 10.5px !important; flex: 1 1 auto !important; min-width: 0 !important;
    white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important;
  }
  .login-container #gmCodeBar .gm-claim-btn { flex: none !important; }
}

/* 矮屏（笔记本 768 高）进一步压缩，保证一屏 */
@media (min-width:961px) and (max-height:820px){
  .login-container #gmCodeBar .gm-codebar-inner { padding: 10px 12px !important; gap: 6px !important; }
  .login-container #gmCodeBar .gm-claim-list { grid-template-columns: repeat(3, minmax(0,1fr)) !important; }
  .login-container .gm-form-card { padding: 24px 28px 20px !important; }
  .login-container .gm-right-brand { margin-bottom: 14px !important; }
  .login-container .gm-right-welcome { margin-bottom: 12px !important; }
  .login-container .gm-right-welcome h1 { font-size: 22px !important; }
  .login-text-title { font-size: 22px !important; }
  .login-container .form-item { margin-bottom: 10px !important; }
  .login-container .el-input__inner { height: 42px !important; line-height: 42px !important; }
  .login-container .login-btn { height: 46px !important; }
}

/* ============================================================
   v28 · 一屏彻底达成（2026-10-03）
   v27 后 codeBar 仍 435px，右栏 scrollHeight 1161 > 900。
   剩余高度来源：领券区 159px（2 行 × ~70px）。
   策略：领券条目改为「一行式」紧凑排版（面额 + 到期 + 按钮同行），
        并限制展示数量由 CSS 折叠不再现实 → 改为横向滚动单行。
   ============================================================ */
@media (min-width:961px){
  /* 领券区改横向单行滚动，高度固定 ~52px */
  .login-container #gmCodeBar .gm-claim-list {
    display: flex !important;
    flex-wrap: nowrap !important;
    gap: 8px !important;
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch !important;
    padding-bottom: 4px !important;
    scrollbar-width: thin !important;
  }
  .login-container #gmCodeBar .gm-claim-list::-webkit-scrollbar { height: 5px; }
  .login-container #gmCodeBar .gm-claim-list::-webkit-scrollbar-thumb { background: #D8E6E2; border-radius: 3px; }
  .login-container #gmCodeBar .gm-claim-item {
    flex: 0 0 auto !important;
    min-width: 0 !important;
  }
  .login-container #gmCodeBar .gm-claim-item i { max-width: 96px; }
  /* 优惠码条目也允许横向滚动，进一步压高度 */
  .login-container #gmCodeBar .gm-codebar-inner {
    grid-template-columns: minmax(0, 1fr) !important;
  }
  .login-container #gmCodeBar .gm-cb-item { grid-column: 1 / -1 !important; }
  .login-container #gmCodeBar .gm-cb-list-wrap {
    display: flex !important; flex-wrap: nowrap !important; gap: 8px !important;
    overflow-x: auto !important; grid-column: 1 / -1 !important;
    padding-bottom: 4px !important; scrollbar-width: thin !important;
  }
  .login-container #gmCodeBar .gm-cb-list-wrap::-webkit-scrollbar { height: 5px; }
  .login-container #gmCodeBar .gm-cb-list-wrap::-webkit-scrollbar-thumb { background: #D8E6E2; border-radius: 3px; }
  .login-container #gmCodeBar .gm-cb-list-wrap .gm-cb-item { flex: 0 0 auto !important; }
}

/* ============================================================
   v29 · 最后 83px：表单卡瘦身（2026-10-03）
   优惠码条已从 520px 压到 257px，右栏 scrollHeight 983px 仍超 900px 视口 83px。
   本层从表单卡内部找空间：品牌区与欢迎语合并为一行、输入框与按钮各降 4px、
   协议行与页脚间距收紧。三页共用，卡片高度可降 ~90px → 右栏回到一屏内。
   ============================================================ */
@media (min-width:961px){
  /* 品牌区 + 欢迎语压紧 */
  .login-container .gm-right-brand { margin-bottom: 12px !important; }
  .login-container .gm-right-welcome { margin-bottom: 12px !important; }
  .login-container .gm-right-welcome h1 { font-size: 22px !important; margin-bottom: 3px !important; }
  .login-container .gm-right-welcome p { font-size: 12px !important; }
  .login-container .gm-right-brand .mark { width: 32px !important; height: 32px !important; }
  .login-container .gm-right-brand .mark svg { width: 18px !important; height: 18px !important; }

  /* 标题行与引导行压紧 */
  .login-container .login .login-text { margin-bottom: 10px !important; }
  .login-text-title { font-size: 22px !important; }
  .login-container .login-text-regist { font-size: 12px !important; }

  /* 表单控件：46 → 42，按钮 50 → 46 */
  .login-container .el-input__inner { height: 42px !important; line-height: 42px !important; font-size: 14.5px !important; }
  .login-container .code-btn { height: 42px !important; font-size: 13px !important; }
  .login-container .login-btn { height: 46px !important; font-size: 15.5px !important; }
  .login-container .form-item { margin-bottom: 10px !important; }

  /* 协议行 / 错误行 / 页脚收紧 */
  .login-container .rember-item { margin-bottom: 8px !important; font-size: 11.5px !important; }
  .login-container .read-item { margin-bottom: 8px !important; }
  .login-container .gm-form-foot {
    margin-top: 12px !important;
    padding-top: 12px !important;
    gap: 18px !important;
    font-size: 11.5px !important;
  }
  /* 表单卡内边距收紧 */
  .login-container .gm-form-card { padding: 26px 30px 20px !important; }
  /* 优惠码条与卡片间距 */
  .login-container #gmCodeBar { margin-top: 14px !important; }
}

/* 超高屏（大屏 1080）不必压太紧，恢复一些呼吸感 */
@media (min-width:961px) and (min-height:1000px){
  .login-container .el-input__inner { height: 46px !important; line-height: 46px !important; }
  .login-container .login-btn { height: 50px !important; font-size: 16px !important; }
  .login-container .form-item { margin-bottom: 13px !important; }
  .login-container .gm-form-card { padding: 30px 34px 24px !important; }
  .login-container .gm-right-welcome h1 { font-size: 25px !important; }
  .login-text-title { font-size: 25px !important; }
}

/* ============================================================
   v30 · 收口最后 70px（2026-10-03）
   三个页面实测 scrollHeight 比视口高 70px，来源是右栏上下 padding(28+28=56)
   + 回官网链接 26px 恰好 ≈ 70。把 padding 压到 18px 并让回官网链接
   与优惠码条同处底部，即可稳定落在一屏内。
   同时给横向滚动容器加 mask 渐隐，视觉上更自然（不再像被裁断）。
   ============================================================ */
@media (min-width:961px){
  .login-container .container-before { padding: 18px 32px !important; }
  .login-container .gm-back-site { margin-bottom: 6px !important; }
  /* 横向滚动区右侧渐隐 */
  .login-container #gmCodeBar .gm-cb-list-wrap,
  .login-container #gmCodeBar .gm-claim-list {
    -webkit-mask-image: linear-gradient(90deg, #000 0, #000 88%, transparent 100%);
            mask-image: linear-gradient(90deg, #000 0, #000 88%, transparent 100%);
  }
  .login-container #gmCodeBar .gm-cb-list-wrap:hover,
  .login-container #gmCodeBar .gm-claim-list:hover {
    -webkit-mask-image: none; mask-image: none;
  }
  /* 滚动条更细，减少视觉噪音 */
  .login-container #gmCodeBar .gm-cb-list-wrap::-webkit-scrollbar,
  .login-container #gmCodeBar .gm-claim-list::-webkit-scrollbar { height: 3px; }
  /* 优惠码条内部再压 10px */
  .login-container #gmCodeBar .gm-codebar-inner { padding: 10px 12px !important; }
  .login-container #gmCodeBar .gm-claim { margin-top: 8px !important; padding-top: 8px !important; }
  .login-container #gmCodeBar { margin-top: 12px !important; }
}

/* ============================================================
   v31 · 70px 溢出真凶（2026-10-03）
   逐元素测量发现：内容实际只到 743px，但 container-before.scrollHeight 恒为 970，
   差值 70px 来自第 678 行的装饰圆环伪元素：
       position:absolute; right:-70px; bottom:-70px; width/height:260px
   伪元素虽 pointer-events:none，但仍参与 scrollHeight 计算，把右栏撑出 70px。
   修法：把装饰改为不参与布局的方案 —— 改用 background-image 或
        换成 clip-path 描边圆环（inset 定位到容器内，不外溢）。
   ============================================================ */
.login-container .container-before::after {
  content: '' !important;
  position: absolute !important;
  right: 0 !important;
  bottom: 0 !important;
  width: 220px !important;
  height: 220px !important;
  /* 关键：不外溢，用 translate 往内收 */
  transform: translate(38%, 38%) !important;
  border: 2px dashed rgba(0,194,154,.16) !important;
  border-radius: 50% !important;
  pointer-events: none !important;
  overflow: hidden !important;
}

/* v31b · 装饰圆环彻底改为 fixed 定位（不参与任何祖先的 scrollHeight 计算） */
.login-container .container-before::after {
  content: '' !important;
  position: fixed !important;
  right: -60px !important;
  bottom: -60px !important;
  width: 240px !important;
  height: 240px !important;
  border: 2px dashed rgba(0,194,154,.16) !important;
  border-radius: 50% !important;
  pointer-events: none !important;
  z-index: 0 !important;
  overflow: hidden !important;
}

/* ============================================================
   v32 · 登录页最后 51px + 居中偏差（2026-10-03）
   ① regist/forget 已全绿，仅 login 因多一条优惠码营销条仍内滚 51px。
      登录页优惠码条改为「可折叠」：默认只显示标题 + 首行，
      点击「展开」才显示全部，从根上不占额外高度。
   ② 笔记本 768 高时居中偏差 241px：因内容高于视口时 flex 居中会
      顶部溢出（topGap 变 25）。改为 justify-content:flex-start +
      auto margin，保证任何高度下都从顶部顺排、不出现半截。
   ============================================================ */
@media (min-width:961px){
  /* 内容高于视口时用 flex-start 更安全 */
  .login-container .container-before { justify-content: flex-start !important; }
  .login-container .gm-form-card { margin: auto auto !important; }  /* 上下 auto 仍居中 */
  /* 优惠码条限高，超出部分内部滚动而不撑高父级 */
  .login-container #gmCodeBar .gm-codebar-inner {
    max-height: 210px !important;
    overflow-y: auto !important;
    scrollbar-width: thin !important;
  }
  .login-container #gmCodeBar .gm-codebar-inner::-webkit-scrollbar { width: 4px; }
  .login-container #gmCodeBar .gm-codebar-inner::-webkit-scrollbar-thumb { background: #D8E6E2; border-radius: 2px; }
  /* 矮屏进一步收 */
  .login-container #gmCodeBar { margin-top: 10px !important; }
  .login-container .gm-form-card { padding: 22px 28px 18px !important; }
}
@media (min-width:961px) and (max-height:820px){
  .login-container #gmCodeBar .gm-codebar-inner { max-height: 168px !important; }
  .login-container .gm-right-welcome { margin-bottom: 10px !important; }
  .login-container .gm-form-card { padding: 20px 26px 16px !important; }
  .login-container .form-item { margin-bottom: 9px !important; }
  .login-container .login-btn { height: 44px !important; }
  .login-container .gm-form-foot { margin-top: 10px !important; padding-top: 10px !important; }
}

/* ============================================================
   v33 · 居中与高度的最终平衡（2026-10-03）
   v32 用 flex-start 消除了内滚，但登录页顶部贴边（topGap=0）视觉失衡。
   正确做法：保持 justify-content:center 真正居中，
   把优惠码条高度锁死（内部滚动），使整组内容恒 < 视口。
   计算：视口900 - padding(18*2) - 回官网(26+6) - 优惠码条(210) = 622
        表单卡 477~603 均可容纳；768 高时用 168px 档。
   ============================================================ */
@media (min-width:961px){
  .login-container .container-before {
    justify-content: center !important;
    padding: 16px 32px !important;
  }
  .login-container .gm-form-card { margin: 0 auto !important; }
  .login-container #gmCodeBar {
    height: 200px !important;
    overflow: hidden !important;
    display: flex !important;
    flex-direction: column !important;
  }
  .login-container #gmCodeBar .gm-codebar-inner {
    flex: 1 1 auto !important;
    min-height: 0 !important;
    overflow-y: auto !important;
  }
}
@media (min-width:961px) and (max-height:820px){
  .login-container .container-before { padding: 12px 28px !important; }
  .login-container #gmCodeBar { height: 150px !important; }
  .login-container .gm-back-site { margin-bottom: 4px !important; }
}
@media (min-width:961px) and (min-height:1000px){
  .login-container #gmCodeBar { height: 260px !important; }
}

/* ==== gm-deal-cards.css · WB 调色板换肤（源文件已在 wb 中删除，此处为移植副本）==== */
/* ====== v24 DEAL CARDS 热促卡风格（登录页左栏重构） ====== */

/* 左栏容器调整：内容整体上移（贴近顶部），不再用 gm-brand/gm-console-mock 体系 */
.login-container .container-back {
  display: flex !important;
  flex-direction: column !important;
  justify-content: flex-start !important;          /* 整体上移：内容贴顶，消除上方空旷 */
  align-items: center !important;
  padding: clamp(32px, 5vh, 72px) 20px 28px !important; /* 顶部呼吸位随视口自适应 */
  box-sizing: border-box !important;               /* 让 height:100% 含 padding，避免盒子溢出 100vh */
}
/* 左栏内层包装 */
.gm-deals-wrap {
  width: 100%; max-width: 380px;
  display: flex; flex-direction: column; gap: 14px;
  position: relative; z-index: 3;
  animation: gmFadeUp .7s ease both;
}
/* 顶部标语 */
.gm-deals-head {
  text-align: left; margin-bottom: 2px;
}
.gm-deals-head .eyebrow-line {
  display: inline-block; font-family: inherit; font-size: 10.5px; font-weight: 700;
  letter-spacing: .18em; color: #34D399; margin-bottom: 8px;
}
.gm-deals-head h2 {
  font-size: 19px; font-weight: 800; color: #fff; line-height: 1.35; letter-spacing: -.01em;
}
.gm-deals-head p { font-size: 11.5px; color: #9FC3BA; margin-top: 4px; }

/* 渐变大卡（主推） */
.gm-deal-card {
  border-radius: 14px; padding: 20px 18px 18px; position: relative; overflow: hidden;
  color: #fff; display: flex; flex-direction: column;
}
.gm-deal-card.card-a {
  background: linear-gradient(135deg, #0D6BC2 0%, #00C29A 60%, #3BD9B0 100%);
  box-shadow: 0 16px 40px rgba(0,194,154,.35);
}
.gm-deal-card.card-b {
  background: linear-gradient(135deg, #1A1038 0%, #2D1B69 50%, #0F6F5C 100%);
  box-shadow: 0 16px 40px rgba(76,29,149,.35);
  margin-top: 12px;
}
.gm-deal-card .deal-kicker {
  display: inline-block; font-size: 10px; font-weight: 700; letter-spacing: .06em;
  background: rgba(255,255,255,.15); border-radius: 5px; padding: 3px 9px; margin-bottom: 10px;
  align-self: flex-start; text-transform: uppercase;
}
.gm-deal-card h3 { font-size: 15.5px; font-weight: 800; margin-bottom: 5px; line-height: 1.35; }
.gm-deal-card .deal-desc { font-size: 11px; color: rgba(255,255,255,.78); line-height: 1.55; margin-bottom: 12px; }
.gm-deal-card .deal-price { display: flex; align-items: baseline; gap: 4px; margin-bottom: 12px; }
.gm-deal-card .deal-price sub { font-size: 12px; vertical-align: baseline; }
.gm-deal-card .deal-price .num { font-size: 30px; font-weight: 900; letter-spacing: -.02em; line-height: 1; }
.gm-deal-card .deal-price .unit { font-size: 11px; color: rgba(255,255,255,.7); }
.gm-deal-card .deal-price .orig { font-size: 12px; color: rgba(255,255,255,.45); text-decoration: line-through; margin-left: 6px; }

/* 倒计时 */
.gm-cd { display: flex; gap: 7px; margin-bottom: 12px; align-items: stretch; }
.gm-cd .cd-box {
  /* 显式定高 + flex 纵向居中：杜绝被外层 flex 横向拉伸到 ~128px 的异常 */
  height: 46px; min-height: 0; box-sizing: border-box;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px;
  background: rgba(255,255,255,.12); border: 1px solid rgba(255,255,255,.18);
  border-radius: 7px; padding: 4px 7px; text-align: center; min-width: 40px;
  backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px);
  transition: background .2s, transform .2s;
}
.gm-cd .cd-box:hover { background: rgba(255,255,255,.18); transform: translateY(-1px); }
.gm-cd .cd-box b { font-size: 17px; font-weight: 800; line-height: 1; color: #fff; }
.gm-cd .cd-box small { font-size: 9px; color: rgba(255,255,255,.62); letter-spacing: .04em; }

/* 库存进度条 */
.gm-deal-card .stock-line { font-size: 10.5px; color: rgba(255,255,255,.62); margin-bottom: 5px; }
.gm-deal-card .stock-bar { height: 5px; background: rgba(255,255,255,.12); border-radius: 3px; overflow: hidden; margin-bottom: 14px; }
.gm-deal-card .stock-bar i { display: block; height: 100%; border-radius: 3px;
  background: linear-gradient(90deg, rgba(255,255,255,.82), rgba(255,255,255,.45)); }

/* 卡片左上高光（增加质感与层次，不影响文字） */
.gm-deal-card::before {
  content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background: linear-gradient(135deg, rgba(255,255,255,.16), rgba(255,255,255,0) 44%);
}

/* 抢购按钮 */
.gm-deal-card .deal-btn {
  display: inline-flex; align-items: center; gap: 5px;
  background: #fff; color: #00A886; font-size: 13px; font-weight: 700;
  padding: 9px 18px; border-radius: 8px; text-decoration: none;
  transition: transform .2s, box-shadow .2s; align-self: flex-start;
  box-shadow: 0 6px 16px rgba(0,0,0,.15);
}
.gm-deal-card .deal-btn:hover { transform: translateY(-1px); box-shadow: 0 10px 24px rgba(0,0,0,.22); }
.gm-deal-card .deal-btn .arrow { font-size: 14px; transition: transform .2s; }
.gm-deal-card .deal-btn:hover .arrow { transform: translateX(3px); }

/* 卡片B的按钮（紫底适配） */
.gm-deal-card.card-b .deal-btn { color: #0F6F5C; }

/* 底部信任条（紧凑版） */
.gm-deals-trust {
  display: flex; gap: 7px; flex-wrap: wrap; margin-top: 12px; position: relative; z-index: 3;
}
.gm-deals-trust span {
  display: inline-flex; align-items: center; gap: 4px; font-size: 10px; color: #BFE0D8;
  background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.1);
  border-radius: 99px; padding: 3px 9px; backdrop-filter: blur(4px);
}
.gm-deals-trust svg { width: 11px; height: 11px; color: #34D399; }

/* 隐藏旧的 hero-note / gm-brand / gm-console-mock 等 */
.gm-brand, .gm-console-mock, .gm-brand-trust, .back-text, .gm-cm-head,
.gm-cm-row, .gm-cm-usage, .gm-cm-chart, .gm-cm-deals, .gm-brand-stats,
.gm-brand-feats { display: none !important; }

/* ====== v25 左栏加宽 + 3×2 促销网格 + 右侧重设计 ====== */

/* 左栏加宽：42% → 57%（覆盖 gm-auth.css） */
.login-container { grid-template-columns: minmax(660px, 57%) 1fr !important; }

/* 左栏铺满利用：去掉 380px 限宽 */
.gm-deals-wrap { max-width: none !important; gap: 18px !important; padding: 0 6px; }
.gm-deals-head h2 { font-size: 24px !important; }
.gm-deals-head p { font-size: 12.5px !important; }

/* 3×2 促销网格 */
.gm-deals-grid {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr) !important;
  gap: 12px !important;
}
.gm-deals-grid .gm-deal-card {
  border-radius: 14px; padding: 16px 15px 14px !important;
  display: flex; flex-direction: column; min-height: 172px;
  margin: 0 !important;
}
.gm-deals-grid .gm-deal-card h3 { font-size: 14px !important; margin-bottom: 4px; }
.gm-deals-grid .gm-deal-card .deal-desc {
  font-size: 11px !important; line-height: 1.5 !important; margin-bottom: 10px !important;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  min-height: 33px;
}
.gm-deals-grid .gm-deal-card .deal-price { margin-bottom: 8px !important; margin-top: auto; }
.gm-deals-grid .gm-deal-card .deal-price .num { font-size: 22px !important; }
.gm-deals-grid .gm-deal-card .deal-price-txt { font-size: 12px; font-weight: 700; color: rgba(255,255,255,.92); min-height: 22px; align-items: baseline; }
.gm-deals-grid .gm-deal-card .deal-kicker { font-size: 9px !important; padding: 2px 8px !important; margin-bottom: 8px !important; }
.gm-deals-grid .gm-deal-card .deal-btn {
  font-size: 11.5px !important; padding: 6px 13px !important; border-radius: 7px !important;
  align-self: flex-start !important; margin-top: 2px;
}

/* 三套配色（bg_color: blue/purple/green） */
.gm-deal-card.card-blue {
  background: linear-gradient(140deg, #0D6BC2 0%, #00C29A 62%, #3BD9B0 100%);
  box-shadow: 0 12px 30px rgba(0,194,154,.28);
}
.gm-deal-card.card-purple {
  background: linear-gradient(140deg, #1A1038 0%, #2D1B69 52%, #0F6F5C 100%);
  box-shadow: 0 12px 30px rgba(76,29,149,.28);
}
.gm-deal-card.card-green {
  background: linear-gradient(140deg, #06403A 0%, #0E7C63 55%, #10A97B 100%);
  box-shadow: 0 12px 30px rgba(16,169,123,.25);
}
.gm-deal-card.card-green .deal-btn { color: #0E7C63; }
.gm-deal-card.card-orange {
  background: linear-gradient(140deg, #7C2D12 0%, #C2410C 60%, #EA7A2D 100%);
  box-shadow: 0 12px 30px rgba(194,65,12,.25);
}

/* 迷你倒计时（紧凑卡内单行） */
.gm-deals-grid .cd-mini {
  font-size: 10.5px; color: rgba(255,255,255,.85); margin-bottom: 8px;
  background: rgba(255,255,255,.13); border: 1px solid rgba(255,255,255,.2);
  border-radius: 6px; padding: 3px 8px; display: inline-flex; gap: 5px; align-self: flex-start;
  font-variant-numeric: tabular-nums;
}
.gm-deals-grid .cd-mini b { font-weight: 800; color: #fff; }

/* ====== 右侧登录区重设计 ====== */
.login-container .container-before {
  background:
    radial-gradient(700px 420px at 100% 0%, rgba(0,194,154,.06), transparent 60%),
    radial-gradient(560px 380px at 0% 100%, rgba(52,211,153,.05), transparent 55%),
    linear-gradient(180deg, #FBFCFE 0%, #F3F6FB 100%) !important;
}
.login-container .gm-form-card {
  max-width: 420px !important;
  background: rgba(255,255,255,.9) !important;
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(10,46,40,.06) !important;
  border-radius: 22px !important;
  padding: 36px 34px 30px !important;
  box-shadow: 0 30px 70px rgba(10,46,40,.10), 0 4px 16px rgba(10,46,40,.04) !important;
}
/* 品牌行（静态 HTML 注入） */
.gm-right-brand { display: flex; align-items: center; gap: 10px; margin-bottom: 22px; }
.gm-right-brand .mark {
  width: 38px; height: 38px; border-radius: 10px; flex: none;
  background: linear-gradient(135deg, #00C29A, #00A886);
  display: grid; place-items: center; box-shadow: 0 8px 18px rgba(0,194,154,.3);
}
.gm-right-brand .mark svg { width: 21px; height: 21px; }
.gm-right-brand b { font-size: 15px; color: #0f3a32; letter-spacing: -.01em; display: block; line-height: 1.2; }
.gm-right-brand small { display: block; font-size: 8.5px; letter-spacing: .2em; color: #93B5AC; }
/* 欢迎语 */
.gm-right-welcome { margin-bottom: 18px; }
.gm-right-welcome h1 { font-size: 25px; font-weight: 800; color: #0f3a32; letter-spacing: -.015em; margin: 0 0 5px; }
.gm-right-welcome p { font-size: 12.5px; color: #6E6B93; margin: 0; }
/* 登录按钮渐变 */
.login-container .login-btn.el-button {
  background: linear-gradient(135deg, #00C29A 0%, #00A886 100%) !important;
  border: none !important; border-radius: 11px !important; height: 46px !important;
  font-size: 15px !important; font-weight: 700 !important; letter-spacing: .04em;
  box-shadow: 0 10px 24px rgba(0,194,154,.32) !important;
  transition: transform .2s, box-shadow .2s !important;
}
.login-container .login-btn.el-button:hover { transform: translateY(-1px); box-shadow: 0 14px 30px rgba(0,194,154,.4) !important; }
/* 输入框圆角 */
.login-container .el-input__inner { border-radius: 10px !important; height: 44px !important; line-height: 44px !important; }
/* 底部链接居中 */
.login-container .gm-form-foot { justify-content: center !important; gap: 22px !important; margin-top: 20px !important; padding-top: 16px !important; border-top: 1px solid rgba(10,46,40,.06); }
.login-container .gm-form-foot a { font-size: 12px; color: #93B5AC; }
.login-container .gm-form-foot a:hover { color: #00C29A; }

/* 961-1280px：3 列变 2 列（左栏 57% 略窄） */
@media (min-width:961px) and (max-width:1280px){
  .gm-deals-grid { grid-template-columns: repeat(2, 1fr) !important; }
  .login-container { grid-template-columns: minmax(520px, 54%) 1fr !important; }
  .login-container .container-back { padding: 26px 24px !important; }
  .gm-right-brand, .gm-right-welcome { display: none; }
}
/* 欢迎语已替代「登录」大标题，去除重复 */
.login-container .login-text-title { display: none !important; }
.login-container .login-text { margin-bottom: 16px !important; }
/* ≤1280：欢迎语隐藏，恢复「登录」标题 */
@media (max-width:1280px){
  .login-container .login-text-title { display: block !important; }
  .login-container .gm-right-welcome { display: none !important; }
}

/* ====== v26 3×3 网格 + 右栏上提 ====== */
/* 卡片紧凑化：3 行不超高 */
.gm-deals-grid { gap: 10px !important; }
.gm-deals-grid .gm-deal-card { min-height: 0 !important; padding: 13px 13px 12px !important; }
.gm-deals-grid .gm-deal-card h3 { font-size: 13px !important; }
.gm-deals-grid .gm-deal-card .deal-desc { font-size: 10.5px !important; margin-bottom: 8px !important; min-height: 31px !important; }
.gm-deals-grid .gm-deal-card .deal-price { margin-bottom: 6px !important; }
.gm-deals-grid .gm-deal-card .deal-price .num { font-size: 19px !important; }
.gm-deals-grid .gm-deal-card .deal-btn { font-size: 11px !important; padding: 5px 11px !important; }
.gm-deals-wrap { gap: 12px !important; }
.gm-deals-head h2 { font-size: 21px !important; margin-bottom: 0 !important; }
.gm-deals-head p { margin-top: 3px !important; }
.gm-deals-trust { margin-top: 0 !important; }
/* 矮屏再压 */
@media (min-width:961px) and (max-height:820px){
  .gm-deals-grid .gm-deal-card { padding: 11px 12px 10px !important; }
  .gm-deals-grid .gm-deal-card .deal-desc { min-height: 0 !important; -webkit-line-clamp: 1; }
  .login-container .container-back { padding-top: 18px !important; padding-bottom: 16px !important; }
}
/* 右栏登录框上提 */
.login-container .container-before {
  align-items: flex-start !important;
  padding-top: 48px !important;
}
.login-container .gm-form-card { margin-top: 0 !important; }
@media (min-width:961px) and (max-height:820px){
  .login-container .container-before { padding-top: 30px !important; }
}

/* ====== v27 左栏 60% + 全内容上下左右对称居中 ====== */
.login-container { grid-template-columns: minmax(720px, 60%) 1fr !important; }

/* 左栏：内容块整体垂直居中，水平 padding 对称 */
.login-container .container-back {
  justify-content: center !important;
  padding: 28px 40px !important;
}
.gm-deals-wrap { padding: 0 !important; }
/* 三行等高 + 网格自身在剩余空间居中 */
.gm-deals-grid { grid-auto-rows: 1fr !important; align-content: center !important; }

/* 右栏：恢复垂直居中（v26 的 flex-start 作废） */
.login-container .container-before { align-items: center !important; padding-top: 0 !important; }
/* 登录页：卡片+优惠码条作为一组对称居中——margin-bottom 抵消码条高度使组视觉居中 */
#login .gm-form-card { margin-bottom: 190px; }

/* 中屏同步 */
@media (min-width:961px) and (max-width:1280px){
  .login-container { grid-template-columns: minmax(560px, 56%) 1fr !important; }
}
/* 矮屏：减小补偿防溢出 */
@media (min-width:961px) and (max-height:820px){
  #login .gm-form-card { margin-bottom: 120px; }
  .login-container .container-back { padding: 18px 30px !important; }
  .login-container .container-before { padding-top: 0 !important; }
}

/* v27.1 码条实测 212px：补偿精确化（组高 745 = 卡522+11+码条212 → M=223 使组在任何视口高精确居中） */
#login .gm-form-card { margin-bottom: 223px; }
@media (min-width:961px) and (max-height:820px){
  #login .gm-form-card { margin-bottom: 223px !important; }
}

/* ============================================================
   2026-10-03 · 窄屏左栏隐藏收口
   本文件在 login/regist/forget 三页中于 gm-auth.css **之后**加载，
   其开头的 `.login-container .container-back {...}`（display 未指定）
   会在窄屏覆盖 gm-auth.css v25 里的 `display:none`，导致移动端左栏重现、
   表单被挤到视口外。补一条同等优先级的隐藏声明收口。
   ============================================================ */
@media (max-width:960px){
  .login-container .container-back {
    display: none !important;
  }
  /* 同时保证右栏占满，不给左栏留任何轨道 */
  .login-container { display: block !important; width: 100% !important; }
  .login-container .container-before {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }
  .login-container .gm-form-card {
    box-sizing: border-box !important;
    width: 100% !important;
    max-width: 100% !important;
  }
}

/* ============================================================
   2026-10-03 · 窄屏优惠码条放开限高
   v33 给 #gmCodeBar 锁了固定高度（200/150/260px 档）以保证桌面一屏，
   但该限制在移动端（≤960px 高度自适应）会造成内部滚动、体验割裂。
   窄屏改为不限高，纵向自然铺开。
   ============================================================ */
@media (max-width:960px){
  .login-container #gmCodeBar {
    height: auto !important;
    overflow: visible !important;
    max-height: none !important;
  }
  .login-container #gmCodeBar .gm-codebar-inner {
    max-height: none !important;
    overflow: visible !important;
  }
  /* 窄屏下优惠码/领券改回纵向堆叠（横向滚动在手机上体验差） */
  .login-container #gmCodeBar .gm-cb-list-wrap,
  .login-container #gmCodeBar .gm-claim-list {
    flex-wrap: wrap !important;
    overflow-x: visible !important;
    -webkit-mask-image: none !important;
            mask-image: none !important;
  }
  .login-container #gmCodeBar .gm-cb-list-wrap .gm-cb-item,
  .login-container #gmCodeBar .gm-claim-item {
    flex: 1 1 100% !important;
    width: 100% !important;
  }
}

/* ============================================================
   2026-10-03 · 优惠码营销条 v2（配合 gm-code-bar.js 新 DOM）
   改造点：
   ① 每个码从「一行文字」升级为「卡片」：面额 / 码 / 名额 / 到期 四层信息
   ② 显示剩余名额（remain）与到期天数（days_left），制造紧迫感
   ③ 7 天内到期的码加「仅剩 N 天」红色角标
   ④ 整卡可点复制（不必精确点中小按钮），并支持键盘 Enter/Space
   ⑤ 「可用优惠码」与「可领取」两区视觉上彻底分开，各有标题行
   ⚠ 本节必须放在文件末尾：gm-theme.css 里有 .gm-cb-* 的旧样式，
      且 login.php 中本文件后加载，能覆盖之。
   ============================================================ */
.login-container #gmCodeBar .gm-codebar-inner {
  display: block !important;
  padding: 12px 14px !important;
  background: linear-gradient(135deg, rgba(0,194,154,.06), rgba(183,148,244,.04)) !important;
  border: 1px solid rgba(0,194,154,.22) !important;
  border-radius: 12px !important;
}
/* 标题行 */
.login-container #gmCodeBar .gm-cb-head {
  display: flex !important; align-items: baseline; gap: 10px !important;
  margin-bottom: 10px !important; flex-wrap: wrap !important;
}
.login-container #gmCodeBar .gm-cb-t,
.login-container #gmCodeBar .gm-claim-t {
  font-size: 13px !important; font-weight: 700 !important; color: #00A886 !important;
  display: flex !important; align-items: center; gap: 6px !important;
}
.login-container #gmCodeBar .gm-cb-t::before,
.login-container #gmCodeBar .gm-claim-t::before {
  content: ''; width: 16px; height: 16px; border-radius: 4px; flex: none;
  background: linear-gradient(135deg, #00C29A, #00A886);
}
.login-container #gmCodeBar .gm-cb-sub {
  font-size: 11.5px !important; color: #5A6478 !important; margin-left: auto !important;
}

/* 码卡片横向滚动条 */
.login-container #gmCodeBar .gm-cb-list-wrap {
  display: flex !important; gap: 10px !important; overflow-x: auto !important;
  padding-bottom: 6px !important; scrollbar-width: thin !important;
  -webkit-mask-image: linear-gradient(90deg,#000 0,#000 90%,transparent 100%);
          mask-image: linear-gradient(90deg,#000 0,#000 90%,transparent 100%);
}
.login-container #gmCodeBar .gm-cb-list-wrap:hover { -webkit-mask-image: none !important; mask-image: none !important; }
.login-container #gmCodeBar .gm-cb-list-wrap::-webkit-scrollbar { height: 4px; }
.login-container #gmCodeBar .gm-cb-list-wrap::-webkit-scrollbar-thumb { background: #D8E6E2; border-radius: 2px; }

/* 单个码卡片 */
.login-container #gmCodeBar .gm-cb-item {
  position: relative !important; flex: 0 0 172px !important; width: 172px !important;
  display: flex !important; flex-direction: column !important; gap: 4px !important;
  padding: 10px 12px !important; border-radius: 10px !important; cursor: pointer !important;
  background: #fff !important; border: 1px solid #E3E8F0 !important;
  transition: transform .2s, box-shadow .2s, border-color .2s !important;
}
.login-container #gmCodeBar .gm-cb-item:hover {
  transform: translateY(-2px) !important; border-color: rgba(0,194,154,.5) !important;
  box-shadow: 0 8px 20px rgba(0,194,154,.16) !important;
}
.login-container #gmCodeBar .gm-cb-item:focus-visible {
  outline: 2px solid #00C29A !important; outline-offset: 2px !important;
}
/* 左侧强调条 */
.login-container #gmCodeBar .gm-cb-item::before {
  content: '' !important; position: absolute !important; left: 0 !important; top: 8px !important;
  bottom: 8px !important; width: 3px !important; border-radius: 0 3px 3px 0 !important;
  background: linear-gradient(180deg, #00C29A, #49C1BF) !important;
}
.login-container #gmCodeBar .gm-cb-top {
  display: flex !important; align-items: center !important; gap: 6px !important; min-height: 20px !important;
}
.login-container #gmCodeBar .gm-cb-val {
  font-size: 15px !important; font-weight: 800 !important; color: #E8890C !important;
  letter-spacing: -.01em !important; line-height: 1.2 !important;
}
/* 临期角标 */
.login-container #gmCodeBar .gm-cb-flag {
  margin-left: auto !important; font-size: 10px !important; font-weight: 700 !important;
  color: #C2322A !important; background: rgba(245,76,64,.1) !important;
  padding: 2px 6px !important; border-radius: 50px !important; white-space: nowrap !important;
}
.login-container #gmCodeBar .gm-cb-flag.low { color: #B45309 !important; background: rgba(255,160,43,.14) !important; }
.login-container #gmCodeBar .gm-cb-code {
  font-family: ui-monospace, 'Cascadia Code', Consolas, monospace !important;
  font-size: 13.5px !important; font-weight: 700 !important; color: #14122B !important;
  letter-spacing: .06em !important;
}
.login-container #gmCodeBar .gm-cb-meta {
  display: flex !important; align-items: center !important; gap: 8px !important;
  font-size: 10.5px !important; color: #5A6478 !important; margin-top: 1px !important;
}
.login-container #gmCodeBar .gm-cb-exp { margin-left: auto !important; }
.login-container #gmCodeBar .gm-cb-item .cp {
  margin-top: 6px !important; width: 100% !important; min-height: 26px !important;
  display: flex !important; align-items: center !important; justify-content: center !important;
  font-size: 11.5px !important; font-weight: 600 !important; color: #00C29A !important;
  background: rgba(0,194,154,.1) !important; border: 1px solid rgba(0,194,154,.24) !important;
  border-radius: 6px !important; cursor: pointer !important; transition: all .18s !important;
}
.login-container #gmCodeBar .gm-cb-item .cp:hover { background: #00C29A !important; color: #fff !important; border-color: #00C29A !important; }
.login-container #gmCodeBar .gm-cb-item .cp.gm-cb-copied { background: #16A34A !important; border-color: #16A34A !important; color: #fff !important; }
.login-container #gmCodeBar .gm-cb-item.is-soldout { opacity: .55 !important; }

/* 可领取区 */
.login-container #gmCodeBar .gm-claim {
  margin-top: 12px !important; padding-top: 12px !important;
  border-top: 1px dashed #D8E6E2 !important;
}
.login-container #gmCodeBar .gm-claim-list {
  display: flex !important; gap: 10px !important; overflow-x: auto !important;
  padding-bottom: 6px !important; scrollbar-width: thin !important;
  -webkit-mask-image: linear-gradient(90deg,#000 0,#000 90%,transparent 100%);
          mask-image: linear-gradient(90deg,#000 0,#000 90%,transparent 100%);
}
.login-container #gmCodeBar .gm-claim-list:hover { -webkit-mask-image: none !important; mask-image: none !important; }
.login-container #gmCodeBar .gm-claim-list::-webkit-scrollbar { height: 4px; }
.login-container #gmCodeBar .gm-claim-list::-webkit-scrollbar-thumb { background: #D8E6E2; border-radius: 2px; }
.login-container #gmCodeBar .gm-claim-item {
  position: relative !important; flex: 0 0 176px !important; width: 176px !important;
  display: flex !important; flex-direction: column !important; gap: 3px !important;
  padding: 10px 12px !important; border-radius: 10px !important;
  background: #fff !important; border: 1px dashed rgba(0,194,154,.45) !important;
}
.login-container #gmCodeBar .gm-ci-top { display: flex !important; align-items: center !important; gap: 6px !important; }
.login-container #gmCodeBar .gm-claim-item b {
  font-size: 15px !important; font-weight: 800 !important; color: #00C29A !important;
  font-variant-numeric: tabular-nums !important;
}
.login-container #gmCodeBar .gm-claim-item i {
  font-style: normal !important; font-size: 10.5px !important; color: #5A6478 !important;
  white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important;
}
.login-container #gmCodeBar .gm-claim-btn {
  margin-top: 6px !important; width: 100% !important; min-height: 30px !important;
  background: linear-gradient(135deg, #00C29A, #00A886) !important; color: #fff !important;
  border: none !important; border-radius: 6px !important; cursor: pointer !important;
  font-size: 12px !important; font-weight: 600 !important;
  transition: filter .18s, transform .18s !important;
}
.login-container #gmCodeBar .gm-claim-btn:hover:not(:disabled) { filter: brightness(1.08) !important; transform: translateY(-1px) !important; }
.login-container #gmCodeBar .gm-claim-btn:disabled { cursor: default !important; opacity: .9 !important; }
.login-container #gmCodeBar .gm-claim-btn.gm-claim-done { background: #E5F6EF !important; color: #0E7C63 !important; }
.login-container #gmCodeBar .gm-claim-btn.gm-claim-fail { background: #F1F3F7 !important; color: #C2322A !important; }

/* 窄屏：改纵向堆叠，取消横向滚动与 mask */
@media (max-width:960px){
  .login-container #gmCodeBar .gm-cb-list-wrap,
  .login-container #gmCodeBar .gm-claim-list {
    flex-wrap: wrap !important; overflow-x: visible !important;
    -webkit-mask-image: none !important; mask-image: none !important;
  }
  .login-container #gmCodeBar .gm-cb-item,
  .login-container #gmCodeBar .gm-claim-item { flex: 1 1 100% !important; width: 100% !important; }
  .login-container #gmCodeBar .gm-cb-sub { margin-left: 0 !important; width: 100% !important; }
}

/* ============================================================
   2026-10-03 · 优惠码条高度策略修正
   之前给 #gmCodeBar 锁了固定高度（200/150/260），v2 卡片化后每张卡更高，
   200px 只能放下「可用优惠码」一区，「可领取」被裁掉。
   改为：桌面端不限高（内容自适应），由外层 .container-before 承担滚动；
        卡片改为更紧凑的横向布局，把总高控制在 ~300px 内。
   ============================================================ */
@media (min-width:961px){
  .login-container #gmCodeBar {
    height: auto !important;
    max-height: none !important;
    overflow: visible !important;
  }
  .login-container #gmCodeBar .gm-codebar-inner { max-height: none !important; overflow: visible !important; }
  /* 卡片改横向紧凑：左信息右按钮，省掉一层纵向堆叠 */
  .login-container #gmCodeBar .gm-cb-item,
  .login-container #gmCodeBar .gm-claim-item {
    display: grid !important;
    grid-template-columns: 1fr auto !important;
    grid-template-areas: 'val btn' 'code btn' 'meta btn' !important;
    align-items: center !important;
    column-gap: 10px !important;
    row-gap: 1px !important;
    padding: 9px 11px !important;
  }
  .login-container #gmCodeBar .gm-cb-item .gm-cb-top { grid-area: val !important; margin: 0 !important; }
  .login-container #gmCodeBar .gm-cb-item .gm-cb-code { grid-area: code !important; }
  .login-container #gmCodeBar .gm-cb-item .gm-cb-meta { grid-area: meta !important; margin: 0 !important; }
  .login-container #gmCodeBar .gm-cb-item .cp {
    grid-area: btn !important; margin: 0 !important; width: auto !important;
    min-width: 54px !important; min-height: 30px !important; align-self: center !important;
  }
  .login-container #gmCodeBar .gm-claim-item .gm-ci-top { grid-area: val !important; }
  .login-container #gmCodeBar .gm-claim-item > i { grid-area: meta !important; }
  .login-container #gmCodeBar .gm-claim-item .gm-claim-btn {
    grid-area: btn !important; margin: 0 !important; width: auto !important;
    min-width: 58px !important; padding: 0 14px !important; align-self: center !important;
  }
  /* 标题行与卡间距再收一点 */
  .login-container #gmCodeBar .gm-cb-head { margin-bottom: 7px !important; }
  .login-container #gmCodeBar .gm-claim { margin-top: 9px !important; padding-top: 9px !important; }
}

/* ============================================================
   2026-10-03 · 补回 57px：优惠码条增高后右栏内滚
   卡片化让 #gmCodeBar 从 200px 涨到 256px，右栏又超出视口 57px。
   这里从左侧品牌区与表单卡内部再挤出空间（不改字号，保持可读性）：
   ① 左侧促销卡区上移（原本 justify-content:center 有富余）
   ② 表单卡内边距与品牌区间距各收 4~6px
   ============================================================ */
@media (min-width:961px){
  .login-container .container-before { padding: 12px 32px !important; }
  .login-container .gm-form-card { padding: 20px 28px 16px !important; }
  .login-container .gm-right-brand { margin-bottom: 10px !important; }
  .login-container .gm-right-welcome { margin-bottom: 10px !important; }
  .login-container .gm-form-foot { margin-top: 10px !important; padding-top: 10px !important; }
  .login-container #gmCodeBar { margin-top: 10px !important; }
  .login-container #gmCodeBar .gm-codebar-inner { padding: 10px 12px !important; }
}
@media (min-width:961px) and (max-height:820px){
  .login-container .container-before { padding: 10px 28px !important; }
  .login-container .gm-form-card { padding: 16px 24px 14px !important; }
  .login-container .gm-right-welcome h1 { font-size: 20px !important; }
  .login-text-title { font-size: 20px !important; }
  .login-container .form-item { margin-bottom: 8px !important; }
  .login-container .el-input__inner { height: 40px !important; line-height: 40px !important; }
  .login-container .login-btn { height: 42px !important; }
  .login-container #gmCodeBar .gm-cb-item,
  .login-container #gmCodeBar .gm-claim-item { padding: 7px 10px !important; }
}

/* ============================================================
   2026-10-03 · 码卡宽度与信息行排版收尾
   172px 卡宽下「剩 100 份 / 2026/11/29 到期」会折行成两行，显乱。
   方案：卡宽 172→196px，并把 meta 行改为「名额 + · + 到期」单行 ellipsis。
   ============================================================ */
@media (min-width:961px){
  .login-container #gmCodeBar .gm-cb-item { flex: 0 0 196px !important; width: 196px !important; }
  .login-container #gmCodeBar .gm-claim-item { flex: 0 0 196px !important; width: 196px !important; }
  /* meta 与 i 强制单行 */
  .login-container #gmCodeBar .gm-cb-meta,
  .login-container #gmCodeBar .gm-claim-item > i {
    flex-wrap: nowrap !important; white-space: nowrap !important;
    overflow: hidden !important; text-overflow: ellipsis !important;
    display: block !important; line-height: 1.4 !important;
  }
  .login-container #gmCodeBar .gm-cb-meta > span { display: inline !important; }
  .login-container #gmCodeBar .gm-cb-meta > span + span::before { content: ' ·'; margin: 0 3px; color: #C8D0DA; }
  .login-container #gmCodeBar .gm-cb-exp { margin-left: 0 !important; }
  .login-container #gmCodeBar .gm-cb-code { font-size: 13px !important; }
}

/* ============================================================
   2026-10-03 · 登录页移除优惠码条后的版式回弹
   背景：为了把优惠码营销条（最高 256px）塞进一屏，v24~v33 把登录页
        压得很紧：输入框 44/40px、登录按钮 46px、卡片 padding 20/16px。
        现在优惠码条已从 login.php 移除，右栏内容骤减 ~430px，
        实测大屏空旷率 59%、笔记本 47%，且输入框触控目标偏小。
   本层：把桌面端恢复到舒适尺寸（大屏/桌面一档、矮屏一档），
        并保持上下左右严格对称居中。
   ============================================================ */
@media (min-width:961px){
  /* 桌面基准档：输入框回到 46px、按钮 50px、间距放大 */
  .login-container .el-input__inner { height: 46px !important; line-height: 46px !important; font-size: 15px !important; }
  .login-container .code-btn { height: 46px !important; font-size: 13.5px !important; }
  .login-container .login-btn { height: 50px !important; font-size: 16px !important; }
  .login-container .form-item { margin-bottom: 14px !important; }
  .login-container .gm-form-card { padding: 30px 34px 26px !important; }
  .login-container .gm-right-brand { margin-bottom: 16px !important; }
  .login-container .gm-right-brand .mark { width: 36px !important; height: 36px !important; }
  .login-container .gm-right-brand .mark svg { width: 20px !important; height: 20px !important; }
  .login-container .gm-right-welcome { margin-bottom: 16px !important; }
  .login-container .gm-right-welcome h1 { font-size: 25px !important; }
  .login-container .gm-right-welcome p { font-size: 12.5px !important; }
  .login-container .login .login-text { margin-bottom: 14px !important; }
  .login-text-title { font-size: 25px !important; }
  .login-container .login-text-regist { font-size: 12.5px !important; }
  .login-container .rember-item { margin-bottom: 12px !important; font-size: 12px !important; }
  .login-container .gm-form-foot { margin-top: 16px !important; padding-top: 16px !important; font-size: 12px !important; }
  /* 右栏上下留白加大，避免内容居中后上下显得空 */
  .login-container .container-before { padding: 24px 32px !important; }
  .login-container .gm-back-site { margin-bottom: 10px !important; }
}
/* 超大屏再放大一档（内容仍然不足以撑满 1080 高度） */
@media (min-width:961px) and (min-height:1000px){
  .login-container .el-input__inner { height: 50px !important; line-height: 50px !important; }
  .login-container .code-btn { height: 50px !important; }
  .login-container .login-btn { height: 54px !important; font-size: 16.5px !important; }
  .login-container .form-item { margin-bottom: 16px !important; }
  .login-container .gm-form-card { padding: 34px 38px 30px !important; }
  .login-container .gm-right-welcome h1 { font-size: 28px !important; }
  .login-text-title { font-size: 28px !important; }
}
/* 矮屏（≤820 高）保持紧凑但不再压到 40px 以下 */
@media (min-width:961px) and (max-height:820px){
  .login-container .el-input__inner { height: 44px !important; line-height: 44px !important; }
  .login-container .code-btn { height: 44px !important; }
  .login-container .login-btn { height: 48px !important; }
  .login-container .form-item { margin-bottom: 12px !important; }
  .login-container .gm-form-card { padding: 26px 30px 22px !important; }
  .login-container .gm-right-welcome { margin-bottom: 14px !important; }
  .login-container .gm-right-welcome h1 { font-size: 23px !important; }
  .login-text-title { font-size: 23px !important; }
  .login-container .gm-form-foot { margin-top: 14px !important; padding-top: 14px !important; }
}

/* ============================================================
   2026-10-03 · 信任信息区（填补移除优惠码条后的高屏空白）
   仅在「视口够高」时展示；矮屏/移动端隐藏，避免内容拥挤。
   ============================================================ */
.gm-trust-panel{display:none;}
/* 够高（≥900px）且够宽（≥961px）才显示 */
@media (min-width:961px) and (min-height:900px){
  .login-container .gm-trust-panel{
    display:grid !important;
    grid-template-columns:repeat(3,1fr) !important;
    gap:10px !important;
    width:100% !important;
    max-width:430px !important;
    margin:18px auto 0 !important;
    padding:14px 16px !important;
    border-radius:12px !important;
    background:linear-gradient(135deg,rgba(0,194,154,.05),rgba(183,148,244,.03)) !important;
    border:1px solid rgba(0,194,154,.16) !important;
  }
  .login-container .gm-trust-panel .gm-tp-item{
    display:flex !important; align-items:center !important; gap:8px !important; min-width:0 !important;
  }
  .login-container .gm-trust-panel .gm-tp-ico{
    flex:none !important; width:30px !important; height:30px !important; border-radius:8px !important;
    display:grid !important; place-items:center !important;
    background:rgba(0,194,154,.1) !important; color:#00C29A !important;
  }
  .login-container .gm-trust-panel .gm-tp-ico svg{width:16px !important; height:16px !important;}
  .login-container .gm-trust-panel .gm-tp-item b{
    display:block !important; font-size:12.5px !important; font-weight:700 !important; color:#14122B !important; line-height:1.35 !important;
  }
  .login-container .gm-trust-panel .gm-tp-item small{
    display:block !important; font-size:10.5px !important; color:#5A6478 !important; line-height:1.3 !important;
  }
  /* 超大屏再放大一档 */
  .login-container .gm-trust-panel{ padding:18px 20px !important; gap:14px !important; }
  .login-container .gm-trust-panel .gm-tp-ico{ width:36px !important; height:36px !important; }
  .login-container .gm-trust-panel .gm-tp-ico svg{ width:19px !important; height:19px !important; }
  .login-container .gm-trust-panel .gm-tp-item b{ font-size:13.5px !important; }
  .login-container .gm-trust-panel .gm-tp-item small{ font-size:11.5px !important; }
}

/* 2026-10-03 · 信任区文字挤压修正：3 列在 430px 容器内每列仅 ~128px，
   标题与副标题会各折一行显得拥挤。改为 1 列纵向列表（图标+两行文字同排），
   高度固定约 96px，信息完整不折行。 */
@media (min-width:961px) and (min-height:900px){
  .login-container .gm-trust-panel{
    grid-template-columns:1fr !important;
    gap:8px !important;
    padding:14px 16px !important;
  }
  .login-container .gm-trust-panel .gm-tp-item{ align-items:center !important; }
  .login-container .gm-trust-panel .gm-tp-item b{
    white-space:nowrap !important;
  }
  .login-container .gm-trust-panel .gm-tp-item small{
    white-space:nowrap !important;
  }
  .login-container .gm-trust-panel .gm-tp-ico{ width:28px !important; height:28px !important; }
}
