/* 壹信发软件订阅授权系统 — 深色控制台 v3（Aurora Console）
   契约：类名与 CSS 变量名不变，两个 SPA 页面共用；只调视觉与动效，不动结构 */
:root{
  --bg:#05070e;
  --card:#0e1322;
  --card-deep:#0a0e1a;
  --border:rgba(148,163,184,.13);
  --border-strong:rgba(148,163,184,.28);
  --primary:#7c8cff;
  --primary-2:#a78bfa;
  --primary-dark:#5a67f0;
  --ok:#34d399;
  --warn:#fbbf24;
  --err:#fb7185;
  --ink:#f2f5fc;
  --mut:#8f98b3;
  --faint:#5d6680;
  --ring:rgba(124,140,255,.33);
  --ease:cubic-bezier(.22,1,.36,1);
  --ease-spring:cubic-bezier(.34,1.4,.64,1);
  color-scheme:dark;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC",sans-serif;
  background:var(--bg);color:var(--ink);font-size:14px;line-height:1.55;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
/* 环境光：静态径向光晕打底 + 单枚缓慢漂移光斑（仅 transform，GPU 合成，零重排） */
/* 环境光：全视口斜向渐变洗底 + 静态径向光晕（fixed=inset:0，任意窗口宽高全覆盖） */
body::before{content:"";position:fixed;inset:0;z-index:-2;pointer-events:none;
  background:
    linear-gradient(165deg,rgba(124,140,255,.08),transparent 30%,transparent 64%,rgba(167,139,250,.1)),
    radial-gradient(820px 560px at 85% -10%,rgba(124,140,255,.17),transparent 60%),
    radial-gradient(1000px 640px at -15% 110%,rgba(167,139,250,.13),transparent 60%),
    radial-gradient(640px 420px at 55% 125%,rgba(52,211,153,.08),transparent 60%);
}
body::after{content:"";position:fixed;z-index:-1;pointer-events:none;right:-20vw;top:-24vw;
  width:72vw;height:72vw;min-width:640px;min-height:640px;border-radius:50%;
  background:radial-gradient(closest-side,rgba(124,140,255,.17),rgba(167,139,250,.1) 45%,transparent 72%);
  animation:drift 34s ease-in-out infinite;
}
@keyframes drift{0%,100%{transform:translate3d(0,0,0) scale(1);opacity:1}50%{transform:translate3d(-14vw,10vh,0) scale(1.26);opacity:.8}}
/* 第三枚光斑：挂 .layout（覆盖包括侧栏在内的整个视口，fixed 随窗口全宽全高） */
.layout::before{content:"";position:fixed;z-index:-1;pointer-events:none;left:26%;top:-26vw;
  width:60vw;height:60vw;min-width:560px;min-height:560px;border-radius:50%;
  background:radial-gradient(closest-side,rgba(99,102,241,.13),rgba(124,140,255,.07) 45%,transparent 72%);
  animation:drift-3 42s ease-in-out infinite;
}
@keyframes drift-3{0%,100%{transform:translate3d(0,0,0) scale(1);opacity:.95}50%{transform:translate3d(-10vw,12vh,0) scale(1.2);opacity:.6}}
/* ── 左下反相漂移光斑（transform/opacity 合成层，无重排；reduced-motion 全局关停） ── */
.main{position:relative}
.main::before{content:"";position:fixed;z-index:-1;pointer-events:none;left:-20vw;bottom:-26vw;
  width:64vw;height:64vw;min-width:600px;min-height:600px;border-radius:50%;
  background:radial-gradient(closest-side,rgba(52,211,153,.12),rgba(45,212,191,.06) 45%,transparent 72%);
  animation:drift-2 40s ease-in-out infinite;
}
@keyframes drift-2{0%,100%{transform:translate3d(0,0,0) scale(1);opacity:.95}50%{transform:translate3d(12vw,-9vh,0) scale(1.22);opacity:.55}}
h1,h2,h3{font-weight:600;letter-spacing:.01em}
h3{font-size:14px;display:flex;align-items:center;gap:8px}
h3::before{content:"";width:3px;height:13px;border-radius:2px;background:linear-gradient(180deg,var(--primary),var(--primary-2));flex-shrink:0}
a{color:var(--primary);text-decoration:none}
a:hover{color:var(--primary-2)}
code{font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace}
::selection{background:rgba(124,140,255,.35)}
:focus-visible{outline:2px solid var(--ring);outline-offset:2px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:#232a3d;border-radius:8px;border:2px solid var(--bg)}
::-webkit-scrollbar-thumb:hover{background:#2d3550}
::-webkit-scrollbar-track{background:transparent}

/* ── 卡片：表面分层 + 顶部内高光 ── */
.card{
  background:linear-gradient(180deg,rgba(255,255,255,.032),rgba(255,255,255,0) 46%),var(--card);
  border:1px solid var(--border);border-radius:16px;padding:18px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.045),0 18px 44px -22px rgba(0,0,0,.65);
}

/* ── 卡片右下角点缀 v3：极简几何线稿，渐变更浅（整体透明度 .38），正向放置，全界面零重复 ── */
.card,.kpi{position:relative}
.card::after,.kpi::after{
  content:"";position:absolute;right:12px;bottom:10px;width:56px;height:56px;
  pointer-events:none;opacity:.38;background:no-repeat center/contain;
}
.card::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23b9c3ff' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23d6c9fd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cellipse cx='32' cy='32' rx='22' ry='9' stroke='url(%23g)' stroke-width='1.6'/%3E%3Ccircle cx='32' cy='32' r='4.5' stroke='url(%23g)' stroke-width='1.8'/%3E%3Ccircle cx='53' cy='27' r='2' fill='%23b9c3ff' fill-opacity='.5'/%3E%3C/svg%3E")}
.kpi-revenue::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23a7f3c9' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23c9f7dd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cellipse cx='32' cy='18' rx='13' ry='5.5' stroke='url(%23g)' stroke-width='1.7'/%3E%3Cpath d='M19 18v10c0 3 6 5.5 13 5.5s13-2.5 13-5.5V18' stroke='url(%23g)' stroke-width='1.6'/%3E%3Cpath d='M19 28v10c0 3 6 5.5 13 5.5s13-2.5 13-5.5V28' stroke='url(%23g)' stroke-width='1.5' opacity='.7'/%3E%3Cpath d='M19 38v8c0 3 6 5.5 13 5.5s13-2.5 13-5.5v-8' stroke='url(%23g)' stroke-width='1.4' opacity='.45'/%3E%3C/svg%3E")}
.kpi-week::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23b9c3ff' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23d6c9fd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M10 46a30 30 0 0144-24' stroke='url(%23g)' stroke-width='1.8'/%3E%3Cpath d='M54 10v12H42' stroke='url(%23g)' stroke-width='1.6'/%3E%3Ccircle cx='10' cy='46' r='2' fill='%23b9c3ff' fill-opacity='.5'/%3E%3C/svg%3E")}
.kpi-orders::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23b9c3ff' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23d6c9fd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M17 24h30l-3.5 30H20.5z' stroke='url(%23g)' stroke-width='1.7'/%3E%3Cpath d='M24 24a8 8 0 0116 0' stroke='url(%23g)' stroke-width='1.5' opacity='.75'/%3E%3C/svg%3E")}
.kpi-pending::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23fde19e' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23fef0c3' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M32 12a3.5 3.5 0 013.5 3.5V18c7 2 10.5 7.5 10.5 15v6l4 5H14l4-5v-6c0-7.5 3.5-13 10.5-15v-2.5A3.5 3.5 0 0132 12z' stroke='url(%23g)' stroke-width='1.6'/%3E%3Cpath d='M27 49a5 5 0 0010 0' stroke='url(%23g)' stroke-width='1.5'/%3E%3C/svg%3E")}
.kpi-total::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23b9c3ff' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23d6c9fd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M32 13a19 19 0 0119 19v7' stroke='url(%23g)' stroke-width='1.7'/%3E%3Cpath d='M32 21a11 11 0 0111 11v9' stroke='url(%23g)' stroke-width='1.6' opacity='.7'/%3E%3Ccircle cx='32' cy='32' r='3.2' stroke='url(%23g)' stroke-width='1.6'/%3E%3C/svg%3E")}
.card-issue::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23b9c3ff' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23d6c9fd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M32 8c7 6 10.5 15 10.5 26l-5 6h-11l-5-6C21.5 23 25 14 32 8z' stroke='url(%23g)' stroke-width='1.7'/%3E%3Ccircle cx='32' cy='25' r='4' stroke='url(%23g)' stroke-width='1.5'/%3E%3Cpath d='M22 36l-8 9 9-1.5M42 36l8 9-9-1.5' stroke='url(%23g)' stroke-width='1.5' opacity='.7'/%3E%3C/svg%3E")}
.card-records::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23b9c3ff' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23d6c9fd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect x='13' y='15' width='38' height='36' rx='6' stroke='url(%23g)' stroke-width='1.7'/%3E%3Cpath d='M13 26h38M23 9v9M41 9v9' stroke='url(%23g)' stroke-width='1.5'/%3E%3Ccircle cx='24' cy='37' r='2' fill='%23b9c3ff' fill-opacity='.5'/%3E%3Ccircle cx='33' cy='37' r='2' fill='%23d6c9fd' fill-opacity='.4'/%3E%3C/svg%3E")}
.card-side-alert::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23fde19e' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23fef0c3' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M15 40a17 17 0 0134 0' stroke='url(%23g)' stroke-width='1.8'/%3E%3Cpath d='M9 46h46M20 52h24' stroke='url(%23g)' stroke-width='1.5' opacity='.7'/%3E%3Cpath d='M32 12v6M14 22l4.5 4.5M50 22l-4.5 4.5' stroke='url(%23g)' stroke-width='1.4' opacity='.6'/%3E%3C/svg%3E")}
.card-side-pay::after{content:none}
.card-side-rank::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23fde19e' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23fef0c3' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M20 10h24v10a12 12 0 01-24 0z' stroke='url(%23g)' stroke-width='1.7'/%3E%3Cpath d='M20 14h-8a8 8 0 008 8M44 14h8a8 8 0 01-8 8' stroke='url(%23g)' stroke-width='1.5' opacity='.7'/%3E%3Cpath d='M32 32v8' stroke='url(%23g)' stroke-width='1.6'/%3E%3Cpath d='M22 52h20l-3.5-8h-13z' stroke='url(%23g)' stroke-width='1.6'/%3E%3C/svg%3E")}
.card-pay::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23a7f3c9' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23c9f7dd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect x='10' y='18' width='44' height='30' rx='6' stroke='url(%23g)' stroke-width='1.7'/%3E%3Cpath d='M10 28h44' stroke='url(%23g)' stroke-width='1.5'/%3E%3Cpath d='M16 38h13' stroke='url(%23g)' stroke-width='1.5' opacity='.75'/%3E%3C/svg%3E")}
.card-licenses::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23b9c3ff' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23d6c9fd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect x='16' y='29' width='32' height='23' rx='6' stroke='url(%23g)' stroke-width='1.7'/%3E%3Cpath d='M22 29v-6a10 10 0 0120 0v6' stroke='url(%23g)' stroke-width='1.6'/%3E%3Ccircle cx='32' cy='38' r='2.8' stroke='url(%23g)' stroke-width='1.5'/%3E%3Cpath d='M32 41v4' stroke='url(%23g)' stroke-width='1.5'/%3E%3C/svg%3E")}
.card-coupons-create::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23b9c3ff' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23d6c9fd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect x='12' y='27' width='40' height='25' rx='4' stroke='url(%23g)' stroke-width='1.6'/%3E%3Cpath d='M12 36h40M32 27v25' stroke='url(%23g)' stroke-width='1.4' opacity='.7'/%3E%3Cpath d='M32 27c-7 0-11-3-9.5-6.5S32 17 32 27zm0 0c7 0 11-3 9.5-6.5S32 17 32 27z' stroke='url(%23g)' stroke-width='1.5'/%3E%3C/svg%3E")}
.card-coupons-list::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23b9c3ff' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23d6c9fd' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Ccircle cx='18' cy='21' r='5.5' stroke='url(%23g)' stroke-width='1.6'/%3E%3Ccircle cx='18' cy='43' r='5.5' stroke='url(%23g)' stroke-width='1.6'/%3E%3Cpath d='M22.5 24 52 47M22.5 40 52 17' stroke='url(%23g)' stroke-width='1.5' opacity='.7'/%3E%3C/svg%3E")}
.card-plans::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23fde19e' stop-opacity='.5'/%3E%3Cstop offset='1' stop-color='%23fef0c3' stop-opacity='.26'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M32 10v38M20 52h24M12 17h40' stroke='url(%23g)' stroke-width='1.6'/%3E%3Cpath d='M12 17l-6 13a8 8 0 0012 0zM52 17l6 13a8 8 0 01-12 0z' stroke='url(%23g)' stroke-width='1.5' opacity='.75'/%3E%3C/svg%3E")}

/* ── 按钮：渐变主按钮 + 高光扫过 + 悬浮抬升 + 按压缩放 ── */
.btn{
  position:relative;overflow:hidden;
  background:linear-gradient(135deg,var(--primary),var(--primary-2));color:#fff;
  border:none;padding:10px 18px;border-radius:10px;cursor:pointer;font-size:14px;font-weight:600;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18),0 8px 20px -8px rgba(124,140,255,.6);
  transition:transform .16s var(--ease),filter .16s var(--ease),box-shadow .16s var(--ease),background .16s var(--ease),border-color .16s var(--ease);
}
.btn::after{content:"";position:absolute;top:-20%;bottom:-20%;left:-72%;width:42%;pointer-events:none;
  background:linear-gradient(105deg,transparent,rgba(255,255,255,.26),transparent);transform:skewX(-20deg);
  transition:left .55s var(--ease)}
.btn:hover::after{left:136%}
.btn:hover{filter:brightness(1.08);transform:translateY(-1px);box-shadow:inset 0 1px 0 rgba(255,255,255,.18),0 12px 26px -8px rgba(124,140,255,.65)}
.btn:active{transform:translateY(0) scale(.97);filter:brightness(.98)}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none;filter:none;box-shadow:none}
.btn:disabled::after{display:none}
.btn-secondary{background:rgba(255,255,255,.04);color:var(--ink);border:1px solid var(--border-strong);box-shadow:none}
.btn-secondary::after{background:linear-gradient(105deg,transparent,rgba(255,255,255,.1),transparent)}
.btn-secondary:hover{background:rgba(255,255,255,.07);border-color:rgba(148,163,184,.38);transform:translateY(-1px);box-shadow:0 8px 18px -12px rgba(0,0,0,.7)}
.btn-secondary:active{transform:translateY(0) scale(.97)}
.btn-danger{background:linear-gradient(135deg,#fb7185,#ef4444);color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,.16),0 8px 20px -8px rgba(239,68,68,.55)}
.btn-sm{padding:6px 12px;font-size:12px;border-radius:8px}
.btn-icon{width:36px;height:36px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;flex-shrink:0}
.btn-icon svg{display:block}
.btn-icon.spin svg{animation:spin .55s var(--ease)}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── 表单 ── */
.input{
  width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:10px;font-size:14px;
  background:var(--card-deep);color:var(--ink);
  transition:border-color .16s var(--ease),box-shadow .16s var(--ease),background .16s var(--ease);
}
.input:hover{border-color:var(--border-strong)}
.input::placeholder{color:var(--faint)}
.input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--ring);background:#0c1120}
select.input{
  width:auto;
  appearance:none;-webkit-appearance:none;-moz-appearance:none;
  padding-right:34px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238b94b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 12px center;background-size:14px;
}
/* 聚焦态：必须完整声明全部背景长属性——.input:focus 的 background 简写会把 repeat 重置为平铺 */
select.input:focus{
  background-color:#0c1120;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23a5b4fc' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 12px center;
  background-size:14px;
}
/* 搜索框：去掉 WebKit 原生清除按钮与胶囊外观，避免与自绘图标叠加 */
input[type=search]::-webkit-search-cancel-button,
input[type=search]::-webkit-search-decoration,
input[type=search]::-webkit-search-results-button{-webkit-appearance:none;appearance:none}
input[type=search]{-webkit-appearance:none;appearance:none;border-radius:9px}
label{display:block;font-size:12px;color:var(--mut);margin-bottom:5px;letter-spacing:.02em}
.form-row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;margin-bottom:14px}
.form-row>div{flex:1;min-width:150px}
.form-row>div.narrow{flex:0 0 170px;min-width:0}

