/* MDM-proto console — glassmorphic, themeable.
   Every surface, shadow and aurora color is a token on :root (dark) with a
   [data-theme=light] override block. A head script resolves the theme before
   first paint (localStorage 'mdmTheme', else system preference). */

:root{
  color-scheme:dark;
  --bg:#0b0609;
  --txt:#f8f1f5;--sub:#c3abb8;--muted:#8e7683;
  --panel:rgba(255,255,255,.035);--panel2:rgba(255,255,255,.055);
  --line:rgba(255,255,255,.09);--line2:rgba(255,255,255,.17);
  --hilite:inset 0 1px 0 rgba(255,255,255,.08);
  --soft:rgba(255,255,255,.06);--soft2:rgba(255,255,255,.10);
  --input-bg:rgba(0,0,0,.28);--input-bg2:rgba(0,0,0,.34);
  --track:rgba(255,255,255,.13);
  --glassA:rgba(255,255,255,.075);--glassB:rgba(255,255,255,.028);
  --chrome:rgba(23,12,19,.34);--chrome2:rgba(30,17,25,.7);
  --thumb:rgba(255,255,255,.12);--thumb2:rgba(255,255,255,.22);
  --sh-md:0 10px 32px rgba(0,0,0,.27);--sh-lg:0 18px 50px rgba(0,0,0,.5);
  --pink:#f090bc;--pink-dim:rgba(240,144,188,.16);
  --green:#7ed9a2;--green-dim:rgba(126,217,162,.16);
  --red:#eb6e6e;--red-dim:rgba(235,110,110,.13);
  --amber:#e6c07a;--amber-dim:rgba(230,192,122,.14);
  --dot-off:#6a5560;--r:18px;
  --aurA:#180d14;--aurB:#0b0609;
  --blob1:rgba(240,144,188,.21);--blob2:rgba(150,110,235,.17);--blob3:rgba(235,120,165,.14);
  --vig:radial-gradient(1400px 1000px at 50% 42%,transparent 42%,rgba(0,0,0,.46) 100%);
  --blur:blur(28px) saturate(1.65);
  --ease:cubic-bezier(.2,.7,.3,1);
}
[data-theme=light]{
  color-scheme:light;
  --bg:#f6eff3;
  --txt:#2c1a25;--sub:#6d5060;--muted:#95808c;
  --panel:rgba(255,255,255,.5);--panel2:rgba(255,255,255,.72);
  --line:rgba(60,30,48,.11);--line2:rgba(60,30,48,.2);
  --hilite:inset 0 1px 0 rgba(255,255,255,.85);
  --soft:rgba(60,30,48,.06);--soft2:rgba(60,30,48,.10);
  --input-bg:rgba(255,255,255,.66);--input-bg2:rgba(255,255,255,.92);
  --track:rgba(60,30,48,.15);
  --glassA:rgba(255,255,255,.8);--glassB:rgba(255,255,255,.45);
  --chrome:rgba(255,255,255,.55);--chrome2:rgba(255,255,255,.8);
  --thumb:rgba(60,30,48,.18);--thumb2:rgba(60,30,48,.3);
  --sh-md:0 10px 30px rgba(90,45,70,.10);--sh-lg:0 18px 46px rgba(90,45,70,.17);
  --pink:#d6478d;--pink-dim:rgba(214,71,141,.13);
  --green:#1f9d5c;--green-dim:rgba(31,157,92,.13);
  --red:#d64545;--red-dim:rgba(214,69,69,.11);
  --amber:#a3761b;--amber-dim:rgba(163,118,27,.13);
  --dot-off:#bda6b3;
  --aurA:#fdf4f9;--aurB:#f2e8ee;
  --blob1:rgba(240,144,188,.35);--blob2:rgba(160,120,240,.20);--blob3:rgba(240,130,170,.20);
  --vig:radial-gradient(1400px 1000px at 50% 42%,transparent 46%,rgba(120,60,95,.09) 100%);
}
*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);color:var(--txt);min-height:100vh;
  font:14.5px/1.55 -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  -webkit-font-smoothing:antialiased}

