:root{color-scheme:dark;--bg:var(--skin-color-0);--panel:var(--skin-color-1);--border:var(--skin-color-2);--muted:var(--skin-color-3);--text:var(--skin-color-4);--mint:var(--skin-color-5);--blue:var(--skin-color-6);--amber:var(--skin-color-7);font-family:Inter,-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-size:14px}button,input,select{font:inherit}button{cursor:pointer;color:inherit;border:0;background:none}button:disabled{cursor:wait;opacity:.6}#playReplay:disabled,#replayRange:disabled{cursor:default}#playReplay:not(:disabled){cursor:pointer}input,select{color:var(--text);outline:none}button:focus-visible,a:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid var(--mint);outline-offset:3px}button,select,input{touch-action:manipulation}button svg{pointer-events:none}svg.icon{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle;flex-shrink:0}a{color:inherit;text-decoration:none}[hidden]{display:none!important}.topbar{height:86px;padding:0 30px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);background:var(--skin-color-8);gap:20px}.brand{display:flex;align-items:center;gap:14px;white-space:nowrap}.brand-mark{display:flex;align-items:center;gap:4px;transform:skew(-22deg);width:30px}.brand-mark i{display:block;width:6px;height:25px;background:var(--mint)}.brand-mark i:nth-child(2){height:18px}.brand-mark i:nth-child(3){height:11px}.brand strong{font-size:16px;font-weight:600;letter-spacing:.5px}.brand small{display:block;font-size:14px;letter-spacing:2.1px;color:var(--skin-color-9);margin-top:7px}.brand-divider{color:var(--skin-color-10);margin:0 12px;font-weight:400}.topbar nav{display:flex;height:100%;gap:27px}.nav-button{position:relative;padding:0 3px;color:var(--skin-color-11);font-size:14px;white-space:nowrap}.nav-button.active{color:var(--mint)}.nav-button.active:after{content:"";height:3px;border-radius:2px;position:absolute;bottom:0;left:0;right:0;background:var(--mint)}.header-tools{display:flex;align-items:center;gap:16px}.header-tools time{font-variant-numeric:tabular-nums;font-size:17px;color:var(--skin-color-12);letter-spacing:1px}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;flex-shrink:0;border:1px solid transparent;border-radius:6px;color:var(--skin-color-13)}.icon-button:hover{background:var(--skin-color-14);color:var(--skin-color-15)}.icon-button.active{color:var(--mint);background:var(--skin-color-16);border-color:var(--skin-color-17)}.account-button{display:flex;align-items:center;gap:9px;color:var(--skin-color-18);font-size:14px;white-space:nowrap}.account-button>svg{width:29px;height:29px;padding:6px;border-radius:50%;background:var(--skin-color-19);color:var(--skin-color-20)}main{padding:25px 30px 0;max-width:2000px;margin:auto}.workspace-heading{display:flex;justify-content:space-between;align-items:center;gap:16px}.eyebrow{font-size:14px;letter-spacing:2px;color:var(--skin-color-21);font-weight:500}.workspace-heading h1{font-size:22px;font-weight:500;letter-spacing:1px;margin:8px 0 0}.source-controls{display:flex;gap:15px;align-items:center}.pill{font-size:14px;display:flex;align-items:center;gap:7px;border:1px solid var(--skin-color-22);border-radius:5px;padding:6px 9px;white-space:nowrap}.pill i,.status-dot{width:5px;height:5px;border-radius:50%;background:var(--mint);display:inline-block}.pill.demo{color:var(--skin-color-23);border-color:var(--skin-color-24);background:var(--skin-color-25)}.pill.demo i{background:var(--skin-color-26)}.pill.live{color:var(--mint);background:var(--skin-color-27);border-color:var(--skin-color-28)}.stream-state{color:var(--muted);font-size:14px;white-space:nowrap}.subtle-button{border:1px solid var(--skin-color-29);color:var(--skin-color-30);border-radius:6px;padding:8px 12px;display:inline-flex;align-items:center;justify-content:center;gap:7px;font-size:14px;white-space:nowrap}.subtle-button:hover{border-color:var(--skin-color-31);background:var(--skin-color-32)}.subtle-button svg{width:14px;height:14px}.notice{font-size:14px;color:var(--skin-color-33);margin:14px 0 18px;display:flex;align-items:center;gap:7px}.notice:before{content:"";display:block;width:4px;height:4px;background:var(--skin-color-33)}.notice.live{color:var(--skin-color-34)}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:20px}.metric{position:relative;border:1px solid var(--border);background:linear-gradient(105deg,var(--skin-color-35),var(--skin-color-36));border-radius:9px;display:flex;align-items:center;gap:14px;padding:19px 20px;min-height:96px}.metric-icon{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.metric-icon svg{width:21px;height:21px}.mint{background:var(--skin-color-37);color:var(--mint)}.blue{background:var(--skin-color-38);color:var(--blue)}.lime{background:var(--skin-color-39);color:var(--skin-color-40)}.amber{background:var(--skin-color-41);color:var(--amber)}.metric>div>span:not(.tiny-bars){font-size:14px;color:var(--skin-color-42)}.metric strong{display:block;font-size:30px;line-height:1.2;font-weight:500;letter-spacing:1px;font-variant-numeric:tabular-nums;margin-top:6px}.metric strong small{font-size:14px;color:var(--skin-color-43);margin-left:9px;letter-spacing:0;font-weight:400}.metric-aside{margin-left:auto;align-self:flex-end;text-align:right;min-width:0}.metric-aside small{display:block;font-size:14px;color:var(--skin-color-44);white-space:nowrap}.tiny-bars{display:flex;align-items:end;justify-content:end;gap:4px;height:23px;margin-bottom:8px}.tiny-bars i{background:var(--skin-color-45);width:4px;border-radius:1px;height:10px}.tiny-bars i:nth-child(2){height:15px}.tiny-bars i:nth-child(3){height:12px}.tiny-bars i:nth-child(4){height:21px}.tiny-bars i:nth-child(5){height:18px}.metric-link{margin-left:auto;color:var(--skin-color-46);width:28px;height:30px}.dashboard-grid{display:grid;grid-template-columns:260px minmax(320px,1fr) 278px;grid-template-rows:minmax(465px,calc(100vh - 495px)) auto;gap:16px}.panel{background:var(--panel);border:1px solid var(--border);border-radius:9px;min-width:0;overflow:hidden}.panel-heading{display:flex;justify-content:space-between;align-items:center;padding:15px 17px;min-height:53px;gap:10px}.panel-heading h2{font-size:14px;font-weight:500;margin:0;white-space:nowrap}.panel-heading h2>span{display:inline-flex;min-width:19px;height:18px;align-items:center;justify-content:center;margin-left:6px;padding:0 5px;background:var(--skin-color-47);border-radius:4px;color:var(--skin-color-48);font-size:14px}.panel-heading p{font-size:14px;color:var(--skin-color-49);margin:6px 0 0}.caption{font-size:14px;letter-spacing:1px;color:var(--skin-color-50);white-space:nowrap}.fleet-panel{display:flex;flex-direction:column}.search{display:flex;align-items:center;margin:0 15px;padding:0 11px;border:1px solid var(--skin-color-51);background:var(--skin-color-52);border-radius:6px;height:34px;gap:8px;color:var(--skin-color-53)}.search svg{width:14px;height:14px}.search input{width:100%;min-width:0;border:0;background:none;font-size:14px}.search input::placeholder{color:var(--skin-color-54)}.filters{display:flex;gap:4px;margin:12px 15px}.filters button{font-size:14px;color:var(--skin-color-55);border-radius:4px;padding:6px 10px}.filters button.active{background:var(--skin-color-56);color:var(--skin-color-57)}.device-list{flex:1;overflow-y:auto;padding:0 9px;scrollbar-width:thin;scrollbar-color:var(--skin-color-58) transparent}.device-card{display:block;text-align:left;width:100%;padding:12px 11px;border:1px solid transparent;border-radius:6px;margin-bottom:4px}.device-card:hover{background:var(--skin-color-59)}.device-card.selected{background:linear-gradient(90deg,var(--skin-color-60),var(--skin-color-61));border-color:var(--skin-color-62)}.device-card-top{display:flex;align-items:center;gap:10px}.device-glyph{display:flex;align-items:center;justify-content:center;width:31px;height:31px;border-radius:7px;background:var(--skin-color-63);color:var(--skin-color-64)}.device-glyph.offline{color:var(--skin-color-65);background:var(--skin-color-66)}.device-card strong{display:block;font-size:14px;font-weight:500}.device-card small{display:block;font-size:14px;color:var(--skin-color-67);letter-spacing:.6px;margin-top:5px}.device-card .status{margin-left:auto;font-size:14px;white-space:nowrap}.status.working{color:var(--skin-color-68)}.status.idle{color:var(--skin-color-69)}.status.offline{color:var(--skin-color-70)}.device-card-bottom{display:flex;align-items:center;margin-top:11px;color:var(--skin-color-71);font-size:14px;gap:6px}.device-card-bottom .battery{width:33px;height:4px;border-radius:3px;background:var(--skin-color-72);overflow:hidden}.battery i{display:block;height:100%;background:var(--skin-color-73)}.device-card-bottom .battery-low i{background:var(--skin-color-74)}.device-card-bottom span:last-child{margin-left:auto;color:var(--skin-color-75)}.fleet-foot{display:flex;align-items:center;gap:6px;padding:12px 16px;border-top:1px solid var(--border);color:var(--skin-color-76);font-size:14px}.fleet-foot span:last-child{margin-left:auto;font-variant-numeric:tabular-nums}.scene-panel{position:relative;display:flex;flex-direction:column}.scene-heading{height:67px;border-bottom:1px solid var(--skin-color-77);flex-shrink:0}.segmented{display:flex;border:1px solid var(--skin-color-78);border-radius:5px;padding:3px;gap:3px;background:var(--skin-color-79)}.segmented button{font-size:14px;padding:6px 8px;color:var(--skin-color-80);white-space:nowrap;border-radius:3px}.segmented button.active{background:var(--skin-color-81);color:var(--skin-color-82)}.scene-viewport{position:relative;flex:1;min-height:310px;background:var(--skin-color-83);overflow:hidden}#sceneCanvas{position:absolute;inset:0}#sceneCanvas canvas{display:block;width:100%;height:100%;outline:none;touch-action:none}.scene-labels{position:absolute;inset:0;pointer-events:none;overflow:hidden}.map-label{position:absolute;transform:translate(-50%,-100%);font-size:14px;background:rgba(11,24,32,.86);border:1px solid var(--skin-color-84);padding:4px 6px;border-radius:4px;color:var(--skin-color-85);white-space:nowrap;pointer-events:auto;cursor:pointer}.map-label.selected{border-color:var(--skin-color-86);color:var(--skin-color-87);background:var(--skin-color-88);z-index:2}.map-label.offline{border-color:var(--skin-color-89);color:var(--skin-color-90)}.scene-corner{position:absolute;left:16px;top:14px;display:flex;flex-direction:column;gap:7px;pointer-events:none;font-size:14px;color:var(--skin-color-91);letter-spacing:.3px}.scene-source{color:var(--skin-color-92);letter-spacing:1.5px;font-size:14px}.scene-tools{position:absolute;right:12px;top:12px;display:flex;flex-direction:column;gap:6px}.scene-tools .icon-button{background:rgba(16,34,46,.9);border-color:var(--skin-color-93);width:60px;height:60px;border-radius:12px}.scene-tools .icon-button svg.icon{width:36px;height:36px}.scene-tools .icon-button.active{color:var(--mint);border-color:var(--skin-color-94)}.compass{position:absolute;top:13px;right:21px;display:flex;flex-direction:column;align-items:center;color:var(--skin-color-95);font-size:14px;gap:5px}.compass i{display:block;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:18px solid var(--skin-color-96);transform:rotate(-18deg)}.scene-legend{position:absolute;bottom:14px;left:16px;display:flex;gap:13px;pointer-events:none}.scene-legend span{display:flex;align-items:center;gap:5px;color:var(--skin-color-97);font-size:14px}.scene-legend i{width:5px;height:5px;border-radius:50%}.mint-dot{background:var(--skin-color-98)}.blue-dot{background:var(--skin-color-99)}.gray-dot{background:var(--skin-color-100)}.scene-instructions{position:absolute;bottom:14px;right:12px;color:var(--skin-color-101);font-size:14px;pointer-events:none}.scene-bottom{height:37px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 14px;background:var(--skin-color-102);color:var(--skin-color-103);border-top:1px solid var(--skin-color-104);font-size:14px;gap:10px}.scene-bottom>span{display:flex;align-items:center;gap:6px}.scene-bottom svg{width:12px;height:12px}.scene-error{position:absolute;top:35%;left:12%;right:12%;padding:20px;background:var(--skin-color-105);border:1px solid var(--skin-color-106);border-radius:8px;color:var(--skin-color-107);line-height:1.8}.detail-panel{display:flex;flex-direction:column}.device-detail{padding:0 17px}.detail-title{display:flex;align-items:center;justify-content:space-between;padding:9px 0 18px;border-bottom:1px solid var(--border)}.detail-title strong{font-size:16px;font-weight:500}.detail-title small{display:block;font-size:14px;color:var(--skin-color-108);margin-top:7px;letter-spacing:.7px}.detail-robot{width:52px;height:52px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--skin-color-109),var(--skin-color-110));border-radius:12px;color:var(--skin-color-111)}.detail-robot svg{width:29px;height:29px}.detail-fields{display:grid;grid-template-columns:1fr 1fr;gap:17px 16px;margin:20px 0}.detail-fields span{font-size:14px;color:var(--skin-color-112);display:block;margin-bottom:7px}.detail-fields strong{font-size:19px;font-weight:400;letter-spacing:.5px}.detail-fields strong small{font-size:14px;color:var(--skin-color-113);margin-left:4px}.detail-fields .small-value{font-size:14px;letter-spacing:0}.quality-row{display:flex;align-items:center;justify-content:space-between;font-size:14px;color:var(--skin-color-114)}.quality-track{height:4px;background:var(--skin-color-115);border-radius:3px;overflow:hidden;margin-top:8px}.quality-track i{display:block;height:100%;background:var(--skin-color-116);max-width:100%;transition:width .4s}.task-row{font-size:14px;margin-top:15px;display:flex;justify-content:space-between;color:var(--skin-color-117)}.telemetry-chart{margin:23px 17px 0;padding-top:15px;border-top:1px solid var(--border)}.chart-heading{display:flex;justify-content:space-between;font-size:14px;color:var(--skin-color-118)}.chart-heading span:last-child{font-size:14px;color:var(--skin-color-119)}.telemetry-chart svg{display:block;width:100%;height:66px;margin-top:9px}.chart-axis{display:flex;justify-content:space-between;font-size:14px;color:var(--skin-color-120)}.detail-note{margin:auto 17px 15px;padding-top:16px;display:flex;align-items:flex-start;gap:6px;color:var(--skin-color-121);font-size:14px;line-height:1.6}.detail-note svg{width:12px;height:12px;flex-shrink:0}.alerts-panel{grid-column:1/3}.alerts-panel .panel-heading{border-bottom:1px solid var(--border)}.inline-check{display:flex;align-items:center;gap:6px;color:var(--skin-color-122);font-size:14px;cursor:pointer}.inline-check input{accent-color:var(--skin-color-123);margin:0}.alert-list{max-height:160px;min-height:90px;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--skin-color-58) transparent}.alert-row{display:flex;align-items:center;gap:12px;padding:11px 17px;border-bottom:1px solid var(--skin-color-124);font-size:14px}.alert-row:last-child{border:0}.alert-row .alert-dot{width:6px;height:6px;flex-shrink:0;border-radius:50%;background:var(--skin-color-125)}.alert-row.info .alert-dot{background:var(--skin-color-126)}.alert-row time{color:var(--skin-color-121);font-size:14px;font-variant-numeric:tabular-nums;white-space:nowrap}.alert-row .alert-device{color:var(--skin-color-127);font-size:14px;min-width:50px}.alert-message{color:var(--skin-color-128);flex:1;line-height:1.5}.ack-button{color:var(--skin-color-129);font-size:14px;border:1px solid var(--skin-color-130);border-radius:4px;padding:4px 9px;white-space:nowrap}.ack-button:disabled{opacity:.5;cursor:default}.pipeline{display:flex;align-items:center;justify-content:space-between;padding:7px 18px 18px;color:var(--skin-color-131)}.pipeline>span{display:flex;flex-direction:column;align-items:center;gap:7px;font-size:14px;color:var(--skin-color-132)}.pipeline>span svg{width:23px;height:23px;color:var(--skin-color-133)}.pipeline>svg{width:14px;height:14px}.connection-meta{display:flex;align-items:center;justify-content:space-between;margin:0 17px;padding-top:13px;border-top:1px solid var(--border);font-size:14px;color:var(--skin-color-134)}.connection-meta strong{color:var(--skin-color-135);font-size:14px;font-weight:400}.connection-panel p{font-size:14px;color:var(--skin-color-136);margin:10px 17px 15px;line-height:1.6}.mini-badge{font-size:14px;color:var(--skin-color-137);border:1px solid var(--skin-color-138);border-radius:4px;padding:4px 6px}.page-footer{display:flex;justify-content:space-between;color:var(--skin-color-139);font-size:14px;margin:18px 30px;letter-spacing:.8px}.empty-state{color:var(--skin-color-140);text-align:center;padding:35px 12px;font-size:14px;line-height:1.8}.replay-bar{padding:12px 16px;background:var(--skin-color-141);border-top:1px solid var(--skin-color-142)}.replay-top{display:flex;align-items:center;gap:12px;font-size:14px;color:var(--skin-color-143)}.replay-top strong{font-size:14px;font-weight:400;display:flex;align-items:center;gap:6px}.replay-top svg{width:13px;height:13px}.replay-top .text-button{margin-left:auto}.replay-controls{display:flex;align-items:center;gap:10px;margin-top:8px}.replay-controls input{flex:1;min-width:0;accent-color:var(--mint)}.replay-controls select{background:var(--skin-color-144);border:1px solid var(--skin-color-145);border-radius:4px;font-size:14px;padding:4px}.text-button{color:var(--mint);padding:2px 3px;font-size:inherit}.text-button:hover{text-decoration:underline}body.twin-mode .fleet-panel,body.twin-mode .detail-panel{display:none}body.twin-mode .dashboard-grid{grid-template-columns:1fr 300px;grid-template-rows:minmax(510px,calc(100vh - 480px)) auto}body.twin-mode .scene-panel{grid-column:1/-1}body.twin-mode .alerts-panel{grid-column:1}.toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);z-index:20;max-width:90vw;background:var(--skin-color-146);border:1px solid var(--skin-color-147);color:var(--skin-color-148);border-radius:7px;padding:12px 20px;box-shadow:0 10px 30px var(--skin-color-149);font-size:14px}dialog{border:1px solid var(--skin-color-150);background:var(--skin-color-151);color:var(--text);border-radius:15px;box-shadow:0 30px 100px var(--skin-color-152);max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);overflow:auto;padding:32px}dialog::backdrop{background:rgba(4,10,16,.78);backdrop-filter:blur(6px)}.dialog-close{position:absolute;top:13px;right:13px}.login-dialog{width:460px!important;padding:35px}.login-symbol{width:43px;height:43px;background:var(--skin-color-153);border:1px solid var(--skin-color-154);border-radius:11px;display:flex;align-items:center;justify-content:center;color:var(--mint);margin-bottom:23px}.login-symbol svg{width:22px;height:22px}dialog h2{font-size:23px;font-weight:500;letter-spacing:.3px;margin:12px 0}.dialog-intro{font-size:14px;color:var(--skin-color-155);line-height:1.8;margin:0 0 25px}form>label{display:block;font-size:14px;color:var(--skin-color-156);margin-bottom:17px}form input:not([type=checkbox]),.advanced input{display:block;width:100%;background:var(--skin-color-157);border:1px solid var(--skin-color-158);border-radius:6px;padding:12px;color:var(--skin-color-159);font-size:14px;margin-top:8px;min-height:42px}form input::placeholder{color:var(--skin-color-160)}.password-field{position:relative}.password-field input{padding-right:54px!important}.password-field button{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:14px;line-height:1.2;color:var(--skin-color-161)}.advanced{font-size:14px;color:var(--skin-color-162);margin-bottom:17px}.advanced label{display:block;margin-top:10px}.advanced summary{cursor:pointer;display:list-item}.agreement-check{display:flex!important;align-items:center;font-size:14px;margin:0 0 16px;gap:7px}.agreement-check input{accent-color:var(--mint)}.primary-button{background:var(--skin-color-163);color:var(--skin-color-164);display:flex;width:100%;align-items:center;justify-content:center;gap:16px;padding:13px;border-radius:6px;font-size:14px;font-weight:600}.primary-button:hover{background:var(--skin-color-165)}.form-error{color:var(--skin-color-166);font-size:14px;line-height:1.6;margin:10px 0}.form-error:empty{display:none}.demo-button{display:block;width:100%;text-align:center;padding:19px 0 2px;font-size:14px;color:var(--skin-color-167)}.login-end{font-size:14px;color:var(--skin-color-168);text-align:center;border-top:1px solid var(--skin-color-169);margin-top:17px;padding-top:17px}.settings-dialog{width:550px}.dialog-title{display:flex;justify-content:space-between;align-items:center;gap:20px}.dialog-title h2{font-size:21px}.settings-block{border-top:1px solid var(--skin-color-170);margin-top:20px;padding-top:20px}.settings-block h3{font-size:14px;font-weight:500;margin:0 0 10px}.settings-block p{font-size:14px;line-height:1.9;color:var(--skin-color-171);margin:0 0 14px}.setting-actions{display:flex;gap:10px}.file-button{border:1px dashed var(--skin-color-172);padding:12px;display:inline-flex;gap:8px;align-items:center;font-size:14px;color:var(--skin-color-173);cursor:pointer;border-radius:6px}.file-button input{display:none}#importState{font-size:14px;color:var(--skin-color-174);margin-left:12px}.agreement-dialog{width:700px}.agreement-dialog h2{font-size:18px}.agreement-content{max-height:55vh;overflow:auto;margin:15px 0 25px;font-size:14px;line-height:1.9;color:var(--skin-color-175);padding-right:12px}.agreement-content h3{color:var(--skin-color-176)}.agreement-content h4{color:var(--skin-color-177)}body:has(dialog[open]){overflow:hidden}
@media(min-width:1700px){.dashboard-grid{grid-template-columns:300px minmax(500px,1fr) 310px}.device-card{padding:14px}.device-card strong{font-size:14px}.detail-fields{gap:25px}.detail-title strong{font-size:18px}.telemetry-chart svg{height:85px}.scene-viewport{min-height:420px}.metric{min-height:110px}}
@media(max-width:1250px){.topbar{padding:0 20px;gap:15px}.brand strong{font-size:14px}.brand small{font-size:14px}.brand-divider{margin:0 6px}.header-tools time{display:none}.topbar nav{gap:20px}main{padding:20px 20px 0}.dashboard-grid{grid-template-columns:220px minmax(300px,1fr) 238px;gap:12px}.metrics{gap:12px}.metric{padding:16px 12px;gap:9px}.metric-icon{width:34px;height:34px}.metric-aside{display:none}.detail-fields{gap:17px 10px}.detail-fields strong{font-size:17px}.detail-title strong{font-size:14px}.detail-robot{width:42px;height:42px}.caption{display:none}.scene-instructions{display:none}.source-controls{gap:9px}.stream-state{display:none}.workspace-heading h1{font-size:19px}.scene-heading{padding:13px}.scene-heading h2{font-size:14px}.segmented button{font-size:14px;padding:5px 6px}.scene-bottom>span:last-child{display:none}.device-card{padding:10px 7px}.device-glyph{width:26px;height:28px}.device-card-top{gap:7px}.device-card strong{font-size:14px}.page-footer{margin:16px 20px}}
@media(max-width:1000px){.topbar{height:72px}.brand strong{font-size:14px}.brand small{letter-spacing:1px}.topbar nav{gap:14px}.nav-button{font-size:14px}.header-tools{gap:8px}.account-button span{display:none}.brand-divider{display:none}.brand strong{max-width:200px;display:block;white-space:normal}.dashboard-grid{grid-template-columns:210px minmax(300px,1fr);grid-template-rows:470px auto auto}.detail-panel{grid-column:1;grid-row:2/4}.alerts-panel{grid-column:2;grid-row:2}.connection-panel{grid-column:2;grid-row:3}.source-controls .subtle-button{padding:7px}.detail-panel .telemetry-chart{margin-top:16px}.metrics{gap:10px}.metric strong{font-size:25px}.metric>div>span:not(.tiny-bars){font-size:14px}.metric strong small{font-size:14px;margin-left:5px}body.twin-mode .dashboard-grid{grid-template-columns:1fr;grid-template-rows:530px auto auto}body.twin-mode .alerts-panel,body.twin-mode .connection-panel{grid-column:1;grid-row:auto}}
@media(max-width:700px){.topbar{height:auto;min-height:100px;padding:16px;flex-wrap:wrap;gap:16px}.brand strong{font-size:14px;max-width:none}.brand small{font-size:14px}.brand-divider{display:inline}.brand-mark{width:24px;gap:3px}.brand-mark i{width:5px}.brand{gap:10px}.topbar nav{order:3;height:30px;width:100%;justify-content:center;gap:40px}.nav-button{padding-bottom:10px}.header-tools{margin-left:auto}.topbar .icon-button{display:none}main{padding:18px 14px 0}.workspace-heading{align-items:flex-start}.workspace-heading h1{font-size:15px;line-height:1.5}.eyebrow{font-size:14px;letter-spacing:1.4px}.source-controls{flex-wrap:wrap;justify-content:end;gap:8px;max-width:120px}.source-controls .subtle-button{font-size:14px;padding:6px}.pill{font-size:14px;padding:5px 6px}.notice{font-size:14px;line-height:1.7;margin:12px 0 15px}.metrics{grid-template-columns:1fr 1fr;gap:9px;margin-bottom:14px}.metric{min-height:80px;padding:14px;gap:12px}.metric-icon{width:33px;height:33px}.metric strong{font-size:24px}.metric-link{display:none}.dashboard-grid{display:flex;flex-direction:column;gap:14px}.scene-panel{order:0;min-height:395px}.scene-viewport{min-height:300px}.scene-heading{height:58px}.fleet-panel{order:1;max-height:350px}.detail-panel{order:2}.alerts-panel{order:3}.connection-panel{order:4}.device-list{max-height:210px}.device-card strong{font-size:14px}.device-card small{font-size:14px}.device-card .status{font-size:14px}.device-glyph{width:34px;height:34px}.device-card-bottom{font-size:14px}.device-card{padding:12px}.detail-fields{grid-template-columns:repeat(3,1fr)}.detail-fields strong{font-size:20px}.detail-fields span{font-size:14px}.detail-title strong{font-size:16px}.telemetry-chart svg{height:75px}.detail-note{padding-top:18px;font-size:14px}.alert-row{gap:8px;padding:12px;font-size:14px;flex-wrap:wrap}.alert-row time{font-size:14px}.alert-message{flex-basis:50%;font-size:14px}.alert-row .alert-device{min-width:0}.page-footer{margin:18px 14px;font-size:14px;letter-spacing:0}.page-footer span:nth-child(2){display:none}.login-dialog{padding:28px}.login-dialog h2{font-size:22px}.dialog-intro{font-size:14px}.login-end{font-size:14px}.settings-dialog{padding:24px}.scene-legend{gap:10px}.scene-corner{font-size:14px}.detail-note{margin-top:10px}body.twin-mode .scene-panel{min-height:480px}.scene-source{font-size:14px}.replay-top{gap:5px;font-size:14px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}

/* Replay deviation controls stay compact beside the automatic playback switch. */
.replay-deviation-control{margin-left:auto;display:inline-flex;align-items:center;gap:5px;min-height:28px;color:var(--muted);font-size:14px;line-height:1;white-space:nowrap;cursor:pointer;user-select:none} .twin-deviation-control{margin-left:0;flex:0 0 auto}.replay-deviation-control input[type=number]{width:54px;height:26px;box-sizing:border-box;padding:3px 5px;border:1px solid var(--border);border-radius:4px;background:color-mix(in srgb,var(--bg) 82%,transparent);color:var(--text);font:inherit;text-align:center}.replay-deviation-control input[type=number]:focus{outline:1px solid var(--mint);border-color:var(--mint)}.replay-deviation-control input[type=checkbox]{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}.replay-deviation-control:has(input[type=checkbox]:checked){color:var(--mint)}.replay-deviation-control input[type=checkbox]:checked+.activity-switch-track{background:var(--mint)}.replay-deviation-control input[type=checkbox]:checked+.activity-switch-track:after{transform:translateX(12px);background:var(--panel)}.replay-deviation-control:has(input[type=checkbox]:focus-visible){outline:2px solid var(--mint);outline-offset:3px;border-radius:4px}.replay-deviation-control.unavailable{opacity:.48;cursor:not-allowed}.replay-deviation-control.unavailable .activity-switch-track{background:var(--border)}.replay-top .replay-auto-play{margin-left:0}
.replay-deviation-marker{position:relative;z-index:30;display:flex;align-items:center;justify-content:center;min-width:42px;height:22px;padding:0 5px;border:1px solid #ffd34e;border-radius:4px;background:rgba(13,24,34,.9);color:#ffe58a;font:700 11px/1 Inter,"PingFang SC",sans-serif;letter-spacing:.2px;box-shadow:0 0 9px #ffd34e99;pointer-events:none;white-space:nowrap}.replay-deviation-marker:before,.replay-deviation-marker:after{position:absolute;top:50%;width:12px;height:2px;background:#ffd34e;box-shadow:0 0 6px #ffd34e;content:"";transform:translateY(-50%)}.replay-deviation-marker:before{right:100%}.replay-deviation-marker:after{left:100%}.replay-deviation-marker span{position:absolute;left:-5px;right:-5px;top:50%;height:1px;background:#ffd34e;box-shadow:0 0 6px #ffd34e;transform:translateY(-50%);z-index:-1}
.replay-deviation-dot{position:absolute;min-width:0;height:18px;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;gap:5px;text-shadow:0 1px 3px #07131a}.replay-deviation-dot:before,.replay-deviation-dot:after{display:none}.replay-deviation-dot span{position:static;display:block;width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:#ffd34e;box-shadow:0 0 8px #ffd34e;transform:none}.replay-deviation-dot b{font-size:11px;color:#ffe58a}
@media(max-width:700px){.replay-deviation-control{margin-left:0}.replay-top .replay-auto-play{margin-left:0}}

.scene-waiting{position:absolute;top:40%;left:15%;right:15%;display:flex;align-items:center;flex-direction:column;gap:12px;text-align:center;pointer-events:none}.scene-waiting svg{width:32px;height:32px;color:var(--skin-color-178)}.scene-waiting strong{font-size:14px;font-weight:400;color:var(--skin-color-179)}.scene-waiting span{font-size:14px;color:var(--skin-color-180);line-height:1.7}

.satellite-credit{position:absolute;right:12px;bottom:36px;max-width:calc(100% - 24px);display:flex;flex-direction:column;align-items:flex-end;gap:3px;pointer-events:none;font-size:14px;color:var(--skin-color-181);text-shadow:0 1px 3px var(--skin-color-182);z-index:3}.satellite-credit span,.satellite-credit a{background:var(--skin-color-183);padding:3px 6px;border-radius:3px}.satellite-credit a{color:var(--skin-color-184);pointer-events:auto;max-width:100%;text-align:right}.scene-heading .segmented{flex-wrap:wrap}.scene-heading{gap:10px}@media(max-width:600px){.scene-heading{align-items:flex-start;flex-direction:column}.satellite-credit{font-size:14px;bottom:47px}}

/* Desktop workspace uses the available viewport; overflowing data scrolls inside its panel. */
@media(min-width:701px){
 html{height:100%;overflow:hidden}
 body{height:100vh;height:100dvh;display:flex;flex-direction:column;overflow:hidden}
 .topbar{height:clamp(54px,7.5vh,80px);min-height:0;flex:0 0 auto;padding:0 clamp(12px,1.4vw,28px)}
 main{width:100%;max-width:none;margin:0;min-height:0;flex:1;display:flex;flex-direction:column;padding:clamp(8px,1.3vh,18px) clamp(10px,1vw,20px) 0}
 .workspace-heading{flex-shrink:0}.workspace-heading h1{font-size:clamp(16px,2.2vh,22px);margin-top:4px}
 .notice{flex-shrink:0;margin:8px 0;line-height:1.5}
 .metrics{flex-shrink:0;gap:clamp(8px,1vw,16px);margin-bottom:clamp(8px,1.2vh,16px)}
 .metric{min-height:0;height:clamp(62px,10vh,104px);padding:10px 14px}.metric strong{font-size:clamp(22px,3vh,30px);margin-top:3px}
 .dashboard-grid{flex:1;min-height:0;grid-template-columns:clamp(180px,18vw,310px) minmax(0,1fr) clamp(210px,19vw,320px);grid-template-rows:minmax(0,1fr) clamp(126px,21vh,205px);gap:clamp(8px,1vw,16px)}
 .dashboard-grid>.panel{min-height:0}.fleet-panel{grid-area:1/1}.scene-panel{grid-area:1/2;min-height:0}.detail-panel{grid-area:1/3;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--skin-color-58) transparent}
 .detail-panel>*{flex-shrink:0}.alerts-panel{grid-area:2/1/3/3;display:flex;flex-direction:column}.connection-panel{grid-area:2/3;overflow:auto;scrollbar-width:thin}
 .panel-heading{padding:10px 14px;min-height:40px;flex-shrink:0}.scene-heading{height:auto;min-height:56px;flex-wrap:wrap}.scene-heading>div:first-child{min-width:0}.scene-heading p{overflow-wrap:anywhere}
 .scene-viewport{min-height:0}.scene-bottom{height:28px}.replay-bar{flex-shrink:0;padding:7px 12px}
 .search,.filters,.fleet-foot{flex-shrink:0}.filters{margin:8px 15px}.fleet-foot{padding:8px 14px}.device-list{min-height:0;max-height:none}
 .alert-list{flex:1;min-height:0;max-height:none}.alert-list .empty-state{padding:18px 12px}
 .pipeline{padding:2px 16px 8px}.pipeline-line{display:block;align-self:center;flex:1;height:1px;margin:0 14px;background:linear-gradient(90deg,transparent,var(--mint),transparent);opacity:.75}.connection-meta{padding-top:8px}.connection-panel p{margin:6px 17px 10px}
 .detail-title{padding:4px 0 12px}.detail-fields{gap:14px 12px;margin:14px 0}.telemetry-chart{margin-top:14px}.telemetry-chart svg{height:60px}.detail-note{padding-top:12px}
 .page-footer{flex:0 0 auto;margin:0;padding:7px clamp(10px,1vw,20px);min-height:25px}
 body.twin-mode .dashboard-grid{grid-template-columns:minmax(0,1fr) clamp(210px,19vw,320px);grid-template-rows:minmax(0,1fr) clamp(126px,21vh,205px)}
 body.twin-mode .scene-panel{grid-area:1/1/2/3;min-height:0}body.twin-mode .alerts-panel{grid-area:2/1}body.twin-mode .connection-panel{grid-area:2/2}
}
@media(min-width:701px) and (max-width:1000px){
 .dashboard-grid{grid-template-columns:170px minmax(0,1fr) 200px}.topbar{gap:10px}.brand strong{max-width:170px;font-size:14px}.topbar nav{gap:12px}.workspace-heading h1{font-size:16px}.scene-heading .segmented{max-width:100%}.segmented button{padding:4px;font-size:14px}.metric{padding:8px;gap:8px}.metric-icon{width:28px;height:28px}.metric strong{font-size:22px}.detail-fields strong{font-size:16px}.device-detail{padding:0 12px}
}
@media(min-width:701px) and (max-height:700px){
 .eyebrow{display:none}.workspace-heading h1{margin:0;font-size:16px}.notice{font-size:14px;margin:5px 0}.metric{height:58px}.metric-icon{height:30px;width:30px}.tiny-bars{display:none}.metrics{margin-bottom:8px}.topbar{height:50px}.dashboard-grid,body.twin-mode .dashboard-grid{grid-template-rows:minmax(0,1fr) 120px}.panel-heading{min-height:34px;padding:8px 12px}.scene-heading{min-height:48px}.page-footer{padding-top:5px;padding-bottom:5px;min-height:20px}.pipeline>span svg{width:18px;height:18px}.pipeline>span{gap:3px}.connection-panel p{margin-top:4px;margin-bottom:5px}.scene-bottom{height:24px}
}
@media(max-width:700px){main{max-width:none;width:100%}.scene-heading{height:auto;min-height:64px;padding:10px 12px;gap:8px}.scene-panel{min-height:440px}.scene-viewport{min-height:320px}}

.map-label{font-size:14px;max-width:220px;white-space:normal;overflow-wrap:anywhere;text-align:left;line-height:1.4}.map-label:after{content:"";position:absolute;left:50%;bottom:-7px;width:7px;height:7px;border-radius:50%;background:var(--skin-color-86);box-shadow:0 0 0 2px var(--skin-color-185);transform:translateX(-50%)}.map-label.offline:after{background:var(--skin-color-70)}

.header-tools .dashboard-clock{display:flex;align-items:baseline;gap:14px;white-space:nowrap;font-family:"SFMono-Regular",Menlo,Consolas,monospace;font-variant-numeric:tabular-nums;letter-spacing:1px;border-left:0;padding-left:15px;line-height:1.1}.clock-date{font-size:clamp(16px,1.3vw,26px);color:var(--skin-color-186);letter-spacing:1.5px}.clock-time{font-size:clamp(26px,2.4vw,44px);font-weight:600;color:var(--skin-color-187);text-shadow:0 0 16px var(--skin-color-188);letter-spacing:2px}.header-tools{gap:clamp(8px,1vw,18px)}@media(max-width:1250px){.header-tools .dashboard-clock{flex-direction:column;gap:3px;padding-left:9px}.clock-date{font-size:14px}.clock-time{font-size:25px}.topbar nav{gap:14px}}@media(min-width:701px) and (max-width:1000px){.clock-time{font-size:21px}.clock-date{font-size:14px;letter-spacing:1px}.topbar .brand strong{max-width:145px}.header-tools .dashboard-clock{padding-left:7px}}@media(max-width:700px){.header-tools .dashboard-clock{padding-left:8px;gap:3px}.clock-time{font-size:23px}.clock-date{font-size:14px}.topbar .brand strong{max-width:145px;font-size:14px}.topbar .brand small{display:none}.topbar{gap:10px}.header-tools{gap:5px}}

@font-face{font-family:Orbitron;src:url('/fonts/orbitron-600.ttf') format('truetype');font-style:normal;font-weight:600;font-display:swap}
.header-tools .dashboard-clock{font-family:Orbitron,"SFMono-Regular",monospace;gap:14px}
.dashboard-clock .clock-date,.dashboard-clock .clock-time{font-family:inherit;font-size:clamp(24px,2.05vw,40px);font-weight:600;letter-spacing:1px;color:var(--skin-color-187);text-shadow:0 0 16px var(--skin-color-188)}
@media(max-width:1250px){.header-tools .dashboard-clock{gap:4px}.dashboard-clock .clock-date,.dashboard-clock .clock-time{font-size:20px}}
@media(min-width:701px) and (max-width:1000px){.dashboard-clock .clock-date,.dashboard-clock .clock-time{font-size:17px}}
@media(max-width:700px){.dashboard-clock .clock-date,.dashboard-clock .clock-time{font-size:18px}.header-tools .dashboard-clock{gap:4px}}

/* Reserve stable slots so changing clock digits never move the header. */
.dashboard-clock .clock-date,.dashboard-clock .clock-time{display:inline-block;flex:none;text-align:center;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;font-kerning:none}
.dashboard-clock .clock-date{width:11ch}
.dashboard-clock .clock-time{width:9ch}

.dashboard-clock .clock-digit{display:inline-block;width:1ch;text-align:center;letter-spacing:0}.dashboard-clock .clock-separator{width:.5ch}

.activity-tools{display:flex;align-items:center;gap:12px;min-width:0;font-size:14px;color:var(--muted);flex-wrap:wrap}.activity-tools #activityScope{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alert-row.activity-info .alert-message{color:var(--text)}.alert-row.activity-warning,.alert-row.activity-warning .alert-message,.alert-row.activity-warning time,.alert-row.activity-warning .alert-device,.alert-row.activity-warning .activity-module{color:var(--skin-color-189)}.alert-row.activity-warning .alert-dot{background:var(--skin-color-190)}.alert-row.activity-info .alert-dot{background:var(--skin-color-126)}.activity-module{font-size:14px;color:var(--muted);max-width:120px;overflow-wrap:anywhere}.alert-message{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.alerts-panel .panel-heading{flex-wrap:wrap}.alert-device{max-width:180px;overflow-wrap:anywhere}

/* Readable activity feed and an exact two-character clock gap. */
#alertsPanel .panel-heading h2,#alertsPanel .panel-heading h2>span,#alertsPanel .activity-tools,#alertsPanel .inline-check,#alertsPanel .alert-row,#alertsPanel .alert-row time,#alertsPanel .alert-device,#alertsPanel .alert-message,#alertsPanel .activity-module,#alertsPanel .ack-button,#alertsPanel .empty-state{font-size:16px}
#alertsPanel .alert-row{line-height:1.25;padding:2px 17px;min-height:25px}
#alertsPanel .ack-button{padding:1px 9px;line-height:1.25}
.header-tools .dashboard-clock{font-size:clamp(24px,2.05vw,40px);gap:2ch}
.dashboard-clock .clock-date{width:9ch}
.dashboard-clock .clock-time{width:7ch}
@media(max-width:1250px){.header-tools .dashboard-clock{font-size:20px;row-gap:4px;column-gap:2ch}}
@media(min-width:701px) and (max-width:1000px){.header-tools .dashboard-clock{font-size:17px}}
@media(max-width:700px){.header-tools .dashboard-clock{font-size:18px;row-gap:4px;column-gap:2ch}}

/* Keep browser-default small text and narrow-screen controls at the same readable minimum. */
body{font-size:14px}small{font-size:14px}button,input,select,textarea{font-size:inherit}.caption,.eyebrow,.map-label{line-height:1.4}.panel-heading h2>span{height:auto;min-height:20px}.scene-heading{height:auto;min-height:64px}.scene-bottom{height:auto;min-height:32px;flex-wrap:wrap;padding-top:5px;padding-bottom:5px}.scene-instructions{display:none}.scene-corner{max-width:calc(100% - 64px)}.satellite-credit{max-width:calc(100% - 24px);bottom:42px}.scene-legend{flex-wrap:wrap}.device-card-top>div{min-width:0}.device-card strong,.device-card small{overflow-wrap:anywhere}.activity-tools{line-height:1.5}.brand small{letter-spacing:.5px}.topbar{gap:12px}.metric-aside small{white-space:normal}.page-footer{flex-wrap:wrap;gap:6px}.replay-top{flex-wrap:wrap}.fleet-foot{flex-wrap:wrap}.scene-heading .segmented{flex-wrap:wrap}.connection-meta{flex-wrap:wrap;gap:5px}
@media(min-width:701px){.topbar .brand small{display:none}.metric{height:auto;min-height:72px}.metric-aside{display:none}.search{min-height:36px}.detail-panel,.connection-panel{overflow:auto}.scene-heading{min-height:64px}.page-footer{min-height:30px}.notice{line-height:1.4}}
@media(max-width:1250px){.topbar .brand strong{max-width:170px;white-space:normal}.header-tools .account-button span{display:none}.topbar nav{gap:10px}.header-tools{gap:6px}.scene-bottom>span:last-child{display:none}}

.header-tools .dashboard-clock{column-gap:max(0px,calc(2ch - 20px))}

.layout-handle{flex:0 0 24px;min-width:24px;font-size:22px;line-height:1;color:var(--skin-color-191);cursor:grab;padding:3px;touch-action:none}.panel-heading{cursor:grab;touch-action:pan-y}.layout-handle:hover{color:var(--mint)}.metric{position:relative}.metric>.layout-handle{position:absolute;right:4px;top:3px;font-size:18px}.layout-moving{user-select:none}.layout-dragging{opacity:.55}.layout-target{outline:2px solid var(--mint);outline-offset:-3px;background-color:var(--skin-color-192)}.layout-ghost{position:fixed;z-index:1000;pointer-events:none;background:var(--skin-color-193);border:1px solid var(--skin-color-5);border-radius:6px;padding:12px 18px;color:var(--skin-color-194);box-shadow:0 8px 30px var(--skin-color-152)}.layout-announcement{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.panel-heading h2{margin-right:auto}.source-controls{flex-wrap:wrap}.dashboard-grid>.panel{overflow:auto;scrollbar-width:thin}.dashboard-grid>.scene-panel{overflow:hidden}.dashboard-grid>.fleet-panel{overflow:hidden}.layout-moving .panel-heading{cursor:grabbing}body.twin-mode .dashboard-grid .layout-handle{display:none}
@media(min-width:701px){body:not(.twin-mode) .dashboard-grid>[data-layout-slot="0"]{grid-area:1/1}body:not(.twin-mode) .dashboard-grid>[data-layout-slot="1"]{grid-area:1/2}body:not(.twin-mode) .dashboard-grid>[data-layout-slot="2"]{grid-area:1/3}body:not(.twin-mode) .dashboard-grid>[data-layout-slot="3"]{grid-area:2/1/3/3}body:not(.twin-mode) .dashboard-grid>[data-layout-slot="4"]{grid-area:2/3}body:not(.twin-mode) .dashboard-grid.scene-bottom-layout{grid-template-rows:minmax(0,1fr) minmax(0,1.5fr)}.scene-panel .panel-heading{flex-wrap:wrap}.scene-panel .segmented{flex-wrap:wrap;max-width:100%}.fleet-panel>.panel-heading{flex-shrink:0}.scene-panel[data-layout-slot="0"] .satellite-credit,.scene-panel[data-layout-slot="2"] .satellite-credit,.scene-panel[data-layout-slot="4"] .satellite-credit{font-size:14px}.panel-heading{gap:6px}}
@media(max-width:700px){.dashboard-grid>.panel{grid-area:auto}.panel-heading{flex-wrap:wrap}.source-controls{max-width:160px}}
@media(min-width:701px){body:not(.twin-mode) .dashboard-grid[data-scene-slot="0"]{grid-template-columns:minmax(0,1fr) clamp(180px,18vw,310px) clamp(210px,19vw,320px)}body:not(.twin-mode) .dashboard-grid[data-scene-slot="2"],body:not(.twin-mode) .dashboard-grid[data-scene-slot="4"]{grid-template-columns:clamp(180px,18vw,310px) clamp(210px,19vw,320px) minmax(0,1fr)}}
.scene-heading>div:first-of-type{margin-right:auto;min-width:0}

/* Native map SDK container retains provider branding and coordinates. */
#providerMap{position:absolute;inset:0;width:100%;height:100%;z-index:1;background:var(--skin-color-195)}
.amap-loading-shield{position:absolute;inset:0;z-index:200000;background:var(--skin-color-195);opacity:0;pointer-events:none;transition:opacity .12s linear}
.amap-loading-shield.visible{opacity:1}
#providerMap.map-base-off,#providerMap.map-base-off .amap-layer{background:var(--skin-color-195)!important}
#providerMap.map-base-off .amap-layers>canvas.amap-layer{visibility:hidden}
#providerMap[hidden],.satellite-credit[hidden],#sceneCanvas[hidden],#sceneLabels[hidden]{display:none!important}
/* 隐藏高德地图左下角品牌标识和版权文字。 */
#providerMap .amap-logo,#providerMap .amap-copyright{display:none!important}
.map-loading-notice{position:absolute;z-index:200001;top:50%;left:50%;display:flex;align-items:center;gap:11px;min-width:178px;justify-content:center;overflow:hidden;padding:13px 18px;border:1px solid color-mix(in srgb,var(--mint) 58%,var(--border));border-radius:9px;background:linear-gradient(135deg,color-mix(in srgb,var(--panel) 94%,transparent),color-mix(in srgb,var(--mint) 8%,var(--panel)));box-shadow:0 14px 30px #0008,0 0 20px color-mix(in srgb,var(--mint) 20%,transparent),inset 0 0 18px color-mix(in srgb,var(--mint) 7%,transparent);color:var(--text);font-size:14px;line-height:1.2;letter-spacing:.4px;pointer-events:none;transform:translate(-50%,-50%);backdrop-filter:blur(10px);animation:map-loading-enter .28s cubic-bezier(.2,.9,.3,1) both,map-loading-breathe 2.2s ease-in-out .28s infinite}.map-loading-notice:before{position:absolute;inset:-12px;border:1px solid color-mix(in srgb,var(--mint) 30%,transparent);border-left-color:transparent;border-right-color:transparent;border-radius:50%;content:"";pointer-events:none;animation:map-loading-orbit 2.8s linear infinite}.map-loading-notice:after{position:absolute;top:0;left:12px;width:calc(100% - 24px);height:1px;background:linear-gradient(90deg,transparent,var(--mint),transparent);box-shadow:0 0 8px var(--mint);content:"";opacity:.8;pointer-events:none;animation:map-loading-scan 1.45s ease-in-out infinite}.map-loading-notice i{position:relative;width:19px;height:19px;flex:0 0 19px;border:1px solid color-mix(in srgb,var(--mint) 38%,transparent);border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--mint) 22%,transparent) 0 24%,transparent 27%),conic-gradient(from 0deg,transparent 0 18%,var(--mint) 20% 28%,transparent 30% 62%,color-mix(in srgb,var(--blue) 90%,transparent) 64% 72%,transparent 74%);box-shadow:0 0 10px color-mix(in srgb,var(--mint) 46%,transparent),inset 0 0 7px color-mix(in srgb,var(--mint) 22%,transparent);animation:map-loading-spin 1.1s linear infinite}.map-loading-notice i:before{position:absolute;inset:4px;border:1px solid var(--mint);border-radius:50%;content:"";box-shadow:0 0 6px var(--mint);animation:map-loading-core 1.1s ease-in-out infinite}.map-loading-notice i:after{position:absolute;top:-3px;left:50%;width:3px;height:3px;border-radius:50%;background:var(--text);box-shadow:0 22px 0 color-mix(in srgb,var(--mint) 80%,transparent);content:"";transform:translateX(-50%)}.map-loading-notice span{position:relative;text-shadow:0 0 10px color-mix(in srgb,var(--mint) 32%,transparent)}.map-loading-notice span:after{display:inline-block;width:16px;overflow:hidden;content:"…";vertical-align:bottom;animation:map-loading-dots 1.2s steps(4,end) infinite}@keyframes map-loading-enter{from{opacity:0;transform:translate(-50%,-46%) scale(.9);filter:blur(3px)}to{opacity:1;transform:translate(-50%,-50%) scale(1);filter:none}}@keyframes map-loading-breathe{50%{box-shadow:0 14px 30px #0008,0 0 28px color-mix(in srgb,var(--mint) 30%,transparent),inset 0 0 22px color-mix(in srgb,var(--mint) 11%,transparent)}}@keyframes map-loading-orbit{to{transform:rotate(360deg)}}@keyframes map-loading-scan{0%,100%{transform:translateX(-22px);opacity:.2}50%{transform:translateX(22px);opacity:1}}@keyframes map-loading-spin{to{transform:rotate(360deg)}}@keyframes map-loading-core{50%{transform:scale(.62);opacity:.5}}@keyframes map-loading-dots{0%{width:0}75%{width:16px}100%{width:0}}@media(prefers-reduced-motion:reduce){.map-loading-notice,.map-loading-notice:before,.map-loading-notice:after,.map-loading-notice i,.map-loading-notice i:before,.map-loading-notice span:after{animation:none}.map-loading-notice{box-shadow:0 14px 30px #0008,0 0 20px color-mix(in srgb,var(--mint) 20%,transparent),inset 0 0 18px color-mix(in srgb,var(--mint) 7%,transparent)}}
.map-loading-notice{width:136px;height:136px;min-width:136px;box-sizing:border-box;flex-direction:column;gap:9px;padding:20px;border-radius:50%;background:radial-gradient(circle at 50% 42%,color-mix(in srgb,var(--mint) 13%,var(--panel)),color-mix(in srgb,var(--panel) 95%,transparent) 58%,color-mix(in srgb,var(--bg) 96%,transparent));box-shadow:0 16px 34px #0009,0 0 24px color-mix(in srgb,var(--mint) 23%,transparent),inset 0 0 24px color-mix(in srgb,var(--mint) 10%,transparent)}.map-loading-notice:before{inset:7px;border-color:color-mix(in srgb,var(--mint) 28%,transparent);border-top-color:var(--mint);border-bottom-color:transparent;animation:map-loading-orbit 2.4s linear infinite}.map-loading-notice:after{top:17px;left:30px;width:76px;background:linear-gradient(90deg,transparent,var(--mint),transparent);animation:map-loading-scan 1.45s ease-in-out infinite}.map-loading-notice i{width:52px;height:52px;flex:0 0 52px;border-color:color-mix(in srgb,var(--mint) 46%,transparent);box-shadow:0 0 17px color-mix(in srgb,var(--mint) 42%,transparent),inset 0 0 12px color-mix(in srgb,var(--mint) 24%,transparent)}.map-loading-notice i:before{inset:10px}.map-loading-notice i:after{top:-6px;box-shadow:0 62px 0 color-mix(in srgb,var(--mint) 80%,transparent)}.map-loading-notice span{font-size:13px;letter-spacing:.25px;white-space:nowrap}.map-loading-notice span:after{width:14px}@media(max-width:700px){.map-loading-notice{width:124px;height:124px;min-width:124px;padding:17px}.map-loading-notice i{width:46px;height:46px;flex-basis:46px}.map-loading-notice i:after{box-shadow:0 56px 0 color-mix(in srgb,var(--mint) 80%,transparent)}}
.map-loading-notice{--loading-a:var(--mint);--loading-b:var(--blue);width:184px!important;height:184px!important;min-width:184px!important;box-sizing:border-box;display:grid!important;place-items:center!important;padding:0!important;border:0!important;border-radius:50%!important;background:radial-gradient(circle,color-mix(in srgb,var(--loading-a) 12%,var(--panel)) 0 21%,color-mix(in srgb,var(--panel) 88%,transparent) 22% 48%,color-mix(in srgb,var(--loading-a) 5%,transparent) 49% 50%,transparent 51%)!important;box-shadow:0 0 0 1px color-mix(in srgb,var(--loading-a) 18%,transparent),0 0 28px color-mix(in srgb,var(--loading-a) 28%,transparent),inset 0 0 28px color-mix(in srgb,var(--loading-a) 13%,transparent)!important;isolation:isolate;animation:holo-loader-in .42s cubic-bezier(.16,1,.3,1) both,holo-loader-pulse 2.8s ease-in-out .42s infinite!important}.map-loading-notice:before{inset:0!important;border:1px solid color-mix(in srgb,var(--loading-a) 42%,transparent)!important;border-right-color:transparent!important;border-bottom-color:color-mix(in srgb,var(--loading-b) 75%,transparent)!important;border-radius:50%!important;background:conic-gradient(from 15deg,transparent 0 16%,color-mix(in srgb,var(--loading-a) 90%,transparent) 17% 19%,transparent 20% 48%,color-mix(in srgb,var(--loading-b) 88%,transparent) 49% 51%,transparent 52% 82%,color-mix(in srgb,var(--loading-a) 75%,transparent) 83% 85%,transparent 86%)!important;box-shadow:0 0 14px color-mix(in srgb,var(--loading-a) 27%,transparent)!important;animation:holo-loader-spin 7s linear infinite!important}.map-loading-notice:after{inset:17px!important;top:auto!important;left:auto!important;width:auto!important;height:auto!important;border:1px dashed color-mix(in srgb,var(--loading-b) 58%,transparent)!important;border-radius:50%!important;background:conic-gradient(from 270deg,transparent 0 70%,color-mix(in srgb,var(--loading-a) 28%,transparent) 78%,transparent 86%)!important;box-shadow:none!important;opacity:1!important;animation:holo-loader-counter 11s linear infinite!important}.map-loading-notice i{position:absolute!important;width:70px!important;height:70px!important;flex:0 0 70px!important;border:1px solid color-mix(in srgb,var(--loading-a) 75%,transparent)!important;border-radius:50%!important;background:radial-gradient(circle,color-mix(in srgb,var(--loading-a) 34%,transparent) 0 7%,color-mix(in srgb,var(--loading-a) 10%,transparent) 8% 28%,transparent 29%),conic-gradient(from 0deg,transparent 0 8%,var(--loading-a) 9% 12%,transparent 13% 43%,var(--loading-b) 44% 47%,transparent 48% 78%,var(--loading-a) 79% 82%,transparent 83%)!important;box-shadow:0 0 20px color-mix(in srgb,var(--loading-a) 58%,transparent),inset 0 0 18px color-mix(in srgb,var(--loading-a) 25%,transparent)!important;animation:holo-loader-spin-reverse 3.2s linear infinite!important}.map-loading-notice i:before{inset:13px!important;border:1px solid var(--loading-a)!important;border-radius:50%!important;box-shadow:0 0 9px var(--loading-a)!important;animation:holo-loader-core 1.35s ease-in-out infinite!important}.map-loading-notice i:after{top:50%!important;left:50%!important;width:5px!important;height:5px!important;border-radius:50%!important;background:var(--text)!important;box-shadow:0 0 12px 3px var(--loading-a),0 0 0 13px color-mix(in srgb,var(--loading-a) 24%,transparent)!important;transform:translate(-50%,-50%)!important;animation:holo-loader-dot 1.35s ease-in-out infinite!important}.map-loading-notice span{position:absolute!important;bottom:29px!important;font-size:12px!important;font-weight:600;letter-spacing:1px!important;color:var(--text)!important;text-shadow:0 0 10px color-mix(in srgb,var(--loading-a) 46%,transparent)!important;white-space:nowrap!important}.map-loading-notice span:before{position:absolute;right:0;bottom:19px;left:0;height:1px;background:linear-gradient(90deg,transparent,var(--loading-a),transparent);content:"";opacity:.65}.map-loading-notice span:after{width:14px!important;color:var(--loading-a);animation:holo-loader-dots 1.15s steps(4,end) infinite!important}@keyframes holo-loader-in{from{opacity:0;transform:translate(-50%,-50%) scale(.68) rotate(-18deg);filter:blur(7px)}to{opacity:1;transform:translate(-50%,-50%) scale(1) rotate(0);filter:none}}@keyframes holo-loader-pulse{50%{box-shadow:0 0 0 1px color-mix(in srgb,var(--loading-a) 30%,transparent),0 0 40px color-mix(in srgb,var(--loading-a) 42%,transparent),inset 0 0 38px color-mix(in srgb,var(--loading-a) 20%,transparent)}}@keyframes holo-loader-spin{to{transform:rotate(360deg)}}@keyframes holo-loader-counter{to{transform:rotate(-360deg)}}@keyframes holo-loader-spin-reverse{to{transform:rotate(-360deg)}}@keyframes holo-loader-core{50%{transform:scale(.54);opacity:.4}}@keyframes holo-loader-dot{50%{box-shadow:0 0 18px 6px var(--loading-a),0 0 0 16px color-mix(in srgb,var(--loading-a) 12%,transparent)}}@keyframes holo-loader-dots{0%,20%{opacity:.2;letter-spacing:0}50%{opacity:1;letter-spacing:2px}100%{opacity:.2;letter-spacing:0}}@media(max-width:700px){.map-loading-notice{width:152px!important;height:152px!important;min-width:152px!important}.map-loading-notice i{width:58px!important;height:58px!important;flex-basis:58px!important}.map-loading-notice span{bottom:24px!important}}@media(prefers-reduced-motion:reduce){.map-loading-notice,.map-loading-notice:before,.map-loading-notice:after,.map-loading-notice i,.map-loading-notice i:before,.map-loading-notice i:after,.map-loading-notice span:after{animation:none!important}}
.provider-active .scene-corner,.provider-active .scene-tools,.provider-active .scene-legend,.provider-active .compass{z-index:3}
.provider-active .scene-legend{bottom:30px;pointer-events:none}.provider-active .compass{display:none}
#mapProvider{background:var(--skin-color-196);color:var(--skin-color-197);border:1px solid var(--skin-color-198);border-radius:5px;padding:5px;font-size:14px;max-width:160px}
.provider-marker{position:relative;display:block;white-space:nowrap;border:1px solid var(--device-color);border-radius:6px;background:var(--skin-color-199);color:var(--skin-color-200);padding:7px 10px;font-size:14px;box-shadow:0 3px 14px var(--skin-color-201);cursor:pointer}
.provider-marker:after{content:'';position:absolute;width:9px;height:9px;background:var(--device-color);border:2px solid var(--skin-color-202);border-radius:50%;bottom:-9px;left:calc(50% - 5px)}
.provider-marker.selected{outline:2px solid var(--skin-color-203);background:var(--skin-color-204)}.provider-marker.stale{opacity:.6}
.amap-native-label{display:flex;flex-direction:column;gap:3px;pointer-events:none;white-space:nowrap;max-width:220px;padding:5px 9px;border:1px solid color-mix(in srgb,var(--mint) 58%,var(--border));border-radius:9px;background:color-mix(in srgb,var(--panel) 86%,transparent);box-shadow:0 0 12px color-mix(in srgb,var(--mint) 22%,transparent),0 3px 12px #0008;color:var(--mint);font-size:12px;font-weight:600;line-height:1.1;text-shadow:0 1px 3px #000;backdrop-filter:blur(3px)}.amap-native-label-name{display:block;overflow:hidden;text-overflow:ellipsis}.amap-native-label-detail{display:block;overflow:hidden;text-overflow:ellipsis;color:color-mix(in srgb,var(--text) 78%,var(--mint));font-size:10px;font-weight:500;line-height:1}.amap-native-label.poi{border-color:color-mix(in srgb,var(--amber) 62%,var(--border));box-shadow:0 0 12px color-mix(in srgb,var(--amber) 20%,transparent),0 3px 12px #0008;color:var(--amber)}.amap-native-label.poi .amap-native-label-detail{color:color-mix(in srgb,var(--text) 78%,var(--amber))}


#remoteWorkspace{flex:1;min-height:0;overflow:auto;padding:6px 0 12px}#remoteWorkspace[hidden],#remoteImplements[hidden],#remoteFilm[hidden]{display:none!important}
.remote-top{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:20px}.remote-top h2{font-size:26px;margin:4px 0}.remote-top p,.remote-card p,.remote-feedback p{color:var(--skin-color-205);line-height:1.6}.remote-top label{display:flex;flex-direction:column;gap:8px;min-width:250px}
#remoteWorkspace select,#remoteWorkspace input{background:var(--skin-color-206);color:var(--skin-color-207);border:1px solid var(--skin-color-208);border-radius:6px;padding:10px;font-size:16px;min-width:0}
.remote-telemetry{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:12px;margin-bottom:18px}.remote-telemetry>div{background:var(--skin-color-209);border:1px solid var(--skin-color-210);border-radius:8px;padding:14px}.remote-telemetry span{display:block;color:var(--skin-color-211);margin-bottom:8px}.remote-telemetry strong{font-size:20px;overflow-wrap:anywhere}
.remote-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px}.remote-card{padding:22px;min-width:0}.remote-card h2,.remote-feedback h2{font-size:18px;margin:0 0 8px}.remote-card p{margin:0 0 20px}.remote-pwm{display:grid;grid-template-columns:40px 55px minmax(65px,1fr) 55px;align-items:center;gap:8px;margin:18px 0}.remote-pwm input{text-align:center;font-variant-numeric:tabular-nums}
.remote-card button,.remote-actions button{border:1px solid var(--skin-color-212);background:var(--skin-color-213);color:var(--skin-color-214);border-radius:6px;padding:11px;min-height:44px;font-size:16px;cursor:pointer}.remote-card button:disabled{opacity:.4;cursor:not-allowed}.remote-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:18px 0}.remote-card .primary-button{background:var(--skin-color-215)}.remote-card .remote-stop{width:100%;background:var(--skin-color-216);border-color:var(--skin-color-217);font-size:20px;margin-bottom:14px}.remote-fields{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:20px 0}.remote-fields label{display:flex;flex-direction:column;gap:8px}.remote-feedback{margin-top:16px;padding:18px 22px}.remote-feedback p{margin:8px 0;overflow-wrap:anywhere}#remoteConfirmText{line-height:1.8;margin:20px 0}.topbar nav{flex-shrink:0}
@media(max-width:1100px){.remote-grid{grid-template-columns:1fr 1fr}.remote-card:last-child{grid-column:1/-1}.remote-top{flex-wrap:wrap}.topbar nav{gap:12px}}
@media(max-width:700px){.remote-grid{grid-template-columns:1fr}.remote-card:last-child{grid-column:auto}.remote-telemetry{grid-template-columns:1fr 1fr}.remote-top label{min-width:0;width:100%}.remote-card{padding:16px}.topbar nav{gap:16px}}

/* Keep the complete overview alongside a compact remote tab panel. */
/* Hide before the first paint, but keep map geometry available for initialization. */
body.permissions-loading .topbar nav,body.permissions-loading .metrics,body.permissions-loading .overview-workspace,body.permissions-loading #settingsButton{visibility:hidden!important;pointer-events:none!important}
body.permissions-loading .topbar nav *,body.permissions-loading .metrics *,body.permissions-loading .overview-workspace *,body.permissions-loading .overview-workspace *::before,body.permissions-loading .overview-workspace *::after{visibility:hidden!important}
.overview-workspace{display:flex;flex:1;min-height:0;min-width:0;gap:12px}.overview-workspace>.dashboard-grid{flex:1;min-width:0}
.overview-workspace>#remoteWorkspace{flex:0 0 340px;padding:16px;min-height:0;overflow:auto}
#remoteWorkspace .remote-top{display:flex;flex-direction:column;align-items:stretch;gap:10px;margin-bottom:14px}
#remoteWorkspace .remote-top h2{font-size:18px;margin:0}#remoteWorkspace .remote-top label{min-width:0;gap:6px}
#remoteWorkspace .remote-top .pill{align-self:flex-start}#remoteWorkspace .remote-telemetry{display:none}
#remoteWorkspace .remote-grid{display:block}#remoteWorkspace .remote-card{padding:14px 0 0;border:0;background:transparent;box-shadow:none}
#remoteWorkspace .remote-card[hidden]{display:none!important}#remoteWorkspace .remote-card h2{display:none}
#remoteWorkspace .remote-card p{font-size:14px;margin-bottom:12px}#remoteWorkspace input,#remoteWorkspace select{padding:8px;width:100%;box-sizing:border-box}
#remoteWorkspace .remote-pwm{grid-template-columns:32px 46px minmax(60px,1fr) 46px;gap:6px;margin:14px 0}
#remoteWorkspace .remote-pwm button{padding:8px 2px}#remoteWorkspace .remote-actions{gap:8px;margin:12px 0}
#remoteWorkspace .remote-feedback{margin-top:14px;padding:14px 0 0;border:0;border-top:1px solid var(--skin-color-210);background:transparent;box-shadow:none}
#remoteWorkspace .remote-feedback h2{font-size:16px}#remoteWorkspace .remote-feedback p{font-size:14px}
.remote-tabs{display:flex;gap:4px;border-bottom:1px solid var(--skin-color-218);padding-bottom:8px}.remote-tabs button{flex:1;background:var(--skin-color-219);color:var(--skin-color-220);border:1px solid transparent;border-radius:5px;padding:9px 4px;font-size:14px;cursor:pointer}.remote-tabs button[aria-selected=true]{background:var(--skin-color-221);color:var(--skin-color-222);border-color:var(--skin-color-223)}
@media(min-width:701px) and (max-width:1400px){.overview-workspace>#remoteWorkspace{flex-basis:300px;padding:12px}}
@media(max-width:1000px){body.remote-mode .overview-workspace{overflow:auto;flex-direction:column}body.remote-mode .overview-workspace>.dashboard-grid{flex:0 0 570px}body.remote-mode .overview-workspace>#remoteWorkspace{flex:0 0 auto;overflow:visible}}
@media(max-width:700px){.overview-workspace{display:flex;flex-direction:column;overflow:visible}.overview-workspace>.dashboard-grid{flex:auto!important}.overview-workspace>#remoteWorkspace{flex:auto;width:100%}}

.remote-search-count{font-size:14px;color:var(--skin-color-224)}
body.remote-mode .dashboard-grid>.fleet-panel{display:none!important}
@media(min-width:701px){
 body.remote-mode .overview-workspace>.dashboard-grid{grid-template-columns:clamp(180px,17vw,280px) minmax(0,1fr)!important;grid-template-rows:minmax(0,1fr) clamp(126px,21vh,205px)!important}
 body.remote-mode .dashboard-grid>.detail-panel{grid-area:1/1!important}
 body.remote-mode .dashboard-grid>.scene-panel{grid-area:1/2!important}
 body.remote-mode .dashboard-grid>.alerts-panel{grid-area:2/2!important}
 body.remote-mode .dashboard-grid>.connection-panel{grid-area:2/1!important}
 body.remote-mode .dashboard-grid .layout-handle{display:none}
}

#remoteWorkspace .remote-top{position:relative}
.remote-search-results{position:absolute;top:108px;left:0;right:0;z-index:20;max-height:280px;overflow-y:auto;background:var(--skin-color-225);border:1px solid var(--skin-color-226);border-radius:7px;box-shadow:0 12px 28px var(--skin-color-227);padding:4px}
.remote-search-option{padding:10px 8px;border-radius:4px;cursor:pointer;border-bottom:1px solid var(--skin-color-228)}.remote-search-option strong,.remote-search-option span{display:block;overflow-wrap:anywhere;font-size:14px}.remote-search-option span{color:var(--skin-color-229);margin-top:4px}.remote-search-option:hover,.remote-search-option.is-active{background:var(--skin-color-230)}.remote-search-option[aria-selected=true]{color:var(--skin-color-231)}.remote-search-results p{padding:8px;color:var(--skin-color-232);font-size:14px}

.card-disabled{display:none!important}.card-settings-dialog{max-height:85vh;overflow:auto}.card-settings-dialog p{color:var(--muted);line-height:1.6;font-size:14px}.card-setting-option{position:relative;display:flex;align-items:center;justify-content:space-between;min-height:52px;padding:10px 0;border-bottom:1px solid var(--border);gap:20px;font-size:16px;cursor:pointer}.card-setting-option input{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}.card-setting-option .activity-switch-track{flex:0 0 30px}.card-setting-option:has(input:checked) .activity-switch-track{background:var(--mint)}.card-setting-option:has(input:checked) .activity-switch-track:after{transform:translateX(12px);background:var(--panel)}.card-setting-option:has(input:focus-visible){outline:2px solid var(--mint);outline-offset:3px}.card-settings-dialog .dialog-title h2{margin:0}@media(max-width:700px){.topbar nav{gap:18px}.metrics{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
.reserve-panel{background:linear-gradient(145deg,color-mix(in srgb,var(--panel) 92%,#0b2638),color-mix(in srgb,var(--panel) 72%,#071019));border:1px solid color-mix(in srgb,var(--mint) 28%,var(--border));box-shadow:inset 0 0 22px #19d66b0a,0 0 18px #0003;overflow:hidden}.reserve-panel .panel-heading h2{display:flex;align-items:center;gap:7px}.server-status-body{padding:0;color:var(--muted)}.server-status-body p{margin:6px 0;line-height:1.3}.server-status-hero{display:flex;align-items:center;gap:10px;margin:0 0 6px}.server-orbit{width:52px;height:52px;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;border:1px solid color-mix(in srgb,var(--mint) 55%,transparent);border-radius:50%;box-shadow:0 0 16px #19d66b26,inset 0 0 12px #19d66b18}.server-orbit:before{content:'';position:absolute;inset:4px;border:1px dashed #19d66b66;border-radius:50%;animation:serverOrbit 8s linear infinite}.server-orbit i,.server-live-dot{width:5px;height:5px;border-radius:50%;background:var(--mint);box-shadow:0 0 8px var(--mint)}.server-orbit i{position:absolute;top:0;right:7px}.server-orbit b{font-size:16px;line-height:1;color:var(--text);font-variant-numeric:tabular-nums}.server-orbit small{font-size:7px;letter-spacing:1px;color:var(--mint);margin-top:3px}.server-signal{flex:1;min-width:0}.server-signal span,.server-status-stat span{font-size:10px;letter-spacing:1px;color:var(--muted)}.signal-chart{height:31px;margin-top:3px;position:relative;background:linear-gradient(180deg,#19d66b08,transparent);overflow:hidden}.signal-chart:after{content:"";position:absolute;inset:auto 0 5px;border-bottom:1px solid #19d66b22}.signal-chart svg{width:100%;height:100%;display:block}.signal-chart polyline{fill:none;stroke:var(--mint);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 3px #19d66b);stroke-dasharray:.12 .02;animation:signalFlow 2.4s linear infinite}.server-status-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 10px}.server-status-stat{min-width:0}.server-status-stat strong{display:block;margin-top:2px;color:var(--text);font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}.server-status-stat strong small{font-size:8px;color:var(--mint);margin-left:2px}.server-status-stat>i{display:block;height:3px;margin-top:3px;background:#102b37;border-radius:4px;overflow:hidden}.server-status-stat>i b{display:block;height:100%;background:linear-gradient(90deg,var(--mint),#6cf5d7);box-shadow:0 0 7px var(--mint)}.server-status-stat>small{display:block;margin-top:2px;font-size:7px;letter-spacing:.6px;color:var(--muted);white-space:nowrap}.server-status-foot{display:flex;justify-content:space-between;gap:6px;margin-top:6px;padding-top:5px;border-top:1px solid #ffffff0d;font-size:8px;letter-spacing:.4px;white-space:nowrap}.server-status-foot span:first-child{color:var(--mint)}.server-live-dot{display:inline-block;margin-right:3px;vertical-align:middle}.server-status-ok{color:var(--mint)!important}.server-status-error{color:var(--amber)!important}@keyframes serverOrbit{to{transform:rotate(360deg)}}@keyframes signalFlow{to{stroke-dashoffset:-0.1}}
body.remote-mode .reserve-panel,body.twin-mode .reserve-panel,body.history-mode .reserve-panel{display:none!important}

@media(min-width:701px){
 .overview-panel-resize-handle{display:flex;position:absolute;z-index:80;top:-12px;left:0;width:100%;height:24px;align-items:center;justify-content:center;border:0;border-radius:999px;background:transparent;cursor:ns-resize;touch-action:none;user-select:none;-webkit-user-select:none;pointer-events:auto;opacity:.76;transition:opacity .2s,background .2s}
 .overview-panel-resize-handle::after{position:absolute;right:0;bottom:0;left:0;height:12px;content:"";border-radius:0 0 999px 999px;background:transparent;transition:background .2s}
 .overview-panel-resize-handle span{position:relative;z-index:1;display:block;width:34px;height:3px;border-radius:99px;background:var(--mint);box-shadow:0 0 10px color-mix(in srgb,var(--mint) 60%,transparent)}
 .overview-panel-resize-handle:hover,body.overview-column-resizing .overview-panel-resize-handle{opacity:1}.overview-panel-resize-handle:hover::after,body.overview-column-resizing .overview-panel-resize-handle::after{background:color-mix(in srgb,var(--mint) 16%,var(--panel))}
 body.overview-column-resizing{user-select:none;cursor:ns-resize}
}
.overview-panel-resize-handle{display:none}@media(min-width:701px){body:not(.remote-mode):not(.twin-mode):not(.history-mode) .overview-panel-resize-handle{display:flex}}
/* One overview layout owner for full and partial permissions. Paired cards
   remain grid items, anchored to opposite ends of their own column. */
@media(min-width:701px){
 .dashboard-grid.overview-managed{--overview-gap:clamp(8px,1vw,16px);gap:var(--overview-gap)}
 .dashboard-grid.overview-managed>.panel{box-sizing:border-box;min-height:0;min-width:0;transform:none}
 .dashboard-grid.overview-managed>.reserve-panel,.dashboard-grid.overview-managed>.connection-panel,.dashboard-grid.overview-managed>.alerts-panel{overflow:visible}
 .dashboard-grid.overview-managed>.overview-resize-disabled>.overview-panel-resize-handle{display:none!important}
}
/* Spacious workspace settings and the account-specific masthead. */
.card-settings-dialog{width:min(1000px,92vw);height:min(920px,92vh);max-height:92vh;padding:32px;overflow:auto}.settings-tabs{display:flex;gap:12px;border-bottom:1px solid var(--border);margin:24px 0}.settings-tabs button{padding:14px 24px;border-bottom:3px solid transparent;color:var(--muted)}.settings-tabs button[aria-selected=true]{border-color:var(--mint);color:var(--mint)}.card-settings-options{display:grid;grid-template-columns:1fr 1fr;gap:10px 32px}.skin-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-top:24px}.skin-choice{border:1px solid var(--border);padding:12px;border-radius:10px;text-align:left;background:var(--panel);line-height:2}.skin-choice[aria-pressed=true]{outline:2px solid var(--swatch);outline-offset:2px}.skin-preview{display:grid;grid-template-columns:1fr 2fr;gap:6px;padding:10px;height:90px;border-radius:6px;background:color-mix(in srgb,var(--swatch) 12%,var(--skin-color-233));margin-bottom:8px}.skin-preview i{display:block;background:color-mix(in srgb,var(--swatch) 24%,var(--skin-color-233));border:1px solid color-mix(in srgb,var(--swatch) 50%,transparent);border-radius:3px}.skin-preview i:last-child{grid-column:1/-1;height:12px;background:var(--swatch)}#customBrandTitle{display:block;width:100%;padding:14px;margin-top:12px;border:1px solid var(--border);background:var(--bg);border-radius:6px;font-size:20px}#settings-title .setting-actions{margin-top:24px}#settings-title .primary-button{width:auto;padding:12px 30px}.topbar .brand{min-width:0;flex:0 1 auto}.topbar .brand strong{max-width:none;font-size:inherit;white-space:nowrap}.topbar .brand #brandTitle{display:block;font-size:clamp(24px,2.05vw,40px);line-height:1.1;font-weight:600;max-width:32vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topbar nav{flex-shrink:0}.header-tools{flex-shrink:0}@media(max-width:1250px){.topbar .brand #brandTitle{font-size:20px}}@media(min-width:701px) and (max-width:1000px){.topbar .brand #brandTitle{font-size:17px;max-width:20vw}.settings-tabs button{padding:12px 18px}}@media(max-width:700px){.topbar .brand #brandTitle{font-size:18px;max-width:42vw}.card-settings-dialog{padding:20px}.skin-grid,.card-settings-options{grid-template-columns:1fr 1fr}.settings-tabs{gap:4px}.settings-tabs button{flex:1;padding:12px 8px}}

/* Compact status and actions row above the metrics. */
.workspace-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px;min-height:36px}.workspace-heading .notice{flex:1 1 auto;min-width:0;margin:0;font-size:14px;line-height:1.5;overflow-wrap:anywhere}.workspace-heading .notice:before{flex-shrink:0}.workspace-heading .source-controls{flex:0 0 auto;gap:12px;max-width:none;align-items:center}.workspace-heading .subtle-button{padding:7px 10px}@media(max-width:1000px){.workspace-heading{flex-wrap:wrap;gap:8px}.workspace-heading .notice{flex-basis:100%}.workspace-heading .source-controls{flex-wrap:wrap;width:100%;justify-content:flex-end}}@media(max-width:700px){.workspace-heading{margin-bottom:12px}.workspace-heading .source-controls{justify-content:flex-start;gap:8px}}

/* Replay uses its own source card, leaving the map clear of the real-time device queue. */
.replay-panel{display:none;min-width:0;overflow:auto;padding:14px;background:var(--panel);border:1px solid var(--border);border-radius:10px}.replay-source-tabs{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:8px 0 16px;padding:4px;border:1px solid var(--border);border-radius:8px;background:color-mix(in srgb,var(--bg) 78%,transparent)}.replay-source-tabs button{min-height:36px;border:1px solid transparent;border-radius:5px;background:transparent;color:var(--muted);font-size:14px;cursor:pointer}.replay-source-tabs button[aria-selected=true]{border-color:color-mix(in srgb,var(--mint) 45%,var(--border));background:color-mix(in srgb,var(--mint) 13%,var(--panel));color:var(--mint)}.replay-query{display:flex;flex-direction:column;gap:12px}.replay-query label{display:flex;flex-direction:column;gap:6px;color:var(--muted);font-size:14px}.replay-query select,.replay-query input{width:100%;box-sizing:border-box;padding:10px;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--text);font-size:14px}.replay-query .primary-button{min-height:42px;margin-top:4px}.replay-query-hint{margin:0;color:var(--muted);font-size:14px;line-height:1.6}.replay-panel .panel-heading{padding:0 0 10px}
body.history-mode .dashboard-grid>.fleet-panel,body.history-mode .dashboard-grid>.detail-panel,body.history-mode .dashboard-grid>.alerts-panel,body.history-mode .dashboard-grid>.connection-panel,body.history-mode .dashboard-grid>.reserve-panel{display:none!important}body.history-mode .dashboard-grid>.replay-panel{display:flex;flex-direction:column}
@media(min-width:701px){body.history-mode .overview-workspace>.dashboard-grid{grid-template-columns:clamp(240px,20vw,340px) minmax(0,1fr)!important;grid-template-rows:minmax(0,1fr)!important}body.history-mode .dashboard-grid>.replay-panel{grid-area:1/1!important}body.history-mode .dashboard-grid>.scene-panel{grid-area:1/2!important}body.history-mode .dashboard-grid .layout-handle{display:none}}@media(max-width:700px){body.history-mode .dashboard-grid>.replay-panel{display:flex;order:-1}}

/* Custom backdrop applies only to the fog-gray skin. */
:root[data-theme=gold] body{background:#adb1b6}

.account-button>#accountAvatar{width:36px;height:36px;flex-shrink:0;border-radius:50%;object-fit:cover;border:1px solid var(--border);background:var(--panel)}

.parameter-device-card{padding:16px;margin-top:18px;border:1px solid var(--border)!important;border-radius:8px!important;background:var(--panel)!important}.parameter-device-card h2{font-size:18px;margin:0 0 16px}.parameter-device-card label{display:block;margin-top:12px;color:var(--muted)}.parameter-device-card input,.parameter-device-card select{display:block;margin-top:6px;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text)}#parameterMatches{max-height:180px;overflow:auto;border:1px solid var(--border);background:var(--panel)}#parameterMatches button{display:block;width:100%;padding:10px;text-align:left}#parameterMatches button:hover{background:var(--bg);color:var(--mint)}.parameter-status{font-size:14px;color:var(--muted)}.parameter-dialog{width:min(1160px,94vw);max-height:90vh;overflow:auto;padding:28px}.parameter-target,.parameter-feedback{color:var(--muted);line-height:1.6}.parameter-toolbar,.parameter-nodes{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:12px 0}.parameter-toolbar [aria-pressed=true],.parameter-nodes [aria-pressed=true]{border-color:var(--mint);color:var(--mint)}.parameter-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.parameter-field{padding:14px;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.parameter-field strong,.parameter-field small{display:block;margin-bottom:8px;overflow-wrap:anywhere}.parameter-field small{font-size:14px;color:var(--muted);line-height:1.5}.parameter-dialog input,.parameter-dialog select{min-width:0;padding:9px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:5px}.parameter-field input:not([type=checkbox]),.parameter-field select{width:100%}.parameter-dialog input[type=checkbox]{accent-color:var(--mint);width:20px;height:20px}.parameter-footer{padding-top:20px;position:sticky;bottom:-28px;background:var(--panel);padding-bottom:20px}.parameter-footer button{width:auto;margin-left:auto}.implement-action{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) auto auto;gap:8px;align-items:end;margin:10px 0}.implement-action label input{width:100%;display:block}.implement-sequence{border:1px solid var(--border);padding:12px;border-radius:8px;margin:12px 0}@media(max-width:700px){.parameter-fields{grid-template-columns:1fr}.implement-action{grid-template-columns:1fr 1fr}.parameter-dialog{padding:18px}}

/* Independent parameter panel alongside the remote-control panel. */
.overview-workspace>#parameterWorkspace{display:none;margin:0;min-width:0;flex:0 0 280px;padding:16px;overflow:auto;scrollbar-width:thin}body.remote-mode .overview-workspace>#parameterWorkspace{display:block}#parameterWorkspace input,#parameterWorkspace select{width:100%;padding:8px;box-sizing:border-box}#parameterWorkspace .parameter-open{width:100%;margin-top:8px}#parameterWorkspace h2{margin-top:0}@media(min-width:1001px) and (max-width:1400px){.overview-workspace>#parameterWorkspace{flex-basis:240px;padding:12px}}@media(max-width:1000px){body.remote-mode .overview-workspace>#parameterWorkspace{flex:0 0 auto;overflow:visible;width:100%;min-height:260px}}

.remote-left-stack{display:none;min-height:0;min-width:0}body.remote-mode .remote-left-stack{display:flex;flex-direction:column;gap:12px;overflow:auto;scrollbar-width:thin}body.remote-mode .remote-left-stack>.detail-panel{flex:1 1 0;min-height:180px;overflow:auto}body.remote-mode .remote-left-stack>#parameterWorkspace{display:block;flex:0 0 auto;margin:0;padding:12px;overflow:visible}body.remote-mode .remote-left-stack .telemetry-chart,body.remote-mode .remote-left-stack .detail-note{display:none}body.remote-mode .remote-left-stack #parameterWorkspace h2{font-size:16px;margin-bottom:10px}body.remote-mode .remote-left-stack #parameterWorkspace label{margin-top:8px}body.remote-mode .remote-left-stack .parameter-status{margin:8px 0}body.remote-mode .remote-left-stack #parameterMatches{max-height:140px}@media(min-width:701px){body.remote-mode .dashboard-grid>.remote-left-stack{grid-area:1/1!important;order:0}}@media(max-width:700px){body.remote-mode .remote-left-stack{order:1;overflow:visible}body.remote-mode .remote-left-stack>.detail-panel{flex:0 0 auto;max-height:300px}}

body.remote-mode .remote-left-stack>.detail-panel{order:0!important}body.remote-mode .remote-left-stack>#parameterWorkspace{order:1!important}

/* User-selectable compact workspace for 14-inch control stations. */
.layout-mode-options{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:22px}.layout-mode-options button{min-height:132px;padding:20px;text-align:left;border:1px solid var(--border);border-radius:10px;background:var(--panel);display:flex;flex-direction:column;justify-content:center;gap:10px;transition:border-color .2s,background .2s,box-shadow .2s}.layout-mode-options button strong{font-size:18px;font-weight:600}.layout-mode-options button span{font-size:14px;line-height:1.65;color:var(--muted)}.layout-mode-options button[aria-pressed=true]{border-color:var(--mint);background:color-mix(in srgb,var(--mint) 10%,var(--panel));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mint) 40%,transparent)}
.replay-display-setting{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-top:18px;padding:16px 18px;border:1px solid var(--border);border-radius:10px;background:color-mix(in srgb,var(--panel) 82%,transparent)}.replay-display-setting>div strong,.replay-display-setting>div span{display:block}.replay-display-setting>div strong{font-size:16px;font-weight:600}.replay-display-setting>div span{margin-top:5px;color:var(--muted);font-size:14px;line-height:1.5}.replay-trail-switch{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:50px;min-height:36px;cursor:pointer}.replay-trail-switch input{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}.replay-trail-switch .activity-switch-track{flex:0 0 30px}.replay-trail-switch:has(input:checked) .activity-switch-track{background:var(--mint)}.replay-trail-switch:has(input:checked) .activity-switch-track:after{transform:translateX(12px);background:var(--panel)}.replay-trail-switch:has(input:focus-visible){outline:2px solid var(--mint);outline-offset:3px}


#parameterMatches button.is-active,#parameterMatches button[aria-selected=true]{background:var(--bg);color:var(--mint)}

#remoteWorkspace .remote-device-picker{display:flex;align-items:center;gap:8px;min-width:0}#remoteWorkspace .remote-device-picker .remote-search-count{flex:none;white-space:nowrap;font-size:14px}#remoteWorkspace .remote-device-picker input{flex:1;min-width:0;width:0;margin:0}

#remoteWorkspace .remote-device-picker{display:flex;flex-direction:column;align-items:stretch;gap:8px}#remoteWorkspace .remote-device-caption{display:flex;align-items:center;gap:8px}#remoteWorkspace .remote-device-caption label{margin:0;font-size:14px;color:var(--muted)}#remoteWorkspace .remote-device-picker input{flex:none;width:100%;min-width:0}

#remoteWorkspace .relay-channel-select{appearance:none;min-height:42px;border:1px solid var(--border);border-radius:8px;background-color:var(--bg);background-image:linear-gradient(45deg,transparent 50%,var(--mint) 50%),linear-gradient(135deg,var(--mint) 50%,transparent 50%);background-position:calc(100% - 17px) 18px,calc(100% - 12px) 18px;background-size:5px 5px;background-repeat:no-repeat;color:var(--text);padding:10px 34px 10px 12px;font-size:16px;font-variant-numeric:tabular-nums;cursor:pointer}#remoteWorkspace .relay-channel-select:hover,#remoteWorkspace .relay-channel-select:focus{border-color:var(--mint)}#remoteWorkspace .relay-channel-select option{background:var(--panel);color:var(--text)}

.replay-combobox{position:relative;display:block}.replay-combobox>select{display:none}.replay-combobox input{width:100%;box-sizing:border-box;padding-right:42px}.replay-combobox>button{position:absolute;top:50%;right:11px;width:22px;height:22px;padding:0;border:0;background:transparent;transform:translateY(-50%);cursor:pointer}.replay-combobox>button:after{content:"";position:absolute;top:7px;left:6px;width:7px;height:7px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);transition:transform .18s}.replay-combobox>button[aria-expanded=true]:after{top:10px;transform:rotate(225deg)}.replay-combobox>button:disabled{cursor:default;opacity:.45}#replayDeviceMatches,#replayPlotMatches,#replayTaskMatches{position:absolute;z-index:60;top:calc(100% + 5px);left:0;right:0;max-height:220px;overflow:auto;padding:4px;border:1px solid var(--border);border-radius:8px;background:var(--panel);box-shadow:0 14px 30px #0005}#replayDeviceMatches[hidden],#replayPlotMatches[hidden],#replayTaskMatches[hidden]{display:none}#replayDeviceMatches button,#replayPlotMatches button,#replayTaskMatches button{display:block;width:100%;padding:9px 10px;border:0;border-radius:5px;background:transparent;color:var(--text);text-align:left;cursor:pointer}#replayDeviceMatches button:hover,#replayDeviceMatches button[aria-selected=true],#replayPlotMatches button:hover,#replayPlotMatches button[aria-selected=true],#replayTaskMatches button:hover,#replayTaskMatches button[aria-selected=true]{background:color-mix(in srgb,var(--mint) 13%,transparent)}#replayDeviceMatches strong,#replayDeviceMatches span{display:block;font-size:14px;overflow-wrap:anywhere}#replayDeviceMatches span,#replayDeviceMatches p,#replayPlotMatches p,#replayTaskMatches p{margin:3px 0 0;color:var(--muted);font-size:14px}#replayDeviceMatches p,#replayPlotMatches p,#replayTaskMatches p{padding:8px 10px}#replayPlotMatches .replay-load-inline{margin:2px 0 0;padding:8px 10px;color:var(--muted);font-size:13px;text-align:center}
.replay-device-combobox{position:relative;display:block}.replay-device-combobox input{width:100%;box-sizing:border-box;padding-right:42px}.replay-device-combobox>button{position:absolute;top:50%;right:11px;width:22px;height:22px;padding:0;border:0;background:transparent;transform:translateY(-50%);cursor:pointer}.replay-device-combobox>button:after{content:"";position:absolute;top:7px;left:6px;width:7px;height:7px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);transition:transform .18s}.replay-device-combobox>button[aria-expanded=true]:after{top:10px;transform:rotate(225deg)}

#remoteWorkspace .remote-card p.relay-config-hint{position:relative;top:14px;margin-bottom:26px}

/* Device replay keeps the time range at the top, with trajectories shown before device search. */
#replayPanel{overflow-x:hidden}#replayDevicePane{min-width:0}#replayDevicePane .replay-time-range{display:grid;grid-template-columns:minmax(0,1fr);gap:10px}#replayDevicePane input{min-width:0}#replayDeviceMatches.replay-device-list{position:static;display:flex;flex-direction:column;gap:6px;margin-top:8px;max-height:min(430px,calc(100vh - 470px));overflow:auto;padding:2px;background:transparent;border:0;border-radius:0;box-shadow:none}#replayDeviceMatches.replay-device-list button.replay-device-card{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 10px;align-items:center;flex:0 0 auto;min-width:0;min-height:58px;padding:10px 12px 10px 15px;border:1px solid color-mix(in srgb,var(--border) 90%,transparent);border-radius:7px;background:color-mix(in srgb,var(--bg) 65%,transparent);color:var(--text);text-align:left;line-height:1.35}#replayDeviceMatches.replay-device-list button.replay-device-card:before{content:"";position:absolute;left:0;top:11px;bottom:11px;width:3px;border-radius:3px;background:var(--muted);opacity:.7}#replayDeviceMatches.replay-device-list button.replay-device-card.online:before{background:var(--mint);box-shadow:0 0 9px color-mix(in srgb,var(--mint) 75%,transparent)}#replayDeviceMatches.replay-device-list button.replay-device-card[aria-selected=true]{border-color:color-mix(in srgb,var(--mint) 70%,var(--border));background:color-mix(in srgb,var(--mint) 12%,var(--bg))}#replayDeviceMatches.replay-device-list strong{grid-column:1;font-size:14px;color:var(--text)}#replayDeviceMatches.replay-device-list span{grid-column:1;font-size:14px;color:var(--muted);margin:0}#replayDeviceMatches.replay-device-list em{grid-column:2;grid-row:1/3;font-style:normal;font-size:14px;color:var(--muted)}#replayDeviceMatches.replay-device-list .online em{color:var(--mint)}#replayDeviceMatches.replay-device-list p{margin:0;padding:14px 10px;color:var(--muted)}
#replayDevicePane .replay-device-search-field{position:relative;z-index:65;display:flex;flex:1;min-height:0;flex-direction:column}#replayDevicePane .replay-device-search-field>label{display:flex;flex-direction:column;gap:6px}
body.history-mode .replay-panel>#replayDevicePane:not([hidden]){flex:1;min-height:0}#replayDeviceMatches.replay-device-list{flex:1;min-height:0;max-height:none;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--mint) 65%,transparent) transparent}#replayDeviceMatches.replay-device-list::-webkit-scrollbar{width:8px}#replayDeviceMatches.replay-device-list::-webkit-scrollbar-track{margin:4px 0;border-radius:8px;background:color-mix(in srgb,var(--bg) 80%,transparent)}#replayDeviceMatches.replay-device-list::-webkit-scrollbar-thumb{border:2px solid transparent;border-radius:8px;background:color-mix(in srgb,var(--mint) 65%,var(--muted));background-clip:padding-box}#replayDeviceMatches.replay-device-list::-webkit-scrollbar-thumb:hover{background-color:var(--mint)}

.topbar nav .nav-button{font-size:16px}

/* Activity controls: large clickable switches, shared skin colors. */
.activity-tools{gap:8px;flex-wrap:wrap}
.activity-tools .activity-switch{position:relative;display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:6px 10px;border:1px solid var(--border);border-radius:10px;background:var(--panel);color:var(--muted);font-size:14px;line-height:22px;white-space:nowrap;cursor:pointer;user-select:none;transition:background .18s,border-color .18s,color .18s}
.activity-switch input{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}
.activity-switch-track{position:relative;display:block;flex:0 0 30px;width:30px;height:18px;border-radius:20px;background:color-mix(in srgb,var(--muted) 35%,var(--panel));transition:background .18s}
.activity-switch-track:after{content:"";position:absolute;top:3px;left:3px;width:12px;height:12px;border-radius:50%;background:var(--text);box-shadow:0 1px 3px #0003;transition:transform .18s,background .18s}
.activity-tools .activity-switch:has(input:checked){color:var(--text);border-color:color-mix(in srgb,var(--mint) 45%,var(--border));background:color-mix(in srgb,var(--mint) 9%,var(--panel))}
.activity-switch input:checked+.activity-switch-track{background:var(--mint)}
.activity-switch input:checked+.activity-switch-track:after{transform:translateX(12px);background:var(--panel)}
.activity-tools .activity-switch:hover{border-color:var(--mint);color:var(--text)}
.activity-switch:has(input:focus-visible){outline:2px solid var(--mint);outline-offset:3px}
@media(pointer:coarse){.activity-tools .activity-switch{min-height:44px}}
@media(prefers-reduced-motion:reduce){.activity-tools .activity-switch,.activity-switch-track,.activity-switch-track:after{transition:none}}

/* Keep the compass clear of the enlarged map controls. */
.viewport .compass{right:84px}

.amap-twin-canvas{position:absolute;inset:0;pointer-events:none;z-index:0}

/* Unframed activity switches retain the full label hit area. */
.activity-tools .activity-switch,.activity-tools .activity-switch:has(input:checked),.activity-tools .activity-switch:hover{border-color:transparent;background:transparent}

/* Floating telemetry nameplates; the renderer keeps them above each model. */
.map-label,.provider-marker{--label-accent:var(--device-color,var(--mint));padding:9px 16px 9px 22px;border:1px solid color-mix(in srgb,var(--label-accent) 65%,transparent);border-radius:3px 12px 3px 12px;background:linear-gradient(115deg,color-mix(in srgb,var(--label-accent) 15%,var(--panel)),var(--panel));color:var(--text);font-size:14px;font-weight:600;letter-spacing:1px;line-height:1.4;box-shadow:0 5px 18px #0004,inset 0 1px 0 color-mix(in srgb,var(--label-accent) 20%,transparent);text-shadow:0 0 10px color-mix(in srgb,var(--label-accent) 25%,transparent);max-width:260px;white-space:nowrap}
.map-label:before,.provider-marker:before{content:"";position:absolute;left:9px;top:50%;width:4px;height:12px;transform:translateY(-50%);background:var(--label-accent);box-shadow:0 0 8px color-mix(in srgb,var(--label-accent) 65%,transparent)}
.map-label:after,.provider-marker:after{content:"";position:absolute;left:50%;bottom:-14px;width:1px;height:13px;border:0;border-radius:0;transform:translateX(-50%);background:linear-gradient(var(--label-accent),transparent);box-shadow:none}
.map-label.selected,.provider-marker.selected{outline:none;border-color:var(--label-accent);color:var(--text);background:linear-gradient(115deg,color-mix(in srgb,var(--label-accent) 25%,var(--panel)),var(--panel));box-shadow:0 0 0 2px color-mix(in srgb,var(--label-accent) 12%,transparent),0 6px 22px #0005}
.map-label.offline,.provider-marker.stale{--label-accent:var(--muted);color:var(--muted);opacity:.8}
.map-label:hover,.provider-marker:hover{filter:brightness(1.15)}

.provider-marker{transform:translateX(-50%)}

.provider-label-anchor{position:relative;width:0;height:0}
.provider-label-anchor .provider-marker{position:absolute;left:0;bottom:0;transform:translateX(-50%)}
.map-label:after,.provider-marker:after{height:32px;bottom:-33px;background:linear-gradient(var(--label-accent) 70%,transparent)}
.route-terminal{position:absolute;z-index:4;display:flex;align-items:center;gap:7px;transform:translate(-50%,calc(-100% - 30px));padding:7px 11px 7px 7px;border:1px solid color-mix(in srgb,var(--terminal-color) 72%,#fff);border-radius:5px 13px 5px 13px;background:linear-gradient(120deg,color-mix(in srgb,var(--terminal-color) 18%,#f7fcff),color-mix(in srgb,var(--terminal-color) 7%,#fff));color:#102b38;font-size:14px;font-weight:700;letter-spacing:.5px;white-space:nowrap;box-shadow:0 7px 22px #07182138,inset 0 1px 0 #fff}.route-terminal:after{content:"";position:absolute;left:50%;bottom:-30px;width:1px;height:29px;background:linear-gradient(var(--terminal-color) 0 72%,color-mix(in srgb,var(--terminal-color) 35%,transparent));box-shadow:0 0 10px var(--terminal-color)}.route-terminal b{display:grid;width:22px;height:22px;place-items:center;border-radius:4px;background:var(--terminal-color);color:#07131a;font-size:14px;box-shadow:0 0 14px color-mix(in srgb,var(--terminal-color) 65%,transparent)}.route-terminal.start{--terminal-color:#24c995}.route-terminal.end{--terminal-color:#f35f6d}

/* Device nameplates follow the selected skin; telemetry colors remain on the model. */
.map-label,.provider-marker{--label-accent:var(--mint)}
.map-label.offline,.provider-marker.stale{--label-accent:var(--muted)}

/* Full-height twin scene with a floating telemetry subtitle. */
/* The twin view keeps the same device-switching workflow as replay. */
body.twin-mode .detail-panel,body.twin-mode .alerts-panel,body.twin-mode .connection-panel{display:none!important}
body.twin-mode .dashboard-grid{grid-template-rows:minmax(0,1fr)!important}
body.twin-mode .scene-panel{min-height:0}
@media(min-width:701px){
body.twin-mode .dashboard-grid{grid-template-columns:clamp(180px,18vw,310px) minmax(0,1fr)!important}
 body.twin-mode .fleet-panel:not(.card-disabled){display:flex!important;grid-area:1/1!important}
 body.twin-mode .scene-panel{grid-area:1/2!important}
 body.twin-mode .dashboard-grid:has(>.fleet-panel.card-disabled){grid-template-columns:minmax(0,1fr)!important}body.twin-mode .dashboard-grid:has(>.fleet-panel.card-disabled)>.scene-panel{grid-area:1/1!important}
}
body.twin-mode .scene-viewport{min-height:0}
.twin-subtitles{position:absolute;z-index:5;bottom:10px;left:50%;transform:translateX(-50%);width:calc(100% - 48px);max-width:1400px;display:flex;align-items:center;gap:16px;padding:15px 22px;border:1px solid color-mix(in srgb,var(--mint) 42%,transparent);border-radius:6px 20px 6px 20px;background:linear-gradient(115deg,color-mix(in srgb,var(--panel) 87%,transparent),color-mix(in srgb,var(--panel) 65%,transparent));backdrop-filter:blur(16px);box-shadow:0 8px 32px #0005,inset 0 1px 0 color-mix(in srgb,var(--mint) 20%,transparent);pointer-events:none;color:var(--text)}
body:not(.twin-mode) .twin-subtitles{display:none}
.subtitle-lamp{flex:0 0 4px;height:24px;border-radius:3px;background:var(--mint);box-shadow:0 0 12px var(--mint)}
.subtitle-viewport{overflow:hidden;flex:1;min-width:0}
.subtitle-text{width:max-content;min-width:100%;font-size:22px;line-height:1.5;letter-spacing:.5px;white-space:nowrap;font-variant-numeric:tabular-nums}
.twin-subtitles.is-warning{color:#ff777d;border-color:#ff777d70}
.twin-subtitles.is-warning .subtitle-lamp{background:#ff777d;box-shadow:0 0 12px #ff777d}
body.twin-mode .scene-legend,body.twin-mode .satellite-credit{bottom:94px}
body.twin-mode .scene-instructions{display:none}
@keyframes subtitle-scroll{0%,12%{transform:translateX(0)}88%,100%{transform:translateX(var(--subtitle-travel))}}
@media(max-width:700px){.twin-subtitles{width:calc(100% - 20px);padding:12px;gap:10px}body.twin-mode .scene-panel{min-height:400px}}
@media(prefers-reduced-motion:reduce){.subtitle-text{animation:none!important;white-space:normal;width:auto;overflow-wrap:anywhere}.twin-subtitles{max-height:35%;overflow:auto;pointer-events:auto}}

/* Lighter, borderless map subtitle overlay. */
.twin-subtitles,.twin-subtitles.is-warning{border:0;background:linear-gradient(115deg,color-mix(in srgb,var(--panel) 48%,transparent),color-mix(in srgb,var(--panel) 30%,transparent));box-shadow:0 5px 20px #0002}

.twin-subtitles{border-radius:999px}

/* Fleet availability is deliberately visible at a glance, even when cards are not selected. */
.device-card{position:relative;transition:background .18s ease,border-color .18s ease,opacity .18s ease}
.device-card.online{border-color:color-mix(in srgb,var(--mint) 26%,transparent);background:linear-gradient(90deg,color-mix(in srgb,var(--mint) 10%,transparent),transparent 72%)}
.device-card.online:before{content:"";position:absolute;inset:9px auto 9px 0;width:3px;border-radius:0 3px 3px 0;background:var(--mint);box-shadow:0 0 12px color-mix(in srgb,var(--mint) 80%,transparent)}
.device-card.offline{opacity:.62;background:color-mix(in srgb,var(--panel) 88%,var(--muted));border-color:color-mix(in srgb,var(--muted) 22%,transparent)}
.device-card.offline:before{content:"";position:absolute;inset:11px auto 11px 0;width:3px;border-radius:0 3px 3px 0;background:var(--muted)}
.device-card.offline .device-glyph{filter:grayscale(1);opacity:.72}
.device-card.offline .device-card-bottom{color:var(--muted)}
.device-card .status.online,.device-card .status.offline{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border:1px solid;border-radius:999px;font-size:14px;font-weight:600;line-height:1;letter-spacing:.4px}
.device-card .status.online{color:var(--mint);border-color:color-mix(in srgb,var(--mint) 58%,transparent);background:color-mix(in srgb,var(--mint) 12%,transparent);box-shadow:0 0 12px color-mix(in srgb,var(--mint) 13%,transparent)}
.device-card .status.offline{color:var(--muted);border-color:color-mix(in srgb,var(--muted) 38%,transparent);background:color-mix(in srgb,var(--muted) 10%,transparent)}
.device-card .status.online i,.device-card .status.offline i{display:block;width:6px;height:6px;border-radius:50%;background:currentColor}
.device-card .status.online i{box-shadow:0 0 9px currentColor;animation:device-online-pulse 1.8s ease-in-out infinite}
.device-card.selected{opacity:1}
@keyframes device-online-pulse{50%{opacity:.42;transform:scale(.72)}}
@media(prefers-reduced-motion:reduce){.device-card .status.online i{animation:none}}

.profile-summary{display:flex;align-items:center;gap:18px;margin-top:22px;padding:18px;border:1px solid var(--border);border-radius:12px;background:color-mix(in srgb,var(--panel) 82%,var(--bg))}.profile-summary img{width:76px;height:76px;flex:0 0 76px;object-fit:cover;border:2px solid color-mix(in srgb,var(--mint) 55%,transparent);border-radius:50%;box-shadow:0 0 16px color-mix(in srgb,var(--mint) 18%,transparent)}.profile-summary div{display:flex;min-width:0;flex:1;flex-direction:column;gap:7px}.profile-summary strong{font-size:20px;font-weight:500;overflow-wrap:anywhere}.profile-summary span{color:var(--muted);font-size:14px}.profile-editor{display:flex;gap:28px;align-items:flex-start;margin-top:22px}.profile-avatar-editor{position:relative;isolation:isolate;display:flex;flex:0 0 126px;width:126px;height:126px;overflow:hidden;align-items:center;justify-content:center;border:2px solid color-mix(in srgb,var(--mint) 66%,var(--border));border-radius:50%;background:var(--bg);box-shadow:0 0 20px color-mix(in srgb,var(--mint) 20%,transparent);cursor:pointer}.profile-avatar-editor img{width:100%;height:100%;object-fit:cover}.profile-avatar-editor span{position:absolute;z-index:1;bottom:10px;left:50%;width:max-content;padding:7px 13px;transform:translateX(-50%);border:1px solid color-mix(in srgb,var(--mint) 45%,var(--border));border-radius:999px;background:color-mix(in srgb,var(--panel) 92%,var(--bg));box-shadow:0 4px 12px rgb(0 0 0/.22);color:var(--text);font-size:14px;line-height:1;white-space:nowrap}.profile-avatar-editor input{position:absolute;z-index:2;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.profile-fields{flex:1;min-width:0}.profile-fields>label{display:block;color:var(--muted);margin-bottom:8px}.profile-fields input{display:block;width:100%;padding:13px;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--text);font-size:16px}.profile-fields p{margin:10px 0 18px}.profile-fields .primary-button{width:auto;padding:12px 24px}.profile-avatar-editor:has(input:focus-visible){outline:2px solid var(--mint);outline-offset:3px}@media(max-width:600px){.profile-summary{align-items:flex-start;flex-wrap:wrap}.profile-summary button{width:100%}.profile-editor{flex-direction:column;gap:18px}.profile-avatar-editor{flex-basis:108px;width:108px;height:108px}.profile-fields{width:100%}}
.profile-cropper{display:grid;grid-template-columns:auto minmax(180px,1fr);gap:12px 20px;align-items:center;margin-top:20px;padding:18px;border:1px solid color-mix(in srgb,var(--mint) 35%,var(--border));border-radius:12px;background:color-mix(in srgb,var(--mint) 6%,var(--panel))}.profile-cropper>div{grid-column:1/-1;display:flex;flex-direction:column;gap:5px}.profile-cropper>div span{color:var(--muted);font-size:14px}.profile-cropper canvas{width:160px;height:160px;border-radius:8px;cursor:grab;touch-action:none;background:#091018}.profile-cropper canvas:active{cursor:grabbing}.profile-zoom{display:flex;align-items:center;gap:10px;color:var(--muted)}.profile-zoom input{flex:1;accent-color:var(--mint)}.profile-cropper button{grid-column:2;width:max-content}@media(max-width:600px){.profile-cropper{grid-template-columns:1fr}.profile-cropper canvas{width:100%;height:auto;max-width:240px}.profile-cropper button{grid-column:auto}.profile-zoom{width:100%}}
.profile-logout{display:flex;justify-content:center;margin-top:56px;padding-top:24px;border-top:1px solid var(--border)}.profile-logout button{width:320px;justify-content:center;color:var(--skin-color-189);border-color:color-mix(in srgb,var(--skin-color-189) 45%,var(--border))}
.alert-row.activity-system{background:linear-gradient(90deg,color-mix(in srgb,var(--blue) 10%,transparent),transparent)}.alert-row.activity-system .alert-dot{background:var(--blue);box-shadow:0 0 8px color-mix(in srgb,var(--blue) 65%,transparent)}.alert-row.activity-system .activity-module{color:var(--blue)}
.alert-row.activity-system-online{background:linear-gradient(90deg,#62f2b51c,transparent)}.alert-row.activity-system-online .alert-dot{background:#62f2b5;box-shadow:0 0 8px #62f2b588}.alert-row.activity-system-online .alert-message,.alert-row.activity-system-online time,.alert-row.activity-system-online .alert-device,.alert-row.activity-system-online .activity-module{color:#62f2b5}.alert-row.activity-system-offline{background:linear-gradient(90deg,#ff66751c,transparent)}.alert-row.activity-system-offline .alert-dot{background:#ff6675;box-shadow:0 0 8px #ff667588}.alert-row.activity-system-offline .alert-message,.alert-row.activity-system-offline time,.alert-row.activity-system-offline .alert-device,.alert-row.activity-system-offline .activity-module{color:#ff6675}
.detail-fields .imu-ready{color:#62f2b5;text-shadow:0 0 10px #62f2b577}.detail-fields .imu-pending,.detail-fields .position-invalid{color:#ff6675;text-shadow:0 0 10px #ff667566}.detail-fields .position-single{color:#ffe66b;text-shadow:0 0 10px #ffe66b66}.detail-fields .position-differential{color:#ffaf58;text-shadow:0 0 10px #ffaf5866}.detail-fields .position-float{color:#65f4a8;text-shadow:0 0 10px #65f4a866}.detail-fields .position-fixed,.detail-fields .drive-auto{color:#68b9ff;text-shadow:0 0 10px #68b9ff66}.detail-fields .drive-manual{color:#ffae5b;text-shadow:0 0 10px #ffae5b66}.detail-fields .position-neutral{color:var(--muted)}
.device-card.online:before,.device-card.offline:before{background:var(--muted);box-shadow:none}.device-card.selected:before{background:#62f2b5;box-shadow:0 0 12px #62f2b5cc}
#alertsPanel .alert-row{display:grid;grid-template-columns:10px 74px minmax(78px,100px) 84px minmax(0,1fr) auto;align-items:center;column-gap:8px}#alertsPanel .alert-dot{grid-column:1}#alertsPanel .alert-row time{grid-column:2;white-space:nowrap}#alertsPanel .alert-device{grid-column:3;max-width:none;min-width:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#alertsPanel .activity-module{grid-column:4;max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#alertsPanel .alert-message{grid-column:5;min-width:0}#alertsPanel .ack-button{grid-column:6}@media(max-width:700px){#alertsPanel .alert-row{grid-template-columns:8px 66px minmax(64px,1fr) minmax(0,1.1fr) auto;column-gap:6px}#alertsPanel .activity-module{grid-column:3}#alertsPanel .alert-device{grid-column:4}#alertsPanel .alert-message{grid-column:3/5;grid-row:2}#alertsPanel .ack-button{grid-column:5;grid-row:1/3}}

/* Small screens use the same dashboard layout at 70% UI scale. */
body.small-screen-mode{zoom:.7;height:calc(100dvh / .7)}

/* Leave a deliberate break through the centre of the leading slash in the brand mark. */
.brand-mark i:first-child{background:linear-gradient(to bottom,var(--mint) 0 42%,transparent 42% 58%,var(--mint) 58% 100%)}

/* Let the map reach the top edge while its heading remains readable above it. */
.scene-panel{border-radius:10px 10px 9px 9px}
.scene-panel .scene-heading{position:absolute;z-index:6;top:-1px;right:-1px;left:-1px;height:auto;min-height:68px;overflow:hidden;border-radius:10px 10px 0 0;background:color-mix(in srgb,var(--panel) 50%,transparent);border-bottom-color:color-mix(in srgb,var(--border) 32%,transparent)}

/* Make incoming activity visible at the point of arrival without flashing the whole dashboard. */
#alertsPanel .panel-heading{transition:background .35s ease,border-color .35s ease}
#alertsPanel.activity-arrival-warning .panel-heading{background:linear-gradient(90deg,color-mix(in srgb,var(--amber) 11%,transparent),transparent 64%);border-bottom-color:color-mix(in srgb,var(--amber) 38%,var(--border))}
#alertsPanel .activity-arrival-note{border:1px solid color-mix(in srgb,var(--mint) 34%,transparent);box-shadow:0 0 0 0 color-mix(in srgb,var(--mint) 0%,transparent);animation:none}
#alertsPanel .activity-arrival-note.is-arrival{animation:activity-arrival-badge .6s ease-out both}
#alertsPanel .activity-arrival-note.is-warning{border-color:color-mix(in srgb,var(--amber) 58%,transparent);background:color-mix(in srgb,var(--amber) 13%,var(--panel));color:var(--amber);box-shadow:0 0 14px color-mix(in srgb,var(--amber) 16%,transparent)}
#alertsPanel .activity-arrival-note:before{width:6px;height:6px;box-shadow:0 0 7px currentColor;animation:activity-arrival-dot 1.35s ease-in-out infinite}
#alertsPanel .alert-row.activity-new{position:relative;animation:activity-row-arrival .7s cubic-bezier(.2,.7,.25,1) both}
#alertsPanel .alert-row.activity-new .alert-dot{animation:activity-arrival-dot 1.35s ease-in-out infinite}
#alertsPanel .alert-row.activity-new.activity-warning{animation:activity-warning-arrival .9s cubic-bezier(.2,.7,.25,1) both;box-shadow:inset 3px 0 0 var(--amber),0 0 16px color-mix(in srgb,var(--amber) 12%,transparent)}
#alertsPanel .alert-row.activity-new.activity-warning .alert-dot{box-shadow:0 0 9px var(--amber)}
@keyframes activity-arrival-badge{0%{opacity:0;transform:translateY(-3px) scale(.94)}100%{opacity:1;transform:none}}
@keyframes activity-row-arrival{0%{opacity:.35;transform:translateX(-8px)}100%{opacity:1;transform:none}}
@keyframes activity-warning-arrival{0%{opacity:.45;transform:translateX(-10px)}55%{opacity:1;transform:translateX(2px)}100%{opacity:1;transform:none}}
@keyframes activity-arrival-dot{0%,100%{opacity:.72;transform:scale(.82)}50%{opacity:1;transform:scale(1.2)}}
@media(prefers-reduced-motion:reduce){#alertsPanel .panel-heading{transition:none}#alertsPanel .activity-arrival-note,#alertsPanel .alert-row.activity-new,#alertsPanel .alert-row.activity-new .alert-dot,#alertsPanel .activity-arrival-note:before{animation:none}}
.scene-panel #siteName{display:none}
.scene-panel #sceneTitle{line-height:1.2}
.scene-panel .segmented{border-color:color-mix(in srgb,var(--skin-color-78) 50%,transparent);border-radius:9px;background:color-mix(in srgb,var(--skin-color-79) 50%,transparent);backdrop-filter:blur(12px) saturate(1.08);padding:4px;box-shadow:inset 0 1px 0 color-mix(in srgb,var(--text) 10%,transparent)}
.scene-panel .segmented button,.scene-panel .segmented select{border-radius:7px}.scene-panel .segmented #toggleSatellite[aria-pressed="false"]{background:transparent;color:var(--muted);border:0;box-shadow:none}
.scene-panel .segmented select#mapProvider{-webkit-appearance:none;appearance:none;min-width:112px;padding:6px 31px 6px 10px;background-color:var(--skin-color-79);background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px;background-repeat:no-repeat;cursor:pointer}
.scene-panel .segmented select#mapProvider:focus{border-color:var(--mint)}
.scene-panel .scene-viewport{position:relative;z-index:1}
.scene-panel .scene-corner,.scene-panel .scene-tools,.scene-panel .compass{top:84px}
@media(max-width:700px){.scene-panel .scene-corner,.scene-panel .scene-tools,.scene-panel .compass{top:132px}}

/* New messages are identified locally, without animating the whole panel. */
#alertsPanel{position:relative;isolation:isolate}
#alertsPanel .panel-heading h2{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
#alertsPanel .activity-arrival-note{display:inline-flex;align-items:center;gap:5px;padding:3px 6px;border-radius:4px;background:color-mix(in srgb,var(--mint) 10%,var(--panel));color:var(--mint);font-size:11px;font-weight:500;line-height:1.4;white-space:nowrap;letter-spacing:0}
#alertsPanel .activity-arrival-note:before{content:"";width:4px;height:4px;border-radius:50%;background:currentColor}
#alertsPanel .activity-arrival-note[hidden]{display:none}
#alertsPanel .alert-row{transition:background-color .6s ease,box-shadow .6s ease}
#alertsPanel .alert-row.activity-new{background-color:color-mix(in srgb,var(--mint) 9%,transparent);box-shadow:inset 2px 0 0 var(--mint)}
#alertsPanel .alert-row.activity-new.activity-warning{background-color:color-mix(in srgb,var(--amber) 10%,transparent);box-shadow:inset 3px 0 0 var(--amber),0 0 16px color-mix(in srgb,var(--amber) 12%,transparent);animation:activity-warning-arrival .9s cubic-bezier(.2,.7,.25,1) both}
@media(prefers-reduced-motion:reduce){#alertsPanel .alert-row{transition:none}}

.connection-panel .pipeline-line{display:block;align-self:center;flex:1;height:1px;margin:0 14px;background:linear-gradient(90deg,transparent,var(--mint),transparent);opacity:.75}

@media(min-width:701px){
 body.remote-mode .overview-workspace>.dashboard-grid{position:relative;grid-template-rows:minmax(0,1fr) var(--remote-alert-height,clamp(126px,21vh,205px))!important}
 body.remote-mode .overview-workspace>.dashboard-grid>.remote-left-stack{position:absolute;top:0;left:0;width:clamp(180px,17vw,280px);height:calc(100% - clamp(126px,21vh,205px) - 15px)}
 body.remote-mode .overview-workspace>.dashboard-grid>.connection-panel{position:absolute;left:0;bottom:0;width:clamp(180px,17vw,280px);height:clamp(126px,21vh,205px)}
 body:not(.twin-mode):not(.history-mode) .activity-resize-handle{display:flex;position:absolute;z-index:3;top:-12px;left:0;width:100%;height:24px;align-items:center;justify-content:center;transform:none;border:0;border-radius:999px;background:transparent;cursor:ns-resize;opacity:.78;transition:opacity .2s,background .2s}
 body:not(.twin-mode):not(.history-mode) .activity-resize-handle span{display:block;width:34px;height:3px;border-radius:99px;background:var(--mint);box-shadow:0 0 10px color-mix(in srgb,var(--mint) 60%,transparent)}
 body:not(.twin-mode):not(.history-mode) .activity-resize-handle:hover,body.activity-resizing:not(.twin-mode):not(.history-mode) .activity-resize-handle{opacity:1;background:color-mix(in srgb,var(--mint) 16%,var(--panel))}
 body.activity-resizing:not(.twin-mode):not(.history-mode){user-select:none;cursor:ns-resize}
}
.activity-resize-handle{display:none}@media(min-width:701px){body:not(.twin-mode):not(.history-mode) .activity-resize-handle{display:flex}}

#alertsPanel .panel-heading,.connection-panel .panel-heading{height:43px;min-height:43px;padding:3px 14px}

.detail-note{display:none!important}

/* Themed in-app time picker for replay ranges. */
#replayDevicePane .replay-time-range{gap:12px}
.replay-time-picker{position:relative;display:block;width:100%}
.replay-time-picker input{width:100%;height:42px;padding:10px 43px 10px 12px!important;border-color:color-mix(in srgb,var(--mint) 34%,var(--border))!important;border-radius:7px!important;background:color-mix(in srgb,var(--bg) 84%,var(--panel))!important;color:var(--text)!important;font:600 14px/1.2 inherit;letter-spacing:.2px;cursor:pointer;box-shadow:inset 0 0 0 1px transparent;transition:border-color .18s,box-shadow .18s}
.replay-time-picker input:hover,.replay-time-picker input:focus{outline:0;border-color:var(--mint)!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--mint) 16%,transparent),inset 0 0 14px color-mix(in srgb,var(--mint) 6%,transparent)}
.replay-time-picker button{position:absolute;top:1px;right:1px;bottom:1px;width:39px;border:0;border-left:1px solid color-mix(in srgb,var(--mint) 24%,var(--border));border-radius:0 6px 6px 0;background:color-mix(in srgb,var(--mint) 11%,transparent);color:var(--mint);cursor:pointer}.replay-time-picker button:hover{background:color-mix(in srgb,var(--mint) 22%,transparent)}.replay-time-picker button i{display:inline-flex;width:17px;height:17px}
.replay-time-popover{position:absolute;z-index:80;top:calc(100% + 7px);left:14px;right:14px;box-sizing:border-box;padding:11px;border:1px solid color-mix(in srgb,var(--mint) 48%,var(--border));border-radius:9px;background:color-mix(in srgb,var(--panel) 94%,#000);box-shadow:0 18px 38px #0008;backdrop-filter:blur(18px)}
.replay-time-calendar-head{display:grid;grid-template-columns:34px 1fr 34px;align-items:center;margin-bottom:8px;color:var(--text);text-align:center}.replay-time-calendar-head button{height:28px;border:0;border-radius:5px;background:transparent;color:var(--mint);font-size:24px;line-height:1;cursor:pointer}.replay-time-calendar-head button:hover{background:color-mix(in srgb,var(--mint) 16%,transparent)}.replay-time-calendar-head strong{font-size:14px;letter-spacing:.5px}
.replay-time-week,.replay-time-days{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;text-align:center}.replay-time-week{margin-bottom:3px;color:var(--muted);font-size:12px}.replay-time-days i,.replay-time-days button{height:28px}.replay-time-days button{border:1px solid transparent;border-radius:5px;background:transparent;color:var(--text);font:600 13px/1 inherit;cursor:pointer}.replay-time-days button:hover,.replay-time-days button.today{border-color:color-mix(in srgb,var(--mint) 58%,transparent);color:var(--mint);background:color-mix(in srgb,var(--mint) 10%,transparent)}.replay-time-days button.active{border-color:var(--mint);background:var(--mint);color:var(--bg);box-shadow:0 0 12px color-mix(in srgb,var(--mint) 48%,transparent)}
.replay-time-clock{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid color-mix(in srgb,var(--mint) 22%,var(--border))}.replay-time-clock label{display:flex!important;flex-direction:row!important;align-items:center;gap:5px;color:var(--muted)!important;font-size:12px!important}.replay-time-clock .replay-time-wheel{width:48px!important;height:30px!important;padding:5px!important;border:1px solid color-mix(in srgb,var(--mint) 35%,var(--border))!important;border-radius:5px!important;background:var(--bg)!important;color:var(--text)!important;font-size:13px!important;text-align:center;appearance:textfield;-moz-appearance:textfield}.replay-time-clock .replay-time-wheel::-webkit-inner-spin-button,.replay-time-clock .replay-time-wheel::-webkit-outer-spin-button{appearance:none;margin:0}.replay-time-clock b{color:var(--mint)}.replay-time-clock>button{border:1px solid color-mix(in srgb,var(--mint) 44%,var(--border));border-radius:5px;background:color-mix(in srgb,var(--mint) 12%,transparent);color:var(--mint);padding:5px 8px;font-size:12px;cursor:pointer}

/* Keep the replay calendar anchored inside its card instead of the page viewport. */
#replayDevicePane{position:relative}
#replayTimePopover{top:var(--replay-time-popover-top, 0px);left:var(--replay-time-popover-left, 0px);right:auto;width:var(--replay-time-popover-width, 100%)}

/* Task replay uses the same persistent, searchable card list as device replay. */
#replayPanel{position:relative}
#replayTaskPane{min-width:0;flex:1;min-height:0}
#replayTaskSearch,#replayTask{display:none!important}
#replayTaskPane .replay-time-range{display:grid;grid-template-columns:minmax(0,1fr);gap:10px}
#replayTaskMatches.replay-task-list{position:static;display:flex;flex:1;flex-direction:column;gap:6px;min-height:150px;max-height:none;overflow:auto;padding:2px;background:transparent;border:0;border-radius:0;box-shadow:none;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--mint) 65%,transparent) transparent}
#replayTaskMatches.replay-task-list button.replay-device-card{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 10px;align-items:center;flex:0 0 auto;min-width:0;min-height:58px;padding:10px 12px 10px 15px;border:1px solid color-mix(in srgb,var(--border) 90%,transparent);border-radius:7px;background:color-mix(in srgb,var(--bg) 65%,transparent);color:var(--text);text-align:left;line-height:1.35}
#replayTaskMatches.replay-task-list button.replay-device-card:before{content:"";position:absolute;left:0;top:11px;bottom:11px;width:3px;border-radius:3px;background:var(--mint);box-shadow:0 0 9px color-mix(in srgb,var(--mint) 75%,transparent)}
#replayTaskMatches.replay-task-list button.replay-device-card:not([aria-selected=true]):before{background:var(--muted);box-shadow:none;opacity:.8}
#replayTaskMatches.replay-task-list button.replay-device-card[aria-selected=true]{border-color:color-mix(in srgb,var(--mint) 70%,var(--border));background:color-mix(in srgb,var(--mint) 12%,var(--bg))}
#replayTaskMatches.replay-task-list button.replay-device-card[aria-selected=true]:before{background:#39ff88;opacity:1;box-shadow:0 0 5px #39ff88,0 0 12px #39ff88,0 0 20px #39ff8899;animation:replay-task-selected-glow 1.4s ease-in-out infinite}
@keyframes replay-task-selected-glow{50%{box-shadow:0 0 7px #39ff88,0 0 18px #39ff88,0 0 28px #39ff88cc;filter:brightness(1.22)}}
#replayTaskMatches.replay-task-list strong{grid-column:1;font-size:14px;color:var(--text)}#replayTaskMatches.replay-task-list span{grid-column:1;margin:0;color:var(--muted);font-size:14px}#replayTaskMatches.replay-task-list em{grid-column:2;grid-row:1/3;color:var(--mint);font-size:14px;font-style:normal}#replayTaskMatches.replay-task-list p{margin:0;padding:14px 10px;color:var(--muted)}
body.history-mode .replay-panel>#replayTaskPane:not([hidden]){display:flex;flex-direction:column}

/* Theme-aware plot selector. */
.replay-combobox:has(#replayPlotSearch) input{height:44px;border-color:color-mix(in srgb,var(--mint) 45%,var(--border));border-radius:8px;background:linear-gradient(100deg,color-mix(in srgb,var(--mint) 9%,var(--bg)),var(--bg));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mint) 10%,transparent)}
.replay-combobox:has(#replayPlotSearch) input:focus{border-color:var(--mint);box-shadow:0 0 0 3px color-mix(in srgb,var(--mint) 17%,transparent),0 0 18px color-mix(in srgb,var(--mint) 14%,transparent)}
.replay-combobox:has(#replayPlotSearch)>button{right:9px;width:28px;height:28px;border-radius:6px;background:color-mix(in srgb,var(--mint) 12%,transparent)}
.replay-combobox:has(#replayPlotSearch)>button:hover,.replay-combobox:has(#replayPlotSearch)>button[aria-expanded=true]{background:color-mix(in srgb,var(--mint) 24%,transparent)}.replay-combobox:has(#replayPlotSearch)>button{display:grid;place-items:center}.replay-combobox:has(#replayPlotSearch)>button:after{position:static;width:8px;height:8px;border-color:var(--mint);transform:translateY(-2px) rotate(45deg)}.replay-combobox:has(#replayPlotSearch)>button[aria-expanded=true]:after{transform:translateY(2px) rotate(225deg)}
#replayDevicePane .replay-device-combobox input{height:44px;border-color:color-mix(in srgb,var(--mint) 45%,var(--border));border-radius:8px;background:linear-gradient(100deg,color-mix(in srgb,var(--mint) 9%,var(--bg)),var(--bg));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mint) 10%,transparent)}#replayDevicePane .replay-device-combobox input:focus{border-color:var(--mint);box-shadow:0 0 0 3px color-mix(in srgb,var(--mint) 17%,transparent),0 0 18px color-mix(in srgb,var(--mint) 14%,transparent)}#replayDevicePane .replay-device-combobox>button{right:9px;width:28px;height:28px;border-radius:6px;background:color-mix(in srgb,var(--mint) 12%,transparent);display:grid;place-items:center}#replayDevicePane .replay-device-combobox>button:hover,#replayDevicePane .replay-device-combobox>button[aria-expanded=true]{background:color-mix(in srgb,var(--mint) 24%,transparent)}#replayDevicePane .replay-device-combobox>button:after{position:static;width:8px;height:8px;border-color:var(--mint);transform:translateY(-2px) rotate(45deg)}#replayDevicePane .replay-device-combobox>button[aria-expanded=true]:after{transform:translateY(2px) rotate(225deg)}
#replayPlotMatches{z-index:90;top:calc(100% + 7px);max-height:246px;padding:6px;border-color:color-mix(in srgb,var(--mint) 52%,var(--border));border-radius:9px;background:linear-gradient(145deg,color-mix(in srgb,var(--panel) 94%,var(--mint)),var(--panel));box-shadow:0 18px 34px #0008,0 0 0 1px color-mix(in srgb,var(--mint) 10%,transparent);scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--mint) 70%,transparent) transparent}
#replayPlotMatches button{position:relative;min-height:42px;padding:11px 12px 11px 16px!important;border:1px solid transparent!important;border-radius:6px!important;color:var(--text)!important;font-weight:600;letter-spacing:.15px;transition:background .16s,border-color .16s,transform .16s}
#replayPlotMatches button:before{position:absolute;top:11px;bottom:11px;left:5px;width:3px;border-radius:3px;content:"";background:var(--mint);opacity:0;transform:scaleY(.35);transition:opacity .16s,transform .16s}
#replayPlotMatches button:hover,#replayPlotMatches button[aria-selected=true]{border-color:color-mix(in srgb,var(--mint) 48%,transparent)!important;background:linear-gradient(90deg,color-mix(in srgb,var(--mint) 19%,transparent),color-mix(in srgb,var(--mint) 5%,transparent))!important;transform:translateX(2px)}
#replayPlotMatches button:hover:before,#replayPlotMatches button[aria-selected=true]:before{opacity:1;transform:scaleY(1)}
#replayPlotMatches::-webkit-scrollbar{width:8px}#replayPlotMatches::-webkit-scrollbar-track{margin:6px 0;border-radius:8px;background:color-mix(in srgb,var(--bg) 72%,transparent)}#replayPlotMatches::-webkit-scrollbar-thumb{border:2px solid transparent;border-radius:8px;background:color-mix(in srgb,var(--mint) 68%,var(--muted));background-clip:padding-box}#replayPlotMatches::-webkit-scrollbar-thumb:hover{background-color:var(--mint)}

/* Immediate feedback while a device replay query is running. */
.replay-load-hint{display:flex;align-items:center;min-height:36px;margin:8px 0 0;padding:8px 11px;border:1px solid color-mix(in srgb,var(--mint) 30%,var(--border));border-radius:7px;background:color-mix(in srgb,var(--mint) 8%,var(--bg));color:var(--muted);font-size:14px;line-height:1.45}.replay-load-hint:before{width:6px;height:6px;margin-right:8px;border-radius:50%;background:var(--mint);box-shadow:0 0 9px color-mix(in srgb,var(--mint) 75%,transparent);content:"";flex:0 0 auto}.replay-load-hint[data-state=loading]{color:var(--text)}.replay-load-hint[data-state=loading]:before{animation:replay-load-pulse .9s ease-in-out infinite}.replay-load-hint[data-state=success]{border-color:color-mix(in srgb,var(--mint) 48%,var(--border));color:var(--mint)}.replay-load-hint[data-state=fallback]{border-color:color-mix(in srgb,var(--amber) 45%,var(--border));color:var(--amber)}.replay-load-hint[data-state=fallback]:before{background:var(--amber);box-shadow:0 0 9px color-mix(in srgb,var(--amber) 72%,transparent)}.replay-load-hint[data-state=error]{border-color:color-mix(in srgb,#ff6675 55%,var(--border));background:color-mix(in srgb,#ff6675 8%,var(--bg));color:#ff7885}.replay-load-hint[data-state=error]:before{background:#ff6675;box-shadow:0 0 9px #ff667588}@keyframes replay-load-pulse{50%{opacity:.35;transform:scale(.72)}}@media(prefers-reduced-motion:reduce){.replay-load-hint[data-state=loading]:before{animation:none}}
.replay-progress-content{display:flex;flex:1;min-width:0;flex-direction:column;gap:6px}.replay-progress-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.replay-progress-track{display:block;width:100%;height:3px;overflow:hidden;border-radius:999px;background:color-mix(in srgb,var(--border) 80%,transparent)}.replay-progress-track i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--mint),var(--blue));box-shadow:0 0 8px color-mix(in srgb,var(--mint) 70%,transparent);transition:width .2s ease}.replay-query-hint .replay-progress-content{gap:7px}.replay-query-hint .replay-progress-track{margin-top:1px}
.replay-query-hint:has(.replay-progress-content){display:flex;align-items:center;min-height:36px;box-sizing:border-box;margin:8px 0 0;padding:8px 11px;border:1px solid color-mix(in srgb,var(--mint) 30%,var(--border));border-radius:7px;background:color-mix(in srgb,var(--mint) 8%,var(--bg));color:var(--text)}


/* Live instrument cluster shown only while a device trajectory is being replayed. */
.replay-twin-hud{position:absolute;z-index:30;right:18px;bottom:48px;width:276px;box-sizing:border-box;padding:12px 13px 11px;border:1px solid color-mix(in srgb,var(--mint) 46%,var(--border));border-radius:12px;background:linear-gradient(135deg,color-mix(in srgb,var(--panel) 91%,transparent),color-mix(in srgb,var(--bg) 78%,transparent));box-shadow:0 14px 34px #0007,inset 0 1px 0 color-mix(in srgb,var(--text) 12%,transparent);backdrop-filter:blur(16px) saturate(1.25);pointer-events:none}.replay-hud-head{display:flex;align-items:center;justify-content:space-between;color:var(--muted);font:600 11px/1 Orbitron,"SFMono-Regular",monospace;letter-spacing:1.2px}.replay-hud-head b{padding:4px 6px;border:1px solid color-mix(in srgb,var(--mint) 38%,transparent);border-radius:4px;background:color-mix(in srgb,var(--mint) 11%,transparent);color:var(--mint);font-size:10px}.replay-hud-head b.playing{animation:replay-hud-live 1.1s ease-in-out infinite}.replay-twin-hud time{display:block;margin:8px 0 10px;color:var(--text);font:600 15px/1.1 Orbitron,"SFMono-Regular",monospace;font-variant-numeric:tabular-nums;letter-spacing:.4px}.replay-hud-data{display:grid;grid-template-columns:1fr 1fr 72px;gap:7px;padding:9px 0;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent);border-bottom:1px solid color-mix(in srgb,var(--border) 70%,transparent)}.replay-hud-data>div>span{display:block;margin-bottom:5px;color:var(--muted);font-size:12px}.replay-hud-data strong{display:block;color:var(--text);font:600 19px/1 Orbitron,"SFMono-Regular",monospace;font-variant-numeric:tabular-nums}.replay-hud-data small{margin-left:3px;color:var(--mint);font:600 10px/1 inherit}.replay-hud-heading{position:relative;padding-left:2px}.replay-hud-heading i{position:absolute;top:22px;right:3px;width:32px;height:32px;border:1px solid color-mix(in srgb,var(--mint) 60%,var(--border));border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--mint) 15%,transparent) 0 10%,transparent 12%),conic-gradient(from 0deg,transparent 0 23%,color-mix(in srgb,var(--mint) 78%,transparent) 25%,transparent 27% 48%,color-mix(in srgb,var(--mint) 78%,transparent) 50%,transparent 52% 73%,color-mix(in srgb,var(--mint) 78%,transparent) 75%,transparent 77%);box-shadow:0 0 10px color-mix(in srgb,var(--mint) 24%,transparent)}.replay-hud-heading i:after{content:"N";position:absolute;top:-9px;left:50%;color:var(--mint);font:600 8px/1 Orbitron,sans-serif;transform:translateX(-50%)}.replay-hud-heading i em{position:absolute;top:4px;left:50%;width:2px;height:13px;border-radius:2px;background:linear-gradient(var(--mint),var(--text));box-shadow:0 0 8px var(--mint);transform-origin:50% 12px}.replay-hud-progress{padding-top:10px}.replay-hud-progress>div{display:flex;justify-content:space-between;margin-bottom:6px;color:var(--muted);font-size:12px}.replay-hud-progress b{color:var(--mint);font-family:Orbitron,"SFMono-Regular",monospace;font-size:11px}.replay-hud-progress>i{display:block;height:4px;overflow:hidden;border-radius:4px;background:color-mix(in srgb,var(--border) 85%,transparent)}.replay-hud-progress>i em{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--mint),#7aaeff);box-shadow:0 0 10px var(--mint);transition:width .18s linear}@keyframes replay-hud-live{50%{box-shadow:0 0 12px color-mix(in srgb,var(--mint) 72%,transparent);opacity:.62}}@media(max-width:700px){.replay-twin-hud{right:10px;bottom:40px;width:232px;padding:10px}.replay-hud-data{grid-template-columns:1fr 1fr 62px}.replay-hud-data strong{font-size:16px}.replay-twin-hud time{font-size:13px}}@media(prefers-reduced-motion:reduce){.replay-hud-head b.playing{animation:none}.replay-hud-progress>i em{transition:none}}


/* Replay instruments attach to the selected 3D vehicle and remain within the scene. */
.replay-twin-hud{right:auto;bottom:auto;transform:translateZ(0);transform-origin:bottom left;transition:opacity .16s ease}.replay-twin-hud:after{position:absolute;bottom:-31px;left:22px;width:1px;height:30px;content:"";background:linear-gradient(var(--mint),transparent);box-shadow:0 0 8px color-mix(in srgb,var(--mint) 58%,transparent)}.replay-twin-hud:before{position:absolute;bottom:-34px;left:19px;width:7px;height:7px;border:1px solid var(--mint);border-radius:50%;background:color-mix(in srgb,var(--mint) 25%,transparent);box-shadow:0 0 12px var(--mint);content:""}.replay-twin-hud.hud-left:after{right:22px;left:auto}.replay-twin-hud.hud-left:before{right:19px;left:auto}.provider-active .replay-twin-hud{display:none!important}


/* AMap receives the same telemetry as a physical sign fixed beside the replay vehicle. */
.replay-ground-sign{position:relative;width:252px;padding:9px 11px;border:1px solid color-mix(in srgb,var(--mint) 60%,var(--border));border-radius:8px 12px 8px 12px;background:linear-gradient(130deg,color-mix(in srgb,var(--panel) 94%,transparent),color-mix(in srgb,var(--bg) 75%,transparent));box-shadow:0 9px 26px #0008,inset 0 1px 0 color-mix(in srgb,var(--text) 12%,transparent);backdrop-filter:blur(14px) saturate(1.3);color:var(--text);font-family:Orbitron,"SFMono-Regular",monospace;pointer-events:none}.replay-ground-sign:after{position:absolute;bottom:-36px;left:15px;width:1px;height:36px;background:linear-gradient(var(--mint),transparent);box-shadow:0 0 9px color-mix(in srgb,var(--mint) 70%,transparent);content:""}.replay-ground-sign:before{position:absolute;bottom:-39px;left:12px;width:7px;height:7px;border:1px solid var(--mint);border-radius:50%;background:color-mix(in srgb,var(--mint) 22%,transparent);box-shadow:0 0 11px var(--mint);content:""}.replay-ground-sign-head{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:9px;letter-spacing:1px}.replay-ground-sign-head b{padding:3px 5px;border-radius:3px;background:color-mix(in srgb,var(--mint) 13%,transparent);color:var(--mint);font-size:9px}.replay-ground-sign-head b.playing{animation:replay-hud-live 1.1s ease-in-out infinite}.replay-ground-sign time{display:block;margin:6px 0 7px;color:var(--text);font-size:12px;font-variant-numeric:tabular-nums}.replay-ground-sign>div:nth-of-type(2){display:grid;grid-template-columns:1fr 1fr 1fr;gap:5px;padding-top:7px;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent)}.replay-ground-sign strong{font-size:14px;font-weight:600;white-space:nowrap}.replay-ground-sign strong small{margin-left:2px;color:var(--mint);font-size:8px}.replay-ground-sign strong:before{display:block;margin-bottom:3px;color:var(--muted);font:500 9px/1 Inter,"PingFang SC",sans-serif}.replay-ground-sign [data-speed]:before{content:"速度"}.replay-ground-sign [data-heading]:before{content:"航向"}.replay-ground-sign [data-altitude]:before{content:"海拔"}@media(max-width:700px){.replay-ground-sign{width:208px}.replay-ground-sign time{font-size:10px}.replay-ground-sign strong{font-size:12px}}


/* The bottom of each support line lands on a geographic / 3D-world anchor. */
.replay-twin-hud:after{left:var(--ground-anchor-x,50%);bottom:-36px}.replay-twin-hud:before{left:calc(var(--ground-anchor-x,50%) - 3px);bottom:-39px}.replay-twin-hud.hud-left:after{right:auto;left:var(--ground-anchor-x,50%)}.replay-twin-hud.hud-left:before{right:auto;left:calc(var(--ground-anchor-x,50%) - 3px)}.replay-ground-sign:after{left:50%;bottom:-36px}.replay-ground-sign:before{left:calc(50% - 3px);bottom:-39px}


/* Elevated replay sign: a long luminous leader terminates on the vehicle roof. */
.replay-twin-hud:after{bottom:-112px;height:112px}.replay-twin-hud:before{bottom:-115px}.replay-ground-sign:after{bottom:-112px;height:112px}.replay-ground-sign:before{bottom:-115px}


/* A continuous leader compensates for the softly interpolated sign position. */
.replay-twin-hud:after{height:var(--leader-height,112px);bottom:calc(-1 * var(--leader-height,112px))}.replay-twin-hud:before,.replay-ground-sign:before{display:none}.replay-ground-sign:after{background:linear-gradient(#147bff,transparent);box-shadow:0 0 10px #147bff99}

/* In no-satellite mode remove only the compass artwork; keep the numeric
   heading value visible in the telemetry card. */
.replay-twin-hud.no-satellite .replay-hud-data{grid-template-columns:1fr 1fr 72px}
.replay-twin-hud.no-satellite .replay-hud-heading{display:block}
.replay-twin-hud.no-satellite .replay-hud-heading i{display:none}


/* Keep the login/settings backdrop stable: pause live 3D compositing behind dialogs. */
body:has(dialog[open]) .amap-twin-canvas{visibility:visible}
/* Freeze every map surface while a modal is open; the AMap DOM layer otherwise
   keeps repainting through the backdrop, which is especially visible in replay. */
body:has(dialog[open]) #providerMap,body:has(dialog[open]) #sceneCanvas,body:has(dialog[open]) #sceneLabels{visibility:visible}
/* Replay telemetry must stay above route start/end labels. */
.scene-viewport{isolation:isolate}
#replayTwinHud{z-index:9999!important}
.route-terminal{z-index:20}
/* AMap terminal markers must remain above the custom 3D vehicle layer. */
.amap-marker .route-terminal{position:relative;z-index:100000!important}
.amap-route-terminal-anchor{position:relative;width:0;height:0}.amap-route-terminal-anchor .route-terminal{position:absolute;left:0;bottom:0;z-index:100000!important;transform:translate(-50%,calc(-100% - 10px))}.amap-route-terminal-anchor .route-terminal:after{bottom:-30px;height:29px;transform:none}
.amap-terminal-layer,.amap-replay-sign-layer{position:absolute;inset:0;pointer-events:none}.amap-terminal-layer{z-index:4}.amap-replay-sign-layer{z-index:5}.amap-terminal-overlay{position:absolute!important;z-index:200001!important;pointer-events:none}.amap-replay-sign-overlay{position:absolute!important;z-index:200002!important;transform:translate(-50%,calc(-100% - 115px))}

/* Skin-aware route locators: crisp brackets, readable glyphs and a precise ground anchor. */
.route-terminal.start{--terminal-color:var(--mint)}
.route-terminal.end{--terminal-color:var(--blue)}
.route-terminal.endpoint-marker{box-sizing:border-box;width:28px;height:28px;min-width:28px;padding:0;display:grid;place-items:center;gap:0;transform:translate(-50%,calc(-100% - 12px));border:0;border-radius:2px;clip-path:none;background:color-mix(in srgb,var(--panel) 94%,transparent);color:var(--terminal-color);font-size:0;box-shadow:0 2px 6px color-mix(in srgb,var(--panel) 40%,transparent);pointer-events:none;animation:none}
.route-terminal.endpoint-marker:before{content:"";position:absolute;inset:0;border:0;border-radius:0;opacity:1;box-shadow:none;animation:none;background:linear-gradient(currentColor,currentColor) left top/8px 1px no-repeat,linear-gradient(currentColor,currentColor) left top/1px 8px no-repeat,linear-gradient(currentColor,currentColor) right top/8px 1px no-repeat,linear-gradient(currentColor,currentColor) right top/1px 8px no-repeat,linear-gradient(currentColor,currentColor) left bottom/8px 1px no-repeat,linear-gradient(currentColor,currentColor) left bottom/1px 8px no-repeat,linear-gradient(currentColor,currentColor) right bottom/8px 1px no-repeat,linear-gradient(currentColor,currentColor) right bottom/1px 8px no-repeat}
.route-terminal.endpoint-marker:after{content:"";position:absolute;left:50%;bottom:-15px;width:7px;height:15px;transform:translateX(-50%);border:0;border-radius:0;box-shadow:none;background:linear-gradient(currentColor,currentColor) center top/1px 12px no-repeat,linear-gradient(currentColor,currentColor) center bottom/5px 5px no-repeat}
.route-terminal.endpoint-marker b{position:relative;z-index:1;display:grid;place-items:center;box-sizing:border-box;width:22px;height:22px;border:1px solid color-mix(in srgb,var(--terminal-color) 18%,transparent);border-radius:0;background:transparent;color:var(--text);font:600 12px/1 "PingFang SC","Microsoft YaHei",sans-serif;letter-spacing:0;text-shadow:none;box-shadow:none}
.route-terminal.endpoint-marker b:before,.route-terminal.endpoint-marker b:after{content:none;display:none;animation:none}
.amap-route-terminal-anchor .route-terminal.endpoint-marker{left:0;bottom:0;transform:translate(-50%,calc(-100% - 12px))}
.amap-route-terminal-anchor .route-terminal.endpoint-marker:after{bottom:-15px;height:15px;transform:translateX(-50%)}

/* Top navigation uses its underline as the keyboard focus cue. */
.nav-button:focus-visible{outline:none;outline-offset:0;box-shadow:inset 0 -3px 0 var(--mint)}.nav-button.active:focus-visible{box-shadow:none}

/* Playback keeps the control beside the timeline concise and discoverable. */
.replay-auto-play{margin-left:auto;display:inline-flex;align-items:center;gap:7px;min-height:28px;color:var(--muted);font-size:14px;line-height:1;white-space:nowrap;cursor:pointer;user-select:none}.replay-auto-play input{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}.replay-auto-play:has(input:checked){color:var(--mint)}.replay-auto-play input:checked+.activity-switch-track{background:var(--mint)}.replay-auto-play input:checked+.activity-switch-track:after{transform:translateX(12px);background:var(--panel)}.replay-auto-play:has(input:focus-visible){outline:2px solid var(--mint);outline-offset:3px;border-radius:4px}

/* Keep the plot list inside the replay card; only the list itself scrolls. */
#replayPlotMatches{height:auto;overscroll-behavior:contain}#replayPlotMatches[data-open-up]{top:auto;bottom:calc(100% + 7px)}

/* The selected replay device always has a clear, skin-independent locator. */
#replayDeviceMatches.replay-device-list button.replay-device-card[aria-selected=true]:before{background:#39ff88;opacity:1;box-shadow:0 0 5px #39ff88,0 0 12px #39ff88,0 0 20px #39ff8899;animation:replay-task-selected-glow 1.4s ease-in-out infinite}

/* Plot choices deploy from the selector like a compact holographic panel. */
#replayPlotMatches:not([hidden]){transform-origin:50% 0;animation:plot-list-deploy .24s cubic-bezier(.18,.9,.3,1) both,plot-list-frame 1.8s ease-in-out .24s infinite}#replayPlotMatches[data-open-up]:not([hidden]){transform-origin:50% 100%;animation-name:plot-list-deploy-up,plot-list-frame}#replayPlotMatches:not([hidden]):before{content:"";position:absolute;z-index:1;top:0;right:9px;left:9px;height:1px;background:linear-gradient(90deg,transparent,var(--mint),transparent);filter:drop-shadow(0 0 5px var(--mint));animation:plot-list-scan .72s ease-out both;pointer-events:none}#replayPlotMatches:not([hidden]) button{animation:plot-list-option-in .24s cubic-bezier(.2,.85,.3,1) both}#replayPlotMatches:not([hidden]) button:nth-child(1){animation-delay:.05s}#replayPlotMatches:not([hidden]) button:nth-child(2){animation-delay:.08s}#replayPlotMatches:not([hidden]) button:nth-child(3){animation-delay:.11s}#replayPlotMatches:not([hidden]) button:nth-child(4){animation-delay:.14s}#replayPlotMatches:not([hidden]) button:nth-child(5){animation-delay:.17s}#replayPlotMatches:not([hidden]) button:nth-child(6){animation-delay:.2s}#replayPlotMatches:not([hidden]) button:nth-child(n+7){animation-delay:.23s}@keyframes plot-list-deploy{from{opacity:0;transform:perspective(480px) rotateX(-8deg) scaleY(.05);filter:brightness(1.55)}to{opacity:1;transform:perspective(480px) rotateX(0) scaleY(1);filter:brightness(1)}}@keyframes plot-list-deploy-up{from{opacity:0;transform:perspective(480px) rotateX(8deg) scaleY(.05);filter:brightness(1.55)}to{opacity:1;transform:perspective(480px) rotateX(0) scaleY(1);filter:brightness(1)}}@keyframes plot-list-frame{50%{box-shadow:0 18px 34px #0008,0 0 0 1px color-mix(in srgb,var(--mint) 42%,transparent),0 0 19px color-mix(in srgb,var(--mint) 26%,transparent)}}@keyframes plot-list-scan{from{transform:translateY(0);opacity:0}30%{opacity:1}to{transform:translateY(245px);opacity:0}}@keyframes plot-list-option-in{from{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:translateX(0)}}@media(prefers-reduced-motion:reduce){#replayPlotMatches:not([hidden]),#replayPlotMatches:not([hidden]) button,#replayPlotMatches:not([hidden]):before{animation:none}}
/* 回放日历任务标记与登录品牌标识 */
.replay-time-days button.replay-time-day{position:relative;overflow:visible}
.replay-time-days button.replay-time-day.has-task:after{content:"";position:absolute;left:50%;bottom:0;width:6px;height:6px;border-radius:50%;background:#ffd34e;box-shadow:0 0 7px #ffd34e99;transform:translateX(-50%);pointer-events:none}
.login-symbol{width:220px!important;min-width:220px;height:43px;background:transparent;border:0;border-radius:0;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:12px;color:var(--mint);margin-bottom:23px}
.login-symbol .brand-mark{width:27px;gap:3px;transform:skew(-22deg)}
.login-symbol .brand-mark i{width:5px;height:22px}
.login-symbol .brand-mark i:nth-child(2){height:16px}
.login-symbol .brand-mark i:nth-child(3){height:10px}
.login-symbol strong{display:block;width:auto!important;writing-mode:horizontal-tb!important;white-space:nowrap;font-size:20px;font-weight:600;letter-spacing:1px;color:var(--text)}
/* 登录品牌：主 Logo 和系统名称，字段缺失时保留默认标识。 */
.login-symbol{width:100%!important;height:auto;min-height:43px;align-items:flex-end;margin-bottom:43px}
.login-brand-copy{display:flex;min-width:0;width:calc(100% - 39px);flex-direction:column;gap:5px;align-items:flex-start}
.login-brand-copy strong{font-size:20px;line-height:1.25}
.login-symbol .brand-mark{flex:0 0 27px}
.login-main-logo{width:36px;height:36px;flex:0 0 36px;object-fit:contain;object-position:left bottom;align-self:flex-end}
.login-symbol .brand-mark{align-items:flex-end}
.topbar .homepage-main-logo{display:block;width:40px;height:40px;object-fit:contain;flex:0 0 40px}
.page-footer > span:first-child{white-space:pre}
body.auth-locked>.topbar,body.auth-locked>main,body.auth-locked>.page-footer{visibility:hidden!important;pointer-events:none!important}
body.auth-locked #enterDemo{display:none!important}
body.auth-locked>.topbar *,body.auth-locked>main *,body.auth-locked>main *::before,body.auth-locked>main *::after,body.auth-locked>.page-footer *{visibility:hidden!important}
.map-extension-cards{position:absolute;left:16px;right:80px;top:104px;bottom:42px;z-index:8;display:grid;grid-auto-flow:column;align-content:start;justify-content:start;gap:8px;overflow:hidden;pointer-events:none}
.map-extension-card{min-width:0;min-height:0;padding:6px 10px;overflow:hidden;pointer-events:auto;border:1px solid color-mix(in srgb,var(--mint) 40%,transparent);border-left:3px solid var(--mint);border-radius:5px 12px 5px 5px;background:color-mix(in srgb,var(--panel) 78%,transparent);backdrop-filter:blur(10px);box-shadow:inset 0 1px 12px color-mix(in srgb,var(--mint) 9%,transparent),0 4px 16px #0003;color:var(--text)}
.map-extension-card>span{display:block;font-size:12px;color:var(--muted);overflow-wrap:anywhere;letter-spacing:1px}
.map-extension-card strong{display:block;margin-top:4px;font-size:22px;font-variant-numeric:tabular-nums;color:var(--mint);overflow-wrap:anywhere}
.map-extension-card small{margin-left:6px;font-size:12px;font-weight:400;color:var(--text)}
@media(max-width:700px){.map-extension-cards{left:8px;right:64px;top:114px}.map-extension-card{padding:6px 8px}.map-extension-card strong{font-size:18px}}
.login-dialog{padding-top:15px}
.login-sub-logo{display:block;width:auto;height:auto;max-width:100%;max-height:72px;object-fit:contain;margin:0 auto 15px}
.login-brand-copy{flex:1;width:auto}
.login-brand-copy strong{white-space:normal;overflow-wrap:anywhere}
.login-end{display:grid;grid-template-columns:max-content minmax(0,max-content);justify-content:center;align-items:start;text-align:left;gap:5px 8px;overflow-wrap:anywhere;line-height:1.5}
.login-copyright-label{grid-column:1;grid-row:1}
.login-unit-name{grid-column:2;grid-row:1}
.login-team-name{grid-column:2;grid-row:2;width:0;min-width:100%;color:inherit;font-size:inherit;line-height:inherit}
/* 登录表单及其后续内容整体下移，和品牌区域保持更舒适的距离。 */
.login-form-spacer{height:15px;flex:0 0 15px}
.login-dialog form,#loginForm{margin-top:0!important;padding-top:0!important}
.login-lower{position:relative;top:15px;margin-bottom:15px}
/* 首页设备队列的在线状态固定使用亮绿色，不随皮肤变量变化。 */
.device-card .status.online{color:#62f2b5!important;border-color:rgba(98,242,181,.58)!important;background:rgba(98,242,181,.12)!important;box-shadow:0 0 12px rgba(98,242,181,.13)!important}
.device-card .status.online i{background:#62f2b5!important;box-shadow:0 0 9px #62f2b5!important}
/* 登录凭据记忆开关 */
.remember-login{display:flex;align-items:center;gap:9px;margin:-3px 0 14px;color:var(--skin-color-9);font-size:13px;line-height:20px;cursor:pointer;user-select:none}
.remember-login input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.remember-login-track{position:relative;width:34px;height:18px;flex:0 0 34px;border:1px solid var(--skin-color-158);border-radius:999px;background:var(--skin-color-157);transition:background .18s,border-color .18s}
.remember-login-track:after{content:"";position:absolute;top:3px;left:3px;width:10px;height:10px;border-radius:50%;background:var(--skin-color-9);transition:transform .18s,background .18s}
.remember-login:has(input:checked){color:var(--mint)}
.remember-login:has(input:checked) .remember-login-track{border-color:var(--mint);background:var(--mint)}
.remember-login:has(input:checked) .remember-login-track:after{transform:translateX(16px);background:var(--panel)}
.remember-login:has(input:focus-visible){outline:2px solid var(--mint);outline-offset:3px;border-radius:4px}
/* 弹窗打开时稳定页面宽度；普通页面不预留空的右侧滚动条区域。 */
html{scrollbar-gutter:auto}
html:has(dialog[open]){scrollbar-gutter:stable}
dialog::backdrop{-webkit-backdrop-filter:none;backdrop-filter:none}
/* 登录弹窗使用轻度毛玻璃遮罩；设置弹窗继续保持稳定的纯色遮罩。 */
#loginDialog::backdrop{-webkit-backdrop-filter:blur(8px) saturate(1.08);backdrop-filter:blur(8px) saturate(1.08)}
/* 登录弹窗保持半透明遮罩，避免 backdrop-filter 触发 3D 背景闪烁。 */
#loginDialog::backdrop{-webkit-backdrop-filter:none;backdrop-filter:none}
#replayDeviceMatches.is-device-options{position:static;z-index:70;flex:none;max-height:none;margin-top:5px;overflow:auto;padding:4px;border:1px solid var(--border);border-radius:8px;background:var(--panel);box-shadow:0 14px 30px #0005}
/* Device replay paths use the task-list selection treatment. */
#replayDeviceMatches.replay-device-list button.replay-path-card:not([aria-selected=true]):before{background:var(--muted);box-shadow:none;opacity:.8}
#replayDeviceMatches.replay-device-list button.replay-path-card[aria-selected=true]:before{background:#39ff88;opacity:1;box-shadow:0 0 5px #39ff88,0 0 12px #39ff88,0 0 20px #39ff8899;animation:replay-task-selected-glow 1.4s ease-in-out infinite}

#replayDeviceMatches.replay-device-list button.replay-device-card strong,#replayDeviceMatches.replay-device-list button.replay-device-card span,#replayTaskMatches.replay-task-list button.replay-device-card strong,#replayTaskMatches.replay-task-list button.replay-device-card span{min-width:0;overflow-wrap:anywhere}
#replayDeviceMatches.replay-device-list .replay-load-inline{margin:2px 0 0;padding:8px 10px;color:var(--muted);font-size:13px;text-align:center}

/* Confine message layout/paint work to its scroll panel. */
#alertList{contain:layout paint;overflow-anchor:none}
#alertList .alert-row{content-visibility:auto;contain-intrinsic-size:auto 44px}
/* The remote parameter picker uses the same device cards as replay playback,
   but opens upward so it does not push the parameter card down. */
#parameterWorkspace{position:relative;overflow:visible!important}
#parameterWorkspace .parameter-device-combobox{position:relative;display:block;margin-top:6px}
#parameterWorkspace .parameter-device-combobox input{width:100%;height:44px;margin-top:0;padding:10px 42px 10px 12px;border:1px solid color-mix(in srgb,var(--mint) 45%,var(--border));border-radius:8px;background:linear-gradient(100deg,color-mix(in srgb,var(--mint) 9%,var(--bg)),var(--bg));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mint) 10%,transparent)}
#parameterWorkspace .parameter-device-combobox input:focus{border-color:var(--mint);box-shadow:0 0 0 3px color-mix(in srgb,var(--mint) 17%,transparent),0 0 18px color-mix(in srgb,var(--mint) 14%,transparent)}
#parameterWorkspace .parameter-device-toggle{position:absolute;top:8px;right:8px;width:28px;height:28px;padding:0;border-radius:6px;background:color-mix(in srgb,var(--mint) 12%,transparent);display:grid;place-items:center}
#parameterWorkspace .parameter-device-toggle:hover,#parameterWorkspace .parameter-device-toggle[aria-expanded=true]{background:color-mix(in srgb,var(--mint) 24%,transparent)}
#parameterWorkspace .parameter-device-toggle:after{content:"";width:8px;height:8px;border-right:2px solid var(--mint);border-bottom:2px solid var(--mint);transform:translateY(2px) rotate(225deg);transition:transform .18s}
#parameterWorkspace .parameter-device-toggle[aria-expanded=true]:after{transform:translateY(-2px) rotate(45deg)}
#parameterWorkspace #parameterMatches.parameter-device-list{position:absolute;left:0;right:0;bottom:calc(100% + 8px);z-index:120;display:flex;flex-direction:column;gap:6px;max-height:min(320px,40vh);overflow:auto;margin:0;padding:2px;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 12px 28px color-mix(in srgb,#000 35%,transparent)}
#parameterWorkspace #parameterMatches.parameter-device-list button.replay-device-card{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 10px;align-items:center;min-height:58px;margin:0;padding:10px 12px 10px 15px;border:1px solid color-mix(in srgb,var(--border) 90%,transparent);border-radius:7px;background:color-mix(in srgb,var(--bg) 65%,transparent);color:var(--text);text-align:left;line-height:1.35}
#parameterWorkspace #parameterMatches.parameter-device-list button.replay-device-card:before{content:"";position:absolute;left:0;top:11px;bottom:11px;width:3px;border-radius:3px;background:var(--mint);box-shadow:0 0 9px color-mix(in srgb,var(--mint) 75%,transparent)}
#parameterWorkspace #parameterMatches.parameter-device-list button.replay-device-card:hover,#parameterWorkspace #parameterMatches.parameter-device-list button.replay-device-card[aria-selected=true]{border-color:color-mix(in srgb,var(--mint) 70%,var(--border));background:color-mix(in srgb,var(--mint) 12%,var(--bg))}
#parameterWorkspace #parameterMatches.parameter-device-list strong{grid-column:1;font-size:14px;color:var(--text)}
#parameterWorkspace #parameterMatches.parameter-device-list span{grid-column:1;font-size:14px;color:var(--muted);margin:0}
#parameterWorkspace #parameterMatches.parameter-device-list em{grid-column:2;grid-row:1/3;font-style:normal;font-size:14px;color:var(--mint)}
#parameterWorkspace #parameterMatches.parameter-device-list{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--mint) 65%,transparent) transparent}
#parameterWorkspace #parameterMatches.parameter-device-list::-webkit-scrollbar{width:8px}
#parameterWorkspace #parameterMatches.parameter-device-list::-webkit-scrollbar-track{margin:4px 0;border-radius:8px;background:color-mix(in srgb,var(--bg) 80%,transparent)}
#parameterWorkspace #parameterMatches.parameter-device-list::-webkit-scrollbar-thumb{border:2px solid transparent;border-radius:8px;background:color-mix(in srgb,var(--mint) 65%,var(--muted));background-clip:padding-box}
#parameterWorkspace #parameterMatches.parameter-device-list::-webkit-scrollbar-thumb:hover{background-color:var(--mint)}
#parameterWorkspace #parameterMatches.parameter-device-list button.replay-device-card.offline{cursor:not-allowed;opacity:.58}
#parameterWorkspace #parameterMatches.parameter-device-list button.replay-device-card.offline:before{background:var(--muted);box-shadow:none}
#parameterWorkspace #parameterMatches.parameter-device-list button.replay-device-card.offline em{color:var(--muted)}
/* The remote-control picker follows the replay device picker, but opens below
   its field because it sits at the top of the right-hand control panel. */
#remoteWorkspace .remote-device-combobox{position:relative;display:block}
#remoteWorkspace .remote-device-combobox input{width:100%;height:44px;box-sizing:border-box;padding:10px 42px 10px 12px;border:1px solid color-mix(in srgb,var(--mint) 45%,var(--border));border-radius:8px;background:linear-gradient(100deg,color-mix(in srgb,var(--mint) 9%,var(--bg)),var(--bg));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mint) 10%,transparent)}
#remoteWorkspace .remote-device-combobox input:focus{border-color:var(--mint);box-shadow:0 0 0 3px color-mix(in srgb,var(--mint) 17%,transparent),0 0 18px color-mix(in srgb,var(--mint) 14%,transparent)}
#remoteWorkspace .remote-device-combobox>button{position:absolute;top:8px;right:8px;width:28px;height:28px;padding:0;border:0;border-radius:6px;background:color-mix(in srgb,var(--mint) 12%,transparent);display:grid;place-items:center;cursor:pointer}
#remoteWorkspace .remote-device-combobox>button:hover,#remoteWorkspace .remote-device-combobox>button[aria-expanded=true]{background:color-mix(in srgb,var(--mint) 24%,transparent)}
#remoteWorkspace .remote-device-combobox>button:after{content:"";width:8px;height:8px;border-right:2px solid var(--mint);border-bottom:2px solid var(--mint);transform:translateY(-2px) rotate(45deg);transition:transform .18s}
#remoteWorkspace .remote-device-combobox>button[aria-expanded=true]:after{transform:translateY(2px) rotate(225deg)}
#remoteWorkspace .remote-search-results{position:absolute;top:calc(100% + 8px);left:0;right:0;max-height:min(320px,40vh);overflow:auto;margin:0;padding:2px;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 12px 28px color-mix(in srgb,#000 35%,transparent);scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--mint) 65%,transparent) transparent}
#remoteWorkspace .remote-search-results::-webkit-scrollbar{width:8px}
#remoteWorkspace .remote-search-results::-webkit-scrollbar-track{margin:4px 0;border-radius:8px;background:color-mix(in srgb,var(--bg) 80%,transparent)}
#remoteWorkspace .remote-search-results::-webkit-scrollbar-thumb{border:2px solid transparent;border-radius:8px;background:color-mix(in srgb,var(--mint) 65%,var(--muted));background-clip:padding-box}
#remoteWorkspace .remote-search-results::-webkit-scrollbar-thumb:hover{background-color:var(--mint)}
#remoteWorkspace .remote-search-option{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 10px;align-items:center;min-height:58px;margin:0;padding:10px 12px 10px 15px;border:1px solid color-mix(in srgb,var(--border) 90%,transparent);border-radius:7px;background:color-mix(in srgb,var(--bg) 65%,transparent);color:var(--text);text-align:left;line-height:1.35}
#remoteWorkspace .remote-search-option:before{content:"";position:absolute;left:0;top:11px;bottom:11px;width:3px;border-radius:3px;background:var(--mint);box-shadow:0 0 9px color-mix(in srgb,var(--mint) 75%,transparent)}
#remoteWorkspace .remote-search-option:hover,#remoteWorkspace .remote-search-option.is-active,#remoteWorkspace .remote-search-option[aria-selected=true]{border-color:color-mix(in srgb,var(--mint) 70%,var(--border));background:color-mix(in srgb,var(--mint) 12%,var(--bg))}
#remoteWorkspace .remote-search-option strong{grid-column:1;display:block;overflow-wrap:anywhere;font-size:14px;color:var(--text)}
#remoteWorkspace .remote-search-option span{grid-column:1;display:block;margin:0;color:var(--muted);font-size:14px;overflow-wrap:anywhere}
#remoteWorkspace .remote-search-option em{grid-column:2;grid-row:1/3;font-style:normal;font-size:14px;color:var(--mint)}
#remoteWorkspace .remote-search-results p{margin:0;padding:14px 10px;color:var(--muted);font-size:14px}
/* Loading HUD text sits directly below the core. */
.map-loading-notice span{top:128px!important;bottom:auto!important}.map-loading-notice span:before{top:-11px!important;bottom:auto!important}@media(max-width:700px){.map-loading-notice span{top:108px!important}}
/* Keep the map control group framed on every map page, including trajectory replay. */
.scene-panel .scene-heading .segmented{border:1px solid color-mix(in srgb,var(--skin-color-78) 50%,transparent)!important;border-radius:9px!important;background:color-mix(in srgb,var(--skin-color-79) 50%,transparent)!important;backdrop-filter:blur(12px) saturate(1.08)!important;padding:4px!important;box-shadow:inset 0 1px 0 color-mix(in srgb,var(--text) 10%,transparent)!important}
/* The circular loader uses !important for its layout; hidden must still win at rest. */
.map-loading-notice[hidden]{display:none!important}
/* Replay loading uses a quiet text notice instead of the animated loader. */
.map-loading-notice{display:flex!important;width:auto!important;height:auto!important;min-width:0!important;min-height:0!important;padding:11px 17px!important;border:1px solid color-mix(in srgb,var(--border) 82%,var(--mint))!important;border-radius:7px!important;background:color-mix(in srgb,var(--panel) 94%,transparent)!important;box-shadow:0 8px 22px #0008!important;animation:none!important;backdrop-filter:blur(8px)!important}
.map-loading-notice:before,.map-loading-notice:after,.map-loading-notice i{display:none!important;animation:none!important}
.map-loading-notice span{position:static!important;bottom:auto!important;top:auto!important;font-size:13px!important;font-weight:400!important;letter-spacing:.2px!important;color:var(--text)!important;text-shadow:none!important;white-space:nowrap!important}
.map-loading-notice span:before,.map-loading-notice span:after{display:none!important;content:none!important;animation:none!important}
/* Keep map layers flush with the dark card while a provider recalculates its viewport. */
.scene-panel,.scene-viewport{min-width:0;min-height:0}
.scene-panel,.scene-viewport,#sceneCanvas,#providerMap,#providerMap .amap-container,#providerMap .amap-layers{background:var(--skin-color-83)!important}
#sceneCanvas,#providerMap{right:0!important;bottom:0!important;width:100%!important;height:100%!important;overflow:hidden!important}
#providerMap .amap-container,#providerMap .amap-layers{width:100%!important;height:100%!important}
/* Keep the previous replay frame behind a quiet veil while the next map
   position and trajectory are prepared.  The notice remains above the veil. */
#viewport.replay-map-loading::after{content:"";display:block!important;visibility:visible!important;position:absolute;inset:0;z-index:200000;background:color-mix(in srgb,var(--bg) 56%,transparent)!important;backdrop-filter:blur(7px) saturate(.68);-webkit-backdrop-filter:blur(7px) saturate(.68);pointer-events:auto;opacity:1!important;animation:replay-map-veil-in .12s ease-out both}
#viewport.replay-map-loading #mapLoadingNotice{z-index:200001;display:flex!important;visibility:visible!important;opacity:1!important}
@keyframes replay-map-veil-in{from{opacity:0}to{opacity:1}}
/* Settings is a first-class workspace page, with the header kept in place. */
body.settings-mode>main:not(.settings-page){display:none!important}
.settings-page{display:flex!important;flex:1 1 auto!important;flex-direction:column;justify-content:flex-start;align-self:center;width:100%!important;max-width:1600px!important;min-height:calc(100vh - 86px);height:auto!important;max-height:none!important;margin:0 auto!important;padding:0 56px 64px!important;overflow:auto!important;background:radial-gradient(circle at 12% 0%,color-mix(in srgb,var(--mint) 5%,transparent),transparent 34%),transparent!important;border:0!important;border-radius:0!important}
.settings-page>.dialog-title{display:flex!important;width:100%;max-width:none!important;min-height:54px;margin:0 auto;padding:0 0 24px;align-items:flex-start}
.settings-page[hidden]{display:none!important}
.settings-page .dialog-title{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;max-width:1280px;margin:0 auto;padding:0 0 24px;border-bottom:1px solid color-mix(in srgb,var(--border) 82%,transparent)}
.settings-page .dialog-title>div{display:flex;align-items:center;justify-content:space-between;gap:24px;width:100%}
.settings-page .dialog-title .eyebrow{margin:0;line-height:1}
.settings-page .dialog-title h2{margin:0;font-size:24px;font-weight:500;letter-spacing:.4px;line-height:1;white-space:nowrap}
.settings-page .dialog-title .subtle-button{flex-shrink:0}
.settings-page>.settings-tabs{display:flex;width:100%!important;max-width:1280px;margin:22px auto 30px;padding:5px;gap:4px;border:1px solid color-mix(in srgb,var(--border) 82%,transparent);border-radius:12px;background:color-mix(in srgb,var(--panel) 72%,transparent);box-shadow:0 12px 30px #0003}
.settings-page>.settings-tabs button{flex:1;padding:13px 18px;border:0;border-radius:8px;color:var(--muted);font-size:14px;transition:background .18s,color .18s,box-shadow .18s}
.settings-page>.settings-tabs button:hover{color:var(--text);background:color-mix(in srgb,var(--mint) 8%,transparent)}
.settings-page>.settings-tabs button[aria-selected=true]{border:0;background:linear-gradient(135deg,color-mix(in srgb,var(--mint) 21%,var(--panel)),color-mix(in srgb,var(--mint) 8%,var(--panel)));color:var(--mint);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mint) 27%,transparent),0 4px 14px color-mix(in srgb,var(--mint) 10%,transparent)}
.settings-page>#settings-cards,.settings-page>#settings-skins,.settings-page>#settings-title,.settings-page>#settings-layout,.settings-page>#settings-profile{display:block;box-sizing:border-box;width:100%;max-width:1280px;margin:0 auto;padding:30px 34px;border:1px solid color-mix(in srgb,var(--border) 88%,transparent);border-radius:14px;background:linear-gradient(145deg,color-mix(in srgb,var(--panel) 94%,transparent),color-mix(in srgb,var(--bg) 52%,transparent));box-shadow:0 18px 42px #0004,inset 0 1px 0 color-mix(in srgb,var(--text) 6%,transparent)}
.settings-page>#settings-cards>p:first-child,.settings-page>#settings-skins>p:first-of-type,.settings-page>#settings-title>p,.settings-page>#settings-layout>p,.settings-page>#settings-profile>p{color:var(--muted);line-height:1.7}
.settings-page .card-settings-options{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:52px;row-gap:0;margin:24px 0 20px}
.settings-page .card-setting-option{min-height:58px;padding:16px 4px;border-bottom:1px solid color-mix(in srgb,var(--border) 78%,transparent);font-size:15px}
.settings-page .card-setting-option:hover{color:var(--mint);background:linear-gradient(90deg,color-mix(in srgb,var(--mint) 7%,transparent),transparent);border-radius:6px}
@media(max-width:700px){.settings-page{min-height:calc(100vh - 150px);padding:0 14px 40px!important}.settings-page>.dialog-title{min-height:54px;padding:0 0 18px;align-items:flex-start}.settings-page .dialog-title{flex-direction:row;justify-content:space-between;gap:10px}.settings-page .dialog-title>div{gap:10px}.settings-page .dialog-title .subtle-button{align-self:stretch}.settings-page .dialog-title h2{font-size:21px}.settings-page>.settings-tabs{overflow:auto;margin-bottom:22px}.settings-page .settings-tabs button{flex:0 0 auto;min-width:88px;padding:12px 13px}.settings-page>#settings-cards,.settings-page>#settings-skins,.settings-page>#settings-title,.settings-page>#settings-layout,.settings-page>#settings-profile{padding:22px 18px}.settings-page .card-settings-options{grid-template-columns:1fr;column-gap:0}}
@media(min-width:701px){.settings-page{max-width:none!important;padding:clamp(18px,1.5vw,30px) clamp(18px,1.5vw,30px) 48px!important}.settings-page>.settings-tabs{max-width:none!important}.settings-page>#settings-cards,.settings-page>#settings-skins,.settings-page>#settings-title,.settings-page>#settings-layout,.settings-page>#settings-profile{max-width:none!important}}

/* Keep the SDK viewport measurable while the separate twin is shown.
   AMap resize/render at display:none feeds invalid coordinates into its renderer. */
#providerMap[hidden]{display:block!important;visibility:hidden!important;pointer-events:none!important}
#parameterWorkspace .parameter-open:disabled{cursor:default}

#replayDeviceMatches.replay-device-list button.replay-device-card[data-record-device]:not([aria-selected=true]):before{background:#858b92;box-shadow:none;opacity:.7;animation:none}
#replayDeviceMatches.replay-device-list button.replay-device-card[data-record-device] .replay-record-time{grid-column:1 / -1;grid-row:2;display:flex;flex-direction:column;align-items:flex-start;gap:0;min-width:0;font-size:12px;line-height:1.25;letter-spacing:-.08px;font-variant-numeric:tabular-nums}.replay-record-time time{display:block;min-width:0;white-space:nowrap;text-align:left}

.replay-list-shell{position:relative;min-width:0}.replay-list-shell.is-loading{min-height:120px}.replay-list-mask{position:absolute;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:8px;background:color-mix(in srgb,var(--bg) 50%,transparent);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);cursor:wait;pointer-events:auto}.replay-list-mask[hidden]{display:none}.replay-list-mask span{padding:10px 14px;border:1px solid var(--border);border-radius:7px;background:var(--panel,var(--bg));color:var(--text);font-size:13px}.replay-list-shell.is-loading [role=listbox]{pointer-events:none;user-select:none}
/* Keep list scrolling and its loading mask inside the space above the status. */
.replay-list-shell{display:flex;flex:1 1 0;flex-direction:column;min-height:0;overflow:hidden;isolation:isolate}
.replay-list-shell.is-loading{min-height:0}
#deviceReplayListShell{margin-top:8px}
#deviceReplayListShell>#replayDeviceMatches,#taskReplayListShell>#replayTaskMatches{flex:1 1 0;min-height:0;max-height:100%;margin:0;overflow:auto;box-sizing:border-box}
#replayLoadHint,#replayTaskHint{position:relative;flex-shrink:0;z-index:1}
/* Reserve visible loading space even before the first card arrives. */
.replay-list-shell.is-loading{min-height:132px;flex-basis:132px;overflow:visible;z-index:20}
.replay-list-shell>.replay-list-mask{top:calc(-1 * var(--replay-mask-up,0px));right:0;bottom:0;left:0;z-index:100;background:color-mix(in srgb,var(--panel) 72%,transparent);backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);box-shadow:inset 0 0 24px color-mix(in srgb,var(--mint) 7%,transparent)}
.replay-list-shell.is-loading>[role=listbox]{filter:blur(3px)}
/* Keep the list veil above the time/search controls it extends over. The
   status hint remains outside the shell, so it stays readable below the veil. */
.replay-query.is-list-loading{position:relative;z-index:200}
.replay-device-search-field.is-list-loading{z-index:201!important}
.replay-panel{position:relative}
.replay-pane-mask{position:absolute;top:0;left:14px;right:14px;z-index:300;display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:14px;border:1px solid color-mix(in srgb,var(--border) 86%,var(--mint));border-radius:8px;background:color-mix(in srgb,var(--panel) 78%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);pointer-events:auto;cursor:wait}
.replay-pane-mask[hidden]{display:none}
.replay-pane-mask span{padding:10px 14px;border:1px solid color-mix(in srgb,var(--border) 90%,var(--mint));border-radius:7px;background:color-mix(in srgb,var(--panel) 94%,transparent);color:var(--text);font-size:13px;white-space:nowrap;box-shadow:0 8px 22px #0005}
.amap-district-name{display:block;white-space:nowrap;pointer-events:none;color:var(--text);font-size:14px;font-weight:600;letter-spacing:1px;text-shadow:0 1px 3px #000,1px 0 2px #000,-1px 0 2px #000,0 -1px 2px #000}.amap-district-name.province{font-size:18px;color:var(--mint)}.amap-district-name.city{font-size:16px}
/* Compact server monitor: keep every datum inside the reserved card. */
.reserve-panel{padding:12px 12px 9px!important;min-height:0!important}.reserve-panel .panel-heading{height:24px!important;margin-bottom:4px!important}.reserve-panel .panel-heading h2{font-size:13px!important}.reserve-panel .mini-badge{font-size:10px!important;padding:3px 6px!important}.server-status-hero{height:45px!important;margin:0 0 4px!important;gap:8px!important}.server-orbit{width:44px!important;height:44px!important;flex:0 0 44px!important}.server-orbit:before{inset:3px!important}.server-orbit b{font-size:13px!important}.server-orbit small{font-size:6px!important;margin-top:2px!important}.server-orbit i{right:5px!important}.server-signal span{font-size:8px!important}.signal-bars{height:25px!important;margin-top:1px!important;gap:2px!important}.server-status-grid{gap:4px 8px!important}.server-status-stat span{font-size:9px!important}.server-status-stat strong{font-size:11px!important;margin-top:1px!important}.server-status-stat>i{height:2px!important;margin-top:2px!important}.server-status-stat>small{font-size:6px!important;margin-top:1px!important}.server-status-foot{margin-top:4px!important;padding-top:3px!important;font-size:7px!important;gap:4px!important}.server-status-foot span:last-child{overflow:hidden;text-overflow:ellipsis}
.server-status-busy{color:#ffd166!important;border-color:#ffd16666!important}.server-status-critical{color:#ff5d73!important;border-color:#ff5d7366!important}.server-orbit.server-status-busy{border-color:#ffd16699;box-shadow:0 0 16px #ffd16638,inset 0 0 12px #ffd16620}.server-orbit.server-status-critical{border-color:#ff5d73aa;box-shadow:0 0 16px #ff5d7340,inset 0 0 12px #ff5d7322}.server-orbit.server-status-busy:before{border-color:#ffd16688}.server-orbit.server-status-critical:before{border-color:#ff5d7388}.server-status-busy .server-live-dot,.server-status-busy .signal-chart polyline{background:linear-gradient(180deg,#ffd166,#d79028);box-shadow:0 0 7px #ffd166}.server-status-critical .server-live-dot,.server-status-critical .signal-chart polyline{background:linear-gradient(180deg,#ff5d73,#b92948);box-shadow:0 0 7px #ff5d73}
.signal-chart{height:25px!important;margin-top:1px!important}.server-status-busy .signal-chart polyline{stroke:#ffd166;filter:drop-shadow(0 0 3px #ffd166)}.server-status-critical .signal-chart polyline{stroke:#ff5d73;filter:drop-shadow(0 0 3px #ff5d73)}
.reserve-panel .server-status-body{overflow:hidden}.reserve-panel .server-status-hero{height:42px!important}.reserve-panel .server-status-foot{margin-top:2px!important;padding-top:2px!important}
.reserve-panel>.overview-panel-resize-handle{z-index:20}.reserve-panel>.server-status-body{max-height:calc(100% - 32px)}
.reserve-panel>.overview-panel-resize-handle{top:-12px!important;height:24px!important;opacity:.76!important;pointer-events:auto}.reserve-panel>.overview-panel-resize-handle span{width:34px;height:3px}
.reserve-panel{padding:0 12px 9px!important}.reserve-panel .panel-heading{height:43px!important;min-height:43px!important;margin-bottom:0!important;padding:3px 14px!important}.reserve-panel>.server-status-body{padding-top:6px!important}
.server-status-blue{color:#5ea8ff!important;border-color:#5ea8ff66!important}.server-status-yellow{color:#ffd166!important;border-color:#ffd16666!important}.server-status-orange{color:#ff9f43!important;border-color:#ff9f4366!important}.server-orbit.server-status-blue{border-color:#5ea8ff99;box-shadow:0 0 16px #5ea8ff38,inset 0 0 12px #5ea8ff20}.server-orbit.server-status-yellow{border-color:#ffd16699;box-shadow:0 0 16px #ffd16638,inset 0 0 12px #ffd16620}.server-orbit.server-status-orange{border-color:#ff9f43aa;box-shadow:0 0 16px #ff9f4340,inset 0 0 12px #ff9f4322}
.server-status-blue .server-live-dot{background:#5ea8ff;box-shadow:0 0 7px #5ea8ff}.server-status-blue .signal-chart polyline{stroke:#5ea8ff;filter:drop-shadow(0 0 3px #5ea8ff)}.server-status-yellow .server-live-dot{background:#ffd166;box-shadow:0 0 7px #ffd166}.server-status-yellow .signal-chart polyline{stroke:#ffd166;filter:drop-shadow(0 0 3px #ffd166)}.server-status-orange .server-live-dot{background:#ff9f43;box-shadow:0 0 7px #ff9f43}.server-status-orange .signal-chart polyline{stroke:#ff9f43;filter:drop-shadow(0 0 3px #ff9f43)}
.signal-chart .chart-grid{fill:none;stroke:#6cf5d71c;stroke-width:1;vector-effect:non-scaling-stroke}.signal-chart polyline{position:relative;z-index:1}
.server-orbit{background:transparent!important;overflow:hidden;border-radius:50%}
.server-orbit,.server-orbit.server-status-busy,.server-orbit.server-status-critical,.server-orbit.server-status-blue,.server-orbit.server-status-yellow,.server-orbit.server-status-orange{box-shadow:none!important}
.reserve-panel .server-status-body{font-size:clamp(11px,.72vw,14px)}.reserve-panel .server-signal span,.reserve-panel .server-status-stat span{font-size:clamp(11px,.62vw,13px)!important}.reserve-panel .server-status-stat strong{font-size:clamp(13px,.82vw,16px)!important}.reserve-panel .server-status-stat strong small,.reserve-panel .server-status-stat>small{font-size:clamp(11px,.55vw,12px)!important}.reserve-panel .mini-badge{font-size:clamp(11px,.62vw,13px)!important}
.server-status-healthy{color:#19d66b!important}.server-status-blue{color:#5ea8ff!important}.server-status-yellow{color:#ffd166!important}.server-status-orange{color:#ff9f43!important}.server-status-critical{color:#ff5d73!important}
.server-orbit.server-status-healthy b{color:#19d66b!important}.server-orbit.server-status-blue b{color:#5ea8ff!important}.server-orbit.server-status-yellow b{color:#ffd166!important}.server-orbit.server-status-orange b{color:#ff9f43!important}.server-orbit.server-status-critical b{color:#ff5d73!important}
.server-resource-trigger{cursor:pointer;pointer-events:auto;transition:color .18s,filter .18s,transform .18s}.server-resource-trigger:hover,.server-resource-trigger:focus-visible{filter:brightness(1.35);transform:scale(1.04);outline:none}
.nav-button[hidden],#settingsButton[hidden]{display:none!important}
.permission-empty{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-height:220px;padding:24px}.permission-empty h2{font-size:18px;margin:0 0 8px}.permission-empty p{margin:0;color:var(--muted);font-size:14px;line-height:1.7}
#overviewReserveCard>.panel-heading{padding-left:5px!important}
