:root{--bg:#f3f5f2;--surface:#fff;--surface-2:#f7f8f6;--ink:#14201c;--muted:#718079;--line:#dfe6e1;--green:#1d9369;--green-dark:#0d6348;--green-soft:#e0f3ea;--teal:#2aa3a0;--amber:#e1a12f;--blue:#4879d8;--red:#d4574f;--shadow:0 18px 48px rgba(29,49,41,.12)}
*{box-sizing:border-box}html{color-scheme:light}body{margin:0;background:var(--bg);color:var(--ink);font-family:"DM Sans",sans-serif;-webkit-font-smoothing:antialiased}.shell{min-height:100vh;display:grid;grid-template-columns:88px 1fr}.sidebar{position:fixed;inset:0 auto 0 0;width:88px;background:#08110f;color:#fff;display:flex;flex-direction:column;align-items:center;padding:26px 14px 20px;z-index:30}.brand{color:#fff;text-decoration:none;font:800 15.6px/1 "Manrope";letter-spacing:.12em;text-align:center}.brand-mark{width:42px;height:38px;display:block;margin:0 auto 10px;position:relative}.brand-mark:before,.brand-mark:after,.brand-mark span{content:"";position:absolute;inset:auto;background:#46c897;transform:skewX(-28deg);border-radius:2px}.brand-mark:before{width:10px;height:33px;left:6px;top:1px}.brand-mark:after{width:10px;height:27px;right:8px;top:7px}.brand-mark span{width:10px;height:22px;left:17px;top:9px;background:#d8fff0}.nav{width:100%;margin-top:56px}.nav-item{width:100%;border:0;background:#163229;color:#8fb0a3;border-radius:12px;padding:12px 4px;font:600 13.2px "DM Sans";cursor:pointer}.nav-item.active{color:#72e1b5;background:#15372c}.nav-item svg{width:21px;display:block;margin:0 auto 6px;fill:currentColor}.sidebar-foot{margin-top:auto;display:grid;gap:16px;justify-items:center}.mqtt-indicator{writing-mode:vertical-rl;transform:rotate(180deg);font-size:10.8px;letter-spacing:.08em;text-transform:uppercase;color:#789087;display:flex;gap:7px;align-items:center}.mqtt-indicator span{width:6px;height:6px;border-radius:50%;background:var(--amber)}.mqtt-indicator.online span{background:#49d89f;box-shadow:0 0 0 4px rgba(73,216,159,.12)}.mqtt-indicator.error span{background:var(--red)}.icon-button,.refresh-button,.close-button{display:grid;place-items:center;border:1px solid var(--line);background:var(--surface);color:var(--muted);cursor:pointer}.icon-button{width:38px;height:38px;border:1px solid #243b33;border-radius:10px;background:#10201b;color:#b6c7c0}.icon-button svg,.refresh-button svg,.close-button svg{width:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}main{grid-column:2;min-width:0}.topbar{height:112px;background:rgba(255,255,255,.92);border-bottom:1px solid var(--line);padding:0 44px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:20;backdrop-filter:blur(12px)}.eyebrow{margin:0 0 7px;color:var(--green);font:700 12px "Manrope";letter-spacing:.13em}.topbar h1{margin:0;font:700 30px "Manrope";letter-spacing:-.035em}.topbar-actions{display:flex;align-items:center;gap:16px}.last-sync{display:flex;align-items:center;gap:10px;text-align:right;font-size:12px;line-height:1.35;color:var(--muted)}.last-sync strong{font-size:13.2px;color:var(--ink);font-weight:600}.pulse{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 0 5px var(--green-soft)}.refresh-button{width:40px;height:40px;border-radius:10px}.refresh-button.loading svg{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.content{padding:34px 44px 64px;max-width:1500px;margin:0 auto}.summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:40px}.summary article{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px;display:flex;align-items:center;gap:14px}.summary-icon{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;background:var(--green-soft);color:var(--green)}.summary-icon.teal{background:#e1f3f2;color:var(--teal)}.summary-icon.amber{background:#fff1da;color:var(--amber)}.summary-icon.blue{background:#e8eefc;color:var(--blue)}.summary-icon svg{width:21px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.summary article div{display:flex;flex-direction:column}.summary strong{font:700 27.6px "Manrope"}.summary article div span{font-size:13.2px;color:var(--muted)}.section-heading{display:flex;align-items:end;justify-content:space-between;margin-bottom:18px}.section-heading h2{font:700 22.8px "Manrope";margin:0 0 4px}.section-heading p{font-size:13.2px;color:var(--muted);margin:0}.search{width:min(310px,42%);height:40px;background:var(--surface);border:1px solid var(--line);border-radius:10px;display:flex;align-items:center;padding:0 12px;gap:9px}.search svg{width:17px;fill:none;stroke:var(--muted);stroke-width:1.7}.search input{border:0;outline:0;background:transparent;color:var(--ink);font:500 13.2px "DM Sans";width:100%}.bike-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.bike-card{position:relative;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:19px;min-height:224px;color:var(--ink);cursor:pointer;overflow:hidden;transition:transform .2s,border-color .2s,box-shadow .2s}.bike-card:hover{transform:translateY(-3px);border-color:#a9cabe;box-shadow:0 14px 34px rgba(29,49,41,.09)}.card-top{display:flex;align-items:flex-start;justify-content:space-between}.card-index{font:700 12px "Manrope";color:#a4afa9;letter-spacing:.1em}.status-pill{display:inline-flex;align-items:center;gap:7px;border-radius:999px;background:#f0f2f0;color:#6e7974;padding:6px 9px;font:700 10.8px "Manrope";letter-spacing:.05em;text-transform:uppercase}.status-pill:before{content:"";width:6px;height:6px;border-radius:50%;background:#9ba49f}.status-pill.connected{background:var(--green-soft);color:var(--green-dark)}.status-pill.connected:before{background:var(--green)}.bike-visual{height:78px;display:grid;place-items:center;color:#28473c}.bike-visual svg{width:150px;height:70px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.bike-card h3{margin:5px 0 2px;font:700 20.4px "Manrope"}.bike-card .customer{margin:0;color:var(--muted);font-size:13.2px}.card-data{border-top:1px solid var(--line);margin-top:14px;padding-top:13px;display:flex;justify-content:space-between}.card-data div{display:flex;flex-direction:column;gap:3px}.card-data div:last-child{text-align:right}.card-data span{color:var(--muted);font-size:10.8px;text-transform:uppercase;letter-spacing:.07em}.card-data strong{font:700 14.4px "Manrope"}.state-riding{color:var(--green)}.state-charging{color:var(--blue)}.empty-grid{grid-column:1/-1;text-align:center;padding:60px;color:var(--muted);background:var(--surface);border:1px dashed var(--line);border-radius:16px}.backdrop{position:fixed;inset:0;background:rgba(4,12,9,.42);opacity:0;visibility:hidden;transition:.25s;z-index:40;backdrop-filter:blur(2px)}.backdrop.open{opacity:1;visibility:visible}.detail-panel{position:fixed;top:0;right:0;bottom:0;width:min(520px,100%);background:var(--surface);z-index:50;box-shadow:-24px 0 60px rgba(0,0,0,.2);transform:translateX(102%);transition:transform .35s cubic-bezier(.2,.8,.2,1);display:flex;flex-direction:column}.detail-panel.open{transform:translateX(0)}.detail-head{padding:26px 28px 20px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.detail-head h2{font:700 26.4px "Manrope";margin:0}.close-button{width:38px;height:38px;border-radius:10px}.detail-scroll{overflow:auto;padding:23px 28px 40px}.detail-status-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.state-label{font:700 13.2px "Manrope";color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.map-card{height:265px;border:1px solid var(--line);border-radius:14px;overflow:hidden;position:relative;background:#e9ede8}.map-card #map{position:absolute;inset:0 0 45px;z-index:1}.map-empty{position:absolute;inset:0 0 45px;z-index:2;display:flex;align-items:center;justify-content:center;flex-direction:column;background:linear-gradient(145deg,#e8ede9,#f5f7f4);color:var(--muted)}.map-empty.hidden{display:none}.map-empty svg{width:28px;fill:none;stroke:var(--green);stroke-width:1.5;margin-bottom:8px}.map-empty strong{font:700 14.4px "Manrope";color:var(--ink)}.map-empty span{font-size:12px;margin-top:3px}.map-caption{position:absolute;inset:auto 0 0;height:45px;background:var(--surface);z-index:3;padding:8px 12px;display:flex;align-items:center;justify-content:space-between}.map-caption span{font-size:12px;color:var(--muted)}.map-caption strong{font:600 12px "Manrope"}.detail-section{padding:23px 0;border-bottom:1px solid var(--line)}.detail-section h3{font:700 13.2px "Manrope";text-transform:uppercase;letter-spacing:.09em;margin:0 0 15px;color:#8b9791}.detail-list{margin:0}.detail-list div{display:flex;align-items:center;justify-content:space-between;padding:9px 0}.detail-list dt{font-size:13.2px;color:var(--muted)}.detail-list dd{font:600 14.4px "Manrope";margin:0}.detail-list.compact{margin-top:10px}.metric-pair{display:grid;grid-template-columns:1fr 1fr;gap:10px}.metric-pair article{background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:13px}.metric-pair span{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}.metric-pair strong{font:700 24px "Manrope"}.meter{height:4px;border-radius:4px;background:#dfe6e1;margin-top:11px;overflow:hidden}.meter i{height:100%;display:block;width:0;background:var(--green);border-radius:4px;transition:width .3s}.meter.blue i{background:var(--blue)}.last-update{border-bottom:0}.last-update>div{display:flex;align-items:center;gap:10px;font-size:13.2px;color:var(--muted)}.last-update svg{width:18px;fill:none;stroke:var(--green);stroke-width:1.7}.toast{position:fixed;left:50%;bottom:24px;z-index:80;transform:translate(-50%,20px);opacity:0;background:#14201c;color:#fff;border-radius:10px;padding:11px 15px;font-size:13.2px;pointer-events:none;transition:.2s}.toast.show{opacity:1;transform:translate(-50%,0)}
html[data-theme=dark]{--bg:#0b110f;--surface:#111a17;--surface-2:#16211d;--ink:#eaf1ed;--muted:#85968e;--line:#25352f;--green-soft:#17372c;color-scheme:dark}.leaflet-control-attribution{font-size:9.6px!important}
@media(max-width:980px){.summary{grid-template-columns:1fr 1fr}.bike-grid{grid-template-columns:1fr 1fr}.content{padding:28px}.topbar{padding:0 28px}}
@media(max-width:680px){.shell{display:block}.sidebar{position:fixed;inset:auto 0 0;width:auto;height:68px;flex-direction:row;padding:8px 18px;justify-content:space-between}.brand{display:flex;align-items:center;gap:8px}.brand-mark{width:31px;height:27px;margin:0}.brand-mark:before{height:25px}.brand-mark:after{height:20px}.brand-mark span{height:17px;top:7px}.nav{width:auto;margin:0}.nav-item{display:flex;align-items:center;gap:7px;padding:9px 14px}.nav-item svg{margin:0}.sidebar-foot{margin:0;display:flex}.mqtt-indicator{display:none}.icon-button{width:36px;height:36px}main{padding-bottom:68px}.topbar{height:92px;padding:0 18px}.last-sync{display:none}.content{padding:22px 16px 48px}.summary{grid-template-columns:1fr 1fr;gap:9px;margin-bottom:30px}.summary article{padding:13px;gap:10px}.summary-icon{width:34px;height:34px}.summary strong{font-size:22.8px}.section-heading{display:block}.search{width:100%;margin-top:15px}.bike-grid{grid-template-columns:1fr}.detail-head,.detail-scroll{padding-left:20px;padding-right:20px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}

/* Wide bike detail card: map left, complete MQTT information right. */
.detail-panel{top:50%;right:28px;bottom:auto;width:min(1080px,calc(100vw - 144px));max-height:calc(100vh - 56px);border:1px solid var(--line);border-radius:20px;overflow:hidden;transform:translate(110%, -50%)}
.detail-panel.open{transform:translate(0,-50%)}
.detail-head{flex:0 0 auto;padding:22px 26px}
.detail-scroll.detail-layout{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(360px,.82fr);gap:24px;padding:24px;overflow:auto}
.detail-map{height:auto;min-height:510px;position:sticky;top:0}
.detail-information{min-width:0}
.detail-information .detail-status-row{margin:0 0 8px;padding:0 0 20px;border-bottom:1px solid var(--line);gap:14px}
.detail-status-row>div{display:flex;flex-direction:column;align-items:flex-start;gap:7px}
.detail-status-row>div:last-child{align-items:flex-end}
.detail-label{font-size:10.8px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}
.detail-information .detail-section{padding:20px 0}
.detail-information .last-update{padding-bottom:4px}

@media(max-width:880px){.detail-panel{inset:16px 16px auto;width:auto;max-height:calc(100vh - 32px);transform:translateY(110vh)}.detail-panel.open{transform:none}.detail-scroll.detail-layout{grid-template-columns:1fr}.detail-map{height:330px;min-height:330px;position:relative}}
@media(max-width:520px){.detail-panel{inset:0;width:100%;max-height:100vh;height:100%;border:0;border-radius:0}.detail-scroll.detail-layout{padding:18px;gap:10px}.detail-map{height:280px;min-height:280px}.detail-information .detail-status-row{margin-top:8px}}

/* Square-map and ruled information layout. */
.detail-scroll.detail-layout{grid-template-columns:minmax(360px,1fr) minmax(360px,1fr);align-items:start}
.detail-map{width:100%;height:auto;min-height:0;aspect-ratio:1/1}
.detail-information{align-self:stretch;display:flex;flex-direction:column}
.information-lines{margin:0;display:flex;flex-direction:column;flex:1}
.information-lines>div{min-height:58px;display:grid;grid-template-columns:minmax(130px,.8fr) minmax(150px,1.2fr);align-items:center;gap:20px;border-bottom:1px solid var(--line)}
.information-lines>div:last-child{border-bottom:0}
.information-lines dt{color:var(--muted);font-size:12px;letter-spacing:.035em}
.information-lines dt small{display:inline-block;margin-left:5px;color:var(--green);font:700 9.6px "Manrope";letter-spacing:.08em}
.information-lines dd{margin:0;text-align:right;font:600 14.4px "Manrope";overflow-wrap:anywhere}
.information-lines dd strong{font:700 19.2px "Manrope"}
.line-meter{display:block;width:100%;height:3px;margin-top:7px;border-radius:4px;background:#dfe6e1;overflow:hidden}
.line-meter i{display:block;width:0;height:100%;border-radius:4px;background:var(--green);transition:width .3s}
.line-meter.blue i{background:var(--blue)}
.information-lines .update-line dd{font-size:12px;line-height:1.45;color:var(--muted)}

@media(max-width:880px){.detail-scroll.detail-layout{grid-template-columns:1fr}.detail-map{width:min(100%,440px);height:auto;min-height:0;margin-inline:auto}.information-lines>div{grid-template-columns:minmax(120px,.8fr) minmax(140px,1.2fr)}}
@media(max-width:520px){.detail-map{height:auto;min-height:0}.information-lines>div{min-height:54px;gap:12px}}

/* Fleet overview cards reuse the bike-detail composition at compact scale. */
.content{max-width:1800px}.bike-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.overview-card{display:block;padding:18px;background:var(--surface);border:1px solid var(--line);border-radius:18px;color:var(--ink);text-decoration:none;transition:transform .2s,border-color .2s,box-shadow .2s}.overview-card:hover{transform:translateY(-3px);border-color:#9fcabb;box-shadow:0 16px 38px rgba(29,49,41,.1)}.overview-card-head{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:14px}.overview-card-head h3{margin:4px 0 2px;font:700 21.6px "Manrope"}.overview-card-head p{margin:0;color:var(--muted);font-size:12px}.overview-card-body{display:grid;grid-template-columns:minmax(118px,.78fr) minmax(175px,1.22fr);gap:14px}.overview-map{width:100%;aspect-ratio:1;border:1px solid var(--line);border-radius:12px;overflow:hidden;position:relative;background:var(--surface-2);z-index:1}.overview-map-empty{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;color:var(--muted);font-size:10.8px}.overview-map-empty svg{width:25px;fill:none;stroke:var(--green);stroke-width:1.5}.overview-lines{margin:0;min-width:0}.overview-lines>div{min-height:27px;display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid var(--line)}.overview-lines>div:last-child{border-bottom:0}.overview-lines dt{font-size:9.6px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.overview-lines dd{margin:0;text-align:right;font:600 10.8px "Manrope";overflow-wrap:anywhere}.overview-lines .wide dd{font-size:9.6px;color:var(--muted)}
.bike-page{min-height:100vh;background:var(--bg)}.bike-page-main{width:min(1720px,calc(100% - 40px));margin:0 auto;padding:24px 0 36px}.bike-page-head{display:grid;grid-template-columns:1fr auto;align-items:end;gap:18px;margin-bottom:18px}.bike-page-head .back-link{grid-column:1/-1;color:var(--green);font:700 13.2px "Manrope";text-decoration:none;text-transform:uppercase;letter-spacing:.08em}.bike-page-head h1{margin:0;font:700 40.8px "Manrope"}.bike-page-head>.status-pill{font-size:13.2px;padding:8px 12px}.zoomed-card{display:grid;grid-template-columns:minmax(560px,1.18fr) minmax(460px,.82fr);align-items:start;gap:36px;min-height:calc(100vh - 140px);padding:30px;background:var(--surface);border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow)}.zoomed-card .detail-map{position:relative;width:min(100%,780px);justify-self:center}.zoomed-card .detail-status-row{margin:0;padding:4px 0 24px;border-bottom:1px solid var(--line)}.zoomed-card .detail-label{font-size:12px}.zoomed-card .state-label,.zoomed-card #connectionText{font:700 16.8px "Manrope"}.zoomed-card .information-lines>div{min-height:76px;grid-template-columns:minmax(170px,.8fr) minmax(190px,1.2fr)}.zoomed-card .information-lines dt{font-size:14.4px}.zoomed-card .information-lines dt small{font-size:10.8px}.zoomed-card .information-lines dd{font-size:16.8px}.zoomed-card .information-lines dd strong{font-size:28.8px}.zoomed-card .line-meter{height:5px;margin-top:10px}.zoomed-card .map-caption{height:54px;padding:10px 15px}.zoomed-card .map-card #map,.zoomed-card .map-empty{inset-bottom:54px}.zoomed-card .map-caption span,.zoomed-card .map-caption strong{font-size:13.2px}
@media(max-width:1280px){.bike-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.overview-card-body{grid-template-columns:minmax(150px,.72fr) minmax(230px,1.28fr)}}
@media(max-width:820px){.bike-grid{grid-template-columns:1fr}.overview-card-body{grid-template-columns:minmax(180px,.6fr) minmax(300px,1.4fr)}}
@media(max-width:880px){.zoomed-card{grid-template-columns:1fr}.bike-page-main{width:min(680px,calc(100% - 32px))}}
@media(max-width:600px){.overview-card-body{grid-template-columns:1fr}.overview-map{width:min(100%,280px);margin:auto}.bike-page-main{width:100%;padding:20px 14px 36px}.zoomed-card{padding:16px;gap:18px;border-radius:16px}.bike-page-head{padding:0 4px}}
.zoomed-card .map-card #map,.zoomed-card .map-empty{bottom:54px}

/* Full-viewport fleet wall: no navigation rail or top header. */
.fleet-main{width:100%;min-height:100vh}.fleet-main .content{width:100%;height:100vh;max-width:none;margin:0;padding:20px;display:flex;flex-direction:column;overflow:hidden}.fleet-main .section-heading{flex:0 0 auto;margin-bottom:14px}.fleet-main .section-heading h2{font-size:28.8px}.fleet-main .bike-grid{flex:1;min-height:0;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));gap:16px}.fleet-main .overview-card{height:100%;min-height:0;padding:16px;overflow:hidden}.fleet-main .overview-card-head{height:50px;margin-bottom:10px}.fleet-main .overview-card-head h3{font-size:24px}.fleet-main .overview-card-body{height:calc(100% - 60px);min-height:0;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:16px}.fleet-main .overview-map{width:auto;height:100%;max-width:100%;aspect-ratio:1;justify-self:start}.fleet-main .overview-lines{height:100%;display:grid;grid-template-rows:repeat(9,minmax(0,1fr))}.fleet-main .overview-lines>div{min-height:0}.fleet-main .overview-lines dt{font-size:10.8px}.fleet-main .overview-lines dd{font-size:12px}
@media(max-width:1280px){.fleet-main .content{height:auto;min-height:100vh;overflow:visible}.fleet-main .bike-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none}.fleet-main .overview-card{min-height:360px}.fleet-main .overview-map{width:100%;height:auto}}
@media(max-width:820px){.fleet-main .content{padding:16px}.fleet-main .bike-grid{grid-template-columns:1fr}.fleet-main .overview-card-body{grid-template-columns:minmax(160px,.7fr) minmax(220px,1.3fr)}}
@media(max-width:600px){.fleet-main .overview-card-body{height:auto;grid-template-columns:1fr}.fleet-main .overview-map{width:min(100%,300px)}.fleet-main .overview-lines{display:block}.fleet-main .overview-lines>div{min-height:32px}}

/* Responsive fleet-card sizing and overlap prevention. */
.fleet-main .overview-card{display:grid;grid-template-rows:auto minmax(0,1fr)}
.fleet-main .overview-card-head{height:auto;min-height:72px;margin:0 0 14px;position:relative;z-index:3}
.fleet-main .overview-card-head h3{font-size:clamp(24px,1.26vw,36px);line-height:1.1;margin-top:7px}
.fleet-main .overview-card-head p{font-size:clamp(13.2px,0.696vw,18px);line-height:1.35;margin-top:5px}
.fleet-main .overview-card-head .card-index{font-size:clamp(12px,0.6vw,16.8px)}
.fleet-main .status-pill{flex:0 0 auto;font-size:clamp(10.8px,0.624vw,15.6px);padding:clamp(6px,.45vw,10px) clamp(9px,.7vw,15px)}
.fleet-main .overview-card-body{height:auto;min-height:0;align-items:start;overflow:hidden}
.fleet-main .overview-map{width:100%;height:auto;max-width:100%;aspect-ratio:1/1;align-self:start;justify-self:start;position:relative;z-index:1}
.fleet-main .overview-lines{min-width:0;overflow:hidden}
.fleet-main .overview-lines>div{padding:0 clamp(2px,.2vw,6px);gap:12px}
.fleet-main .overview-lines dt{flex:0 0 auto;font-size:clamp(10.8px,0.576vw,15.6px);line-height:1.2}
.fleet-main .overview-lines dd{min-width:0;font-size:clamp(12px,0.66vw,18px);line-height:1.25;white-space:normal;overflow-wrap:anywhere}
.fleet-main .overview-lines .wide dd{font-size:clamp(10.8px,0.576vw,15.6px)}

@media(max-width:1799px){.fleet-main .content{height:auto;min-height:100vh;overflow:visible}.fleet-main .bike-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none}.fleet-main .overview-card{min-height:430px}.fleet-main .overview-card-body{grid-template-columns:minmax(180px,.72fr) minmax(260px,1.28fr)}}
@media(max-width:1050px){.fleet-main .bike-grid{grid-template-columns:1fr}.fleet-main .overview-card{min-height:420px}.fleet-main .overview-card-body{grid-template-columns:minmax(220px,.7fr) minmax(300px,1.3fr)}}
@media(max-width:680px){.fleet-main .section-heading{align-items:stretch}.fleet-main .section-heading h2{font-size:26.4px}.fleet-main .overview-card{min-height:0;padding:15px}.fleet-main .overview-card-head{min-height:68px}.fleet-main .overview-card-body{height:auto;grid-template-columns:1fr;overflow:visible}.fleet-main .overview-map{width:min(100%,360px);justify-self:center;margin-bottom:14px}.fleet-main .overview-lines{display:block}.fleet-main .overview-lines>div{min-height:48px}.fleet-main .overview-lines dt{font-size:13.2px}.fleet-main .overview-lines dd,.fleet-main .overview-lines .wide dd{font-size:14.4px}}

/* Final responsive grid: desktop 3x2, tablet 2 columns, mobile 1 column. */
@media(min-width:1200px){.fleet-main .content{height:100vh;min-height:100vh;overflow:hidden}.fleet-main .bike-grid{grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr))}.fleet-main .overview-card{min-height:0}.fleet-main .overview-card-body{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr)}}
@media(min-width:768px) and (max-width:1199px){.fleet-main .content{height:auto;overflow:visible}.fleet-main .bike-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none}.fleet-main .overview-card-body{grid-template-columns:minmax(150px,.72fr) minmax(220px,1.28fr)}}
@media(max-width:767px){.fleet-main .bike-grid{grid-template-columns:1fr;grid-template-rows:none}}

