:root{--bg: #10160f;--panel: #161d15;--panel-2: #1b241a;--line: #2a3628;--ink: #ede8dc;--ink-dim: #9aa392;--teal: #4fc3a1;--amber: #e8a33d;--red: #d96c5b;--mono: "IBM Plex Mono", ui-monospace, monospace;--dur-1: .12s;--dur-2: .2s;--dur-3: .32s;--ease: cubic-bezier(.2, .6, .2, 1);--ease-out: cubic-bezier(.16, 1, .3, 1)}*{box-sizing:border-box}body{margin:0;background:var(--bg);background-image:linear-gradient(rgba(79,195,161,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(79,195,161,.03) 1px,transparent 1px);background-size:32px 32px;color:var(--ink);font-family:IBM Plex Sans,system-ui,sans-serif;font-size:14.5px;min-height:100vh}#root{max-width:1180px;margin:0 auto;padding:0 20px 60px}a{color:var(--teal);text-decoration:none}header.bar{display:flex;align-items:center;gap:18px;padding:14px 0;border-bottom:1px solid var(--line);margin-bottom:22px;position:sticky;top:0;z-index:40;background:var(--bg);transition:border-color var(--dur-2) var(--ease),box-shadow var(--dur-2) var(--ease)}header.bar.scrolled{border-bottom-color:var(--teal);box-shadow:0 6px 20px -12px #000000e6}.brand{font-family:Bricolage Grotesque,sans-serif;font-weight:800;font-size:1.5rem;letter-spacing:.04em;color:var(--ink);text-decoration:none;transition:opacity var(--dur-1) var(--ease)}a.brand:hover{opacity:.82}.brand em{font-style:normal;color:var(--teal)}header.bar nav{display:flex;gap:16px}header.bar nav a{position:relative;color:var(--ink-dim);font-weight:600;padding:6px 2px;transition:color var(--dur-1) var(--ease)}header.bar nav a:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--teal);transform:scaleX(0);transition:transform var(--dur-2) var(--ease),background-color var(--dur-1) var(--ease)}header.bar nav a:hover{color:var(--ink)}header.bar nav a:hover:after{transform:scaleX(.55);background:var(--ink-dim)}header.bar nav a.active{color:var(--ink)}header.bar nav a.active:after{transform:scaleX(1);background:var(--teal)}.nav-burger{display:none;width:40px;height:40px;align-items:center;justify-content:center;background:transparent;border:1px solid var(--line);border-radius:8px;cursor:pointer;flex-shrink:0}.nav-burger:hover{border-color:var(--ink-dim)}.burger-lines{position:relative;width:16px;height:2px;background:var(--ink);border-radius:1px}.burger-lines:before,.burger-lines:after{content:"";position:absolute;left:0;width:16px;height:2px;background:var(--ink);border-radius:1px}.burger-lines:before{top:-5px}.burger-lines:after{top:5px}.profile-anchor{margin-left:auto;position:relative;flex-shrink:0}.avatar{width:38px;height:38px;border-radius:50%;background:var(--panel-2);border:1px solid var(--line);color:var(--ink);font:700 .72rem var(--mono);letter-spacing:.05em;cursor:pointer;position:relative;display:flex;align-items:center;justify-content:center}.avatar:hover{border-color:var(--ink-dim)}.avatar-dot{position:absolute;right:-2px;bottom:-2px;width:11px;height:11px;border:2px solid var(--bg)}.avatar-dot.warn{box-shadow:0 0 7px #e8a33db3;animation:dot-alert 1.5s ease-in-out infinite}.avatar-dot.off{box-shadow:0 0 7px #d96c5bbf;animation:dot-alert .95s ease-in-out infinite}@keyframes dot-alert{50%{box-shadow:0 0 1px #ffffff1f}}.profile-pos{z-index:50;outline:none}.profile-menu{width:250px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px;box-shadow:0 14px 34px #00000080;transform-origin:var(--transform-origin);outline:none;transition:transform var(--dur-2) var(--ease-out),opacity var(--dur-2) var(--ease-out)}.profile-menu[data-starting-style],.profile-menu[data-ending-style]{opacity:0;transform:translateY(-6px) scale(.97)}.pm-name{font-family:Bricolage Grotesque,sans-serif;font-weight:700;font-size:1rem}.pm-sub{font:500 .74rem var(--mono);color:var(--ink-dim);margin-top:2px;overflow-wrap:anywhere}.pm-divider{height:1px;background:var(--line);margin:11px -14px}.pm-row{display:flex;align-items:center;gap:8px;font:500 .78rem var(--mono);color:var(--ink-dim);padding:4px 0}.pm-logout{width:100%;background:transparent;border:1px solid rgba(217,108,91,.5);color:var(--red);border-radius:8px;font:600 .78rem var(--mono);padding:8px;cursor:pointer}.pm-logout:hover{background:#d96c5b1f}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#060a06b8;z-index:55;transition:opacity var(--dur-2) var(--ease)}.drawer-backdrop[data-starting-style],.drawer-backdrop[data-ending-style]{opacity:0}.drawer{position:fixed;top:0;left:0;bottom:0;width:min(280px,82vw);background:var(--panel);border-right:1px solid var(--line);z-index:60;padding:14px 0;outline:none;transition:transform var(--dur-2) var(--ease-out)}.drawer[data-starting-style],.drawer[data-ending-style]{transform:translate(-100%)}.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:4px 18px 14px;border-bottom:1px solid var(--line)}.drawer-nav{display:flex;flex-direction:column;padding-top:8px}.drawer-nav a{font-family:Bricolage Grotesque,sans-serif;font-weight:700;font-size:1.05rem;color:var(--ink-dim);padding:13px 18px;border-left:3px solid transparent}.drawer-nav a.active{color:var(--teal);border-left-color:var(--teal);background:#4fc3a10f}.led{width:10px;height:10px;border-radius:50%;display:inline-block;background:#3a463a}.led.on{background:var(--teal);box-shadow:0 0 8px #4fc3a1cc;animation:pulse 2.4s ease-in-out infinite}.led.off{background:var(--red);box-shadow:0 0 6px #d96c5b80}.led.warn{background:var(--amber)}@keyframes pulse{50%{box-shadow:0 0 3px #4fc3a166}}.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px}.panel h3{margin:0 0 12px;font-family:Bricolage Grotesque,sans-serif;font-size:.85rem;font-weight:700;text-transform:uppercase;letter-spacing:.14em;color:var(--ink-dim)}.grid{display:grid;gap:14px}.grid>*{min-width:0}.grid.fleet{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.grid.cols-2{grid-template-columns:1.2fr .8fr;align-items:start}@media(max-width:860px){.grid.cols-2{grid-template-columns:1fr}}.device-card{display:block;color:var(--ink);transition:border-color .15s}.device-card:hover{border-color:var(--teal)}.device-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}.device-id{font-family:var(--mono);font-weight:600;font-size:1.05rem}.fw-tag{margin-left:auto;font-family:var(--mono);font-size:.72rem;color:var(--bg);background:var(--teal);border-radius:4px;padding:2px 7px;font-weight:600}.fw-tag.stale{background:var(--ink-dim)}.telemetry{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.telemetry .cell{background:var(--panel-2);border-radius:6px;padding:7px 9px}.telemetry .k{font-size:.66rem;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-dim)}.telemetry .v{font-family:var(--mono);font-size:.92rem;margin-top:2px}.relay-row{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;margin-top:12px}.relay{border:1px solid var(--line);background:var(--panel-2);border-radius:8px;padding:9px 4px 7px;text-align:center;font-family:var(--mono);cursor:pointer;color:var(--ink-dim);font-size:.8rem}.relay .state{display:block;font-weight:600;font-size:.95rem;margin-top:2px;color:var(--ink-dim)}.relay.on{border-color:var(--teal);background:#4fc3a11f;color:var(--ink);box-shadow:inset 0 0 0 1px #4fc3a138,0 0 14px -4px #4fc3a166}.relay.on .state{color:var(--teal)}.relay:disabled{opacity:.45;cursor:not-allowed}.relay:not(:disabled):hover{border-color:var(--ink-dim)}.relay.tile{display:flex;flex-direction:column;gap:4px;padding:8px 6px;min-height:62px;font:inherit;font-family:var(--mono);font-size:.8rem;color:var(--ink-dim);text-align:left;outline:none}.relay.tile .tile-head{display:flex;justify-content:space-between;align-items:baseline;line-height:1}.relay.tile .tile-ch{font-weight:600;color:var(--ink)}.relay.tile .state{display:inline;font-size:.75rem;margin:0;letter-spacing:.06em}.relay.tile .tile-note{font-size:.7rem;line-height:1.2;color:var(--ink-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.relay.tile .tile-note.dim{opacity:.4}.relay.tile.on .tile-note{color:var(--teal);opacity:1}.relay.tile:focus-visible{box-shadow:0 0 0 2px var(--teal)}table{width:100%;border-collapse:collapse;font-size:.86rem}th{text-align:left;font-family:var(--mono);font-size:.68rem;text-transform:uppercase;letter-spacing:.12em;color:var(--ink-dim);font-weight:500;padding:6px 10px;border-bottom:1px solid var(--line)}td{padding:8px 10px;border-bottom:1px solid rgba(42,54,40,.55);font-family:var(--mono);vertical-align:middle}tr:hover td{background:#4fc3a10a}.status-chip{font-family:var(--mono);font-size:.72rem;font-weight:600;padding:2px 9px;border-radius:999px;border:1px solid;white-space:nowrap}.status-chip.ok{color:var(--teal);border-color:#4fc3a180}.status-chip.warn{color:var(--amber);border-color:#e8a33d80}.status-chip.bad{color:var(--red);border-color:#d96c5b80}.status-chip.dim{color:var(--ink-dim);border-color:var(--line)}.log{font-family:var(--mono);font-size:.78rem;max-height:480px;overflow-y:auto;display:flex;flex-direction:column;gap:2px}.log .entry{display:flex;gap:10px;padding:4px 6px;border-radius:4px}.log .entry:nth-child(odd){background:#ffffff05}.log .ts{color:var(--ink-dim);flex-shrink:0}.log .kind{width:66px;flex-shrink:0;font-weight:600}.log .kind.online{color:var(--teal)}.log .kind.offline{color:var(--red)}.log .kind.relay{color:var(--amber)}.log .kind.booking{color:#7fb8e8}.log .kind.ota{color:#c99ae0}.log .payload{color:var(--ink-dim);word-break:break-all}.btn-sm{font:600 .75rem var(--mono);background:transparent;color:var(--teal);border:1px solid rgba(79,195,161,.5);border-radius:6px;padding:3px 10px;cursor:pointer}.btn-sm:not(:disabled):not([data-disabled]):hover{background:#4fc3a11f}.btn-sm.danger{color:var(--red);border-color:#d96c5b80}.btn-sm.danger:not(:disabled):not([data-disabled]):hover{background:#d96c5b1f}.btn-sm:disabled,.btn-sm[data-disabled]{opacity:.45;cursor:not-allowed}.empty{color:var(--ink-dim);font-family:var(--mono);font-size:.85rem;padding:24px;text-align:center}.login-input{width:100%;background:var(--panel-2);border:1px solid var(--line);border-radius:8px;color:var(--ink);font-family:var(--mono);font-size:1rem;padding:11px 12px;margin-bottom:10px}.login-input:focus{outline:none;border-color:var(--teal)}.login-input[data-invalid]{border-color:var(--red)}.login-input{scroll-margin:80px 0}.login-input:-webkit-autofill,.login-input:-webkit-autofill:hover,.login-input:-webkit-autofill:focus{-webkit-text-fill-color:var(--ink);-webkit-box-shadow:0 0 0 1000px var(--panel-2) inset;box-shadow:0 0 0 1000px var(--panel-2) inset;caret-color:var(--ink);transition:background-color 9999s ease-out}.login-btn{width:100%;background:var(--teal);color:var(--bg);border:0;border-radius:8px;font:700 .85rem var(--mono);letter-spacing:.1em;padding:11px;cursor:pointer}.login-btn:disabled,.login-btn[data-disabled]{opacity:.4;cursor:not-allowed}.login-link{background:none;border:0;color:var(--ink-dim);font:500 .78rem var(--mono);cursor:pointer;padding:4px 0;margin-top:8px}.login-link:hover{color:var(--teal)}h2.page{font-family:Bricolage Grotesque,sans-serif;font-weight:700;font-size:1.15rem;margin:4px 0 16px}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.toolbar input[type=search]{background:var(--panel-2);border:1px solid var(--line);border-radius:8px;color:var(--ink);font-family:var(--mono);font-size:.82rem;padding:7px 11px;min-width:220px}.toolbar input[type=search]:focus{outline:none;border-color:var(--teal)}.filter-chip{background:transparent;border:1px solid var(--line);border-radius:999px;color:var(--ink-dim);font:600 .74rem var(--mono);padding:5px 12px;cursor:pointer;display:inline-flex;align-items:center;-webkit-user-select:none;user-select:none}.filter-chip:hover{border-color:var(--ink-dim)}.filter-chip.active,.filter-chip[data-checked]{border-color:var(--teal);color:var(--teal);background:#4fc3a114}.filter-chip .n{opacity:.7;margin-left:5px}.panel.scroll-table{max-height:70vh;overflow-y:auto;overflow-x:auto}.panel.scroll-table table{min-width:680px}.panel.scroll-table thead th{position:sticky;top:-16px;background:var(--panel);z-index:1}.btn-sm.confirm{background:var(--red);border-color:var(--red);color:var(--bg);font-weight:700}.btn-sm.confirm:not(:disabled):not([data-disabled]):hover{background:var(--red);filter:brightness(1.12)}.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}.stat-row .cell{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px}.stat-row .k{font-size:.66rem;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-dim)}.stat-row .v{font-family:var(--mono);font-size:1.35rem;font-weight:600;margin-top:4px}.stat-row .sub{font-family:var(--mono);font-size:.7rem;color:var(--ink-dim);margin-top:3px}.pump-status{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.pump-word{font-family:Bricolage Grotesque,sans-serif;font-weight:800;font-size:1.7rem;letter-spacing:.03em;line-height:1.1}.pump-word.run{color:var(--teal)}.pump-word.idle{color:var(--ink-dim)}.pump-word.off{color:var(--red)}.pump-word.warn{color:var(--amber)}.pump-sub{font-family:var(--mono);font-size:.8rem;color:var(--ink-dim);margin-top:4px}.pump-btn{margin-left:auto;font:700 .92rem var(--mono);letter-spacing:.12em;padding:14px 28px;border-radius:10px;cursor:pointer;border:1px solid;background:transparent}.pump-btn.start{color:var(--teal);border-color:var(--teal);background:#4fc3a11a}.pump-btn.start:not(:disabled):not([data-disabled]):hover{background:var(--teal);color:var(--bg)}.pump-btn.stop{color:var(--red);border-color:var(--red);background:#d96c5b1a}.pump-btn.stop:not(:disabled):not([data-disabled]):hover{background:var(--red);color:var(--bg)}.pump-btn:disabled,.pump-btn[data-disabled]{opacity:.4;cursor:not-allowed}.pump-btn.start[data-state=busy],.pump-btn.start[data-state=success]{background:var(--teal);border-color:var(--teal);color:var(--bg)}.pump-btn.stop[data-state=busy],.pump-btn.stop[data-state=success]{background:var(--red);border-color:var(--red);color:var(--bg)}.pump-btn[data-state=busy]:disabled,.pump-btn[data-state=busy][data-disabled]{opacity:1;cursor:progress}.slot-day{display:grid;grid-template-columns:1fr 1fr;gap:2px;margin-top:16px}.slot-strip{display:grid;grid-template-columns:repeat(24,1fr);gap:2px}.slot-cell{height:26px;border-radius:3px;background:var(--panel-2);border:1px solid var(--line);padding:0;cursor:pointer}.slot-tip-pos{z-index:30}.slot-tip{--tip-edge: var(--teal);max-width:300px;background:var(--panel-2);border:1px solid var(--tip-edge);border-radius:7px;padding:6px 11px;font:600 .74rem var(--mono);color:var(--ink);width:max-content;box-shadow:0 6px 18px #00000080;position:relative}.slot-tip-arrow{position:absolute;width:8px;height:8px}.slot-tip-arrow:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform:rotate(45deg);background:var(--panel-2)}.slot-tip-arrow[data-side=top]{bottom:-5px}.slot-tip-arrow[data-side=top]:before{border-right:1px solid var(--tip-edge);border-bottom:1px solid var(--tip-edge)}.slot-tip-arrow[data-side=bottom]{top:-5px}.slot-tip-arrow[data-side=bottom]:before{border-left:1px solid var(--tip-edge);border-top:1px solid var(--tip-edge)}.slot-tip.manual{--tip-edge: var(--amber)}.slot-tip.offline{--tip-edge: var(--red)}.slot-tip .tip-title{font:700 .84rem Bricolage Grotesque,sans-serif}.slot-tip .tip-sub{color:var(--ink-dim);margin-top:2px}.slot-cell.taken{background:#e8a33d4d;border-color:#e8a33d8c}.slot-cell.run{background:#4fc3a159;border-color:var(--teal)}.slot-cell.past{opacity:.3}.slot-cell.now{box-shadow:0 0 0 2px var(--teal);position:relative;z-index:1}.slot-hours{display:grid;grid-template-columns:repeat(3,1fr);font:500 .66rem var(--mono);color:var(--ink-dim);margin-top:4px}.slot-legend{display:flex;gap:12px;align-items:center;font:500 .7rem var(--mono);color:var(--ink-dim);margin-top:10px;white-space:nowrap}.legend-key{display:inline-flex;align-items:center;gap:5px;background:none;border:0;padding:2px;font:inherit;color:inherit;cursor:pointer}.legend-count{margin-left:auto}.slot-legend .sw{width:14px;height:10px;border-radius:2px;display:inline-block}@media(max-width:700px){.legend-text{display:none}}.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:4px 0 16px}.page-head h2.page{margin:0}.btn-add{display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 16px;background:var(--teal);color:var(--bg);border:0;border-radius:8px;font:700 .75rem var(--mono);letter-spacing:.06em;white-space:nowrap;cursor:pointer}.btn-add .plus{font-size:1.05rem;font-weight:600;line-height:1;letter-spacing:0;margin-top:-1px}.btn-add:hover{filter:brightness(1.08)}.modal-backdrop,.picker-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#060a06b8;z-index:40;transition:opacity var(--dur-2) var(--ease)}.modal-backdrop[data-starting-style],.modal-backdrop[data-ending-style],.picker-backdrop[data-starting-style],.picker-backdrop[data-ending-style]{opacity:0}.modal{position:fixed;top:6vh;left:50%;translate:-50% 0;z-index:41;width:min(460px,calc(100vw - 32px));max-height:88vh;overflow-y:auto;padding:20px;display:flex;flex-direction:column;outline:none}.modal,.picker{transition:transform var(--dur-3) var(--ease-out),opacity var(--dur-2) var(--ease)}.modal[data-starting-style],.modal[data-ending-style],.picker[data-starting-style],.picker[data-ending-style]{opacity:0;transform:translateY(10px)}.modal form{display:flex;flex-direction:column;flex:1}.form-section.form-actions{margin-top:auto;padding-top:16px}.modal-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:4px}.modal .login-input{margin-bottom:0}.field-label{display:block;font:500 .74rem var(--mono);color:var(--ink-dim);margin:16px 0 6px}.field-label .label-hint{opacity:.65}.form-section{margin-top:20px;padding-top:4px;border-top:1px solid var(--line)}.chip-row{display:flex;flex-wrap:wrap;gap:8px}.dd-trigger{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;text-align:left;cursor:pointer}.dd-placeholder{color:var(--ink-dim)}.dd-meta{font:600 .72rem var(--mono);color:var(--teal);flex-shrink:0}.dd-trigger[data-popup-open]{border-color:var(--teal)}.select-positioner{z-index:80;outline:none}.select-popup{min-width:var(--anchor-width);background:var(--panel-2);border:1px solid var(--line);border-radius:8px;padding:4px;font:500 .9rem var(--mono);color:var(--ink);box-shadow:0 14px 34px -14px #000000d9;transform-origin:var(--transform-origin);transition:transform var(--dur-2) var(--ease-out),opacity var(--dur-2) var(--ease-out)}.select-popup[data-starting-style],.select-popup[data-ending-style]{opacity:0;transform:scale(.96)}.select-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border-radius:6px;cursor:pointer;outline:none}.select-item[data-highlighted]{background:#4fc3a11f}.select-item[data-selected]{color:var(--teal)}.select-check{font-size:.8rem;color:var(--teal)}.picker-backdrop{background:#060a06cc;z-index:70}.picker{position:fixed;top:0;right:0;bottom:0;left:0;margin:auto;z-index:71;width:min(460px,calc(100vw - 32px));height:min(680px,92vh);display:flex;flex-direction:column;padding:20px;outline:none}.picker-days{display:grid;grid-template-columns:repeat(8,1fr);gap:6px;padding:8px 0 14px;border-bottom:1px solid var(--line);flex-shrink:0}.day-cell{display:flex;flex-direction:column;align-items:center;gap:2px;background:var(--panel-2);border:1px solid var(--line);border-radius:10px;padding:8px 2px;color:var(--ink-dim);cursor:pointer}.day-cell .dc-wd{font:600 .56rem var(--mono);letter-spacing:.08em}.day-cell .dc-num{font:700 1.05rem var(--mono);line-height:1.15;color:var(--ink)}.day-cell .dc-sub{font:500 .56rem var(--mono);opacity:.8}.day-cell:hover{border-color:var(--ink-dim)}.day-cell.active{border-color:var(--teal);background:#4fc3a11a;color:var(--teal)}.day-cell.active .dc-num{color:var(--teal)}.picker-body{overflow-y:auto;padding-top:14px;flex:1;transition:opacity var(--dur-2) var(--ease)}.picker-body[aria-busy=true]{opacity:.45;pointer-events:none}@media(max-width:700px){.modal{top:0;left:0;translate:none;width:100%;height:var( --vvh, 100% );max-height:none;border-radius:0;border:0;padding:22px 20px calc(20px + env(safe-area-inset-bottom))}.picker{width:100%;height:var(--vvh, 100%);border-radius:0;border:0}}.dd-group+.dd-group{margin-top:12px}.dd-group-head{display:flex;justify-content:space-between;font:600 .66rem var(--mono);text-transform:uppercase;letter-spacing:.12em;color:var(--ink-dim);margin-bottom:6px}.dd-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.dd-opt{background:var(--panel);border:1px solid var(--line);border-radius:7px;color:var(--ink);font:600 .78rem var(--mono);padding:8px 2px;text-align:center;cursor:pointer}.dd-opt:hover{border-color:var(--ink-dim)}.dd-opt.active{border-color:var(--teal);color:var(--teal);background:#4fc3a11a}.empty-inline{font:500 .78rem var(--mono);color:var(--ink-dim);padding:10px 0}.book-summary{font:600 .85rem var(--mono);color:var(--teal);margin:14px 0 10px}.book-summary.pending{color:var(--ink-dim);font-weight:500}.form-warn{font:500 .76rem var(--mono);color:var(--red);margin-bottom:10px}.field-hint-error{font:500 .72rem var(--mono);color:var(--red);margin-top:6px}.field-hint-dim{font:500 .72rem var(--mono);color:var(--ink-dim);margin-top:6px}.input-inline-status.dim{color:var(--ink-dim)}.login-input:disabled{opacity:.55;cursor:not-allowed}.login-input[aria-invalid=true]{border-color:#d96c5b99}.cash-note{font:500 .72rem var(--mono);color:var(--ink-dim);margin:10px 0 0}.input-wrap{position:relative;margin-bottom:10px}.input-wrap .login-input{margin-bottom:0;padding-right:100px}.input-inline-btn{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:#4fc3a11f;color:var(--teal);border:1px solid rgba(79,195,161,.5);border-radius:6px;font:600 .72rem var(--mono);padding:6px 10px;cursor:pointer}.input-inline-btn:hover{background:#4fc3a138}.input-inline-btn:disabled,.input-inline-btn[data-disabled]{opacity:.6;cursor:wait}.input-inline-status{position:absolute;right:12px;top:50%;transform:translateY(-50%);font:600 .72rem var(--mono);color:var(--teal)}.field-cols{display:grid;grid-template-columns:1fr 1fr;gap:10px}@media(max-width:480px){.field-cols{grid-template-columns:1fr}}@media(max-width:700px){#root{padding:0 12px 40px}header.bar{gap:12px;padding:10px 0;margin-bottom:16px}header.bar nav.bar-nav{display:none}.nav-burger{display:flex}.telemetry{grid-template-columns:repeat(2,1fr)}.relay-row{grid-template-columns:repeat(3,1fr)}.pump-status{gap:10px}.pump-btn{width:100%;margin-left:0}.slot-day{grid-template-columns:1fr;row-gap:12px}.slot-cell{height:30px}.toolbar input[type=search]{flex:1;min-width:150px;margin-left:0!important;font-size:16px}}.tl-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.tl-head h3{margin:0}.tl-nav{display:flex;align-items:center;gap:6px}.tl-arrow{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--panel-2);border:1px solid var(--line);border-radius:8px;color:var(--ink);font-size:1.15rem;line-height:1;cursor:pointer}.tl-arrow:disabled{opacity:.35;cursor:not-allowed}.tl-day{font:600 .82rem var(--mono);min-width:96px;text-align:center}.tl-hours{display:flex;justify-content:space-between;font:500 .62rem var(--mono);color:var(--ink-dim);margin:16px 0 4px}.tl-wrap{overflow:hidden}.tl-track{position:relative;height:46px;background:var(--panel-2);border:1px solid var(--line);border-radius:8px}.tl-track.from-left{animation:tl-slide-l var(--dur-2) var(--ease)}.tl-track.from-right{animation:tl-slide-r var(--dur-2) var(--ease)}@keyframes tl-slide-l{0%{opacity:0;transform:translate(-18px)}}@keyframes tl-slide-r{0%{opacity:0;transform:translate(18px)}}.tl-guide{position:absolute;top:0;bottom:0;width:1px;background:var(--line)}.tl-seg{position:absolute;top:6px;bottom:6px;border:0;border-radius:3px;padding:0;cursor:pointer;min-width:4px;transition:transform var(--dur-2) var(--ease-out),filter var(--dur-1) var(--ease),box-shadow var(--dur-1) var(--ease)}.tl-seg:before{content:"";position:absolute;top:-6px;right:-3px;bottom:-6px;left:-3px}.tl-seg.offline:before{top:-5px;right:-3px;bottom:-4px;left:-3px}.tl-seg:hover{filter:brightness(1.18);box-shadow:0 0 0 1px #ede8dc8c;z-index:3}.tl-seg.booking{background:var(--teal)}.tl-seg.manual{background:var(--amber)}.tl-seg.unknown{background:#4fc3a16b}.tl-seg.offline{top:auto;bottom:4px;height:5px;border-radius:2px;background:repeating-linear-gradient(45deg,var(--red),var(--red) 3px,transparent 3px,transparent 6px)}.tl-seg.ongoing{animation:tl-live 1.8s ease-in-out infinite}@keyframes tl-live{50%{filter:brightness(1.5)}}.tl-loading{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:8px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.05),transparent);background-size:200% 100%;animation:tl-shimmer 1.1s linear infinite;pointer-events:none}@keyframes tl-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.tl-legend{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font:500 .72rem var(--mono);color:var(--ink-dim);margin-top:10px}.tl-key{display:inline-flex;align-items:center;gap:6px}.tl-key:before{content:"";width:10px;height:10px;border-radius:2px}.tl-key.booking:before{background:var(--teal)}.tl-key.manual:before{background:var(--amber)}.tl-key.offline:before{background:var(--red)}.tl-summary{margin-left:auto;color:var(--ink)}.page-view{animation:page-in var(--dur-2) var(--ease)}@keyframes page-in{0%{opacity:0}}.page-view .panel,.page-view .stat-row>.cell{animation:panel-in var(--dur-3) var(--ease-out) both}@keyframes panel-in{0%{opacity:0;transform:translateY(10px)}}.page-view .panel:nth-child(1),.page-view .stat-row>.cell:nth-child(1){animation-delay:.02s}.page-view .panel:nth-child(2),.page-view .stat-row>.cell:nth-child(2){animation-delay:.06s}.page-view .panel:nth-child(3),.page-view .stat-row>.cell:nth-child(3){animation-delay:.1s}.page-view .panel:nth-child(n+4),.page-view .stat-row>.cell:nth-child(n+4){animation-delay:.14s}button,[role=radio],[role=option]{transition:transform var(--dur-2) var(--ease-out),box-shadow var(--dur-2) var(--ease-out),border-color var(--dur-1) var(--ease),background-color var(--dur-1) var(--ease),color var(--dur-1) var(--ease),filter var(--dur-1) var(--ease),opacity var(--dur-1) var(--ease)}button:where(:not(:disabled)):where(:not([data-disabled])):active,:where([role=radio],[role=option]):where(:not([data-disabled])):active{transform:translateY(1px);transition-duration:80ms}.input-inline-btn:not(:disabled):not([data-disabled]):active{transform:translateY(calc(-50% + 1px));transition-duration:80ms}button[data-state=busy]{cursor:progress}button[data-state=busy]:disabled,button[data-state=busy][data-disabled]{opacity:.8;cursor:progress}.ab-stack{display:inline-grid;align-items:center;justify-items:center}.ab-face{grid-area:1 / 1;display:inline-flex;align-items:center;white-space:nowrap;opacity:0;transform:translateY(.35em);transition:opacity var(--dur-2) var(--ease),transform var(--dur-2) var(--ease-out);pointer-events:none}.ab-face[data-active]{opacity:1;transform:none}.ab-cursor{display:inline-block;width:.5em;height:.95em;margin-left:7px;background:currentColor;animation:ab-blink 1s steps(1) infinite}@keyframes ab-blink{0%,49%{opacity:1}50%,to{opacity:0}}button[data-state=success]{border-color:var(--teal);color:var(--teal)}.login-btn[data-state=success]{color:var(--bg)}.settings{display:grid;grid-template-columns:170px minmax(0,1fr);gap:20px;align-items:start}.settings-rail{display:flex;flex-direction:column;gap:2px;position:sticky;top:82px}.settings-tab{text-align:left;background:transparent;border:0;border-left:3px solid transparent;border-radius:0 8px 8px 0;font-family:Bricolage Grotesque,sans-serif;font-weight:700;font-size:.95rem;color:var(--ink-dim);padding:9px 14px;cursor:pointer;transition:color var(--dur-1) var(--ease),border-color var(--dur-1) var(--ease),background-color var(--dur-1) var(--ease)}.settings-tab:hover{color:var(--ink);border-left-color:var(--ink-dim)}.settings-tab[data-active]{color:var(--teal);border-left-color:var(--teal);background:#4fc3a10f}@media(max-width:700px){.settings{grid-template-columns:1fr;gap:14px}.settings-rail{position:static;flex-direction:row;flex-wrap:wrap;gap:6px;border-bottom:1px solid var(--line);padding-bottom:8px}.settings-tab{border-left:0;border-bottom:3px solid transparent;border-radius:8px 8px 0 0;padding:7px 12px}.settings-tab:hover{border-bottom-color:var(--ink-dim)}.settings-tab[data-active]{border-bottom-color:var(--teal)}}:focus-visible{outline:2px solid var(--teal);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
