:root{--ink:#1a1c1f;--muted:#616a75;--line:#e3e5e8;--bg:#f1f2f4;--card:#fff;--brand:#1f5eff;--brand2:#ff3d7f;--ok:#2e9d5b;--warn:#b7791f;--bad:#c9372c;--wa:#25d366}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.45 -apple-system,BlinkMacSystemFont,"San Francisco","Segoe UI",Roboto,"Helvetica Neue",sans-serif}
button,input,select,textarea{font:inherit;color:inherit}
.app{max-width:1280px;margin:0 auto;padding:16px}
.top{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;margin-bottom:14px}
.brand{display:flex;gap:10px;align-items:center}.brand small{display:block;color:var(--muted);font-size:12px}
.logo{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:linear-gradient(135deg,var(--brand),var(--brand2));font-size:18px}
.tabs{display:flex;flex-wrap:wrap;gap:4px;background:#e4e6ea;padding:4px;border-radius:12px}
.tab{border:0;background:transparent;padding:7px 12px;border-radius:9px;font-weight:600;color:var(--muted);cursor:pointer}
.tab.on{background:#fff;color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.1)}
.card{background:var(--card);border-radius:12px;box-shadow:0 1px 0 rgba(0,0,0,.05),0 0 0 1px rgba(0,0,0,.04);padding:16px 18px;margin-bottom:14px}
.card h2{font-size:15px;margin:0 0 12px}.card h3{font-size:14px;margin:16px 0 8px}
.center{text-align:center}.muted{color:var(--muted)}.small{font-size:12.5px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
@media (max-width:900px){.grid2,.grid3{grid-template-columns:1fr}}
.field{margin-bottom:12px}.field>label{display:block;font-weight:600;margin-bottom:4px}
.help{color:var(--muted);font-size:12.5px;margin-top:4px}
input[type=text],input[type=password],input[type=number],input[type=tel],input[type=url],input[type=time],select,textarea{width:100%;border:1px solid #c9ccd1;border-radius:8px;padding:7px 10px;background:#fff}
textarea{resize:vertical}
input:focus,select:focus,textarea:focus{outline:2px solid var(--brand);outline-offset:-1px;border-color:transparent}
.switch{display:flex;align-items:center;gap:8px;margin:6px 0;cursor:pointer}
.switch input{appearance:none;width:34px;height:20px;border-radius:10px;background:#c9ccd1;position:relative;cursor:pointer;flex:none;transition:background .15s}
.switch input::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .15s}
.switch input:checked{background:var(--brand)}.switch input:checked::after{transform:translateX(14px)}
.btn{border:0;border-radius:9px;padding:8px 14px;font-weight:600;cursor:pointer;background:#fff;box-shadow:inset 0 0 0 1px #c9ccd1}
.btn.primary{background:var(--ink);color:#fff;box-shadow:none}.btn.brand{background:var(--brand);color:#fff;box-shadow:none}
.btn.danger{color:var(--bad)}.btn.wa{background:var(--wa);color:#fff;box-shadow:none}
.btn:disabled{opacity:.55;cursor:default}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.savebar{position:sticky;bottom:0;display:flex;justify-content:flex-end;gap:8px;padding:10px 0;background:linear-gradient(transparent,var(--bg) 30%)}
.subnav{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.pill{border:0;border-radius:999px;padding:6px 12px;background:#e4e6ea;font-weight:600;cursor:pointer}.pill.on{background:var(--ink);color:#fff}
.repeat{border:1px solid var(--line);border-left:5px solid var(--c,#1f5eff);border-radius:10px;padding:12px;margin-bottom:10px}
.repeat-head{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.emoji{width:60px!important;text-align:center;font-size:18px}
.color{width:44px;height:34px;padding:2px;border:1px solid #c9ccd1;border-radius:8px;background:#fff}
.hours td{padding:4px 8px 4px 0}
.flow{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}@media (max-width:900px){.flow{grid-template-columns:1fr 1fr}}
.flow div{background:#f6f7f9;border-radius:10px;padding:10px}.flow b{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;color:#fff;background:linear-gradient(135deg,var(--brand),var(--brand2));margin-bottom:6px}
.alert{border-radius:10px;padding:10px 12px;margin-bottom:12px}.alert.warn{background:#fff4e5}.alert.info{background:#eaf2ff}.alert.ok{background:#e7f6ec}.alert.bad{background:#fde8e6}
code,pre{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px}
pre{background:#f6f7f9;border-radius:8px;padding:10px;white-space:pre-wrap;word-break:break-all;margin:6px 0}
/* monitor */
.stats{display:grid;grid-template-columns:repeat(7,1fr);gap:10px;margin-bottom:14px}@media (max-width:1100px){.stats{grid-template-columns:repeat(4,1fr)}}@media (max-width:600px){.stats{grid-template-columns:repeat(2,1fr)}}
.stat{background:#fff;border-radius:12px;padding:12px 14px;box-shadow:0 0 0 1px rgba(0,0,0,.05)}.stat b{display:block;font-size:24px;line-height:1.1}.stat span{color:var(--muted);font-size:12.5px}
.stat.hot b{color:var(--brand)}.stat.wa b{color:#128c4b}.stat.alertc b{color:#d6336c}
.mon{display:grid;grid-template-columns:7fr 5fr;gap:14px}@media (max-width:1000px){.mon{grid-template-columns:1fr}}
table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:8px 6px;border-bottom:1px solid var(--line);vertical-align:top;font-size:13px}th{color:var(--muted);font-weight:600;font-size:12px}
tbody tr{cursor:pointer}tbody tr:hover,tbody tr.sel{background:#f3f6ff}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#c3c8d1;margin-right:5px}.dot.on{background:var(--ok)}
.sub{display:block;color:var(--muted);font-size:12px;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.badge{display:inline-block;font-size:11px;font-weight:700;padding:2px 7px;border-radius:999px;background:#e4e6ea}.badge.red{background:#fde8e6;color:var(--bad)}.badge.wa{background:var(--wa);color:#fff}.badge.blue{background:#e2ebff;color:var(--brand)}
.stage{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;white-space:nowrap}
.st-browsing{background:#f1f3f5}.st-product{background:#e7f5ff;color:#1864ab}.st-cart{background:#fff4e6;color:#d9480f}.st-checkout{background:var(--brand);color:#fff}.st-purchased{background:#d3f9d8;color:#2b8a3e}
.bar{height:5px;background:#e9ecef;border-radius:4px;overflow:hidden;margin-top:4px}.bar i{display:block;height:100%}
.list button{display:block;width:100%;text-align:left;border:0;border-bottom:1px solid var(--line);background:none;padding:10px 4px;cursor:pointer}.list button:hover{background:#f6f7f9}
.log{height:340px;overflow-y:auto;background:#f6f7f9;border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:6px;margin:10px 0}
.msg{max-width:85%;padding:7px 10px;border-radius:12px;white-space:pre-wrap;word-wrap:break-word;font-size:13px}.msg small{display:block;font-size:11px;opacity:.7}
.m-customer{align-self:flex-start;background:#fff;box-shadow:0 0 0 1px var(--line)}.m-ai{align-self:flex-end;background:#e8efff}.m-agent{align-self:flex-end;background:var(--brand);color:#fff}.m-system{align-self:center;color:var(--muted);font-size:12px}
.sticky{position:sticky;top:12px}
.toasts{position:fixed;right:16px;bottom:16px;display:flex;flex-direction:column;gap:8px;z-index:50;max-width:340px}
.toast{background:#1a1c1f;color:#fff;border-radius:10px;padding:10px 12px;box-shadow:0 8px 24px rgba(0,0,0,.25);cursor:pointer}
.live{font-size:12px;color:var(--ok);display:inline-flex;align-items:center;gap:6px}.live::before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor;animation:p 2s infinite}.live.off{color:var(--bad)}@keyframes p{50%{opacity:.3}}
.trace{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:8px}.trace summary{cursor:pointer;font-weight:600}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.chip{border:1px solid #c9ccd1;background:#fff;border-radius:999px;padding:4px 10px;cursor:pointer;font-size:12.5px}
.step{display:flex;gap:12px;margin-bottom:14px}.step>b{flex:none;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--ink);color:#fff}.step.done>b{background:var(--ok)}
