:root{--bg:#f3f5fa;--paper:#fff;--ink:#202b43;--muted:#7c879d;--line:#e8ecf3;--accent:#5865dc;--accent-light:#eef0ff;--green:#24927c;--amber:#b47a23;--shadow:0 8px 30px #28335206;--radius:18px}*{box-sizing:border-box}body{margin:0;font:14px/1.65 "Segoe UI","Microsoft YaHei",sans-serif;color:var(--ink);background:var(--bg)}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.48}button,input,select{outline:none}button:focus-visible,input:focus-visible,select:focus-visible{box-shadow:0 0 0 3px #5865dc35;border-color:var(--accent)}button{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:9px;padding:9px 14px;transition:background .15s,transform .15s}button:hover:not(:disabled){background:#f5f6fc}button:active:not(:disabled){transform:translateY(1px)}input,select{width:100%;border:1px solid #dfe4ee;border-radius:9px;background:#fff;padding:10px 12px;color:var(--ink);min-width:0}input::placeholder{color:#a0a9bb}label{display:block;font-weight:600;font-size:12px;margin-bottom:7px}.app{max-width:1600px;margin:auto;min-height:100vh;display:grid;grid-template-columns:248px 1fr}.sidebar{background:#fff;border-right:1px solid var(--line);padding:32px 22px;display:flex;flex-direction:column;gap:28px}.brand{display:flex;align-items:center;gap:12px}.brand-mark{width:43px;height:43px;border-radius:14px;background:var(--accent);color:white;display:grid;place-items:center;font-size:25px;font-weight:bold}.brand h1{font-size:21px;margin:0;letter-spacing:2px}.brand p{margin:0;color:var(--muted);font-size:10px;letter-spacing:1.8px}.nav-item{padding:12px 14px;border-radius:10px;background:var(--accent-light);color:var(--accent);font-weight:600;display:flex;gap:12px;align-items:center}.nav-hint{font-size:12px;color:var(--muted);padding:13px 14px}.side-card{margin-top:auto;background:#f7f8fd;padding:17px;border-radius:13px;font-size:12px;color:var(--muted)}.side-card strong{display:block;color:var(--ink);margin-bottom:7px}.side-footer{font-size:11px;color:#929cb0}.main{padding:32px 36px 24px;min-width:0}.topbar{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:27px}.eyebrow{font-size:11px;letter-spacing:1.8px;color:var(--accent);font-weight:700}.topbar h2{font-size:27px;letter-spacing:-.5px;margin:5px 0 3px}.sub{color:var(--muted);font-size:12px;margin:0}.connection{display:flex;gap:9px;align-items:center;border:1px solid var(--line);background:white;border-radius:24px;padding:8px 14px;font-size:12px;white-space:nowrap}.dot{width:7px;height:7px;border-radius:50%;background:#9aa6bb}.dot.online{background:var(--green)}.dot.offline{background:#d99a40}.panel{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);box-shadow:var(--shadow)}.source{padding:23px 25px;margin-bottom:20px}.section-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:17px}.section-head h3{font-size:15px;margin:0}.section-head small{color:var(--muted);font-size:11px}.source-grid{display:grid;grid-template-columns:1.8fr 1fr;gap:16px}.date-grid{display:grid;grid-template-columns:1fr 1fr .8fr;gap:16px;margin-top:15px}.field-note{font-size:11px;color:var(--muted);margin-top:5px}.path-options{margin-top:8px;padding:7px 10px;font-size:12px;background:#f8f9fc}.lock-notice{margin-top:17px;padding:11px 14px;border:1px solid #f0e0bf;border-radius:10px;background:#fffaf0;color:#986b24;font-size:12px;display:flex;gap:10px;align-items:flex-start}.lock-notice strong{display:block;color:#926119}.lock-symbol{font-size:17px}.source-note{color:var(--muted);font-size:12px;margin:10px 0 0;overflow-wrap:anywhere}.source-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:19px}.primary{background:var(--accent);color:white;border-color:var(--accent);font-weight:600}.primary:hover:not(:disabled){background:#4956ce}.demo-button{color:var(--accent);background:#f7f7ff;border-color:#e0e2fa}.source-actions .field-note{margin:0 0 0 auto}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin-bottom:20px}.metric{padding:17px 20px}.metric-top{color:var(--muted);font-size:11px;display:flex;justify-content:space-between}.metric-icon{font-size:15px;color:#939bde}.metric-value{font-size:27px;font-weight:650;line-height:1.3;margin:7px 0 2px;font-variant-numeric:tabular-nums}.metric-bottom{font-size:10px;color:var(--muted)}.results{overflow:hidden}.results-head{padding:20px 23px 15px;display:flex;gap:12px;justify-content:space-between;align-items:center;flex-wrap:wrap}.result-title{display:flex;align-items:center;gap:10px}.result-title h3{font-size:16px;margin:0}.pill{font-size:10px;background:var(--accent-light);color:var(--accent);padding:3px 9px;border-radius:20px}.pill.demo{background:#fff0d7;color:#a06d1c}.toolbar-actions{display:flex;gap:8px;flex-wrap:wrap}.toolbar-actions button{font-size:12px;padding:7px 11px}.filters{padding:0 23px 17px;display:grid;grid-template-columns:2fr 1fr 1fr;gap:11px}.filters input,.filters select{font-size:12px;padding:9px 11px;background:#fafbfe}.result-meta{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:#fafbfe;padding:10px 23px;display:flex;gap:12px;justify-content:space-between;color:var(--muted);font-size:11px}.note{padding:11px 23px;font-size:12px;background:#f7f8ff;color:#6a71a5;white-space:pre-wrap;overflow-wrap:anywhere}.note:empty{display:none}.message-list{padding:0 23px}.message{padding:19px 0;border-bottom:1px solid var(--line);display:grid;grid-template-columns:38px 1fr;gap:13px}.avatar{width:35px;height:35px;border-radius:12px;background:#eef0fc;color:#737cc9;display:grid;place-items:center;font-weight:700;font-size:13px}.message-main{min-width:0}.message-head{display:flex;gap:11px;align-items:center;flex-wrap:wrap}.sender{font-size:12px;font-weight:700}.time{font-size:10px;color:var(--muted)}.msg-id{font-size:10px;color:#a5adbe;margin-left:auto;overflow-wrap:anywhere}.message-text{font-size:13px;line-height:1.8;margin:7px 0 10px;white-space:pre-wrap;overflow-wrap:anywhere}.tags{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.tag{border:0;border-radius:5px;background:#eef0ff;color:#5c65b0;padding:3px 8px;font-size:10px}.tag:nth-child(3n+2){background:#e8f5f0;color:#448774}.tag:nth-child(3n){background:#fff3e7;color:#b6854d}.edit-tag{border:0;background:none;padding:3px 7px;color:#98a0b2;font-size:11px}.reason{margin:8px 0 0;color:#939db0;font-size:11px;white-space:pre-wrap;overflow-wrap:anywhere}.tag-editor{display:flex;gap:7px;margin-top:10px;flex-wrap:wrap}.tag-editor input{flex:1;min-width:180px;font-size:12px;padding:6px 9px}.tag-editor button{font-size:11px;padding:5px 10px}.editor-hint{width:100%;font-size:10px;color:var(--muted)}.empty{padding:55px 20px 62px;text-align:center;color:var(--muted)}.empty-icon{width:57px;height:57px;margin:0 auto 14px;border:1px dashed #d3d8ed;border-radius:17px;background:#f6f7fd;display:grid;place-items:center;color:#8992d4;font-size:25px}.empty h4{margin:0 0 6px;color:#63708b;font-size:14px}.empty p{margin:0;font-size:12px}.pagination{padding:15px 23px;display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:11px;color:var(--muted)}.page-controls{display:flex;gap:10px;align-items:center}.page-controls button{font-size:11px;padding:5px 11px}.footer{margin-top:17px;display:flex;justify-content:space-between;font-size:10px;color:#98a2b5;gap:12px}.toast{position:fixed;right:25px;bottom:25px;max-width:min(520px,calc(100vw - 40px));padding:13px 18px;border-radius:12px;background:#26324c;color:white;box-shadow:0 8px 30px #0002;z-index:10;white-space:pre-wrap;overflow-wrap:anywhere}.toast.error{background:#a94444}.toast[hidden]{display:none}.busy{color:var(--accent)}@media(min-width:1500px){.main{padding:37px 45px}}@media(max-width:1000px){.app{grid-template-columns:190px 1fr}.sidebar{padding:26px 16px}.main{padding:25px 22px}.source-grid{grid-template-columns:1.4fr 1fr}.metrics{gap:10px}.metric{padding:15px}}@media(max-width:760px){.app{display:block}.sidebar{padding:15px 20px;flex-direction:row;align-items:center;border-bottom:1px solid var(--line);border-right:0;gap:15px}.brand h1{font-size:18px}.brand-mark{width:35px;height:35px;font-size:20px}.sidebar nav,.side-card,.side-footer{display:none}.main{padding:22px 15px}.topbar h2{font-size:23px}.connection{padding:6px 10px;font-size:10px}.source{padding:19px 17px}.source-grid{grid-template-columns:1fr}.date-grid{grid-template-columns:1fr 1fr}.limit-field{grid-column:1/-1}.metrics{grid-template-columns:1fr 1fr}.filters{grid-template-columns:1fr 1fr;padding-left:17px;padding-right:17px}.filters input{grid-column:1/-1}.results-head,.message-list{padding-left:17px;padding-right:17px}.source-actions .field-note{width:100%;margin:3px 0 0}.footer{flex-direction:column;gap:3px}.pagination{padding:14px 17px;flex-wrap:wrap}.msg-id{display:none}.topbar{align-items:flex-start}}
.message-list{gap:0!important}.message{display:block!important;padding:5px 8px!important;margin:0!important;border-radius:0!important;border-bottom:1px solid var(--line);line-height:1.3}.message-main{display:grid!important;grid-template-columns:42px 148px minmax(120px,1fr) minmax(160px,32%) 44px;align-items:center;gap:8px;min-width:0}.message-main>.sender{font-size:12px;font-weight:600}.message-main>.time{font-size:11px;white-space:nowrap}.message-main>.message-text{margin:0!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px;line-height:1.35;cursor:pointer}.message-main>.message-text.expanded{white-space:pre-wrap;overflow-wrap:anywhere}.message-main>.tags{margin:0!important;display:flex;flex-wrap:nowrap;overflow:hidden;gap:4px}.message .tag{font-size:11px;padding:1px 5px;white-space:nowrap;line-height:1.4}.message .edit-tag{font-size:11px;padding:3px 5px;margin:0}.message .tag-editor{grid-column:1/-1;margin:4px 0}.unlock-web{margin:8px 0;padding:6px 10px}@media(max-width:800px){.message-main{grid-template-columns:32px 110px minmax(100px,1fr) 44px;gap:5px}.message-main>.tags{grid-column:3;grid-row:2}.message-main>.edit-tag{grid-column:4;grid-row:1}.message-main>.time{font-size:10px}}
.message{border-left:0;background:transparent}.message.mine,.message.peer{background:transparent}.message.mine .message-text{color:#285bbe}.message.peer .message-text{color:#227548}.message-main{grid-template-columns:148px minmax(120px,1fr) minmax(160px,32%) 44px}.sender-legend{display:inline-flex;align-items:center;gap:6px;font-size:12px}.legend-dot{width:9px;height:9px;display:inline-block;border-radius:50%}.mine-dot{background:#527ddb}.peer-dot{background:#39956a}.danger-button{color:#ae4343}.tag-editor{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px;background:#fff;border:1px solid var(--line);border-radius:8px}.tag-editor .tag-choices{width:100%;display:flex;flex-wrap:wrap;gap:5px}.tag-choice{display:inline-flex;align-items:center;gap:4px;margin:0;font-weight:400;padding:3px 6px;background:#f5f6fc;border-radius:5px;font-size:12px;cursor:pointer}.tag-choice input{width:13px;height:13px;padding:0;margin:0;accent-color:var(--accent)}.tag-editor .custom-tags{flex:1;min-width:160px;padding:6px 8px}.tag-editor .editor-hint{width:100%}.tag-editor button{padding:4px 9px}.filters{align-items:start}#undoTagsBtn{padding:3px 8px;font-size:12px}.emotion{border-width:1px}.emotion-positive{background:#e8f6ed;color:#277b4a;border-color:#a9ddbc}.emotion-affection{background:#f4eafe;color:#7c3fa0;border-color:#d9b7ee}.emotion-sad{background:#e8f0fb;color:#35639c;border-color:#adc9eb}.emotion-negative{background:#fff1e5;color:#a45b20;border-color:#f1c08f}.emotion-level-1{opacity:.72}.emotion-level-2{opacity:.86}.emotion-level-3{opacity:.96;font-weight:600}.emotion-level-4{background:#fbe1e1;color:#a22b2b;border-color:#dc8383;font-weight:700;opacity:1}.emotion-key{font-size:11px;color:var(--muted);padding:0 22px 8px}.emotion-key i{display:inline-block;width:9px;height:9px;border-radius:50%;margin:0 4px 0 10px}.emotion-key .mild{background:#b6d9bf}.emotion-key .strong{background:#e28a8a}@media(max-width:800px){.message-main{grid-template-columns:105px minmax(80px,1fr) 36px}.message-main>.tags{grid-column:2;grid-row:2}.message-main>.edit-tag{grid-column:3;grid-row:1}.result-meta{flex-wrap:wrap}}
@media(max-width:600px){.date-grid{grid-template-columns:minmax(0,1fr)!important}.date-grid>div,.source-grid>div{min-width:0}.date-grid input{max-width:100%}.source,.results{min-width:0}.results>.field-note{padding:0 16px}.message-main{grid-template-columns:94px minmax(0,1fr) 32px}}
.filters{grid-template-columns:minmax(0,1fr) 200px}.tag-bubbles{padding:0 22px 14px;display:flex;flex-wrap:wrap;gap:7px}.tag-bubble{border-radius:999px;padding:4px 10px;display:inline-flex;align-items:center;gap:7px;font-size:12px;line-height:1.5;background:#f6f7fb;border:1px solid #e0e5ef}.tag-bubble[aria-pressed=true]{background:#e9edff;border-color:#3f55c7;color:#253aa8;box-shadow:0 0 0 2px rgba(63,85,199,.28),0 2px 5px rgba(63,85,199,.18);font-weight:600;position:relative;z-index:1}.tag-bubble:focus-visible{outline:3px solid #253aa8;outline-offset:2px}.bubble-count{font-size:11px;border-radius:999px;padding:0 5px;background:#e7ebf2;color:#59667f}.tag-bubble[aria-pressed=true] .bubble-count{background:#d4dcff;color:#364dc4}@media(max-width:600px){.filters{grid-template-columns:minmax(0,1fr)!important}.tag-bubbles{padding:0 16px 12px}}
.view-tabs{display:flex;gap:8px;align-items:center;padding:12px 22px}.view-tabs button{padding:5px 12px}.priority-toggle{display:inline-flex;gap:6px;align-items:center;margin:0 0 0 auto;font-size:12px;font-weight:400}.priority-toggle input{width:14px;height:14px;margin:0}.message.low-information .message-text{opacity:.55}.items-list{padding:0 22px 12px}.item-row{border-bottom:1px solid var(--line);padding:10px 0}.item-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.item-head strong{flex:1;min-width:120px;font-size:13px;font-weight:600;overflow-wrap:anywhere}.item-head button{padding:3px 8px;font-size:12px}.item-row summary{cursor:pointer;color:var(--muted);font-size:12px;margin-top:5px}.item-evidence{font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere;margin:5px 0}.item-evidence.mine{color:#285bbe}.item-evidence.peer{color:#227548}.item-status{font-size:11px;color:#946b21}.item-meta{font-size:11px;color:var(--muted)}.items-empty{padding:20px 0;color:var(--muted)}@media(max-width:600px){.view-tabs{padding:12px 16px;flex-wrap:wrap}.items-list{padding:0 16px 12px}}
.app.sidebar-collapsed{grid-template-columns:1fr}.app.sidebar-collapsed .sidebar{display:none}.topbar-title{display:flex;align-items:flex-start;gap:12px}.sidebar-toggle{flex-shrink:0;padding:7px 10px}.source.collapsed #analyzeForm{display:none}.source-toggle{padding:4px 10px;font-size:12px}.source .section-head{flex-wrap:wrap;gap:8px}.inspect-summary{margin:12px 0;padding:10px 12px;background:#f7f8fd;border-radius:9px;white-space:pre-wrap;color:var(--muted);font-size:12px}.favorite-filter{width:auto;padding:5px 10px}.items-notice{margin:0 22px 12px;color:var(--muted);font-size:12px}.items-notice[hidden],.message-list[hidden],.items-list[hidden]{display:none!important}@media(max-width:1000px){.app.sidebar-collapsed{grid-template-columns:1fr}}
.emotion{--tone:145;opacity:1!important;background:hsl(var(--tone) 55% var(--shade,95%))!important;color:hsl(var(--tone) 55% 26%)!important;border-color:hsl(var(--tone) 40% 75%)!important}.emotion-positive{--tone:145}.emotion-affection{--tone:295}.emotion-sad{--tone:215}.emotion-negative{--tone:25}.emotion-level-1{--shade:96%}.emotion-level-2{--shade:90%}.emotion-level-3{--shade:81%}.emotion-level-4{--tone:0;--shade:70%;font-weight:700}.tag-bubble.emotion[aria-pressed=true]{outline:2px solid #253aa8;outline-offset:2px;box-shadow:0 0 0 4px rgba(37,58,168,.16),0 2px 5px rgba(37,58,168,.18)}.tag-filter-hint{font-size:11px;color:var(--muted)}.emotion-key{display:flex;flex-wrap:wrap;gap:6px 12px}.emotion-key span{display:inline-flex;align-items:center;gap:4px}.emotion-key .emotion{padding:2px 7px;border-radius:99px;font-style:normal}.tag.emotion{border-radius:99px;padding:2px 6px}
/* QQ Tagger 单页布局 */
.page{max-width:1280px;margin:0 auto;padding:28px 24px 24px}
a{color:var(--accent)}
.topbar{margin-bottom:20px}
.topbar h1{font-size:22px;margin:0;letter-spacing:.2px}
.brand-mark{width:40px;height:40px;font-size:21px}
.privacy-chip{display:flex;gap:8px;align-items:center;border:1px solid var(--line);background:#fff;border-radius:24px;padding:7px 13px;font-size:12px;white-space:nowrap;color:var(--muted)}
.source{padding:20px 22px;margin-bottom:18px}
.section-head h2,.result-title h2{font-size:15px;margin:0}
.section-head{margin-bottom:14px}
.source-row{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:14px;align-items:end}
.file-pick{position:relative;display:flex;align-items:center;gap:12px;margin:0;padding:12px 14px;border:1.5px dashed #cfd6ea;border-radius:12px;background:#fafbff;cursor:pointer;font-weight:400;min-width:0;transition:border-color .15s,background .15s}
.file-pick:hover,.file-pick.dragging{border-color:var(--accent);background:var(--accent-light)}
.file-pick:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px #5865dc35}
.file-pick input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%}
.file-pick.loaded{border-style:solid;border-color:#b9e0d3;background:#f3fbf8}
.file-icon{width:36px;height:36px;flex-shrink:0;border-radius:10px;background:#fff;border:1px solid var(--line);display:grid;place-items:center;color:var(--accent);font-size:18px}
.file-text{display:flex;flex-direction:column;min-width:0}
.file-text strong{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-text span{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.friend-field label{margin-bottom:6px}
.more{margin-top:12px;font-size:12px}
.more summary{cursor:pointer;color:var(--muted);width:max-content}
.more .date-grid{margin-top:10px}
.lock-notice{margin-top:14px}
.lock-notice[hidden]{display:none}
.lock-notice code{background:#fff3dc;padding:0 4px;border-radius:4px}
.lock-notice a{display:inline-block;margin-left:4px;font-weight:600;color:#926119}
.source-actions{margin-top:16px}
.help-line{margin:12px 0 0;font-size:12px;color:var(--muted)}
.footer a{color:inherit}
@media(max-width:760px){.page{padding:18px 16px}.source-row{grid-template-columns:1fr}.privacy-chip{font-size:11px;padding:5px 10px}.topbar{flex-wrap:wrap}.metrics{grid-template-columns:1fr 1fr}}
