@charset "utf-8";
/* =====================================================================
   站点流量统计 - 主样式表
   纯 CSS / 无外部依赖 / 无 CDN
   改色只需修改 :root 中的 HEX 值
   ===================================================================== */

:root{
  /* 主色 */
  --c-primary:#2563EB;
  --c-primary-dark:#1D4ED8;
  --c-primary-soft:#EFF5FF;
  --c-primary-line:#BFD6FE;

  /* 中性 */
  --c-bg:#F4F6FA;
  --c-card:#FFFFFF;
  --c-border:#E5E9F0;
  --c-border-soft:#EEF1F6;
  --c-hover:#F7F9FC;
  --c-text:#1E293B;
  --c-text-2:#64748B;
  --c-text-3:#94A3B8;
  --c-sidebar:#FFFFFF;

  /* 语义色 */
  --c-success:#00A870;
  --c-warn:#ED7B2F;
  --c-danger:#E34D59;
  --c-info:#2563EB;
  --c-purple:#7C4DFF;
  --c-cyan:#0DA5C0;

  /* 涨跌（中国习惯：涨红跌绿） */
  --c-up:#E34D59;
  --c-down:#00A870;

  /* 状态码 */
  --c-2xx:#00A870;
  --c-3xx:#0DA5C0;
  --c-4xx:#ED7B2F;
  --c-5xx:#E34D59;

  /* 尺寸 */
  --h-topbar:56px;
  --w-sidebar:216px;
  --radius:10px;
  --radius-sm:6px;

  --shadow-sm:0 1px 2px rgba(15,23,42,.04), 0 1px 3px rgba(15,23,42,.04);
  --shadow-md:0 4px 14px rgba(15,23,42,.07);
  --shadow-lg:0 12px 40px rgba(15,23,42,.14);
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  background:var(--c-bg);
  color:var(--c-text);
  font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;
}
a{color:var(--c-primary);text-decoration:none;}
a:hover{color:var(--c-primary-dark);}
h1,h2,h3,h4{margin:0;font-weight:600;}
table{border-collapse:collapse;width:100%;}
input,select,textarea,button{font-family:inherit;font-size:14px;}

/* 内联 SVG 图标默认尺寸（局部样式优先级更高会覆盖） */
button svg,a svg,label svg,.dropdown svg,.alert svg,.badge svg{
  width:14px;height:14px;fill:currentColor;vertical-align:-2px;flex:0 0 auto;
}
.empty svg,.login-box svg{vertical-align:middle;}

/* ============ 布局 ============ */
.app{display:flex;min-height:100vh;}