/* ---- living aurora: gradient blobs drifting on the compositor ---- */
.aurora{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;
  background:linear-gradient(180deg,var(--aurA),var(--aurB))}
.aurora i{position:absolute;display:block;border-radius:50%;will-change:transform}
.aurora i:nth-child(1){width:95vmax;height:95vmax;left:-28vmax;top:-48vmax;
  background:radial-gradient(circle,var(--blob1),transparent 62%);
  animation:drift1 44s ease-in-out infinite alternate}
.aurora i:nth-child(2){width:85vmax;height:85vmax;right:-38vmax;top:-18vmax;
  background:radial-gradient(circle,var(--blob2),transparent 62%);
  animation:drift2 56s ease-in-out infinite alternate}
.aurora i:nth-child(3){width:90vmax;height:90vmax;left:-14vmax;bottom:-48vmax;
  background:radial-gradient(circle,var(--blob3),transparent 62%);
  animation:drift3 50s ease-in-out infinite alternate}
.aurora::after{content:'';position:absolute;inset:0;background:var(--vig)}
@keyframes drift1{to{transform:translate(13vmax,10vmax) scale(1.18) rotate(8deg)}}
@keyframes drift2{to{transform:translate(-11vmax,13vmax) scale(1.24)}}
@keyframes drift3{to{transform:translate(10vmax,-11vmax) scale(1.12) rotate(-6deg)}}

/* ---- entrance choreography: short, staggered, once ---- */
@keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.page-head{animation:rise .38s var(--ease) both}
.card{animation:rise .42s var(--ease) both}
.filterbar,.tabs{animation:rise .4s var(--ease) both;animation-delay:.05s}
.kpi{animation:rise .4s var(--ease) both}
.kpis .kpi:nth-child(1){animation-delay:.03s}
.kpis .kpi:nth-child(2){animation-delay:.08s}
.kpis .kpi:nth-child(3){animation-delay:.13s}
.kpis .kpi:nth-child(4){animation-delay:.18s}
.dcard{animation:rise .4s var(--ease) both;animation-delay:.2s}
.cards-grid .dcard:nth-child(1){animation-delay:.04s}
.cards-grid .dcard:nth-child(2){animation-delay:.07s}
.cards-grid .dcard:nth-child(3){animation-delay:.10s}
.cards-grid .dcard:nth-child(4){animation-delay:.13s}
.cards-grid .dcard:nth-child(5){animation-delay:.16s}
.cards-grid .dcard:nth-child(6){animation-delay:.19s}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001s!important;animation-iteration-count:1!important;
    transition-duration:.001s!important}
}

::selection{background:rgba(240,144,188,.35)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--thumb);border-radius:99px;
  border:3px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:var(--thumb2);border:3px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-track{background:transparent}
a{color:inherit;text-decoration:none}
svg{display:block}
.shell{display:flex;min-height:100vh}

/* ---- frosted sidebar ---- */
.sidebar{width:240px;flex-shrink:0;position:sticky;top:0;height:100vh;display:flex;
  flex-direction:column;gap:4px;padding:20px 14px;border-right:1px solid var(--line);
  background:var(--chrome);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  box-shadow:inset -1px 0 0 rgba(255,255,255,.03);z-index:5}
.brand{display:flex;align-items:center;gap:11px;font-weight:700;font-size:16px;padding:8px 10px 20px;
  letter-spacing:-.01em}
