/* =====================================================================
   FIBERONE DESKTOP — flat brutalist + paper.css + system.css tokens
   Scoped .dx- to avoid any collision with mobile style.css.
   No @import of raw system.css — cherry-picked double-bevel chrome only.
   ===================================================================== */
:root{
  --dx-blue:#123fb5; --dx-blue-ink:#0a245e; --dx-blue-soft:rgba(47,107,215,.10);
  --dx-ink:#0c1730; --dx-muted:#647089;
  --dx-paper:#f4f6fa; --dx-paper-2:#eef1f7; --dx-surface:#ffffff;
  --dx-line:#e3eff6; --dx-line-2:#d6dbe6;
  --dx-green:#0f8f48; --dx-amber:#b45309; --dx-red:#d12d22;
  --dx-shadow:4px 4px 0 var(--dx-ink);
  --dx-shadow-sm:2px 2px 0 var(--dx-ink);
  --dx-bevel-light:#ffffff; --dx-bevel-dark:#c9ced6;
  --dx-rail-w:232px;
}
.dx-shell, .dx-shell *{box-sizing:border-box;margin:0;padding:0}
.dx-shell{
  font-family:"Geneva","Lucida Grande","Segoe UI",system-ui,sans-serif;
  background:var(--dx-paper);color:var(--dx-ink);font-size:14px;line-height:1.5;
  height:100vh;overflow:hidden;
}
.dx-shell h1,.dx-shell h2,.dx-shell h3{font-family:"Lexend Mega","Geneva",sans-serif;font-weight:700;letter-spacing:-.01em}
.dx-shell button,.dx-shell input{font-family:inherit}
.dx-shell button{border:none;background:none;cursor:pointer}
.dx-shell [hidden]{display:none!important}

