:root{color-scheme:light;--bg: #f4f6f8;--surface: #ffffff;--surface-2: #f8fafc;--border: #d8dee6;--text: #1a2332;--muted: #5b6b7c;--primary: #1f6feb;--primary-hover: #1858c2;--on-primary: #ffffff;--danger: #c62828;--danger-hover: #a61f1f;--on-danger: #ffffff;--danger-soft: #fdeceb;--success: #2e7d32;--success-text: #14633f;--success-soft: #e7f5ea;--hover: #eef2f7;--hover-strong: #f0f4f8;--input-bg: #ffffff;--focus-ring: color-mix(in srgb, var(--primary) 55%, transparent);--radius: 10px;--shadow: 0 1px 2px rgb(16 24 40 / 6%), 0 8px 24px rgb(16 24 40 / 6%);--badge-bg: #e8eef8;--badge-text: #1f4b99;--badge-warn-bg: #fff4e5;--badge-warn-text: #9a5b00;--warn-banner-bg: #fff8ee;--warn-banner-border: #f0d9a8;--warn-banner-text: #9a5b00;--toggle-track: #c9d2de;--select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%235b6b7c' d='M1.4.6 6 5.2 10.6.6 12 2 6 8 0 2z'/%3E%3C/svg%3E");font-family:Segoe UI,system-ui,-apple-system,sans-serif}html[data-theme=dark]{color-scheme:dark;--bg: #0f1419;--surface: #1a222c;--surface-2: #151c24;--border: #2c3642;--text: #e8eef4;--muted: #9aa8b6;--primary: #3b82f6;--primary-hover: #60a5fa;--on-primary: #061018;--danger: #dc2626;--danger-hover: #ef4444;--on-danger: #fff5f5;--danger-soft: #3a1f24;--success: #5dba6a;--success-text: #8fd99a;--success-soft: #1c3222;--hover: #243040;--hover-strong: #1e2833;--input-bg: #121820;--focus-ring: color-mix(in srgb, var(--primary) 65%, transparent);--shadow: 0 1px 2px rgb(0 0 0 / 35%), 0 8px 24px rgb(0 0 0 / 35%);--badge-bg: #243552;--badge-text: #9ec0ff;--badge-warn-bg: #3a2e1a;--badge-warn-text: #e0b56a;--warn-banner-bg: #2a2318;--warn-banner-border: #5a4a2a;--warn-banner-text: #e0b56a;--toggle-track: #3a4654;--select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%239aa8b6' d='M1.4.6 6 5.2 10.6.6 12 2 6 8 0 2z'/%3E%3C/svg%3E")}*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--bg);color:var(--text);overflow-x:hidden}code{overflow-wrap:anywhere;word-break:break-word}a{color:var(--text);text-decoration:none;cursor:pointer}a:hover{color:var(--text);text-decoration:underline}button,input,select,textarea{font:inherit}.container{width:min(1100px,calc(100% - 1.25rem));margin-inline:auto}.page-header{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;justify-content:space-between}.page-header h1{margin:0;font-size:clamp(1.35rem,4vw,1.75rem)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.25rem;min-width:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;border:1px solid transparent;border-radius:8px;padding:.55rem .9rem;min-height:2.5rem;cursor:pointer;background:var(--primary);color:var(--on-primary);text-decoration:none}.btn:hover,a.btn:hover{background:var(--primary-hover);color:var(--on-primary);text-decoration:none}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-ghost{background:transparent;color:var(--text);border-color:var(--border)}.btn-ghost:hover,a.btn-ghost:hover{background:var(--hover);color:var(--text);text-decoration:none}.btn-danger{background:var(--danger);color:var(--on-danger)}.btn-danger:hover,a.btn-danger:hover{background:var(--danger-hover);color:var(--on-danger);text-decoration:none}.btn:focus-visible,.btn-ghost:focus-visible,.icon-btn:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.form-grid{display:grid;gap:.85rem}.date-range{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.date-range input[type=date],.date-range input[type=datetime-local]{flex:1;min-width:8.5rem;width:auto}.color-field{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.color-field input[type=color]{width:2.75rem;height:2.4rem;padding:.2rem;cursor:pointer}.color-field input[type=text]{flex:1;min-width:7rem;width:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.color-swatch-inline{display:inline-flex;align-items:center;gap:.4rem}.color-swatch{display:inline-block;width:.95rem;height:.95rem;border-radius:4px;border:1px solid var(--border);flex-shrink:0;vertical-align:middle}label{display:block;font-size:.92rem;color:var(--muted)}label:not(.row):not(.toggle)>:is(input,select,textarea,.choice-list,div){margin-top:.35rem}.req{color:var(--danger);font-weight:700;margin-left:.15em}input,select,textarea{width:100%;border:1px solid var(--border);border-radius:8px;padding:.55rem .7rem;background:var(--input-bg);color:var(--text)}select{padding-right:2rem;appearance:none;background-image:var(--select-chevron);background-repeat:no-repeat;background-position:right .7rem center;background-size:.7rem}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.7rem .55rem;border-bottom:1px solid var(--border);vertical-align:middle}th{font-size:.85rem;color:var(--muted);font-weight:600}td .row{justify-content:flex-start}td .btn,td select{width:auto}.clickable-row{cursor:pointer}.clickable-row:hover{background:var(--hover-strong)}.clickable-row:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.loading-state{margin:0;padding:1.5rem .25rem;text-align:center}.device-cards{display:grid;gap:.75rem}.device-card{padding:.9rem;border:1px solid var(--border);border-radius:10px;background:var(--surface-2);cursor:pointer;-webkit-tap-highlight-color:transparent}.device-card:active{background:var(--hover)}.device-card:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.device-card-top{display:flex;align-items:center;justify-content:space-between;gap:.65rem;margin-bottom:.35rem}.device-card-title{font-weight:600;font-size:1.05rem;min-width:0;overflow-wrap:anywhere}.device-card-rows{display:grid;gap:.35rem}.device-card-row{display:grid;grid-template-columns:minmax(5.5rem,34%) 1fr;gap:.5rem .75rem;align-items:start;padding:.3rem 0}.device-card-label{color:var(--muted);font-size:.8rem;font-weight:600;line-height:1.35}.device-menu{position:relative;flex-shrink:0}.device-menu .icon-btn svg{fill:currentColor;stroke:none}.device-menu-panel{position:absolute;top:calc(100% + .25rem);right:0;z-index:5;min-width:9.5rem;padding:.35rem;border:1px solid var(--border);border-radius:10px;background:var(--surface);box-shadow:var(--shadow);display:grid;gap:.15rem}.device-menu-panel a,.device-menu-panel button{display:block;width:100%;text-align:left;border:0;background:transparent;color:var(--text);padding:.65rem .75rem;min-height:44px;border-radius:8px;cursor:pointer;font:inherit;text-decoration:none}.device-menu-panel a:hover,.device-menu-panel button:hover{background:var(--hover);text-decoration:none}.device-menu-panel button.danger{color:var(--danger)}.device-menu-panel button.danger:hover{background:var(--danger-soft)}.empty-state{display:grid;gap:.4rem;place-items:center;text-align:center;padding:2.5rem 1.25rem}.empty-state strong{font-size:1.05rem}.empty-state p{margin:0;max-width:28rem;line-height:1.45}.info-tip{position:relative;display:inline-flex;align-items:center;justify-content:center;width:1.05rem;height:1.05rem;border-radius:999px;border:1px solid var(--border);background:var(--hover);color:var(--muted);font-size:.72rem;font-weight:700;font-style:italic;line-height:1;cursor:help;flex-shrink:0}.info-tip:hover,.info-tip:focus-visible{color:var(--text);border-color:var(--muted);outline:none}.info-tip-text{position:absolute;left:50%;bottom:calc(100% + .45rem);transform:translate(-50%);width:min(16.5rem,70vw);padding:.55rem .7rem;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:.78rem;font-style:normal;font-weight:400;line-height:1.4;text-align:left;box-shadow:var(--shadow);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s ease;z-index:20}.info-tip:hover .info-tip-text,.info-tip:focus-visible .info-tip-text{opacity:1;visibility:visible}.choice-list{display:grid;gap:.35rem;margin-top:.25rem}.muted{color:var(--muted)}.field-hint{display:block;margin-top:.3rem;font-size:.82rem;color:var(--muted);line-height:1.35}.field-error{display:block;margin-top:.35rem;font-size:.88rem;font-weight:600;color:var(--danger);line-height:1.35}.input-invalid{border-color:var(--danger)!important;box-shadow:0 0 0 1px color-mix(in srgb,var(--danger) 35%,transparent)}.error{color:var(--danger);margin:0}.toast-stack{position:fixed;right:1rem;bottom:1rem;z-index:200;display:grid;gap:.55rem;width:min(22rem,calc(100vw - 2rem));pointer-events:none}.toast{pointer-events:auto;display:grid;grid-template-columns:1fr auto;gap:.65rem;align-items:start;padding:.8rem .85rem;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);box-shadow:var(--shadow);animation:toast-in .18s ease-out}.toast p{margin:0;line-height:1.4;font-size:.92rem}.toast.error{border-color:color-mix(in srgb,var(--danger) 35%,var(--border));background:color-mix(in srgb,var(--danger) 8%,var(--surface));color:var(--danger)}.toast.success{border-color:color-mix(in srgb,var(--success) 35%,var(--border));background:color-mix(in srgb,var(--success) 12%,var(--surface));color:var(--success-text)}.toast.info{color:var(--text)}.toast-close{appearance:none;border:0;background:transparent;color:inherit;opacity:.65;cursor:pointer;font-size:1.15rem;line-height:1;padding:0;width:2.75rem;height:2.75rem;min-width:44px;min-height:44px;margin:-.5rem -.35rem -.5rem 0;border-radius:8px}.toast-close:hover{opacity:1}@keyframes toast-in{0%{opacity:0;transform:translateY(.5rem)}to{opacity:1;transform:translateY(0)}}.stack{display:grid;gap:1rem}.row{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center}.badge{display:inline-flex;align-items:center;width:fit-content;max-width:100%;border-radius:999px;padding:.15rem .55rem;font-size:.78rem;background:var(--badge-bg);color:var(--badge-text);justify-self:start}a.badge{text-decoration:none}a.badge:hover{filter:brightness(.96);text-decoration:underline}.badge.ok{background:var(--success-soft);color:var(--success-text)}.badge.warn{background:var(--badge-warn-bg);color:var(--badge-warn-text)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:2.75rem;height:2.75rem;min-width:44px;min-height:44px;padding:0;border:1px solid var(--border);border-radius:8px;background:transparent;color:var(--muted);cursor:pointer;-webkit-tap-highlight-color:transparent}.icon-btn:hover{background:var(--hover);color:var(--text)}.icon-btn.danger{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 35%,var(--border))}.icon-btn.danger:hover{background:var(--danger-soft);color:var(--danger-hover)}.icon-btn svg{width:1.125rem;height:1.125rem;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.table-actions{display:inline-flex;gap:.4rem;align-items:center;justify-content:flex-end;white-space:nowrap}.url-cell{display:flex;align-items:center;gap:.5rem;max-width:280px}.url-cell code{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:.82rem}.assign-cell{min-width:180px}.assign-cell select{width:100%;min-width:160px}.assign-cell .assigned{display:flex;align-items:center;gap:.5rem}.assign-cell .assigned span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-btn.ok{color:var(--success-text);border-color:color-mix(in srgb,var(--success) 35%,var(--border));background:var(--success-soft)}.dialog-backdrop{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:1rem;background:#10182873}.dialog{width:min(420px,100%);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.25rem;display:grid;gap:1rem}.dialog h2{margin:0;font-size:1.1rem}.dialog p{margin:0;color:var(--muted);line-height:1.45}.dialog-actions{display:flex;justify-content:flex-end;gap:.6rem;flex-wrap:wrap}.toggle{display:inline-flex;align-items:center;gap:.6rem;cursor:pointer;color:var(--muted);font-size:.92rem;-webkit-user-select:none;user-select:none}.toggle input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}.toggle-track{position:relative;width:2.4rem;height:1.35rem;flex-shrink:0;border-radius:999px;background:var(--toggle-track);transition:background .15s ease}.toggle-track:after{content:"";position:absolute;top:.15rem;left:.15rem;width:1.05rem;height:1.05rem;border-radius:999px;background:var(--surface);box-shadow:0 1px 2px #10182833;transition:transform .15s ease}.toggle input:checked+.toggle-track{background:var(--primary)}.toggle input:checked+.toggle-track:after{transform:translate(1.05rem)}.toggle input:focus-visible+.toggle-track{outline:2px solid var(--focus-ring);outline-offset:2px}.toggle-label{line-height:1.3}@media(max-width:900px){.card{padding:1rem}.page-header .btn,.page-header .btn-ghost{width:100%}.table-wrap{overflow:visible}.responsive-table thead{display:none}.responsive-table,.responsive-table tbody,.responsive-table tr,.responsive-table td{display:block;width:100%}.responsive-table tr{margin-bottom:.75rem;padding:.85rem;border:1px solid var(--border);border-radius:10px;background:var(--surface-2)}.responsive-table tr:last-child{margin-bottom:0}.responsive-table td{border:none;padding:.4rem 0;display:grid;grid-template-columns:minmax(5.5rem,34%) 1fr;gap:.5rem .75rem;align-items:start}.responsive-table td[data-label]:before{content:attr(data-label);color:var(--muted);font-size:.8rem;font-weight:600;line-height:1.35}.responsive-table td.actions,.responsive-table td[data-label=""]{grid-template-columns:1fr;padding-top:.65rem}.responsive-table td.actions:before,.responsive-table td[data-label=""]:before{display:none}.responsive-table td .row,.responsive-table td .table-actions{width:100%;justify-content:stretch}.responsive-table td .btn{flex:1}.url-cell,.assign-cell{max-width:none;min-width:0;width:100%}.assign-cell select{min-width:0}.clickable-row:hover{background:var(--surface-2)}.clickable-row:active{background:var(--hover)}}@media(max-width:1100px){.responsive-table.devices-table thead{display:none}.responsive-table.devices-table,.responsive-table.devices-table tbody,.responsive-table.devices-table tr,.responsive-table.devices-table td{display:block;width:100%}.responsive-table.devices-table tr{margin-bottom:.75rem;padding:.85rem;border:1px solid var(--border);border-radius:10px;background:var(--surface-2)}.responsive-table.devices-table tr:last-child{margin-bottom:0}.responsive-table.devices-table td{border:none;padding:.4rem 0;display:grid;grid-template-columns:minmax(5.5rem,34%) 1fr;gap:.5rem .75rem;align-items:start}.responsive-table.devices-table td[data-label]:before{content:attr(data-label);color:var(--muted);font-size:.8rem;font-weight:600;line-height:1.35}.responsive-table.devices-table td.actions,.responsive-table.devices-table td[data-label=""]{grid-template-columns:1fr;padding-top:.65rem}.responsive-table.devices-table td.actions:before,.responsive-table.devices-table td[data-label=""]:before{display:none}.responsive-table.devices-table td .row{width:100%;justify-content:stretch}.responsive-table.devices-table td .btn{flex:1}.table-wrap:has(.devices-table){overflow:visible}}@media(max-width:480px){.container{width:calc(100% - 1rem)}.empty-state{padding:1.75rem .75rem}.dialog-actions{flex-direction:column-reverse}.dialog-actions .btn{width:100%}}
