@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700;800&family=Sora:wght@400;600;700;800&display=swap");:root{--bg:#0b0e0c;--panel:#141a16;--panel-2:#1a221c;--line:#2a342c;--ink:#e6efe8;--ink-dim:#8aa090;--ink-faint:#5c6f62;--phosphor:#4ade80;--phosphor-dim:#2a6e44;--amber:#f5a623;--red:#ef5350;--radius:4px}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:Sora,sans-serif;font-size:14px;line-height:1.5;background-image:radial-gradient(circle at 15% -10%,rgba(74,222,128,.06),transparent 40%),linear-gradient(rgba(255,255,255,.012) 1px,transparent 0),linear-gradient(90deg,rgba(255,255,255,.012) 1px,transparent 0);background-size:100% 100%,32px 32px,32px 32px;min-height:100vh}.mono{font-family:JetBrains Mono,monospace}.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 28px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,var(--panel),transparent)}.brand{display:flex;align-items:baseline;gap:12px}.brand h1{font-family:JetBrains Mono,monospace;font-weight:800;font-size:18px;letter-spacing:-.5px}.brand h1 .accent{color:var(--phosphor)}.brand .tag{font-size:11px;color:var(--ink-faint);border:1px solid var(--line);padding:2px 8px;border-radius:999px}.brand .tag,.clock{font-family:JetBrains Mono,monospace}.clock{color:var(--ink-dim);font-size:12px}.wrap{max-width:1180px;margin:0 auto;padding:28px}.section-title{font-family:JetBrains Mono,monospace;font-size:11px;text-transform:uppercase;letter-spacing:2px;color:var(--ink-faint);margin:32px 0 14px;display:flex;align-items:center;gap:10px}.section-title:before{content:"";width:6px;height:6px;background:var(--phosphor);border-radius:50%;box-shadow:0 0 8px var(--phosphor)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));grid-gap:16px;gap:16px}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;position:relative;overflow:hidden;transition:border-color .2s,transform .2s}.card:hover{border-color:var(--phosphor-dim);transform:translateY(-2px)}.card:after{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--phosphor);opacity:.7}.card.down:after{background:var(--red)}.card .agent-key{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--ink-faint);letter-spacing:1px}.card .agent-name{font-weight:700;font-size:17px;margin:6px 0 8px}.card .agent-desc{color:var(--ink-dim);font-size:13px;min-height:38px}.status{display:inline-flex;align-items:center;gap:7px;font-family:JetBrains Mono,monospace;font-size:12px;margin-top:14px;padding:4px 10px;border-radius:999px;border:1px solid var(--line)}.dot{width:8px;height:8px;border-radius:50%}.status.up{color:var(--phosphor);border-color:var(--phosphor-dim)}.status.up .dot{background:var(--phosphor);box-shadow:0 0 8px var(--phosphor);animation:pulse 2s infinite}.status.down{color:var(--red)}.status.down .dot{background:var(--red)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.stats{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:1px;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.stat{background:var(--panel);padding:18px 20px}.stat .num{font-family:JetBrains Mono,monospace;font-size:28px;font-weight:800}.stat .num.green{color:var(--phosphor)}.stat .num.amber{color:var(--amber)}.stat .lbl{font-size:11px;color:var(--ink-faint);text-transform:uppercase;letter-spacing:1px;margin-top:4px}.tbl{width:100%;border-collapse:collapse;font-size:13px}.tbl th{text-align:left;font-family:JetBrains Mono,monospace;font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--ink-faint);padding:10px 14px}.tbl td,.tbl th{border-bottom:1px solid var(--line)}.tbl td{padding:11px 14px;color:var(--ink)}.tbl tr:hover td{background:var(--panel-2)}.tbl .mono{color:var(--ink-dim)}.badge{font-family:JetBrains Mono,monospace;font-size:11px;padding:2px 8px;border-radius:3px}.badge.done{background:rgba(74,222,128,.12);color:var(--phosphor)}.badge.pending{background:rgba(245,166,35,.12);color:var(--amber)}.badge.error{background:rgba(239,83,80,.12);color:var(--red)}.empty{text-align:center;color:var(--ink-faint);padding:48px;font-family:JetBrains Mono,monospace;font-size:13px}.empty .big{font-size:32px;opacity:.3;margin-bottom:8px}.panel-box{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.offline-banner{background:rgba(239,83,80,.08);border:1px solid rgba(239,83,80,.3);color:var(--red);padding:12px 18px;font-size:13px;margin-bottom:20px}.btn,.offline-banner{border-radius:var(--radius);font-family:JetBrains Mono,monospace}.btn{font-size:12px;padding:7px 14px;border:1px solid var(--line);background:var(--panel-2);color:var(--ink);cursor:pointer;transition:all .15s;text-decoration:none;display:inline-flex;align-items:center;gap:6px}.btn:hover{border-color:var(--phosphor-dim)}.btn.primary{background:var(--phosphor-dim);border-color:var(--phosphor);color:var(--ink)}.btn.primary:hover{background:var(--phosphor);color:var(--bg)}.btn.ghost{background:transparent}.btn:disabled{opacity:.4;cursor:not-allowed}.review-head{display:flex;flex-wrap:wrap;gap:18px 28px;padding:18px 20px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:18px}.rh-item .k{font-family:JetBrains Mono,monospace;font-size:10px;text-transform:uppercase;letter-spacing:1px;color:var(--ink-faint)}.rh-item .v{font-size:15px;font-weight:600;margin-top:2px}.line-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;margin-bottom:14px;position:relative}.line-card.moi{border-left:3px solid var(--amber)}.line-card.done{border-left:3px solid var(--phosphor)}.line-top{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.line-ncc{font-size:14px;font-weight:600}.line-ma{font-size:11px;color:var(--ink-faint)}.flag,.line-ma{font-family:JetBrains Mono,monospace}.flag{font-size:10px;padding:2px 7px;border-radius:3px;height:-moz-fit-content;height:fit-content;white-space:nowrap}.flag.moi{background:rgba(245,166,35,.14);color:var(--amber)}.flag.ok{background:rgba(74,222,128,.12);color:var(--phosphor)}.fld-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));grid-gap:12px;gap:12px;margin-top:14px}.fld label{display:block;font-size:10px;text-transform:uppercase;letter-spacing:1px;color:var(--ink-faint);margin-bottom:4px}.fld input,.fld label,.fld select{font-family:JetBrains Mono,monospace}.fld input,.fld select{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:var(--radius);color:var(--ink);padding:7px 9px;font-size:13px}.fld input:focus,.fld select:focus{outline:none;border-color:var(--phosphor)}.fld .ro{color:var(--ink-dim)}.sku-box{position:relative}.sku-results{position:absolute;z-index:20;top:100%;left:0;right:0;background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);max-height:220px;overflow:auto;margin-top:2px}.sku-opt{padding:8px 10px;cursor:pointer;border-bottom:1px solid var(--line);font-size:12px}.sku-opt:hover{background:var(--phosphor-dim)}.sku-opt .code{font-family:JetBrains Mono,monospace;color:var(--phosphor);font-size:11px}.line-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:14px;align-items:center}.save-msg{font-family:JetBrains Mono,monospace;font-size:11px}.save-msg.ok{color:var(--phosphor)}.save-msg.err{color:var(--red)}.back-link{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-dim);text-decoration:none}.back-link:hover{color:var(--phosphor)}.nav-links{display:flex;gap:6px;flex:1 1;justify-content:center}.nav-link{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-dim);text-decoration:none;padding:6px 12px;border-radius:var(--radius);border:1px solid transparent;transition:all .15s}.nav-link:hover{color:var(--ink);border-color:var(--line)}.nav-link.on{color:var(--phosphor);border-color:var(--phosphor-dim);background:rgba(74,222,128,.08)}.nav-user{display:flex;align-items:center;gap:12px}.nav-who{color:var(--ink-dim);font-size:12px;text-decoration:none}.nav-who:hover{color:var(--phosphor)}.login-shell{min-height:100vh;align-items:center;justify-content:center;gap:18px;padding:24px}.login-card,.login-shell{display:flex;flex-direction:column}.login-card{width:100%;max-width:360px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:32px 28px;gap:10px;position:relative;overflow:hidden}.login-card:after{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--phosphor);opacity:.8}.login-brand{font-family:JetBrains Mono,monospace;font-weight:800;font-size:24px;letter-spacing:-1px}.login-brand .accent{color:var(--phosphor)}.login-sub{color:var(--ink-faint);font-size:12px;margin-bottom:14px}.login-btn{justify-content:center;margin-top:10px;padding:11px}.login-err{background:rgba(239,83,80,.1);border:1px solid rgba(239,83,80,.3);color:var(--red);padding:9px 12px;border-radius:var(--radius);font-size:12px}.fld-label,.login-foot{color:var(--ink-faint);font-size:11px}.fld-label{font-family:JetBrains Mono,monospace;text-transform:uppercase;letter-spacing:1px;margin-top:6px}.fld{background:var(--bg);border:1px solid var(--line);color:var(--ink);border-radius:var(--radius);padding:9px 12px;font-family:Sora,sans-serif;font-size:14px;outline:none;transition:border-color .15s}.fld:focus{border-color:var(--phosphor)}.fld.sm{padding:5px 8px;font-size:12px}select.fld{cursor:pointer}.form-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;display:flex;flex-direction:column;gap:8px;max-width:420px}.form-card.row{flex-direction:row;flex-wrap:wrap;align-items:center;max-width:none;gap:10px}.form-ok{background:rgba(74,222,128,.1);border:1px solid var(--phosphor-dim);color:var(--phosphor);padding:9px 12px;border-radius:var(--radius);font-size:12px}.agent-picks{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.chip{display:inline-flex;align-items:center;gap:5px;font-family:JetBrains Mono,monospace;font-size:11px;color:var(--ink-dim);border:1px solid var(--line);border-radius:999px;padding:3px 10px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chip.on{color:var(--phosphor);border-color:var(--phosphor-dim);background:rgba(74,222,128,.08)}.chip input{accent-color:var(--phosphor);cursor:pointer}.hint{color:var(--ink-faint)}.btn.sm,.hint{font-size:11px}.btn.sm{padding:4px 9px}.zalo-bot{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:12px 18px;margin-bottom:8px}.imp-box,.zalo-bot{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius)}.imp-box{padding:14px 18px;margin:6px 0 4px}.imp-box summary{cursor:pointer;font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-dim)}.imp-box summary:hover{color:var(--phosphor)}.nk-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:8px 0 12px}.nk-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.nk-table{border-collapse:collapse;font-size:12px;min-width:1700px;table-layout:fixed}.nk-table th{position:-webkit-sticky;position:sticky;top:0;z-index:5;background:var(--panel-2);font-family:JetBrains Mono,monospace;font-size:10px;text-transform:uppercase;letter-spacing:.4px;color:var(--ink-faint);padding:8px;text-align:left}.nk-table td,.nk-table th{border-bottom:1px solid var(--line);border-right:1px solid var(--line);white-space:nowrap}.nk-table td{padding:3px 6px;vertical-align:middle}.nk-table tr.ck-row td{background:rgba(245,166,35,.06)}.nk-table tr.done-row td{background:rgba(74,222,128,.04)}.nk-table tr:hover td{background:var(--panel-2)}.nk-table td.num{text-align:right}.nk-table td.num,.nk-table td.ro{font-family:JetBrains Mono,monospace}.nk-table td.ro{color:var(--ink-faint)}.cell-inp{width:100%;background:var(--bg);border:1px solid transparent;border-radius:3px;color:var(--ink);padding:4px 6px;font-family:JetBrains Mono,monospace;font-size:12px}.cell-inp:focus{outline:none;border-color:var(--phosphor);background:var(--panel-2)}.cell-inp.num{text-align:right}.cell-num{width:92px}.cell-sku{width:140px}.cell-ten{width:220px}.cell-lo{width:104px}.cell-date{width:140px}.cell-uom{width:128px}.fixed-dd{position:fixed;z-index:200;background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);max-height:240px;overflow:auto;box-shadow:0 8px 24px rgba(0,0,0,.55)}.fixed-dd .sku-opt{white-space:normal}.fld-wrap{display:flex;flex-direction:column;gap:2px}.modal-bg{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow:auto}.modal{width:100%;max-width:640px;background:var(--panel);border:1px solid var(--phosphor-dim);border-radius:var(--radius);padding:22px;position:relative}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.modal-head h3{font-family:JetBrains Mono,monospace;font-size:15px}.modal-x{cursor:pointer;color:var(--ink-dim);background:none;border:none;font-size:22px;line-height:1}.nk-light{--bg:#ffffff;--panel:#ffffff;--panel-2:#f3f5f7;--line:#dde3e8;--ink:#1f2933;--ink-dim:#52606d;--ink-faint:#7b8794;--phosphor:#127c39;--phosphor-dim:#9ad3b0;--amber:#b46a00;--red:#d32f2f;background:#ffffff;color:#1f2933;min-height:100vh;background-image:none}.nk-light .topbar{background:#f7f9fb}.nk-light .btn.primary{background:#127c39;border-color:#127c39;color:#ffffff}.nk-light .btn.primary:hover{background:#0d5e2b}.nk-light .nk-table th{background:#eef2f5;color:#52606d}.nk-light .nk-table tr.done-row td{background:#eef9f1}.nk-light .nk-table tr.ck-row td{background:#fdf4e3}.nk-scroll{max-height:72vh;overflow:auto}.nk-table thead th{position:-webkit-sticky;position:sticky;top:0;z-index:6}.nk-light .nk-table thead th{background:#eef2f7;box-shadow:inset 0 -1px 0 #cbd5e1}.nk-table td .cell-inp{width:100%!important;box-sizing:border-box}.col-resizer{position:absolute;top:0;right:0;width:7px;height:100%;cursor:col-resize;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:8}.col-resizer:hover{background:var(--phosphor);opacity:.55}.hostbar{display:flex;flex-wrap:wrap;align-items:center;gap:14px;padding:5px 22px;font-family:var(--mono,ui-monospace,monospace);font-size:11.5px;background:rgba(12,20,12,.85);border-bottom:1px solid rgba(71,166,22,.22);color:#7da06a;letter-spacing:.3px}.hostbar .hb-tag{color:#47A616;font-weight:700;letter-spacing:1px}.hostbar .hb-item{white-space:nowrap;padding:1px 8px;border-radius:5px;border:1px solid rgba(125,160,106,.18);background:rgba(125,160,106,.05)}.hostbar .hb-dim{opacity:.55}.hostbar .hb-warn{color:#e0a106;border-color:rgba(224,161,6,.4);background:rgba(224,161,6,.08)}.hostbar .hb-crit{color:#ff5a52;border-color:rgba(255,90,82,.45);background:rgba(255,90,82,.1)}.agent-log{display:flex;align-items:baseline;gap:7px;margin:9px 0 2px;font-size:12px;line-height:1.45;color:#9fb892}.agent-log .al-dot{color:#47A616;flex:none}.agent-log .al-text{flex:1 1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-log .al-time{flex:none;font-size:11px;color:#6b8560;opacity:.85}.agent-log.al-empty{color:#5a6e50;font-style:italic;font-size:11.5px}.th-sort{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.th-sort:hover{color:var(--phosphor)}.th-resz{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-grip{position:absolute;top:0;right:-3px;width:8px;height:100%;cursor:col-resize;z-index:3}.col-grip:hover{background:var(--phosphor-dim)}.sp-scroll{max-height:78vh;overflow-x:scroll;overflow-y:auto}.sp-scroll .tbl thead th{position:-webkit-sticky;position:sticky;top:0;background:var(--panel);z-index:10;box-shadow:inset 0 -1px 0 var(--line),inset 0 1px 0 var(--line)}.sp-scroll::-webkit-scrollbar{height:14px;width:12px}.sp-scroll::-webkit-scrollbar-track{background:var(--panel-2)}.sp-scroll::-webkit-scrollbar-thumb{background:var(--phosphor-dim);border-radius:7px;border:2px solid var(--panel-2)}.sp-scroll::-webkit-scrollbar-thumb:hover{background:var(--phosphor)}.sp-scroll .tbl td{overflow:hidden;text-overflow:ellipsis}.tbl thead th{position:-webkit-sticky;position:sticky;top:0;background:var(--panel);z-index:10;box-shadow:inset 0 -1px 0 var(--line)}table.tbl thead th{position:-webkit-sticky!important;position:sticky!important;top:0!important;z-index:20!important;background:var(--panel)!important}@media (max-width:640px){.wrap{padding:14px 10px}.cell-inp{font-size:12px;padding:5px 6px}.tbl td,.tbl th{padding:8px}}