/* ── 表格 ── */
.table{width:100%;border-collapse:collapse}
.table th{text-align:left;font-size:11px;color:var(--faint);font-weight:600;padding:8px 10px;border-bottom:1px solid var(--border-strong);letter-spacing:.09em;text-transform:uppercase}
.table td{padding:11px 10px;border-bottom:1px solid rgba(148,163,184,.07);font-size:13px;vertical-align:top}
.table tbody tr{transition:background .15s var(--ease)}
.table tbody tr:hover td{background:rgba(124,140,255,.05)}
.table tr:last-child td{border-bottom:none}
.table code{font-size:12px;color:#c6cfec;background:rgba(255,255,255,.05);padding:2px 7px;border-radius:6px;border:1px solid rgba(255,255,255,.05)}
.table-scroll{overflow-x:auto;overscroll-behavior-inline:contain;padding-bottom:2px}
/* 行入场编排（配合 .wb-table 等短表使用，长表不加） */
.stagger-rows tbody tr{animation:row-in .4s var(--ease) both}
.stagger-rows tbody tr:nth-child(1){animation-delay:.08s}
.stagger-rows tbody tr:nth-child(2){animation-delay:.12s}
.stagger-rows tbody tr:nth-child(3){animation-delay:.16s}
.stagger-rows tbody tr:nth-child(4){animation-delay:.2s}
.stagger-rows tbody tr:nth-child(5){animation-delay:.24s}
.stagger-rows tbody tr:nth-child(6){animation-delay:.28s}
.stagger-rows tbody tr:nth-child(7){animation-delay:.32s}
.stagger-rows tbody tr:nth-child(8){animation-delay:.36s}
.stagger-rows tbody tr:nth-child(9){animation-delay:.4s}
.stagger-rows tbody tr:nth-child(10){animation-delay:.44s}
@keyframes row-in{from{opacity:0;transform:translateY(7px)}}

/* ── 徽标：状态点 + 染色描边（.badge-pulse 呼吸提醒） ── */
.badge{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:500;background:rgba(255,255,255,.05);color:var(--mut);border:1px solid var(--border)}
.badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}
.badge-green{background:rgba(52,211,153,.1);color:var(--ok);border-color:rgba(52,211,153,.28)}
.badge-amber{background:rgba(251,191,36,.1);color:var(--warn);border-color:rgba(251,191,36,.28)}
.badge-red{background:rgba(251,113,133,.1);color:var(--err);border-color:rgba(251,113,133,.28)}
.badge-gray{background:rgba(255,255,255,.05);color:var(--mut)}
.badge-pulse::before{animation:pulse 1.5s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}

