
  :root{
    --primary:#6366f1; --primary-2:#8b5cf6; --primary-deep:#4c4fd8; --primary-soft:#eef0ff;
    --ok:#10b981; --warn:#f59e0b; --bad:#ef4444;
    --bg:#f4f6fb; --card:#ffffff; --border:#e9ecf5; --border-2:#f1f3f9;
    --text:#131a2b; --text2:#7b8397; --text3:#a3aabd;
    --sidebar:#ffffff; --sidebar-line:#eef0f8;
    --radius:16px;
    --shadow-sm:0 1px 2px rgba(16,24,40,.05);
    --shadow:0 18px 40px -22px rgba(23,32,68,.35);
  }
  *{margin:0;padding:0;box-sizing:border-box}
  html,body{height:100%}
  body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
    background:var(--bg);color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased}
  ::selection{background:rgba(99,102,241,.22)}
  button{font-family:inherit;cursor:pointer}
  input,select,textarea{font-family:inherit}
  a{color:var(--primary);text-decoration:none}
  .hidden{display:none!important}
  .muted{color:var(--text2)}
  .mt16{margin-top:18px}
  code{font-family:ui-monospace,Consolas,"Courier New",monospace;background:#f3f5fb;padding:2px 7px;border-radius:6px;font-size:12px;color:#4b5265}
  svg{display:block}
  /* ================= 登录页 ================= */
  #page-login{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:24px;
    background:radial-gradient(1100px 560px at 10% 0%,#eef1ff 0%,transparent 60%),
               radial-gradient(900px 520px at 90% 100%,#f4efff 0%,transparent 58%),#f7f9fd}
  .login-wrap{display:grid;grid-template-columns:1.02fr 1fr;width:960px;max-width:100%;
    background:#fff;border-radius:26px;overflow:hidden;min-height:576px;
    box-shadow:0 40px 90px -46px rgba(58,70,130,.45)}
  .login-aside{position:relative;overflow:hidden;padding:46px 44px;display:flex;flex-direction:column;
    background:linear-gradient(160deg,#f3f5ff 0%,#edf0ff 48%,#f8f2ff 100%);
    border-right:1px solid #e8ecf8;color:var(--text)}
  .login-aside::before{content:"";position:absolute;width:420px;height:420px;border-radius:50%;
    right:-170px;top:-190px;background:radial-gradient(circle,rgba(139,92,246,.20),transparent 66%)}
  .login-aside::after{content:"";position:absolute;width:360px;height:360px;border-radius:50%;
    left:-150px;bottom:-170px;background:radial-gradient(circle,rgba(56,189,248,.16),transparent 66%)}
  .login-aside>*{position:relative;z-index:1}
  .login-brand{display:flex;align-items:center;gap:12px}
  .login-brand .mark{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;
    background:linear-gradient(135deg,#6366f1,#a855f7);font-weight:800;font-size:20px;color:#fff;
    box-shadow:0 10px 28px -8px rgba(124,92,246,.9)}
  .login-brand .bt{font-size:16px;font-weight:700;letter-spacing:.2px}
  .login-brand .bs{font-size:11px;color:#7b8397;margin-top:2px}
  .login-hero{margin-top:54px}
  .login-hero .eyebrow{font-size:11px;letter-spacing:.22em;color:#5f63d8;font-weight:700}
  .login-hero h2{font-size:30px;line-height:1.35;margin-top:12px;font-weight:700;letter-spacing:.2px}
  .login-hero h2 em{font-style:normal;background:linear-gradient(100deg,#4f46e5,#0ea5e9);-webkit-background-clip:text;background-clip:text;color:transparent}
  .login-hero p{margin-top:14px;color:#6b7390;font-size:13.5px;line-height:1.9;max-width:330px}
  .login-features{margin-top:auto;display:flex;flex-direction:column;gap:14px;padding-top:46px}
  .login-feature{display:flex;gap:12px;align-items:flex-start;font-size:13px;color:#5d657e}
  .login-feature .fi{width:30px;height:30px;border-radius:9px;flex-shrink:0;display:grid;place-items:center;
    background:#fff;border:1px solid #e3e7f6;color:#6366f1;box-shadow:0 4px 12px -8px rgba(99,102,241,.7)}
  .login-feature b{display:block;color:var(--text);font-size:13.5px;margin-bottom:3px;font-weight:600}
  .login-feature span{color:#7b8397;font-size:12px}
  .login-form{padding:48px 46px;display:flex;flex-direction:column;justify-content:center;background:#fff}
  .login-form .logo-row{display:flex;align-items:center;gap:10px;margin-bottom:6px}
  .login-form .logo-row .mark{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;
    background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;font-weight:800;font-size:18px}
  .login-form h1{font-size:21px;letter-spacing:.3px}
  .login-form .sub{color:var(--text2);font-size:12.5px;margin:6px 0 26px;line-height:1.7}
  .field{margin-bottom:16px}
  .field label{display:block;font-size:12px;color:var(--text2);margin-bottom:7px;font-weight:500}
  .field .box{position:relative}
  .field .box .ic{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#a3aabd}
  .field input{width:100%;padding:11px 13px 11px 38px;border:1.5px solid var(--border);border-radius:11px;
    font-size:13.5px;background:#fafbfe;outline:none;transition:.18s;color:var(--text)}
  .field input:focus{border-color:var(--primary);background:#fff;box-shadow:0 0 0 4px rgba(99,102,241,.12)}
  .btn-login{width:100%;padding:12px;border:none;border-radius:11px;font-size:14.5px;font-weight:600;color:#fff;
    background:linear-gradient(135deg,#5b5ef0,#8b5cf6);margin-top:8px;
    box-shadow:0 14px 26px -14px rgba(99,102,241,.95);transition:.18s}
  .btn-login:hover{transform:translateY(-1px);filter:brightness(1.05)}
  .login-foot{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--text2);margin-top:18px}
  .login-foot .link{color:var(--primary);cursor:pointer;font-weight:500}
  .demo-tip{margin-top:24px;padding:12px 14px;border-radius:11px;background:#f5f6ff;border:1px solid #e4e5ff;
    font-size:12px;color:#5b5fc4;line-height:1.75}
  .demo-tip b{color:#4346b8}

  /* ================= 主框架 ================= */
  #app-main{display:flex;height:100vh;overflow:hidden}
  .sidebar{width:246px;flex-shrink:0;display:flex;flex-direction:column;
    background:#fff;border-right:1px solid var(--border);padding:20px 14px 16px}
  .brand{display:flex;align-items:center;gap:11px;padding:2px 8px 22px}
  .brand-badge{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;color:#fff;
    font-weight:800;font-size:17px;background:linear-gradient(135deg,#6366f1,#a855f7);
    box-shadow:0 10px 22px -10px rgba(124,92,246,.95)}
  .brand-name{color:var(--text);font-weight:700;font-size:15px;letter-spacing:.3px}
  .brand-sub{font-size:10.5px;color:#9aa2b6;letter-spacing:.12em;margin-top:2px}
  .nav-scroll{flex:1;overflow-y:auto;scrollbar-width:thin;padding-right:2px}
  .nav-scroll::-webkit-scrollbar{width:5px}
  .nav-scroll::-webkit-scrollbar-thumb{background:#dfe3ee;border-radius:4px}
  .nav-group-title{font-size:10.5px;letter-spacing:.16em;color:#9aa1b4;font-weight:700;
    padding:16px 10px 8px;text-transform:uppercase}
  .nav-item{display:flex;align-items:center;gap:10px;padding:9.5px 10px;border-radius:10px;
    color:#5f6779;font-size:13.5px;cursor:pointer;position:relative;margin-bottom:2px;
    transition:background .16s,color .16s;border:1px solid transparent}
  .nav-item:hover{background:#f5f7fd;color:var(--text)}
  .nav-item .ico{width:18px;height:18px;display:grid;place-items:center;color:#949cb1;transition:.16s}
  .nav-item:hover .ico{color:var(--primary)}
  .nav-item.active{background:linear-gradient(90deg,#eeeefe,#f7f2ff);
    border-color:#e2e3ff;color:var(--primary-deep);font-weight:600}
  .nav-item.active .ico{color:var(--primary)}
  .nav-item.active::before{content:"";position:absolute;left:-14px;top:50%;transform:translateY(-50%);
    width:3px;height:20px;border-radius:0 4px 4px 0;background:linear-gradient(#6366f1,#8b5cf6)}

  .main{flex:1;display:flex;flex-direction:column;min-width:0}
  .topbar{height:64px;flex-shrink:0;display:flex;align-items:center;gap:18px;padding:0 28px;
    background:rgba(255,255,255,.86);backdrop-filter:blur(14px);border-bottom:1px solid var(--border)}
  .crumb{font-size:15px;font-weight:700;letter-spacing:.2px;min-width:96px}
  .search{flex:1;max-width:440px;position:relative}
  .search .ic{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#a3aabd}
  .search input{width:100%;padding:9px 14px 9px 37px;border:1.5px solid transparent;border-radius:10px;
    background:#f2f4fa;font-size:13px;outline:none;transition:.18s;color:var(--text)}
  .search input:focus{background:#fff;border-color:#d9dcff;box-shadow:0 0 0 4px rgba(99,102,241,.08)}
  .topbar-right{display:flex;align-items:center;gap:12px;margin-left:auto}
  .plan-badge{display:flex;align-items:center;gap:8px;padding:7px 13px;border-radius:11px;
    background:linear-gradient(135deg,#f0f1ff,#f7f2ff);border:1px solid #e2e3ff;
    font-size:12px;font-weight:600;color:#4d50c4}
  .plan-badge .exp{color:#9095b0;font-weight:400;font-size:11.5px}
  .icon-btn{width:36px;height:36px;border-radius:10px;border:1px solid var(--border);background:#fff;
    display:grid;place-items:center;color:#69718a;position:relative;transition:.16s}
  .icon-btn:hover{background:#f7f8fd;color:var(--primary)}
  .icon-btn .dot{position:absolute;top:8px;right:9px;width:6px;height:6px;border-radius:50%;
    background:var(--bad);box-shadow:0 0 0 2px #fff}
  .avatar{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;cursor:pointer;
    color:#fff;font-size:14px;font-weight:700;background:linear-gradient(135deg,#6366f1,#8b5cf6);
    box-shadow:0 6px 16px -8px rgba(99,102,241,.9);transition:.16s}
  .avatar:hover{transform:translateY(-1px)}
  .content{flex:1;overflow-y:auto;padding:26px 30px 44px;
    background:radial-gradient(1200px 380px at 100% 0%,#f6f4ff 0%,transparent 55%),var(--bg);
    animation:pageIn .28s ease}
  @keyframes pageIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

  /* ================= 通用组件 ================= */
  .page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}
  .page-head h1{font-size:22px;font-weight:700;letter-spacing:.2px}
  .page-head p{color:var(--text2);font-size:12.8px;margin-top:6px;line-height:1.7}
  .head-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
  .hero{position:relative;overflow:hidden;border-radius:20px;padding:28px 30px;margin-bottom:18px;color:#fff;
    background:linear-gradient(120deg,#4f46e5 0%,#6366f1 42%,#8b5cf6 100%);
    box-shadow:0 26px 50px -28px rgba(79,70,229,.75)}
  .hero::after{content:"";position:absolute;width:340px;height:340px;border-radius:50%;right:-90px;top:-140px;
    background:radial-gradient(circle,rgba(255,255,255,.30),transparent 65%)}
  .hero::before{content:"";position:absolute;width:260px;height:260px;border-radius:50%;right:110px;bottom:-190px;
    background:radial-gradient(circle,rgba(103,232,249,.28),transparent 65%)}
  .hero-content{position:relative;z-index:1;max-width:620px}
  .hero-eyebrow{font-size:10.5px;letter-spacing:.22em;font-weight:700;color:#c7d2fe}
  .hero h2{font-size:23px;font-weight:700;margin-top:9px;letter-spacing:.3px}
  .hero p{font-size:13px;color:#d8d9ff;margin-top:9px;line-height:1.8}
  .hero-actions{display:flex;gap:10px;margin-top:20px;flex-wrap:wrap}
  .hero-orbit{position:absolute;right:34px;top:50%;transform:translateY(-50%);z-index:1;opacity:.85}
  .hero-orbit .ring{width:118px;height:118px;border-radius:50%;display:grid;place-items:center;
    background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.22);
    box-shadow:0 0 0 18px rgba(255,255,255,.055),0 0 0 38px rgba(255,255,255,.03)}
  .hero-orbit .ring svg{color:#fff;opacity:.92}

  .grid-main{display:grid;grid-template-columns:1.55fr 1fr;gap:18px}
  .grid-2{display:grid;grid-template-columns:1fr 1fr;gap:18px}
  .grid-3{display:grid;grid-template-columns:1.6fr 1fr;gap:18px}

  .stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:18px}
  .stat-card{position:relative;background:var(--card);border:1px solid var(--border);border-radius:16px;
    padding:18px 18px 16px;box-shadow:var(--shadow-sm);transition:.18s}
  .stat-card:hover{transform:translateY(-2px);box-shadow:0 18px 36px -24px rgba(23,32,68,.4)}
  .stat-card .chip{position:absolute;right:16px;top:16px;width:36px;height:36px;border-radius:11px;
    display:grid;place-items:center;background:var(--primary-soft);color:var(--primary)}
  .stat-card.green .chip{background:#e8f8f1;color:#0f9b6c}
  .stat-card.orange .chip{background:#fff4e3;color:#d97706}
  .stat-card.red .chip{background:#fdecec;color:#dc2626}
  .stat-label{font-size:12px;color:var(--text2);font-weight:500}
  .stat-num{font-size:27px;font-weight:700;margin:6px 0 4px;letter-spacing:.4px}
  .stat-sub{font-size:11.5px;color:var(--text3)}

  .card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
    padding:18px 20px;box-shadow:var(--shadow-sm)}
  .card h3{font-size:14px;font-weight:700;display:flex;align-items:center;justify-content:space-between;
    gap:10px;margin-bottom:14px}
  .more{font-size:12px;color:var(--primary);font-weight:500;cursor:pointer}
  .more:hover{text-decoration:underline}

  .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:9px;
    padding:9px 16px;font-size:12.8px;font-weight:600;transition:.16s;white-space:nowrap}
  .btn-primary-solid{background:linear-gradient(135deg,#5b5ef0,#8b5cf6);color:#fff;
    box-shadow:0 12px 24px -14px rgba(99,102,241,.95)}
  .btn-primary-solid:hover{transform:translateY(-1px);filter:brightness(1.06)}
  .btn-ghost{background:#fff;border:1px solid var(--border);color:var(--text)}
  .btn-ghost:hover{background:#f8f9fe;border-color:#dcdff0}
  .btn-line{background:var(--primary-soft);border:1px solid #dcdcff;color:var(--primary-deep)}
  .btn-line:hover{background:#e5e7ff}
  .btn-white{background:#fff;color:#4e51cf;box-shadow:0 10px 22px -12px rgba(0,0,0,.4)}
  .btn-white:hover{transform:translateY(-1px)}
  .btn-glass{background:rgba(255,255,255,.14);color:#fff;border:1px solid rgba(255,255,255,.26)}
  .btn-glass:hover{background:rgba(255,255,255,.22)}
  .btn-sm{padding:6px 12px;font-size:12px;border-radius:8px}

  .seg{display:inline-flex;background:#f1f3fa;border-radius:10px;padding:3px;gap:2px}
  .seg-btn{border:none;background:transparent;padding:6px 13px;font-size:12.3px;border-radius:8px;
    color:var(--text2);font-weight:600;transition:.16s}
  .seg-btn.active{background:#fff;color:var(--primary-deep);box-shadow:var(--shadow-sm)}

  .form-row{display:flex;gap:14px;margin-bottom:14px;align-items:flex-end;flex-wrap:wrap}
  .form-field{flex:1;min-width:170px}
  .form-field label{display:block;font-size:11.5px;color:var(--text2);margin-bottom:6px;font-weight:500}
  .form-field input,.form-field select,.form-field textarea{width:100%;padding:9px 12px;border:1.5px solid var(--border);
    border-radius:9px;font-size:13px;background:#fafbfe;outline:none;transition:.16s;color:var(--text)}
  .form-field textarea{resize:vertical;line-height:1.7}
  .form-field input:focus,.form-field select:focus,.form-field textarea:focus{border-color:#c9caff;background:#fff;
    box-shadow:0 0 0 4px rgba(99,102,241,.08)}
  .toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
  .toolbar .spacer{flex:1}

  table{width:100%;border-collapse:separate;border-spacing:0}
  th{font-size:11.5px;color:var(--text2);text-align:left;padding:10px 12px;font-weight:600;
    background:#f7f8fc;border-bottom:1px solid var(--border);white-space:nowrap}
  th:first-child{border-radius:9px 0 0 9px}
  th:last-child{border-radius:0 9px 9px 0}
  td{padding:12px;font-size:12.8px;border-bottom:1px solid var(--border-2);vertical-align:middle}
  tbody tr{transition:background .14s}
  tbody tr:hover{background:#fafbff}
  tbody tr:last-child td{border-bottom:none}
  .table-card{padding:16px 18px 10px}
  /* 应用管理：每平台一行 */
  .mkt-line{display:flex;align-items:center;gap:7px;padding:3px 0;border-bottom:1px dashed #f0f1f7}
  .mkt-line:last-child{border-bottom:none}
  .mkt-line .mkt-ver{font-size:11px;color:var(--text2)}
  /* 分页条 */
  .pager{display:flex;align-items:center;gap:6px;justify-content:flex-end;padding:12px 2px 2px;flex-wrap:wrap}
  .pager .pg-info{font-size:11.5px;color:var(--text2);margin-right:6px}
  .pg-btn{min-width:28px;height:28px;padding:0 8px;border:1px solid var(--border);background:#fff;border-radius:8px;
    font-size:12.3px;color:var(--text);cursor:pointer}
  .pg-btn:hover:not(:disabled){border-color:#c9cdf5;color:var(--primary-deep)}
  .pg-btn.active{background:var(--primary-soft);border-color:#dcdcff;color:var(--primary-deep);font-weight:600}
  .pg-btn:disabled{opacity:.4;cursor:default}

  .status{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;
    font-size:11.5px;font-weight:600;white-space:nowrap}
  .status::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;flex-shrink:0}
  .st-run{background:#eef0ff;color:#5254d8}
  .st-ok{background:#e6f8f1;color:#0d9b6c}
  .st-wait{background:#fff5e6;color:#cf7a06}
  .st-bad{background:#fdecec;color:#dc2626}
  .st-removed{background:#f1f3f9;color:#8e93a6}
  .st-draft{background:#f4f5f7;color:#9aa0b0}
  .st-done{background:#f1f3f9;color:#7b8397}
  .st-fail{background:#fdecec;color:#dc2626}
  .progress-mini{width:96px;height:6px;background:#eef1f8;border-radius:4px;overflow:hidden;
    display:inline-block;vertical-align:middle;margin-left:8px}
  .progress-mini i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,#6366f1,#8b5cf6);
    transition:width .35s}

  .quick-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
  .quick-item{display:flex;align-items:center;gap:11px;border:1px solid var(--border);border-radius:12px;
    padding:12px;cursor:pointer;transition:.16s;background:#fff}
  .quick-item:hover{border-color:#cfd1ff;background:#fbfbff;transform:translateY(-1px);
    box-shadow:0 12px 24px -20px rgba(79,70,229,.7)}
  .quick-item .qi{width:34px;height:34px;border-radius:10px;flex-shrink:0;display:grid;place-items:center;
    background:var(--primary-soft);color:var(--primary)}
  .quick-item .qn{font-size:12.8px;font-weight:600}
  .quick-item .qd{font-size:11px;color:var(--text3);margin-top:3px}

  .todo-item{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px dashed var(--border)}
  .todo-item:last-child{border-bottom:none}
  .todo-item .dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
  .todo-item .txt{flex:1;font-size:12.6px;line-height:1.6}
  .todo-item .go{color:var(--primary);font-size:12px;cursor:pointer;font-weight:500;white-space:nowrap}
  .todo-item .go:hover{text-decoration:underline}
  .task-item{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px dashed var(--border)}
  .task-item:last-child{border-bottom:none}
  .task-item .txt{flex:1;font-size:12.6px}

  .market-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:12px}
  .market-cell{position:relative;border:1.5px solid var(--border);border-radius:14px;padding:15px 10px 13px;
    text-align:center;background:#fff;cursor:pointer;transition:.18s}
  .market-cell:hover{transform:translateY(-2px);border-color:#cfd1ff;box-shadow:0 16px 30px -24px rgba(79,70,229,.8)}
  .market-cell.sel{border-color:var(--primary);background:linear-gradient(180deg,#f8f8ff,#fff);
    box-shadow:0 0 0 3px rgba(99,102,241,.13)}
  .market-cell .mi{display:flex;justify-content:center}
  .market-cell .mn{font-size:12.2px;margin-top:8px;font-weight:500}
  .market-cell .ms{font-size:10.5px;color:var(--text3);margin-top:3px;letter-spacing:.05em}
  .market-cell.lock{opacity:.52;cursor:not-allowed}
  .market-cell.lock:hover{transform:none;box-shadow:none;border-color:var(--border)}
  .lock-tag{position:absolute;top:-8px;right:-6px;background:#f59e0b;color:#fff;font-size:9.5px;
    padding:2px 7px;border-radius:8px;font-weight:600;box-shadow:0 4px 10px -4px rgba(245,158,11,.9)}

  .tabbar{display:flex;gap:6px;flex-wrap:wrap;border-bottom:1px solid var(--border);
    padding-bottom:14px;margin-bottom:16px}
  .tab{border:1px solid transparent;background:transparent;padding:7px 14px;border-radius:9px;
    font-size:12.3px;font-weight:600;color:var(--text2);transition:.16s}
  .tab:hover{background:#f5f6fc;color:var(--text)}
  .tab.active{background:var(--primary-soft);color:var(--primary-deep);border-color:#dcdcff}

  .empty{text-align:center;padding:60px 0}
  .empty .eic{width:64px;height:64px;border-radius:20px;margin:0 auto 14px;display:grid;place-items:center;
    background:var(--primary-soft);color:var(--primary)}
  .empty .et{font-size:14px;font-weight:600}
  .empty .es{font-size:12.3px;color:var(--text2);margin-top:6px}

  .notice{display:none;padding:10px 13px;background:#fff8e8;border:1px solid #fde3ab;border-radius:10px;
    font-size:12.3px;color:#a35a05;margin-bottom:12px;line-height:1.6}
  .tipbox{font-size:12px;line-height:1.8;color:var(--text2);background:#f7f8fd;border:1px solid var(--border-2);
    padding:12px 14px;border-radius:10px}

  /* ================= 弹窗 ================= */
  .mask{position:fixed;inset:0;z-index:200;background:rgba(46,54,86,.22);backdrop-filter:blur(4px);
    display:flex;align-items:center;justify-content:center;padding:20px;animation:maskIn .18s ease}
  @keyframes maskIn{from{opacity:0}to{opacity:1}}
  .modal{width:520px;max-width:100%;max-height:92vh;overflow-y:auto;background:#fff;border-radius:20px;
    padding:24px;box-shadow:0 40px 100px -30px rgba(0,0,0,.6);animation:modalIn .24s cubic-bezier(.2,.8,.3,1)}
  @keyframes modalIn{from{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:none}}
  .modal-head{display:flex;gap:12px;align-items:flex-start;margin-bottom:18px;position:relative}
  .modal-ico{width:42px;height:42px;border-radius:13px;flex-shrink:0;display:grid;place-items:center;
    background:linear-gradient(135deg,#eef0ff,#f4edff);color:var(--primary)}
  .modal h2{font-size:17px;font-weight:700}
  .modal .sub{color:var(--text2);font-size:12.5px;margin-top:5px;line-height:1.7}
  .modal-x{position:absolute;right:0;top:0;width:30px;height:30px;border-radius:8px;border:none;
    background:#f4f5fa;color:var(--text2);font-size:17px;line-height:1;display:grid;place-items:center}
  .modal-x:hover{background:#eceef6;color:var(--text)}
  .modal-btns{display:flex;gap:10px;justify-content:flex-end;margin-top:18px}
  .guide-steps{display:flex;flex-direction:column;gap:11px;margin-bottom:6px}
  .guide-step{display:flex;gap:12px;padding:13px;border:1px solid var(--border);border-radius:12px;
    align-items:flex-start;background:#fcfcff;transition:.16s}
  .guide-step:hover{border-color:#dcdcff;background:#fbfbff}
  .guide-step .gn{width:30px;height:30px;border-radius:10px;flex-shrink:0;display:grid;place-items:center;
    background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;font-weight:700;font-size:13px}
  .guide-step .gtitle{font-size:13px;font-weight:600}
  .guide-step .gdesc{font-size:11.8px;color:var(--text2);margin-top:3px;line-height:1.6}
  .mod-list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto;padding-right:2px}
  .mod-item{display:flex;align-items:center;gap:11px;padding:11px 13px;border:1.5px solid var(--border);
    border-radius:12px;font-size:13px;cursor:pointer;transition:.15s}
  .mod-item:hover{border-color:#dcdcff;background:#fbfbff}
  .mod-item.sel{border-color:var(--primary);background:linear-gradient(90deg,#f6f6ff,#fbfaff)}
  .mod-item .mi{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;
    background:var(--primary-soft);color:var(--primary);flex-shrink:0}
  .mod-item .mname{font-size:12.8px;font-weight:600}
  .mod-item .mgroup{font-size:10.5px;color:var(--text3);margin-top:2px}
  .mod-item .mod-price{margin-left:auto;color:var(--primary-deep);font-weight:700;font-size:12.5px;white-space:nowrap}
  .mod-item input{display:none}
  .mod-check{width:18px;height:18px;border-radius:6px;border:1.5px solid #d7daea;flex-shrink:0;
    display:grid;place-items:center;color:#fff;transition:.15s}
  .mod-item.sel .mod-check{background:var(--primary);border-color:var(--primary)}
  .calc-line{display:flex;justify-content:space-between;align-items:center;padding:14px 2px 0;margin-top:12px;
    font-size:13px;border-top:1px solid var(--border)}
  .calc-line .total{font-size:21px;font-weight:700;color:var(--primary-deep)}

  /* 用户菜单 */
  #user-menu{position:fixed;right:20px;top:72px;z-index:150;min-width:180px;background:#fff;border-radius:14px;
    border:1px solid var(--border);box-shadow:0 24px 50px -20px rgba(23,32,68,.4);padding:8px;
    animation:modalIn .18s ease}
  #user-menu .um-head{padding:9px 10px 10px;border-bottom:1px solid var(--border-2);margin-bottom:6px}
  #user-menu .um-head b{font-size:12.8px}
  #user-menu .um-head div{font-size:11.5px;color:var(--text2);margin-top:2px}
  #user-menu button{width:100%;justify-content:flex-start;margin-top:4px}

  /* Toast */
  #toast{position:fixed;left:50%;bottom:34px;transform:translate(-50%,16px);z-index:400;
    display:flex;align-items:center;gap:9px;padding:11px 18px;border-radius:12px;
    background:#fff;color:var(--text);font-size:12.8px;border:1px solid var(--border);
    box-shadow:0 22px 50px -22px rgba(23,32,68,.4);
    opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;max-width:90vw}
  #toast.show{opacity:1;transform:translate(-50%,0)}
  #toast .tdot{width:7px;height:7px;border-radius:50%;background:#34d399;flex-shrink:0}

  @media(max-width:1180px){.grid-main,.grid-2,.grid-3{grid-template-columns:1fr}
    .hero-orbit{display:none}}
  @media(max-width:900px){.sidebar{display:none}.content{padding:18px 16px 36px}
    .topbar{padding:0 16px}.search{display:none}
    .login-wrap{grid-template-columns:1fr;min-height:0;width:420px}.login-aside{display:none}
    .quick-grid{grid-template-columns:repeat(2,1fr)}}

  /* ===== 工具箱按钮统一尺寸：所有面板内按钮高度与内边距一致 ===== */
  .toolbox-wrap .btn{padding:8px 16px;font-size:12.8px;border-radius:9px;min-height:34px;box-sizing:border-box}
  .toolbox-wrap .btn-sm{padding:8px 16px;font-size:12.8px;border-radius:9px;min-height:34px;box-sizing:border-box}