.brand .badge{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;flex-shrink:0;
  background:linear-gradient(140deg,#ffb9d6,#f090bc 45%,#c86ea0);color:#2b1420;
  box-shadow:0 5px 18px rgba(240,144,188,.45),inset 0 1px 0 rgba(255,255,255,.35)}
.brand .badge svg{width:24px;height:24px}
.brand small{display:block;color:var(--muted);font-weight:500;font-size:11px;letter-spacing:.08em}
.themebtn{margin-left:auto;width:29px;height:29px;flex-shrink:0;display:grid;place-items:center;
  background:var(--soft);color:var(--sub);border:1px solid var(--line);border-radius:9px;
  padding:0;cursor:pointer;box-shadow:none}
.themebtn:hover{background:var(--soft2);color:var(--txt);filter:none;transform:none;box-shadow:none}
.themebtn svg{width:15px;height:15px}
.themebtn .ic-moon{display:none}
[data-theme=light] .themebtn .ic-sun{display:none}
[data-theme=light] .themebtn .ic-moon{display:block}
.nav{display:flex;flex-direction:column;gap:3px}
.nav a{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:12px;
  color:var(--sub);font-weight:500;transition:background .16s,color .16s,transform .16s}
.nav a svg{width:18px;height:18px;opacity:.8;transition:opacity .16s}
.nav a:hover{background:var(--soft);color:var(--txt);transform:translateX(2px)}
.nav a:hover svg{opacity:1}
.nav a.active{background:linear-gradient(180deg,var(--pink-dim),transparent 160%);
  color:var(--txt);box-shadow:var(--hilite),0 4px 16px rgba(240,144,188,.12)}
.nav a.active svg{opacity:1;color:var(--pink)}
.navbadge{margin-left:auto;background:var(--red);color:#fff;font-size:11px;font-weight:700;
  min-width:18px;height:18px;border-radius:9px;display:inline-flex;align-items:center;
  justify-content:center;padding:0 5px;box-shadow:0 0 10px rgba(235,110,110,.5)}
.sidebar .foot{margin-top:auto;padding:10px;color:var(--muted);font-size:11.5px}
.main{flex:1;min-width:0;padding:32px 40px 70px;max-width:1560px;margin:0 auto}

/* ---- page head ---- */
.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  margin-bottom:24px;flex-wrap:wrap}
.page-head h1{font-size:25px;margin:0;font-weight:700;letter-spacing:-.02em}
.page-head .sub{color:var(--muted);margin-top:4px;font-size:13.5px;display:flex;align-items:center;gap:8px}

/* ---- KPI tiles: true glass ---- */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin-bottom:26px}
.kpi{position:relative;background:linear-gradient(180deg,var(--panel2),var(--panel));
  border:1px solid var(--line);
  border-radius:var(--r);padding:16px 18px;display:flex;flex-direction:column;gap:5px;
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  box-shadow:var(--hilite),var(--sh-md);
  transition:transform .16s var(--ease),border-color .16s}
.kpi:hover{transform:translateY(-2px);border-color:var(--line2)}
.kpi .n{font-size:28px;font-weight:700;line-height:1;letter-spacing:-.02em}
.kpi .l{color:var(--muted);font-size:11.5px;text-transform:uppercase;letter-spacing:.1em;
  display:flex;align-items:center;gap:7px}
.kpi .l svg{width:14px;height:14px}

/* ---- fleet cards: faux glass (no blur — hundreds may render) ---- */
.cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(272px,1fr));gap:15px}
.dcard{position:relative;background:linear-gradient(165deg,var(--glassA),var(--glassB) 55%);
  border:1px solid var(--line);border-radius:var(--r);padding:17px;display:flex;
  flex-direction:column;gap:11px;box-shadow:var(--hilite);
  transition:transform .15s var(--ease),border-color .15s}
/* hover glow lives on a pseudo-layer and animates opacity only — paint-free */
.dcard::before{content:'';position:absolute;inset:-1px;border-radius:var(--r);
  pointer-events:none;opacity:0;transition:opacity .18s;
  box-shadow:var(--sh-lg),0 6px 28px rgba(240,144,188,.15)}
