:root{--sb-bg:#0f1013;--sb-item:#1c1e24;--sb-item-hover:#26292f;--sb-active:#2e3138;--sb-text:#a3a6ad;--sb-text-on:#ffffff;--sb-label:#5c5f66;--bg:#f4f4f5;--card:#ffffff;--border:#e4e4e7;--border-strong:#d4d4d8;--text:#18181b;--muted:#71717a;--faint:#a1a1aa;--accent:#f86a3b;--accent-hover:#e55526;--accent-soft:#fdeee7;--blue:#3b82f6;--green:#16a34a;--green-soft:#dcfce7;--amber:#d97706;--amber-soft:#fef3c7;--red:#dc2626;--red-soft:#fee2e2;--wa:#16a34a;--purple:#7c3aed;--purple-soft:#ede9fe;--shadow:0 1px 2px rgba(0,0,0,.05)}*{box-sizing:border-box;margin:0;padding:0}body,html{height:100%}body{font-family:-apple-system,Segoe UI,Roboto,Helvetica Neue,sans-serif;background:var(--bg);color:var(--text);font-size:14px}.shell{display:flex;min-height:100vh}aside#sidebar{width:236px;flex-shrink:0;background:var(--sb-bg);color:var(--sb-text);display:flex;flex-direction:column;position:-webkit-sticky;position:sticky;top:0;height:100vh}.brand{gap:10px;padding:16px 16px 14px}.brand,.brand .mark{display:flex;align-items:center}.brand .mark{width:30px;height:30px;border-radius:7px;background:var(--accent);color:#fff;justify-content:center;font-weight:800;font-size:14px;flex-shrink:0}i.ti{font-size:16px;line-height:1;vertical-align:-2px}.ti-spin{animation:spin 1s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(1turn)}}.snav i.ti{font-size:17px}.abtn i.ti{font-size:13px}button i.ti{font-size:14px;vertical-align:-2px}.hint i.ti,.modal .who i.ti{font-size:13px}.brand .t1{color:var(--sb-text-on);font-weight:700;font-size:13.5px;line-height:1.2}.brand .t2{font-size:11px;color:var(--sb-label)}nav.snav{flex:1 1;overflow-y:auto;padding:4px 10px 10px}.nav-label{font-size:10.5px;font-weight:700;letter-spacing:.08em;color:var(--sb-label);padding:14px 8px 6px}nav.snav a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:6px;color:var(--sb-text);text-decoration:none;font-size:13px;cursor:pointer;position:relative}nav.snav a .ico{width:18px;text-align:center;flex-shrink:0}nav.snav a:hover{background:var(--sb-item-hover);color:var(--sb-text-on)}nav.snav a.on{background:var(--sb-active);color:var(--sb-text-on)}nav.snav a.on:before{content:"";position:absolute;left:-10px;top:6px;bottom:6px;width:3px;border-radius:0 3px 3px 0;background:var(--accent)}.pill{margin-left:auto;min-width:20px;padding:1px 7px;border-radius:10px;font-size:10.5px;font-weight:700;background:#31343c;color:#cfd2d9;text-align:center}.pill.grn{background:#12351f;color:#4ade80}.pill.hot{background:#3d1616;color:#f87171}.sidebar-foot{padding:12px;border-top:1px solid #1e2026}.sidebar-foot button{width:100%;background:var(--sb-item);border:1px solid #2a2d34;color:var(--sb-text);padding:8px 12px;border-radius:6px;cursor:pointer;font-size:12.5px}.sidebar-foot button:hover{color:var(--sb-text-on);border-color:#3a3d45}main{flex:1 1;min-width:0;display:flex;flex-direction:column}.topbar{background:var(--card);border-bottom:1px solid var(--border);padding:12px 24px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;position:-webkit-sticky;position:sticky;top:0;z-index:10}.crumb{font-size:12px;color:var(--faint)}.crumb b{font-size:15px;display:block}.crumb b,.crumb span:last-child{color:var(--text)}.topbar .right{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.content{padding:20px 24px 60px;max-width:1400px;width:100%;margin:0 auto}#hamburger{display:none}.abtn:focus-visible,.snav a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.card{background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:16px;margin-bottom:16px}.card h2{font-size:14px;font-weight:600;margin-bottom:12px;display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(155px,1fr));grid-gap:12px;gap:12px;margin-bottom:16px}.stat{background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:14px}.stat .v{font-size:24px;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.stat .l{font-size:12px;color:var(--muted);margin-top:2px}button.b{background:var(--accent);border:none;color:#fff;padding:7px 14px;border-radius:6px;cursor:pointer;font-size:12.5px;font-weight:600}button.b:hover{background:var(--accent-hover)}button.ghost{background:var(--card);border:1px solid var(--border-strong);color:var(--muted);padding:7px 12px;border-radius:6px;cursor:pointer;font-size:12.5px}button.ghost:hover{color:var(--text);border-color:var(--faint)}input[type=text],select,textarea{background:var(--card);border:1px solid var(--border-strong);color:var(--text);padding:7px 10px;border-radius:6px;font-size:12.5px}input[type=text]{width:230px}input[type=text]:focus,select:focus,textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}textarea{width:100%;font-family:inherit}.row{gap:8px;flex-wrap:wrap}.row,label.chk{display:flex;align-items:center}label.chk{gap:5px;font-size:12px;color:var(--muted);cursor:pointer}a{color:var(--blue);text-decoration:none}a.ct{color:var(--green);text-decoration:underline;font-size:12.5px}.tbl-wrap{overflow-x:auto}.virtual-scroll{max-height:min(68vh,720px);overflow:auto;overflow-anchor:none;scrollbar-gutter:stable}.virtual-scroll:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.virtual-table{table-layout:fixed;min-width:1050px}.virtual-table thead{position:-webkit-sticky;position:sticky;top:0;z-index:1;background:var(--card);box-shadow:0 1px 0 var(--border)}.virtual-table td{overflow-wrap:anywhere}.virtual-table .virtual-item td{border-bottom:1px solid var(--border)}.virtual-table .virtual-spacer td{padding:0;border:0}.infinite-footer{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px}.infinite-loading{padding:12px;text-align:center;color:var(--muted);font-size:12px}.infinite-error{color:var(--red);font-size:12px}.outreach-filters{display:flex;align-items:flex-end;flex-wrap:wrap;gap:10px;margin-bottom:16px}.outreach-filters label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--muted)}.outreach-filters .outreach-search{flex:1 1 240px}.outreach-filters input,table{width:100%}table{border-collapse:collapse;font-size:13px}th{text-align:left;color:var(--muted);font-weight:500;white-space:nowrap;font-size:12px}td,th{padding:8px;border-bottom:1px solid var(--border)}td{vertical-align:top}tr:last-child td{border-bottom:none}tr.clickable{cursor:pointer}tr.clickable:hover{background:#fafafa}.detail{display:none}.detail.open{display:table-row;background:#fafafa}.muted{color:var(--muted);font-size:12px}.mono{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11.5px;color:var(--faint)}.empty{color:var(--muted);padding:26px 16px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px;font-size:12.5px}.empty i.ti{font-size:26px;color:var(--faint)}.hint{font-size:12.5px;color:var(--muted);margin-bottom:12px;line-height:1.5;background:var(--accent-soft);border:1px solid #f6d5c6;padding:9px 12px;border-radius:7px}.hint.danger{background:var(--red-soft);border-color:#fecaca}.actions-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));grid-gap:12px;gap:12px}.action-card{border:1px solid var(--border);border-radius:8px;padding:12px;display:flex;flex-direction:column;gap:8px}.action-card .head{display:flex;align-items:center;gap:8px;font-weight:600;font-size:13px}.action-card .head i{color:var(--blue)}.action-card .desc{font-size:12px;color:var(--muted);line-height:1.45;flex:1 1}.action-card .prm{display:flex;flex-direction:column;gap:5px}.action-card .prm label.muted{font-size:11.5px}.action-card .prm input[type=number]{width:100%}.console{background:#0b0e14;color:#c9d4e8;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12px;line-height:1.55;padding:12px 14px;border-radius:8px;max-height:360px;min-height:120px;overflow-y:auto;white-space:pre-wrap;word-break:break-word}.console::-webkit-scrollbar{width:8px}.console::-webkit-scrollbar-thumb{background:#2a3550;border-radius:4px}.pager{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:12px;flex-wrap:wrap}.pager .info{font-size:12px;color:var(--muted)}.pager .btns{display:flex;gap:6px;align-items:center}.pager button{min-width:32px}.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600;margin:1px;white-space:nowrap}.b50{background:var(--green-soft);color:var(--green)}.b70{background:var(--amber-soft);color:var(--amber)}.b91{background:var(--red-soft);color:var(--red)}.bother{background:#f4f4f5;color:var(--muted)}.bREMOVED{background:var(--purple-soft);color:var(--purple)}.bpre{background:#dbeafe;color:#1d4ed8}.u-d7,.u-exp{background:var(--red-soft);color:var(--red)}.u-d30{background:#ffedd5;color:#ea580c}.u-d60{background:var(--amber-soft);color:var(--amber)}.u-d90{background:#dbeafe;color:#1d4ed8}.acts{display:flex;gap:4px;flex-wrap:wrap}.abtn{display:inline-flex;align-items:center;gap:4px;padding:4px 9px;border-radius:6px;font-size:11.5px;font-weight:600;cursor:pointer;border:1px solid var(--border-strong);background:var(--card);color:var(--muted);text-decoration:none;white-space:nowrap}.abtn:hover{border-color:var(--faint);color:var(--text)}.abtn.wa{border-color:#bbe7cc;color:var(--green)}.abtn.wa:hover{background:#f0fdf4}.abtn.ml{border-color:#bfdbfe;color:#2563eb}.abtn.ml:hover{background:#eff6ff}.abtn.tl{border-color:#fde68a;color:var(--amber)}.abtn.lg{border-color:#ddd6fe;color:var(--purple)}.overlay{position:fixed;inset:0;background:rgba(24,24,27,.45);display:none;align-items:center;justify-content:center;z-index:50;padding:16px}.overlay.open{display:flex}.modal{background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,.12);padding:20px;width:min(560px,100%);max-height:90vh;overflow-y:auto}.modal h3{font-size:15px;margin-bottom:4px}.modal .who{color:var(--muted);font-size:12.5px;margin-bottom:14px}.modal label{display:block;font-size:12px;color:var(--muted);margin:10px 0 4px}.modal .foot{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}#toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%) translateY(80px);background:#18181b;border:1px solid #3f3f46;color:#fafafa;padding:10px 18px;border-radius:8px;font-size:13px;transition:transform .25s ease;z-index:99;max-width:90vw}#toast.show{transform:translateX(-50%) translateY(0)}.refresh-info{color:var(--faint);font-size:11px}.sk{display:inline-block;position:relative;overflow:hidden;background:var(--border);border-radius:4px;vertical-align:middle}.sk:after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.7),transparent);animation:shimmer 1.3s ease-in-out infinite}@keyframes shimmer{to{transform:translateX(100%)}}.tbl-wrap{transition:opacity .15s ease}.tbl-wrap.busy{opacity:.55;pointer-events:none}.content>*{animation:fadeInUp .25s ease both}.content>:nth-child(2){animation-delay:.05s}.content>:nth-child(3){animation-delay:.1s}@keyframes fadeInUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.badge.pulse{animation:pulse 1.6s ease-in-out infinite}@keyframes pulse{50%{opacity:.5}}button{transition:background .15s ease,color .15s ease,border-color .15s ease,opacity .15s ease}button.b:disabled,button.ghost:disabled{opacity:.55;cursor:not-allowed}.detail-loading{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:12.5px;padding:2px 0}.overlay.open .modal{animation:modalIn .18s ease}@keyframes modalIn{0%{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,#f4f4f5,#e8e8ec);padding:16px}.login-card{background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,.08);padding:28px;width:min(360px,100%);display:flex;flex-direction:column;gap:10px;text-align:center;animation:modalIn .18s ease}.login-card .mark{width:44px;height:44px;border-radius:10px;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;margin:0 auto 4px;font-size:20px}.login-card h3{font-size:16px}.login-card input{width:100%;text-align:center}.login-card button.b{margin-top:6px;padding:9px 14px}.login-err{color:var(--red);font-size:12px;display:flex;gap:6px;align-items:center;justify-content:center}@media (max-width:860px){.shell{flex-direction:column}aside#sidebar{position:fixed;z-index:40;width:250px;transform:translateX(-100%);transition:transform .2s ease;height:100vh}aside#sidebar.open{transform:translateX(0);box-shadow:0 0 40px rgba(0,0,0,.4)}#hamburger{display:inline-flex}.content{padding:16px 14px 60px}.crumb b{font-size:14px}input[type=text]{width:100%}}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.kanban{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:12px;gap:12px;align-items:start}@media (max-width:1180px){.kanban{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:700px){.kanban{grid-template-columns:1fr}}.kcol{background:var(--bg);border:1px solid var(--border);border-radius:9px;display:flex;flex-direction:column;min-height:160px;transition:background .12s,border-color .12s}.kcol.over{border-color:var(--accent);background:var(--accent-soft)}.khead{display:flex;align-items:center;gap:7px;padding:10px 12px;border-bottom:1px solid var(--border);font-size:12.5px;font-weight:600;white-space:nowrap}.khead .dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.khead i.ti{font-size:14px}.khead .kcount{margin-left:auto;background:var(--card);border:1px solid var(--border);border-radius:20px;padding:1px 8px;font-size:11px;color:var(--muted);font-weight:600}.kbody{padding:10px;display:flex;flex-direction:column;gap:9px;overflow-y:auto;max-height:calc(100vh - 300px)}.kbody .empty{padding:18px 8px;font-size:12px}.kbody .empty i.ti{font-size:20px}.kcard{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:10px;box-shadow:var(--shadow);cursor:-webkit-grab;cursor:grab;display:flex;flex-direction:column;gap:5px}.kcard:active{cursor:-webkit-grabbing;cursor:grabbing}.kcard.dragging{opacity:.4}.kcard .kname{font-weight:600;font-size:12.5px;line-height:1.35}.kcard .ct,.kcard .knotes{font-size:11.5px}.kcard .knotes{color:var(--muted);line-height:1.45;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.kcard .kmeta{display:flex;align-items:center;justify-content:space-between;gap:6px;flex-wrap:wrap}.kcard .kmeta .muted{font-size:11px}.kcard .ktag{background:var(--purple-soft);color:var(--purple);border-radius:5px;padding:1px 6px;font-size:10.5px;font-weight:600;white-space:nowrap}.kcard select{font-size:11px;padding:3px 5px;width:100%}.kempty{color:var(--muted);font-size:12px;text-align:center;padding:16px 8px}.kmore{width:100%;justify-content:center;font-size:11.5px}.term-add{display:flex;gap:8px;margin-bottom:10px;flex-wrap:wrap}.term-add input{flex:1 1 320px}.term-preview{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}.term-chip{font-size:11.5px;padding:2px 8px;border-radius:20px;border:1px solid var(--border);font-family:ui-monospace,SF Mono,Menlo,monospace}.term-chip.ok{background:var(--green-soft);border-color:#bbf7d0;color:var(--green)}.term-chip.bad{background:var(--red-soft);border-color:#fecaca;color:var(--red);text-decoration:line-through}.term-console{border:1px solid var(--border);border-radius:8px;margin-bottom:14px;overflow:hidden}.term-console .head{display:flex;align-items:center;gap:6px;padding:7px 10px;background:var(--bg);border-bottom:1px solid var(--border);font-size:12px}.term-console .head button{margin-left:auto}.term-console pre{margin:0;padding:10px;max-height:220px;overflow:auto;background:var(--sb-bg);color:#d4d4d8;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11.5px;line-height:1.55;white-space:pre-wrap}button.ghost.danger{color:var(--red);border-color:#fecaca}button.ghost.danger:hover:not(:disabled){background:var(--red-soft)}.date-range{display:inline-flex;align-items:center;gap:5px;flex-wrap:wrap}.date-range .lbl{font-size:11.5px;color:var(--muted);white-space:nowrap}.date-range .sep{font-size:11px;color:var(--faint)}.date-range input[type=date]{font-size:12px;padding:5px 7px}.date-range button.ghost{padding:4px 6px}.filter-note{font-size:11.5px;color:var(--muted);margin:-4px 0 12px}