:root{--bg:#0b0c10;--fg:#e3e3e3;--muted:#8a8f98;--card:#16181d;--brand:#4f46e5;--ok:#22c55e;--err:#ef4444;--bd:#2a2f36}
@media (prefers-color-scheme: light){:root{--bg:#f7f7fb;--fg:#0f172a;--muted:#6b7280;--card:#ffffff;--brand:#4f46e5;--bd:#e5e7eb}}
*{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,"Apple Color Emoji","Segoe UI Emoji"}
.container{max-width:1024px;margin:24px auto;padding:0 16px}
.topbar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--bd);background:var(--card);position:sticky;top:0}
.brand{font-weight:700}
nav a{color:var(--fg);text-decoration:none;margin-right:12px}
nav a.active{color:var(--brand)}
.btn{background:transparent;border:1px solid var(--bd);color:var(--fg);padding:8px 12px;border-radius:8px;cursor:pointer}
.btn.primary{background:var(--brand);border-color:var(--brand);color:white}
.card{background:var(--card);border:1px solid var(--bd);border-radius:12px;padding:16px}
.stack>*{display:block;margin-bottom:12px}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
label{display:flex;flex-direction:column;gap:6px;color:var(--muted)}
input,select{background:transparent;border:1px solid var(--bd);color:var(--fg);padding:10px;border-radius:8px}
.table{width:100%;border-collapse:collapse}
.table th,.table td{border-bottom:1px solid var(--bd);padding:8px 6px;text-align:left}
.center{display:flex;min-height:100vh;align-items:center;justify-content:center;flex-direction:column;gap:8px}
.mb-2{margin-bottom:16px}
.inline{display:flex;gap:8px;align-items:center}
.alert{border-radius:8px;padding:10px 12px;margin:12px 0;border:1px solid var(--bd)}
.alert.success{background:rgba(34,197,94,.12);border-color:rgba(34,197,94,.4)}
.alert.error{background:rgba(239,68,68,.12);border-color:rgba(239,68,68,.4)}


/* Typography & utilities */
h1,h2,h3{margin:0 0 12px 0}
h1{font-size:1.5rem}
h2{font-size:1.25rem}
h3{font-size:1.1rem}
.subtitle{color:var(--muted);font-size:.95rem}
.muted{color:var(--muted)}
.text-center{text-align:center}
.mt-1{margin-top:8px}
.mt-2{margin-top:16px}
.mb-1{margin-bottom:8px}
.mb-3{margin-bottom:24px}
.ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.desktop-only{display:block}
.mobile-only{display:none}
.stack-sm{}
.hide-sm{}

/* Links */
a{color:var(--brand)}
a:hover{text-decoration:underline}

/* Buttons */
.btn:hover{filter:brightness(1.02)}
.btn:focus{outline:0;box-shadow:0 0 0 3px rgba(79,70,229,.35)}
.btn:disabled{opacity:.6;cursor:not-allowed}
.btn.ghost{background:transparent;border-color:transparent;color:var(--fg)}
.btn.danger{border-color:var(--err);color:var(--err)}

/* Inputs */
input,select,textarea{width:100%}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(79,70,229,.35)}

/* Card elevation */
.shadow{box-shadow:0 8px 30px rgba(0,0,0,.18)}
.shadow-lg{box-shadow:0 14px 55px rgba(0,0,0,.22)}

/* Auth page */
.auth{background:radial-gradient(900px 500px at 0% 0%,rgba(79,70,229,.18),transparent 60%),radial-gradient(700px 400px at 100% 100%,rgba(79,70,229,.12),transparent 60%),var(--bg)}
.auth-card{max-width:420px;width:100%}

/* Tables */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.table{min-width:720px}

/* Navigation */
.topbar nav{display:flex;gap:8px;flex-wrap:wrap}
.brand{letter-spacing:.2px}

/* ========== 统计页面样式 ========== */

/* 统计页面头部 */
.stats-header{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:16px}
.range-selector{display:-webkit-box;display:-webkit-flex;display:flex;margin-top:8px}
.range-selector .btn{margin-left:4px;margin-right:0}

