*{box-sizing:border-box}
body{margin:0;font-family:Arial,Helvetica,sans-serif;background:#f4f6f8;color:#142033}
.sidebar{position:fixed;left:0;top:0;width:230px;height:100vh;height:100dvh;background:#082131;color:white;padding:14px 12px 10px;overflow:hidden;display:flex;flex-direction:column}
.brand{margin-bottom:22px;line-height:1}.brand-logo{display:block;max-width:196px;height:auto}.brand-app,.brand span{display:block;color:#7bdc54;font-size:11px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase}
.sidebar a,.sidebar button{display:block;width:100%;padding:11px 12px;margin:4px 0;color:white;background:transparent;border:0;text-align:left;text-decoration:none;border-radius:8px;font-weight:700}
.sidebar a:hover,.sidebar button:hover{background:#1e8f38}
.main{margin-left:230px;padding:24px;min-height:100vh;overflow-x:hidden}
.topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}
.topbar h1{margin:0}.topbar small{color:#4b5563}
.app-topbar{margin-bottom:16px}.page-title{display:flex;align-items:center;gap:16px}.menu-btn{background:#fff;color:#111827;border:1px solid #d1d5db}
.top-actions{display:flex;align-items:center;gap:8px}.user-pill{display:flex;flex-direction:column;margin-left:18px;font-size:14px}.user-pill small{font-size:12px}
button{background:#238636;color:white;border:0;border-radius:7px;padding:10px 14px;cursor:pointer;font-weight:700}
button.active{background:#14532d}button.confirm{margin-top:15px;background:#0b65c2}.wide-btn{width:100%;margin-top:10px}
.cards{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:16px}.card{background:white;border-radius:12px;padding:18px;min-width:170px;box-shadow:0 1px 4px #0001}
.card span{display:block;color:#667;font-size:13px}.card b{font-size:28px}
.panel{background:white;border-radius:14px;padding:18px;box-shadow:0 1px 4px #0001;margin-bottom:16px;overflow:hidden}.panel h2{margin-top:0}
.warehouse-shell{display:grid;grid-template-columns:190px minmax(520px,1fr) 260px;gap:14px;align-items:start}
.filter-panel,.detail-panel,.map-stage{background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 1px 4px #0000000d}
.filter-panel,.detail-panel{padding:14px}.filter-panel h3,.detail-panel h3{margin:0 0 14px}
.filter-panel label{display:grid;gap:6px;font-weight:700;font-size:13px;margin-bottom:12px}
.filter-panel select{height:34px;border:1px solid #d1d5db;border-radius:6px;padding:0 8px;background:#fff}
.legend-card{border-top:1px solid #e5e7eb;margin-top:16px;padding-top:14px;display:grid;gap:9px}
.legend-card span{display:flex;align-items:center;gap:8px;font-size:13px}.legend-card i{width:14px;height:14px;border-radius:4px;display:inline-block;border:1px solid #0002}
.map-stage{padding:16px;min-height:650px;background:#fff}
.warehouse-map{position:relative;height:640px;border:1px solid #d8dee8;border-radius:8px;background:#fff;overflow:hidden}
.plan2d{position:absolute;left:6%;top:8%;right:6%;bottom:8%}
.floor-outline{position:absolute;left:17%;top:11%;width:66%;height:73%;border:2px solid #9ca3af;background:linear-gradient(180deg,#f9fafb 0,#f9fafb 49%,#eef2f7 50%,#f9fafb 51%,#f9fafb 100%)}
.slot{position:absolute;border:1px solid #64748b;border-radius:3px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#111827;box-shadow:0 2px 2px #0002;font-weight:800;line-height:1.05}
.slot b{font-size:16px}.slot small{font-size:11px;margin-top:2px}
.empty{background:#78bd45}.partial{background:#f5c431}.full{background:#ff342b}.reserved{background:#4b9bd8}.blocked{background:#c7c7c7}
.side-label{position:absolute;color:#22863a;font-size:12px;font-weight:800;text-align:center;z-index:2}.side-label.top{top:8px;left:40%;right:40%}.side-label.bottom{bottom:8px;left:40%;right:40%}.side-label.left{left:2%;top:38%}.side-label.right{right:2%;top:38%}
.door.vertical{position:absolute;left:13%;top:22%;width:30px;height:138px;border:1px solid #9ca3af;background:#f8fafc;display:flex;align-items:center;justify-content:center;writing-mode:vertical-rl;font-weight:800;z-index:3}
.hidden{display:none!important}.map3d{width:100%;height:650px;background:#eef3f8;border-radius:8px;border:1px solid #d8dee8}.scene3d{height:100%;border-radius:8px;overflow:hidden;background:#f8fafc;display:grid;place-items:center;color:#667}.scene3d canvas{display:block;width:100%!important;height:100%!important}
.detail-panel dl{display:grid;grid-template-columns:1fr 1fr;gap:13px 10px;font-size:13px}.detail-panel dt{color:#111827}.detail-panel dd{margin:0;font-weight:800}.status-dot{width:12px;height:12px;display:inline-block;border-radius:3px;margin-right:7px;vertical-align:middle}
.progress{height:7px;background:#d1d5db;border-radius:999px;overflow:hidden;margin-bottom:3px}.progress span{display:block;height:100%;background:#58aa3d}
.module-panel p{max-width:760px;color:#4b5563}.module-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:16px}.module-grid article{border:1px solid #e5e7eb;border-radius:8px;padding:16px;background:#f8fafc}.module-grid b{display:block;margin-bottom:7px}.module-grid span{color:#4b5563}
.login-body{display:grid;place-items:center;height:100vh;background:#0b1d2b}.login-card{background:white;width:360px;padding:30px;border-radius:16px}.login-card input,.grid-form input,select{width:100%;padding:12px;margin:7px 0 14px;border:1px solid #ccd;border-radius:8px}.error{background:#ffe1e1;color:#a00;padding:10px;border-radius:8px;margin:10px 0}.hint{color:#4b5563;font-size:14px}
.grid-form{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}table{width:100%;border-collapse:collapse}td,th{border-bottom:1px solid #ddd;padding:10px;text-align:left}
@media(max-width:1180px){.warehouse-shell{grid-template-columns:1fr}.map-stage{min-height:auto}.warehouse-map,.map3d{height:560px}.detail-panel{order:3}.filter-panel{order:1}.map-stage{order:2}}
@media(max-width:760px){.main{margin-left:0;padding:16px}.sidebar{position:relative;width:100%;height:auto}.topbar{align-items:flex-start;flex-direction:column}.top-actions{flex-wrap:wrap}.warehouse-map,.map3d{height:480px}.module-grid{grid-template-columns:1fr}}

/* v5 professional warehouse map */
:root{
  --ink:#142033;
  --muted:#607086;
  --nav:#082131;
  --green:#238636;
  --ok:#78c257;
  --warn:#ffc83d;
  --bad:#ff3528;
  --blue:#3b8ed8;
  --line:#d8dee8;
  --panel:#ffffff;
}
body{background:#f3f6fa;color:var(--ink)}
.sidebar{background:linear-gradient(180deg,#061f31,#061b2b);box-shadow:inset -1px 0 #ffffff12}
.sidebar a,.sidebar button{font-size:15px}
.sidebar a:hover,.sidebar a.active,.sidebar button:hover{background:#1f8d3a}
.brand{line-height:1}
.main{padding:22px 24px 34px}
.app-topbar{background:transparent;border:0;box-shadow:none;margin-bottom:14px}
.page-title h1{font-size:28px;line-height:1.08;letter-spacing:0;margin-bottom:4px}
.page-title small{color:#526075;font-weight:700}
.menu-btn{width:40px;height:40px;display:grid;place-items:center;background:var(--green);color:#fff;border:0;border-radius:6px;font-size:18px}
.top-actions button{height:38px;min-width:100px;border-radius:6px;background:#fff;color:#111827;border:1px solid #bfc8d4}
.top-actions button.active{background:var(--green);border-color:var(--green);color:#fff}
.user-pill{flex-direction:row;gap:4px;align-items:baseline;color:#142033;font-size:16px}
.user-pill small{color:#142033;font-size:14px}
.warehouse-shell{display:grid;grid-template-columns:180px minmax(760px,1fr) 280px;gap:16px;align-items:start}
.filter-panel,.detail-panel{border:1px solid #e1e7ef;background:#fff;border-radius:6px;box-shadow:0 8px 24px #15243b0a}
.filter-panel{padding:14px}
.filter-panel h3,.detail-panel h3{font-size:16px;margin-bottom:14px}
.filter-panel label{font-size:12px;color:#1f2937}
.filter-panel select{height:36px;font-size:12px}
.wide-btn{height:38px;border-radius:5px;background:linear-gradient(180deg,#2d9a43,#1f7e34)}
.legend-card span{font-weight:700;color:#263447}
.legend-card i.empty{background:var(--ok)}
.legend-card i.partial{background:var(--warn)}
.legend-card i.full{background:var(--bad)}
.legend-card i.reserved{background:var(--blue)}
.legend-card i.blocked{background:#b9c0c9}
.map-stage{padding:0;background:transparent;border:0;box-shadow:none;min-height:auto}
.warehouse-map,.map3d{height:640px;border:1px solid #e1e7ef;border-radius:6px;background:#fff;box-shadow:0 8px 24px #15243b0a;overflow:hidden}
.warehouse-title-row{height:38px;display:flex;justify-content:center;align-items:center;gap:30px;color:#218032;font-size:12px;font-weight:900;letter-spacing:.2px}
.plan2d{position:relative;width:min(960px,100%);height:570px;margin:0 auto;background:linear-gradient(180deg,#fff,#f8fafc)}
.floor-outline{position:absolute;left:15.5%;top:10%;width:69%;height:76%;border:1.5px solid #767f8d;background:linear-gradient(180deg,#ffffff 0 49%,#eef2f7 49.5% 50.5%,#ffffff 51%);box-shadow:inset 0 0 0 1px #ffffff}
.floor-outline:before{content:none}
.floor-outline:after{content:"";position:absolute;left:0;right:0;top:50%;width:100%;height:1px;background:#d9dee7}
.door.vertical{left:9.2%;top:22%;width:34px;height:164px;border:1px solid #9ca3af;border-radius:4px;background:#f3f5f7;color:#1f2937;box-shadow:0 1px 2px #0001}
.door.vertical:after{content:"";position:absolute;right:-34px;top:50%;width:26px;height:1px;background:#111}
.side-label{font-size:12px;line-height:1.15;color:#16802c;letter-spacing:.2px;text-transform:uppercase}
.side-label.top{top:4px;left:36%;right:36%}
.side-label.bottom{bottom:7px;left:36%;right:36%}
.side-label.left{left:3%;top:38%;width:58px}
.side-label.right{right:3%;top:38%;width:64px}
.slot{position:absolute;border-radius:4px;border:1px solid #87909d;color:#111827;box-shadow:0 2px 0 #00000024,0 9px 18px #10182816;transition:transform .12s ease,box-shadow .12s ease;overflow:hidden;text-align:center;padding:2px}
.slot:hover{transform:translateY(-2px);box-shadow:0 4px 0 #00000024,0 14px 24px #10182824;z-index:8}
.slot b{font-size:15px;line-height:1}
.slot small{font-size:10px;font-weight:900}
.slot.has-roll:before{display:none}
.slot.has-roll b,.slot.has-roll small{transform:none}
.slot.empty{background:linear-gradient(180deg,#8ed36e,#73bd50)}
.slot.partial{background:linear-gradient(180deg,#ffd955,#ffc533)}
.slot.full{background:linear-gradient(180deg,#ff453b,#ef2e24);color:#fff}
.slot.reserved{background:linear-gradient(180deg,#58a6df,#3c8dcb);color:#fff}
.slot.blocked{background:linear-gradient(180deg,#d5d9df,#b8c0ca)}
.map3d{height:690px;background:radial-gradient(circle at 50% 20%,#ffffff,#eef3f8)}
.scene3d{height:100%;border-radius:6px;overflow:hidden;background:#f8fafc}
.detail-panel{padding:16px}
.detail-panel dl{grid-template-columns:1.05fr .95fr;gap:14px 10px}
.detail-panel dt{font-size:12px;color:#1f2937;font-weight:700}
.detail-panel dd{font-size:12px}
.progress{height:7px;background:#d7dbe2}
.status-dot.partial{background:var(--warn)}
.status-dot.empty{background:var(--ok)}
.status-dot.full{background:var(--bad)}
.status-dot.reserved{background:var(--blue)}
.status-dot.blocked{background:#b9c0c9}
.import-help{display:grid;gap:6px;margin-top:12px;color:#4b5563;font-size:14px}
@media(max-width:1350px){
  .warehouse-shell{grid-template-columns:1fr}
  .filter-panel{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;align-items:end}
  .filter-panel h3,.legend-card{grid-column:1/-1}
  .filter-panel label{margin:0}
  .detail-panel{max-width:none}
}
@media(max-width:760px){
  .page-title h1{font-size:22px}
  .warehouse-map,.map3d{height:560px}
  .plan2d{height:100%;min-width:0}
  .warehouse-map{overflow:hidden}
  .filter-panel{display:block}
}

/* v6 management screens */
.settings-layout{display:grid;grid-template-columns:300px minmax(0,1fr);gap:16px;align-items:start}
.settings-card{background:#fff;border:1px solid #e1e7ef;border-radius:8px;box-shadow:0 8px 24px #15243b0a;padding:18px}
.settings-card h2{margin:0 0 12px;font-size:20px}
.settings-card h3{margin:22px 0 10px;font-size:15px;color:#263447}
.settings-card p{margin:0;color:#607086;font-weight:700;font-size:13px}
.settings-card label{display:grid;gap:6px;font-weight:800;font-size:13px;margin-bottom:12px}
.settings-card input,.settings-card select{width:100%;height:38px;margin:0;border:1px solid #cfd7e3;border-radius:6px;padding:0 10px;background:#fff;color:#142033}
.settings-card.wide{min-width:0}
.stack-form{display:grid;gap:10px}
.stack-form input{margin:0}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}
.section-head h2{margin:0 0 5px}
.count-pill{display:inline-flex;align-items:center;height:30px;padding:0 10px;border-radius:999px;background:#eaf7ee;color:#1f7e34;font-weight:900;font-size:12px;white-space:nowrap}
.parking-bulk{display:grid;grid-template-columns:75px 80px 80px 105px minmax(150px,1fr) 100px 150px;gap:10px;align-items:end;padding:14px;background:#f8fafc;border:1px solid #e1e7ef;border-radius:8px;margin-bottom:16px}
.parking-bulk label{margin:0}
.parking-add,.selected-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:end;margin:0 0 14px;padding:12px 14px;background:#f8fafc;border:1px solid #e1e7ef;border-radius:8px}
.parking-add label,.selected-bar label{margin:0}
.parking-add input,.selected-bar input[type="number"]{height:38px}
.parking-add button,.selected-bar button{height:38px}
.settings-hint{margin:-4px 0 16px;color:#607086;font-size:12px}
.selected-bar .check-all{display:flex;align-items:center;gap:8px;font-weight:800}
.selected-bar #selectedCount{font-size:12px;font-weight:800;color:#607086;margin-right:auto}
.parking-table-wrap{overflow:auto;border:1px solid #e1e7ef;border-radius:8px;background:#fff}
.parking-table{min-width:980px;border-collapse:separate;border-spacing:0}
.parking-table th{position:sticky;top:0;background:#f2f5f9;color:#435066;font-size:12px;text-transform:uppercase;letter-spacing:.2px;z-index:1}
.parking-table th,.parking-table td{border-bottom:1px solid #e8edf4;padding:8px 10px;text-align:left;vertical-align:middle}
.parking-table tr:last-child td{border-bottom:0}
.parking-table input{height:32px;margin:0;border:1px solid #cfd7e3;border-radius:5px;padding:0 8px;background:#fff}
.parking-table input[type="number"]{width:78px}
.parking-table input[name="code"]{width:84px;font-weight:900}
.parking-table input[name="material_type"]{min-width:170px}
.parking-table .check{width:18px;height:18px}
.small-btn{height:32px;padding:0 11px;border-radius:5px;font-size:12px}
.empty-row{text-align:center;color:#607086;padding:22px!important}
.import-panel{padding:22px}
.import-form{display:grid;grid-template-columns:minmax(280px,440px) 140px;gap:14px;align-items:end}
.file-box{display:grid;gap:7px;font-weight:900;color:#263447}
.file-box input{height:42px;border:1px dashed #aeb8c6;border-radius:8px;padding:9px;background:#f8fafc}
.import-help{display:flex;gap:18px;flex-wrap:wrap;margin:12px 0 18px}
.import-cards .card{min-width:180px;border:1px solid #e1e7ef;box-shadow:0 8px 18px #15243b08}
.preview-table{min-width:1180px}
.preview-table td{font-size:13px}
.preview-status{display:inline-flex;align-items:center;height:24px;padding:0 9px;border-radius:999px;background:#eaf7ee;color:#1f7e34;font-weight:900;font-size:12px;white-space:nowrap}
.clip{max-width:280px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.role-hint,.role-guide{margin:0 0 12px;color:#5d6d7e;font-size:13px;font-weight:700;line-height:1.45}
.feature-group{margin:12px 0 6px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;font-weight:900;color:#1f8a4c}
.feature-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 10px;margin:0 0 10px}
.feature-check{display:flex;align-items:center;gap:8px;margin:0;font-size:13px;font-weight:800;color:#142033}
.feature-check input{width:18px;height:18px;margin:0}
.custom-box{margin:0 0 12px;padding:12px;border:2px solid #dce3eb;border-radius:14px;background:#f7faf8}
.user-cards{display:grid;gap:14px}
.user-card{display:grid;gap:10px;padding:16px;border:1px solid #dce3eb;border-radius:16px;background:#fff}
.user-card-top{display:grid;grid-template-columns:48px 1fr auto;gap:10px;align-items:center}
.user-card-top b{display:block}
.user-card-top small{color:#718096;font-weight:700}
.user-card-top .user-note{display:block;margin-top:2px;color:#1f7e34;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;word-break:break-word}
.pack-block{margin:0 0 16px}
.pack-table td b{display:block}
.pack-table td small{display:block;color:#718096;font-weight:700;margin-top:3px}
.pack-table tr.pack-new td:first-child{border-left:4px solid #d9362b}
.pack-table tr.pack-check td:first-child{border-left:4px solid #d97706}
.pack-table tr.pack-have td:first-child{border-left:4px solid #1f7e34}
.pack-table td code{font-size:12px;font-weight:800}
.pack-code{color:#1f7e34;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.pack-open{color:#d9362b;font-weight:800}
.pack-copy{width:100%;min-height:140px;border:1px solid #cfd7e3;border-radius:8px;padding:10px;font:13px/1.45 ui-monospace,SFMono-Regular,Menlo,monospace}
.user-active{display:flex;align-items:center;gap:8px;margin:0;font-size:12px}
.users-table select{height:32px;margin:0;border:1px solid #cfd7e3;border-radius:5px;padding:0 8px;background:#fff}
.users-table input[type="password"]{min-width:150px}
.users-table input[name="full_name"]{min-width:190px}
@media(max-width:1180px){
  .settings-layout{grid-template-columns:1fr}
  .parking-bulk{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media(max-width:760px){
  .parking-bulk,.import-form{grid-template-columns:1fr}
  .section-head{display:block}
}

/* v9 per-user dashboard templates */
.template-picker{display:flex;align-items:center;gap:7px;padding:5px 7px 5px 10px;background:#fff;border:1px solid #d7dee8;border-radius:8px}
.template-picker label{font-size:11px;font-weight:900;color:#607086;text-transform:uppercase}
.template-picker select{border:0;background:transparent;color:#142033;font-weight:800;outline:0;max-width:220px}
.dashboard-kpis{display:grid;grid-template-columns:repeat(5,minmax(120px,1fr));gap:10px;margin:0 0 12px}
.dashboard-kpis a{display:block;color:inherit;text-decoration:none}
.dashboard-kpis a article{height:100%}
.alerts-bar{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.alerts-bar a{display:inline-flex;align-items:center;padding:9px 12px;border-radius:8px;text-decoration:none;font-size:12px;font-weight:800}
.alerts-bar .alert-warn{background:#fff3e8;color:#9a3b12;border:1px solid #f0c9a8}
.alerts-bar .alert-info{background:#e8f1fb;color:#17558c;border:1px solid #c5d8ef}
.alerts-bar .alert-ok{background:#eaf7ee;color:#1f7e34;border:1px solid #c6e6cd}
.alarms-card a{color:inherit}
.extra-parking{margin:0 0 12px;padding:14px 16px;background:#fff;border:1px solid #e1e7ef;border-radius:9px}
.extra-parking h3{margin:0 0 10px;font-size:12px;text-transform:uppercase;color:#607086}
.extra-parking div{display:flex;flex-wrap:wrap;gap:8px}
.extra-parking a{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:8px;background:#eef6f1;color:#142033;text-decoration:none;font-size:12px;font-weight:800}
.extra-parking a span{color:#1f7e34}
.dashboard-kpis article{position:relative;display:grid;gap:5px;min-height:82px;padding:14px 16px;background:#fff;border:1px solid #e1e7ef;border-radius:9px;box-shadow:0 4px 18px #15243b0a}
.dashboard-kpis span{font-size:11px;font-weight:800;color:#607086}.dashboard-kpis b{font-size:25px}.dashboard-kpis i{position:absolute;left:16px;right:16px;bottom:8px;height:4px;border-radius:9px;background:linear-gradient(90deg,#35a344 var(--value),#e5e7eb var(--value))}
.dashboard-status-row{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:12px 18px;margin-bottom:12px;background:#fff;border:1px solid #e1e7ef;border-radius:9px}
.dashboard-status-row span{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:800}.dashboard-status-row span b{margin-left:auto;font-size:17px}.dashboard-status-row i{width:17px;height:17px;border-radius:4px}.dashboard-status-row i.empty{background:#78c552}.dashboard-status-row i.partial{background:#ffc533}.dashboard-status-row i.full{background:#ef3327}.dashboard-status-row i.blocked{background:#aeb5bf}
.dashboard-lower-grid{display:grid;grid-template-columns:1fr 1fr 1.65fr 1.1fr;gap:12px;margin-top:12px}
.insight-card{padding:15px;background:#fff;border:1px solid #e1e7ef;border-radius:9px;box-shadow:0 4px 18px #15243b0a;min-width:0}.insight-card h3{margin:0 0 12px;font-size:14px;text-transform:uppercase}.insight-card p{display:flex;justify-content:space-between;margin:9px 0;font-size:12px}.alarms-card p{justify-content:flex-start;gap:8px;color:#d42a23}.alarms-card .ok-message{color:#21823a}.movements-card table{width:100%;border-collapse:collapse;font-size:11px}.movements-card th,.movements-card td{padding:7px;text-align:left;border-bottom:1px solid #e8edf4}.quick-actions-card div{display:grid;grid-template-columns:1fr 1fr;gap:8px}.quick-actions-card a{padding:11px 8px;border-radius:6px;background:#238636;color:#fff;text-decoration:none;text-align:center;font-size:11px;font-weight:900}.quick-actions-card a:nth-child(2){background:#1769c2}.quick-actions-card a:nth-child(3){background:#7041c6}.quick-actions-card a:nth-child(4){background:#334155}

/* Template 1: map first, but keep alerts and mail shortcuts visible */

/* Template 2: dark control room */
.template2{background:#081824;color:#eaf1f7}.template2 .sidebar{background:#071724;border-right:1px solid #263b4d}.template2 .main{background:radial-gradient(circle at 70% 0,#12283a,#081824 65%)}
.template2 .topbar small,.template2 .template-picker label{color:#94a9bb}.template2 .template-picker,.template2 .template-picker select,.template2 .dashboard-kpis article,.template2 .dashboard-status-row,.template2 .filter-panel,.template2 .detail-panel,.template2 .warehouse-map,.template2 .insight-card{background:#102536;color:#eaf1f7;border-color:#263d50;box-shadow:none}
.template2 .dashboard-kpis span,.template2 .detail-panel dt,.template2 .insight-card th{color:#9fb0bf}.template2 .filter-panel select{background:#0c1d2a;color:#eaf1f7;border-color:#30485c}.template2 .plan2d,.template2 .floor-outline{background:#0d2030}.template2 .floor-outline{border-color:#60778a}.template2 .movements-card th,.template2 .movements-card td{border-color:#294052}.template2 .warehouse-shell{grid-template-columns:minmax(650px,1.65fr) 260px}.template2 .filter-panel{display:none}.template2 .dashboard-lower-grid{grid-template-columns:1fr 1.2fr 1.7fr 1.2fr}.template2 .warehouse-map{height:520px}.template2 .plan2d{height:470px}.template2 .map3d{height:520px}

/* Template 3: light executive overview */
.template3 .filter-panel{display:none}.template3 .warehouse-shell{grid-template-columns:minmax(620px,1.35fr) 290px}.template3 .warehouse-map{height:540px}.template3 .plan2d{height:490px}.template3 .map3d{height:540px}.template3 .dashboard-lower-grid{grid-template-columns:1fr 1fr 2fr}.template3 .quick-actions-card{display:none}.template3 .dashboard-status-row{margin-left:calc(60% + 8px)}

/* Template 4: dense operations and settings view */
.template4 .dashboard-kpis article{min-height:72px;padding:11px 14px}.template4 .warehouse-shell{grid-template-columns:170px minmax(560px,1fr) 300px}.template4 .warehouse-map{height:500px}.template4 .plan2d{height:455px}.template4 .map3d{height:500px}.template4 .dashboard-lower-grid{grid-template-columns:1fr 1fr 1.6fr 1fr}.template4 .sidebar{background:linear-gradient(180deg,#0b2739,#102e42)}

@media(max-width:1350px){
  .dashboard-lower-grid{grid-template-columns:1fr 1fr}.template2 .warehouse-shell,.template3 .warehouse-shell,.template4 .warehouse-shell{grid-template-columns:1fr}.template2 .detail-panel,.template3 .detail-panel{display:block}.template3 .dashboard-status-row{margin-left:0}
}
@media(max-width:800px){
  .dashboard-kpis{grid-template-columns:1fr 1fr}.dashboard-status-row{grid-template-columns:1fr 1fr}.dashboard-lower-grid{grid-template-columns:1fr}.template-picker label{display:none}.template-picker select{max-width:140px}.top-actions{flex-wrap:wrap;justify-content:flex-end}
}

/* v10 rolls list */
.rolls-topbar{gap:18px}.primary-link{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:9px 14px;border-radius:7px;background:#238636;color:#fff;text-decoration:none;font-weight:900;font-size:13px}
.roll-summary{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:12px;margin-bottom:14px}.roll-summary article{display:grid;gap:7px;padding:16px 18px;background:#fff;border:1px solid #e1e7ef;border-radius:9px;box-shadow:0 4px 18px #15243b0a}.roll-summary span{font-size:12px;font-weight:800;color:#607086}.roll-summary b{font-size:23px}
.rolls-panel{background:#fff;border:1px solid #e1e7ef;border-radius:9px;box-shadow:0 4px 18px #15243b0a;overflow:hidden}.roll-filters{display:grid;grid-template-columns:minmax(220px,1.4fr) 120px 180px 110px auto;gap:10px;align-items:end;padding:14px;border-bottom:1px solid #e1e7ef;background:#f8fafc}.roll-filters label{display:grid;gap:6px;font-size:12px;font-weight:900}.roll-filters input,.roll-filters select{height:39px;border:1px solid #cfd7e3;border-radius:6px;padding:0 10px;background:#fff}.roll-filters button{height:39px}.clear-filter{align-self:center;color:#1769c2;font-size:12px;font-weight:900;text-decoration:none}
.rolls-table-wrap{overflow:auto;max-height:calc(100vh - 300px)}.rolls-table{width:100%;min-width:1120px;border-collapse:separate;border-spacing:0}.rolls-table th{position:sticky;top:0;z-index:2;padding:10px;background:#eef3f7;border-bottom:1px solid #dbe3ec;color:#435066;text-align:left;font-size:11px;text-transform:uppercase}.rolls-table td{padding:10px;border-bottom:1px solid #e8edf4;font-size:12px;white-space:nowrap}.rolls-table tr:hover td{background:#f7fbf8}.rolls-table tr:last-child td{border-bottom:0}.barcode{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:#142033;display:inline-block;max-width:170px;overflow:hidden;text-overflow:ellipsis}.roll-name{max-width:220px;overflow:hidden;text-overflow:ellipsis}.parking-badge,.roll-status{display:inline-flex;align-items:center;min-height:24px;padding:3px 8px;border-radius:999px;font-size:11px;font-weight:900}.parking-badge{background:#e8f5ec;color:#1f7e34}
.parking-badge a{color:inherit;text-decoration:none}
.rolls-table .label-check{width:36px;text-align:center}
.rolls-table .label-check input{width:18px;height:18px;margin:0;padding:0;border:0;background:transparent;vertical-align:middle;accent-color:#238636}
.rolls-print-actions{justify-content:flex-end}
.rolls-print-actions .primary-link.is-idle{opacity:.55}
.rolls-label-dialog p{margin:0 0 8px;color:#607086;font-weight:700}
.place-rolls-label{margin:16px 0 8px;font-size:11px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;color:#607086}
.place-rolls{margin:0 0 12px;display:grid;gap:6px;max-height:min(42vh,360px);overflow:auto}
.place-rolls p,.place-roll{display:grid;gap:3px;margin:0;padding:9px 10px;border:1px solid #e8edf4;border-radius:10px;font-size:12px;background:#f8fafc;color:inherit;text-decoration:none}
.place-roll b{font-size:13px;line-height:1.25}
.place-rolls span{color:#607086;font-weight:700}
.place-rolls .more-rolls{justify-content:center;color:#1769c2;background:#fff}
.place-rolls .ok-message{color:#607086}
a.wide-btn{display:flex;align-items:center;justify-content:center;text-decoration:none}.roll-status.active{background:#e8f5ec;color:#1f7e34}.roll-status.missing_from_import{background:#fff3d7;color:#9a6500}.roll-status.consumed{background:#f1f3f5;color:#59636f}
.rolls-empty{display:grid;justify-items:center;gap:8px;padding:70px 20px;text-align:center}.rolls-empty h2{margin:0}.rolls-empty p{margin:0 0 10px;color:#607086}.empty-roll-icon{display:grid;place-items:center;width:62px;height:62px;border-radius:16px;background:#eaf7ee;color:#238636;font-size:34px}
@media(max-width:900px){.roll-summary{grid-template-columns:1fr 1fr}.roll-filters{grid-template-columns:1fr 1fr}.rolls-table-wrap{max-height:none}}
@media(max-width:600px){.roll-summary,.roll-filters{grid-template-columns:1fr}.rolls-topbar{align-items:flex-start;flex-direction:column}}

/* v11 warehouse layout editor */
.editor-page{background:#edf1f5}.editor-main{padding:16px;overflow:auto}.editor-topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px}.editor-topbar h1{margin:0}.editor-topbar small{color:#607086}.editor-actions,.editor-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.secondary-btn{background:#fff;color:#263447;border:1px solid #cfd7e3}.danger-btn{background:#fff;color:#d42a23;border:1px solid #efaaa6}
.editor-toolbar{min-height:58px;padding:9px 12px;margin-bottom:12px;background:#fff;border:1px solid #dce3eb;border-radius:9px;box-shadow:0 3px 12px #15243b0a}.editor-toolbar label{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:900}.editor-toolbar select{height:36px;border:1px solid #cfd7e3;border-radius:6px;padding:0 8px}.editor-check input{width:17px;height:17px}.zoom-control{margin-left:auto}.zoom-control input{width:110px}
.plan-preset-btn{background:#0b65c2}.plan-preset-btn:hover{background:#084e96}
.editor-layout{display:grid;grid-template-columns:170px minmax(720px,1fr) 260px;gap:12px;align-items:start}.editor-library,.editor-properties,.editor-canvas-shell{background:#fff;border:1px solid #dce3eb;border-radius:9px;box-shadow:0 3px 12px #15243b0a}.editor-library,.editor-properties{padding:14px;min-height:700px}.editor-library h3,.editor-properties h3{margin:0 0 12px}.editor-library>button{display:flex;align-items:center;gap:9px;width:100%;margin:6px 0;background:#f7f9fb;color:#263447;border:1px solid #dce3eb;text-align:left}.editor-library>button span{font-size:20px;color:#238636}.editor-tip{margin-top:20px;padding:11px;border-radius:7px;background:#eef8f1;font-size:12px}.editor-tip p{margin:5px 0 0;color:#526273;line-height:1.45}.editor-legend{display:grid;gap:8px;margin-top:18px}.editor-legend span{display:flex;align-items:center;gap:8px;font-size:12px}.editor-legend i{width:14px;height:14px;border-radius:3px}.editor-legend .empty{background:#78c552}.editor-legend .partial{background:#ffc533}.editor-legend .full{background:#ef3327}.editor-legend .blocked{background:#aeb5bf}
.editor-canvas-shell{padding:10px;overflow:auto;min-height:700px}.canvas-rulers{display:flex;justify-content:space-between;width:1100px;padding:0 5px 7px 34px;color:#8090a2;font-size:10px}.warehouse-editor-canvas{position:relative;width:1100px;height:650px;overflow:hidden;border:2px solid #8290a0;background-color:#f8fafb;background-image:linear-gradient(#dfe5eb 1px,transparent 1px),linear-gradient(90deg,#dfe5eb 1px,transparent 1px),linear-gradient(#c9d2dc 1px,transparent 1px),linear-gradient(90deg,#c9d2dc 1px,transparent 1px);background-size:10px 10px,10px 10px,50px 50px,50px 50px;outline:0;transform-origin:top left}.editor-door{position:absolute;right:0;top:260px;display:grid;place-items:center;width:48px;height:120px;border:2px solid #718096;background:#fff;font-size:11px;font-weight:900;writing-mode:vertical-rl}.editor-aisle{position:absolute;left:80px;right:80px;top:304px;height:44px;display:grid;place-items:center;border:1px dashed #d4a72c;background:#fff8d9aa;color:#9a7000;font-size:10px;font-weight:900;letter-spacing:2px}.editor-place{position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:4px;border:2px solid #506071;border-radius:5px;color:#142033;box-shadow:0 2px 5px #0002;cursor:grab;touch-action:none;user-select:none}.editor-place:active{cursor:grabbing}.editor-place b{font-size:14px}.editor-place small{font-size:9px;font-weight:900}.editor-place.empty{background:#79c856}.editor-place.partial{background:#ffca32}.editor-place.full{background:#ef382d;color:#fff}.editor-place.blocked{background:#afb7c1}.editor-place.selected{outline:3px solid #1769c2;outline-offset:3px;z-index:20}.resize-handle{position:absolute;right:-6px;bottom:-6px;width:13px;height:13px;border:2px solid #fff;background:#1769c2;border-radius:3px;cursor:nwse-resize}.canvas-footer{display:flex;justify-content:space-between;width:1100px;padding:9px 2px 0;color:#607086;font-size:11px;font-weight:800}
.property-form{display:grid;gap:10px}.property-form label{display:grid;gap:5px;font-size:11px;font-weight:900}.property-form input,.property-form select{width:100%;height:35px;border:1px solid #cfd7e3;border-radius:6px;padding:0 8px}.property-form .editor-check{display:flex;align-items:center}.property-form .editor-check input{width:17px}.property-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.no-selection{padding:70px 5px;text-align:center;color:#607086}.no-selection b{color:#263447}.no-selection p{font-size:12px}.hidden{display:none!important}
.editor-dialog{width:min(480px,calc(100% - 30px));border:0;border-radius:12px;padding:22px;box-shadow:0 20px 70px #0005}.editor-dialog::backdrop{background:#10203099}.editor-dialog h2{margin:0 0 16px}.editor-dialog label{display:grid;gap:5px;margin-bottom:10px;font-size:12px;font-weight:900}.editor-dialog input,.editor-dialog select{height:38px;border:1px solid #cfd7e3;border-radius:6px;padding:0 9px}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.editor-toast{position:fixed;right:24px;bottom:24px;z-index:100;max-width:360px;padding:13px 17px;border-radius:8px;background:#238636;color:#fff;font-weight:900;opacity:0;transform:translateY(20px);pointer-events:none;transition:.2s}.editor-toast.show{opacity:1;transform:translateY(0)}.editor-toast.error{background:#c52d27}
@media(max-width:1400px){.editor-layout{grid-template-columns:150px minmax(700px,1fr)}.editor-properties{grid-column:1/-1;min-height:0}.property-form{grid-template-columns:repeat(4,1fr);align-items:end}.property-form h3{grid-column:1/-1}.property-form button{height:35px}}

.warehouse-dimensions{display:flex;align-items:center;gap:14px;margin:-2px 0 12px;padding:11px 14px;background:#fff;border:1px solid #dce3eb;border-radius:9px}.warehouse-dimensions label{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:900}.warehouse-dimensions input{width:82px;height:34px;border:1px solid #cfd7e3;border-radius:6px;padding:0 7px}.warehouse-dimensions span{margin-left:auto;color:#607086;font-size:11px}
.layout-element{position:absolute;z-index:4;display:grid;place-items:center;border:2px dashed #d29a12;background:#fff5c4cc;color:#8b6500;font-size:10px;font-weight:900;letter-spacing:1px;cursor:grab;touch-action:none}.layout-element.door{border-style:solid;border-color:#596879;background:#fff;color:#263447;writing-mode:vertical-rl}.layout-element.wall{border:0;background:#526273;color:#fff}.layout-element.selected{outline:3px solid #1769c2;outline-offset:3px;z-index:25}.layout-element .resize-handle{writing-mode:horizontal-tb}
.saved-layout{max-width:none!important}.saved-layout .floor-outline{left:0;top:0;width:100%;height:100%;background:#fff;border:2px solid #7c8997}.saved-layout .door.vertical,.saved-layout .side-label{display:none}.dashboard-layout-element{position:absolute;z-index:2;display:grid;place-items:center;font-size:9px;font-weight:900;pointer-events:none}.dashboard-layout-element.aisle{border:1px dashed #d29a12;background:#fff5c4aa;color:#8b6500}.dashboard-layout-element.door{border:2px solid #596879;background:#fff;color:#263447;writing-mode:vertical-rl}.dashboard-layout-element.wall{background:#526273;color:#fff}.saved-layout .slot{z-index:5}

/* v12 automatic email reports */
.mail-main{max-width:1500px}.mail-security{padding:8px 11px;border-radius:7px;background:#eaf7ee;color:#1f7e34;font-size:12px;font-weight:900}.mail-notice{margin-bottom:12px;padding:12px 15px;border-radius:8px;font-weight:800}.mail-notice.success{background:#eaf7ee;color:#1f7e34}.mail-notice.error{background:#fff0ef;color:#bd2b25}.mail-tabs{display:flex;gap:8px;margin-bottom:14px;position:sticky;top:0;z-index:5;padding:8px;background:#f4f6f8}.mail-tabs a{padding:9px 12px;border-radius:6px;background:#fff;border:1px solid #dce3eb;color:#263447;text-decoration:none;font-size:12px;font-weight:900}.mail-card{margin-bottom:16px;padding:20px;background:#fff;border:1px solid #dce3eb;border-radius:10px;box-shadow:0 5px 20px #15243b0b;scroll-margin-top:70px}.mail-card-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px}.mail-card h2{margin:0 0 5px}.mail-card p{margin:0;color:#607086;font-size:13px}.connection-state{padding:7px 10px;border-radius:999px;background:#f1f3f5;color:#687382;font-size:11px;font-weight:900}.connection-state.ready{background:#eaf7ee;color:#1f7e34}
.smtp-form,.schedule-form{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:12px;align-items:end}.smtp-form label,.schedule-form label,.test-mail-form label,.schedule-item label{display:grid;gap:6px;font-size:11px;font-weight:900}.smtp-form input,.schedule-form input,.schedule-form select,.schedule-form textarea,.test-mail-form input,.schedule-item input,.schedule-item select{width:100%;min-height:38px;border:1px solid #cfd7e3;border-radius:6px;padding:8px 9px;background:#fff}.mail-checkbox{display:flex!important;align-items:center;grid-auto-flow:column;justify-content:start}.mail-checkbox input{width:17px!important;min-height:17px!important}.test-mail-form{display:grid;grid-template-columns:minmax(260px,420px) 190px;gap:10px;align-items:end;margin-top:15px;padding-top:15px;border-top:1px solid #e5eaf0}.span-two{grid-column:span 2}.schedule-form small{color:#718096}.weekday-picker{display:flex;gap:8px;margin:0;padding:10px 12px;border:1px solid #dce3eb;border-radius:7px}.weekday-picker legend{padding:0 5px;font-size:11px;font-weight:900}.weekday-picker label{display:flex;align-items:center;gap:4px}.weekday-picker input{width:16px;min-height:16px}
.schedule-list{display:grid;gap:10px}.schedule-item{padding:13px;border:1px solid #dce3eb;border-radius:8px;background:#fbfcfd}.schedule-item>form{display:grid;grid-template-columns:8px 1fr 160px 1.4fr 110px 220px 100px 80px;gap:9px;align-items:end}.schedule-status{width:8px;height:38px;border-radius:9px;background:#aeb6c0}.schedule-status.active{background:#32a34a}.mini-days{display:flex;gap:3px}.mini-days label{display:flex;align-items:center;justify-content:center;width:28px;height:38px;border:1px solid #dce3eb;border-radius:5px;font-size:10px}.mini-days input{display:none}.mini-days label:has(input:checked){background:#238636;color:#fff;border-color:#238636}.schedule-meta{display:flex;justify-content:flex-end;align-items:center;gap:8px;margin-top:9px;color:#607086;font-size:11px}.schedule-meta form{margin:0}.schedule-meta button{padding:7px 10px;font-size:11px}.mail-log-wrap{overflow:auto}.mail-log{width:100%;min-width:1000px;border-collapse:collapse}.mail-log th,.mail-log td{padding:9px;border-bottom:1px solid #e7ecf1;text-align:left;font-size:11px}.mail-log th{background:#f3f6f9;color:#526173;text-transform:uppercase}.log-status{padding:5px 8px;border-radius:999px;font-weight:900}.log-status.sent{background:#eaf7ee;color:#1f7e34}.log-status.failed{background:#fff0ef;color:#bd2b25}.mail-empty{padding:28px!important;text-align:center;color:#718096}
@media(max-width:1200px){.smtp-form,.schedule-form{grid-template-columns:1fr 1fr}.schedule-item>form{grid-template-columns:8px 1fr 1fr}.mini-days{grid-column:span 2}.schedule-item>form>button{height:38px}}
@media(max-width:700px){.smtp-form,.schedule-form,.test-mail-form{grid-template-columns:1fr}.span-two{grid-column:auto}.mail-tabs{overflow:auto}.schedule-item>form{grid-template-columns:1fr}.schedule-status{width:100%;height:5px}.mini-days{grid-column:auto}.schedule-meta{align-items:flex-end;flex-direction:column}.mail-security{display:none}}
.danger-dialog{border-top:6px solid #d9362b}.danger-dialog p{color:#607086;line-height:1.5}.danger-dialog label{display:grid;gap:7px;font-size:12px;font-weight:900}.danger-dialog input{height:40px;border:1px solid #e2a4a0;border-radius:6px;padding:0 9px}.danger-solid{background:#d9362b}.import-result{margin-bottom:14px;padding:18px;border:1px solid #a8dcb5;border-radius:10px;background:#f2fbf4}.import-result h2{margin:0 0 5px;color:#1f7e34}.import-result p{margin:0 0 14px;color:#607086}.import-result .cards{margin:0}.import-result .card{min-width:130px;padding:12px;background:#fff}
.import-rules-panel{margin-top:16px}.rule-form{display:grid;grid-template-columns:1fr 1fr 160px;gap:10px;align-items:end}.rule-form label{display:grid;gap:6px;font-size:12px;font-weight:900}.rule-form input,.rule-form select{height:39px;border:1px solid #cfd7e3;border-radius:6px;padding:0 9px;background:#fff}.rule-list{display:grid;gap:7px;margin-top:14px}.rule-list>div{display:grid;grid-template-columns:1fr 40px 1fr auto;align-items:center;padding:10px 12px;border:1px solid #e1e7ef;border-radius:7px;background:#f8fafc}.rule-list span{text-align:center;color:#238636;font-size:20px}.rule-list form{margin:0}@media(max-width:700px){.rule-form{grid-template-columns:1fr}.rule-list>div{grid-template-columns:1fr auto}.rule-list span{display:none}}

/* v22 inbound / consume / labels */
.ops-main{max-width:1500px}
.ops-grid{display:grid;grid-template-columns:340px minmax(0,1fr);gap:16px;align-items:start}
.ops-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.ops-actions form{margin:0}
a.secondary-btn{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:0 14px;text-decoration:none;font-weight:900;font-size:13px;border-radius:7px}
.inbound-tools{grid-template-columns:1fr 1fr}
.inline-assign{margin:0}
.inline-assign select{height:34px;border:1px solid #cfd7e3;border-radius:6px;padding:0 8px;background:#fff}
.roll-status.draft{background:#eef3f7;color:#526173}
.roll-status.received{background:#e8f1ff;color:#1769c2}
.roll-status.closed{background:#e8f5ec;color:#1f7e34}
.shift-pill{display:inline-flex;align-items:center;height:36px;padding:0 12px;border-radius:999px;background:#eaf7ee;color:#1f7e34;font-weight:900}
.scan-card,.found-roll{margin-bottom:16px;padding:18px;background:#fff;border:1px solid #e1e7ef;border-radius:12px;box-shadow:0 8px 24px #15243b0a}
.scan-form{display:grid;grid-template-columns:1fr 140px 140px;gap:10px;align-items:end}
.scan-form label{display:grid;gap:6px;font-size:12px;font-weight:900}
.scan-form input{height:48px;border:2px solid #238636;border-radius:8px;padding:0 12px;font-size:20px;font-weight:800}
.camera-box{margin-top:12px;min-height:0;border-radius:10px;overflow:visible;background:transparent;position:relative}
.camera-stage{position:relative;overflow:hidden;border-radius:10px;background:#111;min-height:240px;aspect-ratio:4/3}
.camera-box.is-profi .camera-stage{min-height:280px;aspect-ratio:16/10}
.camera-stage video{position:absolute;inset:0;width:100%!important;height:100%!important;object-fit:cover!important;background:#111}
.camera-overlay{position:absolute;inset:0;pointer-events:none;z-index:2}
.camera-strip{position:absolute;left:2%;right:2%;top:50%;height:22%;transform:translateY(-50%);border:3px solid #f5c431;border-radius:10px;box-shadow:0 0 0 999px rgba(0,0,0,.45);box-sizing:border-box}
.camera-box.is-profi .camera-strip{height:16%;border-width:3px}
.camera-overlay.is-hit .camera-strip{border-color:#3dcf63;box-shadow:0 0 0 999px rgba(18,80,32,.35),0 0 0 6px #3dcf63}
.camera-readout{position:absolute;left:10px;right:10px;bottom:10px;margin:0;padding:6px 10px;border-radius:8px;background:rgba(0,0,0,.62);color:#fff;font-size:13px;font-weight:800;letter-spacing:.2px;word-break:break-all;text-align:center}
.camera-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:8px}
.camera-profi,.camera-torch{min-height:44px;border:0;border-radius:10px;padding:0 14px;font-weight:800;cursor:pointer}
.camera-profi{background:#eef3f7;color:#263447}
.camera-profi.is-on{background:#142033;color:#fff}
.camera-torch{background:#263447;color:#fff}
.camera-torch.is-on{background:#f5c431;color:#142033}
.camera-zoom-wrap{display:flex;align-items:center;gap:8px;flex:1;min-width:140px;color:#435066;font-size:13px;font-weight:800}
.camera-zoom-wrap input{flex:1}
.camera-status{margin:8px 0 0;color:#1f7e34;font-size:14px;font-weight:800}
.camera-file,.camera-profi-main{width:100%;margin-top:8px;min-height:44px;border:0;border-radius:10px;background:#eef3f7;color:#263447;font-weight:800}
.camera-profi-main.is-on{background:#142033;color:#fff}
.found-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}
.found-head h2{margin:4px 0}.found-head p{margin:0;color:#607086}
.found-head small{color:#1f7e34;font-weight:900}
.remain{font-size:34px;line-height:1}.remain small{font-size:14px;color:#607086}
.found-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:16px 0}
.found-meta div{padding:10px;background:#f8fafc;border-radius:8px}
.found-meta dt{font-size:11px;color:#607086;font-weight:800}.found-meta dd{margin:4px 0 0;font-weight:900}
.consume-form{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;align-items:end}
.consume-form label{display:grid;gap:6px;font-size:12px;font-weight:900}
.consume-form input,.consume-form select{height:44px;border:1px solid #cfd7e3;border-radius:8px;padding:0 10px;font-size:16px;font-weight:800}
.consume-btn{grid-column:1/-1;height:50px;font-size:16px}
.operator-tabs{display:flex;gap:8px;margin:0 0 14px}
.operator-tabs a{flex:1;text-align:center;padding:12px 10px;border-radius:10px;background:#fff;border:1px solid #dce3eb;color:#263447;text-decoration:none;font-weight:900;font-size:14px}
.operator-tabs a.active{background:#1f8a4c;color:#fff;border-color:#1f8a4c}
.operator-consume{display:block;margin:0}
.operator-consume .consume-btn{height:64px;font-size:18px}
.partial-consume{margin-top:14px}
.partial-consume summary{cursor:pointer;font-weight:800;color:#607086}
.consume-summary article b{font-size:18px;word-break:break-word}
@media(max-width:800px){
  .scan-form{grid-template-columns:1fr}
  .found-meta{grid-template-columns:1fr 1fr}
  .consume-form{grid-template-columns:1fr}
  .operator-tabs a{font-size:13px;padding:11px 8px}
}
.shift-stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.shift-stat-row article{display:grid;gap:4px;padding:14px;border:1px solid #e1e7ef;border-radius:9px;background:#f8fafc}
.shift-stat-row span{font-size:12px;font-weight:800;color:#607086}.shift-stat-row b{font-size:24px}
.label-print-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
button.primary-link{border:0;font-family:inherit;cursor:pointer}
button.secondary-btn{background:#fff;color:#263447;border:1px solid #cfd7e3;font-family:inherit;font-weight:900;cursor:pointer;min-height:40px;padding:0 14px;border-radius:7px}
.parking-table .label-check{width:36px;text-align:center}
.parking-table .label-check input{width:18px;height:18px;margin:0;padding:0;border:0;background:transparent;vertical-align:middle;accent-color:#238636}
@media print{
  .no-print,.sidebar{display:none!important}
}
@media(max-width:980px){
  .ops-grid,.inbound-tools,.scan-form,.found-meta,.consume-form,.shift-stat-row{grid-template-columns:1fr}
  .scan-form{grid-template-columns:1fr}
}

/* v37 industrial warehouse map */
.dashboard-page .filter-panel{display:none}
.dashboard-page .warehouse-shell{grid-template-columns:minmax(0,1.75fr) 340px;gap:14px;max-width:1680px;margin:0 auto;width:100%}
.dashboard-page .detail-panel{
  max-height:min(78vh,920px);
  overflow:auto;
  border-radius:16px;
  border-color:#d5dee8
}
.dashboard-page .warehouse-map{
  height:min(78vh,920px);
  border:0;
  border-radius:16px;
  overflow:hidden;
  background:
    linear-gradient(#1c3a4e22 1px, transparent 1px),
    linear-gradient(90deg, #1c3a4e22 1px, transparent 1px),
    radial-gradient(circle at 50% 42%, #143246, #08141e 70%);
  background-size:32px 32px, 32px 32px, auto;
  box-shadow:0 16px 40px #08141e2e
}
.dashboard-page .warehouse-title-row{
  position:absolute;
  left:16px;right:16px;top:10px;
  z-index:4;
  height:auto;
  justify-content:space-between;
  color:#c5d4df;
  pointer-events:none
}
.dashboard-page .map-zoom{
  pointer-events:auto;
  display:flex;
  align-items:center;
  gap:8px;
  font-size:11px;
  font-weight:800;
  letter-spacing:.04em;
  text-transform:uppercase;
  color:#c5d4df
}
.dashboard-page .map-zoom input{
  width:120px;
  accent-color:#3dbe6e;
  cursor:pointer
}
.dashboard-page .plan2d{background:transparent;min-width:0;max-width:none}
.dashboard-page .saved-layout .floor-outline,
.dashboard-page .floor-outline{
  background:
    repeating-linear-gradient(90deg, #152a3a 0 46px, #123041 46px 48px),
    repeating-linear-gradient(0deg, #152a3a 0 46px, #123041 46px 48px);
  border:2px solid #5d7c90;
  box-shadow:inset 0 0 48px #0008, 0 0 0 1px #0006
}
.dashboard-page .dashboard-layout-element.aisle{
  background:repeating-linear-gradient(90deg,#e0b12a 0 16px,#c99614 16px 20px,#e0b12a 20px 36px);
  border:0;color:#3a2a08;letter-spacing:2.4px;font-size:11px;
  box-shadow:inset 0 1px 0 #ffe08a, 0 4px 10px #0004
}
.dashboard-page .dashboard-layout-element.door{
  background:linear-gradient(90deg,#f4f7fa,#c9d3dc);
  border:2px solid #8fa0ae;color:#1d2a36;
  box-shadow:0 8px 16px #0005
}
.dashboard-page .slot{
  overflow:visible;
  border:0;
  border-radius:10px;
  color:#fff;
  padding:7px 4px 12px;
  box-shadow:
    inset 0 1px 0 #ffffff55,
    inset 0 -10px 14px #00000030,
    0 5px 0 #00000055,
    0 10px 16px #0005
}
.dashboard-page .slot b{
  font-size:15px;
  line-height:1;
  text-shadow:0 1px 0 #0006
}
.dashboard-page .slot small{
  margin-top:3px;
  font-size:10px;
  font-weight:900
}
.dashboard-page .slot:after{
  content:"";
  position:absolute;
  left:8px;right:8px;bottom:5px;
  height:4px;
  border-radius:99px;
  background:#0006
}
.dashboard-page .slot[style*="--fill"]:after{
  background:linear-gradient(90deg,#fff var(--fill), #0006 var(--fill))
}
.dashboard-page .slot.empty{background:linear-gradient(180deg,#8fe06a,#4ea83a)}
.dashboard-page .slot.partial{background:linear-gradient(180deg,#ffd24a,#e6a50d);color:#1a1408}
.dashboard-page .slot.partial b,.dashboard-page .slot.partial small{text-shadow:none}
.dashboard-page .slot.full{background:linear-gradient(180deg,#ff5a4d,#d61f18);box-shadow:inset 0 1px 0 #ffffff44, 0 5px 0 #7a0f0c, 0 0 16px #ef2e2466}
.dashboard-page .slot.over{box-shadow:inset 0 1px 0 #ffffff44, 0 5px 0 #7a0f0c, 0 0 18px #ff3b2f99}
.dashboard-page .slot.over small:after{content:" !";color:#fff}
.dashboard-page .slot.selected{
  outline:3px solid #7dffb0;
  outline-offset:3px;
  z-index:12
}

.slot-film{
  display:flex;
  justify-content:center;
  align-items:flex-end;
  gap:3px;
  height:14px;
  margin:0 0 2px;
  pointer-events:none
}
.slot-film i{
  display:block;
  width:15px;
  height:11px;
  border-radius:6px;
  background:linear-gradient(90deg,#7c756c 0%,#f6f0e6 16%,#cfc6b8 36%,#fffdf8 52%,#9a9286 70%,#ece4d8 88%,#5c564e 100%);
  box-shadow:inset 0 1px 0 #fff8, inset 0 -1px 0 #0003, 0 2px 2px #0005;
  position:relative
}
.slot-film i:after{
  content:"";
  position:absolute;
  right:1px;top:1px;bottom:1px;
  width:5px;
  border-radius:50%;
  background:radial-gradient(circle at 35% 30%, #6d655c, #1a1612 64%);
  box-shadow:inset 0 0 0 1px #0005, 0 0 0 1px #fff2
}

.parking-box{
  position:fixed;
  inset:0;
  z-index:120;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:18px 18px calc(24px + env(safe-area-inset-bottom));
  background:#061018cc;
  backdrop-filter:blur(8px)
}
.parking-box.hidden{display:none}
.parking-box-card{
  position:relative;
  width:min(720px,100%);
  max-height:min(82dvh,820px);
  overflow:auto;
  background:#102433;
  border:1px solid #2b4a61;
  border-radius:22px;
  padding:22px 20px 18px;
  box-shadow:0 24px 60px #0008;
  color:#e8eef3
}
.parking-box-close{
  position:absolute;
  top:14px;
  right:14px;
  min-height:44px;
  padding:0 16px;
  border-radius:12px;
  border:1px solid #2b4a61;
  background:#0c1c28;
  color:#fff;
  font-weight:800
}
.parking-box-kicker{
  margin:0;
  color:#8fa3b3;
  font-size:12px;
  font-weight:800;
  letter-spacing:.12em;
  text-transform:uppercase
}
.parking-box-card h2{
  margin:4px 0 6px;
  font-size:44px;
  letter-spacing:-.04em;
  color:#fff
}
.parking-box-meta{
  margin:0 0 16px;
  font-weight:800;
  color:#c5d4df
}
.parking-box-rolls{display:grid;gap:8px}
.parking-box-rolls .place-roll{
  display:grid;
  gap:3px;
  background:#0c1c28;
  border:1px solid #1e3547;
  color:#fff;
  padding:11px 12px
}
.parking-box-rolls .place-roll span{color:#8fa3b3}
.parking-box-rolls .ok-message{
  background:#0c1c28;
  border-color:#1e3547;
  color:#8fa3b3
}
body.parking-box-open{overflow:hidden}

@media(max-width:1180px){
  .dashboard-page .warehouse-shell{grid-template-columns:1fr}
  .dashboard-page .warehouse-map,.dashboard-page .detail-panel{max-height:none}
  .dashboard-page .warehouse-map{height:58vh;min-height:380px;overflow:hidden}
  .dashboard-page .plan2d{min-width:0;height:auto}
}

.import-block-title{margin:22px 0 8px;font-size:15px}
.import-park-grid{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px}
.import-park-grid article{display:flex;flex-direction:column;gap:3px;min-width:120px;padding:10px 12px;border:1px solid #e1e7ef;border-radius:10px;background:#f8fafc}
.import-park-grid b{font-size:18px}
.import-park-grid span{color:#607086;font-size:12px;font-weight:700}
.import-ask{display:flex;flex-wrap:wrap;justify-content:space-between;gap:14px;align-items:center;margin:14px 0;padding:16px 18px;border:1px solid #f0c9a8;border-radius:12px;background:#fff8f0}
.import-ask p{margin:4px 0 0;color:#607086;font-weight:700}
.import-ask-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.import-ask-actions .secondary-btn{min-height:40px}
.card-parking{border:1px solid #f0c9a8;background:#fff8f0}
.import-ask-parking{border-color:#e2b35a;background:#fff6e8}
.parking-mode{display:flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid #e1e7ef;border-radius:10px;background:#fff;font-weight:800;cursor:pointer}
.import-park-toolbar{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 10px}
.import-moved-wrap{max-height:420px;overflow:auto;margin-bottom:16px}
.import-check{display:flex;align-items:center;justify-content:center}
.import-check input{width:18px;height:18px}
.new-park{color:#0b65c2}
.import-confirm-foot{display:flex;justify-content:flex-end;margin-top:16px}
.mail-preview{margin-top:12px;padding:8px;border:1px solid #dce3eb;border-radius:14px;background:#e8eef2;overflow:auto;max-height:720px}
.mail-preview table{margin:0 auto}
.mail-name-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin:4px 0 0}
.mail-name-list a{display:block;padding:12px 14px;border:1px solid #dce3eb;border-radius:12px;background:#f8fafc;text-decoration:none;color:inherit}
.mail-name-list b{display:block;margin-bottom:4px;font-size:15px}
.mail-name-list span{display:block;color:#607086;font-size:12px;font-weight:700;line-height:1.35}
.login-user-cell,.login-geo{display:flex;align-items:center;gap:10px;min-width:0}
.login-user-cell .avatar{
  --avatar-size:36px;width:36px;height:36px;border-radius:50%;object-fit:cover;
  background:#fff;display:block;flex:0 0 36px;box-shadow:0 3px 0 #10203314
}
.login-unknown-mark,.login-geo-mark{
  width:36px;height:36px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  background:#e8edf4;color:#5d6d7e;flex:0 0 36px;box-shadow:0 3px 0 #10203314
}
.login-geo-mark{width:28px;height:28px;flex-basis:28px}
.login-unknown-mark svg,.login-geo-mark svg{width:18px;height:18px;display:block}
.login-flag{font-size:22px;line-height:1;width:28px;text-align:center;flex:0 0 28px}
.login-geo-unknown{color:#718096}
