:root{--ink:#0f172a;--muted:#64748b;--line:#e2e8f0;--surface:#fff;--canvas:#f1f5f9;--canvas-2:#f8fafc;--blue:#2563eb;--blue-dark:#1d4ed8;--blue-soft:#eff6ff;--green:#059669;--green-soft:#ecfdf5;--red:#dc2626;--red-soft:#fef2f2;--amber:#d97706;--shadow:0 1px 2px rgba(15,23,42,.05),0 12px 40px rgba(15,23,42,.08);--radius:14px;--radius-sm:10px}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--canvas);color:var(--ink);font:15px/1.55 "PingFang SC","Microsoft YaHei",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
/* 全站链接各交互状态统一无下划线，保留原有颜色和焦点提示。 */
a,a:hover,a:focus,a:active,a:visited{text-decoration:none}
.app-page{min-height:100vh}
.app-shell{display:flex;flex-direction:column;min-height:100vh}
.topbar{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.96);backdrop-filter:saturate(180%) blur(14px);border-bottom:1px solid rgba(226,232,240,.9);box-shadow:0 3px 18px rgba(15,23,42,.045)}
.topbar-inner{width:100%;min-height:68px;padding:0 28px;display:flex;align-items:stretch;gap:24px}
.topbar-leading{display:flex;align-items:center;gap:12px;flex-shrink:0}
.brand{display:flex;align-items:center;gap:10px;color:var(--ink);text-decoration:none;min-width:0}
.brand-text{display:flex;flex-direction:column;line-height:1.2;min-width:0}.brand-text strong{font-size:15px;letter-spacing:-.25px}.brand-text small{font-size:10px;color:var(--muted);font-weight:600;margin-top:3px}
.top-nav{display:flex;align-items:stretch;gap:3px;min-width:0}
.top-nav-link{position:relative;display:flex;align-items:center;gap:7px;padding:0 13px;color:#475569;text-decoration:none;font-weight:650;font-size:13px;white-space:nowrap;transition:color .15s,background .15s}
.top-nav-link::after{content:"";position:absolute;left:13px;right:13px;bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--blue);opacity:0;transform:scaleX(.55);transition:opacity .15s,transform .15s}
.top-nav-link:hover{color:var(--blue);background:linear-gradient(180deg,transparent,rgba(239,246,255,.75))}
.top-nav-link.is-active{color:var(--blue);font-weight:800;background:linear-gradient(180deg,transparent,rgba(239,246,255,.9))}.top-nav-link.is-active::after{opacity:1;transform:scaleX(1)}
.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:8px;flex-shrink:0}
.current-page{display:none}
.release-meta{display:flex;align-items:center;gap:5px;padding:7px 10px;border:1px solid #dbeafe;border-radius:9px;background:var(--blue-soft);color:var(--blue);font:inherit;font-size:11px;line-height:1;cursor:pointer;white-space:nowrap}.release-meta:hover,.release-meta:focus-visible{border-color:#93c5fd;background:#dbeafe;outline:none}.release-meta strong{font-size:12px}
.topbar-logout{display:flex;align-items:center;gap:6px;padding:8px 10px;border-radius:9px;color:#64748b;text-decoration:none;font-size:12px;font-weight:700;white-space:nowrap}.topbar-logout:hover{background:var(--red-soft);color:var(--red)}
.top-nav-toggle{display:none;width:40px;height:40px;padding:9px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:pointer}
.app-main{flex:1;min-width:0;display:flex;flex-direction:column;background:radial-gradient(ellipse 120% 80% at 100% -20%,rgba(191,219,254,.35),transparent 50%),radial-gradient(ellipse 80% 60% at 0% 0%,rgba(199,210,254,.25),transparent 45%),linear-gradient(180deg,#eef2ff 0,var(--canvas) 220px)}
.page-shell{flex:1;margin:0 auto;padding:28px 32px 40px;width:100%;max-width:1680px}
/* 切页时保留清晰的旧数据并明确提示加载；分页仍可选择末次目标，旧行操作暂时禁用。 */
#admin-page-root.is-loading{cursor:progress}
#admin-page-root.is-loading .data-table,#admin-page-root.is-loading .filter-form{pointer-events:none}
#admin-page-root.is-loading::before{content:"";position:fixed;z-index:45;top:68px;left:0;width:100%;height:3px;background:linear-gradient(90deg,transparent 0%,var(--blue) 45%,transparent 90%);background-size:45% 100%;background-repeat:no-repeat;animation:adminLoadingProgress 1.1s linear infinite}
#admin-page-root.is-loading::after{content:"正在加载，当前显示上次结果…";position:fixed;z-index:45;top:80px;right:24px;max-width:calc(100vw - 32px);padding:8px 14px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--blue);box-shadow:var(--shadow);font-size:13px;pointer-events:none}
@keyframes adminLoadingProgress{from{background-position:-80% 0}to{background-position:180% 0}}
#admin-page-root.is-enter{animation:adminPageIn .18s ease}
@keyframes adminPageIn{from{opacity:.65;transform:translateY(3px)}to{opacity:1;transform:none}}
.page-header{margin-bottom:22px;display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px 20px}
.page-eyebrow{margin:0 0 5px;color:var(--blue);font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.page-header h1{display:none}
.page-desc{margin:0 0 0;color:var(--muted);font-size:14px;max-width:60ch;line-height:1.6}
.page-desc a{color:var(--blue);font-weight:700;text-decoration:none}.page-desc a:hover{text-decoration:none}
.panel{background:var(--surface);border:1px solid rgba(226,232,240,.95);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:18px;overflow:hidden}
.panel-head{padding:15px 20px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#fff,#f8fafc);display:flex;align-items:center;justify-content:space-between;gap:12px}
.panel-head h2{margin:0;font-size:14px;font-weight:700;letter-spacing:-.2px}
.panel-head span{font-size:12px;color:var(--muted);font-weight:600}
.panel-form{padding:14px 18px;display:flex;flex-wrap:wrap;gap:10px;align-items:center;background:#fafbff}
.panel-form input,.panel-form select{flex:0 1 auto;width:auto;min-width:120px;max-width:200px;padding:8px 11px;font-size:13px}
.panel-form .input-remark{flex:1 1 140px;max-width:260px;min-width:100px}
.panel-form .input-ratio{width:72px;min-width:72px;max-width:72px;flex:0 0 72px;text-align:center}
.panel-form .btn{flex:0 0 auto;padding:8px 16px;font-size:13px;white-space:nowrap;margin-left:auto}
.panel-form .ratio-hint{font-size:11px;color:var(--muted);white-space:nowrap;flex:0 0 auto}
/* 所有列表、教程和弹窗复用同一轻量表格，字段与业务操作保持原有语义。 */
.data-table{width:100%;border-collapse:collapse;font-size:13px;color:#64748b}
.data-table th,.data-table td{padding:15px 12px;height:56px;text-align:left;border-bottom:1px solid #f0f2f5;vertical-align:middle;font-size:13px;font-weight:400}
.data-table th{height:46px;padding:12px;background:#f3f5f8;color:#465365;font-weight:600;white-space:nowrap}
.data-table tbody tr{transition:background .12s}.data-table tbody tr:hover{background:#f8fbff}
.data-table tbody tr:last-child td{border-bottom:0}
.cell-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;color:#334155;word-break:break-all}
.cell-muted{color:var(--muted);font-size:13px}
.cell-truncate{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.badge{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.01em}
.badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.85}
.badge--ok{background:var(--green-soft);color:var(--green)}.badge--off{background:#f1f5f9;color:#64748b}
.badge--amber{background:#fffbeb;color:var(--amber)}.badge--danger{background:var(--red-soft);color:var(--red)}
.badge--blue{background:var(--blue-soft);color:var(--blue)}
.response-pre{margin:0;padding:14px 16px;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre-wrap;word-break:break-all;color:#334155;max-height:320px;overflow:auto;background:#f8fafc}
.inline-form{display:flex;align-items:center;gap:8px;margin:0;flex-wrap:wrap}
.inline-form input{width:88px;padding:8px 10px}
.inline-form button{padding:8px 14px;font-size:12px}
.btn{border:0;border-radius:var(--radius-sm);padding:10px 16px;background:linear-gradient(180deg,#3b82f6,var(--blue));color:#fff;font:700 13px inherit;cursor:pointer;box-shadow:0 6px 16px rgba(37,99,235,.25);transition:transform .12s,box-shadow .12s,filter .12s}
.btn--sm{padding:6px 12px;font-size:12px;box-shadow:0 3px 10px rgba(37,99,235,.2)}
.btn:hover{filter:brightness(1.05);transform:translateY(-1px)}.btn:active{transform:translateY(0)}
.btn--ghost{background:#fff;color:var(--ink);box-shadow:inset 0 0 0 1px var(--line);font-weight:600}
.btn--danger{background:#fff;color:var(--red);box-shadow:inset 0 0 0 1px #fecaca;font-weight:600}
.btn--danger:hover{background:var(--red-soft);filter:none;transform:none}
.row-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
input,select{border:1px solid #cbd5e1;border-radius:var(--radius-sm);padding:10px 12px;background:#fff;color:var(--ink);font:inherit;outline:none;transition:border-color .15s,box-shadow .15s}
input::placeholder{color:#94a3b8}input:focus,select:focus{border-color:#93c5fd;box-shadow:0 0 0 4px rgba(37,99,235,.12)}
.embed-card{padding:18px 22px;display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;background:linear-gradient(135deg,#f8fafc 0%,#eff6ff 100%);border:1px dashed rgba(37,99,235,.2)}
.embed-card p{margin:0;color:var(--muted);font-size:13px;flex:1 1 200px}
code{background:#e2e8f0;border-radius:6px;padding:4px 8px;color:#1e293b;font-size:12px;word-break:break-all}
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;min-width:0}
.table-scroll--visitor{overflow:auto;overscroll-behavior:contain}
.table-scroll--visitor .data-table thead th{position:sticky;top:0;z-index:2;background:#f3f5f8}
.ratio-hint{font-size:12px;color:var(--muted);white-space:nowrap}
.empty-row td{padding:32px 18px;text-align:center;color:var(--muted);font-size:14px}
.modal-overlay{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(15,23,42,.5);opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s}
.modal-overlay.is-open{opacity:1;visibility:visible}
.modal{width:min(640px,calc(100% - 24px));max-height:min(80vh,520px);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 24px 64px rgba(15,23,42,.25);display:flex;flex-direction:column;overflow:hidden}
.modal-head{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px;background:linear-gradient(180deg,#fff,#fafbff)}
.modal-head h3{margin:0;font-size:16px;letter-spacing:-.3px}
.modal-close{border:0;background:transparent;color:var(--muted);font-size:22px;line-height:1;cursor:pointer;padding:4px 8px;border-radius:8px}
.modal-close:hover{background:#f1f5f9;color:var(--ink)}
.modal-body{padding:0 0 8px;overflow:auto;flex:1}
.modal-meta{margin:0;padding:12px 20px;font-size:13px;color:var(--muted);border-bottom:1px solid var(--line);background:#f8fafc}
.modal-meta strong{color:var(--ink)}
.modal-foot{padding:12px 20px;border-top:1px solid var(--line);font-size:13px;min-height:44px;color:var(--muted)}
.modal--form{width:min(480px,calc(100% - 24px))}
.modal--release{width:min(760px,calc(100% - 24px));max-height:min(86vh,760px)}
.release-log-list{padding:18px 20px;display:grid;gap:14px;background:#f8fafc}
.release-log-item{padding:16px;border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:0 4px 14px rgba(15,23,42,.04)}
.release-log-item header{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.release-log-item header strong{font-size:14px}.release-log-item time{margin-left:auto;font-size:12px;color:var(--muted)}
.release-log-item ul{margin:12px 0;padding-left:20px;color:var(--ink);font-size:13px;line-height:1.7}.release-log-item p{margin:0;color:var(--muted);font-size:11px;overflow-wrap:anywhere}
.modal-form{display:flex;flex-direction:column;min-height:0;flex:1}
.modal-form-fields{padding:20px;display:grid;gap:14px;overflow:auto}
.modal-form-fields label{display:grid;gap:6px;font-size:12px;font-weight:700;color:var(--muted)}
.modal-form-fields label[hidden]{display:none}
.modal-form-fields input,.modal-form-fields select{width:100%;max-width:none;min-width:0}
.modal-form-fields .field-hint{font-size:12px;font-weight:500;color:var(--muted);margin:0}
.modal-form-foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:10px;background:#fafbff}
.panel-head .btn--sm{margin:0}
.panel-alert{margin:0;padding:12px 20px;background:var(--red-soft);color:var(--red);font-size:13px;border-bottom:1px solid #fecaca}
.panel-alert code{background:rgba(255,255,255,.6)}
.manual-return-notice{margin-bottom:18px;border:1px solid #fecaca;border-radius:var(--radius-sm)}
.panel-alert--success{border-color:#a7f3d0;background:var(--green-soft);color:var(--green)}
.token-pick-row.is-disabled{opacity:.55}.token-pick-row.is-disabled .btn{cursor:not-allowed;filter:grayscale(.3)}
.dict-desc{margin:0;padding:12px 20px 0;font-size:13px;color:var(--muted)}
.login-page{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 15% -10%,#bfdbfe 0,transparent 42%),radial-gradient(circle at 90% 0%,#c7d2fe 0,transparent 38%),linear-gradient(180deg,#eef2ff,#f1f5f9)}
.login-wrap{width:min(440px,calc(100% - 32px));margin:auto;padding:24px 0}
.login-card{background:var(--surface);border:1px solid var(--line);border-radius:20px;box-shadow:0 24px 64px rgba(15,23,42,.12);overflow:hidden}
.login-hero{padding:32px 32px 24px;background:linear-gradient(145deg,#1e3a8a 0,#2563eb 55%,#3b82f6 100%);color:#fff}
.login-hero h1{margin:0 0 8px;font-size:24px;letter-spacing:-.5px}.login-hero p{margin:0;opacity:.88;font-size:14px}
.login-alert{margin:0;padding:12px 32px;background:var(--red-soft);color:var(--red);font-size:13px;font-weight:600;border-bottom:1px solid #fecaca}
.login-form{padding:28px 32px 32px;display:grid;gap:14px}.login-form label{font-size:12px;font-weight:700;color:var(--muted);display:grid;gap:6px}
.login-form input{width:100%}.login-form button{width:100%;margin-top:6px;padding:12px}
.login-remember{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--ink);cursor:pointer;user-select:none}
.login-remember input{width:auto;margin:0;accent-color:var(--blue)}
.guide-layout{display:grid;grid-template-columns:minmax(200px,220px) minmax(0,1fr);gap:18px;align-items:start;margin-bottom:8px}
.guide-main{display:grid;gap:18px;min-width:0}
.guide-toc{position:sticky;top:12px}
.guide-toc-list{margin:0;padding:12px 16px 16px 28px;display:grid;gap:6px;font-size:13px;font-weight:600}
.guide-toc-list a{color:var(--muted);text-decoration:none;padding:4px 0;border-radius:4px;transition:color .15s}
.guide-toc-list a:hover{color:var(--blue)}
.guide-toc-list a.is-active{color:var(--blue);font-weight:800}
.guide-section .guide-prose{padding:4px 20px 20px;font-size:14px;color:var(--ink);line-height:1.65}
.guide-step-cards{display:grid;gap:12px}
.guide-step-card{display:flex;gap:14px;align-items:flex-start;padding:14px 16px;border:1px solid var(--line);border-radius:var(--radius-sm);background:linear-gradient(180deg,#fff,#f8fafc)}
.guide-step-card p{margin:4px 0 0;font-size:13px;color:var(--muted);line-height:1.55}
.guide-step-card strong{font-size:14px;color:var(--ink)}
.guide-step-num{flex-shrink:0;width:32px;height:32px;border-radius:10px;background:var(--blue-soft);color:var(--blue);font-weight:800;font-size:14px;display:grid;place-items:center}
.guide-steps{margin:0 0 12px;padding-left:1.25rem;display:grid;gap:8px}
.guide-h3{margin:20px 0 8px;font-size:15px;font-weight:700}
.guide-tip{margin:12px 0 0;padding:12px 14px;background:var(--blue-soft);border-radius:var(--radius-sm);border:1px solid #bfdbfe;font-size:13px}
.guide-warn{margin:12px 0 0;padding:12px 14px;background:#fffbeb;border-radius:var(--radius-sm);border:1px solid #fde68a;font-size:13px;color:#92400e}
.guide-code-block{position:relative;margin:12px 0;background:#0f172a;border-radius:var(--radius-sm);padding:14px 14px 48px;overflow:auto}
.guide-code{margin:0;font-family:ui-monospace,"Cascadia Code",Consolas,monospace;font-size:12px;line-height:1.55;color:#e2e8f0;white-space:pre-wrap;word-break:break-all}
.guide-code-block .guide-copy{position:absolute;right:10px;bottom:10px}
.guide-faq{margin:0;padding:8px 20px 20px;display:grid;gap:14px}
.guide-faq dt{font-weight:700;font-size:14px;color:var(--ink)}
.guide-faq dd{margin:4px 0 0;font-size:13px;color:var(--muted);line-height:1.6}
@media (max-width:900px){.guide-layout{grid-template-columns:1fr}.guide-toc{position:static}}
.demo-panel-body{padding:16px 20px 20px;display:grid;gap:16px}
.demo-status p{margin:0 0 6px;font-size:14px}
.demo-form-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.demo-form-grid label{font-size:12px;font-weight:700;color:var(--muted);display:grid;gap:6px}
.demo-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.demo-quick-label{font-size:13px;color:var(--muted);font-weight:600}
.demo-result{margin:0;font-size:13px;min-height:1.25em}
.demo-result--ok{color:var(--green);font-weight:600}
.demo-result--err{color:var(--red);font-weight:600}
.demo-more-link{margin:0;padding:0 20px 16px;font-size:13px}
.filter-form{padding:15px 20px 16px;background:linear-gradient(180deg,#fff,#fbfdff)}
.filter-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px 14px;margin-bottom:13px}
.filter-grid label{display:grid;gap:6px;font-size:12px;font-weight:700;color:var(--muted)}
.filter-grid input,.filter-grid select{width:100%;min-width:0;padding:8px 11px;font-size:13px}
.filter-actions{display:flex;gap:10px;flex-wrap:wrap}
.behavior-filter-panel{margin-bottom:10px}.filter-form--compact{display:flex;align-items:end;gap:10px;padding:10px 12px}.filter-form--compact .filter-grid{flex:0 1 auto;grid-template-columns:170px 100px 185px 145px minmax(170px,220px);gap:8px;margin:0}.filter-form--compact .filter-grid label{gap:3px;font-size:11px}.filter-form--compact .filter-grid input{padding:6px 9px}.filter-form--compact .filter-actions{flex-wrap:nowrap;gap:6px}.filter-form--compact .btn{white-space:nowrap}
/* 回传筛选复用紧凑布局；范围保留完整日期宽度，操作按钮允许换行。 */
.return-filter-form{flex-wrap:wrap}
.filter-form--compact .return-filter-grid{flex:1 1 700px;grid-template-columns:minmax(230px,1.1fr) minmax(220px,1.4fr) minmax(165px,1fr) minmax(110px,.6fr)}
.return-filter-form .filter-grid select{padding:6px 9px}
@media(max-width:600px){.return-filter-form.filter-form--compact .return-filter-grid{grid-template-columns:minmax(0,1fr)}}
.data-table--returns{min-width:2020px}
.data-table--returns th:nth-child(-n+3),.data-table--returns td:nth-child(-n+3){min-width:72px;white-space:nowrap}
.data-table--returns th:nth-child(4),.data-table--returns td:nth-child(4){min-width:184px}
.data-table--returns th:nth-child(11),.data-table--returns td:nth-child(11){min-width:82px}
.data-table--returns th:nth-child(13),.data-table--returns td:nth-child(13){min-width:142px}
.data-table--returns th:nth-child(5),.data-table--returns td:nth-child(5){min-width:100px;white-space:nowrap}
.data-table--returns th:last-child,.data-table--returns td:last-child{min-width:96px}
.return-event{display:inline-flex;align-items:center;gap:8px;max-width:100%;white-space:nowrap;padding:6px 9px;border:1px solid #bfdbfe;border-radius:9px;background:var(--blue-soft);color:var(--blue)}
.return-event strong{font-size:12px;line-height:1.25}
.return-event small{padding-left:8px;border-left:1px solid #bfdbfe;color:var(--blue-dark);font:700 11px/1.25 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.return-time{white-space:nowrap}
.visitor-key-link{border:0;background:none;padding:0;font:inherit;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;color:var(--blue);cursor:pointer;text-decoration:none;}
.visitor-key-link:hover{color:var(--blue-dark)}
/* 访客明细采用轻量统计表格：固定列宽、单行事件和细分隔线，让长 URL 不挤占其他信息。 */
.visit-filter-panel,.visit-list-panel{box-shadow:none;border-color:#edf0f4;border-radius:12px}
.visit-filter-panel{margin-bottom:20px}
.visit-filter-panel .filter-form{background:#fff;padding:16px 20px;flex-wrap:wrap}
.visit-filter-panel .filter-grid{flex:1 1 760px;grid-template-columns:230px 100px 160px 140px minmax(150px,1fr)}
.visit-filter-panel .filter-grid label{font-size:12px;font-weight:400;gap:6px}
.visit-filter-panel input{border-color:#e0e6ee;border-radius:6px;height:34px}
.visit-filter-panel .btn{height:34px;border-radius:6px;box-shadow:none;background:#1890ff;font-weight:400;padding:6px 18px}
.visit-filter-panel .btn--ghost{background:#fff;border:1px solid #e0e6ee}
.visit-list-panel{padding:0 20px 16px}
.visit-list-panel .panel-head{padding:18px 0;background:#fff;border:0}
.visit-list-panel .panel-head h2{font-size:14px;font-weight:500;color:#475569}
.visit-list-panel .panel-head span{font-weight:400;color:#8591a2}
/* 固定访客表格视口，记录只在表格内滚动，分页留在容器外；沿用现有吸顶表头。 */
.visit-list-panel .table-scroll--visitor{height:clamp(240px,calc(100vh - 320px),600px);max-height:none;border:0;border-radius:8px 8px 0 0}
.data-table--visit{table-layout:fixed;min-width:2364px;font-size:13px;color:#64748b}
.data-table--visit .visit-col-time{width:160px}.data-table--visit .visit-col-id{width:80px}.data-table--visit .visit-col-city{width:130px}.data-table--visit .visit-col-ip{width:150px}.data-table--visit .visit-col-type{width:160px}.data-table--visit .visit-col-platform{width:90px}.data-table--visit .visit-col-reason{width:240px}.data-table--visit .visit-col-interaction{width:140px}.data-table--visit .visit-col-bd{width:140px}.data-table--visit .visit-col-event{width:190px}.data-table--visit .visit-col-page{width:240px}.data-table--visit .visit-col-action{width:64px}
.data-table--visit th,.data-table--visit td{padding:15px 12px;border-bottom:1px solid #f0f2f5;height:56px;font-size:13px;font-weight:400}
.visit-list-panel .data-table--visit thead th{background:#f3f5f8;color:#465365;font-weight:600;letter-spacing:0;white-space:nowrap;box-shadow:none;height:46px;padding:12px}
.data-table--visit .visit-time{white-space:nowrap;font-size:12px;font-variant-numeric:tabular-nums}
.data-table--visit .cell-mono{font-family:inherit;color:#64748b}
.data-table--visit .visitor-key-link,.data-table--visit a,.visit-return-link{color:#1890ff;text-decoration:none;font:inherit;font-size:13px}
.visit-return-link{background:none;border:0;padding:4px 0;cursor:pointer}
.data-table--visit .visitor-key-link:hover,.visit-return-link:hover{text-decoration:none;color:#096dd9}
.visitor-event-summary{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:nowrap}
.visitor-event-preview{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#64748b}
.data-table--visit .visitor-event-count{flex-shrink:0;font-size:11px;color:#8591a2;white-space:nowrap}
.data-table--visit button:focus-visible,.data-table--visit a:focus-visible{outline:2px solid #91caff;outline-offset:3px}
@media(max-width:900px){.visit-filter-panel .filter-form{display:block}.visit-filter-panel .filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.visit-list-panel{padding:0 12px 12px}.visit-filter-panel .filter-form{padding:14px 12px}}
@media(max-width:480px){.visit-filter-panel .filter-grid{grid-template-columns:minmax(0,1fr)}.visit-list-panel .panel-head{gap:8px;flex-wrap:wrap}}
.modal--visitor{width:min(960px,calc(100% - 24px));max-height:min(88vh,720px)}
.modal-sub{margin:4px 0 0;font-size:12px;color:var(--muted);font-family:ui-monospace,Menlo,Consolas,monospace;word-break:break-all}
.visitor-detail-body{padding:16px 20px 20px}
.visitor-detail-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:18px}
.visitor-detail-card{border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 14px;background:#fafbff}
.visitor-detail-card h4{margin:0 0 10px;font-size:13px;font-weight:800;color:var(--ink)}
.visitor-detail-card dl{margin:0;display:grid;gap:8px}
.visitor-detail-card dt{font-size:11px;font-weight:700;color:var(--muted)}
.visitor-detail-card dd{margin:0;font-size:13px;color:var(--ink);word-break:break-all}
.visitor-detail-card .ua-preview{font-size:11px;max-height:72px;overflow:auto}
.visitor-track-panel h4{margin:0 0 10px;font-size:14px;font-weight:800}
.data-table--visit .cell-truncate{max-width:180px}
.data-table a{color:var(--blue);text-decoration:none;font-size:13px}
.data-table a:hover{text-decoration:none}
@media(max-width:1180px){.topbar-inner{padding:0 20px;gap:12px}.top-nav-link{padding:0 9px;gap:5px}.brand-text small{display:none}.release-meta>span{display:none}}
@media(max-width:900px){.visitor-detail-grid{grid-template-columns:1fr}.return-filter-grid{grid-template-columns:1fr}.filter-form--compact{display:block}.filter-form--compact .filter-grid{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:8px}.topbar-inner{min-height:62px;flex-wrap:wrap;align-items:center;padding:0 16px}.topbar-leading{flex:1}.brand-text small{display:block}.top-nav-toggle{display:block;margin-left:auto}.top-nav{display:none;order:3;width:100%;padding:4px 0 12px;border-top:1px solid var(--line);grid-template-columns:repeat(3,minmax(0,1fr));align-items:stretch}.top-nav.is-open{display:grid}.top-nav-link{min-height:42px;justify-content:center;padding:8px 10px;border-radius:9px}.top-nav-link::after{left:22px;right:22px}.topbar-actions{margin-left:0}.page-shell{padding:20px 16px 32px}.panel-form .btn{margin-left:0}.panel-form input,.panel-form .input-remark{flex:1 1 calc(50% - 4px);max-width:none;min-width:0}.panel-form .input-ratio{flex:0 0 72px}.cell-truncate{max-width:120px}}
@media(max-width:560px){.brand-text small{display:none}.topbar-inner{gap:8px}.release-meta{padding:7px 8px}.top-nav{grid-template-columns:repeat(2,minmax(0,1fr))}.top-nav-link{justify-content:flex-start}.page-shell{padding-left:12px;padding-right:12px}}

/* 双月浮层紧贴日期入口，周一开列；窄屏上下排列，滚动限定在面板内部。 */
.riqi-fanwei[hidden]{display:none}
.riqi-fanwei{position:fixed;z-index:110;display:flex;max-height:calc(100vh - 24px);overflow:auto;background:#fff;border:1px solid #d7dff0;border-radius:10px;box-shadow:0 12px 36px #23386726;color:#202632;font-size:14px}
.riqi-kuaijie{flex:0 0 112px;padding:12px 0;border-right:1px solid #d7dff0;display:flex;flex-direction:column;gap:7px}
.riqi-kuaijie button{border:0;background:none;text-align:left;padding:12px 16px;font:inherit;cursor:pointer;white-space:nowrap}
.riqi-kuaijie button:hover{background:#edf2ff;color:#4059ff}
.riqi-zhuti{flex:1;min-width:0}.riqi-jieguo{display:flex;justify-content:space-around;padding:15px 12px;border-bottom:1px solid #d7dff0;font-variant-numeric:tabular-nums}
.riqi-daohang{display:flex;align-items:center;padding:5px 12px;gap:5px}.riqi-daohang span{flex:1;text-align:center;color:#8290aa;font-size:12px}.riqi-daohang button{border:0;background:transparent;color:#64748b;font-size:24px;cursor:pointer;width:30px}
.riqi-yuefen{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;padding:0 12px 10px}.riqi-yue h3{text-align:center;font-size:16px;margin:0 0 13px}.riqi-wangge{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));row-gap:4px}.riqi-wangge>span{text-align:center;padding:6px 0 12px}.riqi-wangge button{border:0;background:#fff;height:36px;padding:0;font:inherit;color:#202632;cursor:pointer}.riqi-wangge button.riqi-wai{color:#8b96ac}.riqi-wangge button.riqi-fanwei-nei{background:#e3edff}.riqi-wangge button.riqi-duandian{background:#4059ff;color:#fff;border-radius:6px}.riqi-wangge button:disabled{color:#99a3ba;background:#f0f2f7;cursor:default}.riqi-wangge button:hover:not(:disabled){outline:1px solid #4059ff;outline-offset:-1px}.riqi-fanwei button:focus-visible{outline:2px solid #4059ff;outline-offset:-2px}
.riqi-dibu{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:10px 12px;border-top:1px solid #e7ebf3}.riqi-dibu span{margin-right:auto;font-size:12px;color:#8290aa}
@media(max-width:600px){.riqi-fanwei{flex-direction:column}.riqi-kuaijie{flex:auto;flex-direction:row;flex-wrap:wrap;gap:0;padding:5px;border-right:0;border-bottom:1px solid #d7dff0}.riqi-kuaijie button{padding:8px 10px;font-size:12px}.riqi-yuefen{grid-template-columns:minmax(0,1fr)}.riqi-dibu{position:sticky;bottom:0;background:#fff}}

/* 统一其他表格的留白与操作样式；危险操作仍使用红色，禁用态仍可辨识。 */
.panel{box-shadow:none;border-color:#edf0f4;border-radius:12px}
.panel-head{background:#fff;border-bottom:0;padding:18px 20px}
.panel-head h2{font-size:14px;font-weight:500;color:#475569}
.panel-head span{font-weight:400;color:#8591a2}
.panel:not(.visit-list-panel)>.table-scroll{margin:0 20px 16px;border-radius:8px 8px 0 0}
.data-table .btn{background:none;border:0;border-radius:4px;box-shadow:none;padding:4px 0;color:#1890ff;font-weight:400;white-space:nowrap}
.data-table .btn:hover{transform:none;filter:none;text-decoration:none}
.data-table .btn--danger{color:#dc2626}
.data-table .btn:disabled{color:#94a3b8;cursor:not-allowed;text-decoration:none}
.data-table .row-actions{flex-wrap:nowrap;gap:16px}
.data-table .row-actions form{margin:0}
.data-table .badge{border-radius:4px;padding:2px 6px;font-weight:400;white-space:nowrap}
.data-table .badge::before{display:none}
.data-table .visitor-key-link{color:#1890ff;text-decoration:none;font-family:inherit;font-size:13px}
.data-table .visitor-key-link:hover{text-decoration:none}
.data-table .return-event{padding:0;border:0;background:none;border-radius:0;color:#64748b}
.data-table .return-event strong{font-weight:400;font-size:13px}
.data-table .return-event small{font-weight:400;color:#8591a2;border-color:#e0e6ee}
.data-table .cell-mono{font-family:inherit;color:#64748b}
.data-table .btn:focus-visible{outline:2px solid #91caff;outline-offset:3px}
.top-nav-toggle{width:auto;height:34px;padding:6px 10px;border-radius:6px;color:#475569;font:inherit;font-size:12px;white-space:nowrap}
@media(max-width:900px){.panel:not(.visit-list-panel)>.table-scroll{margin:0 12px 12px}.panel-head{padding:16px 12px}.data-table:not(.data-table--visit):not(.data-table--returns):not(.data-table--tokens){min-width:640px}}
/* Token 多操作列保留足够宽度，避免手机端名称与编号挤成竖排。 */
.data-table--tokens{min-width:1040px}
.data-table--tokens td:first-child,.data-table--tokens td:nth-child(2),.data-table--tokens td:nth-child(4){white-space:nowrap}

/* 批量回传输入与逐行结果在窄屏弹窗内换行，避免撑宽页面。 */
#manualReturnModal textarea{width:100%;min-width:0;max-width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:8px;font:inherit;resize:vertical}
#piliangJieguo{min-width:0;margin:0;font-size:12px}

/* 每页十条配合紧凑行高，常规桌面一屏查看；小屏继续使用表格内部横向滚动。 */
.app-page .page-shell{padding-top:18px;padding-bottom:18px}
.app-page .page-header{margin-bottom:12px}
.app-page .panel-head{padding-top:12px;padding-bottom:12px}
.app-page .visit-filter-panel{margin-bottom:12px}
.app-page .data-table th,.app-page .data-table td{height:38px;padding:8px 10px}
.app-page .visit-list-panel .data-table--visit thead th{height:38px;padding:8px 10px}
.app-page .visit-return-link{padding:0;line-height:20px}
.app-page .data-table tr[hidden]{display:none}
.app-page .table-scroll--visitor{max-height:none}
.houtai-fenye{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:10px 20px 14px;font-size:12px;color:#64748b}
.visit-list-panel>.houtai-fenye{margin:12px 0 0}
.fenye-anniu{display:flex;gap:6px;flex-wrap:wrap}
.fenye-anniu a,.fenye-anniu button,.fenye-anniu .fenye-disabled{display:inline-block;padding:6px 10px;line-height:18px;border:1px solid #dfe5ed;border-radius:6px;background:#fff;font:inherit;text-decoration:none;color:#1890ff}
.fenye-anniu button{cursor:pointer}
.fenye-anniu a:hover,.fenye-anniu button:hover:not(:disabled){background:#eff6ff}
.fenye-anniu .fenye-disabled,.fenye-anniu button:disabled{color:#94a3b8;background:#f8fafc;cursor:default}
@media(max-width:900px){.houtai-fenye{margin-left:12px;margin-right:12px}.app-page .data-table th,.app-page .data-table td{padding:8px}}

/* 后台统一设计：蓝白工作台保持紧凑十行列表，清晰区分导航、数据、操作与状态。 */
.app-page{--blue:#2864e8;--blue-dark:#174aba;--blue-soft:#edf3ff;--radius:12px;--radius-sm:7px;background:#f4f6fa;font-size:13px;color:#24324b}
.app-page .app-main{background:#f4f6fa}
.app-page .page-shell{max-width:1680px;padding:24px 28px 32px}
.app-page .topbar{background:#fff;border-bottom:1px solid #e3e8f0;box-shadow:0 2px 8px #18365505;backdrop-filter:none}
.app-page .topbar-inner{min-height:64px;padding:0 28px;gap:24px}
.app-page .brand{gap:10px}.brand-mark{display:grid;place-items:center;flex-shrink:0;width:34px;height:34px;background:#2864e8;color:#fff;border-radius:10px;box-shadow:0 4px 10px #2864e824}.brand-mark svg{width:22px;height:22px}
.app-page .brand-text strong{font-size:15px;color:#1e2e49}.app-page .brand-text small{font-size:10px;color:#8692a6;font-weight:400;letter-spacing:1px}
.app-page .top-nav{flex:1;overflow-x:auto;gap:0;scrollbar-width:thin}
.app-page .top-nav-link{font-size:13px;padding:0 12px;font-weight:500;color:#637087;min-height:64px}
.app-page .top-nav-link.is-active{color:var(--blue);background:#f5f8ff;font-weight:650}
.app-page .top-nav-link:hover{color:var(--blue);background:#f5f8ff}
.app-page .release-meta{background:#f7f9fc;color:#69768c;border-color:#e6ebf2;border-radius:7px;font-size:11px;padding:8px 10px}
.app-page .release-meta:hover{border-color:#c2d3fb;background:var(--blue-soft);color:var(--blue)}
.app-page .topbar-logout{font-weight:400;padding:8px;font-size:12px}
.app-page .header-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.app-page .page-header{align-items:center;margin-bottom:18px;gap:12px}
.app-page .page-header>div:first-child{flex:1 1 380px;min-width:0}
.app-page .page-header h1{display:block;margin:0 0 5px;font-size:23px;font-weight:650;letter-spacing:-.5px;color:#1e2e49}
.app-page .page-desc{font-size:12px;line-height:1.8;max-width:100ch;color:#748197}
.app-page .panel{border:1px solid #e3e8f0;border-radius:12px;margin-bottom:16px;box-shadow:0 2px 5px #1e355303}
.app-page .panel-head{padding:14px 18px;min-height:50px;border-bottom:1px solid #edf0f5;background:#fff;flex-wrap:wrap}
.app-page .panel-head h2{color:#31415c;font-size:14px;font-weight:650}.app-page .panel-head span{font-size:12px;color:#8591a4}
.app-page .filter-form,.app-page .panel-form,.app-page .visit-filter-panel .filter-form{padding:14px 18px;background:#fff;gap:12px}
.app-page .filter-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px 12px;margin-bottom:12px}
.app-page .filter-form--compact{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px}
.app-page .filter-form--compact .filter-grid{flex:1 1 600px;min-width:0;grid-template-columns:repeat(auto-fit,minmax(155px,1fr));margin-bottom:0}
.app-page .filter-grid label,.app-page .modal-form-fields label{font-size:12px;font-weight:500;color:#62718a;gap:6px}
.app-page input,.app-page select,.app-page textarea,.app-page .filter-grid input,.app-page .filter-grid select,.app-page .panel-form input{border:1px solid #dce3ee;border-radius:7px;padding:7px 10px;min-height:34px;height:auto;font-size:12px;background:#fff;color:#31415c;max-width:100%}
.app-page input:focus,.app-page select:focus,.app-page textarea:focus{border-color:#7fa3f5;box-shadow:0 0 0 3px #2864e812;outline:0}
.app-page input[readonly][role=button]{cursor:pointer;background:#f9fbff}
.app-page .btn,.app-page .panel-form .btn,.app-page .visit-filter-panel .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;height:auto;padding:7px 14px;border-radius:7px;background:var(--blue);font-family:inherit;font-size:12px;font-weight:500;line-height:20px;box-shadow:none;white-space:nowrap}
.app-page .btn:hover{background:var(--blue-dark);transform:none;filter:none}
.app-page .btn--ghost,.app-page .visit-filter-panel .btn--ghost{background:#fff;color:#53647e;box-shadow:inset 0 0 0 1px #dce3ee}
.app-page .btn--ghost:hover{background:#f3f6fc;color:var(--blue)}
.app-page .btn--danger{background:#fff;color:#dc2626;box-shadow:inset 0 0 0 1px #fecaca}.app-page .btn--danger:hover{color:#b91c1c;background:#fff1f2}
.app-page .btn:disabled{opacity:.55;cursor:not-allowed}.app-page .btn:disabled:hover{background:var(--blue)}
.app-page .data-table th,.app-page .data-table td,.app-page .visit-list-panel .data-table--visit thead th{height:39px;padding:8px 12px;font-size:12px;border-bottom:1px solid #eef1f6;color:#56657c}
.app-page .data-table th,.app-page .table-scroll--visitor .data-table thead th{background:#f6f8fc;color:#77839a;font-weight:500;height:38px}
.app-page .data-table tbody tr:hover{background:#f6f9ff}.app-page .data-table tfoot td{background:#f7f9fd;color:#304360;font-weight:600;border-top:1px solid #e6ebf3}
.app-page .data-table a,.app-page .data-table .btn,.app-page .visit-return-link,.app-page .visitor-key-link{color:var(--blue);font-size:12px}
.app-page .data-table .btn{background:transparent;box-shadow:none;min-height:26px;padding:3px 5px;margin:0 -5px;line-height:20px}
.app-page .data-table .btn:hover{background:var(--blue-soft)}.app-page .data-table .btn--danger{color:#dc2626}.app-page .data-table .btn--danger:hover{background:#fff1f2}.app-page .data-table .btn:disabled{color:#94a3b8;opacity:1;background:none}
.app-page .data-table .row-actions{gap:12px}.app-page .data-table .cell-mono{font-family:ui-monospace,Consolas,monospace;font-size:11px}
.app-page .badge{font-size:11px;border-radius:5px;font-weight:500;padding:3px 7px}.app-page .data-table .badge::before{display:block;width:5px;height:5px}
.app-page .panel:not(.visit-list-panel)>.table-scroll{margin:0 18px 12px;border-radius:0}
.app-page .visit-list-panel{padding:0 18px 14px}.app-page .visit-list-panel .panel-head{padding:14px 0}.app-page .visit-filter-panel{margin-bottom:12px}
.app-page .table-scroll--visitor{height:clamp(240px,var(--visitor-table-height,calc(100vh - 440px)),600px);border-radius:7px;scrollbar-gutter:stable}
.app-page .table-scroll{overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#c8d3e5 #f6f8fc}
.app-page .empty-row td{height:130px;text-align:center;color:#8b98ab}
.app-page .houtai-fenye{margin:12px 18px 14px;font-size:12px}.app-page .visit-list-panel>.houtai-fenye{margin:12px 0 0}
.app-page .fenye-anniu a,.app-page .fenye-anniu button,.app-page .fenye-anniu .fenye-disabled,.app-page .fenye-anniu .fenye-current{border-radius:6px;min-height:30px;padding:5px 9px;color:var(--blue);border-color:#dce3ee}
.app-page .fenye-anniu .fenye-current{background:var(--blue);border-color:var(--blue);color:#fff}.app-page .fenye-anniu .fenye-disabled,.app-page .fenye-anniu button:disabled{color:#a0aabd;background:#f8fafc}
.app-page .fenye-form input,.app-page .fenye-form select{min-height:30px;padding:4px 7px}
.app-page .modal-overlay{background:#15253e70;backdrop-filter:blur(3px);padding:20px}
.app-page .modal{border-radius:14px;border:0;max-height:min(88vh,780px)}
.app-page .modal-head{padding:17px 20px;background:#fff}.app-page .modal-head h3{font-size:16px;color:#243852}
.app-page .modal-meta,.app-page .modal-foot,.app-page .modal-form-foot{padding:12px 20px;background:#f8faff;font-size:12px;overflow-wrap:anywhere}
.app-page .modal-form-fields{padding:20px;gap:16px}.app-page .modal-form-fields input,.app-page .modal-form-fields select{min-height:38px}
.app-page .visitor-detail-card{background:#f8faff;border-color:#e6edf7;border-radius:10px}.app-page .visitor-detail-card dd{white-space:normal;overflow-wrap:anywhere}.app-page .visitor-detail-card .cell-truncate{max-width:none}
.app-page .release-log-item{box-shadow:none;border-radius:10px}.app-page .release-log-list{background:#f6f8fc}
.app-page .guide-toc{top:82px}.app-page .guide-layout{gap:18px}.app-page .guide-section{scroll-margin-top:86px}
.app-page .guide-section .guide-prose,.app-page .guide-faq{font-size:13px}.app-page .guide-step-card{background:#f8faff;box-shadow:none}
.app-page .xiangmu-workspace{grid-template-columns:190px minmax(0,1fr);gap:22px}
.app-page .xiangmu-sidebar{padding:12px 10px;border-color:#e3e8f0;border-radius:12px;top:86px;box-shadow:0 2px 5px #1e355303}
.app-page .xiangmu-back{font-size:12px;padding:8px 10px}.app-page .xiangmu-switch summary{background:#f6f8fc;padding:11px;font-size:13px;color:#304563}
.app-page .xiangmu-id{font-size:11px;color:#8b98ad;padding:4px 10px}.app-page .xiangmu-menu{display:flex;align-items:center;gap:9px;padding:11px 13px;margin:3px 0;border-radius:7px;font-size:13px;color:#63728b}
.app-page .xiangmu-menu::before{content:'';width:5px;height:5px;border:1px solid #9aa8bd;border-radius:2px;flex-shrink:0}
.app-page .xiangmu-menu:hover,.app-page .xiangmu-menu.is-active{background:var(--blue-soft);color:var(--blue)}.app-page .xiangmu-menu.is-active{font-weight:600}.app-page .xiangmu-menu.is-active::before{background:var(--blue);border-color:var(--blue)}
.app-page .xiangmu-heading{margin-bottom:18px}.app-page .xiangmu-heading h1{font-size:23px;color:#1e2e49;font-weight:650}.app-page .xiangmu-heading>span{font-size:12px;padding:5px 10px;border-radius:6px;background:#eaf0fa;color:#5e7191}
.app-page .tongji-card{padding:18px 20px;border-top:3px solid #7ba0ef;gap:9px}.app-page .tongji-card span{font-size:12px;color:#7d8ba1}.app-page .tongji-card strong{font-size:30px;line-height:1.2;font-weight:650;color:#233c61;font-variant-numeric:tabular-nums}
.app-page .tongji-card:nth-child(2){border-top-color:#5ebbad}.app-page .tongji-card:nth-child(3){border-top-color:#a48bd9}.app-page .tongji-card:nth-child(4){border-top-color:#e8b160}
.app-page .yingyong-summary{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:4px}
.app-page .yingyong-name{font-weight:600;color:#30435f}.app-page .yingyong-table td:nth-child(n+3):nth-child(-n+5){font-variant-numeric:tabular-nums;color:#30435f}
.app-page .fangke-fenlei-tongji{gap:10px;margin:12px 0}.app-page .fangke-fenlei-tongji>div{border-color:#e3e8f0;border-radius:10px;padding:12px 15px}
.app-page .fangke-fenlei-tongji strong{font-size:22px;color:#314767;font-variant-numeric:tabular-nums}
.app-page .xiangmu-content>.xiangmu-return{display:none}.app-page .xiangmu-form .filter-grid{grid-template-columns:minmax(0,520px)}.app-page .xiangmu-form .xiangmu-note{padding:12px 0}
.app-page .xiangmu-note{padding:12px 18px;margin:0}.app-page .xiangmu-content .page-header h1{display:none}
.app-page .cell-value{display:block;max-width:100%;border:0;padding:0;background:none;color:inherit;font:inherit;cursor:zoom-in;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}
.app-page .yingyong-table td:last-child,.app-page .data-table--visit td:last-child,.app-page .data-table--returns td:last-child{position:sticky;right:0;background:#fff;box-shadow:-1px 0 #e7edf5;z-index:1}
.app-page .yingyong-table th:last-child,.app-page .data-table--visit th:last-child,.app-page .data-table--returns th:last-child{position:sticky;right:0;background:#f6f8fc;box-shadow:-1px 0 #e7edf5;z-index:3}
.app-page .yingyong-table tr:hover td:last-child,.app-page .data-table--visit tr:hover td:last-child,.app-page .data-table--returns tr:hover td:last-child{background:#f6f9ff}
.app-page .xiangmu-note,.app-page .loudou-note,.app-page .dict-desc{font-size:12px;color:#8490a4;line-height:1.8}
.app-page .tongji-code{position:relative;background:#f6f8fc;border:1px solid #e6ebf3;margin:14px 18px 18px;padding:16px;white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%;border-radius:8px}
.app-page .tongji-code code{background:transparent;padding:0;font:12px/1.8 ui-monospace,Consolas,monospace;color:#435574}
.app-page .code-tools{display:flex;align-items:center;justify-content:flex-end;padding:0 18px 12px;gap:8px;color:#94a3b8;font-size:11px}
.app-page .loudou-chart{padding:18px;gap:10px}.app-page .loudou-stage{border-radius:10px;padding:16px;background:#f9fbff;flex-basis:150px}.app-page .loudou-count{font-size:30px}.app-page .loudou-transition{flex-basis:110px}
.app-page .embed-card{border-style:solid;border-color:#e5ecf8;background:#f6f9ff;border-radius:8px}
.app-page :where(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline:2px solid #729bee;outline-offset:3px}
.app-page .table-scroll:focus-visible{outline-offset:-2px}
.admin-modal-open{overflow:hidden}.admin-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:150;max-width:calc(100% - 32px);padding:10px 16px;background:#223754;color:#fff;border-radius:8px;font-size:13px;box-shadow:0 6px 20px #102a4320;pointer-events:none}.admin-toast[hidden]{display:none}
.skip-link{position:fixed;top:-60px;left:16px;z-index:160;padding:8px 14px;background:var(--blue);color:#fff;border-radius:6px}.skip-link:focus{top:10px}
/* 登录页复用相同品牌与表单节奏，系统字体避免外部资源加载失败。 */
.login-page{background:radial-gradient(ellipse at 20% 10%,#dce8ff80,transparent 50%),#f3f6fb;padding:20px}
.login-wrap{width:min(420px,100%);padding:24px 0}.login-card{border-radius:16px;border-color:#e3e9f2;box-shadow:0 16px 50px #223c6510}
.login-hero{padding:30px 30px 24px;background:#fff;color:#213a61;border-bottom:1px solid #edf1f7}.login-hero .brand-mark{margin-bottom:20px;width:44px;height:44px;border-radius:12px}
.login-hero h1{font-size:24px;margin-bottom:8px}.login-hero p{font-size:13px;line-height:1.7;color:#8190a7}.login-form{padding:24px 30px 30px;gap:18px}.login-form input{border-radius:8px;border-color:#dce4f0;min-height:42px;font-size:14px}.login-form .btn{background:#2864e8;border-radius:8px;box-shadow:none;font-size:14px;font-weight:500;min-height:44px}.login-form .login-remember{display:flex;font-size:12px;font-weight:400}.login-remember input{min-height:0}.login-alert{padding:12px 30px;font-size:12px}
.login-page :focus-visible{outline:2px solid #729bee;outline-offset:3px}
@media(min-width:901px){.app-page .top-nav{align-self:stretch}.app-page .topbar-inner{align-items:stretch}.app-page .brand-text small{display:block}}
@media(max-width:1200px) and (min-width:901px){.app-page .topbar-inner{padding:0 20px;gap:14px}.app-page .top-nav-link{padding:0 10px}.app-page .brand-text small{display:none}}
/* 较矮桌面保留十条记录的紧凑行高；触屏仍使用较大的操作目标。 */
@media(min-width:901px) and (max-height:820px){.app-page .data-table td{height:35px;padding:4px 10px}.app-page .data-table th,.app-page .visit-list-panel .data-table--visit thead th{height:36px;padding:7px 10px}}
/* 普通桌面全局访客筛选七列同排，避免按钮被挤到第二行而推走分页。 */
@media(min-width:1200px){.app-page .page-shell>.visit-filter-panel .filter-grid{grid-template-columns:minmax(190px,1.3fr) repeat(6,minmax(110px,1fr))}}
/* 表格保持内部滚动；移动端菜单与项目导航按需换行，不缩小点击目标。 */
@media(max-width:900px){
.app-page .page-shell{padding:18px 16px 24px}.app-page .topbar-inner{min-height:60px;padding:10px 16px;gap:10px;align-items:center}.app-page .brand-text small{display:none}.app-page .brand-mark{width:30px;height:30px;border-radius:8px}.app-page .top-nav-toggle{min-height:34px;background:#f6f8fc;border-color:#e0e6ef;color:#5f6f87}
.app-page .top-nav{overflow:visible;grid-template-columns:repeat(4,minmax(0,1fr));padding:8px 0 0;border-color:#edf0f5}.app-page .top-nav-link{min-height:40px;border-radius:7px;justify-content:center;font-size:12px;padding:8px}.app-page .top-nav-link::after{display:none}
.app-page .filter-form--compact{display:block}.app-page .filter-form--compact .filter-grid,.app-page .filter-grid{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:12px}.app-page .filter-actions{gap:8px}
.app-page .guide-toc{position:static}.app-page .data-table th,.app-page .data-table td{padding:8px 10px}.app-page .data-table .btn{min-height:32px}
.app-page .xiangmu-workspace{grid-template-columns:minmax(0,1fr);gap:16px}.app-page .xiangmu-sidebar{position:static;padding:10px}.app-page .xiangmu-sidebar nav{display:flex;gap:4px;flex-wrap:wrap}.app-page .xiangmu-menu{padding:10px 12px;margin:0;font-size:12px}.app-page .xiangmu-switch{margin:4px 0}.app-page .xiangmu-back{padding:4px 10px}.app-page .xiangmu-id{display:none}
.app-page .table-scroll--visitor{height:360px;max-height:60vh}.app-page .panel:not(.visit-list-panel)>.table-scroll{margin:0 14px 12px}.app-page .tongji-cards{gap:10px}.app-page .tongji-card{padding:16px}.app-page .tongji-card strong{font-size:26px}
}
@media(max-width:600px){
.app-page .page-shell{padding:14px 12px 22px}.app-page .topbar-inner{padding:10px 12px;gap:6px}.app-page .topbar-leading{gap:8px;min-width:0}.app-page .brand{gap:7px}.app-page .brand-text strong{font-size:13px}.app-page .topbar-actions{gap:3px}.app-page .release-meta{padding:7px}.app-page .topbar-logout{padding:7px 5px}.app-page .top-nav-toggle{padding:6px 8px;margin-left:auto}
.app-page .top-nav{grid-template-columns:repeat(2,minmax(0,1fr))}.app-page .page-header{gap:10px;margin-bottom:14px}.app-page .page-header h1,.app-page .xiangmu-heading h1{font-size:21px}.app-page .page-desc{font-size:12px}
.app-page .panel-head,.app-page .filter-form,.app-page .visit-filter-panel .filter-form{padding:12px 14px}.app-page .filter-form--compact .filter-grid,.app-page .filter-grid{grid-template-columns:minmax(0,1fr)}
.app-page .btn{min-height:38px}.app-page input,.app-page select,.app-page .filter-grid input,.app-page .filter-grid select{min-height:38px;font-size:13px}.app-page .visit-list-panel{padding:0 12px 12px}.app-page .visit-list-panel .panel-head{padding:12px 0}.app-page .houtai-fenye{margin:12px 14px;gap:12px}.app-page .fenye-anniu{gap:6px}.app-page .fenye-anniu a,.app-page .fenye-anniu button{min-height:34px}
.app-page .yingyong-summary{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.app-page .tongji-cards:not(.yingyong-summary){grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.app-page .tongji-card{padding:13px 12px}.app-page .tongji-card strong{font-size:24px}.app-page .tongji-card span{font-size:11px}
.app-page .modal-overlay{padding:10px}.app-page .modal{width:100%;max-height:90vh;max-height:90dvh;border-radius:12px}.app-page .modal-head,.app-page .modal-meta,.app-page .modal-foot,.app-page .modal-form-foot{padding:12px 16px}.app-page .modal-form-fields,.app-page .visitor-detail-body{padding:16px}.app-page .modal-close{min-width:36px;min-height:36px}.app-page .modal-head h3{font-size:15px}.app-page .riqi-fanwei{border-radius:10px}.app-page .riqi-dibu{gap:6px}
.app-page .xiangmu-heading{align-items:flex-start;gap:8px;flex-wrap:wrap;margin-bottom:14px}.app-page .tongji-code{margin:12px 14px;padding:12px}.app-page .tongji-heat-pair{padding:14px}.app-page .guide-layout{gap:12px}.app-page .guide-step-card{padding:12px}.app-page .guide-section .guide-prose{padding:6px 14px 16px}.app-page .fangke-fenlei-tongji{grid-template-columns:repeat(2,minmax(0,1fr))}
.login-page{padding:16px}.login-hero{padding:26px 24px 20px}.login-form{padding:22px 24px 26px}
}
@media(max-width:360px){.app-page .brand-mark{display:none}.app-page .topbar-inner{padding-left:10px;padding-right:10px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}
/* 项目数据工作区：应用列表为独立入口，项目侧栏随业务片段一起更新。 */
.xiangmu-workspace{display:grid;grid-template-columns:210px minmax(0,1fr);gap:24px;align-items:start}
.xiangmu-sidebar{background:#fff;border:1px solid #e5eaf1;border-radius:12px;padding:16px 12px;position:sticky;top:92px}
.xiangmu-back{display:block;padding:8px 12px;color:#64748b}.xiangmu-switch{margin:12px 0}.xiangmu-switch summary{padding:12px;background:#f2f7fd;border-radius:8px;cursor:pointer;font-weight:600;overflow-wrap:anywhere}.xiangmu-switch a{display:block;padding:10px 12px;overflow-wrap:anywhere}.xiangmu-id{font-size:12px;color:#0891b2;padding:4px 12px}.xiangmu-menu{display:block;padding:13px 16px;margin:5px 0;color:#475569;border-radius:9px}.xiangmu-menu:hover,.xiangmu-menu.is-active{color:#1683ec;background:#e3f1ff}.xiangmu-content{min-width:0}.xiangmu-heading{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:20px}.xiangmu-heading h1{font-size:22px;margin:0}.xiangmu-heading span{color:#64748b;overflow-wrap:anywhere}.tongji-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.tongji-card{padding:24px;display:flex;flex-direction:column;gap:12px}.tongji-card span{color:#64748b}.tongji-card strong{font-size:32px}.tongji-heat-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;padding:20px}.tongji-heat-pair figure{margin:0;min-width:0}.tongji-heat-pair figcaption{overflow-wrap:anywhere;font-size:13px;margin-bottom:10px}.tongji-heat{width:100%;border:1px solid #dbe5f1;border-radius:8px}.tongji-code{margin:16px 20px;padding:16px;background:#f5f8fc;overflow:auto;font-size:13px;line-height:1.7;border-radius:8px}.xiangmu-content .data-table{min-width:680px}.xiangmu-content .table-scroll{max-width:100%}
@media(max-width:800px){.xiangmu-workspace{grid-template-columns:minmax(0,1fr);gap:16px}.xiangmu-sidebar{position:static}.xiangmu-sidebar nav{display:flex;flex-wrap:wrap;gap:4px}.xiangmu-menu{padding:9px 12px;margin:0}.xiangmu-switch{margin:4px 0}.xiangmu-heading{margin-bottom:14px}.tongji-card{padding:15px}.tongji-card strong{font-size:24px}.tongji-cards{gap:8px}.tongji-heat-pair{grid-template-columns:minmax(0,1fr)}}

.tongji-trend{display:block;width:calc(100% - 40px);max-height:260px;margin:10px 20px 20px}

/* 访问明细分页数量与跳页控件保持紧凑，窄屏自然换行。 */
.fenye-anniu{align-items:center}
.fenye-form,.fenye-form label{display:flex;align-items:center;gap:6px;margin:0}
.fenye-form select,.fenye-form input{width:auto;min-width:0;height:30px;padding:3px 6px;border:1px solid #dfe5ed;border-radius:3px;background:#fff;color:inherit;font:inherit}
.fenye-form input[type=number]{width:64px}
.fenye-anniu .fenye-current{display:inline-block;padding:6px 10px;line-height:18px;border:1px solid #1890ff;border-radius:6px;background:#eff6ff;color:#1890ff;font:inherit}

@media(max-width:600px){.fenye-anniu{gap:6px;width:100%}.fenye-form{flex-wrap:wrap}}

@media(max-width:900px){.visit-list-panel .table-scroll--visitor{height:360px;max-height:60vh}}

/* 分类人数独立展示；窄屏卡片换行，宽表继续在现有固定容器内滚动。 */
.fangke-fenlei-tongji{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:12px 0}
.fangke-fenlei-tongji>div{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:12px 16px}
.fangke-fenlei-tongji span{display:block;font-size:12px;color:#64748b}
.fangke-fenlei-tongji strong{display:block;font-size:24px;color:#1e293b;margin-top:4px}
.fangke-fenlei-note{font-size:12px;line-height:1.6;color:#64748b;margin:0 0 12px}
@media(max-width:800px){.fangke-fenlei-tongji{grid-template-columns:repeat(2,minmax(0,1fr))}.fangke-fenlei-tongji>div{padding:10px 12px}}
/* 网页和热力网格共用整页坐标，缩放后在卡片内部滚动，不让宽页面撑破后台。 */
.tongji-heat-tools{display:flex;justify-content:space-between;gap:12px;align-items:center;font-size:13px;margin-bottom:10px}.tongji-heat-tools label{display:flex;align-items:center;gap:6px}.tongji-heat-scroll{height:560px;max-height:70vh;overflow:auto;border:1px solid #dbe5f1;border-radius:8px;background:#eef4fb;overscroll-behavior:contain}.tongji-heat-space{position:relative;margin:0 auto}.tongji-heat-stage{position:absolute;left:0;top:0;transform-origin:top left}.tongji-heat-frame{position:absolute;inset:0;width:100%;height:100%;border:0;background:white;pointer-events:none}.tongji-heat-stage .tongji-heat{position:absolute;inset:0;width:100%;height:100%;border:0;border-radius:0;z-index:1}.tongji-heat-stage .tongji-heat[hidden]{display:none}.tongji-heat-status{font-size:12px;line-height:1.6;color:#64748b;margin:8px 0 0;overflow-wrap:anywhere}