.page-title{font-size:21px;font-weight:700;letter-spacing:-.01em;margin-bottom:16px}
.muted{color:var(--mut);font-size:13px}

/* ── 反馈条：状态点 + 入场动画 ── */
.msg{display:flex;gap:9px;align-items:flex-start;padding:11px 14px;border-radius:10px;margin:10px 0;font-size:13px;border:1px solid var(--border);animation:fade-up .3s var(--ease)}
.msg::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex-shrink:0;margin-top:6px;box-shadow:0 0 10px currentColor}
.msg-ok{background:rgba(52,211,153,.08);color:var(--ok);border-color:rgba(52,211,153,.25)}
.msg-err{background:rgba(251,113,133,.08);color:var(--err);border-color:rgba(251,113,133,.25)}
.msg-warn{background:rgba(251,191,36,.08);color:var(--warn);border-color:rgba(251,191,36,.25)}

/* ── 模态：毛玻璃遮罩 + 弹性入场（ESC / 点遮罩关闭） ── */
.modal-mask{position:fixed;inset:0;z-index:80;background:rgba(3,5,10,.62);backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);display:grid;place-items:center;padding:22px;animation:mask-in .2s var(--ease)}
.modal-mask.out{animation:mask-out .18s ease forwards}
.modal{width:min(100%,470px);background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,0) 46%),#10162a;border:1px solid var(--border-strong);border-radius:18px;overflow:hidden;box-shadow:0 30px 90px -30px rgba(0,0,0,.85),inset 0 1px 0 rgba(255,255,255,.06);animation:pop-in .34s var(--ease-spring)}
.modal-mask.out .modal{animation:pop-out .18s ease forwards}
.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:18px 20px 0}
.modal-body{padding:16px 20px}
.modal-foot{display:flex;justify-content:flex-end;gap:9px;padding:2px 20px 20px}
.modal-sub{font-size:12.5px;color:var(--mut);margin-top:4px}
.modal-kv{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px dashed var(--border);font-size:13px}
.modal-kv:last-of-type{border-bottom:none}
.modal-kv b{font-variant-numeric:tabular-nums;font-weight:600}
.code-block{background:#080b15;border:1px solid var(--border);border-radius:10px;padding:12px;font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-size:12px;line-height:1.65;word-break:break-all;max-height:132px;overflow:auto;color:#c9d3f5;user-select:all}
@keyframes mask-in{from{opacity:0}}
@keyframes mask-out{to{opacity:0}}
@keyframes pop-in{from{opacity:0;transform:translateY(14px) scale(.95)}}
@keyframes pop-out{to{opacity:0;transform:translateY(8px) scale(.97)}}

/* ── 骨架屏：加载占位 + 微光扫过 ── */
.skel{position:relative;overflow:hidden;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,0) 40%),var(--card);border:1px solid var(--border);border-radius:16px}
.skel::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(148,163,184,.07),transparent);animation:shimmer 1.5s infinite}
@keyframes shimmer{to{transform:translateX(100%)}}
.skel-strip{height:88px}
.skel-grid{display:grid;grid-template-columns:1.55fr 1fr;gap:14px;margin-top:14px}
.skel-card{height:250px}
.skel-card.tall{height:360px}

