*{margin:0;padding:0;box-sizing:border-box}
:root{--primary:#0f172a;--accent:#3b82f6;--accent2:#06b6d4;--accent3:#8b5cf6;--bg:#020617;--card:#0f172a;--border:#1e293b;--text:#e2e8f0;--muted:#94a3b8;--white:#f8fafc;--green:#22c55e;--red:#ef4444;--yellow:#eab308;--orange:#f97316}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--text);line-height:1.6;overflow-x:hidden}
a{color:var(--accent);text-decoration:none;transition:color .2s}
a:hover{color:var(--accent2)}

/* ==================== Login ==================== */
.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg);position:relative;overflow:hidden}
.login-page::before{content:'';position:absolute;top:-40%;right:-30%;width:80%;height:80%;background:radial-gradient(circle,rgba(59,130,246,.06) 0%,transparent 60%);pointer-events:none}
.login-page::after{content:'';position:absolute;bottom:-40%;left:-30%;width:80%;height:80%;background:radial-gradient(circle,rgba(6,182,212,.05) 0%,transparent 60%);pointer-events:none}
.login-box{position:relative;z-index:1;width:420px;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:48px 40px}
.login-logo{text-align:center;margin-bottom:32px}
.login-logo .dot{width:12px;height:12px;background:var(--accent);border-radius:50%;display:inline-block;box-shadow:0 0 16px var(--accent);vertical-align:middle;margin-right:8px}
.login-logo span{font-size:1.3rem;font-weight:700;color:var(--white);vertical-align:middle}
.login-title{color:var(--white);font-size:1.4rem;font-weight:700;margin-bottom:8px}
.login-desc{color:var(--muted);font-size:.85rem;margin-bottom:32px}
.form-group{margin-bottom:20px}
.form-group label{display:block;color:var(--muted);font-size:.85rem;margin-bottom:6px}
.form-group input{width:100%;padding:12px 16px;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--white);font-size:.95rem;outline:none;transition:border-color .2s}
.form-group input:focus{border-color:var(--accent)}
.form-group input::placeholder{color:#475569}
.form-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}
.form-row label{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:.85rem;cursor:pointer}
.form-row a{font-size:.85rem}
.btn-login{width:100%;padding:13px;background:var(--accent);color:var(--white);border:none;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s}
.btn-login:hover{background:#2563eb;box-shadow:0 8px 24px rgba(59,130,246,.3)}
.login-footer{text-align:center;margin-top:24px;color:var(--muted);font-size:.8rem}
.login-footer a{font-size:.8rem}
.login-error{background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.3);color:var(--red);padding:10px 16px;border-radius:8px;font-size:.85rem;margin-bottom:20px;display:none}
.oauth-divider{display:flex;align-items:center;margin:24px 0 20px;color:var(--muted);font-size:.8rem}
.oauth-divider::before,.oauth-divider::after{content:'';flex:1;height:1px;background:var(--border)}
.oauth-divider span{padding:0 14px;white-space:nowrap}
.btn-qq{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px;background:rgba(255,165,0,.08);border:1px solid rgba(255,165,0,.2);border-radius:8px;color:#e8a020;font-size:.95rem;font-weight:600;text-decoration:none;transition:all .2s}
.btn-qq:hover{background:rgba(255,165,0,.15);border-color:rgba(255,165,0,.4);color:#e8a020}
.btn-qq img{width:22px;height:22px;border-radius:4px}
.reg-success{background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.3);color:var(--green);padding:12px 16px;border-radius:8px;font-size:.85rem;margin-bottom:20px;display:none;text-align:center}
.tab-panel{display:none}.tab-panel.active{display:block}

/* ==================== Dashboard Layout ==================== */
.dash{display:flex;min-height:100vh}
.dash-sidebar{width:240px;background:var(--card);border-right:1px solid var(--border);position:fixed;top:0;bottom:0;left:0;z-index:100;display:flex;flex-direction:column}
.sidebar-brand{padding:20px 24px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}
.sidebar-brand .dot{width:8px;height:8px;background:var(--accent);border-radius:50%;box-shadow:0 0 10px var(--accent)}
.sidebar-brand span{font-size:1.1rem;font-weight:700;color:var(--white)}
.sidebar-nav{flex:1;padding:16px 12px;overflow-y:auto}
.sidebar-nav a{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:8px;color:var(--muted);font-size:.9rem;margin-bottom:2px;transition:all .15s}
.sidebar-nav a:hover{background:rgba(59,130,246,.06);color:var(--text)}
.sidebar-nav a.active{background:rgba(59,130,246,.1);color:var(--accent)}
.sidebar-nav .nav-icon{width:20px;text-align:center;font-size:1rem}
.sidebar-nav .section-label{padding:16px 14px 6px;font-size:.7rem;color:#475569;text-transform:uppercase;letter-spacing:1px}
.sidebar-user{padding:16px 20px;border-top:1px solid var(--border);display:flex;align-items:center;gap:12px}
.sidebar-user .avatar{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,var(--accent),var(--accent3));display:flex;align-items:center;justify-content:center;font-size:.85rem;color:var(--white);font-weight:700}
.sidebar-user .user-info{flex:1;min-width:0}
.sidebar-user .user-name{color:var(--white);font-size:.85rem;font-weight:600}
.sidebar-user .user-role{color:var(--muted);font-size:.75rem}
.sidebar-user .logout{color:var(--muted);font-size:.8rem;padding:4px 8px;border-radius:4px}
.sidebar-user .logout:hover{color:var(--red);background:rgba(239,68,68,.1)}

.dash-main{margin-left:240px;flex:1;min-height:100vh}
.dash-topbar{height:56px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 28px;background:rgba(2,6,23,.6);backdrop-filter:blur(8px);position:sticky;top:0;z-index:50}
.dash-topbar h1{font-size:1.1rem;color:var(--white);font-weight:600}
.dash-topbar .top-actions{display:flex;align-items:center;gap:16px}
.dash-topbar .top-time{color:var(--muted);font-size:.8rem}
.dash-content{padding:28px}

/* ==================== Stat Cards ==================== */
.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:24px}
.stat-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:20px 24px}
.stat-card .stat-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.stat-card .stat-label{color:var(--muted);font-size:.8rem}
.stat-card .stat-icon{width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:1rem}
.stat-card .stat-value{font-size:1.6rem;font-weight:800;color:var(--white);margin-bottom:4px}
.stat-card .stat-change{font-size:.75rem}
.stat-card .stat-change.up{color:var(--green)}
.stat-card .stat-change.down{color:var(--red)}

