:root{--bg:#fafaf9;--surface:#fff;--surface-2:#f5f5f4;--border:#e7e5e4;--text:#1c1917;--text-muted:#78716c;--primary:#4f46e5;--primary-rgb:79,70,229;--primary-foreground:#fff;--success:#059669;--warning:#d97706;--danger:#e11d48;--radius:14px;--shadow-card:0 1px 2px rgba(28,25,23,.04),0 4px 16px rgba(28,25,23,.04);--shadow-hover:0 2px 4px rgba(28,25,23,.06),0 12px 32px rgba(28,25,23,.08);--shadow-pop:0 8px 28px rgba(28,25,23,.14),0 2px 6px rgba(28,25,23,.08);--grid:rgba(28,25,23,.1)}.dark{--bg:#0c0a09;--surface:#1c1917;--surface-2:#292524;--border:#292524;--text:#fafaf9;--text-muted:#a8a29e;--shadow-card:0 1px 2px rgba(0,0,0,.4),0 4px 16px rgba(0,0,0,.35);--shadow-hover:0 2px 4px rgba(0,0,0,.5),0 12px 32px rgba(0,0,0,.5);--shadow-pop:0 8px 28px rgba(0,0,0,.6),0 2px 6px rgba(0,0,0,.5);--grid:hsla(60,9%,98%,.12)}*{box-sizing:border-box;margin:0;padding:0}body,html{height:100%}body{font-family:Manrope,system-ui,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;transition:background .35s ease,color .35s ease}.mono{font-family:JetBrains Mono,monospace;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}button{font-family:inherit;cursor:pointer;border:none;background:none}a,button{color:inherit}a{text-decoration:none}::selection{background:rgba(var(--primary-rgb),.22)}.app{display:grid;grid-template-columns:248px 1fr;min-height:100vh}.sidebar{background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;position:-webkit-sticky;position:sticky;top:0;height:100vh;transition:background .35s ease,border-color .35s ease}.brand{display:flex;align-items:center;gap:11px;padding:20px 20px 18px}.brand .logo{width:34px;height:34px;border-radius:9px;flex:none;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--primary),rgba(var(--primary-rgb),.7));box-shadow:0 4px 12px rgba(var(--primary-rgb),.35)}.brand .bname,.brand .logo{font-weight:800;font-size:15px}.brand .bname{letter-spacing:-.2px;line-height:1.1}.brand .btag{font-size:11px;color:var(--text-muted);font-weight:500}.nav{padding:6px 12px;flex:1 1;overflow-y:auto}.nav .sec{font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;padding:14px 12px 6px;opacity:.8}.nav .sec,.nav a{color:var(--text-muted)}.nav a{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:10px;font-weight:600;font-size:13.5px;margin-bottom:1px;transition:.15s}.nav a svg{width:17px;height:17px;flex:none}.nav a:hover{background:var(--surface-2);color:var(--text)}.nav a.active{background:rgba(var(--primary-rgb),.1)}.nav a.active,.nav a.active svg{color:var(--primary)}.side-foot{padding:14px;border-top:1px solid var(--border)}.modesw{display:flex;background:var(--surface-2);border-radius:10px;padding:3px;gap:2px}.modesw button{flex:1 1;font-size:11.5px;font-weight:700;padding:7px 6px;border-radius:8px;color:var(--text-muted);transition:.15s}.modesw button.on{background:var(--surface);color:var(--text);box-shadow:var(--shadow-card)}.main{display:flex;flex-direction:column;min-width:0}.topbar{position:-webkit-sticky;position:sticky;top:0;z-index:30;-webkit-backdrop-filter:saturate(180%) blur(8px);backdrop-filter:saturate(180%) blur(8px);background:color-mix(in srgb,var(--bg) 82%,transparent);border-bottom:1px solid var(--border);padding:13px 26px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}.page-title{font-size:19px;font-weight:800;letter-spacing:-.4px}.page-sub{font-size:12.5px;color:var(--text-muted);font-weight:500;margin-top:1px}.spacer{flex:1 1}.content{padding:24px 26px 60px;max-width:1480px;width:100%;margin:0 auto}.filterbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.seg{display:flex;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:3px;box-shadow:var(--shadow-card)}.seg button{font-size:12px;font-weight:600;padding:6px 11px;border-radius:7px;color:var(--text-muted);transition:.12s}.seg button.on{background:rgba(var(--primary-rgb),.12);color:var(--primary)}.ctl{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:7px 12px;color:var(--text);box-shadow:var(--shadow-card);transition:.15s;position:relative}.ctl:hover{border-color:rgba(var(--primary-rgb),.4)}.ctl svg{width:15px;height:15px;color:var(--text-muted)}.icon-btn{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-card);transition:.15s}.icon-btn:hover{border-color:rgba(var(--primary-rgb),.4);transform:translateY(-1px)}.icon-btn svg{width:17px;height:17px;color:var(--text-muted)}.btn{display:inline-flex;align-items:center;gap:7px;font-weight:700;font-size:12.5px;padding:8px 14px;border-radius:10px;transition:.15s;white-space:nowrap}.btn svg{width:15px;height:15px}.btn-primary{background:var(--primary);color:var(--primary-foreground);box-shadow:0 4px 14px rgba(var(--primary-rgb),.32)}.btn-primary:hover{filter:brightness(1.06);transform:translateY(-1px)}.btn-ghost{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-card)}.btn-ghost:hover{border-color:rgba(var(--primary-rgb),.4)}.grid{display:grid;grid-template-columns:repeat(12,1fr);grid-gap:22px;gap:22px}.col-3{grid-column:span 3}.col-4{grid-column:span 4}.col-6{grid-column:span 6}.col-8{grid-column:span 8}.col-12{grid-column:span 12}.span-third{grid-column:span 4}.span-half{grid-column:span 6}.span-2third{grid-column:span 8}.span-full{grid-column:span 12}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:20px 22px;transition:box-shadow .18s,transform .18s,border-color .18s;position:relative}.card.hoverable:hover{box-shadow:var(--shadow-hover);transform:translateY(-2px)}.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:14px}.card-title{font-size:14.5px;font-weight:700;letter-spacing:-.2px}.card-desc{font-size:11.5px;color:var(--text-muted);font-weight:500;margin-top:2px}.kpi .kpi-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.kpi-label{font-size:12px;font-weight:600;color:var(--text-muted)}.kpi-ico{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:rgba(var(--primary-rgb),.1);color:var(--primary)}.kpi-ico svg{width:16px;height:16px}.kpi-val{font-size:30px;font-weight:700;letter-spacing:-1px;line-height:1.05}.kpi-bottom{display:flex;align-items:center;justify-content:space-between;margin-top:10px;gap:8px}.delta{display:inline-flex;align-items:center;gap:3px;font-size:11.5px;font-weight:700;padding:2px 7px;border-radius:20px}.delta svg{width:12px;height:12px}.delta.up{color:var(--success);background:rgba(5,150,105,.12)}.delta.down{color:var(--danger);background:rgba(225,29,72,.12)}.badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:3px 9px;border-radius:20px}.badge.dot:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.badge-active{color:var(--success);background:rgba(5,150,105,.13)}.badge-syncing{color:var(--warning);background:rgba(217,119,6,.13)}.badge-error{color:var(--danger);background:rgba(225,29,72,.13)}.tbl{width:100%;border-collapse:collapse}.tbl th{text-align:left;font-size:10.5px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--text-muted);padding:8px 12px}.tbl td,.tbl th{border-bottom:1px solid var(--border)}.tbl td{padding:12px;font-size:13px;font-weight:500}.tbl tr:last-child td{border-bottom:none}.tbl tbody tr{transition:.12s;cursor:pointer}.tbl tbody tr:hover{background:var(--surface-2)}.tbl .name-cell{display:flex;align-items:center;gap:10px;font-weight:700}.avatar{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-size:11.5px;font-weight:800;color:#fff;flex:none}.bar-track{height:7px;border-radius:20px;background:var(--surface-2);overflow:hidden}.bar-fill{height:100%;border-radius:20px;transition:width .8s cubic-bezier(.2,.8,.2,1)}.chart-tip{position:fixed;pointer-events:none;z-index:9999;opacity:0;transform:translateY(4px);background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-pop);padding:9px 12px;min-width:120px;transition:opacity .12s,transform .12s}.chart-tip.show{opacity:1;transform:translateY(0)}.chart-tip .tl{font-size:11px;color:var(--text-muted);font-weight:600;margin-bottom:5px}.chart-tip .tr{display:flex;align-items:center;justify-content:space-between;gap:14px;font-size:12px;margin-top:3px}.chart-tip .tr .k{display:flex;align-items:center;gap:6px;color:var(--text-muted);font-weight:600}.chart-tip .tr .sw{width:8px;height:8px;border-radius:3px}.chart-tip .tr .v{font-weight:700;font-family:JetBrains Mono,monospace}.card.editing{border-style:dashed;border-color:rgba(var(--primary-rgb),.55);cursor:-webkit-grab;cursor:grab}.card.editing:active{cursor:-webkit-grabbing;cursor:grabbing}.card.dragging{opacity:.45;outline:2px dashed var(--primary)}.card.dragover{outline:2px solid var(--primary);outline-offset:2px}.edit-handle{display:none;align-items:center;gap:4px;color:var(--text-muted)}.card.editing .edit-handle{display:inline-flex}.edit-handle svg{width:15px;height:15px}.dotmenu{position:relative}.menu-pop{position:absolute;right:0;top:30px;z-index:50;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-pop);padding:6px;min-width:210px;display:none}.menu-pop.open{display:block}.menu-lbl{font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--text-muted);padding:8px 10px 4px}.menu-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:8px;font-size:12.5px;font-weight:600;width:100%;text-align:left;transition:.1s}.menu-item:hover{background:var(--surface-2)}.menu-item svg{width:15px;height:15px;color:var(--text-muted)}.menu-item.danger,.menu-item.danger svg{color:var(--danger)}.menu-grid{display:grid;grid-template-columns:1fr 1fr 1fr;grid-gap:4px;gap:4px;padding:4px 8px 8px}.chip{font-size:11px;font-weight:700;padding:6px 4px;border-radius:7px;background:var(--surface-2);text-align:center;transition:.1s}.chip:hover{background:rgba(var(--primary-rgb),.12);color:var(--primary)}.chip.on{background:var(--primary);color:#fff}.overlay{position:fixed;inset:0;background:rgba(12,10,9,.45);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:200;opacity:0;pointer-events:none;transition:.2s}.overlay.show{opacity:1;pointer-events:auto}.sheet{position:fixed;top:0;right:0;height:100vh;width:420px;max-width:92vw;background:var(--surface);border-left:1px solid var(--border);box-shadow:var(--shadow-pop);z-index:201;transform:translateX(100%);transition:transform .28s cubic-bezier(.3,.8,.3,1);display:flex;flex-direction:column}.sheet.show{transform:translateX(0)}.sheet-head{padding:20px 22px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}.sheet-body{padding:18px 22px;overflow-y:auto;flex:1 1}.gallery-item{display:flex;align-items:center;gap:13px;padding:13px;border:1px solid var(--border);border-radius:12px;margin-bottom:10px;transition:.15s;cursor:pointer;background:var(--surface)}.gallery-item:hover{border-color:rgba(var(--primary-rgb),.5);box-shadow:var(--shadow-card);transform:translateY(-1px)}.gi-ico{width:42px;height:42px;border-radius:10px;display:grid;place-items:center;background:rgba(var(--primary-rgb),.1);color:var(--primary);flex:none}.gi-ico svg{width:21px;height:21px}.gi-t{font-weight:700;font-size:13.5px}.gi-d{font-size:11.5px;color:var(--text-muted);margin-top:1px}.dd{position:relative}.dd-pop{position:absolute;top:42px;left:0;z-index:60;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-pop);padding:6px;min-width:190px;display:none}.dd-pop.open{display:block}.toasts{position:fixed;bottom:24px;right:24px;z-index:300;display:flex;flex-direction:column;gap:10px}.toast{display:flex;align-items:center;gap:11px;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-pop);padding:12px 16px;min-width:260px;animation:toastIn .3s cubic-bezier(.2,.9,.3,1)}.toast .t-ico{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;background:rgba(5,150,105,.13);color:var(--success);flex:none}.toast .t-ico svg{width:16px;height:16px}.toast .t-t{font-weight:700;font-size:13px}.toast .t-d{font-size:11.5px;color:var(--text-muted)}@keyframes toastIn{0%{opacity:0;transform:translateX(40px)}to{opacity:1;transform:none}}.skel{background:linear-gradient(90deg,var(--surface-2) 25%,rgba(var(--primary-rgb),.06) 37%,var(--surface-2) 63%);background-size:400% 100%;animation:shimmer 1.4s infinite;border-radius:8px}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:48px 20px;gap:12px}.state .s-ico{width:56px;height:56px;border-radius:16px;display:grid;place-items:center;background:var(--surface-2);color:var(--text-muted)}.state .s-ico svg{width:26px;height:26px}.state .s-t{font-weight:700;font-size:15px}.state .s-d{font-size:13px;color:var(--text-muted);max-width:320px}.chat-wrap{display:flex;flex-direction:column;height:calc(100vh - 160px);max-width:860px;margin:0 auto}.chat-scroll{flex:1 1;overflow-y:auto;padding:10px 4px;display:flex;flex-direction:column;gap:16px}.msg{display:flex;gap:11px;max-width:88%}.msg.user{align-self:flex-end;flex-direction:row-reverse}.msg .mav{width:32px;height:32px;border-radius:9px;flex:none;display:grid;place-items:center;color:#fff;font-weight:800;font-size:12px}.msg.bot .mav{background:linear-gradient(135deg,var(--primary),rgba(var(--primary-rgb),.7))}.msg.user .mav{background:var(--surface-2);color:var(--text-muted)}.bubble{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:13px 15px;font-size:13.5px;box-shadow:var(--shadow-card);line-height:1.55}.msg.user .bubble{background:var(--primary);color:#fff;border-color:transparent}.suggest{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0 14px}.sg-chip{font-size:12px;font-weight:600;padding:8px 13px;border-radius:20px;background:var(--surface);border:1px solid var(--border);transition:.15s;box-shadow:var(--shadow-card)}.sg-chip:hover{border-color:rgba(var(--primary-rgb),.5);transform:translateY(-1px)}.chat-input{display:flex;gap:10px;padding-top:14px}.chat-input input{flex:1 1;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px 15px;font-family:inherit;font-size:13.5px;color:var(--text);outline:none;box-shadow:var(--shadow-card)}.chat-input input:focus{border-color:rgba(var(--primary-rgb),.5)}.typing{display:inline-flex;gap:4px;padding:4px 0}.typing i{width:7px;height:7px;border-radius:50%;background:var(--text-muted);animation:bounce 1.2s infinite}.typing i:nth-child(2){animation-delay:.15s}.typing i:nth-child(3){animation-delay:.3s}@keyframes bounce{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-5px);opacity:1}}.login{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(1200px 600px at 70% -10%,rgba(var(--primary-rgb),.16),transparent 60%),var(--bg)}.login-card{width:100%;max-width:400px;background:var(--surface);border:1px solid var(--border);border-radius:20px;box-shadow:var(--shadow-pop);padding:34px 32px}.field{margin-bottom:14px}.field label{display:block;font-size:12px;font-weight:700;margin-bottom:6px;color:var(--text-muted)}.field input{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:11px;padding:11px 13px;font-family:inherit;font-size:13.5px;color:var(--text);outline:none}.field input:focus{border-color:rgba(var(--primary-rgb),.55)}.reveal{opacity:0;transform:translateY(12px)}.reveal.in{opacity:1;transform:none;transition:opacity .5s ease,transform .5s cubic-bezier(.2,.8,.2,1)}.between,.row{display:flex;align-items:center;gap:10px}.between{justify-content:space-between}.muted{color:var(--text-muted)}.tnum{font-family:JetBrains Mono,monospace;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.live-dot{width:7px;height:7px;border-radius:50%;background:var(--success);box-shadow:0 0 0 0 rgba(5,150,105,.5);animation:pulse 2s infinite}@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(5,150,105,.5)}70%{box-shadow:0 0 0 7px rgba(5,150,105,0)}to{box-shadow:0 0 0 0 rgba(5,150,105,0)}}.legend{display:flex;flex-wrap:wrap;gap:12px;margin-top:12px}.legend span{display:flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;color:var(--text-muted)}.legend i{width:9px;height:9px;border-radius:3px;display:inline-block}@media (max-width:1280px){.kpi-row{grid-template-columns:repeat(3,1fr)!important}}@media (max-width:1080px){.app{grid-template-columns:1fr}.sidebar{display:none}.col-4,.col-6,.col-8,.span-2third,.span-half,.span-third{grid-column:span 12}.col-3{grid-column:span 6}}@media (max-width:680px){.kpi-row{grid-template-columns:repeat(2,1fr)!important}}@media (max-width:560px){.col-3{grid-column:span 12}.content{padding:16px}.topbar{padding:12px 16px}}@media (max-width:420px){.kpi-row{grid-template-columns:1fr!important}}.hide{display:none!important}