/* MCode 访问分析（/admin/mcode-access）：全宽屏自适应工作台 + 深度数据可视化（暖白底、白卡、琥珀金 #9b6a16 + 青墨蓝辅助色） */
:root{
  --bg:#f5f4f0;
  --card:#ffffff;
  --soft:#faf7ef;
  --soft-2:#f3efe4;
  --line:#e6dece;
  --line-strong:#d6c8b0;
  --ink:#2c2519;
  --ink-secondary:#594f3e;
  --muted:#8a8070;
  --accent:#9b6a16;
  --accent-hover:#7d530e;
  --accent-soft:#fdf3e1;
  --accent-line:#d99a4e;
  --teal:#2b6cb0;
  --teal-soft:#ebf4fa;
  --purple:#6b46c1;
  --purple-soft:#f3eefc;
  --warn:#a94442;
  --warn-bg:#fbe9e7;
  --notice:#7a5b13;
  --notice-bg:#fdf3d8;
  --ok:#2f6b39;
  --ok-bg:#eaf4e6;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC",sans-serif}
a{color:var(--accent)}
[hidden]{display:none!important}
.topbar{display:flex;gap:12px;align-items:center;padding:12px clamp(18px,2.4vw,40px);background:#fff;border-bottom:1px solid var(--line);font-size:13px;color:var(--muted)}
.topbar a{text-decoration:none;color:var(--accent);font-weight:600}
.topbar span:last-child{margin-left:auto}
main{width:100%;max-width:none;margin:0 auto;padding:20px clamp(18px,2.4vw,40px) 56px}
#gate{color:var(--muted);padding:48px 16px;text-align:center;background:var(--card);border:1px solid var(--line);border-radius:16px}
.title-row{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.eyebrow{margin:0;font-size:12px;letter-spacing:.1em;color:var(--accent);font-weight:600}
h1{margin:2px 0 0;font-size:26px;line-height:1.25}
.source{margin:4px 0 0;font-size:12px;color:var(--muted)}
.refresh-actions{display:flex;gap:8px;align-items:center}
button{cursor:pointer;font:inherit;color:inherit}
#syncNow,.seg button,.mini-btn{padding:6px 14px;border-radius:999px;border:1px solid var(--accent-line);background:var(--accent-soft);color:var(--accent);font-size:13px;font-weight:500;transition:background .15s,border-color .15s,color .15s}
#syncNow:hover,.seg button:hover,.mini-btn:hover{border-color:var(--accent);background:#faeac9}
#syncNow:disabled{opacity:.5;cursor:wait}
.mini-btn{padding:4px 11px;font-size:12px;background:#fff;border-color:var(--line-strong);color:var(--ink-secondary)}
.sync-bar{font-size:12px;color:var(--muted);margin-bottom:12px;min-height:18px}
.banner{padding:10px 14px;margin-bottom:14px;border-radius:10px;font-size:13px;border:1px solid var(--line);background:#fff}
.banner.warn{background:var(--warn-bg);border-color:#e0b4b1;color:var(--warn)}
.banner.notice{background:var(--notice-bg);border-color:#e6cf8f;color:var(--notice)}

/* 全局用户高亮浮层横幅 */
.selected-person-bar{position:sticky;top:10px;z-index:45;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 18px;margin-bottom:16px;border-radius:12px;background:linear-gradient(90deg,#fff9ec 0%,#fffdf8 100%);border:2px solid var(--accent);box-shadow:0 6px 20px rgba(155,106,22,.16)}
.sp-main{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sp-tag{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;background:var(--accent);color:#fff;letter-spacing:.03em}
.sp-name{font-size:15px;font-weight:700;color:var(--ink);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.sp-devs{font-size:12px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.sp-metrics{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.sp-pill{font-size:12px;padding:2px 9px;border-radius:999px;background:#fff;border:1px solid var(--accent-line);color:var(--ink-secondary);font-variant-numeric:tabular-nums}
.sp-pill strong{color:var(--accent)}
.sp-actions{display:flex;gap:6px;align-items:center}
.sp-clear-btn{padding:4px 12px;border-radius:999px;border:1px solid var(--accent);background:var(--accent);color:#fff;font-size:12px;font-weight:600}
.sp-clear-btn:hover{background:var(--accent-hover)}

/* 顶部 6 指标卡（带内嵌微图与分段进度条） */
.stats-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px;margin-bottom:16px}
.stat-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px;display:flex;flex-direction:column;gap:3px;box-shadow:0 1px 3px rgba(44,37,25,.03);transition:border-color .15s,box-shadow .15s;min-width:0}
.stat-card.has-user-highlight{border-color:var(--accent-line);box-shadow:0 2px 8px rgba(155,106,22,.08)}
.stat-card span{display:block;font-size:12px;color:var(--muted);font-weight:500}
.stat-card strong{font-size:25px;line-height:1.22;font-variant-numeric:tabular-nums;color:var(--ink)}
.stat-sub{display:block;font-size:11px;line-height:1.4;color:var(--muted);margin-top:1px;font-variant-numeric:tabular-nums}
.stat-user-hl{display:block;font-size:11px;line-height:1.35;color:var(--accent);background:var(--accent-soft);padding:2px 6px;border-radius:5px;margin-top:4px;font-weight:600;font-variant-numeric:tabular-nums}
.stat-vis{margin-top:auto;padding-top:7px;display:flex;flex-direction:column;gap:4px}
.stat-mini-bars{display:flex;align-items:flex-end;gap:2px;height:22px;padding:2px 4px;background:var(--soft);border-radius:6px;border:1px solid #ede6d6}
.stat-mini-bars i{flex:1;min-width:3px;border-radius:1.5px;background:#d6c5a5;transition:height .2s}
.stat-mini-bars i.is-peak{background:#d9822b}
.stat-mini-bars i.is-latest{background:var(--accent)}
.stat-seg-bar{display:flex;width:100%;height:7px;border-radius:999px;overflow:hidden;background:#ede7d9;gap:1px}
.stat-seg-bar i{display:block;height:100%;min-width:3px}
.stat-vis-meta{display:flex;justify-content:space-between;align-items:center;gap:4px;flex-wrap:wrap;font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}
.stat-vis-dot{display:inline-flex;align-items:center;gap:3px}
.stat-vis-dot b{display:inline-block;width:6px;height:6px;border-radius:50%}

/* 通用卡片 */
.card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px 22px;margin-bottom:16px;box-shadow:0 1px 4px rgba(44,37,25,.03)}
.card h2{margin:0 0 4px;font-size:17px;line-height:1.35}
.card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.head-controls{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.seg{display:inline-flex;border:1px solid var(--accent-line);border-radius:999px;overflow:hidden;background:#fff}
.seg button{border:none;border-radius:0;padding:5px 13px;background:transparent;font-size:12px}
.seg button+.seg button{border-left:1px solid var(--accent-line)}
.seg button.active{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.seg-range{border-color:var(--line-strong)}
.seg-range button{color:var(--ink-secondary)}
.seg-range button+.seg-range button{border-left-color:var(--line-strong)}
.seg-range button.active{background:var(--ink);color:#fff}
.note{margin:0;font-size:12px;color:var(--muted)}

/* 趋势图与图例 */
.chart-legend-bar{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;padding:7px 12px;margin-bottom:8px;background:var(--soft);border-radius:10px;border:1px solid var(--line)}
.chart-legend{display:flex;gap:14px;align-items:center;flex-wrap:wrap;font-size:12px;color:var(--ink-secondary)}
.leg-item{display:inline-flex;align-items:center;gap:5px}
.leg-box{display:inline-block;width:11px;height:11px;border-radius:3px}
.leg-open{background:#9b6a16}
.leg-people{background:#2b6cb0}
.leg-tokens{background:#6b46c1}
.leg-new{background:#e39a45}
.leg-wknd{background:#efe9dc;border:1px solid #d6c8b0}
.leg-line{display:inline-block;width:16px;height:2px;background:#2b6cb0;position:relative}
.leg-line::after{content:"";position:absolute;left:5px;top:-2px;width:6px;height:6px;border-radius:50%;background:#2b6cb0}
.leg-line.amber{background:#9b6a16}
.leg-line.amber::after{background:#9b6a16}
.leg-line.purple{background:#6b46c1}
.leg-line.purple::after{background:#6b46c1}
.leg-dash{display:inline-block;width:16px;height:0;border-top:2px dashed #8a8070}
.chart-wrap{position:relative;overflow-x:auto;padding-bottom:4px;width:100%}
.chart-wrap svg{display:block;width:100%;min-width:680px;height:auto}
.chart-wrap svg rect{cursor:pointer;transition:opacity .12s}
.chart-wrap svg rect:hover{opacity:.82}
.chart-info{font-size:12px;color:var(--ink-secondary);font-weight:500;font-variant-numeric:tabular-nums}

/* 近期每日访问卡片条（宽屏 14 列整行对齐） */
.sub-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;margin:12px 0 8px}
.sub-title{font-size:13px;font-weight:600;color:var(--ink)}
.sub-hint{font-size:12px;color:var(--muted)}
.daily-strip{display:grid;grid-template-columns:repeat(14,minmax(0,1fr));gap:8px}
.day-card{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 9px;border:1px solid var(--line);border-radius:10px;background:var(--soft);text-align:left;transition:border-color .15s,background .15s,box-shadow .15s,opacity .15s;min-width:0}
.day-card.is-weekend{background:#f5f0e5}
.day-card:hover{border-color:var(--accent-line);background:#fff}
.day-card.is-selected{border-color:var(--accent);background:var(--accent-soft);box-shadow:0 0 0 1px var(--accent)}
.day-card.is-user-active{border-color:var(--accent);background:#fff6e3;box-shadow:0 0 0 1.5px var(--accent)}
.day-card.is-user-dim{opacity:.42}
.day-card-top{display:flex;justify-content:space-between;width:100%;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.day-card-top b{font-weight:600;color:var(--ink-secondary)}
.day-card-bar{width:100%;height:5px;background:#e8e0cf;border-radius:999px;overflow:hidden;margin:3px 0}
.day-card-bar i{display:block;height:100%;background:var(--accent);border-radius:999px}
.day-card.metric-people .day-card-bar i{background:var(--teal)}
.day-card.metric-tokens .day-card-bar i{background:var(--purple)}
.day-card.has-new .day-card-bar i{background:#d9822b}
.day-card-num{font-size:16px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.2}
.day-card-num small{font-size:11px;font-weight:500;color:var(--muted);margin-left:2px}
.day-card-meta{font-size:11px;color:var(--ink-secondary);display:flex;gap:4px;align-items:center;flex-wrap:wrap}
.day-new-tag{color:#b85d10;font-weight:600}
.day-user-tag{color:#fff;background:var(--accent);padding:0 5px;border-radius:4px;font-size:10px;font-weight:600}

/* 单日访问透视面板与当日贡献条 */
.day-detail{margin-top:12px;padding:14px 16px;border:1px solid var(--line-strong);border-left:4px solid var(--accent);border-radius:12px;background:#fffdf9}
.day-detail-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.day-detail-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.day-detail-title strong{font-size:14px;color:var(--ink)}
.day-detail-badges{display:flex;gap:6px;flex-wrap:wrap}
.day-badge{font-size:12px;padding:2px 9px;border-radius:999px;background:var(--soft-2);color:var(--ink-secondary);font-variant-numeric:tabular-nums}
.day-badge.accent{background:var(--accent-soft);color:var(--accent);font-weight:600}
.day-detail-nav{display:flex;gap:6px;flex-wrap:wrap}
.day-contrib-wrap{margin-bottom:10px;padding:8px 10px;background:var(--soft);border:1px solid var(--line);border-radius:9px}
.day-contrib-head{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--muted);margin-bottom:5px}
.day-contrib-bar{display:flex;width:100%;height:10px;border-radius:999px;overflow:hidden;background:#e8e0cf;gap:1.5px}
.day-contrib-seg{height:100%;min-width:4px;cursor:pointer;transition:opacity .15s}
.day-contrib-seg:hover{opacity:.8}
.day-visitors{display:flex;flex-wrap:wrap;gap:7px}
.visitor-chip{position:relative;overflow:hidden;display:inline-flex;align-items:center;gap:6px;padding:5px 11px 7px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:12px;color:var(--ink);font-variant-numeric:tabular-nums;transition:all .15s}
.visitor-chip:hover{border-color:var(--accent);background:var(--accent-soft)}
.visitor-chip.is-highlighted{border-color:var(--accent);background:#fae5bc;box-shadow:0 0 0 1.5px var(--accent);font-weight:700}
.visitor-chip.is-dimmed{opacity:.55}
.visitor-rank{font-size:11px;color:var(--muted);font-family:ui-monospace,monospace}
.visitor-name{font-weight:600;color:var(--ink);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.visitor-count{font-weight:700;color:var(--accent)}
.visitor-pct{font-size:11px;color:var(--muted)}
.visitor-tok{font-size:11px;color:var(--teal);background:var(--teal-soft);padding:1px 6px;border-radius:4px}
.visitor-bar{position:absolute;left:0;bottom:0;height:2.5px;background:var(--accent);opacity:.65}

/* 三栏可视化看板（人群结构 / 模型与 Token 结构） */
.vis-three-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:12px 0 16px}
.vis-panel{padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--soft);display:flex;flex-direction:column;gap:10px;min-width:0}
.vis-panel-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap}
.vis-panel-title{font-size:13px;font-weight:700;color:var(--ink)}
.vis-panel-sub{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.vis-rows{display:flex;flex-direction:column;gap:8px}
.vis-row{display:flex;flex-direction:column;gap:3px;padding:6px 8px;border-radius:8px;background:#fff;border:1px solid #ede6d6;transition:border-color .15s,background .15s}
.vis-row.is-clickable{cursor:pointer}
.vis-row.is-clickable:hover{border-color:var(--accent-line);background:#fffdf8}
.vis-row.is-active{border-color:var(--accent);background:var(--accent-soft);box-shadow:0 0 0 1px var(--accent)}
.vis-row-top{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px;font-variant-numeric:tabular-nums}
.vis-row-label{display:inline-flex;align-items:center;gap:6px;font-weight:600;color:var(--ink);min-width:0}
.vis-row-label code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}
.vis-row-metrics{display:flex;gap:8px;align-items:center;font-size:11px;color:var(--ink-secondary);white-space:nowrap}
.vis-row-metrics strong{color:var(--accent);font-weight:700}
.vis-dual-bars{display:flex;flex-direction:column;gap:3px}
.vis-bar-track{width:100%;height:6px;background:#ece5d5;border-radius:999px;overflow:hidden;display:flex}
.vis-bar-fill{height:100%;border-radius:999px;transition:width .25s}
.vis-donut-layout{display:grid;grid-template-columns:116px minmax(0,1fr);gap:12px;align-items:center}
.vis-donut-svg{width:116px;height:116px;display:block;margin:0 auto}
.vis-mini-svg{width:100%;height:auto;display:block}

/* 使用者搜索与频率分层栏 */
.people-tools{display:flex;gap:8px;align-items:center}
.search-input{padding:6px 12px;border:1px solid var(--line-strong);border-radius:999px;background:var(--soft);font:inherit;font-size:13px;min-width:240px;color:var(--ink)}
.search-input:focus{background:#fff;border-color:var(--accent);outline:none}
.tier-bar{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0 12px}
.tier-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 13px;border-radius:10px;border:1px solid var(--line);background:var(--soft);font-size:12px;color:var(--ink-secondary);transition:all .15s}
.tier-btn strong{font-size:13px;color:var(--ink);font-variant-numeric:tabular-nums}
.tier-btn:hover{border-color:var(--accent-line);background:#fff}
.tier-btn.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}
.tier-btn.active strong{color:var(--accent)}

/* 个人每日访问热力矩阵（宽屏自适应铺满 + 完整显示 12 位 ID + 底部全站合计行） */
.matrix-wrap{padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--soft);margin-bottom:16px}
.matrix-wrap .sub-head{margin-top:0}
.matrix-actions{display:flex;gap:6px;flex-wrap:wrap}
.person-matrix-scroll{overflow-x:auto;padding-bottom:4px}
.matrix-table{border-collapse:separate;border-spacing:2px;font-size:11px;width:100%;min-width:920px}
.matrix-table th,.matrix-table td{padding:0;text-align:center;vertical-align:middle}
.matrix-table thead th{font-size:10px;color:var(--muted);font-weight:500;padding:3px 1px 5px;font-variant-numeric:tabular-nums;cursor:pointer}
.matrix-table thead th.is-weekend{color:#b85d10;font-weight:600}
.matrix-table thead th.is-selected-day{color:var(--accent);font-weight:700;text-decoration:underline}
.matrix-table{--mu:162px}
body.annotate-on .matrix-table{--mu:236px}
.matrix-table .m-user{position:sticky;left:0;z-index:2;background:var(--soft);text-align:left;padding:4px 10px 4px 6px;box-sizing:border-box;width:var(--mu);min-width:var(--mu);max-width:var(--mu);white-space:nowrap;font-weight:600;color:var(--ink);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;cursor:pointer;border-radius:4px}
.matrix-table tbody .m-user:hover{background:var(--accent-soft);color:var(--accent)}
.matrix-table .m-sum{position:sticky;left:var(--mu);z-index:2;background:var(--soft);text-align:right;padding:4px 8px 4px 4px;width:124px;min-width:124px;white-space:nowrap;color:var(--ink-secondary);font-variant-numeric:tabular-nums;font-size:11px;border-right:1px solid var(--line);cursor:pointer}
.matrix-table tbody tr.is-highlighted .m-user,.matrix-table tbody tr.is-highlighted .m-sum{background:#fae5bc;color:var(--ink);font-weight:700}
.matrix-table tbody tr.is-highlighted td.m-cell{box-shadow:inset 0 0 0 1.5px var(--accent)}
.matrix-table tbody tr.is-dimmed{opacity:.42}
.m-cell,.m-foot-cell{height:24px;min-width:22px;border-radius:4px;background:#ece6d8;color:var(--ink);font-size:10px;font-weight:600;line-height:24px;font-variant-numeric:tabular-nums;cursor:pointer;user-select:none}
.m-cell.empty-cell,.m-foot-cell.empty-cell{background:#f2eee4;color:transparent}
.m-cell.lv-1,.m-foot-cell.lv-1{background:rgba(155,106,22,.22);color:#5a3d09}
.m-cell.lv-2,.m-foot-cell.lv-2{background:rgba(155,106,22,.42);color:#3d2804}
.m-cell.lv-3,.m-foot-cell.lv-3{background:rgba(155,106,22,.68);color:#fff}
.m-cell.lv-4,.m-foot-cell.lv-4{background:rgba(155,106,22,.95);color:#fff}
.m-cell:hover,.m-foot-cell:hover{outline:1.5px solid var(--ink)}
.matrix-table tfoot td{border-top:1px dashed var(--line-strong);font-weight:700}
.matrix-table tfoot .m-user,.matrix-table tfoot .m-sum{background:#f4efe2;color:var(--ink);font-family:inherit}

/* 使用者明细表 */
.table-sub-head{margin-top:6px}
.table-scroll{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line-strong);background:var(--soft);white-space:nowrap;font-size:12px;color:var(--muted)}
td{padding:8px 10px;border-bottom:1px solid #f0ece2;vertical-align:middle;font-variant-numeric:tabular-nums}
#peopleTable tbody tr{cursor:pointer;transition:background .12s,opacity .12s}
tbody tr:hover{background:#fcfaf5}
tbody tr.is-highlighted{background:#fdf0d5!important;outline:2px solid var(--accent)}
tbody tr.is-dimmed{opacity:.52}
thead button{background:none;border:none;padding:0;font:inherit;color:var(--muted);white-space:nowrap;font-weight:600}
thead button.sorted{color:var(--accent)}
thead button:hover{color:var(--accent)}
.person{display:flex;align-items:center;gap:6px;white-space:nowrap;flex-wrap:wrap}
.alias-btn{min-width:116px;text-align:left;background:var(--accent-soft);border:1px dashed var(--accent-line);border-radius:6px;padding:2px 8px;color:var(--ink);font-size:13px;font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.alias-btn:hover{border-style:solid;background:#faeac9}
/* 人名：短名（设备登录用户名 / 别名）常显；「@主机名」只在悬浮时由 JS 定位的 fixed 浮层显示，不撑开布局、不被滚动容器裁切 */
.pname{font:inherit;color:inherit}
.pname[data-host]{text-decoration:underline dotted var(--accent-line);text-decoration-thickness:1px;text-underline-offset:3px}
.host-tip{position:fixed;left:0;top:0;z-index:1000;pointer-events:none;white-space:pre-line;max-width:min(380px,calc(100vw - 16px));overflow-wrap:anywhere;padding:1px 7px;border-radius:5px;background:var(--ink);color:#fff;font:600 12px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;box-shadow:0 2px 8px rgba(44,37,25,.25);animation:host-tip-in .12s ease-out}
.host-tip[hidden]{display:none}
@keyframes host-tip-in{from{opacity:0;transform:translateX(-3px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.host-tip{animation:none}}
.status{font-size:11px;padding:1px 7px;border-radius:999px;border:1px solid var(--line);color:var(--muted);font-weight:500}
.status-new{background:var(--ok-bg);border-color:#b9d6b2;color:var(--ok)}
.status-active{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent)}
.status-dormant{color:var(--muted);background:#f5f2eb}
.status-churned{background:var(--warn-bg);border-color:#e0b4b1;color:var(--warn)}
.tier-tag{font-size:10px;padding:1px 6px;border-radius:4px;background:var(--soft-2);color:var(--ink-secondary)}
.tier-tag.tier-core{background:#fef0d6;color:#8c5408;font-weight:600}
.tier-tag.tier-regular{background:var(--teal-soft);color:var(--teal)}
.devs{font-size:11px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;margin-top:2px;word-break:break-all}

/* 打开数列：保持 textContent 纯净，视觉进度条不带文本 */
.open-cell{min-width:108px}
.open-bar{display:block;width:100%;max-width:104px;height:5px;background:#ede7d9;border-radius:999px;overflow:hidden;margin-top:4px}
.open-bar i{display:block;height:100%;background:var(--accent);border-radius:999px}

.cell-primary{font-weight:600;color:var(--ink)}
.cell-sub{display:block;font-size:11px;color:var(--muted);margin-top:2px;white-space:nowrap}

/* 行内近 30 天迷你轨迹条 */
.spark-strip{display:inline-flex;align-items:flex-end;gap:2px;height:22px;padding:2px 5px;background:var(--soft);border:1px solid var(--line);border-radius:5px;vertical-align:middle}
.spark-bar{width:4px;background:#e5decb;border-radius:1px;min-height:2px}
.spark-bar.on{background:var(--accent)}
.spark-bar.high{background:#d9822b}

.recency-badge{display:inline-block;padding:1px 7px;border-radius:6px;font-size:12px;font-weight:600;background:var(--soft-2);color:var(--ink)}
.recency-badge.recent-hot{background:var(--ok-bg);color:var(--ok)}
.recency-badge.recent-warm{background:var(--accent-soft);color:var(--accent)}
.recency-badge.recent-cold{background:var(--warn-bg);color:var(--warn)}

/* 规律总结多列卡片网格 + 内嵌可视化占比条 */
.insights{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:12px}
.insights li{padding:11px 14px;border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:10px;background:#fbfaf7;font-size:13px;line-height:1.5;display:flex;flex-direction:column;gap:5px}
.insights li::before{content:attr(data-title);display:block;font-size:11px;font-weight:600;color:var(--accent);letter-spacing:.03em}
.insights li.notice{background:var(--notice-bg);border-color:#e6cf8f;border-left-color:#c88a14}
.insights li.notice::before{color:var(--notice)}
.insights li.warn{background:var(--warn-bg);border-color:#e0b4b1;border-left-color:var(--warn)}
.insights li.warn::before{color:var(--warn)}
.insight-meter{width:100%;height:5px;background:#e8e0cf;border-radius:999px;overflow:hidden;margin-top:2px}
.insight-meter i{display:block;height:100%;background:var(--accent);border-radius:999px}
.insights li.warn .insight-meter i{background:var(--warn)}
.insights li.notice .insight-meter i{background:#c88a14}
.insight-users{display:flex;gap:6px;flex-wrap:wrap;margin-top:2px}
.insight-user-chip{padding:1px 8px;border-radius:999px;border:1px solid var(--accent-line);background:#fff;font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--accent);font-weight:600}
.insight-user-chip:hover,.insight-user-chip.is-highlighted{background:var(--accent);color:#fff}

/* 活跃时段四大区间概览条 + 独立宽屏 7x24 热力图 */
.heatmap-summary-bar{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:10px 0 14px}
.heat-period-card{padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:var(--soft);display:flex;flex-direction:column;gap:4px}
.heat-period-top{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--ink-secondary);font-weight:600}
.heat-period-val{display:flex;align-items:baseline;gap:6px;font-variant-numeric:tabular-nums}
.heat-period-val strong{font-size:18px;color:var(--ink)}
.heat-period-val small{font-size:11px;color:var(--muted)}
.heatmap{overflow-x:auto;margin-top:8px}
.heat-grid{display:grid;grid-template-columns:48px repeat(24,minmax(30px,1fr)) 92px;gap:4px;min-width:820px}
.heat-grid span{font-size:11px;color:var(--muted);display:flex;align-items:center}
.heat-grid span.tick{justify-content:center}
.heat-grid span.tick.is-user-hour{color:var(--accent);font-weight:700;background:var(--accent-soft);border-radius:4px}
.heat-grid span.row-sum{justify-content:flex-end;gap:6px;padding-right:4px;font-variant-numeric:tabular-nums;font-weight:600;color:var(--ink-secondary)}
.row-sum-bar{width:38px;height:6px;background:#ece5d5;border-radius:999px;overflow:hidden;flex-shrink:0}
.row-sum-bar i{display:block;height:100%;background:var(--accent);border-radius:999px}
.cell{height:30px;border-radius:5px;background:#f0ece2;position:relative;justify-content:center;font-variant-numeric:tabular-nums;transition:transform .1s,box-shadow .1s}
.cell[data-count]::before{content:attr(data-count);font-size:11px;font-weight:600;color:var(--cell-ink,#3d2804);line-height:1}
.cell.is-user-hour{box-shadow:inset 0 0 0 2px var(--accent)}
.cell:hover{outline:1.5px solid var(--accent)}
.cell::after{content:attr(title);display:none}
.hour-bars-row{margin-top:6px;padding-top:6px;border-top:1px dashed var(--line)}
.hour-col-box{flex-direction:column;justify-content:flex-end;gap:3px;height:42px}
.hour-col-track{width:100%;max-width:18px;height:22px;background:#ece5d5;border-radius:3px;display:flex;align-items:flex-end;overflow:hidden}
.hour-col-fill{width:100%;background:var(--accent);border-radius:3px}
.hour-col-num{font-size:10px;line-height:1;color:var(--ink-secondary);font-variant-numeric:tabular-nums}

/* 模型表内嵌进度条 */
.model-bar-wrap{display:block;width:100%;max-width:110px;height:5px;background:#ede7d9;border-radius:999px;overflow:hidden;margin-top:4px}
.model-bar-wrap i{display:block;height:100%;border-radius:999px;background:var(--accent)}
.model-bar-wrap.teal i{background:var(--teal)}
.model-comp-mini{display:flex;width:100%;max-width:140px;height:6px;border-radius:999px;overflow:hidden;background:#ede7d9;gap:1px;margin-top:4px}
.model-comp-mini i{display:block;height:100%}

.empty{color:var(--muted);font-size:13px;padding:12px 0;text-align:center}
.foot{text-align:center;font-size:12px;color:var(--muted);margin-top:12px}
.day-live-tag{color:var(--teal);background:var(--teal-soft);padding:0 5px;border-radius:4px;font-size:10px;font-weight:600}

/* ---- 标注模式：开关、状态条、人名旁 ✎、编辑浮层（关闭时这些都不出现，页面即原样） ---- */
.annotate-switch{display:inline-flex;align-items:center;gap:8px;padding:5px 12px 5px 7px;border-radius:999px;border:1px solid var(--line-strong);background:#fff;color:var(--ink-secondary);font-size:13px;font-weight:500;cursor:pointer;transition:border-color .15s,background .15s,color .15s}
.annotate-switch:hover{border-color:var(--accent-line)}
.annotate-switch-track{position:relative;flex:none;width:30px;height:18px;border-radius:999px;background:#d9d1c1;transition:background .15s}
.annotate-switch-track i{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(44,37,25,.3);transition:transform .15s}
.annotate-switch.is-on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent);font-weight:600}
.annotate-switch.is-on .annotate-switch-track{background:var(--accent)}
.annotate-switch.is-on .annotate-switch-track i{transform:translateX(12px)}
.annotate-count{font-size:11px;font-weight:500;color:var(--muted);font-variant-numeric:tabular-nums}
.annotate-count:empty{display:none}
@media (prefers-reduced-motion:reduce){.annotate-switch-track,.annotate-switch-track i{transition:none}}
.annotate-bar{display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;padding:8px 14px;margin-bottom:14px;border-radius:10px;border:1px dashed var(--accent-line);background:#fffaf0;font-size:12px;color:var(--ink-secondary)}
.annotate-bar[hidden]{display:none}
.annotate-bar-tag{font-weight:700;color:var(--accent);white-space:nowrap}
.annotate-bar-text{flex:1 1 380px;min-width:0}
.annotate-bar-actions{display:flex;gap:6px;flex-wrap:wrap}
.annotate-status{color:var(--ok);font-weight:600}
.annotate-status:empty{display:none}
.mini-btn[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:#fff}
.mini-btn:disabled{opacity:.5;cursor:default}
.tier-btn.tier-annotate{border-style:dashed;border-color:var(--accent-line);background:#fffaf0}
.tier-btn.tier-annotate.active{border-style:solid}

.ann-edit{flex:none;width:20px;height:20px;padding:0;border-radius:5px;border:1px dashed var(--accent-line);background:#fff;color:var(--accent);font:600 12px/18px -apple-system,BlinkMacSystemFont,sans-serif;text-align:center;cursor:pointer;transition:background .12s,color .12s}
.ann-edit.has-ann{border-style:solid;background:var(--accent-soft)}
.ann-edit:hover,.ann-edit:focus-visible,.ann-edit.has-ann:hover,.ann-edit.has-ann:focus-visible{border-style:solid;background:var(--accent);color:#fff}
.pname.is-annotated{color:var(--accent-hover)}
.m-user-inner{display:flex;align-items:center;gap:5px;min-width:0;overflow:hidden}
.m-user-inner .pname{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.m-note{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:400 11px/1.4 -apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif;color:var(--muted)}
.name-box{display:inline-block;min-width:116px;padding:2px 8px;border:1px solid transparent;border-radius:6px;background:var(--soft);font-size:13px;font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.alias-btn{display:inline-flex;align-items:center;gap:5px}
.alias-btn-ico{font:600 11px/1 -apple-system,BlinkMacSystemFont,sans-serif;color:var(--accent)}
.alias-btn.has-ann{border-style:solid}
.ann-note{font-size:12px;color:var(--accent-hover);margin-top:3px;max-width:340px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sp-note{font-size:12px;color:var(--accent-hover);background:#fff;border:1px dashed var(--accent-line);border-radius:6px;padding:1px 8px;max-width:420px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.annotate-editor{position:fixed;left:0;top:0;z-index:1100;box-sizing:border-box;width:min(420px,calc(100vw - 24px));margin:0;padding:14px 16px 12px;border-radius:14px;border:1px solid var(--accent-line);background:#fff;box-shadow:0 14px 40px rgba(44,37,25,.22);display:flex;flex-direction:column;gap:9px}
.annotate-editor[hidden]{display:none}
.annotate-editor.is-sheet{left:12px;right:12px;top:auto;bottom:12px;width:auto}
.ae-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.ae-head strong{font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ae-close{border:none;background:none;font-size:18px;line-height:1;color:var(--muted);cursor:pointer;padding:2px 7px;border-radius:6px}
.ae-close:hover{background:var(--soft-2);color:var(--ink)}
.ae-meta{margin:0;padding:6px 8px;border-radius:8px;background:var(--soft);font:11px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted);overflow-wrap:break-word}
.ae-field{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:600;color:var(--ink-secondary)}
.ae-field small{font-weight:400;color:var(--muted)}
.ae-field input,.ae-field textarea{font:inherit;font-size:13px;font-weight:400;color:var(--ink);padding:6px 9px;border:1px solid var(--line-strong);border-radius:8px;background:var(--soft);resize:vertical}
.ae-field input:focus,.ae-field textarea:focus{outline:none;border-color:var(--accent);background:#fff;box-shadow:0 0 0 3px rgba(155,106,22,.14)}
.ae-error{margin:0;padding:5px 8px;border-radius:6px;background:var(--warn-bg);color:var(--warn);font-size:12px}
.ae-error[hidden]{display:none}
.ae-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ae-spacer{flex:1}
.ae-clear{color:var(--warn);border-color:#e0b4b1}
.ae-clear.is-armed{background:var(--warn);border-color:var(--warn);color:#fff}
.ae-save{padding:5px 16px;border-radius:999px;border:1px solid var(--accent);background:var(--accent);color:#fff;font-size:13px;font-weight:600;cursor:pointer}
.ae-save:hover{background:var(--accent-hover)}
.annotate-editor button:disabled{opacity:.55;cursor:default}

/* ---- 用户盘子与新用户留存 ---- */
.ret-stats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin:4px 0 14px}
.ret-stat{display:flex;flex-direction:column;gap:2px;min-width:0;padding:10px 12px;border-radius:12px;border:1px solid var(--line);background:var(--soft);text-align:left;font:inherit;color:inherit}
.ret-stat.is-clickable{cursor:pointer;transition:border-color .15s,background .15s}
.ret-stat.is-clickable:hover{border-color:var(--accent);background:#fff}
.ret-stat-label{font-size:12px;color:var(--muted);font-weight:500}
.ret-stat strong{font-size:21px;line-height:1.25;color:var(--ink);font-variant-numeric:tabular-nums}
.ret-stat small{font-size:11px;line-height:1.4;color:var(--muted);font-variant-numeric:tabular-nums}
.ret-stat small.sub-up{color:var(--ok);font-weight:600}
.ret-stat small.sub-down{color:var(--warn);font-weight:600}
.ret-stat.tone-good{border-color:#b9d6b2;background:var(--ok-bg)}
.ret-stat.tone-warn{border-color:#e6cf8f;background:var(--notice-bg)}
.ret-stat.tone-warn strong{color:var(--notice)}
.retention-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:14px}
.ab-chart{width:100%;min-height:236px;overflow:hidden}
.ab-svg{display:block}
.ab-hit{cursor:pointer}
.ab-hit:hover{fill:rgba(155,106,22,.07)}
.cohort-scroll{overflow-x:auto;padding-bottom:2px}
.cohort-table{border-collapse:separate;border-spacing:2px;width:100%;font-size:11px;font-variant-numeric:tabular-nums}
.cohort-table th{padding:3px 4px;font-size:10px;font-weight:500;color:var(--muted);background:none;border:none;text-align:center;white-space:nowrap}
.cohort-table th:first-child{text-align:left}
.cohort-table td{padding:0;border:none;text-align:center;height:24px}
.cohort-table tbody tr{cursor:pointer}
.cohort-table tbody tr:hover{background:none}
.cohort-table tbody tr:hover .ch-week{color:var(--accent)}
.cohort-table .ch-week{text-align:left;padding:0 8px 0 4px;white-space:nowrap;font-weight:600;color:var(--ink);background:var(--soft);border-radius:4px}
.cohort-table .ch-censored{margin-left:4px;padding:0 4px;border-radius:3px;background:var(--soft-2);color:var(--muted);font-size:10px;font-weight:500}
.cohort-table .ch-size{color:var(--ink-secondary);background:var(--soft);border-radius:4px;min-width:30px}
.cohort-table .ch-cell{min-width:38px;border-radius:4px;font-weight:600;color:#3d2804}
.cohort-table .ch-k0{background:#f2eee4;color:var(--muted);font-weight:500}
.cohort-table .ch-na{background:none}
.cohort-table .ch-cell.is-partial{outline:1.5px dashed var(--accent-line);outline-offset:-2px;opacity:.75}
.cohort-table .ch-cell.has-hp{box-shadow:inset 0 0 0 2px #b85d10}
.cohort-table tbody tr.is-highlighted .ch-week,.cohort-table tbody tr.is-highlighted .ch-size{background:#fae5bc}
.cohort-table tbody tr.is-active .ch-week{background:var(--accent);color:#fff}
.cohort-table tfoot td{border-top:1px dashed var(--line-strong)}
.cohort-table .ch-avg{background:#f4efe2;color:var(--ink);font-weight:700}
.rhythm-badge{display:inline-block;margin-left:5px;padding:1px 6px;border-radius:6px;font-size:11px;font-weight:700;background:var(--notice-bg);color:var(--notice);border:1px solid #e6cf8f}
.sp-pill.sp-pill-warn{border-color:#e6cf8f;background:var(--notice-bg);color:var(--notice);font-weight:600}
.insight-more-chip{padding:1px 9px;border-radius:999px;border:1px dashed var(--accent-line);background:var(--accent-soft);font-size:11px;font-weight:600;color:var(--accent);cursor:pointer}
.insight-more-chip:hover{border-style:solid}
@media(max-width:1360px){.ret-stats{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:1100px){.retention-grid{grid-template-columns:minmax(0,1fr)}}
@media(max-width:600px){.ret-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.ret-stat strong{font-size:18px}}
:focus-visible{outline:2px solid #b86a0a;outline-offset:2px}

@media(max-width:1360px){
  .daily-strip{grid-template-columns:repeat(7,minmax(0,1fr))}
  .vis-three-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:1100px){
  .stats-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .heatmap-summary-bar{grid-template-columns:repeat(3,minmax(0,1fr))}
  .vis-three-grid{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:600px){
  main{padding:14px 10px 30px}
  .topbar{padding:10px 12px;gap:8px;font-size:12px}
  .stats-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .stat-card{padding:10px 12px}
  .stat-card strong{font-size:20px}
  .card{padding:14px 12px}
  .search-input{min-width:0;width:100%}
  .people-tools{width:100%}
  .daily-strip{grid-template-columns:repeat(auto-fill,minmax(70px,1fr))}
  .heatmap-summary-bar{grid-template-columns:repeat(2,minmax(0,1fr))}
  .insights{grid-template-columns:minmax(0,1fr)}
  .heat-grid{grid-template-columns:36px repeat(24,minmax(20px,1fr)) 46px;gap:2px}
  .row-sum-bar{display:none}
}
