body.admin-route .lab-hardware-profile{padding:20px;margin:0 0 22px;border:1px solid #19cce6;border-radius:16px;background:linear-gradient(135deg,#0b3446cc,#071827cc)}body.admin-route .lab-hardware-profile h3{margin:8px 0 18px}body.admin-route .lab-hardware-profile p{line-height:1.5;margin:14px 0}body.admin-route .lab-hardware-profile small{display:block;line-height:1.5;color:#a4c5d2}body.admin-route .lab-hardware-badge{display:inline-block;padding:9px 13px;margin:8px 0;border:1px solid #219fb9;border-radius:10px;color:#79e8ff;font-size:.85rem}/* Scoped to the laboratory admin panel. */
body.admin-route .lab-console .lab-head{align-items:center;flex-wrap:wrap;gap:18px}
body.admin-route .lab-console .lab-head>div{min-width:0}
body.admin-route .lab-console .lab-setup-actions{display:flex;flex-wrap:wrap;gap:10px;max-width:100%;align-items:center}
body.admin-route .lab-console .lab-summary-grid{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:16px;margin:18px 0 0;align-items:stretch}
body.admin-route .lab-console .lab-summary-copy{min-width:0;display:flex;flex-direction:column;justify-content:center;gap:8px}
body.admin-route .lab-console .lab-summary-copy p{margin:0;color:#a5c7d5;line-height:1.4}
body.admin-route .lab-console .lab-hardware-badge{max-width:100%;box-sizing:border-box;overflow-wrap:anywhere;margin:0;align-self:flex-start}
body.admin-route .lab-console .lab-communication{min-width:0;min-height:92px;box-sizing:border-box;padding:12px 16px;display:grid;grid-template-columns:1fr auto;gap:5px 8px;border:1px solid #278799;border-radius:12px;background:linear-gradient(135deg,#0b2a3be8,#04131eee);box-shadow:inset 0 0 22px #00d4ff0d}
body.admin-route .lab-console .lab-communication>small{font-size:10px;letter-spacing:.12em;color:#67dcee}
body.admin-route .lab-console [data-lab-link]{font-size:11px;color:#b9cbd4;text-align:right}
body.admin-route .lab-console [data-lab-link][data-online=true]{color:#62ecc2}
body.admin-route .lab-console [data-lab-message]{font:500 13px/1.35 Arial,sans-serif;grid-column:1/-1;overflow-wrap:anywhere;max-height:3.9em;overflow:auto;color:#e7faff}
body.admin-route .lab-console .lab-status-details{grid-column:1/-1;justify-self:start;border:0;background:none;padding:2px 0;color:#69d9ed;cursor:pointer;font-size:11px;text-decoration:underline}
body.admin-route .lab-console .lab-display{min-width:0;box-sizing:border-box}
body.admin-route .lab-console .lab-display strong{overflow-wrap:anywhere;min-width:0;font-size:clamp(1.8rem,3vw,3.3rem)}
body.admin-route .lab-console [data-reading-hint],body.admin-route .lab-console [data-demo-label]{grid-column:1/-1;font:10px/1.4 Arial,sans-serif;letter-spacing:.05em;margin-top:9px;color:#8eacba}
body.admin-route .lab-console [data-demo-label]{color:#ffce78}
body.admin-route .lab-console.lab-powered .lab-base-displays .lab-display{border-color:#23d9e8;box-shadow:inset 0 0 26px #16d9f41a,0 0 var(--lab-glow,18px) #16d9f42b}
body.admin-route .lab-console .lab-control .lab-icon svg{opacity:.55;filter:none;transition:filter .18s,opacity .18s}
body.admin-route .lab-console.lab-powered .lab-control .lab-icon{background:color-mix(in srgb,currentColor 16%,#071526);box-shadow:0 0 var(--lab-glow,18px) color-mix(in srgb,currentColor 40%,transparent),inset 0 0 12px color-mix(in srgb,currentColor 14%,transparent);border-color:currentColor}
body.admin-route .lab-console .lab-control.lab-icon-on .lab-icon svg{opacity:1;filter:drop-shadow(0 0 5px currentColor)}
body.admin-route .lab-console [data-command-state=pending] .lab-icon svg,body.admin-route .lab-console [data-command-state=error] .lab-icon svg{animation:lab-command-blink var(--lab-wait-cycle,500ms) steps(1,end) infinite}
body.admin-route .lab-console [data-command-state=error] .lab-icon{outline:1px solid #ff738e;outline-offset:3px}
body.admin-route .lab-console .lab-booting strong{animation:lab-reading-blink var(--lab-boot-cycle,400ms) steps(1,end) infinite}
body.admin-route .lab-console .lab-control{padding:12px 9px;min-width:0}
body.admin-route .lab-console .lab-control strong,body.admin-route .lab-console .lab-control small{max-width:100%;overflow-wrap:anywhere;text-align:center}
body.admin-route .lab-module-grid{grid-template-columns:repeat(auto-fit,minmax(min(190px,100%),1fr))}
body.admin-route .lab-module-grid>div{min-width:0;box-sizing:border-box}
body.admin-route .lab-module-grid small,body.admin-route .lab-module-grid strong{display:block;max-width:100%;white-space:normal;overflow-wrap:anywhere;word-break:normal}
body.admin-route .lab-module-grid strong{font-size:1rem;line-height:1.5;margin-top:8px}
body.admin-route .lab-action-history{padding-left:22px;color:#bddce8;line-height:1.6;overflow-wrap:anywhere}
body.admin-route .lab-console .lab-wave-grid{grid-template-columns:repeat(auto-fit,minmax(min(180px,100%),1fr))}
@keyframes lab-command-blink{0%,100%{opacity:1;filter:drop-shadow(0 0 6px currentColor)}50%{opacity:.15;filter:none}}
@keyframes lab-reading-blink{0%,100%{opacity:1}50%{opacity:0}}
@media(max-width:700px){body.admin-route .lab-console .lab-summary-grid{grid-template-columns:1fr}body.admin-route .lab-console .lab-base-displays{grid-template-columns:1fr}body.admin-route .lab-console .lab-communication{min-height:100px}body.admin-route .lab-console .lab-controls{grid-template-columns:repeat(2,minmax(0,1fr));padding:12px}body.admin-route .lab-console .lab-head h2{font-size:1.5rem}}
body.admin-route .lab-console .lab-summary-grid{grid-template-columns:repeat(3,minmax(0,1fr))}body.admin-route .lab-console .lab-summary-copy{grid-column:span 2}@media(max-width:700px){body.admin-route .lab-console .lab-summary-grid{grid-template-columns:1fr}body.admin-route .lab-console .lab-summary-copy{grid-column:auto}}
/* Status colours and independent per-state blink timings, shared with CAN. */
body.admin-route .lab-console .lab-wave-gauge[data-ring=on]{background:radial-gradient(circle,#071b29 61%,transparent 63%),conic-gradient(from 225deg,var(--lab-on-color,#36ef89) 0deg 270deg,transparent 270deg);box-shadow:0 0 var(--lab-glow,18px) color-mix(in srgb,var(--lab-on-color,#36ef89) 16%,transparent)}
body.admin-route .lab-console .lab-wave-gauge[data-ring=error]{background:radial-gradient(circle,#071b29 61%,transparent 63%),conic-gradient(from 225deg,var(--lab-error-color,#ff4f65) 0deg 270deg,transparent 270deg)}
body.admin-route .lab-console [data-wave-state]{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;width:25px;height:25px;margin-left:5px;color:#72919f}
body.admin-route .lab-console [data-wave-state] svg{width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
body.admin-route .lab-console [data-indicator=on]{color:var(--lab-on-color,#36ef89);animation:lab-state-blink var(--lab-on-cycle,1000ms) steps(1,end) infinite}
body.admin-route .lab-console [data-indicator=pending]{color:var(--lab-on-color,#36ef89);animation:lab-state-blink var(--lab-wait-cycle,300ms) steps(1,end) infinite}
body.admin-route .lab-console [data-indicator=error]{color:var(--lab-error-color,#ff4f65);animation:lab-state-blink var(--lab-error-cycle,200ms) steps(1,end) infinite}
body.admin-route .lab-console [data-command-state=pending] .lab-icon svg{color:var(--lab-on-color,#36ef89);animation:lab-state-blink var(--lab-wait-cycle,300ms) steps(1,end) infinite}
body.admin-route .lab-console [data-command-state=error] .lab-icon svg{color:var(--lab-error-color,#ff4f65);animation:lab-state-blink var(--lab-error-cycle,200ms) steps(1,end) infinite}
body.admin-route .lab-console [data-command-state=error] .lab-icon{outline-color:var(--lab-error-color,#ff4f65)}
body.admin-route .lab-console .lab-control.lab-icon-on .lab-icon-power svg{color:var(--lab-on-color,#36ef89);animation:lab-state-blink var(--lab-on-cycle,1000ms) steps(1,end) infinite}
@keyframes lab-state-blink{0%,100%{opacity:1;filter:drop-shadow(0 0 5px currentColor)}50%{opacity:.12;filter:none}}