/* ── 通用入场 ── */
@keyframes fade-up{from{opacity:0;transform:translateY(10px)}}
@keyframes fade-in{from{opacity:0}}
@keyframes shake{10%,90%{transform:translateX(-1px)}20%,80%{transform:translateX(2px)}30%,50%,70%{transform:translateX(-3px)}40%,60%{transform:translateX(3px)}}

/* ── 已停用客户入口：保持安全提示的可读性与留白 ── */
.gate-wrap{min-height:100svh;display:grid;place-items:center;padding:clamp(20px,5vw,56px)}
.gate{width:min(100%,680px);padding:clamp(28px,6vw,48px);animation:fade-up .5s var(--ease)}
.gate-brand{display:flex;align-items:center;justify-content:center;gap:12px}
.gate-mark{width:38px;height:38px;display:grid;place-items:center;flex:0 0 auto;border-radius:11px;background:linear-gradient(135deg,var(--primary),var(--primary-2));color:#fff;font-weight:700;box-shadow:0 7px 18px -7px rgba(124,140,255,.7)}
.gate-brand h1{font-size:clamp(21px,4vw,27px);letter-spacing:-.02em}
.gate h2{margin:24px 0 10px;font-size:18px}
.gate-copy{max-width:54ch;margin:0 auto;line-height:1.85}
.gate-notice{max-width:54ch;margin:20px auto 0;text-align:left}

/* ── 布局栅格（历史契约保留）── */
.grid-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:16px}
.grid-2{display:grid;grid-template-columns:1.5fr 1fr;gap:14px;margin-bottom:16px}
@media(max-width:800px){.grid-2{grid-template-columns:1fr}}
@media(max-width:640px){
  .gate-wrap{align-items:start;padding:20px 16px}
  .gate{padding:28px 20px}
  .gate-brand{align-items:flex-start;text-align:left}
  .gate-brand h1{padding-top:3px}
  .gate-notice{text-align:center}
  .table-scroll .table{min-width:600px}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none!important;animation:none!important}
}