/* ==================== Panel ==================== */
.panel{background:var(--card);border:1px solid var(--border);border-radius:12px;margin-bottom:24px}
.panel-head{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom:1px solid var(--border)}
.panel-head h2{font-size:1rem;color:var(--white);font-weight:600}
.panel-body{padding:20px 24px}
.panel-footer{padding:12px 24px;border-top:1px solid var(--border);text-align:center}
.panel-footer a{font-size:.85rem}

/* ==================== Table ==================== */
.data-table{width:100%;border-collapse:collapse;font-size:.85rem}
.data-table th{color:var(--muted);font-weight:600;padding:12px 16px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}
.data-table td{padding:12px 16px;border-bottom:1px solid var(--border);color:var(--text);white-space:nowrap}
.data-table tbody tr:last-child td{border-bottom:none}
.data-table tbody tr:hover{background:rgba(59,130,246,.03)}
.tag{display:inline-block;padding:2px 10px;border-radius:4px;font-size:.75rem;font-weight:600}
.tag-success{background:rgba(34,197,94,.12);color:var(--green)}
.tag-warning{background:rgba(234,179,8,.12);color:var(--yellow)}
.tag-danger{background:rgba(239,68,68,.12);color:var(--red)}
.tag-info{background:rgba(59,130,246,.12);color:var(--accent)}

/* ==================== Chart placeholder ==================== */
.chart-area{height:260px;background:linear-gradient(180deg,rgba(59,130,246,.04) 0%,transparent 100%);border-radius:8px;position:relative;overflow:hidden;display:flex;align-items:flex-end;gap:4px;padding:0 8px 0}
.chart-bar{flex:1;background:linear-gradient(180deg,var(--accent),rgba(59,130,246,.3));border-radius:4px 4px 0 0;min-width:12px;transition:height .5s}
.chart-bar:nth-child(even){background:linear-gradient(180deg,var(--accent2),rgba(6,182,212,.3))}
.chart-labels{display:flex;gap:4px;padding:8px 8px 0;font-size:.65rem;color:var(--muted)}
.chart-labels span{flex:1;text-align:center;min-width:12px}