.dcard:hover{transform:translateY(-3px);border-color:rgba(240,144,188,.4)}
.dcard:hover::before{opacity:1}
.dcard .top{display:flex;align-items:center;gap:9px}
.dcard .nm{font-weight:600;font-size:15px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dcard .owner{color:var(--sub);font-size:13px;min-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dcard .meta{color:var(--muted);font-size:12px;display:flex;gap:6px;flex-wrap:wrap}
.dcard .foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:2px}
.dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;display:inline-block}
.dot.on{background:var(--green);box-shadow:0 0 0 3px var(--green-dim),0 0 10px rgba(126,217,162,.6);
  animation:breathe 2.8s ease-in-out infinite}
@keyframes breathe{50%{box-shadow:0 0 0 5px rgba(126,217,162,.09),0 0 16px rgba(126,217,162,.85)}}
.dot.off{background:var(--dot-off)}

/* ---- pills / badges ---- */
.pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;
  font-size:11.5px;background:var(--soft);color:var(--sub);font-weight:500;
  white-space:nowrap;box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}
.pill.on{background:var(--green-dim);color:var(--green)}
.pill.off{background:var(--red-dim);color:var(--red)}
.pill.pending{background:var(--amber-dim);color:var(--amber)}
.pill.sent{background:var(--pink-dim);color:var(--pink)}
.sigbars{display:inline-flex;align-items:flex-end;gap:2px;margin-left:8px;vertical-align:baseline}
.sigbars i{width:4px;border-radius:1.5px;background:var(--track)}
.sigbars i:nth-child(1){height:4px}
.sigbars i:nth-child(2){height:7px}
.sigbars i:nth-child(3){height:10px}
.sigbars i:nth-child(4){height:13px}
.sigbars i.on{background:var(--pink)}
.batt{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--sub)}
.batt .track{width:34px;height:8px;border-radius:5px;background:var(--track);
  overflow:hidden;display:inline-block}
.batt .fill{height:100%;border-radius:5px;display:block}

/* ---- glass cards ---- */
.card{background:linear-gradient(180deg,var(--panel2),var(--panel));border:1px solid var(--line);
  border-radius:var(--r);padding:20px;margin-bottom:16px;
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  box-shadow:var(--hilite),var(--sh-md)}
.card h2{font-size:12px;text-transform:uppercase;letter-spacing:.15em;color:var(--sub);
  margin:0 0 15px;font-weight:600;display:flex;align-items:center;gap:8px}
