:root{--nv-primary:#0b63ce;--nv-primary-2:#0a4ea6;--nv-cyan:#0bb7d4;--nv-dark:#08172b;--nv-sidebar:#0b1f3a;--nv-sidebar-2:#102c50;--nv-bg:#f4f7fb;--nv-card:#fff;--nv-text:#17233a;--nv-muted:#718096;--nv-border:#e5ebf3;--shadow:0 14px 40px rgba(14,36,74,.08);--radius:18px}
[data-bs-theme=dark]{--nv-bg:#07111f;--nv-card:#0d1b2d;--nv-text:#f3f6fb;--nv-muted:#8fa1ba;--nv-border:#20304a;--shadow:0 14px 40px rgba(0,0,0,.25)}
*{box-sizing:border-box}body{font-family:'Be Vietnam Pro',sans-serif;background:var(--nv-bg);color:var(--nv-text);font-size:14px}.min-w-0{min-width:0}.app-shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;width:270px;background:linear-gradient(180deg,var(--nv-sidebar),var(--nv-sidebar-2));color:#fff;z-index:1040;display:flex;flex-direction:column;box-shadow:20px 0 50px rgba(2,15,35,.08)}.sidebar-brand{height:88px;display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid rgba(255,255,255,.08)}.logo-wrap{background:#fff;border-radius:13px;padding:8px 12px;width:185px;height:50px;display:flex;align-items:center}.logo-wrap img{width:100%;height:100%;object-fit:contain}.sidebar-nav{padding:14px 12px;overflow:auto;flex:1}.nav-label{font-size:10px;letter-spacing:.15em;color:rgba(255,255,255,.42);font-weight:700;padding:18px 13px 8px}.nav-item{display:flex;align-items:center;gap:12px;color:rgba(255,255,255,.72);padding:11px 13px;text-decoration:none;border-radius:12px;margin:2px 0;transition:.2s}.nav-item i{font-size:17px;width:22px}.nav-item:hover,.nav-item.active{color:#fff;background:linear-gradient(90deg,rgba(11,99,206,.95),rgba(11,183,212,.45));transform:translateX(2px)}.nav-dot{width:7px;height:7px;border-radius:50%;margin-left:auto}.sidebar-user{display:flex;align-items:center;gap:10px;padding:15px 18px;border-top:1px solid rgba(255,255,255,.08);background:rgba(0,0,0,.08)}.sidebar-user small{color:rgba(255,255,255,.52);font-size:10px;text-transform:uppercase}.avatar{width:38px;height:38px;border-radius:12px;background:linear-gradient(135deg,#33b7e8,#0b63ce);display:grid;place-items:center;font-weight:800}.main-content{margin-left:270px;min-height:100vh;display:flex;flex-direction:column}.topbar{height:88px;background:color-mix(in srgb,var(--nv-card) 88%,transparent);backdrop-filter:blur(14px);border-bottom:1px solid var(--nv-border);display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;z-index:1020}.topbar-kicker{font-size:10px;letter-spacing:.15em;color:var(--nv-primary);font-weight:800}.topbar-title{font-size:21px;font-weight:800}.topbar-actions{display:flex;align-items:center;gap:10px}.btn-icon{width:42px;height:42px;border:1px solid var(--nv-border);background:var(--nv-card);color:var(--nv-text);border-radius:12px;display:grid;place-items:center}.global-search{align-items:center;gap:8px;border:1px solid var(--nv-border);background:var(--nv-card);border-radius:12px;padding:0 13px;height:42px;width:250px}.global-search input{border:0;outline:0;background:transparent;width:100%;color:var(--nv-text)}.date-chip{height:42px;display:flex;align-items:center;gap:8px;padding:0 13px;border:1px solid var(--nv-border);border-radius:12px;background:var(--nv-card)}.page-container{padding:26px;flex:1}.app-footer{padding:16px 28px;color:var(--nv-muted);display:flex;justify-content:space-between;border-top:1px solid var(--nv-border)}.card{border:1px solid var(--nv-border);border-radius:var(--radius);background:var(--nv-card);box-shadow:var(--shadow)}.card-header{background:transparent;border-bottom:1px solid var(--nv-border);padding:20px 22px}.card-body{padding:22px}.section-title{font-weight:800;font-size:18px;margin:0}.section-subtitle{color:var(--nv-muted);margin:4px 0 0}.stat-card{padding:20px;position:relative;overflow:hidden}.stat-card:after{content:"";position:absolute;width:95px;height:95px;border-radius:50%;right:-28px;top:-28px;background:color-mix(in srgb,var(--nv-primary) 10%,transparent)}.stat-icon{width:46px;height:46px;border-radius:14px;display:grid;place-items:center;background:linear-gradient(135deg,rgba(11,99,206,.12),rgba(11,183,212,.18));color:var(--nv-primary);font-size:21px}.stat-value{font-size:28px;font-weight:800;margin-top:16px}.stat-label{color:var(--nv-muted);font-size:12px}.trend{font-size:11px;font-weight:700}.hero-panel{border-radius:22px;background:radial-gradient(circle at 80% 20%,rgba(11,183,212,.35),transparent 32%),linear-gradient(135deg,#09234a,#0b63ce);color:#fff;padding:28px;box-shadow:0 18px 45px rgba(11,99,206,.23);position:relative;overflow:hidden}.hero-panel:after{content:"";position:absolute;inset:auto -70px -100px auto;width:240px;height:240px;border:1px solid rgba(255,255,255,.12);border-radius:50%;box-shadow:0 0 0 35px rgba(255,255,255,.05),0 0 0 70px rgba(255,255,255,.03)}.hero-kicker{font-size:11px;letter-spacing:.16em;font-weight:800;color:#8ee8f3}.hero-title{font-size:28px;font-weight:800;max-width:700px}.hero-copy{color:rgba(255,255,255,.68);max-width:760px}.quick-action{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.14);color:#fff;border-radius:15px;padding:14px;text-decoration:none;display:flex;align-items:center;gap:12px;transition:.2s}.quick-action:hover{transform:translateY(-2px);background:rgba(255,255,255,.16);color:#fff}.quick-action i{font-size:20px}.table{--bs-table-bg:transparent;--bs-table-color:var(--nv-text);margin-bottom:0}.table thead th{color:var(--nv-muted);font-size:11px;text-transform:uppercase;letter-spacing:.06em;border-bottom-color:var(--nv-border);white-space:nowrap}.table td{border-bottom-color:var(--nv-border);vertical-align:middle}.table-hover tbody tr:hover>*{--bs-table-bg-state:color-mix(in srgb,var(--nv-primary) 4%,transparent)}.form-control,.form-select{background:var(--nv-card);border-color:var(--nv-border);color:var(--nv-text);border-radius:11px;min-height:43px}.form-control:focus,.form-select:focus{border-color:var(--nv-primary);box-shadow:0 0 0 .22rem rgba(11,99,206,.12)}.form-label{font-weight:650;font-size:12px}.btn{border-radius:11px;font-weight:650}.btn-primary{background:linear-gradient(135deg,var(--nv-primary),var(--nv-primary-2));border:0}.btn-soft-primary{background:rgba(11,99,206,.1);color:var(--nv-primary);border:0}.modal-content{background:var(--nv-card);border:1px solid var(--nv-border);border-radius:20px}.modal-header,.modal-footer{border-color:var(--nv-border)}.warehouse-map{display:grid;grid-template-columns:repeat(auto-fill,minmax(175px,1fr));gap:13px}.location-tile{border:1px solid var(--nv-border);border-left:4px solid #a6b1c3;border-radius:14px;padding:14px;background:var(--nv-card);position:relative}.location-tile.occupied{border-left-color:#17a673}.location-tile.empty{border-left-color:#a6b1c3}.location-tile.maintenance,.location-tile.blocked{border-left-color:#dc3545}.location-code{font-weight:800;font-size:12px}.capacity-bar{height:6px;background:var(--nv-border);border-radius:99px;overflow:hidden;margin-top:10px}.capacity-bar span{display:block;height:100%;background:linear-gradient(90deg,var(--nv-primary),var(--nv-cyan));border-radius:99px}.timeline-flow{display:grid;grid-template-columns:repeat(6,1fr);gap:10px}.flow-step{padding:14px;border:1px solid var(--nv-border);border-radius:14px;background:var(--nv-card);position:relative}.flow-step:not(:last-child):after{content:"→";position:absolute;right:-11px;top:50%;transform:translateY(-50%);color:var(--nv-primary);font-weight:800;z-index:2}.flow-step .num{width:30px;height:30px;border-radius:10px;display:grid;place-items:center;background:rgba(11,99,206,.1);color:var(--nv-primary);font-weight:800;margin-bottom:9px}.flow-step strong{font-size:12px}.flow-step small{display:block;color:var(--nv-muted);margin-top:5px}.module-card{height:100%;padding:18px;transition:.2s}.module-card:hover{transform:translateY(-4px);border-color:rgba(11,99,206,.35)}.module-icon{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;background:linear-gradient(135deg,rgba(11,99,206,.11),rgba(11,183,212,.18));color:var(--nv-primary);font-size:18px}.barcode-box{background:#fff;padding:18px;border:1px solid #dde4ee;border-radius:14px;text-align:center;color:#111}.barcode-box svg{max-width:100%}.dataTables_wrapper .dt-search input,.dataTables_wrapper .dt-length select{border:1px solid var(--nv-border)!important;background:var(--nv-card)!important;color:var(--nv-text)!important;border-radius:9px!important}.dataTables_wrapper .dt-info,.dataTables_wrapper .dt-paging{color:var(--nv-muted)!important}.login-page{background:#071629;position:relative;overflow:hidden}.login-shell{width:min(1100px,96vw);border-radius:28px;box-shadow:0 35px 100px rgba(0,0,0,.35);position:relative;z-index:2}.login-visual{min-height:650px;background:radial-gradient(circle at 85% 15%,rgba(15,190,220,.45),transparent 30%),linear-gradient(145deg,#071b38,#0a5dbf);color:#fff}.login-logo{width:220px;height:64px;object-fit:contain}.eyebrow{font-size:11px;letter-spacing:.2em;color:#75dfef;font-weight:800}.glass-stat{padding:15px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.08);border-radius:14px;backdrop-filter:blur(8px)}.glass-stat strong{display:block;font-size:20px}.glass-stat span{color:rgba(255,255,255,.55);font-size:11px}.brand-mark{width:56px;height:56px;border-radius:17px;background:linear-gradient(135deg,var(--nv-primary),var(--nv-cyan));display:grid;place-items:center;color:#fff;font-size:24px}.demo-account{background:#f2f6fb;padding:14px;border-radius:12px;color:#53627a}.login-orb{position:absolute;border-radius:50%;filter:blur(4px)}.orb-one{width:320px;height:320px;background:rgba(11,99,206,.25);top:-100px;left:-100px}.orb-two{width:400px;height:400px;background:rgba(11,183,212,.13);right:-130px;bottom:-120px}.sidebar-backdrop{display:none}.kpi-ring{width:120px;height:120px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--nv-primary) calc(var(--p)*1%),var(--nv-border) 0);position:relative}.kpi-ring:after{content:"";position:absolute;inset:11px;background:var(--nv-card);border-radius:50%}.kpi-ring span{position:relative;z-index:1;font-weight:800;font-size:22px}.empty-state{padding:50px 20px;text-align:center;color:var(--nv-muted)}.empty-state i{font-size:45px;color:var(--nv-primary);opacity:.5}.badge{font-weight:650}.code-pill{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;background:rgba(11,99,206,.08);color:var(--nv-primary);padding:5px 8px;border-radius:7px}.sticky-actions{position:sticky;bottom:12px;z-index:5}.detail-list{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.detail-item{padding:13px;border:1px solid var(--nv-border);border-radius:12px}.detail-item small{display:block;color:var(--nv-muted);margin-bottom:5px}.page-actions{display:flex;gap:8px;flex-wrap:wrap}.progress{background:var(--nv-border)}
@media(max-width:1199px){.timeline-flow{grid-template-columns:repeat(3,1fr)}.flow-step:nth-child(3):after{display:none}}
@media(max-width:991px){.sidebar{transform:translateX(-105%);transition:.25s}.sidebar.open{transform:translateX(0)}.sidebar-backdrop.show{display:block;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1030}.main-content{margin-left:0}.topbar{padding:0 16px}.page-container{padding:18px}.global-search{width:190px}}
@media(max-width:767px){.topbar-title{font-size:17px}.date-chip{display:none}.timeline-flow{grid-template-columns:1fr 1fr}.flow-step:nth-child(2n):after{display:none}.detail-list{grid-template-columns:1fr}.hero-title{font-size:23px}.page-container{padding:14px}.app-footer{padding:14px;display:block}.app-footer span{display:block}.login-shell{width:94vw}.card-body{padding:16px}.card-header{padding:16px}}
@media print{.sidebar,.topbar,.app-footer,.page-actions,.btn,.modal{display:none!important}.main-content{margin:0}.page-container{padding:0}.card{box-shadow:none;break-inside:avoid}}

/* WMS V2 components */
.priority-chip{display:inline-flex;align-items:center;justify-content:center;min-width:68px;padding:5px 9px;border-radius:999px;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;border:1px solid transparent}
.priority-low{background:rgba(113,128,150,.12);color:#718096;border-color:rgba(113,128,150,.2)}
.priority-normal{background:rgba(11,99,206,.1);color:var(--nv-primary);border-color:rgba(11,99,206,.17)}
.priority-high{background:rgba(245,158,11,.13);color:#b66b00;border-color:rgba(245,158,11,.22)}
.priority-urgent{background:rgba(220,53,69,.12);color:#cf3045;border-color:rgba(220,53,69,.22)}
.alert-card{overflow:hidden;border-left-width:5px}.alert-card.severity-info{border-left-color:#0dcaf0}.alert-card.severity-warning{border-left-color:#ffc107}.alert-card.severity-critical{border-left-color:#dc3545}.alert-icon{width:44px;height:44px;border-radius:14px;display:grid;place-items:center;flex:0 0 auto;font-size:20px;background:rgba(11,99,206,.09);color:var(--nv-primary)}.severity-warning .alert-icon{background:rgba(255,193,7,.14);color:#b77900}.severity-critical .alert-icon{background:rgba(220,53,69,.12);color:#dc3545}
.api-endpoint{padding:15px;border:1px solid var(--nv-border);border-radius:14px;margin-bottom:12px;display:grid;grid-template-columns:auto 1fr;align-items:center;gap:10px}.api-endpoint code{overflow-wrap:anywhere}.api-endpoint small{grid-column:1/-1;color:var(--nv-muted)}
.control-tile{display:flex;align-items:center;gap:13px;padding:15px;border:1px solid var(--nv-border);border-radius:14px;background:var(--nv-card);text-decoration:none;color:var(--nv-text);transition:.2s}.control-tile:hover{transform:translateY(-2px);border-color:rgba(11,99,206,.35);color:var(--nv-text)}.control-tile .module-icon{flex:0 0 auto}.control-tile strong{display:block}.control-tile small{color:var(--nv-muted)}
.metric-mini{padding:14px;border:1px solid var(--nv-border);border-radius:14px;background:color-mix(in srgb,var(--nv-card) 94%,var(--nv-primary) 6%)}.metric-mini strong{font-size:22px;display:block}.metric-mini small{color:var(--nv-muted)}
.workflow-strip{display:flex;gap:8px;align-items:center;overflow:auto;padding-bottom:4px}.workflow-node{min-width:145px;border:1px solid var(--nv-border);border-radius:13px;padding:12px;background:var(--nv-card)}.workflow-node b{font-size:12px}.workflow-node small{display:block;color:var(--nv-muted);margin-top:4px}.workflow-arrow{color:var(--nv-primary);font-weight:900}
.sidebar-nav::-webkit-scrollbar{width:6px}.sidebar-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.18);border-radius:999px}
[data-bs-theme=dark] .btn-close{filter:invert(1)}
@media(max-width:767px){.api-endpoint{grid-template-columns:auto 1fr}.alert-card .card-body{flex-wrap:wrap}.alert-card .card-body>div:last-child{width:100%}.control-tile{padding:13px}}

/* ===== NHẤT VIỆT WMS V2.3 · BI / VISUAL OPERATIONS / INTERACTIVE MAP ===== */
html{scroll-behavior:smooth}body{font-feature-settings:"kern" 1,"liga" 1;text-rendering:optimizeLegibility}.page-container{animation:pageReveal .42s ease both}@keyframes pageReveal{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.card{transition:transform .22s ease,border-color .22s ease,box-shadow .22s ease}.card:hover{border-color:color-mix(in srgb,var(--nv-primary) 22%,var(--nv-border))}.stat-card:hover{transform:translateY(-4px);box-shadow:0 22px 50px rgba(12,42,89,.13)}.stat-icon{transition:transform .25s ease}.stat-card:hover .stat-icon{transform:scale(1.08) rotate(-3deg)}
.filter-panel{background:linear-gradient(135deg,color-mix(in srgb,var(--nv-card) 96%,var(--nv-primary) 4%),var(--nv-card));box-shadow:0 10px 28px rgba(14,36,74,.05)}.page-actions{align-items:center}.chart-card{overflow:hidden}.chart-card .card-header{position:relative}.chart-card .card-header:after{content:"";position:absolute;left:22px;bottom:-1px;width:58px;height:3px;border-radius:99px;background:linear-gradient(90deg,var(--nv-primary),var(--nv-cyan))}
.metric-glow:before{content:"";position:absolute;inset:auto -45px -45px auto;width:110px;height:110px;border-radius:50%;filter:blur(2px);opacity:.13}.metric-primary:before{background:#0b63ce}.metric-info:before{background:#0bb7d4}.metric-danger:before{background:#ef476f}.metric-warning:before{background:#f5a524}

/* Operations control tower */
.dock-timeline{display:flex;gap:0;overflow-x:auto;padding:8px 4px 14px}.dock-event{min-width:190px;display:grid;grid-template-columns:46px 24px 1fr;align-items:start}.dock-time{font-weight:800;font-size:13px;text-align:right;padding-right:8px}.dock-time small{display:block;color:var(--nv-muted);font-weight:500}.dock-line{height:100%;position:relative}.dock-line:before{content:"";position:absolute;left:11px;top:18px;bottom:-18px;width:2px;background:var(--nv-border)}.dock-event:last-child .dock-line:before{display:none}.dock-line span{display:block;width:12px;height:12px;border-radius:50%;margin:5px auto;background:var(--nv-primary);box-shadow:0 0 0 5px rgba(11,99,206,.12)}.status-checked_in .dock-line span,.status-at_dock .dock-line span,.status-processing .dock-line span{background:#f5a524;box-shadow:0 0 0 5px rgba(245,165,36,.14)}.status-completed .dock-line span,.status-checked_out .dock-line span{background:#16a673;box-shadow:0 0 0 5px rgba(22,166,115,.14)}.dock-content{padding:0 14px 0 4px}.dock-content strong,.dock-content span{display:block}.dock-content span{color:var(--nv-muted);font-size:11px;margin:3px 0 7px}
.process-tabs{gap:8px}.process-tabs .nav-link{border-radius:12px;color:var(--nv-muted);background:var(--nv-card);border:1px solid var(--nv-border);font-weight:700}.process-tabs .nav-link.active{background:linear-gradient(135deg,var(--nv-primary),var(--nv-primary-2));border-color:transparent;color:#fff;box-shadow:0 10px 24px rgba(11,99,206,.22)}
.kanban-board{display:grid;grid-template-columns:repeat(5,minmax(250px,1fr));gap:14px;overflow-x:auto;padding-bottom:12px}.kanban-column{background:color-mix(in srgb,var(--nv-card) 82%,var(--nv-bg));border:1px solid var(--nv-border);border-radius:18px;min-height:420px;padding:12px}.kanban-column>header{display:flex;align-items:center;gap:10px;padding:8px 7px 14px}.kanban-column>header strong,.kanban-column>header small{display:block}.kanban-column>header small{color:var(--nv-muted);font-size:11px}.kanban-icon{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:rgba(11,99,206,.1);color:var(--nv-primary)}.kanban-list{display:grid;gap:10px}.operation-card{display:block;text-decoration:none;color:var(--nv-text);background:var(--nv-card);border:1px solid var(--nv-border);border-left:4px solid #94a3b8;border-radius:14px;padding:13px;box-shadow:0 8px 22px rgba(14,36,74,.05);transition:.22s}.operation-card:hover{color:var(--nv-text);transform:translateY(-3px);box-shadow:0 15px 32px rgba(14,36,74,.11)}.operation-card h4{font-size:13px;font-weight:800;margin:12px 0 8px}.operation-meta{display:flex;gap:10px;flex-wrap:wrap;color:var(--nv-muted);font-size:11px}.operation-meta span{display:flex;align-items:center;gap:4px}.operation-card .progress{height:6px;background:var(--nv-border)}.operation-card .progress-bar{background:linear-gradient(90deg,var(--nv-primary),var(--nv-cyan))}.priority-border-urgent{border-left-color:#ef476f}.priority-border-high{border-left-color:#f5a524}.priority-border-normal{border-left-color:#0b63ce}.priority-border-low{border-left-color:#94a3b8}.kanban-empty{border:1px dashed var(--nv-border);border-radius:13px;padding:28px 12px;text-align:center;color:var(--nv-muted);font-size:12px}

/* Analytics */
.sla-gauge{--p:0;width:170px;height:170px;margin:auto;border-radius:50%;display:grid;place-items:center;background:conic-gradient(#16a673 calc(var(--p)*1%),var(--nv-border) 0);position:relative}.sla-gauge:before{content:"";position:absolute;inset:15px;border-radius:50%;background:var(--nv-card)}.sla-gauge>div{position:relative;text-align:center}.sla-gauge strong{display:block;font-size:32px;font-weight:800}.sla-gauge span{color:var(--nv-muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.mini-metric{padding:12px;border:1px solid var(--nv-border);border-radius:13px;background:color-mix(in srgb,var(--nv-card) 88%,var(--nv-bg))}.mini-metric strong,.mini-metric span{display:block}.mini-metric strong{font-size:19px}.mini-metric span{font-size:10px;color:var(--nv-muted)}

/* Interactive warehouse map */
.map-toolbar{display:flex;justify-content:space-between;gap:16px;align-items:center;background:var(--nv-card);border:1px solid var(--nv-border);border-radius:15px;padding:10px 14px;box-shadow:var(--shadow)}.map-zoom-label{min-width:48px;text-align:center;font-weight:700}.map-legend{display:flex;gap:13px;flex-wrap:wrap;color:var(--nv-muted);font-size:11px}.map-legend span{display:flex;align-items:center;gap:6px}.legend-dot{width:9px;height:9px;border-radius:50%;background:#94a3b8}.legend-dot.available{background:#16a673}.legend-dot.hold{background:#f5a524}.legend-dot.damaged{background:#ef476f}.legend-dot.empty{background:#94a3b8}.warehouse-layout-shell{border:1px solid var(--nv-border);border-radius:22px;background:linear-gradient(135deg,color-mix(in srgb,var(--nv-bg) 85%,#dbeafe),var(--nv-bg));box-shadow:var(--shadow);overflow:hidden}.warehouse-layout-viewport{height:720px;overflow:auto;position:relative;background-image:linear-gradient(var(--nv-border) 1px,transparent 1px),linear-gradient(90deg,var(--nv-border) 1px,transparent 1px);background-size:24px 24px}.warehouse-layout-canvas{width:1600px;height:1100px;position:relative;transform-origin:top left;transition:transform .2s ease}.layout-location{position:absolute;background:var(--nv-card);border:1px solid var(--nv-border);border-top:4px solid var(--location-color);border-radius:16px;box-shadow:0 13px 28px rgba(14,36,74,.10);padding:10px;display:flex;flex-direction:column;transition:box-shadow .2s,border-color .2s}.layout-location:hover{box-shadow:0 18px 38px rgba(11,99,206,.17);border-color:color-mix(in srgb,var(--location-color) 40%,var(--nv-border))}.layout-location-header{display:flex;align-items:center;gap:7px}.layout-location-header strong,.layout-location-header small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layout-location-header strong{font-size:12px}.layout-location-header small{font-size:10px;color:var(--nv-muted)}.location-drag-handle{border:0;background:transparent;color:var(--nv-muted);cursor:grab;padding:3px}.location-drag-handle:active{cursor:grabbing}.capacity-badge{margin-left:auto;background:rgba(11,99,206,.09);color:var(--nv-primary);border-radius:9px;padding:4px 7px;font-size:10px;font-weight:800}.location-capacity{height:5px;border-radius:99px;background:var(--nv-border);overflow:hidden;margin:9px 0}.location-capacity span{display:block;height:100%;background:linear-gradient(90deg,var(--nv-primary),var(--nv-cyan));border-radius:inherit}.pallet-dropzone{flex:1;min-height:76px;display:grid;gap:6px;align-content:start;overflow:auto;max-height:135px;padding-right:2px}.map-pallet{border-radius:10px;border:1px solid var(--nv-border);background:color-mix(in srgb,var(--nv-card) 90%,#dbeafe);transition:.2s;cursor:grab}.map-pallet a{display:block;padding:7px 8px;text-decoration:none;color:var(--nv-text)}.map-pallet strong,.map-pallet span,.map-pallet small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.map-pallet strong{font-size:10px}.map-pallet span{font-size:10px;color:var(--nv-primary);font-weight:700}.map-pallet small{font-size:9px;color:var(--nv-muted)}.map-pallet:hover{border-color:rgba(11,99,206,.35);transform:translateY(-1px)}.map-pallet.quality-hold,.map-pallet.quality-quarantine{border-left:4px solid #f5a524}.map-pallet.quality-damaged,.map-pallet.quality-expired{border-left:4px solid #ef476f}.map-pallet.near-expiry{box-shadow:inset 0 0 0 1px rgba(239,71,111,.35)}.pallet-ghost{opacity:.35}.pallet-chosen{transform:rotate(1deg);box-shadow:0 14px 30px rgba(11,99,206,.22)}.empty-slot{height:62px;border:1px dashed var(--nv-border);border-radius:10px;display:grid;place-items:center;color:var(--nv-muted);font-size:10px}.empty-slot i{font-size:18px}.empty-slot span{display:block;margin-top:-15px}.layout-location footer{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--nv-border);padding-top:7px;margin-top:7px;color:var(--nv-muted);font-size:9px}

/* Pallet lifecycle */
.pallet-profile .barcode-box svg{width:100%;height:80px}.pallet-facts{display:grid;gap:0;margin:0}.pallet-facts>div{display:grid;grid-template-columns:110px 1fr;gap:10px;padding:10px 0;border-bottom:1px dashed var(--nv-border)}.pallet-facts>div:last-child{border-bottom:0}.pallet-facts dt{font-size:10px;color:var(--nv-muted);font-weight:600}.pallet-facts dd{margin:0;font-weight:650;font-size:12px}.mini-stat{padding:16px;display:flex;flex-direction:column;gap:5px}.mini-stat i{color:var(--nv-primary);font-size:20px}.mini-stat strong{font-size:17px}.mini-stat span{color:var(--nv-muted);font-size:10px}.lifecycle-timeline{position:relative}.lifecycle-timeline:before{content:"";position:absolute;left:19px;top:16px;bottom:20px;width:2px;background:var(--nv-border)}.lifecycle-event{display:grid;grid-template-columns:40px 1fr;gap:14px;position:relative;padding-bottom:20px}.lifecycle-marker{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;background:var(--nv-card);border:2px solid var(--nv-primary);color:var(--nv-primary);z-index:1}.event-ship .lifecycle-marker{border-color:#16a673;color:#16a673}.event-hold .lifecycle-marker,.event-adjust_minus .lifecycle-marker{border-color:#ef476f;color:#ef476f}.event-release .lifecycle-marker,.event-adjust_plus .lifecycle-marker{border-color:#16a673;color:#16a673}.lifecycle-content{border:1px solid var(--nv-border);border-radius:14px;padding:13px;background:color-mix(in srgb,var(--nv-card) 95%,var(--nv-bg))}.lifecycle-content time{color:var(--nv-muted);font-size:10px}.lifecycle-content p{margin:6px 0;color:var(--nv-muted);font-size:11px}.lifecycle-content small{color:var(--nv-muted)}.related-document{display:flex;align-items:center;justify-content:space-between;gap:10px;text-decoration:none;color:var(--nv-text);border:1px solid var(--nv-border);border-radius:12px;padding:10px}.related-document:hover{color:var(--nv-text);border-color:rgba(11,99,206,.3)}.related-document strong,.related-document span{display:block}.related-document span{font-size:10px;color:var(--nv-muted)}.move-card{display:flex;gap:10px;align-items:flex-start}.move-card>i{width:32px;height:32px;border-radius:10px;background:rgba(11,99,206,.1);color:var(--nv-primary);display:grid;place-items:center}.move-card strong,.move-card span{display:block}.move-card strong{font-size:11px}.move-card span{font-size:9px;color:var(--nv-muted)}

/* Data quality */
.data-check-card{display:flex;align-items:center;gap:12px;padding:16px;text-decoration:none;color:var(--nv-text);border-left:4px solid #94a3b8}.data-check-card:hover{color:var(--nv-text);transform:translateY(-3px)}.data-check-card.severity-danger{border-left-color:#ef476f}.data-check-card.severity-warning{border-left-color:#f5a524}.data-check-icon{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;background:rgba(11,99,206,.1);color:var(--nv-primary);font-size:18px}.data-check-card strong,.data-check-card span{display:block}.data-check-card strong{font-size:22px}.data-check-card span{font-size:10px;color:var(--nv-muted)}.encoding-stack{display:grid;gap:10px}.encoding-stack>div{display:flex;justify-content:space-between;gap:10px;padding:10px;border-radius:11px;background:color-mix(in srgb,var(--nv-card) 88%,var(--nv-bg));border:1px solid var(--nv-border)}.encoding-stack span{color:var(--nv-muted);font-size:11px}.encoding-stack strong{font-size:11px;color:var(--nv-primary)}

/* Micro interactions */
.pulse-critical{animation:pulseCritical 1.7s ease-in-out infinite}@keyframes pulseCritical{0%,100%{box-shadow:0 0 0 0 rgba(239,71,111,0)}50%{box-shadow:0 0 0 8px rgba(239,71,111,.12)}}.btn{transition:transform .16s ease,box-shadow .16s ease}.btn:active{transform:scale(.98)}.btn-primary:hover{box-shadow:0 10px 23px rgba(11,99,206,.24);transform:translateY(-1px)}.nav-item.active i{filter:drop-shadow(0 0 6px rgba(255,255,255,.45))}.table tbody tr{transition:background .15s,transform .15s}.table-hover tbody tr:hover{transform:translateX(2px)}

@media(max-width:1199px){.kanban-board{grid-template-columns:repeat(5,270px)}.map-toolbar{align-items:flex-start;flex-direction:column}.warehouse-layout-viewport{height:640px}}
@media(max-width:767px){.page-container{padding:16px}.topbar{padding:0 15px}.stat-value{font-size:23px}.dock-event{min-width:170px}.warehouse-layout-viewport{height:570px}.warehouse-layout-canvas{width:1450px}.map-legend{display:none}.pallet-facts>div{grid-template-columns:90px 1fr}}
@media print{.sidebar,.topbar,.app-footer,.page-actions,.filter-panel,.map-toolbar,.chart-download{display:none!important}.main-content{margin-left:0}.page-container{padding:0}.card{box-shadow:none;break-inside:avoid}.warehouse-layout-viewport{overflow:visible;height:auto}.warehouse-layout-canvas{transform:none!important}}

/* V2.3 map resizing */
.layout-location{position:absolute}
.location-resize-handle{position:absolute;right:7px;bottom:5px;width:24px;height:24px;border-radius:8px;display:grid;place-items:center;color:var(--location-color);background:rgba(255,255,255,.88);border:1px solid rgba(120,140,170,.22);cursor:nwse-resize;opacity:.15;transition:.2s ease;z-index:5}
.layout-location:hover .location-resize-handle{opacity:1;transform:scale(1.06)}
[data-bs-theme="dark"] .location-resize-handle{background:rgba(17,34,59,.92)}

/* V2.3 - warehouse management refinements */
.warehouse-card{transition:transform .22s ease,box-shadow .22s ease,border-color .22s ease;overflow:hidden}
.warehouse-card:hover{transform:translateY(-5px);box-shadow:0 18px 45px rgba(16,49,88,.12);border-color:rgba(13,110,253,.22)}
.warehouse-card .warehouse-address{min-height:48px}
.warehouse-progress{height:8px;background:rgba(13,110,253,.08)}
.warehouse-progress .progress-bar{background:linear-gradient(90deg,#0b63ce,#14b8a6);border-radius:999px;transition:width .7s cubic-bezier(.2,.8,.2,1)}
.metric-card{display:flex;align-items:center;gap:14px;padding:18px;background:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-radius:18px;box-shadow:0 8px 28px rgba(31,52,79,.05)}
.metric-card .metric-icon{width:48px;height:48px;border-radius:15px;display:grid;place-items:center;font-size:1.25rem;flex:0 0 auto}
.metric-card small,.metric-card span{display:block;color:var(--bs-secondary-color)}
.metric-card strong{font-size:1.45rem;line-height:1.1;margin-top:3px;display:inline-block;margin-right:5px}
.empty-state{padding:54px;text-align:center;align-items:center}.empty-state>i{font-size:3rem;color:var(--bs-primary);margin-bottom:12px}
#warehouseModal .modal-content{border:0;border-radius:22px;overflow:hidden;box-shadow:0 30px 90px rgba(4,24,52,.28)}
#warehouseModal .modal-header{padding:22px 24px;border-bottom:1px solid var(--bs-border-color)}
#warehouseModal .modal-body{padding:24px}#warehouseModal .modal-footer{padding:18px 24px}

/* ===== RBAC V2.4 ===== */
.rbac-stat{overflow:hidden;position:relative}.rbac-stat:after{content:"";position:absolute;width:90px;height:90px;border-radius:50%;right:-35px;bottom:-45px;background:linear-gradient(135deg,rgba(13,110,253,.12),transparent)}
.user-avatar-sm{width:42px;height:42px;border-radius:14px;display:grid;place-items:center;background:linear-gradient(135deg,#0d6efd,#21a8d8);color:#fff;font-weight:800;box-shadow:0 7px 18px rgba(13,110,253,.24);flex:0 0 auto}
.role-pill{display:inline-flex;align-items:center;gap:.45rem;padding:.38rem .7rem;border-radius:999px;background:color-mix(in srgb,var(--role-color,#64748b) 12%,transparent);color:var(--role-color,#64748b);border:1px solid color-mix(in srgb,var(--role-color,#64748b) 25%,transparent);font-weight:700;font-size:.78rem;white-space:nowrap}
.role-card{border-left:4px solid var(--role-color,#0d6efd);transition:.22s ease}.role-card:hover,.role-card.selected{transform:translateY(-2px);box-shadow:0 16px 36px rgba(15,23,42,.11)}.role-card.selected{outline:2px solid color-mix(in srgb,var(--role-color,#0d6efd) 35%,transparent)}
.role-icon{width:48px;height:48px;border-radius:16px;display:grid;place-items:center;background:color-mix(in srgb,var(--role-color,#0d6efd) 13%,transparent);color:var(--role-color,#0d6efd);font-size:1.35rem;flex:0 0 auto}
.scope-list{max-height:330px;overflow:auto;padding-right:.25rem}.scope-row{display:flex;justify-content:space-between;align-items:center;gap:.75rem;padding:.7rem 0;border-bottom:1px solid var(--bs-border-color)}.scope-row .form-select{max-width:135px}
.permission-choice{height:100%;display:grid;grid-template-columns:auto 1fr auto;align-items:start;gap:.75rem;padding:.85rem;border:1px solid var(--bs-border-color);border-radius:14px;cursor:pointer;transition:.18s ease;background:var(--bs-body-bg)}.permission-choice:hover{border-color:#6ea8fe;transform:translateY(-1px)}.permission-choice.checked{border-color:#0d6efd;background:rgba(13,110,253,.055);box-shadow:inset 0 0 0 1px rgba(13,110,253,.15)}.permission-choice code{font-size:.72rem}.permission-choice .form-check-input{margin-top:.25rem}.permission-accordion .accordion-button,.permission-module .accordion-button{font-weight:700}.permission-row td{vertical-align:middle}
.profile-card{position:sticky;top:100px}.profile-avatar{width:92px;height:92px;border-radius:30px;margin:auto;display:grid;place-items:center;background:linear-gradient(135deg,#0d6efd,#21a8d8);color:#fff;font-size:2.2rem;font-weight:800;box-shadow:0 18px 36px rgba(13,110,253,.28)}
.min-w-0{min-width:0}.dropdown-menu form{margin:0}.dropdown-menu form button{width:100%;text-align:left;border:0;background:transparent}
@media(max-width:1199.98px){.profile-card,.sticky-xl-top{position:static!important}}


/* V2.4.1 - Modal tài khoản ổn định trên mọi độ phân giải */
#userModal,
#passwordModal{z-index:1065}
#userModal .modal-dialog{width:min(1180px,calc(100vw - 24px));max-width:none;margin:12px auto}
#userModal .modal-content{max-height:calc(100dvh - 24px);overflow:hidden;box-shadow:0 30px 90px rgba(4,24,52,.32)}
#userModal .modal-header,
#userModal .modal-footer{flex:0 0 auto;background:var(--nv-card);position:relative;z-index:2}
#userModal .modal-body{overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;padding:24px}
#userModal .modal-footer{box-shadow:0 -10px 25px rgba(9,35,74,.05)}
#userModal .input-group .form-control{min-width:0}
#userModal.show .modal-dialog{animation:nvUserModalIn .22s ease-out both}
.modal-backdrop.show{opacity:.58}
@keyframes nvUserModalIn{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
@media (max-width:767.98px){
  #userModal .modal-dialog{width:calc(100vw - 12px);margin:6px auto;min-height:calc(100dvh - 12px)}
  #userModal .modal-content{max-height:calc(100dvh - 12px);border-radius:16px}
  #userModal .modal-header,#userModal .modal-body,#userModal .modal-footer{padding-left:16px;padding-right:16px}
  #userModal .modal-footer{display:grid;grid-template-columns:1fr 1fr}
  #userModal .modal-footer .btn{width:100%}
}


/* === V2.4.2: modal portal / backdrop stacking hotfix === */
#userModal,
#passwordModal{
  position:fixed!important;
  inset:0!important;
  width:100vw!important;
  height:100dvh!important;
  z-index:2000!important;
  padding:0!important;
  overflow:hidden!important;
  pointer-events:none;
}
#userModal.show,
#passwordModal.show{
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  pointer-events:auto;
}
#userModal .modal-dialog,
#passwordModal .modal-dialog{
  position:relative;
  z-index:2002!important;
  margin:12px!important;
  transform:none!important;
  pointer-events:auto;
}
#userModal .modal-dialog{
  width:min(1180px,calc(100vw - 24px))!important;
  max-width:none!important;
  height:auto!important;
  max-height:calc(100dvh - 24px)!important;
}
#passwordModal .modal-dialog{
  width:min(520px,calc(100vw - 24px))!important;
  max-width:none!important;
}
#userModal .modal-content{
  width:100%;
  height:auto!important;
  max-height:calc(100dvh - 24px)!important;
  display:flex!important;
  flex-direction:column!important;
  overflow:hidden!important;
  background:var(--nv-card)!important;
  opacity:1!important;
  filter:none!important;
}
#passwordModal .modal-content{
  background:var(--nv-card)!important;
  opacity:1!important;
  filter:none!important;
}
#userModal .modal-body{
  min-height:0!important;
  flex:1 1 auto!important;
  overflow-y:auto!important;
  overflow-x:hidden!important;
  -webkit-overflow-scrolling:touch;
}
#userModal .modal-header,
#userModal .modal-footer{
  flex:0 0 auto!important;
}
.modal-backdrop{
  z-index:1990!important;
}
.modal-backdrop.show{
  opacity:.58!important;
}
body.modal-open{
  overflow:hidden!important;
}
@media (max-width:767.98px){
  #userModal .modal-dialog,
  #passwordModal .modal-dialog{
    margin:6px!important;
  }
  #userModal .modal-dialog{
    width:calc(100vw - 12px)!important;
    max-height:calc(100dvh - 12px)!important;
  }
  #userModal .modal-content{
    max-height:calc(100dvh - 12px)!important;
  }
}

/* ===== INVENTORY CONTROL TOWER V2.5 ===== */
.inventory-command-center{--inv-radius:22px}.inventory-hero{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:22px 26px;border-radius:var(--inv-radius);background:linear-gradient(125deg,rgba(11,99,206,.12),rgba(17,183,212,.08) 48%,rgba(118,86,216,.10));border:1px solid rgba(11,99,206,.14);position:relative;overflow:hidden}.inventory-hero:after{content:"";position:absolute;width:220px;height:220px;border-radius:50%;right:-85px;top:-100px;background:radial-gradient(circle,rgba(11,99,206,.18),transparent 68%)}.inventory-hero>*,.inventory-kpi>*{position:relative;z-index:1}.inventory-hero .eyebrow{font-size:.74rem;font-weight:800;letter-spacing:.11em;color:#0b63ce;margin-bottom:6px}.inventory-hero-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end}
.inventory-kpi-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px}.inventory-kpi{position:relative;display:flex;align-items:center;gap:13px;min-height:132px;padding:18px;border-radius:20px;background:var(--bs-body-bg);border:1px solid var(--nv-border);box-shadow:0 12px 32px rgba(18,46,87,.07);overflow:hidden;transition:.25s ease}.inventory-kpi:hover{transform:translateY(-4px);box-shadow:0 18px 38px rgba(18,46,87,.12)}.inventory-kpi:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--kpi)}.inventory-kpi:after{content:"";position:absolute;width:90px;height:90px;border-radius:50%;right:-35px;top:-38px;background:color-mix(in srgb,var(--kpi) 13%,transparent)}.inventory-kpi .kpi-icon{width:46px;height:46px;border-radius:15px;display:grid;place-items:center;background:color-mix(in srgb,var(--kpi) 12%,transparent);color:var(--kpi);font-size:1.35rem;flex:0 0 auto}.inventory-kpi span{display:block;color:var(--nv-muted);font-size:.78rem;font-weight:700}.inventory-kpi strong{display:block;color:var(--nv-text);font-size:1.48rem;line-height:1.22;margin:4px 0}.inventory-kpi small{display:block;color:var(--nv-muted);font-size:.72rem;line-height:1.45}.kpi-blue{--kpi:#0b63ce}.kpi-cyan{--kpi:#11b7d4}.kpi-violet{--kpi:#7656d8}.kpi-amber{--kpi:#f59e0b}.kpi-red{--kpi:#ef476f}.kpi-green{--kpi:#14a673}.health-ring{--score:80;width:54px;height:54px;border-radius:50%;background:conic-gradient(var(--kpi,#14a673) calc(var(--score)*1%),rgba(120,140,170,.16) 0);display:grid;place-items:center;position:relative;margin-left:auto;flex:0 0 auto}.health-ring:before{content:"";position:absolute;inset:6px;border-radius:50%;background:var(--bs-body-bg)}.health-ring span{position:relative;color:var(--nv-text);font-size:.75rem;font-weight:800}.health-ring.large{width:92px;height:92px;--kpi:#14a673}.health-ring.large:before{inset:9px}.health-ring.large span{font-size:1.2rem}
.inventory-filter-card{border-radius:var(--inv-radius);overflow:hidden}.inventory-filter-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.inventory-filter-form .form-label{font-size:.75rem;font-weight:800;color:var(--nv-text)}.inventory-advanced-filters{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .3s ease,opacity .25s ease}.inventory-advanced-filters>.row{overflow:hidden}.inventory-advanced-filters.show{grid-template-rows:1fr;opacity:1}.inventory-filter-actions{display:flex;justify-content:space-between;align-items:center;gap:18px;border-top:1px dashed var(--nv-border);padding-top:16px}.quick-filter-chips{display:flex;flex-wrap:wrap;gap:8px}.quick-filter{border:1px solid var(--nv-border);background:var(--bs-body-bg);color:var(--nv-muted);border-radius:999px;padding:7px 11px;font-size:.74rem;font-weight:700;transition:.18s ease}.quick-filter:hover,.quick-filter.active{border-color:#0b63ce;color:#0b63ce;background:rgba(11,99,206,.08);transform:translateY(-1px)}
.inventory-view-toolbar{display:flex;justify-content:space-between;align-items:center;gap:16px}.inventory-view-tabs{display:inline-flex;padding:5px;border:1px solid var(--nv-border);background:var(--bs-body-bg);border-radius:15px;box-shadow:0 8px 22px rgba(18,46,87,.05)}.inventory-view-tab{display:flex;align-items:center;gap:8px;border:0;background:transparent;color:var(--nv-muted);font-weight:750;font-size:.82rem;padding:9px 13px;border-radius:11px;transition:.18s}.inventory-view-tab b{min-width:22px;height:22px;border-radius:999px;display:grid;place-items:center;background:rgba(120,140,170,.12);font-size:.68rem}.inventory-view-tab.active{background:linear-gradient(135deg,#0b63ce,#087fc7);color:#fff;box-shadow:0 8px 20px rgba(11,99,206,.24)}.inventory-view-tab.active b{background:rgba(255,255,255,.2)}.inventory-view-panel{display:none}.inventory-view-panel.active{display:block;animation:inventoryPanelIn .28s ease}@keyframes inventoryPanelIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.inventory-health-card .card-body{display:flex;flex-direction:column;gap:20px}.health-score-large{display:flex;align-items:center;gap:18px}.health-score-large strong{display:block;font-size:1.15rem;color:var(--nv-text)}.health-score-large small{display:block;color:var(--nv-muted);margin-top:3px}.inventory-alert-list{display:grid;gap:8px}.inventory-alert-list button{width:100%;border:1px solid var(--nv-border);background:transparent;border-radius:14px;padding:11px;display:flex;align-items:center;gap:10px;text-align:left;color:var(--nv-text);transition:.18s}.inventory-alert-list button:hover{background:rgba(11,99,206,.05);border-color:rgba(11,99,206,.25);transform:translateX(3px)}.inventory-alert-list button>div{flex:1}.inventory-alert-list strong,.inventory-alert-list small{display:block}.inventory-alert-list strong{font-size:.78rem}.inventory-alert-list small{font-size:.68rem;color:var(--nv-muted);margin-top:2px}.alert-dot{width:10px;height:10px;border-radius:50%;box-shadow:0 0 0 5px color-mix(in srgb,currentColor 13%,transparent)}.alert-dot.danger{color:#ef476f;background:#ef476f}.alert-dot.warning{color:#f59e0b;background:#f59e0b}.alert-dot.info{color:#11b7d4;background:#11b7d4}
.inventory-table-card{border-radius:var(--inv-radius);overflow:hidden}.inventory-table-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.inventory-pallet-table .row-expired{--bs-table-bg:rgba(239,71,111,.045)}.inventory-pallet-table .row-warning{--bs-table-bg:rgba(245,158,11,.04)}.age-badge{display:inline-flex;align-items:center;border-radius:999px;padding:5px 9px;font-size:.7rem;font-weight:800}.age-badge.fresh{background:rgba(20,166,115,.10);color:#12865e}.age-badge.medium{background:rgba(245,158,11,.12);color:#bd7500}.age-badge.old{background:rgba(239,71,111,.11);color:#d7375d}.pallet-fill{min-width:130px}.pallet-fill-head{display:flex;justify-content:space-between;gap:8px;margin-bottom:6px}.pallet-fill-head span{font-weight:800;font-size:.75rem}.pallet-fill-head small{font-size:.68rem;color:var(--nv-muted)}.pallet-fill .progress{height:8px;background:rgba(120,140,170,.14)}.location-flow{display:flex;align-items:center;gap:7px;min-width:180px}.location-flow span{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.72rem}.location-flow i{color:#0b63ce}.transaction-legend{display:flex;flex-wrap:wrap;gap:8px 14px}.transaction-legend span{font-size:.7rem;color:var(--nv-muted);display:inline-flex;align-items:center;gap:5px}.tx-dot{width:8px;height:8px;border-radius:50%;display:inline-block}
.inventory-compact .inventory-kpi{min-height:105px;padding:13px}.inventory-compact .inventory-kpi .kpi-icon{width:38px;height:38px;border-radius:12px}.inventory-compact .inventory-kpi strong{font-size:1.24rem}.inventory-compact .card-header{padding-top:15px;padding-bottom:15px}.inventory-compact .table>:not(caption)>*>*{padding-top:.55rem;padding-bottom:.55rem}.inventory-compact .section-subtitle{font-size:.75rem}
@media(max-width:1450px){.inventory-kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:991.98px){.inventory-hero,.inventory-filter-actions,.inventory-view-toolbar{align-items:stretch;flex-direction:column}.inventory-hero-actions{justify-content:flex-start}.inventory-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.inventory-view-tabs{width:100%;overflow-x:auto}.inventory-view-tab{white-space:nowrap;flex:1;justify-content:center}}@media(max-width:575.98px){.inventory-kpi-grid{grid-template-columns:1fr}.inventory-hero{padding:18px}.inventory-view-tab span{display:none}.inventory-filter-head,.inventory-table-toolbar{flex-direction:column}.quick-filter-chips{width:100%}.inventory-filter-actions>div:last-child{width:100%}.inventory-filter-actions>div:last-child .btn{flex:1}.inventory-kpi{min-height:110px}}
@media print{.inventory-filter-card,.inventory-view-toolbar,.inventory-hero-actions,.app-sidebar,.app-topbar,.app-footer{display:none!important}.app-main{margin:0!important}.inventory-view-panel{display:block!important;break-before:page}.inventory-command-center{padding:0}.card{box-shadow:none!important;break-inside:avoid}.inventory-kpi-grid{grid-template-columns:repeat(3,1fr)}}

/* ===== LOCATION CONTROL TOWER V2.6 ===== */
.location-control-tower{--loc-radius:22px;--loc-blue:#0b63ce;--loc-cyan:#0bb7d4;--loc-green:#14a673;--loc-violet:#7656d8;--loc-amber:#f59e0b;--loc-red:#ef476f}
.location-hero{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:25px 28px;border:1px solid rgba(11,99,206,.14);border-radius:24px;background:linear-gradient(125deg,rgba(11,99,206,.12),rgba(11,183,212,.08) 48%,rgba(118,86,216,.10));position:relative;overflow:hidden}
.location-hero:before,.location-hero:after{content:"";position:absolute;border-radius:50%;pointer-events:none}.location-hero:before{width:260px;height:260px;right:-100px;top:-150px;background:radial-gradient(circle,rgba(11,99,206,.18),transparent 68%)}.location-hero:after{width:160px;height:160px;right:150px;bottom:-120px;background:radial-gradient(circle,rgba(118,86,216,.16),transparent 68%)}
.location-hero>*{position:relative;z-index:1}.location-eyebrow{font-size:.72rem;letter-spacing:.13em;font-weight:850;color:var(--loc-blue);margin-bottom:7px}.location-hero h2{font-size:1.65rem;font-weight:850}.location-hero-actions{display:flex;flex-wrap:wrap;gap:9px;justify-content:flex-end}
.location-kpi-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px}.location-kpi{position:relative;display:flex;align-items:center;gap:14px;min-height:126px;padding:18px;border:1px solid var(--nv-border);border-radius:20px;background:var(--nv-card);box-shadow:0 12px 30px rgba(18,46,87,.07);overflow:hidden;transition:.23s ease}.location-kpi:hover{transform:translateY(-4px);box-shadow:0 18px 40px rgba(18,46,87,.12)}.location-kpi:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--kpi)}.location-kpi:after{content:"";position:absolute;width:95px;height:95px;border-radius:50%;right:-38px;top:-42px;background:color-mix(in srgb,var(--kpi) 13%,transparent)}.location-kpi>i{width:46px;height:46px;border-radius:15px;display:grid;place-items:center;background:color-mix(in srgb,var(--kpi) 12%,transparent);color:var(--kpi);font-size:1.32rem;flex:0 0 auto}.location-kpi div{min-width:0;position:relative;z-index:1}.location-kpi span{display:block;color:var(--nv-muted);font-size:.74rem;font-weight:750}.location-kpi strong{display:block;font-size:1.42rem;line-height:1.25;color:var(--nv-text);margin:4px 0}.location-kpi small{display:block;color:var(--nv-muted);font-size:.68rem;line-height:1.45}.location-kpi.kpi-blue{--kpi:var(--loc-blue)}.location-kpi.kpi-cyan{--kpi:var(--loc-cyan)}.location-kpi.kpi-green{--kpi:var(--loc-green)}.location-kpi.kpi-violet{--kpi:var(--loc-violet)}.location-kpi.kpi-amber{--kpi:var(--loc-amber)}.location-kpi.kpi-red{--kpi:var(--loc-red)}
.location-filter-card{border-radius:var(--loc-radius);overflow:hidden}.location-filter-card .form-label{font-size:.72rem;font-weight:800}.location-filter-card .input-group-text{background:transparent;border-right:0}.location-filter-card .input-group .form-control{border-left:0}.location-quick-filters{display:flex;flex-wrap:wrap;gap:7px}.location-quick-filters button{border:1px solid var(--nv-border);background:var(--nv-card);color:var(--nv-muted);border-radius:999px;padding:8px 11px;font-size:.7rem;font-weight:750;transition:.18s ease}.location-quick-filters button:hover,.location-quick-filters button.active{background:rgba(11,99,206,.09);border-color:rgba(11,99,206,.35);color:var(--loc-blue);transform:translateY(-1px)}
.location-chart-box{height:300px;min-height:300px}.location-view-toolbar{display:flex;justify-content:space-between;align-items:center;gap:16px}.location-view-tabs,.location-density-switch{display:inline-flex;align-items:center;padding:5px;border:1px solid var(--nv-border);background:var(--nv-card);border-radius:14px;box-shadow:0 8px 22px rgba(18,46,87,.05)}.location-view-tabs button,.location-density-switch button{border:0;background:transparent;color:var(--nv-muted);border-radius:10px;padding:8px 12px;font-size:.76rem;font-weight:750;display:flex;align-items:center;gap:7px;transition:.18s}.location-density-switch button{padding:8px 10px}.location-view-tabs button.active,.location-density-switch button.active{background:linear-gradient(135deg,var(--loc-blue),#087fc7);color:#fff;box-shadow:0 7px 18px rgba(11,99,206,.24)}.location-view-panel{display:none}.location-view-panel.active{display:block;animation:locationPanelIn .25s ease}@keyframes locationPanelIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.location-bulk-toolbar{position:sticky;top:100px;z-index:15;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;border:1px solid rgba(11,99,206,.22);border-radius:16px;background:color-mix(in srgb,var(--nv-card) 92%,#0b63ce 8%);box-shadow:0 14px 35px rgba(18,46,87,.13);backdrop-filter:blur(12px)}.location-bulk-toolbar[hidden]{display:none!important}.location-bulk-toolbar select{width:190px}
.location-card-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.location-command-card{position:relative;border:1px solid var(--nv-border);border-radius:21px;background:var(--nv-card);box-shadow:0 11px 30px rgba(18,46,87,.065);overflow:hidden;transition:.23s ease}.location-command-card:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--location-accent)}.location-command-card:hover{transform:translateY(-5px);box-shadow:0 20px 45px rgba(18,46,87,.13);border-color:color-mix(in srgb,var(--location-accent) 35%,var(--nv-border))}.location-command-card[hidden]{display:none!important}.location-card-select{position:absolute;top:14px;left:15px;z-index:3}.location-card-main{display:block;width:100%;padding:17px 17px 12px 39px;border:0;background:transparent;text-align:left;color:inherit}.location-card-head{display:flex;align-items:center;gap:10px}.location-card-head .min-w-0{flex:1}.location-card-head strong{display:block;font-size:.86rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.location-card-head small{display:block;color:var(--nv-muted);font-size:.65rem;margin-top:2px}.location-type-icon{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:color-mix(in srgb,var(--location-accent) 12%,transparent);color:var(--location-accent);font-size:1.08rem;flex:0 0 auto}.location-state{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:999px;padding:5px 8px;font-size:.61rem;font-weight:850}.state-empty{background:rgba(20,166,115,.11);color:#12865e}.state-occupied{background:rgba(11,99,206,.11);color:#0b63ce}.state-reserved{background:rgba(118,86,216,.12);color:#6443c8}.state-maintenance{background:rgba(245,158,11,.13);color:#b86f00}.state-blocked{background:rgba(239,71,111,.12);color:#d7375d}.location-card-structure{display:flex;justify-content:space-between;gap:10px;margin:14px 0;color:var(--nv-muted);font-size:.65rem}.location-card-structure span{display:flex;align-items:center;gap:5px;min-width:0}.location-card-structure span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.location-util-row{display:flex;align-items:center;gap:13px;padding:12px;border-radius:15px;background:color-mix(in srgb,var(--location-accent) 5%,var(--nv-card))}.location-util-ring{width:62px;height:62px;border-radius:50%;background:conic-gradient(var(--ring-color) calc(var(--util)*1%),rgba(120,140,170,.15) 0);display:grid;place-items:center;position:relative;flex:0 0 auto}.location-util-ring:before{content:"";position:absolute;inset:7px;border-radius:50%;background:var(--nv-card)}.location-util-ring span{position:relative;font-size:.7rem;font-weight:850}.location-capacity-detail{flex:1;min-width:0}.location-capacity-detail>div:not(.progress){display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:4px}.location-capacity-detail span{font-size:.63rem;color:var(--nv-muted)}.location-capacity-detail strong{font-size:.69rem}.location-capacity-detail .progress,.table-util .progress{height:6px;border-radius:999px;background:rgba(120,140,170,.14);overflow:hidden}.location-capacity-detail .progress span,.table-util .progress span{display:block;height:100%;border-radius:inherit}.location-card-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:11px}.location-card-meta span{display:flex;align-items:center;justify-content:center;gap:4px;padding:7px 5px;border:1px solid var(--nv-border);border-radius:9px;color:var(--nv-muted);font-size:.59rem;white-space:nowrap}.location-warning-strip{display:flex;align-items:center;gap:7px;margin-top:10px;padding:8px 10px;border-radius:10px;background:rgba(239,71,111,.09);color:#d7375d;font-size:.62rem;font-weight:750}.location-card-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:11px;padding-top:10px;border-top:1px dashed var(--nv-border);color:var(--nv-muted);font-size:.59rem}.location-card-footer span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.location-card-actions{display:flex;justify-content:flex-end;gap:6px;padding:0 14px 13px}.location-card-actions .btn{width:31px;height:31px;display:grid;place-items:center;padding:0;border-radius:9px}
.location-compact .location-card-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:11px}.location-compact .location-card-main{padding-top:13px;padding-bottom:8px}.location-compact .location-type-icon{width:32px;height:32px}.location-compact .location-util-row{padding:8px}.location-compact .location-util-ring{width:48px;height:48px}.location-compact .location-card-meta,.location-compact .location-card-structure span:last-child{display:none}.location-compact .location-card-footer{margin-top:7px;padding-top:7px}.location-compact .location-card-actions{padding-bottom:9px}
.rack-matrix-list{display:grid;gap:18px}.rack-matrix-card{border:1px solid var(--nv-border);border-radius:20px;background:var(--nv-card);box-shadow:0 10px 28px rgba(18,46,87,.06);overflow:hidden}.rack-matrix-card[hidden]{display:none!important}.rack-matrix-card>header{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:15px 18px;border-bottom:1px solid var(--nv-border);background:linear-gradient(90deg,rgba(11,99,206,.06),transparent)}.rack-matrix-card>header strong,.rack-matrix-card>header small{display:block}.rack-matrix-card>header small{font-size:.68rem;color:var(--nv-muted);margin-top:3px}.rack-matrix-card>header>span{font-size:.68rem;font-weight:800;border-radius:999px;padding:5px 9px;background:rgba(11,99,206,.09);color:var(--loc-blue)}.rack-bin-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(155px,1fr));gap:10px;padding:14px}.rack-bin{position:relative;min-height:104px;border:1px solid var(--nv-border);border-radius:14px;padding:12px;text-align:left;background:var(--nv-card);color:var(--nv-text);overflow:hidden;transition:.18s ease}.rack-bin:before{content:"";position:absolute;inset:auto 0 0;height:5px;background:linear-gradient(90deg,var(--bin-color) var(--bin-fill),rgba(120,140,170,.14) 0)}.rack-bin:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--bin-color) 38%,var(--nv-border));box-shadow:0 12px 24px rgba(18,46,87,.10)}.rack-bin[hidden]{display:none!important}.rack-bin>span{display:inline-flex;padding:4px 7px;border-radius:7px;background:rgba(120,140,170,.10);font-size:.58rem;font-weight:800}.rack-bin strong{display:block;font-size:.72rem;margin:9px 0 5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rack-bin small{font-size:.61rem;color:var(--nv-muted)}
.location-table-card{border-radius:20px;overflow:hidden}.location-table-card thead th{font-size:.65rem;text-transform:uppercase;letter-spacing:.04em;color:var(--nv-muted);white-space:nowrap}.location-table-card tbody tr[hidden]{display:none}.table-util{min-width:120px}.table-util>div:first-child{display:flex;justify-content:space-between;gap:8px;font-size:.68rem;margin-bottom:6px}.table-util>div:first-child span{color:var(--nv-muted)}.table-util .progress span{background:linear-gradient(90deg,var(--loc-blue),var(--loc-cyan))}.location-empty-state{padding:65px 20px;text-align:center;border:1px dashed var(--nv-border);border-radius:22px;background:rgba(120,140,170,.035)}.location-empty-state[hidden]{display:none!important}.location-empty-state>i{font-size:2.8rem;color:var(--nv-muted)}.location-empty-state h4{font-weight:800;margin:13px 0 5px}.location-empty-state p{color:var(--nv-muted)}
#locationModal .modal-dialog,#bulkLocationModal .modal-dialog,#locationDetailModal .modal-dialog{width:min(1280px,calc(100vw - 24px));max-width:none;margin:12px auto}#locationModal .modal-content,#bulkLocationModal .modal-content,#locationDetailModal .modal-content{max-height:calc(100dvh - 24px);border:0;border-radius:22px;overflow:hidden;box-shadow:0 35px 100px rgba(4,24,52,.32)}#locationModal .modal-header,#bulkLocationModal .modal-header,#locationDetailModal .modal-header{padding:20px 24px}#locationModal .modal-body,#bulkLocationModal .modal-body,#locationDetailModal .modal-body{padding:22px 24px;overflow-y:auto}#locationModal .modal-footer,#bulkLocationModal .modal-footer,#locationDetailModal .modal-footer{padding:16px 24px;box-shadow:0 -9px 25px rgba(18,46,87,.05)}.location-form-section{padding:17px;border:1px solid var(--nv-border);border-radius:17px;margin-bottom:15px;background:color-mix(in srgb,var(--nv-card) 97%,#0b63ce 3%)}.location-form-section-title{display:flex;align-items:center;gap:11px;margin-bottom:14px}.location-form-section-title>i{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;color:var(--loc-blue);background:rgba(11,99,206,.10)}.location-form-section-title strong,.location-form-section-title small{display:block}.location-form-section-title small{color:var(--nv-muted);font-size:.68rem;margin-top:2px}.bulk-location-preview{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.bulk-location-preview>div{padding:15px;border-radius:15px;border:1px solid var(--nv-border);background:linear-gradient(135deg,rgba(11,99,206,.07),transparent)}.bulk-location-preview span,.bulk-location-preview strong{display:block}.bulk-location-preview span{font-size:.68rem;color:var(--nv-muted)}.bulk-location-preview strong{font-size:1rem;margin-top:5px;overflow-wrap:anywhere}.location-detail-hero{display:flex;align-items:center;gap:22px;padding:18px;border-radius:18px;background:linear-gradient(120deg,rgba(11,99,206,.10),rgba(11,183,212,.06),rgba(118,86,216,.08));border:1px solid rgba(11,99,206,.12)}.location-detail-score{--detail-util:0;width:105px;height:105px;border-radius:50%;background:conic-gradient(var(--detail-color) calc(var(--detail-util)*1%),rgba(120,140,170,.15) 0);display:grid;place-items:center;position:relative;flex:0 0 auto}.location-detail-score:before{content:"";position:absolute;inset:10px;border-radius:50%;background:var(--nv-card)}.location-detail-score strong,.location-detail-score small{position:absolute;z-index:1}.location-detail-score strong{font-size:1.28rem;transform:translateY(-8px)}.location-detail-score small{font-size:.62rem;color:var(--nv-muted);transform:translateY(15px)}.location-detail-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;flex:1}.location-detail-metrics>div{padding:13px;border:1px solid rgba(120,140,170,.13);border-radius:13px;background:color-mix(in srgb,var(--nv-card) 90%,transparent)}.location-detail-metrics span,.location-detail-metrics strong{display:block}.location-detail-metrics span{font-size:.65rem;color:var(--nv-muted)}.location-detail-metrics strong{font-size:.88rem;margin-top:5px}.location-detail-pallets{max-height:420px;overflow:auto}.location-detail-pallet{display:grid;grid-template-columns:minmax(0,1fr) auto 18px;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--nv-border);color:var(--nv-text);text-decoration:none;transition:.17s}.location-detail-pallet:hover{background:rgba(11,99,206,.05)}.location-detail-pallet strong,.location-detail-pallet small{display:block}.location-detail-pallet small{font-size:.65rem;color:var(--nv-muted);margin-top:3px}.location-detail-empty{display:grid;place-items:center;gap:8px;padding:55px;color:var(--nv-muted)}.location-detail-empty i{font-size:2.2rem}.location-timeline{display:grid;gap:13px}.location-timeline-item{display:grid;grid-template-columns:35px 1fr;gap:11px;position:relative}.location-timeline-item:after{content:"";position:absolute;width:1px;left:17px;top:38px;bottom:-13px;background:var(--nv-border)}.location-timeline-item:last-child:after{display:none}.location-timeline-item>i{width:35px;height:35px;border-radius:11px;display:grid;place-items:center;background:rgba(11,99,206,.10);color:var(--loc-blue)}.location-timeline-item strong,.location-timeline-item small,.location-timeline-item span{display:block}.location-timeline-item strong{font-size:.75rem}.location-timeline-item small{font-size:.64rem;color:var(--nv-muted);margin:2px 0}.location-timeline-item span{font-size:.59rem;color:var(--nv-muted)}.location-detail-rules{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.location-detail-rules>div{padding:14px;border:1px solid var(--nv-border);border-radius:14px;display:grid;grid-template-columns:32px 1fr;gap:0 10px;align-items:center}.location-detail-rules i{grid-row:1/3;width:32px;height:32px;border-radius:10px;display:grid;place-items:center;color:var(--loc-blue);background:rgba(11,99,206,.09)}.location-detail-rules span,.location-detail-rules strong{display:block}.location-detail-rules span{font-size:.62rem;color:var(--nv-muted)}.location-detail-rules strong{font-size:.69rem;margin-top:2px}
@media(max-width:1500px){.location-kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.location-card-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.location-compact .location-card-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:1100px){.location-card-grid,.location-compact .location-card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.location-detail-metrics,.location-detail-rules{grid-template-columns:repeat(2,1fr)}}
@media(max-width:991.98px){.location-hero,.location-view-toolbar,.location-bulk-toolbar{align-items:stretch;flex-direction:column}.location-hero-actions{justify-content:flex-start}.location-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.location-view-tabs{width:100%;overflow-x:auto}.location-view-tabs button{flex:1;white-space:nowrap;justify-content:center}.location-detail-hero{align-items:flex-start}.location-detail-metrics{grid-template-columns:repeat(2,1fr)}}
@media(max-width:575.98px){.location-kpi-grid,.location-card-grid,.location-compact .location-card-grid{grid-template-columns:1fr}.location-kpi{min-height:105px}.location-card-main{padding-left:39px}.location-view-tabs button span{display:none}.rack-bin-grid{grid-template-columns:1fr 1fr}.location-detail-hero{flex-direction:column}.location-detail-metrics,.location-detail-rules,.bulk-location-preview{grid-template-columns:1fr}.location-detail-score{margin:auto}.location-bulk-toolbar select{width:100%}#locationModal .modal-dialog,#bulkLocationModal .modal-dialog,#locationDetailModal .modal-dialog{width:calc(100vw - 12px);margin:6px auto}#locationModal .modal-content,#bulkLocationModal .modal-content,#locationDetailModal .modal-content{max-height:calc(100dvh - 12px);border-radius:16px}}
@media print{.location-hero-actions,.location-filter-card,.location-view-toolbar,.location-bulk-toolbar,.location-card-actions,.location-card-select{display:none!important}.location-card-grid{grid-template-columns:repeat(3,1fr)!important}.location-command-card{box-shadow:none!important;break-inside:avoid}.location-view-panel{display:none!important}.location-view-panel[data-location-panel="cards"]{display:block!important}}


/* === V2.6.1: native top-layer dialog for customer form === */
.nv-native-dialog{border:0;padding:0;width:min(980px,calc(100vw - 28px));max-width:none;background:transparent;color:var(--nv-text);overflow:visible}
.nv-native-dialog[open]{animation:nvDialogFade .16s ease-out both}
.nv-native-dialog::backdrop{background:rgba(5,17,34,.62);backdrop-filter:blur(2px)}
.nv-native-dialog-card{background:var(--nv-card);border:1px solid var(--nv-border);border-radius:22px;box-shadow:0 35px 110px rgba(4,24,52,.38);max-height:calc(100dvh - 28px);display:flex;flex-direction:column;overflow:hidden}
.nv-native-dialog-header{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;padding:22px 24px;border-bottom:1px solid var(--nv-border);flex:0 0 auto}
.nv-native-dialog-header h3{font-size:1.25rem;font-weight:800}
.nv-native-dialog-header p{font-size:.78rem}
.nv-native-dialog-body{padding:24px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}
.nv-native-dialog-footer{display:flex;justify-content:flex-end;gap:10px;padding:16px 24px;border-top:1px solid var(--nv-border);background:var(--nv-card);box-shadow:0 -10px 25px rgba(18,46,87,.05);flex:0 0 auto}
.customer-dialog-note{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:13px;background:rgba(11,183,212,.08);border:1px solid rgba(11,183,212,.18);color:var(--nv-muted);font-size:.72rem}
.customer-dialog-note i{color:#0bb7d4;font-size:1rem}
@keyframes nvDialogFade{from{opacity:0;transform:translateY(12px) scale(.985)}to{opacity:1;transform:none}}
@media(max-width:767.98px){.nv-native-dialog{width:calc(100vw - 12px)}.nv-native-dialog-card{max-height:calc(100dvh - 12px);border-radius:16px}.nv-native-dialog-header,.nv-native-dialog-body,.nv-native-dialog-footer{padding-left:16px;padding-right:16px}.nv-native-dialog-footer{display:grid;grid-template-columns:1fr 1fr}.nv-native-dialog-footer .btn{width:100%}}






/* === V2.6.3: GLOBAL BOOTSTRAP MODAL PORTAL ===
   Mọi Bootstrap modal được app.js chuyển trực tiếp xuống body.
   Không bọc native dialog, không thay Bootstrap.Modal. */
body > .modal{
  z-index:2140!important;
}
body > .modal.show{
  display:block!important;
}
body > .modal .modal-dialog{
  position:relative!important;
  z-index:2141!important;
  pointer-events:auto!important;
}
body > .modal .modal-content{
  position:relative!important;
  z-index:2142!important;
  pointer-events:auto!important;
  opacity:1!important;
  filter:none!important;
  background:var(--nv-card)!important;
  box-shadow:0 30px 90px rgba(3,18,42,.34)!important;
}
body > .modal .modal-body{
  min-height:0;
}
.modal-backdrop{
  z-index:2130!important;
}
.modal-backdrop.show{
  opacity:.58!important;
}
body.modal-open{
  overflow:hidden!important;
}
/* Nếu DOM được khôi phục từ cache V2.6.2 thì host cũ không được hiển thị. */
dialog.nv-modal-host{display:none!important}
@media(max-width:767.98px){
  body > .modal .modal-dialog{
    width:calc(100vw - 12px)!important;
    max-width:none!important;
    margin:6px auto!important;
  }
  body > .modal .modal-content{
    max-height:calc(100dvh - 12px)!important;
    overflow:hidden!important;
  }
  body > .modal .modal-body{
    overflow:auto!important;
    overscroll-behavior:contain;
  }
}

/* === V2.7.0 ANALYTICS CONTROL TOWER === */
.analytics-v27{--an-blue:#0b63ce;--an-cyan:#0bb7d4;--an-green:#16a673;--an-orange:#f5a524;--an-red:#ef476f;--an-violet:#7656d8;--an-ink:var(--nv-text);padding-bottom:24px}
.analytics-hero{position:relative;display:flex;justify-content:space-between;gap:24px;align-items:flex-start;padding:24px 26px;margin-bottom:18px;border:1px solid var(--nv-border);border-radius:24px;background:linear-gradient(120deg,color-mix(in srgb,var(--nv-card) 96%,#0b63ce 4%),color-mix(in srgb,var(--nv-card) 96%,#0bb7d4 4%));overflow:hidden;box-shadow:0 13px 35px rgba(22,53,89,.06)}
.analytics-hero:after{content:"";position:absolute;right:-90px;top:-125px;width:330px;height:330px;border-radius:50%;background:radial-gradient(circle,rgba(11,99,206,.16),rgba(11,99,206,0) 68%);pointer-events:none}
.analytics-eyebrow{display:inline-flex;align-items:center;gap:7px;font-size:.67rem;font-weight:800;letter-spacing:.12em;color:var(--an-blue);text-transform:uppercase}.analytics-hero h2{font-size:1.48rem;margin:6px 0 5px;font-weight:850}.analytics-hero p{color:var(--nv-muted);font-size:.78rem;margin:0}.analytics-scope-line{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:13px;font-size:.68rem;color:var(--nv-muted)}.analytics-scope-line i{color:var(--an-green)}.analytics-hero-actions{display:flex;gap:8px;flex-wrap:wrap;position:relative;z-index:2}
.analytics-filter-card{border-radius:22px;box-shadow:0 10px 28px rgba(19,52,90,.05)}.analytics-preset-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.analytics-preset{border:1px solid var(--nv-border);background:var(--nv-card);color:var(--nv-text);border-radius:999px;padding:7px 12px;font-size:.67rem;font-weight:700;transition:.18s}.analytics-preset:hover{border-color:var(--an-blue);color:var(--an-blue);transform:translateY(-1px)}.analytics-restore-btn{margin-left:auto}.analytics-advanced-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:12px}.analytics-filter-actions{display:flex;gap:10px;align-items:center}.analytics-filter-hint{font-size:.64rem;color:var(--nv-muted);display:flex;gap:6px;align-items:center}
.analytics-section-nav{position:sticky;top:76px;z-index:120;display:flex;gap:6px;overflow-x:auto;padding:8px;margin:0 0 18px;border:1px solid var(--nv-border);border-radius:17px;background:color-mix(in srgb,var(--nv-card) 92%,transparent);backdrop-filter:blur(14px);box-shadow:0 9px 25px rgba(13,45,82,.07);scrollbar-width:none}.analytics-section-nav::-webkit-scrollbar{display:none}.analytics-section-nav button{border:0;background:transparent;color:var(--nv-muted);display:flex;align-items:center;gap:7px;padding:9px 12px;border-radius:12px;font-size:.67rem;font-weight:750;white-space:nowrap;transition:.17s}.analytics-section-nav button:hover{background:rgba(11,99,206,.06);color:var(--an-blue)}.analytics-section-nav button.active{background:linear-gradient(135deg,var(--an-blue),#1282c4);color:#fff;box-shadow:0 7px 18px rgba(11,99,206,.22)}
.analytics-section{scroll-margin-top:142px;padding:12px 0 20px}.analytics-section+.analytics-section{border-top:1px dashed color-mix(in srgb,var(--nv-border) 80%,transparent);padding-top:28px}.analytics-section-head{display:flex;justify-content:space-between;align-items:flex-end;gap:18px;margin-bottom:16px}.analytics-section-head>div:first-child>span{font-size:.62rem;color:var(--an-blue);font-weight:850;letter-spacing:.11em}.analytics-section-head h3{font-size:1.22rem;font-weight:850;margin:3px 0}.analytics-section-head p{margin:0;color:var(--nv-muted);font-size:.72rem}.analytics-period-chip{padding:8px 12px;border-radius:999px;border:1px solid var(--nv-border);font-size:.64rem;color:var(--nv-muted);background:var(--nv-card)}
.analytics-kpi-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:13px}.analytics-kpi{--kpi:#0b63ce;position:relative;overflow:hidden;min-height:145px;padding:18px;border:1px solid var(--nv-border);border-radius:20px;background:var(--nv-card);box-shadow:0 9px 27px rgba(23,53,86,.055);transition:.2s}.analytics-kpi:hover{transform:translateY(-3px);box-shadow:0 15px 38px rgba(23,53,86,.10)}.analytics-kpi:after{content:"";position:absolute;right:-35px;top:-38px;width:105px;height:105px;border-radius:50%;background:color-mix(in srgb,var(--kpi) 11%,transparent)}.analytics-kpi-primary{--kpi:var(--an-blue)}.analytics-kpi-success{--kpi:var(--an-green)}.analytics-kpi-cyan{--kpi:var(--an-cyan)}.analytics-kpi-violet{--kpi:var(--an-violet)}.analytics-kpi-warning{--kpi:var(--an-orange)}.analytics-kpi-danger{--kpi:var(--an-red)}.analytics-kpi-top{display:flex;align-items:center;justify-content:space-between;position:relative;z-index:1}.analytics-kpi-icon{width:38px;height:38px;display:grid;place-items:center;border-radius:12px;background:color-mix(in srgb,var(--kpi) 11%,transparent);color:var(--kpi);font-size:1rem}.analytics-delta{font-size:.59rem;font-weight:800;border-radius:999px;padding:5px 7px;background:rgba(22,166,115,.10);color:var(--an-green)}.analytics-delta.down{background:rgba(239,71,111,.10);color:var(--an-red)}.analytics-kpi>strong{display:block;font-size:1.38rem;font-weight:900;margin-top:12px;position:relative;z-index:1}.analytics-kpi>span{display:block;font-size:.71rem;font-weight:750;margin-top:2px}.analytics-kpi>small{font-size:.58rem;color:var(--nv-muted)}
.analytics-insight-strip{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin:13px 0}.analytics-insight-strip>div{display:grid;grid-template-columns:34px 1fr;grid-template-rows:auto auto;gap:1px 8px;padding:12px 13px;border-radius:15px;background:color-mix(in srgb,var(--nv-card) 96%,#0b63ce 4%);border:1px solid var(--nv-border)}.analytics-insight-strip i{grid-row:1/3;width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:rgba(11,99,206,.08);color:var(--an-blue)}.analytics-insight-strip span{font-size:.58rem;color:var(--nv-muted)}.analytics-insight-strip strong{font-size:.75rem}.analytics-caveat{font-size:.68rem;border-radius:15px!important;margin-top:12px}
.analytics-chart-card,.analytics-table-card{height:100%;border-radius:22px;box-shadow:0 9px 28px rgba(23,53,86,.055);overflow:hidden}.analytics-chart-card .card-header,.analytics-table-card .card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:17px 20px;background:transparent}.analytics-chart-card h4,.analytics-table-card h4{font-size:.91rem;font-weight:850;margin:0}.analytics-chart-card .card-header p,.analytics-table-card .card-header p{font-size:.63rem;color:var(--nv-muted);margin:3px 0 0}.analytics-chart-card .card-header:after,.analytics-table-card .card-header:after{content:"";position:absolute;left:20px;bottom:-1px;width:54px;height:3px;border-radius:99px;background:linear-gradient(90deg,var(--an-blue),var(--an-cyan))}.analytics-chart-card .card-header,.analytics-table-card .card-header{position:relative}.analytics-chart-card .card-body{padding:18px 20px 20px}.analytics-table-card .card-body{padding:12px 18px 18px}.analytics-chart-download{border:0;width:34px;height:34px;display:grid;place-items:center;border-radius:10px;color:var(--an-blue);background:rgba(11,99,206,.08)}
.analytics-gauge-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;place-items:center}.analytics-ring{--value:0;--ring:var(--an-blue);width:132px;height:132px;border-radius:50%;background:conic-gradient(var(--ring) calc(var(--value)*1%),rgba(120,140,170,.13) 0);display:grid;place-items:center;position:relative}.analytics-ring.green{--ring:var(--an-green)}.analytics-ring.violet{--ring:var(--an-violet)}.analytics-ring:before{content:"";position:absolute;inset:12px;border-radius:50%;background:var(--nv-card)}.analytics-ring div{position:relative;z-index:1;text-align:center}.analytics-ring strong,.analytics-ring span{display:block}.analytics-ring strong{font-size:1.15rem}.analytics-ring span{font-size:.58rem;color:var(--nv-muted)}
.analytics-cell-progress{height:7px;min-width:95px;border-radius:99px;background:rgba(120,140,170,.14);overflow:hidden;margin-bottom:3px}.analytics-cell-progress span{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--an-blue),var(--an-cyan))}.analytics-table-card table td small{display:block;color:var(--nv-muted);font-size:.61rem;margin-top:2px}.analytics-table-card table td,.analytics-table-card table th{vertical-align:middle}.analytics-mini-kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}.analytics-mini-kpis>div{padding:15px 16px;border-radius:16px;background:var(--nv-card);border:1px solid var(--nv-border)}.analytics-mini-kpis span,.analytics-mini-kpis strong{display:block}.analytics-mini-kpis span{font-size:.62rem;color:var(--nv-muted)}.analytics-mini-kpis strong{font-size:1.02rem;margin-top:4px}.analytics-risk-badges{display:flex;flex-wrap:wrap;gap:7px}.analytics-risk-badges span{display:inline-flex;gap:6px;align-items:center;padding:7px 10px;border-radius:999px;font-size:.63rem;font-weight:750;background:rgba(11,99,206,.07);color:var(--an-blue)}.analytics-risk-badges .warning{background:rgba(245,165,36,.12);color:#b87900}.analytics-risk-badges .danger{background:rgba(239,71,111,.10);color:var(--an-red)}
.analytics-v27 .dt-container{font-size:.68rem}.analytics-v27 .table{font-size:.69rem}.analytics-v27 .table thead th{font-size:.59rem;letter-spacing:.035em;color:var(--nv-muted);text-transform:uppercase}.analytics-v27 .dataTables_wrapper,.analytics-v27 .dt-layout-row{font-size:.66rem}
@media(max-width:1500px){.analytics-kpi-grid{grid-template-columns:repeat(5,1fr)}.analytics-advanced-grid{grid-template-columns:repeat(4,1fr)}}
@media(max-width:1200px){.analytics-kpi-grid{grid-template-columns:repeat(3,1fr)}.analytics-insight-strip,.analytics-mini-kpis{grid-template-columns:repeat(3,1fr)}.analytics-advanced-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:991.98px){.analytics-hero,.analytics-section-head{flex-direction:column;align-items:stretch}.analytics-hero-actions{justify-content:flex-start}.analytics-section-nav{top:68px}.analytics-filter-actions{flex-wrap:wrap}.analytics-filter-hint{order:3;width:100%}.analytics-advanced-grid{grid-template-columns:repeat(2,1fr)}.analytics-gauge-grid{grid-template-columns:1fr 1fr}.analytics-ring{width:112px;height:112px}}
@media(max-width:767.98px){.analytics-kpi-grid{grid-template-columns:repeat(2,1fr)}.analytics-insight-strip,.analytics-mini-kpis{grid-template-columns:repeat(2,1fr)}.analytics-advanced-grid{grid-template-columns:1fr}.analytics-hero{padding:19px}.analytics-hero-actions .btn{flex:1}.analytics-section-nav button span{display:none}.analytics-section{scroll-margin-top:130px}.analytics-gauge-grid{grid-template-columns:1fr}.analytics-chart-card .card-body{padding:14px}.analytics-restore-btn{margin-left:0}}
@media(max-width:480px){.analytics-kpi-grid,.analytics-insight-strip,.analytics-mini-kpis{grid-template-columns:1fr}.analytics-kpi{min-height:125px}}
@media print{.analytics-hero-actions,.analytics-filter-card,.analytics-section-nav,.analytics-chart-download,.analytics-table-card .btn,.app-sidebar,.topbar{display:none!important}.analytics-section{break-inside:auto}.analytics-chart-card,.analytics-table-card,.analytics-kpi{box-shadow:none!important;break-inside:avoid}.main-content{margin:0!important}.analytics-kpi-grid{grid-template-columns:repeat(5,1fr)!important}.analytics-hero{box-shadow:none!important}}

/* V2.7.1 analytics recovery */
.analytics-query-warning{border:1px solid rgba(245,158,11,.35);border-radius:16px;background:rgba(255,247,237,.96);box-shadow:0 8px 24px rgba(15,23,42,.06)}
.analytics-query-warning code{font-size:.78rem}

/* === V2.8.0 LOCATION CONTROL TOWER === */
.location-kpi-grid-v28{grid-template-columns:repeat(5,minmax(0,1fr))!important}.location-v28-alert{border-radius:17px}
.location-heatmap-card,.location-trend-card,.location-recommendation-card{border-radius:22px;overflow:hidden;box-shadow:0 10px 30px rgba(20,51,85,.055)}
.location-heatmap-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;background:transparent}
.location-heatmap-metrics{display:flex;gap:6px;flex-wrap:wrap}.location-heatmap-metrics button{border:1px solid var(--nv-border);background:var(--nv-card);color:var(--nv-muted);font-size:.66rem;font-weight:750;padding:8px 10px;border-radius:999px;display:flex;align-items:center;gap:6px;transition:.16s}.location-heatmap-metrics button:hover,.location-heatmap-metrics button.active{border-color:#0b63ce;color:#0b63ce;background:rgba(11,99,206,.07)}
.location-heatmap-legend{display:flex;align-items:center;gap:9px;font-size:.61rem;color:var(--nv-muted);margin-bottom:14px}.location-heatmap-gradient{width:150px;height:10px;border-radius:99px;background:linear-gradient(90deg,rgba(11,99,206,.08),rgba(11,183,212,.35),rgba(245,165,36,.72),rgba(239,71,111,.95))}.location-heatmap-legend small{margin-left:auto}
.location-heatmap-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:9px}.location-heat-cell{--heat-level:0;border:1px solid color-mix(in srgb,#0b63ce calc(var(--heat-level)*55%),var(--nv-border));background:color-mix(in srgb,#0b63ce calc(var(--heat-level)*23%),var(--nv-card));color:var(--nv-text);border-radius:15px;padding:12px;text-align:left;min-height:112px;transition:.16s;position:relative;overflow:hidden}.location-heat-cell:after{content:"";position:absolute;inset:auto 0 0;height:4px;background:linear-gradient(90deg,#0bb7d4,#0b63ce,#f5a524,#ef476f);opacity:calc(.12 + var(--heat-level)*.88)}.location-heat-cell:hover{transform:translateY(-2px);box-shadow:0 9px 22px rgba(15,45,80,.09);border-color:#0b63ce}.location-heat-cell .heat-code,.location-heat-cell .heat-zone,.location-heat-cell .heat-value,.location-heat-cell small{display:block}.location-heat-cell .heat-code{font-size:.68rem;font-weight:850;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.location-heat-cell .heat-zone,.location-heat-cell small{font-size:.56rem;color:var(--nv-muted);margin-top:2px}.location-heat-cell .heat-value{font-size:1.08rem;margin-top:9px;font-weight:900}
.location-insight-layout{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.location-trend-card{grid-column:span 2}.location-trend-chart{height:290px}.location-insight-list{display:flex;flex-direction:column}.location-insight-list>button{border:0;border-bottom:1px solid var(--nv-border);background:transparent;color:var(--nv-text);display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 17px;text-align:left;transition:.15s}.location-insight-list>button:last-child{border-bottom:0}.location-insight-list>button:hover{background:rgba(11,99,206,.045)}.location-insight-list>button span:first-child{min-width:0}.location-insight-list strong,.location-insight-list small{display:block}.location-insight-list strong{font-size:.69rem}.location-insight-list small{font-size:.57rem;color:var(--nv-muted);margin-top:2px}.insight-score{flex:0 0 auto;border-radius:999px;padding:5px 8px;font-size:.58rem;font-weight:850;background:rgba(11,99,206,.08);color:#0b63ce}.insight-score.good{background:rgba(22,166,115,.10);color:#12845d}.insight-score.warn{background:rgba(245,165,36,.12);color:#b77600}.insight-score.danger{background:rgba(239,71,111,.10);color:#d53056}.insight-score.hot{background:rgba(118,86,216,.10);color:#7656d8}.location-insight-empty{padding:24px;text-align:center;font-size:.64rem;color:var(--nv-muted)}
.location-risk-inline{display:inline-grid;place-items:center;min-width:28px;height:24px;padding:0 6px;border-radius:8px;font-size:.62rem}.location-risk-inline.risk-low{background:rgba(22,166,115,.1);color:#12845d}.location-risk-inline.risk-medium{background:rgba(245,165,36,.12);color:#b77600}.location-risk-inline.risk-high{background:rgba(239,71,111,.12);color:#d53056}
.location-rule-wide{grid-column:span 2}.location-detail-chart{height:240px}.location-event-list{display:flex;flex-direction:column;gap:2px;max-height:240px;overflow:auto}.location-event-item{display:grid;grid-template-columns:11px 1fr;gap:9px;padding:8px 2px}.location-event-dot{width:9px;height:9px;border-radius:50%;margin-top:5px;background:#0b63ce;box-shadow:0 0 0 4px rgba(11,99,206,.08)}.location-event-item.severity-warning .location-event-dot{background:#f5a524}.location-event-item.severity-critical .location-event-dot{background:#ef476f}.location-event-item strong,.location-event-item small,.location-event-item span{display:block}.location-event-item strong{font-size:.64rem}.location-event-item small{font-size:.56rem;color:var(--nv-muted);margin-top:2px}.location-event-item>div>span{font-size:.52rem;color:var(--nv-muted);margin-top:3px}
.location-qr-label{text-align:center;padding:14px}.location-qr-canvas{display:flex;justify-content:center;min-height:210px}.location-qr-label>strong{display:block;font-size:1.15rem;margin-top:10px;letter-spacing:.025em}.location-qr-label>span,.location-qr-label>small{display:block;color:var(--nv-muted);font-size:.68rem;margin-top:3px}
.location-command-card .location-card-footer{gap:8px}.location-command-card[data-risk="high"]{box-shadow:inset 0 0 0 1px rgba(239,71,111,.18)}
@media(max-width:1400px){.location-kpi-grid-v28{grid-template-columns:repeat(4,minmax(0,1fr))!important}}
@media(max-width:1100px){.location-kpi-grid-v28{grid-template-columns:repeat(3,minmax(0,1fr))!important}.location-insight-layout{grid-template-columns:1fr}.location-trend-card{grid-column:auto}}
@media(max-width:767.98px){.location-kpi-grid-v28{grid-template-columns:repeat(2,minmax(0,1fr))!important}.location-heatmap-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.location-heatmap-legend small{display:none}.location-rule-wide{grid-column:auto}}
@media(max-width:480px){.location-kpi-grid-v28,.location-heatmap-grid{grid-template-columns:1fr!important}}
@media print{#locationQrModal.show{position:static!important;display:block!important}.location-qr-label{border:2px solid #111}.location-view-toolbar,.location-filter-card,.location-bulk-toolbar,.location-hero-actions{display:none!important}}
.location-intelligence-row{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}.location-intelligence-row>span{font-size:.53rem;padding:4px 6px;border-radius:8px;background:rgba(100,116,139,.08);color:var(--nv-muted);display:inline-flex;align-items:center;gap:4px}.location-intelligence-row .location-risk-chip.risk-high{background:rgba(239,71,111,.1);color:#d53056}.location-intelligence-row .location-risk-chip.risk-medium,.location-intelligence-row .warning{background:rgba(245,165,36,.12);color:#af7200}.location-intelligence-row .location-risk-chip.risk-low{background:rgba(22,166,115,.1);color:#12845d}