/* ==================== Progress bar ==================== */
.progress-wrap{margin-bottom:14px}
.progress-head{display:flex;justify-content:space-between;margin-bottom:6px;font-size:.8rem}
.progress-head .name{color:var(--text)}
.progress-head .val{color:var(--muted)}
.progress-bar{height:6px;background:var(--border);border-radius:3px;overflow:hidden}
.progress-fill{height:100%;border-radius:3px;transition:width .6s}
.progress-fill.blue{background:var(--accent)}
.progress-fill.cyan{background:var(--accent2)}
.progress-fill.purple{background:var(--accent3)}
.progress-fill.green{background:var(--green)}
.progress-fill.yellow{background:var(--yellow)}
.progress-fill.pink{background:linear-gradient(135deg,#ec4899,#be185d)}

/* ==================== API Key display ==================== */
.api-key-box{display:flex;align-items:center;gap:12px;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px 16px;margin-bottom:12px}
.api-key-box code{flex:1;font-family:'SF Mono',Consolas,monospace;font-size:.85rem;color:var(--text);letter-spacing:.5px}
.btn-copy{padding:6px 14px;background:rgba(59,130,246,.1);color:var(--accent);border:1px solid var(--accent);border-radius:6px;font-size:.8rem;cursor:pointer;transition:all .2s}
.btn-copy:hover{background:var(--accent);color:var(--white)}
.btn-sm{padding:6px 14px;border-radius:6px;font-size:.8rem;font-weight:600;cursor:pointer;transition:all .2s;border:none}
.btn-sm-primary{background:var(--accent);color:var(--white)}
.btn-sm-primary:hover{background:#2563eb}
.btn-sm-outline{background:transparent;color:var(--muted);border:1px solid var(--border)}
.btn-sm-outline:hover{border-color:var(--accent);color:var(--accent)}

/* ==================== Two col layout ==================== */
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.two-col-3-1{display:grid;grid-template-columns:2fr 1fr;gap:24px}

/* ==================== Responsive ==================== */
@media(max-width:1024px){.two-col,.two-col-3-1{grid-template-columns:1fr}}
@media(max-width:768px){.stat-row{grid-template-columns:1fr 1fr}.pricing-grid{grid-template-columns:1fr}}

/* ==================== Pricing (inside dashboard) ==================== */
.section-header{text-align:center;margin-bottom:32px}
.section-header h2{font-size:1.3rem;font-weight:700;color:var(--white);margin-bottom:6px}
.section-header p{color:var(--muted);font-size:.9rem}
.pricing-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px}
.pricing-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:28px;position:relative;transition:all .3s}
.pricing-card:hover{border-color:var(--accent);box-shadow:0 8px 32px rgba(59,130,246,.08)}
.pricing-card.featured{border-color:var(--accent)}
.pricing-card.featured::before{content:'推荐';position:absolute;top:14px;right:14px;background:var(--accent);color:var(--white);font-size:.7rem;padding:3px 10px;border-radius:10px;font-weight:600}
.pricing-tag{display:inline-block;padding:3px 10px;background:rgba(59,130,246,.1);color:var(--accent);border-radius:5px;font-size:.75rem;font-weight:600;margin-bottom:12px}
.pricing-card h3{font-size:1.1rem;color:var(--white);margin-bottom:6px}
.pricing-card .desc{color:var(--muted);font-size:.82rem;margin-bottom:16px;min-height:20px}
.pricing-price{margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--border)}
.pricing-price .amount{font-size:1.6rem;font-weight:800;color:var(--white)}
.pricing-price .period{color:var(--muted);font-size:.85rem}
.pricing-features{list-style:none;margin-bottom:20px}
.pricing-features li{color:var(--muted);font-size:.82rem;padding:5px 0;display:flex;align-items:center;gap:8px}
.pricing-features li::before{content:'✓';color:var(--accent);font-weight:700;font-size:.75rem}
.pay-row{display:flex;gap:10px}
.pay-row .btn-pay,.pay-row .btn-pay-paypal{margin-top:0}
.btn-pay{width:100%;padding:11px;background:linear-gradient(135deg,#1677ff,#0958d9);color:var(--white);border:none;border-radius:8px;font-size:.85rem;font-weight:600;cursor:pointer;transition:all .2s;text-align:center;display:inline-flex;align-items:center;justify-content:center;gap:6px;text-decoration:none}
.btn-pay:hover{box-shadow:0 6px 20px rgba(22,119,255,.3)}
.btn-pay img{height:18px}
.btn-pay-paypal{width:100%;padding:11px;background:linear-gradient(135deg,#003087,#009cde);color:var(--white);border:none;border-radius:8px;font-size:.85rem;font-weight:600;cursor:pointer;transition:all .2s;text-align:center;display:inline-flex;align-items:center;justify-content:center;gap:6px;text-decoration:none}
.btn-pay-paypal:hover{box-shadow:0 6px 20px rgba(0,156,222,.3)}
.btn-pay-paypal img{height:18px}