.card h2 svg{width:15px;height:15px;opacity:.85;color:var(--pink)}
.cols{display:grid;grid-template-columns:1.7fr 1fr;gap:16px;align-items:start}
.summary{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:18px 20px}
.summary .it{display:flex;flex-direction:column;gap:5px;min-width:0}
.summary .it .k{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.07em}
.summary .it .v{font-size:14px;font-weight:500;overflow-wrap:anywhere}
@media(max-width:860px){.summary{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:520px){.summary{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(min-width:1500px){.summary{grid-template-columns:repeat(7,minmax(0,1fr))}}

/* ---- forms ---- */
label{display:block;margin:0 0 6px;color:var(--sub);font-size:13px;font-weight:500}
input,select,textarea{width:100%;background:var(--input-bg);color:var(--txt);border:1px solid var(--line2);
  border-radius:11px;padding:10px 12px;font-size:14px;font-family:inherit;
  transition:border-color .16s,box-shadow .16s,background .16s}
input:hover,select:hover,textarea:hover{border-color:var(--line2)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--pink);
  box-shadow:0 0 0 3px var(--pink-dim),0 0 20px rgba(240,144,188,.12);background:var(--input-bg2)}
textarea{min-height:220px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;line-height:1.5}
/* themed range slider: frosted track, rose fill (via --fill from app.js),
   glowing gradient knob */
input[type=range]{-webkit-appearance:none;appearance:none;height:8px;border:0;border-radius:99px;
  padding:0;cursor:pointer;accent-color:var(--pink);
  background:linear-gradient(90deg,#ffb9d6,var(--pink) var(--fill,70%),
    var(--track) var(--fill,70%));
  box-shadow:inset 0 1px 2px rgba(0,0,0,.2)}
input[type=range]:hover{border:0}
input[type=range]:focus{border:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.2),0 0 0 3px var(--pink-dim)}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;
  border-radius:50%;border:0;background:linear-gradient(180deg,#ffd0e3,#ffa9cd 40%,var(--pink));
  box-shadow:0 2px 10px rgba(240,144,188,.55),inset 0 1px 0 rgba(255,255,255,.55);
  transition:transform .12s var(--ease)}
input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.18)}
input[type=range]::-webkit-slider-thumb:active{transform:scale(1.05)}
input[type=range]::-moz-range-thumb{width:18px;height:18px;border-radius:50%;border:0;
  background:linear-gradient(180deg,#ffd0e3,#ffa9cd 40%,var(--pink));
  box-shadow:0 2px 10px rgba(240,144,188,.55)}
input[type=range]::-moz-range-track{height:8px;border-radius:99px;background:var(--track)}
input[type=range]::-moz-range-progress{height:8px;border-radius:99px;background:var(--pink)}
.field{margin-bottom:14px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}

/* ---- buttons ---- */
.btn,button,input[type=submit]{display:inline-flex;align-items:center;gap:8px;
  background:linear-gradient(180deg,#ffa9cd,#f090bc 45%,#e07eae);color:#2b1420;border:0;
  border-radius:11px;padding:10px 16px;font-weight:600;font-size:13.5px;cursor:pointer;
  font-family:inherit;box-shadow:0 4px 16px rgba(240,144,188,.28),var(--hilite);
  transition:filter .13s,transform .09s var(--ease),box-shadow .13s}
.btn:hover,button:hover,input[type=submit]:hover{filter:brightness(1.08);transform:translateY(-1px);
  box-shadow:0 8px 24px rgba(240,144,188,.36),var(--hilite)}
.btn:active,button:active{transform:translateY(1px) scale(.975);box-shadow:0 2px 8px rgba(240,144,188,.25)}
a:focus-visible,button:focus-visible,.tab:focus-visible{outline:2px solid var(--pink);outline-offset:2px}
.btn svg,button svg{width:16px;height:16px}
.btn.ghost,button.ghost{background:var(--soft);color:var(--txt);
  border:1px solid var(--line2);box-shadow:var(--hilite)}
.btn.ghost:hover,button.ghost:hover{background:var(--soft2);filter:none;
  box-shadow:var(--hilite),0 6px 18px rgba(0,0,0,.15)}
.btn.danger,button.danger{background:linear-gradient(180deg,#f28787,#eb6e6e 45%,#c85555);color:#2b0f0f;
  box-shadow:0 4px 16px rgba(235,110,110,.25),var(--hilite)}
button:disabled{opacity:.4;cursor:not-allowed;filter:none;transform:none}
.muted{color:var(--muted);font-size:13px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:8px}
.chip{background:var(--soft);border:1px solid var(--line);border-radius:9px;
  padding:5px 10px;font-size:12px;color:var(--sub);font-family:ui-monospace,monospace}
.danger-zone{border:1px solid rgba(235,110,110,.3);
  background:linear-gradient(180deg,var(--red-dim),transparent)}

/* ---- tables ---- */
table{width:100%;border-collapse:collapse}
th,td{text-align:left;padding:11px 12px;border-bottom:1px solid var(--line);font-size:13.5px;vertical-align:middle}
th{color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.07em}
tr:last-child td{border-bottom:0}
tbody tr,table tr{transition:background .12s}
table tr:hover td{background:var(--soft)}
table tr:first-child:hover th{background:transparent}
code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}
.back{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:13px;margin-bottom:14px;
  transition:color .15s}
.back svg{width:16px;height:16px}
.back:hover{color:var(--txt)}
.empty{color:var(--muted);text-align:center;padding:44px 10px}
.copy{cursor:pointer;background:var(--soft);border:1px solid var(--line);border-radius:9px;
  padding:5px 9px;font-size:11.5px;color:var(--sub);display:inline-flex;gap:6px;align-items:center;
  transition:color .15s,border-color .15s,background .15s}
.copy:hover{color:var(--txt);border-color:var(--line2);background:var(--soft2)}
.copy svg{width:13px;height:13px}
hr{border:0;border-top:1px solid var(--line);margin:16px 0}

/* ---- toast: glass ---- */
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(8px);
  background:var(--chrome2);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid var(--line2);color:var(--txt);padding:12px 18px;
  border-radius:14px;box-shadow:var(--hilite),var(--sh-lg);font-size:13.5px;opacity:0;
  transition:opacity .25s,transform .25s;z-index:60;display:flex;gap:9px;align-items:center}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast svg{width:16px;height:16px;color:var(--green)}

/* ---- tabs ---- */
.tabs{display:inline-flex;gap:4px;margin:24px 0 20px;padding:5px;max-width:100%;overflow-x:auto;
  background:var(--panel);border:1px solid var(--line);border-radius:15px;
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);box-shadow:var(--hilite)}
.tab{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:11px;white-space:nowrap;
  color:var(--muted);font-weight:600;font-size:13.5px;cursor:pointer;border:0;background:transparent;
  font-family:inherit;box-shadow:none;transition:background .15s,color .15s}