/* 总览卡片区 */
.stats-overview{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-6px;margin-right:-6px;margin-bottom:16px}
.stat-card{background:var(--card);border:1px solid var(--bd);border-radius:12px;padding:16px;margin:6px;-webkit-box-flex:1;-webkit-flex:1 1 140px;flex:1 1 140px;min-width:120px;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}
.stat-card-primary{background:linear-gradient(135deg,var(--brand),#6366f1);border-color:var(--brand);color:#fff}
.stat-card-primary .stat-label{color:rgba(255,255,255,.8)}
.stat-icon{font-size:1.5rem;margin-right:12px;opacity:.7}
.stat-content{-webkit-box-flex:1;-webkit-flex:1;flex:1}
.stat-value{font-size:1.4rem;font-weight:700;line-height:1.2}
.stat-label{font-size:.85rem;color:var(--muted);margin-top:2px}

/* 周/月对比区 */
.stats-comparison{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-6px;margin-right:-6px;margin-bottom:8px}
.comparison-card{-webkit-box-flex:1;-webkit-flex:1 1 280px;flex:1 1 280px;margin:6px}
.comparison-card h3{margin-bottom:12px}
.comparison-row{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;text-align:center}
.comparison-item{-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:8px}
.comparison-label{font-size:.85rem;color:var(--muted);margin-bottom:4px}
.comparison-value{font-size:1.25rem;font-weight:700}
.comparison-sub{font-size:.8rem;color:var(--muted);margin-top:2px}
.comparison-vs{font-size:.9rem;color:var(--muted);padding:0 12px;font-weight:600}
.comparison-trend{text-align:center;margin-top:8px;padding:6px 12px;border-radius:8px;font-size:.9rem;font-weight:600}
.trend-up{background:rgba(34,197,94,.15);color:#22c55e}
.trend-down{background:rgba(239,68,68,.15);color:#ef4444}

/* 时段分布柱状图 */
.hourly-chart{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;height:100px;padding:8px 0;border-bottom:1px solid var(--bd)}
.hour-bar-wrap{-webkit-box-flex:1;-webkit-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;align-items:center;height:100%}
.hour-bar{width:60%;max-width:16px;background:linear-gradient(180deg,var(--brand),#818cf8);border-radius:4px 4px 0 0;min-height:4px;-webkit-transition:height .2s;transition:height .2s}
.hour-label{font-size:.65rem;color:var(--muted);margin-top:4px}
.hourly-legend{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;padding-top:4px;font-size:.75rem}

/* 排行榜列表 */
.ranking-list{margin-top:8px}
.ranking-item{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:10px 0;border-bottom:1px solid var(--bd)}
.ranking-item:last-child{border-bottom:none}
.ranking-num{width:28px;height:28px;border-radius:50%;background:var(--bd);display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;font-size:.85rem;font-weight:600;margin-right:12px;-webkit-flex-shrink:0;flex-shrink:0}
.ranking-top{background:linear-gradient(135deg,#f59e0b,#fbbf24);color:#fff}
.ranking-info{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0;margin-right:8px}
.ranking-title{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ranking-sub{font-size:.8rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ranking-count{font-weight:600;color:var(--brand);white-space:nowrap;-webkit-flex-shrink:0;flex-shrink:0}

/* 来源分布 */
.source-list{margin-top:8px}
.source-item{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;margin-bottom:10px}
.source-name{width:80px;font-size:.9rem;-webkit-flex-shrink:0;flex-shrink:0}
.source-bar-wrap{-webkit-box-flex:1;-webkit-flex:1;flex:1;height:20px;background:var(--bd);border-radius:10px;overflow:hidden;margin:0 12px}
.source-bar{height:100%;background:linear-gradient(90deg,var(--brand),#818cf8);border-radius:10px;min-width:4px}
.source-count{font-size:.85rem;font-weight:600;width:50px;text-align:right;-webkit-flex-shrink:0;flex-shrink:0}

/* 每日趋势柱状图 */
.daily-chart{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;height:120px;padding:8px 0;margin-bottom:8px}
.daily-bar-wrap{-webkit-box-flex:1;-webkit-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;align-items:center;height:100%}
.daily-bar{width:70%;max-width:40px;background:linear-gradient(180deg,var(--brand),#818cf8);border-radius:6px 6px 0 0;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;padding-top:4px;min-height:20px}
.daily-bar-val{font-size:.7rem;color:#fff;font-weight:600}
.daily-bar-label{font-size:.7rem;color:var(--muted);margin-top:6px;white-space:nowrap}

/* 分页 */
.pagination-row{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;align-items:center;margin-top:12px;-webkit-flex-wrap:wrap;flex-wrap:wrap}
.pagination-btns{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}
.pagination-info{margin:0 8px;font-size:.9rem}
.btn-sm{padding:6px 10px;font-size:.85rem}

/* 导出选项 */
.export-options{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-top:12px}
.export-options .btn{margin-right:8px;margin-bottom:8px}
.export-compat{border-top:1px solid var(--bd);padding-top:12px;margin-top:12px}

/* ========== 响应式：手机端 ========== */
@media (max-width: 640px){
  .container{margin:12px auto;padding:0 12px}
  .grid-2{grid-template-columns:1fr}
  .topbar{padding:10px 12px}
  nav a{margin-right:8px}
  .brand{font-size:1rem}
  .desktop-only{display:none}
  .mobile-only{display:block}
  .hide-sm{display:none}
  .table{min-width:0}
  .inline{margin-left:-3px;margin-right:-3px}
  .inline>*{margin-left:3px;margin-right:3px}
  .inline.stack-sm{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:stretch;align-items:stretch}
  .btn{padding:10px 12px}
  
  /* 统计页面手机适配 */
  .stats-header{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-webkit-align-items:stretch;align-items:stretch}
  .range-selector{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}
  .stat-card{-webkit-flex:1 1 45%;flex:1 1 45%;min-width:100px;padding:12px}
  .stat-value{font-size:1.2rem}
  .stat-icon{font-size:1.2rem;margin-right:8px}
  .comparison-card{-webkit-flex:1 1 100%;flex:1 1 100%}
  .ranking-num{width:24px;height:24px;font-size:.8rem;margin-right:8px}
  .ranking-title{font-size:.95rem}
  .hourly-chart{height:80px}
  .hour-label{font-size:.55rem}
  .daily-chart{height:100px}
}

/* ========== 响应式：手表设备（小于400px） ========== */
@media (max-width: 400px){
  .container{margin:8px auto;padding:0 8px}
  .topbar{padding:8px 10px;-webkit-flex-wrap:wrap;flex-wrap:wrap}
  .topbar nav{width:100%;margin-top:6px;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}
  nav a{margin-right:6px;font-size:.85rem}
  .brand{font-size:.9rem}
  .btn{padding:8px 10px;font-size:.85rem;min-height:36px}
  h2{font-size:1.1rem}
  h3{font-size:1rem}
  .card{padding:12px;border-radius:10px}
  
  /* 统计页面手表适配 - 所有内容都显示，只是布局更紧凑 */
  .stats-overview{margin-left:-4px;margin-right:-4px}
  .stat-card{-webkit-flex:1 1 42%;flex:1 1 42%;min-width:80px;padding:10px;margin:4px;border-radius:10px}
  .stat-value{font-size:1.1rem}
  .stat-label{font-size:.75rem}
  .stat-icon{font-size:1rem;margin-right:6px}
  .ranking-item{padding:8px 0}
  .ranking-num{width:22px;height:22px;font-size:.75rem;margin-right:6px}
  .ranking-title{font-size:.9rem}
  .ranking-sub{font-size:.7rem}
  .ranking-count{font-size:.85rem}
  .table th,.table td{padding:6px 4px;font-size:.85rem}
  .pagination-row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}
  .pagination-btns{margin-top:8px}
  .btn-sm{padding:6px 8px;font-size:.8rem}
  .range-selector .btn{padding:6px 8px;font-size:.8rem}
  
  /* 周/月对比卡片小屏适配 */
  .stats-comparison{-webkit-flex-direction:column;flex-direction:column;gap:8px}
  .comparison-card{padding:10px}
  .comparison-card h3{font-size:.9rem;margin-bottom:8px}
  .comparison-row{gap:8px}
  .comparison-item{padding:6px}
  .comparison-label{font-size:.7rem}
  .comparison-value{font-size:.9rem}
  .comparison-sub{font-size:.65rem}
  .comparison-vs{font-size:.7rem;padding:4px 8px}
  .comparison-trend{font-size:.75rem;padding:4px 8px}
  
  /* 播放时段分布小屏适配 */
  .hourly-chart{height:80px;gap:1px}
  .hour-bar-wrap{min-width:8px}
  .hour-label{font-size:.5rem}
  .hourly-legend{font-size:.6rem}
  
  /* 播放来源小屏适配 */
  .source-item{padding:4px 0}
  .source-name{font-size:.75rem;min-width:50px}
  .source-count{font-size:.75rem}
  
  /* 每日趋势柱状图小屏适配 */
  .daily-chart{height:80px;gap:4px}
  .daily-bar-val{font-size:.6rem}
  .daily-bar-label{font-size:.6rem}
}

/* ========== 响应式：超小屏手表（小于280px） ========== */
@media (max-width: 280px){
  .container{padding:0 4px}
  .topbar{padding:6px 8px}
  .topbar nav{-webkit-flex-wrap:wrap;flex-wrap:wrap}
  nav a{font-size:.75rem;margin-right:4px;margin-bottom:4px}
  .btn{padding:6px 8px;font-size:.75rem;min-height:32px}
  h2{font-size:1rem}
  h3{font-size:.9rem}
  .card{padding:8px;border-radius:8px}
  .stat-card{-webkit-flex:1 1 100%;flex:1 1 100%;min-width:0;padding:8px;margin:3px}
  .stat-value{font-size:1rem}
  .stat-label{font-size:.7rem}
  .ranking-num{width:20px;height:20px;font-size:.7rem}
  .ranking-title{font-size:.8rem}
  .table th,.table td{padding:4px 2px;font-size:.75rem}
}