.dash-page{padding:18px}.dash-head{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px;display:flex}.dash-title{margin:0;font-size:24px;font-weight:800}.dash-subtitle{opacity:.75;margin-top:6px;font-size:12px}.dash-refresh{cursor:pointer;background:#fff;border:1px solid #0000001f;border-radius:12px;height:36px;padding:0 14px}.kpi-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:12px;display:grid}@media (max-width:1100px){.kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:640px){.kpi-grid{grid-template-columns:1fr}}.kpi-card{background:#fff;border:1px solid #0000000f;border-radius:14px;padding:14px;box-shadow:0 6px 18px #0000000d}.kpi-title{opacity:.7;font-size:13px;font-weight:700}.kpi-value{margin-top:6px;font-size:28px;font-weight:900}.kpi-note{opacity:.7;margin-top:8px;font-size:12px}.chart-grid{grid-template-columns:1.4fr 1fr;gap:12px;display:grid}@media (max-width:1100px){.chart-grid{grid-template-columns:1fr}}.chart-card .card-head{background:linear-gradient(#00000005,#0000);border-bottom:1px solid #0000000f;padding:14px 16px}.card-title{font-weight:900}.card-subtitle{opacity:.75;margin-top:4px;font-size:12px}.chart-wrap{padding:10px 12px 14px}.quick-note{opacity:.85;padding:16px;font-size:13px;line-height:1.5}.skeleton-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.sk-card,.sk-chart{background:#0000000d;border-radius:14px}.sk-card{height:110px}.sk-chart{grid-column:1/-1;height:340px}.page-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.table-toolbar{background:linear-gradient(#00000005,#0000);border-bottom:1px solid #0000000f;flex-wrap:wrap;justify-content:space-between;gap:12px;padding:14px 16px;display:flex}.table-toolbar .left,.table-toolbar .right{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.select:focus,.input:focus{border-color:#4361eeb3;box-shadow:0 0 0 3px #2f4fff1f}.table thead th{text-align:left;opacity:.85;z-index:1;white-space:nowrap;background:#00000005;border-bottom:1px solid #0000000f;padding:12px 16px;font-size:13px;position:sticky;top:0}.table tbody td{vertical-align:middle;white-space:nowrap;border-bottom:1px solid #0000000f;padding:14px 16px}.qr-box{background:#fff;border:1px solid #00000014;border-radius:10px;justify-content:center;align-items:center;padding:6px;display:inline-flex}.pill{border-radius:999px;align-items:center;height:28px;padding:0 12px;font-size:12px;font-weight:700;display:inline-flex}.pill-info{color:#2f4fff;background:#2f4fff1f;border:1px solid #2f4fff40}.btn-action{cursor:pointer;background:#fff;border:1px solid #0000001f;border-radius:10px;height:34px;padding:0 12px;font-weight:700}.action-wrap{display:inline-block;position:relative}.action-menu{z-index:50;background:#fff;border:1px solid #0000001f;border-radius:12px;width:200px;position:absolute;top:42px;right:0;overflow:hidden;box-shadow:0 14px 30px #0000002e}.action-item{text-align:left;cursor:pointer;background:#fff;border:0;width:100%;padding:10px 12px;font-size:13px;font-weight:700}.action-item:hover{background:#2f4fff14}.action-item:active{background:#2f4fff1f}.icon-btn:hover{background:#00000008}.field span{opacity:.75;font-size:13px;font-weight:700}.btn-ghost,.btn-primary{cursor:pointer;border-radius:10px;height:36px;padding:0 14px;font-weight:800}.btn-ghost:hover{background:#00000008}.btn-primary{color:#fff;background:#2f4fff;border:0}@media (max-width:920px){.input{width:180px}}@media (max-width:640px){.page{padding:14px}.page-title{font-size:20px}.input{width:100%}.table-toolbar{align-items:flex-start}.table-toolbar .left,.table-toolbar .right{justify-content:space-between;width:100%}.action-menu{width:100%;min-width:180px}}.actions{gap:8px;display:inline-flex}.btn-action{cursor:pointer;background:#fff;border:1px solid #0000001f;border-radius:10px;height:34px;padding:0 12px}.btn-action:hover{background:#00000008}.btn-danger{color:#dc3545;cursor:pointer;background:#dc354514;border:1px solid #dc354559;border-radius:10px;height:34px;padding:0 12px;font-weight:700}.btn-danger:hover{background:#dc35451f}.page-head{justify-content:space-between;align-items:center;margin-bottom:14px;display:flex}.table-toolbar{background:linear-gradient(#00000005,#0000);border-bottom:1px solid #0000000f;justify-content:space-between;gap:12px;padding:14px 16px;display:flex}.table-toolbar .left,.table-toolbar .right{align-items:center;gap:10px;display:flex}.select,.input{background:#fff;border:1px solid #0000001f;border-radius:10px;outline:none;height:36px;padding:0 12px}.input{width:240px}.w-full{width:100%}.select:focus,.input:focus{border-color:#4361eeb3}.table thead th{text-align:left;opacity:.8;z-index:1;background:#00000005;border-bottom:1px solid #0000000f;padding:12px 16px;font-size:13px;position:sticky;top:0}.table tbody td{vertical-align:middle;border-bottom:1px solid #0000000f;padding:14px 16px}.table tbody tr:hover{background:#4361ee0a}.pill{background:#0000000a;border:1px solid #0000001f;border-radius:999px;align-items:center;height:28px;padding:0 12px;font-size:12px;font-weight:700;display:inline-flex}.pill-ok{color:#198754;background:#1987541a;border-color:#19875440}.pill-info{color:#2f4fff;background:#2f4fff1f;border-color:#2f4fff40}.btn-primary-soft{color:#2f4fff;cursor:pointer;background:#4361ee1f;border:0;border-radius:12px;height:38px;padding:0 14px;font-weight:700;box-shadow:0 6px 14px #0000000f}.btn-primary-soft:hover{background:#4361ee29}.hint{opacity:.7;margin-top:6px;font-size:12px;display:block}.modal-backdrop{z-index:999;background:#00000059;justify-content:center;align-items:center;padding:18px;display:flex;position:fixed;inset:0}.modal-card{background:#fff;border:1px solid #00000014;border-radius:14px;width:min(620px,100%);overflow:hidden;box-shadow:0 18px 50px #00000040}.modal-head{border-bottom:1px solid #0000000f;justify-content:space-between;align-items:flex-start;gap:10px;padding:14px 16px;display:flex}.modal-title{font-size:16px;font-weight:800}.modal-subtitle{opacity:.75;margin-top:4px;font-size:12px}.icon-btn{cursor:pointer;background:#fff;border:1px solid #0000001f;border-radius:10px;width:34px;height:34px}.modal-body{padding:14px 16px}.field span{opacity:.75;font-size:13px}.modal-foot{justify-content:flex-end;gap:10px;margin-top:16px;display:flex}.btn-ghost,.btn-primary{cursor:pointer;border-radius:10px;height:36px;padding:0 14px}.btn-ghost{background:#fff;border:1px solid #0000001f}.btn-primary{color:#fff;background:#2f4fff;border:0;font-weight:700}.btn-primary:hover{filter:brightness(.95)}.page{padding:18px}.page-head{margin-bottom:12px}.page-title{margin:0;font-size:24px;font-weight:800}.page-subtitle{opacity:.7;margin-top:4px;font-size:12px}.filter-card{background:#fff;border:1px solid #0000000f;border-radius:12px;margin-bottom:12px;padding:14px 16px;box-shadow:0 6px 18px #0000000d}.filter-row{flex-wrap:wrap;align-items:end;gap:12px;display:flex}.field{gap:6px;display:grid}label{opacity:.75;font-size:13px;font-weight:700}.input,.select{background:#fff;border:1px solid #0000001f;border-radius:10px;outline:none;height:36px;padding:0 12px}.spacer{flex:1}.btn-primary,.btn-danger,.btn-success{cursor:pointer;border:0;border-radius:10px;height:36px;padding:0 14px;font-weight:800}.btn-primary{color:#fff;background:#2f4fff}.btn-danger{color:#fff;background:#ff4d4f}.btn-success{color:#fff;background:#22c55e}.card{background:#fff;border:1px solid #0000000f;border-radius:12px;overflow:hidden;box-shadow:0 6px 18px #0000000d}.table-toolbar{border-bottom:1px solid #0000000f;justify-content:space-between;gap:12px;padding:14px 16px;display:flex}.left,.right{align-items:center;gap:10px;display:flex}.label{opacity:.75;font-size:13px}.table-wrap{overflow-x:auto}.table{border-collapse:separate;border-spacing:0;width:100%}thead th{text-align:left;opacity:.8;background:#00000005;border-bottom:1px solid #0000000f;padding:12px 16px;font-size:13px}tbody td{border-bottom:1px solid #0000000f;padding:14px 16px}tbody tr:hover{background:#4361ee0a}.strong{font-weight:700}.mono{font-family:ui-monospace,Menlo,Monaco,Consolas,Courier New,monospace}.empty{text-align:center;opacity:.7;padding:26px}
