:root{
  --bg:#f6f4ef; --panel:#fff; --ink:#241d3a; --muted:#8a829e; --line:#e9e4da;
  --primary:#6d28d9; --primary-deep:#4c1d95; --accent:#fe2c55; --cyan:#25F4EE;
}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",system-ui,sans-serif;
  background:radial-gradient(820px 420px at 12% -6%,rgba(109,40,217,.10) 0%,transparent 58%),
    radial-gradient(700px 380px at 88% 4%,rgba(184,134,11,.10) 0%,transparent 55%),var(--bg);
  color:var(--ink);-webkit-font-smoothing:antialiased;min-height:100vh}
.hidden{display:none!important}
.brand{display:flex;align-items:center;gap:11px}
.brand .mark{width:38px;height:38px;border-radius:11px;background:linear-gradient(135deg,var(--primary-deep),var(--primary) 55%,var(--accent));
  display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;box-shadow:0 4px 14px rgba(109,40,217,.28)}
.brand .name{font-size:17px;font-weight:800;letter-spacing:.3px}
.brand .sub{font-size:11px;color:var(--muted);letter-spacing:1.5px;font-weight:600}
.btn-main{background:linear-gradient(135deg,#5b21b6,#7c3aed);color:#fff;border:none;border-radius:12px;
  padding:13px 26px;font-size:15px;font-weight:700;cursor:pointer;transition:transform .15s,box-shadow .18s;box-shadow:0 8px 22px rgba(109,40,217,.32)}
.btn-main:hover{transform:translateY(-1px);box-shadow:0 12px 28px rgba(109,40,217,.4)}
.ghost{background:#fff;color:var(--ink);border:1.5px solid var(--line);border-radius:10px;padding:9px 18px;font-size:13.5px;font-weight:600;cursor:pointer}
.ghost:hover{border-color:#c9bfae}

/* 登录 */
.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
.auth-card{background:var(--panel);border:1px solid var(--line);border-radius:22px;padding:34px 34px 24px;width:380px;box-shadow:0 20px 60px rgba(36,29,58,.10)}
.auth-card .brand{justify-content:center;margin-bottom:22px}
.tabs{display:flex;gap:8px;background:#f2eee6;border-radius:11px;padding:4px;margin-bottom:18px}
.tab{flex:1;background:transparent;border:none;padding:9px 0;border-radius:8px;font-size:14px;font-weight:700;color:var(--muted);cursor:pointer}
.tab.on{background:#fff;color:var(--ink);box-shadow:0 2px 8px rgba(36,29,58,.08)}
.form{display:flex;flex-direction:column;gap:14px}
.form label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600;color:var(--muted)}
.form input{background:#faf8f3;border:1.5px solid var(--line);border-radius:10px;padding:12px 14px;font-size:15px;color:var(--ink);outline:none}
.form input:focus{border-color:var(--primary)}
.hint{text-align:center;font-size:12px;color:var(--muted);margin-top:16px}

/* 顶栏 */
.topbar{max-width:980px;margin:0 auto;padding:20px 20px;display:flex;align-items:center;justify-content:space-between}
.topbar-right{display:flex;align-items:center;gap:14px}
.who{font-size:14px;font-weight:700}

/* 内容 */
.wrap{max-width:980px;margin:0 auto;padding:10px 20px 60px}
.hero h1{font-size:34px;line-height:1.3;font-weight:800}
.hero h1 b{background:linear-gradient(120deg,var(--primary-deep),var(--accent));-webkit-background-clip:text;background-clip:text;color:transparent}
.hero .sub{margin-top:10px;color:var(--muted);font-size:15px}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:24px;margin-top:26px}
.add-panel h2,.panel-head h2{font-size:17px;font-weight:800;margin-bottom:16px}
.panel-head{display:flex;align-items:baseline;justify-content:space-between}
.add-row{display:flex;gap:12px;align-items:stretch}
.add-row textarea{flex:1;background:#faf8f3;border:1.5px solid var(--line);border-radius:12px;padding:12px 14px;font-size:14px;color:var(--ink);resize:vertical;outline:none;font-family:inherit}
.add-row textarea:focus{border-color:var(--primary)}
.add-row .btn-main{white-space:nowrap}
.title-input{width:100%;margin-top:12px;background:#faf8f3;border:1.5px solid var(--line);border-radius:10px;padding:10px 14px;font-size:14px;color:var(--ink);outline:none}
.title-input:focus{border-color:var(--primary)}
.muted{color:var(--muted);font-size:12.5px}
#parseHint{margin-top:10px;min-height:16px}
.link-list{display:flex;flex-direction:column;gap:12px}
.link-item{border:1px solid var(--line);border-radius:14px;padding:16px 18px;transition:box-shadow .18s}
.link-item:hover{box-shadow:0 8px 24px rgba(36,29,58,.08)}
.link-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.link-title{font-weight:800;font-size:15px;display:flex;align-items:center;gap:8px}
.badge{font-size:11px;font-weight:700;padding:3px 9px;border-radius:999px}
.badge.on{background:#e7f9ef;color:#15803d}
.badge.off{background:#fde8e8;color:#b91c1c}
.link-url{font-size:12.5px;color:var(--muted);word-break:break-all;margin:6px 0 12px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.link-url b{color:var(--primary);font-weight:700}
.link-meta{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.stat{display:flex;align-items:baseline;gap:4px}
.stat b{font-size:18px;font-weight:800}
.stat span{font-size:12px;color:var(--muted)}
.ops{margin-left:auto;display:flex;gap:8px}
.ops button{background:#faf8f3;border:1px solid var(--line);border-radius:8px;padding:6px 11px;font-size:12.5px;font-weight:600;cursor:pointer;color:var(--ink)}
.ops button:hover{border-color:var(--primary);color:var(--primary-deep)}
.ops button.danger:hover{border-color:var(--accent);color:var(--accent)}
.empty{color:var(--muted);font-size:13px;text-align:center;padding:24px 0}
.toast{position:fixed;top:22px;left:50%;transform:translateX(-50%);background:#241d3a;color:#fff;padding:11px 20px;border-radius:10px;font-size:13.5px;z-index:99;opacity:0;transition:opacity .25s;pointer-events:none;box-shadow:0 10px 30px rgba(36,29,58,.35)}
.toast.show{opacity:1}
@media(max-width:640px){.hero h1{font-size:26px}.add-row{flex-direction:column}.ops{margin-left:0;margin-top:10px;flex-wrap:wrap}}

/* ---- 页签导航 ---- */
.tabs-row{display:flex;gap:8px;margin-top:26px;border-bottom:2px solid var(--line)}
.tablink{background:transparent;border:none;padding:11px 18px;font-size:14.5px;font-weight:700;color:var(--muted);cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px}
.tablink.on{color:var(--primary-deep);border-bottom-color:var(--primary)}
.tabpane{margin-top:22px}

/* ---- 邀请码 ---- */
.invite-list{display:flex;flex-direction:column;gap:8px}
.invite-item{display:flex;align-items:center;gap:14px;border:1px solid var(--line);border-radius:12px;padding:12px 16px;flex-wrap:wrap}
.invite-item code{font-size:15px;font-weight:800;color:var(--primary-deep);letter-spacing:1px}
.invite-item .st{font-size:12px;padding:2px 9px;border-radius:999px;font-weight:700}
.invite-item .st.unused{background:#e7f9ef;color:#15803d}
.invite-item .st.used{background:#fde8e8;color:#b91c1c}
.invite-item .meta{font-size:12px;color:var(--muted);margin-left:auto}

/* ---- 管理后台 ---- */
.stat-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px}
.stat-card{background:#faf8f3;border:1px solid var(--line);border-radius:14px;padding:16px;text-align:center}
.stat-card b{font-size:26px;font-weight:900;color:var(--primary-deep);display:block}
.stat-card span{font-size:12px;color:var(--muted)}
.admin-table{display:flex;flex-direction:column;gap:6px}
.admin-row{display:flex;align-items:center;gap:12px;border:1px solid var(--line);border-radius:11px;padding:11px 14px;flex-wrap:wrap;font-size:13.5px}
.admin-row .grow{flex:1;min-width:120px}
.admin-row b{font-size:13px}
.admin-row .sub{color:var(--muted);font-size:11.5px}
.admin-row .ops{display:flex;gap:6px;margin-left:auto}
.admin-row .ops button{background:#faf8f3;border:1px solid var(--line);border-radius:7px;padding:5px 10px;font-size:12px;font-weight:600;cursor:pointer}
.admin-row .ops button:hover{border-color:var(--primary);color:var(--primary-deep)}
.admin-row .ops button.danger:hover{border-color:var(--accent);color:var(--accent)}
.badge-role{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px}
.badge-role.admin{background:#efe9fd;color:#6d28d9}
.badge-role.user{background:#f1f5f9;color:#475569}

/* ---- 趋势图弹窗 ---- */
.modal{position:fixed;inset:0;background:rgba(20,16,32,.55);z-index:100;display:flex;align-items:center;justify-content:center;padding:20px}
.modal.hidden{display:none}
.modal-box{background:#fff;border-radius:18px;width:min(680px,100%);padding:24px;max-height:92vh;overflow:auto;box-shadow:0 30px 80px rgba(36,29,58,.3)}
.modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.modal-head h3{font-size:17px;font-weight:800}
.range-row{display:flex;gap:8px;margin-bottom:14px}
.range-row button{background:#faf8f3;border:1px solid var(--line);border-radius:8px;padding:6px 14px;font-size:12.5px;font-weight:600;cursor:pointer}
.range-row button.on{background:var(--primary);color:#fff;border-color:var(--primary)}
#trendChart{overflow-x:auto}
#trendLegend{margin-top:10px}
