/* NOVAX v4 · 首页/登录页 */
.hero{padding:52px 28px 56px;border-bottom:1px solid var(--line);background:var(--bg2);position:relative;overflow:hidden;transition:background-color var(--dur) var(--ease)}
.hero::before{content:"";position:absolute;top:-120px;right:-60px;width:420px;height:420px;border-radius:50%;background:radial-gradient(circle,rgba(42,100,251,.18),transparent 60%);pointer-events:none}
.hero::after{content:"";position:absolute;bottom:-180px;left:-80px;width:480px;height:480px;border-radius:50%;background:radial-gradient(circle,rgba(42,100,251,.10),transparent 60%);pointer-events:none}
html[data-theme="light"] .hero::before,body[data-theme="light"] .hero::before,:root.nx-theme-light .hero::before,html.nx-theme-light .hero::before,body.nx-theme-light .hero::before,[data-theme="light"] .hero::before,.nx-theme-light .hero::before{background:radial-gradient(circle,rgba(42,100,251,.12),transparent 60%)}
html[data-theme="light"] .hero::after,body[data-theme="light"] .hero::after,:root.nx-theme-light .hero::after,html.nx-theme-light .hero::after,body.nx-theme-light .hero::after,[data-theme="light"] .hero::after,.nx-theme-light .hero::after{background:radial-gradient(circle,rgba(42,100,251,.07),transparent 60%)}
.hero-in{max-width:1240px;margin:0 auto;position:relative;z-index:2}
.hero .badge{display:inline-flex;align-items:center;gap:8px;padding:5px 12px;border-radius:999px;background:var(--bg3);border:1px solid var(--line);font-size:11.5px;color:var(--t2);font-weight:700;margin-bottom:18px;letter-spacing:.04em}
.hero h1{font-size:46px;line-height:1.15;font-weight:900;letter-spacing:-.01em;margin-bottom:14px;color:var(--t1)}
.hero h1 em{font-style:normal;color:var(--brand)}
.hero p.lead{font-size:15px;color:var(--t2);max-width:620px;line-height:1.9;margin-bottom:26px;font-weight:500}
.hero .cta{display:flex;gap:12px;flex-wrap:wrap}
html[data-theme="light"] .hero,body[data-theme="light"] .hero,:root.nx-theme-light .hero,html.nx-theme-light .hero,body.nx-theme-light .hero,[data-theme="light"] .hero,.nx-theme-light .hero{background:#fff;border-bottom-color:#eef1f6}
.hero-tape-wrap{width:100%;max-width:1240px;margin:0 auto;padding:16px 0 0;position:relative;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;scrollbar-width:none}
.hero-tape-wrap::-webkit-scrollbar{display:none;height:0}
.hero-tape{display:flex;flex-wrap:nowrap;gap:0;width:max-content;min-width:100%;overflow:visible;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--bg2);font-size:12px}
.hero-tape .cell{flex:0 0 auto;min-width:168px;padding:12px 20px;white-space:nowrap;border-right:1px solid var(--line);font-weight:600}
.hero-tape .cell:last-child{border-right:0}
.hero-tape .cell .k{font-size:11px;color:var(--t3);font-weight:700;letter-spacing:.06em;margin-bottom:5px}
.hero-tape .cell .v{font-size:16px;font-weight:800;color:var(--t1);font-variant-numeric:tabular-nums;letter-spacing:-.01em;line-height:1.2}
.hero-tape .cell .nm{color:var(--t3);margin-right:8px;font-weight:600;font-size:11px}
.hero-tape .cell .px{font-weight:800;color:var(--t1);font-variant-numeric:tabular-nums;margin-right:6px}
.hero-tape .cell .pc{font-weight:800;font-variant-numeric:tabular-nums}
@media (min-width:900px){
  .hero-tape-wrap{overflow:visible}
  .hero-tape{width:100%;min-width:0}
  .hero-tape .cell{flex:1 1 0;min-width:0}
}
html[data-theme="light"] .hero-tape,body[data-theme="light"] .hero-tape,:root.nx-theme-light .hero-tape,html.nx-theme-light .hero-tape,body.nx-theme-light .hero-tape,[data-theme="light"] .hero-tape,.nx-theme-light .hero-tape{background:#fafbfd;border-color:#e3e7ef}
html[data-theme="light"] .hero-tape .cell,body[data-theme="light"] .hero-tape .cell,:root.nx-theme-light .hero-tape .cell,html.nx-theme-light .hero-tape .cell,body.nx-theme-light .hero-tape .cell,[data-theme="light"] .hero-tape .cell,.nx-theme-light .hero-tape .cell{border-right-color:#e3e7ef}
.home-sec{padding:44px 28px;max-width:1240px;margin:0 auto}
.home-sec h2{font-size:22px;font-weight:800;margin-bottom:6px;letter-spacing:.01em;color:var(--t1)}
.home-sec>p{font-size:13px;color:var(--t3);margin-bottom:22px;line-height:1.7}
.feat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.feat{background:var(--bg2);border:1px solid var(--line);border-radius:var(--r);padding:22px 20px;transition:border-color var(--dur) var(--ease),transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),background-color var(--dur) var(--ease)}
.feat:hover{border-color:var(--brand);transform:translateY(-3px);box-shadow:0 18px 40px -20px rgba(42,100,251,.55)}
.feat .ic{width:44px;height:44px;border-radius:10px;background:var(--brand-dim);color:var(--brand);display:flex;align-items:center;justify-content:center;margin-bottom:14px;transition:transform var(--dur) var(--ease)}
.feat:hover .ic{transform:scale(1.08) rotate(-4deg)}
.feat .ic svg{width:22px;height:22px}
.feat h3{font-size:16px;font-weight:800;margin-bottom:6px;color:var(--t1)}
.feat p{font-size:12.5px;color:var(--t3);line-height:1.75}
html[data-theme="light"] .feat:hover,body[data-theme="light"] .feat:hover,:root.nx-theme-light .feat:hover,html.nx-theme-light .feat:hover,body.nx-theme-light .feat:hover,[data-theme="light"] .feat:hover,.nx-theme-light .feat:hover{box-shadow:0 18px 40px -22px rgba(15,23,34,.22)}
@media (max-width:960px){.feat-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.feat-grid{grid-template-columns:1fr}.hero h1{font-size:32px}.hero{padding:32px 16px 40px}}
.flow{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:18px}
.step{background:var(--bg2);border:1px solid var(--line);border-radius:var(--r);padding:22px 20px;position:relative;transition:border-color var(--dur) var(--ease),transform var(--dur) var(--ease)}
.step:hover{border-color:var(--line2);transform:translateY(-2px)}
.step h5{font-size:16px;font-weight:800;margin:0 0 8px;color:var(--t1);letter-spacing:.01em}
.step p{font-size:12.5px;color:var(--t3);line-height:1.7;margin:0}
@media (max-width:960px){.flow{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.flow{grid-template-columns:1fr}.hero h1{font-size:32px}.hero{padding:32px 16px 40px}}
.auth-body{min-height:100vh;background:radial-gradient(circle at 15% 10%,rgba(42,100,251,.18),transparent 55%),radial-gradient(circle at 85% 90%,rgba(91,139,255,.12),transparent 55%),var(--bg);display:flex;align-items:center;justify-content:center;padding:24px 20px}
html[data-theme="light"] .auth-body,body[data-theme="light"] .auth-body,:root.nx-theme-light .auth-body,html.nx-theme-light .auth-body,body.nx-theme-light .auth-body,[data-theme="light"] .auth-body,.nx-theme-light .auth-body{background:radial-gradient(circle at 15% 10%,rgba(42,100,251,.10),transparent 55%),radial-gradient(circle at 85% 90%,rgba(91,139,255,.06),transparent 55%),#f5f7fb}
.auth{width:100%;max-width:880px;min-height:520px;display:grid;grid-template-columns:1fr 1fr;background:var(--bg2);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 30px 70px rgba(0,0,0,.55),0 0 0 1px rgba(255,255,255,.02) inset}
html[data-theme="light"] .auth,body[data-theme="light"] .auth,:root.nx-theme-light .auth,html.nx-theme-light .auth,body.nx-theme-light .auth,[data-theme="light"] .auth,.nx-theme-light .auth{background:#fff;border-color:#e3e7ef;box-shadow:0 30px 70px -30px rgba(15,23,34,.2)}
.auth-side{background:linear-gradient(135deg,rgba(42,100,251,.14),rgba(42,100,251,.28));border-right:1px solid var(--line);padding:40px 36px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden;min-width:0}
.auth-side .brand{display:flex;align-items:center;gap:10px;font-size:18px;font-weight:900;letter-spacing:.06em;color:var(--t1);position:relative;z-index:2;margin-bottom:18px}
.auth-side .brand .word{font-style:normal}
.auth-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;padding:14px;background:var(--bg3);border:1px solid var(--line);border-radius:10px;position:relative;z-index:2}
.auth-stats .k{font-size:11px;color:var(--t3);font-weight:600}
.auth-stats .v{font-size:20px;font-weight:900;color:var(--t1);font-variant-numeric:tabular-nums}
#sparkCanvas{display:block;width:100%;height:140px;max-width:100%;margin-top:18px;position:relative;z-index:1}
.auth-side::before{content:"";position:absolute;bottom:-100px;right:-80px;width:280px;height:280px;border-radius:50%;background:radial-gradient(circle,rgba(42,100,251,.35),transparent 60%)}
.auth-side .lg{display:flex;align-items:center;gap:10px;font-size:18px;font-weight:900;letter-spacing:.08em;color:var(--t1);position:relative;z-index:2}
.auth-side h2{font-size:30px;font-weight:900;line-height:1.25;margin-bottom:12px;letter-spacing:-.01em;color:var(--t1);position:relative;z-index:2}
.auth-side h2 em{font-style:normal;color:var(--brand)}
.auth-side p{font-size:13px;color:var(--t2);line-height:1.8;position:relative;z-index:2}
.auth-side .stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:14px;background:var(--bg3);border:1px solid var(--line);border-radius:10px;position:relative;z-index:2}
html[data-theme="light"] .auth-side .stats,body[data-theme="light"] .auth-side .stats,:root.nx-theme-light .auth-side .stats,html.nx-theme-light .auth-side .stats,body.nx-theme-light .auth-side .stats,[data-theme="light"] .auth-side .stats,.nx-theme-light .auth-side .stats{background:rgba(255,255,255,.8);border-color:#e3e7ef}
.auth-side .stats b{display:block;font-size:20px;font-weight:900;color:var(--t1);font-variant-numeric:tabular-nums}
.auth-side .stats span{font-size:11px;color:var(--t3);font-weight:600}
.auth-form{padding:40px 36px;display:flex;flex-direction:column;justify-content:center;color:var(--t1);min-width:0}
.auth-form .at{font-size:24px;font-weight:900;margin-bottom:4px;color:var(--t1)}
.auth-form .as{font-size:13px;color:var(--t3);margin-bottom:24px}
.auth-err{margin:0 0 14px;padding:10px 12px;border-radius:8px;background:var(--dn-dim);color:var(--dn);font-size:13px;font-weight:600}
.auth-form .switch{text-align:center;margin-top:16px;font-size:13px;color:var(--t3)}
.auth-form .switch a{color:var(--brand);cursor:pointer;font-weight:700}
.auth-form h3{font-size:24px;font-weight:900;margin-bottom:4px;color:var(--t1)}
.auth-form .subti{font-size:13px;color:var(--t3);margin-bottom:24px}
.auth-form .acts{display:flex;gap:10px;margin-top:14px}
.auth-form .acts .btn{flex:1;height:42px;font-size:14px}
.auth-form .hint{font-size:11.5px;color:var(--t3);text-align:center;margin-top:18px;line-height:1.7}
.auth-form .hint a{color:var(--brand);font-weight:700}
/* ============================================================
   UICraft · pages.css 动效增强（Hero / 行情带 / 卡片 / 登录页）
   ============================================================ */

/* ---- Hero choreography：逐段 stagger 登场 ---- */
.hero .badge      { animation: enterLift var(--dur-520) var(--ease-out-quart) both; animation-delay: 180ms; }
.hero h1          { animation: enterHero var(--dur-800) var(--ease-out-expo)  both; animation-delay: 260ms; }
.hero p.lead      { animation: enterLift var(--dur-640) var(--ease-out-quart) both; animation-delay: 380ms; }
.hero .cta        { animation: enterLift var(--dur-520) var(--ease-out-quart) both; animation-delay: 500ms; }
.hero .cta .btn   { transition: transform var(--dur-200) var(--ease-out-quart), box-shadow var(--dur-200) var(--ease-out-quart), filter var(--dur-200) var(--ease-out-quart); }
.hero .cta .btn:hover:not([disabled]) { transform: translateY(-2px) scale(1.015); }
.hero .cta .btn:active:not([disabled]) { transform: translateY(1px) scale(.99); }

/* Hero 背景光晕：呼吸式轻微漂移 */
.hero::before { animation: heroGlowA 14s var(--ease-in-out) infinite alternate; }
.hero::after  { animation: heroGlowB 18s var(--ease-in-out) infinite alternate; }
@keyframes heroGlowA {
  from { transform: translate(0, 0) scale(1); }
  to   { transform: translate(-22px, 18px) scale(1.06); }
}
@keyframes heroGlowB {
  from { transform: translate(0, 0) scale(1); }
  to   { transform: translate(26px, -16px) scale(1.08); }
}

/* ---- 行情带（Ticker Tape）无缝滚动跑马灯 + 悬停停 ---- */
.hero-tape { position: relative; }
.hero-tape .inner {
  display: inline-flex;
  white-space: nowrap;
  animation: tapeScroll 55s linear infinite;
}
.hero-tape:hover .inner { animation-play-state: paused; }
@keyframes tapeScroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
.hero-tape .cell {
  transition: background var(--dur-150) var(--ease-out-quart), transform var(--dur-200) var(--ease-out-quart);
  position: relative;
}
@media (hover: hover) and (pointer: fine) {
  .hero-tape .cell:hover { background: var(--bg3); transform: translateY(-1px); }
}
/* 涨跌数字脉冲（类 toast flash） */
.hero-tape .cell .pc.flash-up { animation: flashUp .6s var(--ease-out-quart); }
.hero-tape .cell .pc.flash-dn { animation: flashDn .6s var(--ease-out-quart); }
@keyframes flashUp { 0% { background: var(--up-dim); } 100% { background: transparent; } }
@keyframes flashDn { 0% { background: var(--dn-dim); } 100% { background: transparent; } }

/* ---- 首页 section 标题：进场 ---- */
.home-sec h2 { animation: enterLift var(--dur-520) var(--ease-out-quart) both; animation-delay: 60ms; }
.home-sec > p  { animation: enterLift var(--dur-520) var(--ease-out-quart) both; animation-delay: 110ms; }

/* ---- Feat 卡片：stagger 入场 + hover 细节微交互 ---- */
.feat-grid .feat {
  animation: enterLift var(--dur-520) var(--ease-out-quart) both;
  animation-delay: calc(140ms + var(--i, 0) * 110ms);
  position: relative;
  overflow: hidden;
}
/* 底部渐变扫光：hover 时从左到右 */
.feat::before {
  content: "";
  position: absolute;
  left: -100%; top: 0; bottom: 0;
  width: 100%;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--brand) 12%, transparent), transparent);
  transition: left var(--dur-520) var(--ease-out-quart);
  pointer-events: none;
}
.feat:hover::before { left: 100%; }
.feat h3 { transition: color var(--dur-200) var(--ease-out-quart); }
.feat:hover h3 { color: var(--brand); }