.sidebar{
  width:var(--w-sidebar);flex:0 0 var(--w-sidebar);
  background:var(--c-sidebar);
  border-right:1px solid var(--c-border);
  display:flex;flex-direction:column;
  position:fixed;top:0;left:0;bottom:0;z-index:30;
}
.logo{
  height:var(--h-topbar);display:flex;align-items:center;gap:9px;
  padding:0 18px;border-bottom:1px solid var(--c-border-soft);flex:0 0 auto;
}
.logo-mark{
  width:28px;height:28px;border-radius:7px;flex:0 0 auto;
  background:linear-gradient(135deg,var(--c-primary),var(--c-cyan));
  display:flex;align-items:center;justify-content:center;
}
.logo-mark svg{width:16px;height:16px;fill:#fff;}
.logo-txt{font-size:15px;font-weight:600;letter-spacing:.3px;}
.logo-txt small{display:block;font-size:10px;font-weight:400;color:var(--c-text-3);letter-spacing:.6px;}

.nav{flex:1 1 auto;overflow-y:auto;padding:10px 10px 24px;}
.nav-group{margin:14px 0 6px;padding:0 10px;font-size:11px;color:var(--c-text-3);letter-spacing:.8px;text-transform:uppercase;}
.nav a{
  display:flex;align-items:center;gap:10px;
  padding:9px 11px;border-radius:8px;color:var(--c-text-2);
  font-size:13.5px;margin-bottom:2px;transition:background .12s,color .12s;
}
.nav a svg{width:16px;height:16px;flex:0 0 auto;fill:currentColor;opacity:.75;}
.nav a:hover{background:var(--c-hover);color:var(--c-text);}
.nav a.on{background:var(--c-primary-soft);color:var(--c-primary);font-weight:500;}
.nav a.on svg{opacity:1;}
.nav .cnt{margin-left:auto;font-size:11px;color:var(--c-text-3);background:var(--c-bg);padding:1px 6px;border-radius:9px;}

.side-foot{padding:10px 14px;border-top:1px solid var(--c-border-soft);font-size:11px;color:var(--c-text-3);}

.main{flex:1 1 auto;margin-left:var(--w-sidebar);min-width:0;display:flex;flex-direction:column;}

.topbar{
  height:var(--h-topbar);flex:0 0 auto;background:#fff;border-bottom:1px solid var(--c-border);
  display:flex;align-items:center;gap:14px;padding:0 20px;position:sticky;top:0;z-index:20;
}
.topbar h1{font-size:15.5px;font-weight:600;}
.topbar .sub{font-size:12px;color:var(--c-text-3);}
.topbar-right{margin-left:auto;display:flex;align-items:center;gap:10px;}

.content{padding:18px 20px 40px;flex:1 1 auto;}

/* ============ 顶部站点切换 ============ */
.site-picker{position:relative;}
.site-picker>button{
  display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--c-border);
  border-radius:8px;padding:6px 10px;cursor:pointer;color:var(--c-text);max-width:260px;
}
.site-picker>button:hover{border-color:var(--c-primary-line);}
.site-picker .dot{width:7px;height:7px;border-radius:50%;background:var(--c-success);flex:0 0 auto;}
.site-picker .dot.off{background:var(--c-text-3);}
.site-picker .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;}
.site-menu{
  display:none;position:absolute;top:calc(100% + 6px);left:0;min-width:300px;max-height:420px;overflow-y:auto;
  background:#fff;border:1px solid var(--c-border);border-radius:10px;box-shadow:var(--shadow-lg);padding:6px;z-index:60;
}
.site-menu.open{display:block;}
.site-menu a{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:7px;color:var(--c-text);font-size:13px;}
.site-menu a:hover{background:var(--c-hover);}
.site-menu a.on{background:var(--c-primary-soft);color:var(--c-primary);}
.site-menu .dm{margin-left:auto;font-size:11px;color:var(--c-text-3);}

.user-menu{position:relative;}
.user-menu>button{
  display:flex;align-items:center;gap:8px;background:none;border:none;cursor:pointer;
  padding:5px 6px;border-radius:8px;color:var(--c-text);
}
.user-menu>button:hover{background:var(--c-hover);}
.avatar{
  width:28px;height:28px;border-radius:50%;background:var(--c-primary);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex:0 0 auto;
}
.dropdown{
  display:none;position:absolute;top:calc(100% + 8px);right:0;min-width:190px;
  background:#fff;border:1px solid var(--c-border);border-radius:10px;box-shadow:var(--shadow-lg);padding:6px;z-index:60;
}
.dropdown.open{display:block;}
.dropdown a,.dropdown button{
  display:block;width:100%;text-align:left;padding:8px 10px;border-radius:7px;
  color:var(--c-text);font-size:13px;background:none;border:none;cursor:pointer;
}
.dropdown a:hover,.dropdown button:hover{background:var(--c-hover);}
.dropdown .sep{height:1px;background:var(--c-border-soft);margin:5px 0;}
.dropdown .hd{padding:6px 10px 8px;font-size:12px;color:var(--c-text-3);}

/* ============ 卡片 ============ */
.card{background:var(--c-card);border:1px solid var(--c-border);border-radius:var(--radius);box-shadow:var(--shadow-sm);margin-bottom:16px;}
.card-hd{
  display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--c-border-soft);
}
.card-hd h3{font-size:14px;font-weight:600;}
.card-hd .desc{font-size:12px;color:var(--c-text-3);}
.card-hd .right{margin-left:auto;display:flex;align-items:center;gap:8px;}
.card-bd{padding:16px;}
.card-bd.p0{padding:0;}
.card-bd.px{padding:0 16px;}

.grid{display:grid;gap:16px;}
.g2{grid-template-columns:repeat(2,minmax(0,1fr));}
.g3{grid-template-columns:repeat(3,minmax(0,1fr));}
.g4{grid-template-columns:repeat(4,minmax(0,1fr));}
.g5{grid-template-columns:repeat(5,minmax(0,1fr));}
.g6{grid-template-columns:repeat(6,minmax(0,1fr));}
.g-2-1{grid-template-columns:2fr 1fr;}
.g-1-2{grid-template-columns:1fr 2fr;}