@media(min-width:768px) and (max-width:1199px){.fleet-main .content{height:auto;min-height:100vh;overflow:visible}.fleet-main .bike-grid{grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(2,auto)}.fleet-main .overview-card{min-height:0}.fleet-main .overview-card-body{height:auto;grid-template-columns:1fr;overflow:visible}.fleet-main .overview-map{width:100%;height:auto;justify-self:center;margin-bottom:14px}.fleet-main .overview-lines{display:block;height:auto}.fleet-main .overview-lines>div{min-height:42px}.fleet-main .overview-lines dt{font-size:12px}.fleet-main .overview-lines dd,.fleet-main .overview-lines .wide dd{font-size:13.2px}}

/* Keep the complete 3x2 fleet dashboard inside one tablet/desktop viewport. */
@media(min-width:768px){body:has(.fleet-main){height:100vh;overflow:hidden}.fleet-main{height:100vh;min-height:0}.fleet-main .content{height:100vh;min-height:0;overflow:hidden}.fleet-main .bike-grid{grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));min-height:0}.fleet-main .overview-card{height:100%;min-height:0}.fleet-main .overview-card-body{height:auto;min-height:0;grid-template-columns:minmax(0,.78fr) minmax(0,1.22fr);overflow:hidden}.fleet-main .overview-map{width:100%;height:auto;aspect-ratio:1/1;justify-self:start;margin:0}.fleet-main .overview-lines{display:grid;height:100%;grid-template-rows:repeat(9,minmax(0,1fr));overflow:hidden}.fleet-main .overview-lines>div{min-height:0}}
@media(min-width:768px) and (max-width:1199px){.fleet-main .content{padding:12px}.fleet-main .section-heading{margin-bottom:9px}.fleet-main .section-heading h2{font-size:22.8px}.fleet-main .section-heading p{font-size:10.8px}.fleet-main .search{height:34px}.fleet-main .bike-grid{gap:10px}.fleet-main .overview-card{padding:10px;border-radius:13px}.fleet-main .overview-card-head{min-height:52px;margin-bottom:7px}.fleet-main .overview-card-head h3{font-size:19.2px;margin-top:3px}.fleet-main .overview-card-head p{font-size:10.8px;margin-top:2px}.fleet-main .status-pill{font-size:9.6px;padding:5px 7px}.fleet-main .overview-card-body{grid-template-columns:minmax(72px,.68fr) minmax(120px,1.32fr);gap:8px}.fleet-main .overview-lines>div{padding:0;gap:5px}.fleet-main .overview-lines dt{font-size:8.4px}.fleet-main .overview-lines dd,.fleet-main .overview-lines .wide dd{font-size:9.6px}}
.overview-card-head p span{font-weight:700;color:var(--green)}.customer-edit-line dd{width:min(100%,330px)}.customer-form{display:flex;gap:8px}.customer-form input{min-width:0;flex:1;border:1px solid var(--line);border-radius:8px;background:var(--surface-2);color:var(--ink);padding:9px 10px;font:600 14.4px "DM Sans"}.customer-form input:focus{outline:2px solid var(--green-soft);border-color:var(--green)}.customer-form button{border:0;border-radius:8px;background:var(--green);color:#fff;padding:9px 14px;font:700 12px "Manrope";cursor:pointer}.customer-form button:disabled{opacity:.55;cursor:wait}

/* Fit the complete bike page inside one tablet/desktop viewport. */
@media(min-width:768px){body.bike-page{height:100vh;overflow:hidden}.bike-page-main{height:100vh;width:min(1720px,calc(100% - 28px));padding:14px 0 18px;display:flex;flex-direction:column}.bike-page-head{flex:0 0 auto;margin-bottom:10px;row-gap:5px}.bike-page-head .back-link{font-size:10.8px}.bike-page-head h1{font-size:clamp(28.8px,2.4vw,38.4px)}.zoomed-card{flex:1;min-height:0;height:auto;grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr);align-items:stretch;gap:24px;padding:20px;overflow:hidden}.zoomed-card .detail-map{width:auto;height:100%;max-width:100%;aspect-ratio:1/1;align-self:center}.zoomed-card .detail-information{height:100%;min-height:0;overflow:hidden}.zoomed-card .detail-status-row{height:58px;padding:0 0 12px}.zoomed-card .information-lines{height:calc(100% - 58px);display:grid;grid-template-rows:repeat(7,minmax(0,1fr));overflow:hidden}.zoomed-card .information-lines>div{min-height:0;padding:0}.zoomed-card .information-lines dt{font-size:clamp(10.8px,0.864vw,14.4px)}.zoomed-card .information-lines dd{font-size:clamp(12px,0.984vw,16.8px)}.zoomed-card .information-lines dd strong{font-size:clamp(20.4px,1.68vw,27.6px)}.zoomed-card .customer-form input{padding:7px 9px}.zoomed-card .customer-form button{padding:7px 11px}}
@media(max-width:767px){body.bike-page{height:auto;overflow:auto}.bike-page-main{height:auto}.zoomed-card{height:auto;overflow:visible}}

