:root{--bg: #0a0c0e;--panel: #14181c;--panel-2: #1b2127;--line: #2a323a;--text: #d7e0e6;--muted: #8b9aa5;--accent: #4ade80;--warn: #fbbf24;--error: #f87171;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:13px/1.45 ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;overflow:hidden}button,input,select{font:inherit;color:var(--text);background:var(--panel-2);border:1px solid var(--line);border-radius:5px;padding:4px 8px}button{cursor:pointer}button:hover:not(:disabled){border-color:var(--accent)}button:disabled,input:disabled{opacity:.45;cursor:not-allowed}h2{font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin:0 0 8px}h4{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:8px 0 3px}.hint{color:var(--muted);font-size:11px;margin:6px 0 0}.app{display:grid;grid-template-columns:288px 1fr;height:100%}html[data-hosted],html[data-hosted] body,html[data-hosted] #root{height:auto}html[data-hosted] body{overflow:visible}html[data-hosted] .app{height:100vh}.app__main{min-width:0;overflow:hidden}.sidebar{background:var(--panel);border-right:1px solid var(--line);overflow-y:auto;padding:14px}.sidebar section{padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--line)}.sidebar-about button{width:100%;opacity:.75}.sidebar-about button:hover{opacity:1}.sidebar section:last-child{border-bottom:0}.sidebar label{display:block;color:var(--muted);font-size:11px;margin-bottom:8px}.sidebar label select,.sidebar label input[type=range]{display:block;width:100%;margin-top:3px}.panel__row{display:flex;gap:6px;align-items:center}.panel__row input[type=text]{flex:1;min-width:0}.chips{display:flex;flex-wrap:wrap;gap:5px}.status{margin:7px 0 0;font-size:11px;color:var(--muted)}.status--connected{color:var(--accent)}.status--error{color:var(--error)}.status--connecting{color:var(--warn)}.devices{list-style:none;margin:8px 0 0;padding:0}.devices li{border:1px solid var(--line);border-radius:6px;padding:7px;margin-bottom:6px}.devices__row{display:flex;gap:6px;align-items:center;justify-content:space-between}.devices__name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.devices__name em{display:block;font-style:normal;color:var(--muted);font-size:10px}.devices__controls{display:flex;gap:6px;margin-top:6px}.devices__controls select{flex:1;min-width:0}.wall{position:relative;height:100%;width:100%}.wall__layer{position:absolute;inset:0;width:100%;height:100%;display:block}.wall__layer--overlay{pointer-events:none}.wall__grid{position:absolute;inset:0;display:grid;gap:8px;padding:8px}.tile{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;border:1px solid var(--line);border-radius:7px;background:transparent}.tile__head{display:flex;gap:5px;align-items:center;padding:4px;background:#0a0c0ed1;border-bottom:1px solid var(--line);border-radius:6px 6px 0 0}.tile__kindTag{flex:none;font-size:9px;letter-spacing:.06em;color:var(--muted);border:1px solid var(--line);border-radius:3px;padding:0 3px}.tile__source{display:flex;align-items:center;gap:5px;flex:1;min-width:0;text-align:left;font-size:11px;padding:2px 6px}.tile__sourceName{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tile__actions{display:flex;gap:3px}.tile__actions button{padding:2px 6px;font-size:11px}.tile__body{flex:1;min-height:0;display:grid;place-items:center}.tile__hint{color:var(--muted);font-size:11px;margin:0}.tile__warn{margin:0;padding:8px;font-size:11px;color:var(--warn);text-align:center}.tile__foot{display:flex;gap:4px;padding:0 4px 4px;min-height:4px}.badge{font-size:9px;letter-spacing:.05em;text-transform:uppercase;padding:1px 5px;border-radius:3px;background:#0a0c0ed9}.badge--warn{color:var(--warn);border:1px solid rgba(251,191,36,.4)}.picker,.options{position:absolute;top:34px;left:4px;right:4px;z-index:5;max-height:70%;overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:7px;box-shadow:0 10px 26px #0000008c}.picker__option{display:block;width:100%;text-align:left;border:0;background:transparent;padding:4px 6px;border-radius:4px}.picker__option:hover{background:var(--panel-2)}.picker__option.is-current{background:#4ade8021}.picker__label{display:block}.picker__detail{display:block;color:var(--muted);font-size:10px}.picker__empty{color:var(--muted);font-size:11px;margin:4px 6px}.options label{display:block;color:var(--muted);font-size:11px;margin-bottom:7px}.options label input[type=range],.options label select{display:block;width:100%;margin-top:3px}.options__check{display:flex!important;align-items:center;gap:5px}.options__channels{display:flex;gap:8px;border:1px solid var(--line);border-radius:5px;padding:5px 7px}.options__channels legend{color:var(--muted);font-size:10px;padding:0 4px}.calibrate{display:grid;grid-template-columns:1fr 320px;height:100%}.calibrate__stage{display:grid;place-items:center;padding:12px;min-width:0;background:#000}.calibrate__stage canvas{max-width:100%;max-height:100%;object-fit:contain;cursor:crosshair;touch-action:none}.calibrate__panel{background:var(--panel);border-left:1px solid var(--line);padding:14px;overflow-y:auto}.calibrate__panel header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.calibrate__panel header h2{margin:0}.regions{list-style:none;margin:12px 0;padding:0}.regions li{display:flex;gap:5px;align-items:center;margin-bottom:5px}.regions__index{width:20px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}.regions li input[type=text]{flex:1;min-width:0}.regions__window{width:52px}.panel__inset{display:block;color:var(--muted);font-size:11px}.panel__inset input{display:block;width:100%;margin-top:3px}.notice{border:1px solid var(--line);border-radius:6px;padding:10px 12px;background:var(--panel);margin:10px 0}.notice h2{color:var(--text)}.notice p{margin:6px 0 0;font-size:12px;color:var(--muted)}.notice--warn{border-color:#fbbf2473;color:var(--warn);font-size:11px}.notice--error{border-color:#f8717173;color:var(--error);font-size:11px}.wall--error{display:grid;place-items:center;padding:40px}