.tab:hover{color:var(--txt);transform:none;filter:none;box-shadow:none}
.tab.active{background:linear-gradient(180deg,var(--pink-dim),transparent 170%);color:var(--txt);
  box-shadow:var(--hilite)}
.tab.active svg{opacity:1;color:var(--pink)}
.tab svg{width:16px;height:16px;opacity:.85}
.tabpanel{display:none}
.tabpanel.active{display:block}
.syncbadge{display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:999px;
  font-size:12px;font-weight:600;background:var(--soft);color:var(--muted);white-space:nowrap}
.syncbadge .dot2{width:7px;height:7px;border-radius:50%;background:var(--muted);flex-shrink:0}
.syncbadge.fast{background:var(--green-dim);color:var(--green)}
.syncbadge.fast .dot2{background:var(--green);box-shadow:0 0 0 3px rgba(126,217,162,.18),0 0 10px rgba(126,217,162,.6);
  animation:pulse2 1.4s infinite}
@keyframes pulse2{0%,100%{opacity:1}50%{opacity:.35}}
@media(max-width:900px){.cols{grid-template-columns:1fr}}
@media(max-width:820px){
  .shell{flex-direction:column}
  .sidebar{width:auto;height:auto;position:static;flex-direction:row;align-items:center;gap:8px;
    border-right:0;border-bottom:1px solid var(--line);padding:12px 14px;overflow-x:auto}
  .brand{padding:0 6px;white-space:nowrap;flex:1}
  .brand small{display:none}
  .sidebar .foot{display:none}
  .nav{flex-direction:row;gap:4px}
  .nav a{white-space:nowrap;padding:9px 11px}
  .nav a span{display:none}
  .main{padding:20px 16px 50px}
}

/* ---- maps: no frame at all — terrain floats on the aurora and every edge
   dissolves like gas. Two crossed linear-gradient masks (intersected) fade
   all four sides; corners fade doubly, giving the soft gaseous falloff. ---- */
/* no entrance animation here: a retained transform would create a stacking
   context that isolates the map's blend mode from the page backdrop */
.map-shell{position:relative}
.map-shell>.leaflet-control-container{position:absolute;inset:0;z-index:900;pointer-events:none}

/* full-viewport map (fleet page): the map is a fixed layer under the floating
   UI; the blend keeps its ground invisible so routes glow across the whole
   page — even through the frosted sidebar */