/* Map timestamp caption and a uniformly positioned theme switch. */
.overview-map-column{min-width:0;min-height:0;align-self:start}.overview-map-column .overview-map{border-radius:12px 12px 0 0}.overview-map-update{min-height:68px;margin-top:-1px;padding:12px 0;display:grid;grid-template-columns:1fr 1fr;background:#0b1713;border:1px solid #75bda3;border-top-color:#243b33;border-radius:0 0 12px 12px;color:#f4f7f5}.overview-map-update>div{min-width:0;padding:0 10px;display:flex;flex-direction:column;justify-content:center;gap:5px}.overview-map-update>div+div{border-left:1px solid #2b4139}.overview-map-update span{color:#8e9e98;font-size:clamp(8.4px,0.504vw,12px);text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}.overview-map-update strong{color:#f4f7f5;font:600 clamp(9.6px,0.636vw,15.6px)/1.25 "Manrope";overflow-wrap:anywhere}.fleet-main .overview-lines{grid-template-rows:repeat(7,minmax(0,1fr))}
.detail-map #map,.detail-map .map-empty{bottom:116px}.detail-map .map-caption{height:116px}.map-update-bar{display:grid;grid-template-columns:1fr 1fr;padding:20px 34px;background:#0b1713;border-top:1px solid #243b33;color:#f4f7f5}.map-update-bar>div{min-width:0;display:flex;flex-direction:column;justify-content:center;gap:8px}.map-update-bar>div+div{padding-left:22px;border-left:1px solid #2b4139}.map-update-bar span{color:#8e9e98;font:500 clamp(15.6px,1.26vw,24px) "DM Sans";letter-spacing:.08em;text-transform:uppercase}.map-update-bar strong{color:#f4f7f5;font:600 clamp(18px,1.704vw,31.2px)/1.2 "DM Sans";white-space:nowrap}.map-coordinate-badge{position:absolute;top:14px;right:14px;z-index:4;padding:7px 10px;border-radius:8px;background:rgba(11,23,19,.86);color:#f4f7f5;font:600 12px "Manrope";backdrop-filter:blur(5px)}
@media(max-width:767px){.detail-map #map,.detail-map .map-empty{bottom:92px}.detail-map .map-caption{height:92px}.map-update-bar{padding:14px 16px}.map-update-bar>div+div{padding-left:14px}.map-update-bar span{font-size:12px}.map-update-bar strong{font-size:14.4px;white-space:normal}}
.floating-theme-toggle{position:fixed;right:18px;bottom:18px;z-index:100;display:flex;align-items:center;gap:8px;min-height:40px;padding:8px 12px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);box-shadow:0 8px 24px rgba(15,31,25,.16);font:700 12px "Manrope";cursor:pointer}.floating-theme-toggle svg{width:17px;height:17px;fill:none;stroke:var(--green);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.floating-theme-toggle:hover{border-color:var(--green)}html[data-theme=dark] .floating-theme-toggle{background:#17231f}
@media(max-width:767px){.floating-theme-toggle{right:12px;bottom:12px}}
html[data-theme=dark] .status-pill.connected{background:#183f32;color:#86e9c0;border:1px solid #2d6b55}html[data-theme=dark] .status-pill.connected:before{background:#58dda7;box-shadow:0 0 0 4px rgba(88,221,167,.14)}
.floating-theme-toggle{top:18px;bottom:auto}.fleet-main .section-heading,.bike-page-head{padding-right:132px}@media(max-width:767px){.floating-theme-toggle{top:12px;bottom:auto}.fleet-main .section-heading{padding-right:112px}.bike-page-head{padding-right:108px}}
.floating-theme-toggle{top:20px;right:20px;height:40px;min-height:40px;padding:5px 10px;gap:7px}.theme-choice{font:700 10.8px "Manrope";letter-spacing:.03em;color:var(--muted);transition:color .2s,opacity .2s}.theme-switch-track{position:relative;width:36px;height:20px;flex:0 0 36px;border-radius:999px;background:#d5ddd8;border:1px solid #bac8c0;transition:background-color .2s,border-color .2s}.theme-switch-track i{position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.3);transition:transform .24s}.theme-light{color:var(--ink)}html[data-theme=dark] .theme-switch-track{background:#2c765d;border-color:#459879}html[data-theme=dark] .theme-switch-track i{transform:translateX(16px)}html[data-theme=dark] .theme-light{color:var(--muted)}html[data-theme=dark] .theme-dark{color:#8ce8c2}.fleet-main .section-heading,.bike-page-head{padding-right:150px}@media(max-width:767px){.floating-theme-toggle{top:12px;right:12px}.fleet-main .section-heading,.bike-page-head{padding-right:138px}}
@media(min-width:768px) and (max-width:1199px){.floating-theme-toggle{top:12px;right:12px}}
.section-controls{display:flex;align-items:center;justify-content:flex-end;gap:10px}.section-controls .search{flex:0 1 310px;width:310px}.section-controls .floating-theme-toggle{position:static;inset:auto;flex:0 0 auto;margin:0;box-shadow:none}.fleet-main .section-heading{padding-right:0}@media(max-width:680px){.section-controls{margin-top:15px;justify-content:stretch}.section-controls .search{width:auto;flex:1;margin-top:0}.section-controls .floating-theme-toggle{right:auto;top:auto}.fleet-main .section-heading{padding-right:0}}

/* Development-only full MQTT field table. */
.mqtt-table-button{align-self:end;border:1px solid var(--green);border-radius:10px;background:var(--green);color:#fff;padding:10px 14px;font:700 12px "Manrope";letter-spacing:.03em;cursor:pointer}.mqtt-table-button:hover{filter:brightness(.95)}
.mqtt-debug-modal{position:fixed;inset:0;z-index:220;display:grid;place-items:center;padding:24px;visibility:hidden;opacity:0;transition:opacity .18s,visibility .18s}.mqtt-debug-modal.open{visibility:visible;opacity:1}.mqtt-debug-backdrop{position:absolute;inset:0;border:0;background:rgba(2,10,7,.7);backdrop-filter:blur(4px);cursor:pointer}.mqtt-debug-panel{position:relative;width:min(1500px,100%);height:min(860px,calc(100vh - 48px));display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:var(--surface);color:var(--ink);box-shadow:0 28px 90px rgba(0,0,0,.38)}
.mqtt-debug-panel>header{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 20px;border-bottom:1px solid var(--line)}.mqtt-debug-panel h2{margin:0;font:700 26.4px "Manrope"}.mqtt-debug-panel .eyebrow{margin-bottom:4px}.mqtt-debug-close{width:38px;height:38px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);color:var(--ink);font:400 30px/1 "DM Sans";cursor:pointer}.mqtt-debug-tools{display:flex;align-items:end;justify-content:space-between;gap:18px;padding:12px 20px;border-bottom:1px solid var(--line);background:var(--surface-2)}.mqtt-debug-tools label{width:min(520px,60%);display:flex;flex-direction:column;gap:5px}.mqtt-debug-tools label span{color:var(--muted);font-size:10.8px;text-transform:uppercase;letter-spacing:.06em}.mqtt-debug-tools input{height:38px;border:1px solid var(--line);border-radius:9px;background:var(--surface);color:var(--ink);padding:0 11px;font:500 13.2px "DM Sans";outline:none}.mqtt-debug-tools input:focus{border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}#mqttDebugStatus{color:var(--muted);font:600 12px "Manrope";text-align:right}
.mqtt-debug-table-wrap{flex:1;min-height:0;overflow:auto}.mqtt-debug-table{width:100%}.mqtt-debug-panel table{width:100%;border-collapse:collapse;table-layout:fixed}.mqtt-debug-panel th{position:sticky;top:0;z-index:2;background:var(--surface-2);color:var(--muted);padding:10px 12px;border-bottom:1px solid var(--line);font:700 10.8px "Manrope";letter-spacing:.05em;text-align:left;text-transform:uppercase}.mqtt-debug-panel td{padding:9px 12px;border-bottom:1px solid var(--line);font-size:12px;vertical-align:top;overflow-wrap:anywhere}.mqtt-debug-panel th:nth-child(1){width:8%}.mqtt-debug-panel th:nth-child(2){width:14%}.mqtt-debug-panel th:nth-child(3){width:14%}.mqtt-debug-panel th:nth-child(4){width:25%}.mqtt-debug-panel th:nth-child(5){width:27%}.mqtt-debug-panel th:nth-child(6){width:12%}.mqtt-debug-panel code{color:#28a67b;font:600 12px ui-monospace,SFMono-Regular,Menlo,monospace}.mqtt-debug-value{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--ink)}.mqtt-debug-empty{text-align:center!important;color:var(--muted);padding:60px 20px!important}.mqtt-debug-open{overflow:hidden!important}
@media(max-width:767px){.bike-page-head{grid-template-columns:1fr auto}.mqtt-table-button{padding:8px 10px;font-size:10.8px}.mqtt-debug-modal{padding:8px}.mqtt-debug-panel{height:calc(100vh - 16px);border-radius:13px}.mqtt-debug-panel>header{padding:14px}.mqtt-debug-tools{align-items:stretch;flex-direction:column;padding:10px 14px}.mqtt-debug-tools label{width:100%}#mqttDebugStatus{text-align:left}.mqtt-debug-panel table{min-width:900px}.mqtt-debug-panel td{font-size:10.8px}}
