@import"https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&display=swap";.esp-panel-root{color-scheme:dark;font-family:system-ui,sans-serif;color:#e8eaed;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.esp-bound-banner{margin:0 0 12px;padding:10px 14px;border-radius:12px;background:#3b82f61f;border:1px solid rgba(59,130,246,.35);color:#93c5fd;font-size:13px}.esp-bound-banner code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:#e8eaed}.esp-panel-root *{box-sizing:border-box}.esp-panel-root input,.esp-panel-root textarea,.esp-panel-root select,.esp-panel-root [contenteditable=true]{user-select:text;-webkit-user-select:text;touch-action:manipulation}@media(pointer:coarse){.esp-panel-root input,.esp-panel-root textarea,.esp-panel-root select,.esp-panel-root .pin-settings-input,.esp-panel-root .filter-field select{font-size:16px}}.esp-panel-root .app--error .error-box{padding:.75rem;border-radius:6px;background:#2a1515;color:#f28b82;overflow-x:auto;font-size:.875rem}.esp-panel-root .app{max-width:640px;margin:0 auto;padding:0}.esp-panel-root .app--dashboard{max-width:100%}.esp-panel-root .app__content{min-height:0}.esp-panel-root h1{margin:0 0 .5rem;font-size:1.5rem}.status{margin:0 0 1.5rem;color:#9aa0a6}.status--connected{color:#81c995}.status--error,.status--disconnected{color:#f28b82}.filter-bar{display:flex;flex-wrap:wrap;gap:.75rem 1.25rem;margin-bottom:1rem;padding:0;border:none;background:transparent}.filter-field{display:flex;align-items:center;gap:.5rem;flex:1 1 12rem;min-width:10rem;margin:0;color:#9aa0a6}.filter-field:focus-within{color:#e8eaed}.filter-icon{flex-shrink:0;display:block}.filter-field__select{flex:1;min-width:0;padding:.5rem .75rem;border:1px solid #3c4043;border-radius:6px;background:#0f1115;color:inherit;font:inherit}.filter-field__select:disabled{opacity:.45;cursor:not-allowed}.gpio-section{margin-bottom:1.5rem;padding:0;border:none;background:transparent}.gpio-section__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.75rem}.gpio-section__header h2{margin:0;font-size:1.125rem;font-weight:600;flex:1;min-width:0}.gpio-section__actions{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.gpio-info-btn{display:inline-flex;align-items:center;justify-content:center;padding:.35rem;border:none;border-radius:6px;background:transparent;color:#9aa0a6}.gpio-info-btn:hover:not(:disabled){color:#8ab4f8;background:#1a1d23}.gpio-info-btn:disabled{opacity:.35;cursor:not-allowed}.loader{display:inline-flex;align-items:center;gap:.5rem;color:#9aa0a6;font-size:.875rem}.loader--compact{gap:0}.loader__spinner{width:1.125rem;height:1.125rem;border:2px solid #3c4043;border-top-color:#8ab4f8;border-radius:50%;animation:spin .7s linear infinite}.loader__label:empty{display:none}@keyframes spin{to{transform:rotate(360deg)}}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:#000000a6}.modal:not(.modal--page){padding:max(1.5rem,env(safe-area-inset-top,0px)) max(1.5rem,env(safe-area-inset-right,0px)) max(1.5rem,env(safe-area-inset-bottom,0px)) max(1.5rem,env(safe-area-inset-left,0px))}.modal__dialog{width:min(100%,520px);max-height:min(90vh,640px);display:flex;flex-direction:column;border:1px solid #3c4043;border-radius:10px;background:#1a1d23;box-shadow:0 12px 40px #00000073}.modal:not(.modal--page) .modal__dialog{max-height:min(calc(100dvh - 3rem),640px)}.modal__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.85rem 1rem;border-bottom:1px solid #2a2d33}.modal:not(.modal--page) .modal__header{padding:1rem 1.25rem}.modal__header h2{margin:0;font-size:1rem;font-weight:600;flex:1;min-width:0}.modal__header-right{display:flex;align-items:center;gap:.35rem;flex-shrink:0}.modal__header-actions{display:flex;align-items:center;gap:.5rem}.modal__header-actions button{border:0;border-radius:6px;color:#e8eaed;font-size:.8125rem;line-height:1.2;filter:none}.modal__header-actions button:hover:not(:disabled){background:#2f333d;filter:none}.modal__header-actions button:disabled{opacity:.45;cursor:not-allowed}.modal__header-actions .modal__header-btn--primary{background:#8ab4f8;border-color:#8ab4f8;color:#0f1115;font-weight:600}.modal__header-actions .modal__header-btn--primary:hover:not(:disabled){background:#aecbfa;border-color:#aecbfa}.modal--page{padding:0;background:#0f1115;align-items:stretch;justify-content:stretch}.modal--top{z-index:1100}.modal--top:has(.board-picker) .modal__dialog{width:min(100%,420px);max-height:calc(100dvh - max(1rem,env(safe-area-inset-top,0px)) - max(1rem,env(safe-area-inset-bottom,0px)));overflow:hidden}.modal--top:has(.board-picker) .modal__header{padding:.65rem .75rem}.modal--top:has(.board-picker) .modal__frame{flex:1 1 auto;min-height:0;overflow:hidden}.modal--top:has(.board-picker) .modal__body{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding:.35rem .55rem .55rem}.modal__dialog--page{width:100%;height:100%;max-height:none;border:none;border-radius:0;box-shadow:none;background:#0f1115;align-items:center}.template-picker-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem}.template-picker-item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;padding:.65rem .75rem;border:1px solid #3c4043;border-radius:8px;background:#252830;color:#e8eaed;text-align:left;filter:none}.template-picker-item:hover:not(:disabled){border-color:#8ab4f8;background:#2a2d33;filter:none}.template-picker-item:disabled{opacity:.45;cursor:not-allowed}.template-picker-item__name{font-size:.9375rem;font-weight:500}.template-picker-item__meta{font-size:.8125rem;color:#9aa0a6;flex-shrink:0}.modal__frame{width:100%;display:flex;flex-direction:column;min-height:0}.modal__frame--page{max-width:42rem;flex:1;width:100%;margin:0 auto;padding:0 1.25rem}.modal__dialog--page .modal__header{padding:.75rem 0;flex-shrink:0;border-bottom:1px solid #2a2d33}.modal__dialog--page .modal__header h2{font-size:1.0625rem}.modal__dialog--page .modal__body{flex:1;min-height:0;padding:1rem 0 1.5rem;overflow-y:auto}.modal__header-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:6px;background:transparent;color:#9aa0a6;filter:none}.modal__header-icon-btn:hover:not(:disabled){color:#8ab4f8;background:#2a2d33;filter:none}.modal__header-icon-btn:disabled{opacity:.35;cursor:not-allowed}.modal__close{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:6px;background:transparent;color:#9aa0a6;font-size:1.35rem;line-height:1}.modal__close:hover{color:#e8eaed;background:#2a2d33}.modal__body{padding:1rem;overflow-y:auto}.modal:not(.modal--page) .modal__body{padding:1.25rem}.pin-settings-page{width:100%;min-height:100%;display:flex;flex-direction:column}.pin-settings__actions--footer{margin-top:auto;position:sticky;bottom:0;padding:1rem 0 .25rem;background:#0f1115;border-top:1px solid #2a2d33}.pin-settings__actions--footer .pin-settings__save{width:100%}.pin-settings__intro{margin-top:0;margin-bottom:1rem}.pin-settings-list{margin-bottom:1rem}.pin-settings-device__head{display:flex;align-items:center;gap:.5rem;padding:.5rem 0;border-bottom:1px solid #2a2d33;cursor:pointer}.pin-settings-device__head:hover{background:#1a1d23}.pin-settings-device__head.is-open{border-bottom-color:#3c4043}.pin-settings-device__head .pin-row__info{flex:1;min-width:0}.pin-settings-device__delete{flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;border:1px solid #3c4043;border-radius:6px;background:transparent;color:#9aa0a6;font-size:1rem;line-height:1;cursor:pointer}.pin-settings-device__delete:hover:not(:disabled){color:#f28b82;background:#2a1515;filter:none}.pin-settings-device__form{padding:.65rem 0 .85rem;border-bottom:1px solid #2a2d33}.pin-slot-field{display:grid;grid-template-columns:1fr minmax(5.5rem,1fr);gap:.4rem;align-items:center}.pin-slot-field__pick{display:flex;align-items:center;justify-content:space-between;gap:.35rem;width:100%;padding:.45rem .55rem;border:1px solid #3c4043;border-radius:8px;background:#1a1d24;color:#e8eaed;font:inherit;font-size:.8125rem;cursor:pointer;text-align:left}.pin-slot-field__pick:hover{border-color:#5f6368;background:#22262e}.pin-slot-field__pick-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pin-slot-field__pick-icon{flex-shrink:0;opacity:.65;font-size:.9rem}.board-picker{display:flex;flex-direction:column;flex:1 1 auto;gap:.35rem;min-height:0;overflow:hidden}.board-picker__hint{margin:0;flex-shrink:0;width:100%;font-size:.75rem;line-height:1.3;color:#9aa0a6;text-align:center}.board-picker__rack{display:flex;flex-direction:row;align-items:stretch;gap:.25rem;flex:1 1 auto;min-height:0;width:100%;max-height:calc(100dvh - 10.5rem);padding:30px;border:1px solid #2a2d33;border-radius:8px;background:#12151a;box-sizing:border-box;overflow-y:auto;overscroll-behavior:contain;justify-content:space-evenly}.board-picker__col{display:flex;flex-direction:column;gap:.38rem;flex:0 1 auto;min-width:0}.board-picker__col--left{align-items:flex-end}.board-picker__col--right{align-items:flex-start}.board-picker__body{flex:0 0 7.5rem;display:flex;flex-direction:column;align-self:stretch;min-height:100%}.board-picker__board-inner{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;width:100%;min-height:100%;padding:.65rem .4rem;border:2px solid #4a5058;border-radius:10px;background:linear-gradient(180deg,#1c2129,#141820);text-align:center;box-sizing:border-box;box-shadow:inset 0 0 0 1px #ffffff0a}.board-picker__board-title{font-size:.8125rem;font-weight:700;color:#e8eaed;line-height:1.2;word-break:break-word}.board-picker__board-sub{font-size:.6875rem;color:#8a9199;line-height:1.2;word-break:break-word}.board-picker__pin-slot{display:block;flex-shrink:0;min-height:1.85rem}.board-picker__pin-btn{display:flex;align-items:center;gap:.3rem;margin:0;min-height:1.85rem;padding:.15rem .05rem;border:none;border-radius:4px;background:transparent;color:inherit;font:inherit;cursor:pointer;touch-action:manipulation}.board-picker__pin-btn--left{flex-direction:row;justify-content:flex-end;text-align:right}.board-picker__pin-btn--right{flex-direction:row-reverse;justify-content:flex-end;text-align:left}.board-picker__pin-btn.is-busy{cursor:not-allowed;opacity:.38}.board-picker__pin-label{display:flex;flex-direction:row;flex-wrap:wrap;gap:.2rem;align-items:baseline;min-width:0;line-height:1.1}.board-picker__pin-btn--left .board-picker__pin-label{justify-content:flex-end}.board-picker__pin-btn--right .board-picker__pin-label{justify-content:flex-start}.board-picker__pin-mark{font-size:.6875rem;font-weight:700;color:#e8eaed}.board-picker__pin-gpio{font-size:.625rem;color:#9aa0a6}.board-picker__pin-dot{flex-shrink:0;width:1rem;height:1rem;border:2px solid #5f6368;border-radius:50%;background:#1e2229;box-sizing:border-box}.board-picker__pin-btn.is-selected .board-picker__pin-dot{border-color:#8ab4f8;background:#252a35;box-shadow:inset 0 0 0 3px #8ab4f8}.board-picker__pin-btn.is-device .board-picker__pin-dot{border-color:#f59e0b;box-shadow:0 0 0 2px #f59e0b59}.board-picker__pin-btn.is-device.is-selected .board-picker__pin-dot{border-color:#f59e0b;box-shadow:0 0 0 2px #f59e0b59,inset 0 0 0 3px #8ab4f8}.board-picker__pin-btn.is-input-only .board-picker__pin-dot{border-style:dashed}.board-picker__pin-btn:not(.is-busy):hover .board-picker__pin-dot{border-color:#8ab4f8}.board-picker__footer{flex-shrink:0;display:flex;flex-direction:column;gap:.35rem;padding-top:.3rem;border-top:1px solid #2a2d33}.board-picker__legend{display:flex;flex-wrap:wrap;justify-content:center;gap:.35rem .65rem;width:100%;font-size:.6875rem;color:#9aa0a6}.board-picker__legend-item{display:inline-flex;align-items:center;gap:.35rem}.board-picker__swatch{width:.75rem;height:.75rem;border-radius:50%;border:2px solid #5f6368;background:#1e2229}.board-picker__swatch--selected{border-color:#8ab4f8;background:#252a35;box-shadow:inset 0 0 0 3px #8ab4f8}.board-picker__swatch--device{border-color:#f59e0b}.board-picker__swatch--busy{opacity:.35}.board-picker__clear{width:100%;padding:.42rem .65rem;border:1px solid #3c4043;border-radius:8px;background:transparent;color:#9aa0a6;font:inherit;font-size:.8125rem;cursor:pointer}.board-picker__clear:hover{border-color:#5f6368;color:#e8eaed}.pin-slot-field--disabled{opacity:.45}.pin-slot-field__role{display:flex;align-items:center;gap:.4rem;font-size:.8125rem;color:#e8eaed}.pin-slot-field__role input[type=checkbox]{margin:0}.pin-settings-device__form-type{margin:0 0 .5rem;font-size:.8125rem;color:#9aa0a6}.pin-settings-device__name{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.65rem}.pin-settings-device__name-label{font-size:.8125rem;color:#e8eaed}.pin-settings-input--name{width:100%}.pin-slot-list{display:flex;flex-direction:column;gap:.45rem}.pin-settings-stepper{margin-top:.75rem;padding-top:.65rem}.pin-settings-stepper__title{margin:0 0 .25rem;font-size:.8125rem;font-weight:600;color:#e8eaed}.pin-settings-stepper__hint{margin:0 0 .45rem;font-size:.75rem}.pin-settings-stepper__input{width:100%;padding:.45rem .55rem;border:1px solid #3c4043;border-radius:8px;background:#1a1d24;color:#e8eaed;font:inherit;font-size:.8125rem;text-align:right;box-sizing:border-box;-webkit-appearance:textfield;appearance:textfield;-moz-appearance:textfield}.pin-settings-stepper__input::-webkit-outer-spin-button,.pin-settings-stepper__input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.pin-settings-stepper__input:disabled{opacity:.45;cursor:not-allowed}.pin-settings-stepper__check{display:flex;align-items:center;justify-content:space-between;gap:.35rem;width:100%;min-height:2.125rem;padding:.45rem .55rem;border:1px solid #3c4043;border-radius:8px;background:#1a1d24;color:#e8eaed;font-size:.8125rem;cursor:pointer;box-sizing:border-box}.pin-settings-stepper__test{margin-top:.75rem;flex-wrap:wrap}.pin-settings-stepper__check input[type=checkbox]{margin:0;flex-shrink:0}.pin-settings__add-btn{display:block;width:100%;margin-bottom:1rem;padding:.75rem 1rem;border:1px dashed #5f6368;border-radius:8px;background:transparent;color:#9aa0a6;font-size:.9375rem;text-align:center;filter:none}.pin-settings__add-btn:hover{border-color:#8ab4f8;color:#e8eaed;background:#8ab4f80f;filter:none}.add-device-modal{display:flex;flex-direction:column;gap:.85rem}.add-device-modal__name-label{display:block;margin-bottom:.35rem;font-size:.8125rem;color:#9aa0a6}.add-device-modal__hint{margin:0}.device-type-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem}.device-type-item{display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;width:100%;padding:.65rem .75rem;border:1px solid #3c4043;border-radius:8px;background:#252830;color:#e8eaed;text-align:left;filter:none}.device-type-item:hover:not(:disabled){border-color:#8ab4f8;background:#2a2d33;filter:none}.device-type-item:disabled{opacity:.45;cursor:not-allowed}.device-type-item--selected{border-color:#8ab4f8;background:#8ab4f81a}.device-type-item__name{font-size:.9375rem;font-weight:500}.device-type-item__desc{font-size:.8125rem;color:#9aa0a6;line-height:1.35}.add-device-modal__actions{display:flex;justify-content:flex-end;gap:.5rem;padding-top:.25rem}.add-device-modal__submit{border-color:#8ab4f8;color:#8ab4f8}.pin-settings-row{display:flex;align-items:center;gap:.75rem;padding:.55rem 0;border-bottom:1px solid #2a2d33;list-style:none}.pin-settings-device__pins .pin-settings-row:last-child{border-bottom:none}.pin-settings-row__info{flex:1;min-width:0}.pin-settings-row__controls{display:flex;align-items:center;gap:.35rem;flex-shrink:0}.pin-settings-input{padding:.35rem .4rem;border:1px solid #3c4043;border-radius:6px;background:#0f1115;color:inherit;font-size:.8125rem;min-width:0}.pin-settings-input--type{width:6.5rem}.pin-settings-input--ch,.pin-settings-input--mark{width:2.5rem;text-align:center}.pin-settings-input--gpio{width:3rem}.pin-settings .pin-settings-row__remove{flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;border:1px solid #3c4043;border-radius:6px;background:transparent;color:#9aa0a6;font-size:1rem;line-height:1;cursor:pointer}.pin-settings .pin-settings-row__remove:hover:not(:disabled){color:#f28b82;background:#2a1515;filter:none}.pin-settings .pin-settings__actions button{padding:.45rem .85rem;border:1px solid #3c4043;border-radius:6px;background:#1a1d23;color:#e8eaed;filter:none}.pin-settings .pin-settings__actions button:hover:not(:disabled){background:#252830;filter:none}.pin-settings__actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1rem}.pin-settings__templates-title{margin:0 0 .35rem;font-size:.9375rem;font-weight:600;color:#e8eaed}.pin-settings__templates-hint{margin:0 0 .75rem}.pin-settings__template-save{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-bottom:.85rem}.pin-settings__template-save .pin-settings-input--name{flex:1;min-width:8rem}.pin-settings__template-deploy{display:flex;flex-direction:column;gap:.5rem}.pin-settings__deploy-targets{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem;max-height:8rem;overflow-y:auto}.pin-settings__deploy-target{display:flex;align-items:center;gap:.45rem;font-size:.8125rem;color:#e8eaed;cursor:pointer}.pin-settings__deploy-target input{margin:0}.pin-settings__deploy-btn{align-self:flex-start}.pin-settings__save{background:#8ab4f8;color:#0f1115;border:none;font-weight:600}.pin-settings__save:disabled{display:none}.field--inline{flex-direction:row;align-items:center;gap:.75rem}.field--inline span{flex-shrink:0}.field--inline select{flex:1}.panel{margin-bottom:1.5rem;padding:1rem;border:1px solid #3c4043;border-radius:8px;background:#1a1d23}.panel h2{margin:0 0 .75rem;font-size:1rem}button,input{font:inherit}button{cursor:pointer;padding:.5rem 1rem;border:none;border-radius:6px;background:#8ab4f8;color:#0f1115}button:hover:not(:disabled){filter:brightness(1.05)}button:disabled{opacity:.45;cursor:not-allowed}.field{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.75rem}.field span{font-size:.875rem;color:#9aa0a6}.field select{padding:.5rem .75rem;border:1px solid #3c4043;border-radius:6px;background:#0f1115;color:inherit}.hint{margin:0 0 .75rem;font-size:.8125rem;color:#9aa0a6}.pin-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:.5rem}.pin-list__status{margin:0 0 .35rem;font-size:.8125rem}.pin-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem 0;border:none;border-bottom:1px solid #2a2d33;border-radius:0;background:transparent}.pin-row:has(.pin-row__divider){border-bottom:none}.pin-row__divider{flex:0 0 100%;height:0;margin:.15rem 0 0;border:0;border-bottom:1px solid #3c4043}.pin-row--unconfigured{opacity:.38;pointer-events:none;-webkit-user-select:none;user-select:none}.pin-row__na{flex-shrink:0;min-width:2.5rem;font-size:.8125rem;color:#5f6368;text-align:right}.pin-row__stepper{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;gap:.35rem;flex-shrink:0}.pin-row__stepper-label{flex-shrink:0;font-size:.8125rem;font-weight:600;color:#9aa0a6;white-space:nowrap}.pin-row__stepper-sep,.pin-row__mark-sep{font-weight:400;color:#5f6368}.pin-row__stepper-input{width:4.25rem;padding:.35rem .45rem;border:1px solid #3c4043;border-radius:6px;background:#0f1115;color:inherit;font-size:.8125rem}.pin-row__stepper-input:disabled,.pin-row__stepper-select:disabled{opacity:.45;cursor:not-allowed}.pin-row__stepper-select{padding:.35rem .45rem;border:1px solid #3c4043;border-radius:6px;background:#0f1115;color:inherit;font-size:.8125rem;min-width:5.5rem}.pin-row__stepper-go{flex-shrink:0;padding:.35rem .55rem;font-size:.875rem;line-height:1}.pin-row__stepper-params{flex:0 0 100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(5.5rem,1fr));gap:.35rem .5rem;align-items:end}.pin-row__stepper-param{display:flex;flex-direction:column;gap:.2rem;font-size:.6875rem;color:#9aa0a6}.pin-row__stepper-param--check{flex-direction:row;align-items:center;gap:.35rem;padding-top:1.1rem}.pin-row__stepper-param-input{width:100%;padding:.3rem .4rem;border:1px solid #3c4043;border-radius:6px;background:#0f1115;color:inherit;font-size:.75rem}.pin-row__stepper-save{padding:.35rem .55rem;font-size:.75rem;align-self:end}.pin-row__servo{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;gap:.35rem;flex-shrink:0}.pin-row__servo-range{width:5.5rem;accent-color:#8ab4f8}.pin-row__servo-angle{min-width:2.25rem;font-size:.8125rem;color:#9aa0a6;text-align:right}.pin-row__servo-go{flex-shrink:0;padding:.35rem .55rem;font-size:.875rem;line-height:1}.pin-row__servo-params{flex:0 0 100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(5.5rem,1fr));gap:.35rem .5rem}.pin-row__servo-param{display:flex;flex-direction:column;gap:.2rem;font-size:.6875rem;color:#9aa0a6}.pin-row__servo-param-input{width:100%;padding:.3rem .4rem;border:1px solid #3c4043;border-radius:6px;background:#0f1115;color:inherit;font-size:.75rem}.pin-list .pin-row:last-child{border-bottom:none}.pin-row__info{display:flex;flex-direction:column;gap:.15rem;min-width:0}.pin-row__mark{font-weight:600}.pin-row__meta{font-size:.8125rem;color:#9aa0a6}.switch{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;flex-shrink:0;-webkit-user-select:none;user-select:none}.switch input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.switch__track{position:relative;width:2.75rem;height:1.5rem;border-radius:999px;background:#3c4043;transition:background .2s}.switch__track:after{content:"";position:absolute;top:2px;left:2px;width:1.25rem;height:1.25rem;border-radius:50%;background:#e8eaed;transition:transform .2s}.switch--on .switch__track{background:#81c995}.switch--on .switch__track:after{transform:translate(1.25rem)}.switch__state{min-width:2rem;font-size:.8125rem;color:#9aa0a6}.switch--on .switch__state{color:#81c995}.switch:has(input:disabled){opacity:.45;cursor:not-allowed}.btn-on{background:#81c995}.btn-off{background:#f28b82}.broadcast-form{display:flex;gap:.5rem}.broadcast-form input{flex:1;padding:.5rem .75rem;border:1px solid #3c4043;border-radius:6px;background:#0f1115;color:inherit}.log{margin:0;padding:0;list-style:none;max-height:240px;overflow-y:auto;font-size:.875rem}.log li{padding:.35rem 0;border-bottom:1px solid #2a2d33;word-break:break-word}.log time{color:#9aa0a6;margin-right:.5rem}.telemetry-panel .telemetry-meta{margin:0 0 .75rem;font-size:.875rem;color:#9aa0a6}.telemetry-grid{display:grid;gap:.75rem}.telemetry-card{padding:.75rem;border-radius:8px;background:#1a1d23;border:1px solid #2a2d33}.telemetry-card h3{margin:0 0 .5rem;font-size:.9rem}.telemetry-card ul{margin:0;padding:0;list-style:none;font-size:.875rem}.telemetry-card li+li{margin-top:.25rem}.telemetry-card--wide{grid-column:1 / -1}.telemetry-pin-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.35rem 0;border-bottom:1px solid #2a2d33}.telemetry-pins .telemetry-pin-row:last-child{border-bottom:none}.telemetry-pin-info{display:flex;flex-wrap:wrap;align-items:baseline;gap:.35rem .75rem;min-width:0}.telemetry-pin-mark{font-weight:600}.telemetry-pin-gpio,.telemetry-pin-type{font-size:.8125rem;color:#9aa0a6}.telemetry-pin-on{font-size:.8125rem;font-weight:600;color:#81c995;flex-shrink:0}.telemetry-pin-off{font-size:.8125rem;color:#9aa0a6;flex-shrink:0}.telemetry-pin-na{font-size:.8125rem;color:#5f6368;flex-shrink:0}.pairs-grid-wrap{overflow-x:auto}.pairs-grid{width:100%;border-collapse:collapse;font-size:.8125rem}.pairs-grid th,.pairs-grid td{padding:.45rem .55rem;border-bottom:1px solid #3c4043;text-align:left;vertical-align:top}.pairs-grid th{color:#9aa0a6;font-weight:600;white-space:nowrap}.pairs-grid__sub{display:block;font-size:.75rem;color:#9aa0a6;margin-top:.15rem}.pairs-grid__row--off{opacity:.55}.pairs-grid__lid-open{color:#fbbc04;font-weight:600}.pin-device{list-style:none;margin:0 0 .75rem;padding:0}.pin-device__title{font-size:.8rem;font-weight:600;color:#9aa0a6;margin-bottom:.35rem;text-transform:uppercase;letter-spacing:.03em}.pin-device__pins{list-style:none;margin:0;padding:0}.app-nav{position:sticky;top:0;z-index:40;display:flex;gap:.5rem;margin:0 0 1rem;padding:.35rem;border:1px solid #3c4043;border-radius:10px;background:#1a1d23}.app-nav__tab{flex:1;margin:0;padding:.65rem .75rem;border:1px solid #3c4043;border-radius:8px;background:#1a1d23;color:#9aa0a6;font:inherit;font-size:.9375rem;font-weight:600;cursor:pointer}.app-nav__tab:hover{color:#e8eaed;border-color:#5f6368}.app-nav__tab--active{color:#e8eaed;border-color:#8ab4f8;background:#252a33}.dashboard__header{margin-bottom:1.25rem}.dashboard__title,.settings__title{margin:0 0 .35rem;font-size:1.35rem}.dashboard__meta{margin:0;color:#9aa0a6;font-size:.875rem}.dashboard__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.dashboard__grid--3,.dashboard__grid--12{grid-template-columns:repeat(3,minmax(0,1fr))}@media(min-width:900px){.dashboard__grid--12{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:1200px){.dashboard__grid--12{grid-template-columns:repeat(6,minmax(0,1fr))}}.dashboard__group{margin-bottom:1.5rem}.dashboard__group-title{margin:0 0 .75rem;font-size:.875rem;font-weight:600;color:#9aa0a6;letter-spacing:.02em}@media(min-width:640px){.dashboard__grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:520px){.dashboard__grid--3{grid-template-columns:repeat(2,minmax(0,1fr))}}.settings__title{margin-bottom:1rem}.pair-flask{display:flex;flex-direction:column;align-items:center;padding:.75rem .5rem .5rem;border:1px solid #3c4043;border-radius:12px;background:linear-gradient(180deg,#1a1d23,#14171c)}.pair-flask--offline{opacity:.55}.pair-flask--busy .pair-flask__body{box-shadow:0 0 0 1px #8ab4f8,0 0 12px #8ab4f840}.pair-flask__head{width:100%;display:flex;justify-content:space-between;align-items:baseline;gap:.35rem;margin-bottom:.5rem;padding:0 .25rem}.pair-flask__label{font-size:.9375rem;font-weight:700;letter-spacing:.04em}.pair-flask__room{font-size:.6875rem;color:#9aa0a6}.pair-flask__vessel{position:relative;display:flex;flex-direction:column;align-items:center;width:100%;max-width:7.5rem}.pair-flask__lid{width:2.1rem;height:.55rem;border-radius:4px 4px 2px 2px;background:linear-gradient(180deg,#9aa0a6,#5f6368);transform-origin:center bottom;transition:transform .25s ease;z-index:2}.pair-flask__lid--open{transform:translateY(-2px) rotate(-28deg);background:linear-gradient(180deg,#fbbc04,#e37400)}.pair-flask__neck{width:55%;height:.65rem;background:#8ab4f81f;border-left:2px solid rgba(138,180,248,.45);border-right:2px solid rgba(138,180,248,.45)}.pair-flask__body{width:100%;display:flex;flex-direction:column;gap:2px;padding:3px;border-radius:2px 2px 8px 8px;background:#8ab4f814;border-left:2px solid rgba(138,180,248,.45);border-right:2px solid rgba(138,180,248,.45)}.pair-flask__segment{position:relative;flex:1;min-height:1.55rem;border:1px solid rgba(138,180,248,.22);border-radius:2px;background:transparent;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.pair-flask__segment--empty{background:transparent;border-color:#8ab4f824;box-shadow:none}.pair-flask__segment--filled{border-color:#81c99559;background:#81c9952e;box-shadow:inset 0 1px #ffffff0f}.pair-flask__segment--active{border-color:#81c9958c;box-shadow:inset 0 0 0 1px #81c99573,0 0 6px #81c99533}.pair-flask__base{width:100%;height:.35rem;margin-top:-1px;border-radius:0 0 6px 6px;background:#8ab4f859;border-left:2px solid rgba(138,180,248,.45);border-right:2px solid rgba(138,180,248,.45);border-bottom:2px solid rgba(138,180,248,.45)}.pair-flask__foot{width:100%;display:flex;justify-content:space-between;align-items:center;gap:.35rem;margin-top:.55rem;padding:0 .25rem;font-size:.6875rem}.pair-flask__status{color:#81c995;text-transform:uppercase;letter-spacing:.04em}.pair-flask__status--off{color:#9aa0a6}.pair-flask__lid-tag{color:#fbbc04;font-weight:600}.pair-flask__sensor{font-size:.5625rem;font-weight:600;letter-spacing:.03em;padding:.1rem .25rem;border-radius:3px}.pair-flask__sensor--lim{color:#f28b82;background:#f28b8226}.pair-flask__sensor--obs{color:#fdd663;background:#fdd6631f}.pair-flask:not(.pair-flask--offline){cursor:context-menu}.pair-flask--menu-open{outline:1px solid rgba(138,180,248,.55)}.context-menu{position:fixed;z-index:1000;min-width:10.5rem;padding:.35rem;border:1px solid #3c4043;border-radius:8px;background:#252a33;box-shadow:0 8px 24px #00000073}.context-menu__item{display:block;width:100%;margin:0;padding:.55rem .75rem;border:none;border-radius:6px;background:transparent;color:#e8eaed;font:inherit;font-size:.875rem;text-align:left;cursor:pointer}.context-menu__item:hover:not(:disabled){background:#8ab4f826}.context-menu__item:disabled{opacity:.45;cursor:not-allowed}.dashboard__hint{margin:.35rem 0 0;font-size:.8125rem}.slave-status{margin-bottom:1.25rem;padding:.75rem;border:1px solid #3c4043;border-radius:10px;background:#1a1d23}.slave-status__title{margin:0 0 .65rem;font-size:.8125rem;font-weight:600;color:#9aa0a6;text-transform:uppercase;letter-spacing:.04em}.slave-status__row{display:grid;grid-template-columns:1fr auto;gap:.5rem .75rem;align-items:center;padding:.55rem 0;border-top:1px solid #3c4043}.slave-status__row:first-of-type{border-top:none;padding-top:0}.slave-status__info{display:flex;align-items:center;gap:.55rem;min-width:0}.slave-status__dot{flex-shrink:0;width:.55rem;height:.55rem;border-radius:50%;background:#5f6368}.slave-status__dot--on{background:#81c995;box-shadow:0 0 6px #81c99580}.slave-status__dot--off{background:#9aa0a6}.slave-status__dot--unknown{background:#fbbc04}.slave-status__name{display:block;font-size:.9375rem}.slave-status__channels{display:block;font-size:.75rem;color:#9aa0a6}.slave-status__meta{grid-column:1;display:flex;flex-wrap:wrap;gap:.35rem .75rem;font-size:.75rem;color:#9aa0a6}.slave-status__state--on{color:#81c995}.slave-status__state--off{color:#9aa0a6}.slave-status__ping{color:#8ab4f8}.slave-status__btn{grid-column:2;grid-row:1 / span 2;align-self:center;margin:0;padding:.45rem .75rem;border:1px solid #3c4043;border-radius:6px;background:#252a33;color:#e8eaed;font:inherit;font-size:.8125rem;cursor:pointer;white-space:nowrap}.slave-status__btn:hover:not(:disabled){border-color:#8ab4f8}.slave-status__btn:disabled{opacity:.45;cursor:not-allowed}@media(min-width:520px){.slave-status__row{grid-template-columns:1fr auto auto}.slave-status__meta{grid-column:2;flex-direction:column;align-items:flex-end;gap:.15rem}.slave-status__btn{grid-column:3;grid-row:1}}.master-audio{margin:1rem 0 1.25rem;padding:.85rem 1rem;border:1px solid var(--border, #2a2a2a);border-radius:8px;background:var(--panel-bg, rgba(255, 255, 255, .02))}.master-audio__title{margin:0 0 .35rem;font-size:1rem;font-weight:600}.master-audio__hint{margin:0 0 .75rem}.master-audio__actions{display:flex;flex-wrap:wrap;gap:.5rem}.master-audio__btn{padding:.45rem .85rem;border:1px solid var(--border, #333);border-radius:6px;background:var(--btn-bg, #1e1e1e);color:inherit;font:inherit;cursor:pointer}.master-audio__btn:hover:not(:disabled){background:var(--btn-hover, #2a2a2a)}.master-audio__btn:disabled{opacity:.45;cursor:not-allowed}.master-audio__btn--play{border-color:#2d6a4f}.master-audio__btn--stop{border-color:#9b2226}:root{--bg: #0b0d10;--bg-elevated: #12151a;--bg-card: #161a21;--bg-soft: #1c222b;--border: rgba(255, 255, 255, .06);--border-strong: rgba(255, 255, 255, .1);--text: #f3f5f7;--text-muted: #8b93a0;--text-dim: #5f6774;--accent: #3b82f6;--accent-soft: rgba(59, 130, 246, .16);--success: #34d399;--warning: #f59e0b;--danger: #f87171;--radius: 16px;--radius-sm: 10px;--sidebar-width: 232px}*,*:before,*:after{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;font-family:Manrope,system-ui,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;box-sizing:border-box}input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}button{font-family:inherit}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#2a313c;border-radius:999px}.admin-sidebar{width:var(--sidebar-width);flex-shrink:0;background:var(--bg-elevated);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:18px 12px;min-height:100vh;height:100vh;position:sticky;top:0;align-self:flex-start;overflow:hidden}.admin-sidebar__brand{display:flex;align-items:center;gap:12px;padding:4px 8px 18px;flex-shrink:0}.admin-sidebar__logo{width:36px;height:36px;border-radius:10px;background:var(--accent);display:grid;place-items:center;font-weight:800;font-size:16px;color:#fff;flex-shrink:0}.admin-sidebar__title{font-weight:800;font-size:16px;letter-spacing:-.02em;line-height:1.2}.admin-sidebar__subtitle{font-size:12px;color:var(--text-muted);line-height:1.2;margin-top:2px}.admin-sidebar__nav{display:flex;flex-direction:column;gap:4px;flex:1 1 auto;min-height:0;align-content:flex-start;justify-content:flex-start}.admin-sidebar__item{display:flex;align-items:center;gap:10px;border:none;border-radius:12px;padding:10px 12px;min-height:40px;height:40px;flex:0 0 auto;cursor:pointer;text-align:left;background:transparent;color:var(--text-muted);font-weight:600;font-size:14px;line-height:1;width:100%}.admin-sidebar__item:hover:not(.is-active){background:#ffffff0a;color:var(--text)}.admin-sidebar__item.is-active{background:var(--accent);color:#fff;font-weight:700}.admin-sidebar__icon{display:inline-flex;width:18px;height:18px;flex-shrink:0;opacity:.9}.admin-sidebar__item.is-active .admin-sidebar__icon{opacity:1}.admin-sidebar__label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.admin-sidebar__footer{flex-shrink:0;margin-top:auto;padding-top:12px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:8px}.admin-sidebar__logout{color:var(--text-muted)}.admin-sidebar__logout:hover:not(:disabled){background:#f871711a;color:var(--danger)}.admin-sidebar__logout:disabled{opacity:.6;cursor:default}.admin-sidebar__footer-meta{padding:0 8px 2px;font-size:12px;color:var(--text-dim)}.admin-sidebar__footer-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:4px}.admin-sidebar__footer-ver{font-size:11px;color:var(--text-dim)}.admin-icon-btn:hover:not(:disabled){background:#f871711f!important;opacity:1!important}@media(max-width:900px){:root{--sidebar-width: 72px}.admin-sidebar{padding:14px 10px}.admin-sidebar__brand{justify-content:center;padding:4px 0 14px}.admin-sidebar__brand-text,.admin-sidebar__label,.admin-sidebar__footer-meta{display:none}.admin-sidebar__item{justify-content:center;padding:0;width:44px;height:44px;min-height:44px;margin:0 auto}.admin-sidebar__footer{border-top:1px solid var(--border);align-items:center}}