/* ============ 指标卡 ============ */
.stat{
  background:#fff;border:1px solid var(--c-border);border-radius:var(--radius);
  padding:14px 16px;box-shadow:var(--shadow-sm);position:relative;overflow:hidden;
}
.stat .lbl{font-size:12.5px;color:var(--c-text-2);display:flex;align-items:center;gap:6px;}
.stat .lbl svg{width:13px;height:13px;fill:currentColor;opacity:.55;}
.stat .val{font-size:25px;font-weight:600;letter-spacing:-.4px;margin:8px 0 2px;font-variant-numeric:tabular-nums;}
.stat .val small{font-size:13px;font-weight:400;color:var(--c-text-3);margin-left:3px;}
.stat .sub{font-size:12px;color:var(--c-text-3);display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.stat.hero{background:linear-gradient(135deg,var(--c-primary) 0%,#3B82F6 55%,var(--c-cyan) 100%);border:none;color:#fff;}
.stat.hero .lbl,.stat.hero .sub{color:rgba(255,255,255,.82);}
.stat.hero .val{color:#fff;}

.delta{display:inline-flex;align-items:center;gap:2px;font-size:12px;font-weight:500;}
.delta.up{color:var(--c-up);}
.delta.down{color:var(--c-down);}
.delta.flat{color:var(--c-text-3);}
.delta svg{width:11px;height:11px;fill:currentColor;}

/* ============ 工具条 ============ */
.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px;}
.toolbar .sp{margin-left:auto;}

.ranges{display:inline-flex;background:#fff;border:1px solid var(--c-border);border-radius:8px;padding:2px;}
.ranges a{
  padding:5px 12px;border-radius:6px;font-size:13px;color:var(--c-text-2);
}
.ranges a:hover{color:var(--c-primary);}
.ranges a.on{background:var(--c-primary);color:#fff;}

.date-form{display:flex;align-items:center;gap:6px;background:#fff;border:1px solid var(--c-border);border-radius:8px;padding:3px 6px;}
.date-form input[type=date]{border:none;outline:none;font-size:13px;color:var(--c-text);background:transparent;padding:4px 2px;}
.date-form span{color:var(--c-text-3);font-size:12px;}

/* ============ 按钮 ============ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:7px 14px;border-radius:8px;border:1px solid var(--c-border);background:#fff;
  color:var(--c-text);cursor:pointer;font-size:13.5px;line-height:1.3;
  transition:all .12s;white-space:nowrap;text-decoration:none;
}
.btn:hover{border-color:var(--c-primary-line);color:var(--c-primary);}
.btn svg{width:14px;height:14px;fill:currentColor;}
.btn-primary{background:var(--c-primary);border-color:var(--c-primary);color:#fff;}
.btn-primary:hover{background:var(--c-primary-dark);border-color:var(--c-primary-dark);color:#fff;}
.btn-danger{background:#fff;border-color:#F6C7CB;color:var(--c-danger);}
.btn-danger:hover{background:var(--c-danger);border-color:var(--c-danger);color:#fff;}
.btn-ghost{border-color:transparent;background:transparent;color:var(--c-text-2);}
.btn-ghost:hover{background:var(--c-hover);color:var(--c-text);}
.btn-sm{padding:4px 10px;font-size:12.5px;border-radius:6px;}
.btn-xs{padding:2px 8px;font-size:12px;border-radius:5px;}
.btn:disabled{opacity:.55;cursor:not-allowed;}

/* ============ 表单 ============ */
.form-row{margin-bottom:15px;}
.form-row>label{display:block;font-size:13px;color:var(--c-text-2);margin-bottom:6px;}
.form-row .hint{font-size:12px;color:var(--c-text-3);margin-top:5px;line-height:1.6;}
.input,.select,.textarea{
  width:100%;padding:8px 11px;border:1px solid var(--c-border);border-radius:8px;
  background:#fff;color:var(--c-text);outline:none;transition:border-color .12s,box-shadow .12s;
}
.input:focus,.select:focus,.textarea:focus{border-color:var(--c-primary);box-shadow:0 0 0 3px var(--c-primary-soft);}
.textarea{min-height:88px;resize:vertical;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.7;}
.input-sm{padding:5px 9px;font-size:13px;border-radius:6px;}
.input-inline{display:flex;gap:8px;align-items:center;}
.check{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--c-text);cursor:pointer;user-select:none;}
.check input{width:15px;height:15px;accent-color:var(--c-primary);cursor:pointer;}
.switch{position:relative;display:inline-block;width:40px;height:22px;flex:0 0 auto;}
.switch input{opacity:0;width:0;height:0;}
.switch .sl{position:absolute;inset:0;background:#CBD5E1;border-radius:22px;transition:.18s;cursor:pointer;}
.switch .sl:before{content:"";position:absolute;width:16px;height:16px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.18s;}
.switch input:checked + .sl{background:var(--c-primary);}
.switch input:checked + .sl:before{transform:translateX(18px);}
.label-txt{display:inline-flex;align-items:center;gap:9px;font-size:13.5px;}

/* ============ 表格 ============ */
.tbl-wrap{overflow-x:auto;}
table.tbl{font-size:13px;}
table.tbl th{
  text-align:left;font-weight:500;color:var(--c-text-2);font-size:12.5px;
  padding:10px 12px;border-bottom:1px solid var(--c-border);background:#FAFBFD;white-space:nowrap;position:sticky;top:0;
}
table.tbl th a{color:var(--c-text-2);display:inline-flex;align-items:center;gap:3px;}
table.tbl th a:hover{color:var(--c-primary);}
table.tbl th a.on{color:var(--c-primary);font-weight:600;}
table.tbl td{padding:9px 12px;border-bottom:1px solid var(--c-border-soft);vertical-align:middle;}
table.tbl tbody tr:hover{background:var(--c-hover);}
table.tbl tbody tr:last-child td{border-bottom:none;}
table.tbl .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;}
table.tbl .rk{width:34px;color:var(--c-text-3);font-variant-numeric:tabular-nums;}
table.tbl .rk.top{color:var(--c-primary);font-weight:600;}
.mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;}
.ellip{max-width:520px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:bottom;}
.muted{color:var(--c-text-3);}
.bar-cell{display:flex;align-items:center;gap:8px;}
.bar-cell .bar{flex:1 1 auto;height:5px;background:var(--c-border-soft);border-radius:3px;overflow:hidden;min-width:40px;}
.bar-cell .bar i{display:block;height:100%;background:var(--c-primary);border-radius:3px;}
.bar-cell .v{font-variant-numeric:tabular-nums;min-width:52px;text-align:right;font-size:12.5px;}

/* ============ 标签 / 徽标 ============ */
.badge{display:inline-flex;align-items:center;gap:4px;padding:1px 8px;border-radius:20px;font-size:11.5px;line-height:1.7;white-space:nowrap;}
.badge.gray{background:#F1F5F9;color:var(--c-text-2);}
.badge.blue{background:var(--c-primary-soft);color:var(--c-primary);}
.badge.green{background:#E7F8F1;color:var(--c-success);}
.badge.orange{background:#FEF2E7;color:var(--c-warn);}
.badge.red{background:#FDECEE;color:var(--c-danger);}
.badge.purple{background:#F1EAFF;color:var(--c-purple);}
.badge.dot:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;}

.st-2xx{color:var(--c-2xx);}
.st-3xx{color:var(--c-3xx);}
.st-4xx{color:var(--c-4xx);}
.st-5xx{color:var(--c-5xx);}

/* ============ 站点详情标签 ============ */
.tabs{display:flex;gap:2px;background:#fff;border:1px solid var(--c-border);border-radius:var(--radius) var(--radius) 0 0;padding:6px 8px 0;overflow-x:auto;}
.tabs a{
  padding:9px 14px;font-size:13.5px;color:var(--c-text-2);border-bottom:2px solid transparent;
  white-space:nowrap;border-radius:6px 6px 0 0;
}
.tabs a:hover{color:var(--c-primary);background:var(--c-hover);}
.tabs a.on{color:var(--c-primary);border-bottom-color:var(--c-primary);font-weight:500;}

.site-head{
  display:flex;align-items:center;gap:14px;padding:14px 16px;background:#fff;
  border:1px solid var(--c-border);border-radius:var(--radius) var(--radius) 0 0;margin-bottom:-1px;
}
.site-head .ico{width:38px;height:38px;border-radius:9px;background:var(--c-primary-soft);color:var(--c-primary);display:flex;align-items:center;justify-content:center;flex:0 0 auto;}
.site-head .ico svg{width:19px;height:19px;fill:currentColor;}
.site-head .tt{font-size:16px;font-weight:600;display:flex;align-items:center;gap:8px;}
.site-head .mt{font-size:12px;color:var(--c-text-3);margin-top:2px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.site-head .rt{margin-left:auto;display:flex;align-items:center;gap:8px;}

/* ============ 图表 ============ */
.chart{width:100%;display:block;}
.chart-h{height:260px;}
.chart-sm{height:180px;}
.chart-lg{height:320px;}
.legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px;}
.legend span{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--c-text-2);}
.legend i{width:9px;height:9px;border-radius:2px;display:inline-block;}

/* 热力图 */
.heat{overflow-x:auto;}
.heat table{font-size:11px;border-collapse:separate;border-spacing:2px;}
.heat td,.heat th{padding:0;text-align:center;color:var(--c-text-3);font-weight:400;}
.heat th{width:22px;height:16px;font-size:10px;}
.heat td{width:22px;height:20px;border-radius:3px;background:#EDF1F7;font-size:9px;color:#fff;}
.heat td.l1{background:var(--c-primary-line);}
.heat td.l2{background:#93B8FB;}
.heat td.l3{background:#5B8DEF;}
.heat td.l4{background:var(--c-primary);}
.heat td.l5{background:var(--c-primary-dark);}
.heat .dcol{width:74px;text-align:left;color:var(--c-text-2);font-size:11px;padding-right:6px;}

/* 进度条 */
.prog{height:7px;background:var(--c-border-soft);border-radius:4px;overflow:hidden;}
.prog i{display:block;height:100%;border-radius:4px;}

/* ============ 分页 ============ */
.pager{display:flex;align-items:center;gap:5px;padding:14px 16px;flex-wrap:wrap;}
.pager-info{font-size:12.5px;color:var(--c-text-3);margin-right:8px;}
.pager .pg{
  min-width:31px;height:31px;padding:0 9px;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid var(--c-border);border-radius:7px;font-size:13px;color:var(--c-text-2);background:#fff;
}
.pager .pg:hover{border-color:var(--c-primary-line);color:var(--c-primary);}
.pager .pg.on{background:var(--c-primary);border-color:var(--c-primary);color:#fff;font-weight:500;}

/* ============ 提示 ============ */
.alert{padding:11px 14px;border-radius:8px;font-size:13px;margin-bottom:14px;display:flex;gap:9px;align-items:flex-start;}
.alert svg{width:15px;height:15px;flex:0 0 auto;margin-top:2px;fill:currentColor;}
.alert.info{background:var(--c-primary-soft);color:var(--c-primary-dark);}
.alert.ok{background:#E7F8F1;color:#00734B;}
.alert.warn{background:#FEF6EC;color:#B45309;}
.alert.err{background:#FDECEE;color:#B91C1C;}
.alert ul{margin:4px 0 0;padding-left:18px;}

.empty{padding:52px 20px;text-align:center;color:var(--c-text-3);font-size:13.5px;}
.empty svg{width:38px;height:38px;fill:currentColor;opacity:.3;display:block;margin:0 auto 12px;}

/* ============ 日志查看 ============ */
.logbox{
  background:#0F172A;border-radius:8px;padding:12px 14px;overflow:auto;max-height:620px;
  font:12px/1.75 ui-monospace,Menlo,Consolas,"Courier New",monospace;color:#CBD5E1;
}
.logbox .ln{white-space:pre-wrap;word-break:break-all;padding:1px 0;}
.logbox .ln:hover{background:rgba(255,255,255,.06);}
.logbox .ip{color:#7DD3FC;}
.logbox .tm{color:#94A3B8;}
.logbox .mt{color:#86EFAC;font-weight:600;}
.logbox .ur{color:#FDE68A;}
.logbox .s2{color:#4ADE80;}
.logbox .s3{color:#67E8F9;}
.logbox .s4{color:#FBBF24;}
.logbox .s5{color:#F87171;}
.logbox .ua{color:#64748B;}
.logbox .lv-error{color:#F87171;font-weight:600;}
.logbox .lv-warn{color:#FBBF24;}
.logbox .lv-notice{color:#67E8F9;}

pre.code{background:#0F172A;color:#CBD5E1;border-radius:8px;padding:12px 14px;overflow:auto;font:12px/1.7 ui-monospace,Menlo,Consolas,monospace;margin:0;}

/* ============ 登录 ============ */
.login-page{
  min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(140deg,#EEF3FB 0%,#F6F8FC 45%,#EAF4F8 100%);
  padding:24px;
}
.login-box{
  width:390px;background:#fff;border-radius:16px;box-shadow:var(--shadow-lg);
  padding:34px 32px 30px;border:1px solid var(--c-border);
}
.login-box .brand{display:flex;align-items:center;gap:11px;margin-bottom:24px;}
.login-box .brand .logo-mark{width:38px;height:38px;border-radius:10px;}
.login-box .brand .logo-mark svg{width:21px;height:21px;}
.login-box .brand h2{font-size:18px;}
.login-box .brand p{margin:1px 0 0;font-size:12px;color:var(--c-text-3);}
.login-box .input{height:42px;}
.login-box .btn{width:100%;height:42px;margin-top:6px;font-size:14.5px;}
.login-foot{text-align:center;font-size:12px;color:var(--c-text-3);margin-top:22px;line-height:1.9;}

/* ============ 分享页 ============ */
.share-page{min-height:100vh;background:var(--c-bg);}
.share-top{
  background:#fff;border-bottom:1px solid var(--c-border);padding:0 24px;height:56px;
  display:flex;align-items:center;gap:14px;position:sticky;top:0;z-index:20;
}
.share-top .brand{display:flex;align-items:center;gap:9px;font-size:14.5px;font-weight:600;}
.share-top .rt{margin-left:auto;display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--c-text-3);}
.share-body{padding:18px 24px 40px;max-width:1500px;margin:0 auto;}
.share-tabs{display:flex;gap:2px;background:#fff;border:1px solid var(--c-border);border-radius:var(--radius);padding:5px 8px;margin-bottom:16px;overflow-x:auto;}
.share-tabs a{padding:8px 15px;font-size:13.5px;color:var(--c-text-2);border-radius:7px;white-space:nowrap;}
.share-tabs a:hover{background:var(--c-hover);color:var(--c-primary);}
.share-tabs a.on{background:var(--c-primary);color:#fff;font-weight:500;}

.lock-page{
  min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(140deg,#EEF3FB,#EAF4F8);padding:24px;
}
.lock-box{width:400px;background:#fff;border-radius:16px;box-shadow:var(--shadow-lg);padding:34px 32px;border:1px solid var(--c-border);}
.lock-box .ico{width:52px;height:52px;border-radius:14px;background:var(--c-primary-soft);color:var(--c-primary);display:flex;align-items:center;justify-content:center;margin-bottom:16px;}
.lock-box .ico svg{width:25px;height:25px;fill:currentColor;}
.lock-box h2{font-size:18px;margin-bottom:5px;}
.lock-box .sd{font-size:13px;color:var(--c-text-3);margin-bottom:20px;line-height:1.7;}

/* ============ 权限矩阵 ============ */
.perm-matrix{border:1px solid var(--c-border);border-radius:9px;overflow:hidden;}
.perm-matrix .row{display:flex;align-items:center;gap:10px;padding:10px 13px;border-bottom:1px solid var(--c-border-soft);flex-wrap:wrap;}
.perm-matrix .row:last-child{border-bottom:none;}
.perm-matrix .row:hover{background:var(--c-hover);}
.perm-matrix .row.on{background:var(--c-primary-soft);}
.perm-matrix .site{min-width:230px;display:flex;align-items:center;gap:8px;font-size:13.5px;}
.perm-matrix .bits{display:flex;gap:11px;flex-wrap:wrap;align-items:center;}
.perm-matrix .bits label{font-size:12.5px;color:var(--c-text-2);display:inline-flex;align-items:center;gap:5px;cursor:pointer;}
.perm-matrix .bits label:hover{color:var(--c-primary);}
.perm-matrix .bits input{accent-color:var(--c-primary);cursor:pointer;}

/* 选择列表 */
.pick-list{border:1px solid var(--c-border);border-radius:9px;max-height:340px;overflow-y:auto;}
.pick-list label{display:flex;align-items:center;gap:9px;padding:9px 13px;border-bottom:1px solid var(--c-border-soft);font-size:13.5px;cursor:pointer;}
.pick-list label:last-child{border-bottom:none;}
.pick-list label:hover{background:var(--c-hover);}

/* 描述列表 */
.dl{display:grid;grid-template-columns:150px 1fr;gap:0;font-size:13.5px;}
.dl dt{padding:9px 0;color:var(--c-text-2);border-bottom:1px solid var(--c-border-soft);}
.dl dd{padding:9px 0;margin:0;border-bottom:1px solid var(--c-border-soft);word-break:break-all;}

.rank-list{list-style:none;margin:0;padding:0;}
.rank-list li{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed var(--c-border-soft);font-size:13px;}
.rank-list li:last-child{border-bottom:none;}
.rank-list .n{width:19px;height:19px;border-radius:5px;background:var(--c-bg);color:var(--c-text-3);display:flex;align-items:center;justify-content:center;font-size:11px;flex:0 0 auto;}
.rank-list .n.t1{background:var(--c-danger);color:#fff;}
.rank-list .n.t2{background:var(--c-warn);color:#fff;}
.rank-list .n.t3{background:#F5C244;color:#fff;}
.rank-list .t{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rank-list .v{color:var(--c-text-2);font-variant-numeric:tabular-nums;font-size:12.5px;}

/* 待办点 */
.todo{list-style:none;margin:0;padding:0;}
.todo li{display:flex;gap:9px;padding:9px 0;border-bottom:1px dashed var(--c-border-soft);font-size:13.5px;line-height:1.65;}
.todo li:last-child{border-bottom:none;}
.todo .ic{width:17px;height:17px;flex:0 0 auto;margin-top:2px;}
.todo .ic svg{width:100%;height:100%;fill:currentColor;}
.todo .good{color:var(--c-success);}
.todo .warn{color:var(--c-warn);}
.todo .bad{color:var(--c-danger);}
.todo .info{color:var(--c-primary);}

/* 报告打印 */
@media print{
  .sidebar,.topbar,.toolbar,.no-print,.share-top{display:none !important;}
  .main{margin-left:0;}
  .content{padding:0;}
  .card{box-shadow:none;border-color:#ddd;break-inside:avoid;}
  body{background:#fff;}
}

/* 响应式 */
@media (max-width:1280px){
  .g6{grid-template-columns:repeat(3,minmax(0,1fr));}
  .g5{grid-template-columns:repeat(3,minmax(0,1fr));}
  .g4{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:960px){
  .sidebar{transform:translateX(-100%);transition:transform .2s;}
  .sidebar.open{transform:none;}
  .main{margin-left:0;}
  .g3,.g-2-1,.g-1-2{grid-template-columns:1fr;}
  .g2{grid-template-columns:1fr;}
  .menu-btn{display:inline-flex !important;}
  .content{padding:14px 12px 32px;}
  .topbar{padding:0 12px;}
  table.tbl .ellip{max-width:200px;}
}
@media (min-width:961px){.menu-btn{display:none !important;}}
@media (max-width:640px){
  .g6,.g5,.g4{grid-template-columns:repeat(2,minmax(0,1fr));}
  .stat .val{font-size:21px;}
  .site-head{flex-wrap:wrap;}
  .site-head .rt{width:100%;margin-left:0;}
}
.menu-btn{display:none;background:none;border:none;cursor:pointer;padding:6px;border-radius:7px;color:var(--c-text-2);}
.menu-btn:hover{background:var(--c-hover);}
.menu-btn svg{width:19px;height:19px;fill:currentColor;}

.text-c{text-align:center;}
.text-r{text-align:right;}
.mt0{margin-top:0;}
.mb0{margin-bottom:0;}
.mb8{margin-bottom:8px;}
.mb14{margin-bottom:14px;}
.mt14{margin-top:14px;}
.fs12{font-size:12px;}
.fs13{font-size:13px;}
.nowrap{white-space:nowrap;}
.w100{width:100%;}
.flex{display:flex;}
.flex-c{display:flex;align-items:center;}
.gap8{gap:8px;}
.gap14{gap:14px;}
.hidden{display:none;}