.map-shell-fs{position:fixed;inset:0;z-index:0;pointer-events:none;
  /* soft aurora wash behind the map: the blend lets it glow through the
     transparent ground so the full-page map matches the inline maps' warmth
     instead of sitting on the vignette's near-black */
  background:radial-gradient(60% 62% at 58% 42%,rgba(240,144,188,.13),
    rgba(150,110,235,.06) 55%,transparent 88%)}
[data-theme=light] .map-shell-fs{
  background:radial-gradient(60% 62% at 58% 42%,rgba(240,144,188,.09),transparent 78%)}
.map-shell-fs>.mdm-map{pointer-events:auto;height:100%}
/* fullscreen keeps the gaseous dissolve, tuned to the viewport: the left fade
   begins past the sidebar; top/right/bottom melt into the screen edges */
.mdm-map.mapfs{
  -webkit-mask-image:linear-gradient(to right,transparent 205px,#000 26%,#000 88%,transparent 100%),
    linear-gradient(to bottom,transparent 0,#000 13%,#000 85%,transparent 100%);
  -webkit-mask-composite:source-in;
  mask-image:linear-gradient(to right,transparent 205px,#000 26%,#000 88%,transparent 100%),
    linear-gradient(to bottom,transparent 0,#000 13%,#000 85%,transparent 100%);
  mask-composite:intersect}
@media(max-width:820px){
  .mdm-map.mapfs{
    -webkit-mask-image:linear-gradient(to right,transparent,#000 10%,#000 90%,transparent),
      linear-gradient(to bottom,transparent 60px,#000 22%,#000 88%,transparent 100%);
    mask-image:linear-gradient(to right,transparent,#000 10%,#000 90%,transparent),
      linear-gradient(to bottom,transparent 60px,#000 22%,#000 88%,transparent 100%)}
}
.map-shell-fs .leaflet-top.leaflet-left{left:264px;top:108px}
.map-shell-fs .leaflet-top.leaflet-right{top:78px;right:14px}
.map-shell-fs .leaflet-bottom.leaflet-right{bottom:8px;right:10px}
.mapfs-over{position:relative;z-index:2}
.mapfs-panel{position:relative;z-index:2;margin-left:auto;width:min(370px,92vw)}
@media(max-width:820px){
  .map-shell-fs .leaflet-top.leaflet-left{left:14px;top:96px}
}
/* the mask sits on the map container (the panes are zero-size divs); the
   controls were re-parented into .map-shell so they escape the fade */
.mdm-map{background:transparent!important;border:0!important;outline:none;box-shadow:none!important;
  -webkit-mask-image:linear-gradient(to right,transparent,#000 16%,#000 84%,transparent),
    linear-gradient(to bottom,transparent,#000 16%,#000 84%,transparent);
  -webkit-mask-composite:source-in;
  mask-image:linear-gradient(to right,transparent,#000 16%,#000 84%,transparent),
    linear-gradient(to bottom,transparent,#000 16%,#000 84%,transparent);
  mask-composite:intersect}
/* blend the terrain into the app palette: stylized modes are pushed hard
   toward the plum/rose wallpaper (slightly translucent so the aurora glows
   through); realistic keeps its detail but is softened to sit in-theme */
/* neon: brightness→contrast slams the ground pure black while roads blow out
   bright, then sepia→hue-rotate→saturate dyes everything glowing rose.
   Light theme runs the identical stack and re-inverts to rose-ink-on-paper.
   The blend modes below then erase the ground entirely: screen makes black
   invisible (dark), multiply makes white invisible (light) — so only the
   routes render, painted straight onto the aurora. */
.tiles-aes-dark .leaflet-tile-pane{
  filter:grayscale(1) brightness(1.12) contrast(4) sepia(1) hue-rotate(-62deg) saturate(3) brightness(1.15)}
.tiles-aes-light .leaflet-tile-pane{
  filter:grayscale(1) brightness(1.12) contrast(4) sepia(1) hue-rotate(-62deg) saturate(3) brightness(1.1) invert(1) hue-rotate(180deg)}
.mdm-map.tiles-aes-dark{mix-blend-mode:screen}
.mdm-map.tiles-aes-light{mix-blend-mode:multiply}
/* under the blends the popup/pin sit on transparent ground — keep the popup
   solid enough to read */
.tiles-aes-dark .leaflet-popup-content-wrapper{background:rgba(38,22,32,.97)}
.tiles-real-dark .leaflet-tile-pane{
  filter:invert(1) hue-rotate(180deg) sepia(.18) hue-rotate(-18deg) brightness(.74) contrast(.94) saturate(.72) opacity(.96)}
.tiles-real-light .leaflet-tile-pane{filter:saturate(.85) contrast(.97) sepia(.08) opacity(.97)}
.mapmode-btn{background:var(--chrome2);color:var(--txt);border:1px solid var(--line2);
  border-radius:10px;padding:6px 12px;font-size:12px;font-weight:600;cursor:pointer;
  font-family:inherit;backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  box-shadow:var(--hilite),var(--sh-md)}
.mapmode-btn:hover{color:var(--pink);filter:none;transform:none;
  box-shadow:var(--hilite),var(--sh-md)}
.mdm-map .leaflet-control-zoom{border:0;box-shadow:var(--sh-md)}
.mdm-map .leaflet-control-zoom a{background:var(--chrome2);color:var(--txt);
  border:1px solid var(--line);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur)}
.mdm-map .leaflet-control-zoom a:hover{background:var(--chrome2);color:var(--pink)}
.mdm-map .leaflet-control-attribution{background:transparent;color:var(--muted);font-size:10px}
.mdm-map .leaflet-control-attribution a{color:var(--muted)}
.mdm-map .leaflet-popup-content-wrapper{background:var(--chrome2);color:var(--txt);
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid var(--line2);border-radius:12px;box-shadow:var(--sh-lg)}
.mdm-map .leaflet-popup-tip{background:var(--chrome2)}
.mdm-map .leaflet-popup-close-button{color:var(--muted)}
.mdm-map .leaflet-bar a{border-bottom-color:var(--line)}

/* --- fleet filter bar --- */
.filterbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:18px}
.filterbar input,.filterbar select{width:auto}
.fchips{display:flex;gap:6px;flex-wrap:wrap}
.fchip{display:inline-flex;align-items:center;gap:7px;padding:7px 13px;border-radius:999px;
  background:var(--soft);border:1px solid var(--line);color:var(--sub);
  font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit;box-shadow:none;
  transition:all .15s}
.fchip:hover{color:var(--txt);border-color:var(--line2);transform:none;filter:none;box-shadow:none}
.fchip.active{background:linear-gradient(180deg,var(--pink-dim),transparent 190%);
  color:var(--txt);border-color:rgba(240,144,188,.4);box-shadow:0 4px 14px rgba(240,144,188,.14)}
.dcard.fhide{display:none}

/* --- bulk select mode --- */
.dcard.selectable{cursor:pointer;position:relative}
.dcard.selectable::after{content:'';position:absolute;top:12px;right:12px;width:18px;height:18px;
  border-radius:6px;border:2px solid var(--line2);background:var(--input-bg)}
.dcard.selected{border-color:var(--pink);box-shadow:0 0 0 2px var(--pink-dim),0 8px 30px rgba(240,144,188,.14)}
.dcard.selected::after{background:var(--pink);border-color:var(--pink);
  content:'✓';color:#fff;font-size:13px;font-weight:800;display:flex;
  align-items:center;justify-content:center}
.bulkbar{position:fixed;bottom:18px;left:50%;transform:translateX(-50%) translateY(90px);
  display:flex;gap:9px;align-items:center;padding:12px 18px;border-radius:18px;
  background:var(--chrome2);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid var(--line2);box-shadow:var(--hilite),var(--sh-lg);
  z-index:50;transition:transform .25s;max-width:95vw;overflow-x:auto}
.bulkbar.show{transform:translateX(-50%) translateY(0)}