/* ---- Flow steps：stagger 入场 + 连线生长（可选） ---- */
.flow .step {
  animation: enterLift var(--dur-520) var(--ease-out-quart) both;
  animation-delay: calc(180ms + var(--i, 0) * 120ms);
}

/* ---- Auth 登录/注册页：分栏交错入场 ---- */
.auth { animation: enterPop var(--dur-520) var(--ease-out-quart) both; animation-delay: 120ms; }
.auth-side { position: relative; overflow: hidden; }
.auth-side::before { animation: authBloom 12s var(--ease-in-out) infinite alternate; }
@keyframes authBloom {
  from { transform: translate(0, 0) scale(1); }
  to   { transform: translate(16px, -10px) scale(1.1); }
}
.auth-side .lg    { animation: enterLift var(--dur-520) var(--ease-out-quart) both; animation-delay: 240ms; }
.auth-side h2     { animation: enterLift var(--dur-640) var(--ease-out-quart) both; animation-delay: 320ms; }
.auth-side p      { animation: enterLift var(--dur-520) var(--ease-out-quart) both; animation-delay: 400ms; }
.auth-side .stats { animation: enterPop  var(--dur-520) var(--ease-out-quart) both; animation-delay: 520ms; }
.auth-side .stats b { display: inline-block; transition: transform var(--dur-300) var(--ease-out-quart), color var(--dur-200) var(--ease-out-quart); }
.auth-side .stats:hover b { color: var(--brand); transform: translateY(-1px); }

.auth-form h3     { animation: enterLift var(--dur-520) var(--ease-out-quart) both; animation-delay: 280ms; }
.auth-form .subti { animation: enterLift var(--dur-420) var(--ease-out-quart) both; animation-delay: 360ms; }
.auth-form .field { animation: enterLift var(--dur-420) var(--ease-out-quart) both; }
.auth-form .field:nth-of-type(1) { animation-delay: 440ms; }
.auth-form .field:nth-of-type(2) { animation-delay: 500ms; }
.auth-form .field:nth-of-type(3) { animation-delay: 560ms; }
.auth-form .field:nth-of-type(4) { animation-delay: 620ms; }
.auth-form .acts  { animation: enterLift var(--dur-420) var(--ease-out-quart) both; animation-delay: 700ms; }
.auth-form .hint  { animation: enterFade var(--dur-420) var(--ease-out-quart) both; animation-delay: 820ms; }

@media (max-width:820px){.auth{grid-template-columns:1fr;max-width:440px}.auth-side{display:none}.auth-form{padding:30px 22px}}