/* === LOGIN === */
.dx-login{position:fixed;inset:0;display:grid;grid-template-columns:1.05fr 1fr;background:var(--dx-surface)}
.dx-login-brand{
  background:linear-gradient(180deg,rgba(10,36,94,.74),rgba(10,36,94,.9)),
             url("assets/bg.png") center/cover no-repeat,var(--dx-blue-ink);
  display:flex;align-items:flex-end;padding:0 clamp(40px,4.5vw,64px) clamp(48px,6vh,72px);
}
.dx-login-copy{color:#fff;max-width:32ch}
.dx-login-copy h1{font-size:32px;line-height:1.15;margin-bottom:14px}
.dx-login-copy p{font-size:15px;line-height:1.6;opacity:.85}
.dx-login-form{
  display:flex;flex-direction:column;justify-content:center;align-items:flex-start;
  padding:0 clamp(48px,7vw,104px);
}
.dx-logo{width:186px;margin-bottom:28px}
.dx-login-form h2{font-size:28px;margin-bottom:6px}
.dx-sub{font-size:14px;color:var(--dx-muted);margin-bottom:28px}
.dx-field{display:block;width:100%;max-width:380px;margin-bottom:16px}
.dx-field span{display:block;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;color:var(--dx-muted);margin-bottom:6px}
.dx-field input{
  width:100%;border:2px solid var(--dx-ink);border-radius:0;background:var(--dx-surface);
  padding:13px 14px;font-size:15px;color:var(--dx-ink);outline:none;
}
.dx-field input:focus{box-shadow:var(--dx-shadow-sm);transform:translate(-1px,-1px)}
.dx-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  border:2px solid var(--dx-ink);border-radius:0;padding:13px 22px;
  background:var(--dx-surface);color:var(--dx-ink);font-size:14.5px;font-weight:800;
  box-shadow:var(--dx-shadow);transition:transform .15s,box-shadow .15s;
}
.dx-btn:hover{transform:translate(2px,2px);box-shadow:var(--dx-shadow-sm)}
.dx-btn:active{transform:translate(4px,4px);box-shadow:none}
.dx-btn.primary{background:var(--dx-blue);color:#fff;border-color:var(--dx-blue)}
.dx-btn.block{width:100%}
.dx-msg{margin-top:14px;font-size:13px;font-weight:700;min-height:18px}
.dx-msg.err{color:var(--dx-red)}
.dx-msg.ok{color:var(--dx-green)}
.dx-link{display:inline-block;margin-top:22px;font-size:13px;font-weight:700;color:var(--dx-blue);text-decoration:none}
.dx-link:hover{text-decoration:underline}

/* === APP SHELL === */
.dx-app{display:flex;flex-direction:column;height:100vh}
.dx-topbar{
  height:64px;flex:0 0 auto;display:flex;align-items:center;gap:18px;
  padding:0 24px;background:var(--dx-surface);border-bottom:2px solid var(--dx-ink);z-index:10;
}
.dx-brand{display:flex;align-items:center;gap:11px}
.dx-mark{height:30px;width:auto}
.dx-appname{font-weight:800;color:var(--dx-blue);font-size:15px;letter-spacing:.2px}
.dx-appname b{color:var(--dx-ink)}
.dx-search{display:flex;align-items:center;position:relative;margin-left:8px}
.dx-search-btn{
  height:40px;width:40px;display:flex;align-items:center;justify-content:center;
  border:2px solid var(--dx-ink);border-right:none;border-radius:0;
  background:var(--dx-surface);transition:background .15s;
}
.dx-search-btn:hover{background:var(--dx-paper)}
.dx-search-input{
  height:40px;width:0;padding:0;border:2px solid var(--dx-ink);border-left:none;border-radius:0;
  font-size:14px;outline:none;opacity:0;overflow:hidden;
  transition:width .26s cubic-bezier(.32,.72,0,1),padding .26s,opacity .2s;
}
.dx-search.open .dx-search-input{width:280px;padding:0 12px;opacity:1}
.dx-topright{display:flex;align-items:center;gap:14px;margin-left:auto}
.dx-pill{display:inline-flex;align-items:center;padding:6px 12px;font-size:11px;font-weight:900;letter-spacing:.5px;
  background:var(--dx-amber);color:#fff;border:2px solid var(--dx-ink);text-transform:uppercase}
.dx-user{font-size:13px;font-weight:800;color:var(--dx-ink)}
.dx-logout{
  padding:9px 16px;border:2px solid var(--dx-ink);border-radius:0;background:var(--dx-surface);
  color:var(--dx-blue);font-weight:800;font-size:12.5px;
}
.dx-logout:hover{background:var(--dx-blue);color:#fff}

.dx-body{display:flex;flex:1;min-height:0}
.dx-rail{
  width:var(--dx-rail-w);flex:0  0 auto;display:flex;flex-direction:column;gap:2px;
  padding:16px 12px;background:var(--dx-surface);border-right:2px solid var(--dx-ink);
}
.dx-tab{
  display:flex;align-items:center;gap:12px;padding:12px 14px;color:var(--dx-muted);
  font-size:13.5px;font-weight:800;text-align:left;border:2px solid transparent;border-radius:0;
  transition:background .15s,color .15s;
}
.dx-tab svg{flex:none}
.dx-tab:hover:not(.active){background:var(--dx-paper);color:var(--dx-ink)}
.dx-tab.active{background:var(--dx-blue);color:#fff;border-color:var(--dx-blue)}
.dx-tab.active svg{transform:none}
.dx-tab[hidden]{display:none}

.dx-main{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}
.dx-kpi-strip{
  display:grid;grid-template-columns:repeat(5,1fr);gap:14px;
  padding:20px 28px;flex:0 0 auto;
}
.dx-kpi{
  background:var(--dx-surface);border:2px solid var(--dx-ink);border-radius:0;padding:18px 20px;
  box-shadow:var(--dx-shadow);
}
.dx-kpi-val{font-size:30px;font-weight:900;color:var(--dx-blue);line-height:1}
.dx-kpi-label{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:var(--dx-muted);margin-top:6px}
.dx-kpi-click{cursor:pointer;transition:background .15s,transform .15s}
.dx-kpi-click:hover{background:var(--dx-paper);transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--dx-ink)}
.dx-kpi-click.has-alert .dx-kpi-val{color:var(--dx-fault)}
.dx-kpi-click.has-alert{background:#fff7ed}

.dx-view{flex:1;position:relative;overflow:auto;padding:0 28px 28px}
.dx-view-pane{display:none;height:100%}
.dx-view-pane.active{display:block}

.dx-map-toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.dx-range,.dx-legend{display:flex;align-items:center;gap:8px}
.dx-chip{
  padding:8px 14px;border:2px solid var(--dx-ink);border-radius:0;font-size:12px;font-weight:800;
  background:var(--dx-surface);color:var(--dx-muted);text-transform:uppercase;letter-spacing:.3px;
}
.dx-chip.active{background:var(--dx-blue);color:#fff;border-color:var(--dx-blue)}
.dx-chip:hover{background:var(--dx-paper)}
.dx-chip.active:hover{background:var(--dx-blue-ink)}
.dx-map{height:calc(100% - 60px);min-height:400px;border:2px solid var(--dx-ink);border-radius:0;overflow:hidden}

/* ── Boxes view ── */
.dx-boxes-search{display:flex;gap:10px;margin-bottom:16px;flex:0 0 auto}
.dx-boxes-search input{
  flex:1;height:44px;border:2px solid var(--dx-ink);border-radius:0;padding:0 14px;
  font-size:15px;outline:none;background:var(--dx-surface);
}
.dx-boxes-search input:focus{box-shadow:var(--dx-shadow)}
.dx-boxes-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:16px}
.dx-box-card{
  background:var(--dx-surface);border:2px solid var(--dx-ink);border-radius:0;
  box-shadow:var(--dx-shadow);padding:18px;cursor:pointer;display:flex;flex-direction:column;gap:14px;
}
.dx-box-card:hover{transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--dx-ink)}
.dx-box-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.dx-box-name{font-size:17px;font-weight:900;color:var(--dx-ink)}
.dx-box-pat{font-size:12px;font-weight:800;color:var(--dx-muted);margin-top:2px}
.dx-box-gauge{width:64px;height:64px;flex:none}
.dx-box-rows{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.dx-box-row{border:2px solid var(--dx-line);padding:8px 10px}
.dx-box-row b{display:block;font-size:18px;font-weight:900;color:var(--dx-blue)}
.dx-box-row span{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;color:var(--dx-muted)}
.dx-box-meta{display:flex;justify-content:space-between;font-size:12px;color:var(--dx-muted)}
.dx-box-meta b{color:var(--dx-ink);font-weight:700}
.dx-status{font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.4px;padding:3px 8px;border:2px solid var(--dx-ink)}
.dx-status.active{background:#0f8f48;color:#fff;border-color:#0f8f48}
.dx-status.fault{background:#d12d22;color:#fff;border-color:#d12d22}
.dx-status.dead{background:#647089;color:#fff;border-color:#647089}

/* skeleton */
.dx-skel{background:var(--dx-surface);border:2px solid var(--dx-ink);box-shadow:var(--dx-shadow);height:200px;position:relative;overflow:hidden}
.dx-skel::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(12,23,48,.06),transparent);animation:dx-shimmer 1.1s infinite}
@keyframes dx-shimmer{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}

/* ── Boxes filters ── */
.dx-boxes-search{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;align-items:center}
.dx-boxes-search input[type=text],.dx-boxes-search input:not([type]),.dx-boxes-search select{
  font:inherit;font-size:14px;padding:8px 10px;border:2px solid var(--dx-ink);border-radius:0;background:var(--dx-surface);color:var(--dx-ink)
}
.dx-boxes-search input{flex:1 1 220px;min-width:180px}
.dx-filter{min-width:120px}
.dx-filter-cb{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;white-space:nowrap}
.dx-filter-cb input{width:16px;height:16px;accent-color:var(--dx-blue)}
.dx-box-count{font-size:13px;font-weight:700;color:var(--dx-muted);margin-left:auto;white-space:nowrap}
.dx-boxes-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;align-content:start}

.dx-cluster-label{display:flex;align-items:center;justify-content:center;pointer-events:none}
.dx-cluster-label span{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;background:var(--dx-ink);color:#fff;font-weight:900;font-size:13px;border:2px solid #fff;box-shadow:2px 2px 0 rgba(12,23,48,.3)}

.dx-port-free{cursor:pointer;border:2px dashed var(--dx-blue)}
.dx-port-free:hover{background:var(--dx-blue);color:#fff}
.dx-prov{margin:14px 0;border:2px solid var(--dx-ink);box-shadow:var(--dx-shadow);padding:16px;background:var(--dx-paper)}
.dx-prov .field{margin-bottom:12px}
.dx-prov-btns{display:flex;gap:10px;margin-top:6px}
.dx-prov-cancel{background:none;border:none;color:var(--dx-muted);text-decoration:underline;cursor:pointer;font:inherit;font-weight:600;margin-left:auto}
.dx-prov-msg{font-size:13px;font-weight:700;margin-top:10px;min-height:16px;color:var(--dx-blue)}
.dx-cta-ghost{background:var(--dx-surface);color:var(--dx-ink)}

.dx-scan-overlay{position:fixed;inset:0;z-index:9999;background:rgba(12,23,48,.85);display:flex;align-items:center;justify-content:center;padding:20px}
.dx-scan-box{background:var(--dx-surface);border:2px solid var(--dx-ink);box-shadow:var(--dx-shadow);padding:16px;max-width:480px;width:100%;text-align:center}
.dx-scan-box video{width:100%;border:2px solid var(--dx-ink);background:#000;aspect-ratio:4/3}
.dx-scan-msg{font-size:13px;font-weight:700;margin:12px 0;color:var(--dx-ink)}
.dx-scan-btns{display:flex;justify-content:center;gap:10px}

.dx-sub-asset{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;font-weight:600;color:var(--dx-muted);padding:0 0 4px 4px}
.dx-sub-asset span{color:var(--dx-ink)}
.dx-warranty-expired{color:var(--dx-fault);font-weight:800}

.dx-track-list{margin-top:10px;border-top:2px solid var(--dx-ink);padding-top:8px}
.dx-track-row{display:grid;grid-template-columns:1fr 1fr;gap:2px 12px;font-size:12px;font-weight:600;padding:5px 0;border-bottom:1px solid #e2e8f0}
.dx-track-row b{grid-column:1/-1;color:var(--dx-ink)}
.dx-track-row span{color:var(--dx-muted)}

/* ── Map details strip ── */
.dx-map-details{
  margin-top:14px;border:2px solid var(--dx-ink);box-shadow:var(--dx-shadow);background:var(--dx-surface);
  padding:16px 20px;display:none;gap:20px;align-items:center;flex-wrap:wrap;
}
.dx-map-details.show{display:flex}
.dx-map-details h3{font-size:16px;font-weight:900;margin:0}
.dx-map-details .dx-md-stat{font-size:13px;color:var(--dx-muted)}
.dx-map-details .dx-md-stat b{color:var(--dx-ink);font-weight:800}
.dx-map-details .dx-md-bar{height:8px;border:2px solid var(--dx-ink);width:160px;position:relative}
.dx-map-details .dx-md-bar i{position:absolute;left:0;top:0;bottom:0;background:var(--dx-blue);display:block}

.dx-detail{
  position:absolute;top:0;right:0;bottom:0;width:min(480px,50%);background:var(--dx-surface);
  border-left:2px solid var(--dx-ink);box-shadow:-4px 0 0 var(--dx-ink);z-index:5;
  transform:translateX(100%);transition:transform .26s cubic-bezier(.32,.72,0,1);
  display:flex;flex-direction:column;
}
.dx-detail.open{transform:translateX(0)}
.dx-detail-back{
  display:flex;align-items:center;gap:8px;padding:14px 20px;font-size:13px;font-weight:800;
  color:var(--dx-blue);border-bottom:2px solid var(--dx-line);flex:0 0 auto;
}
.dx-detail-back:hover{background:var(--dx-paper)}
.dx-detail-body{flex:1;overflow:auto;padding:20px}
.dx-detail-body h3{font-size:20px;font-weight:900;margin:0 0 4px}
.dx-detail-body .dx-ubar{height:10px;border:2px solid var(--dx-ink);margin:14px 0;position:relative}
.dx-detail-body .dx-ubar i{position:absolute;left:0;top:0;bottom:0;background:var(--dx-blue);display:block}
.dx-detail-body .dx-bd-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:6px;margin:12px 0}
.dx-detail-body .dx-port{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border:2px solid var(--dx-ink);font-weight:900;font-size:13px}
.dx-detail-body .dx-port.occ{background:var(--dx-blue);color:#fff}
.dx-detail-body .dx-port.free{background:var(--dx-surface)}
.dx-detail-body .dx-port.fault{background:#d12d22;color:#fff}
.dx-detail-body .dx-sub{margin-top:16px;border-top:2px solid var(--dx-line);padding-top:12px}
.dx-detail-body .dx-sub-row{display:flex;justify-content:space-between;font-size:13px;padding:6px 0;border-bottom:1px solid var(--dx-line)}
.dx-detail-body .dx-sub-row b{color:var(--dx-ink)}
.dx-detail-body img.dx-fat-photo{width:100%;border:2px solid var(--dx-ink);margin-top:12px}


@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
}
.dx-shell *:focus-visible{outline:none;box-shadow:0 0 0 4px rgba(18,63,181,.14)}