:root{--bg: #0e1116;--panel: #161b22;--border: #30363d;--text: #c9d1d9;--muted: #8b949e;--accent: #58a6ff;--home: #2ea043;--line-open: #d29922;--busy: #f85149;--away: #6e7681;--error: #f85149}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:14px}body{padding-bottom:4rem}.topbar{display:flex;align-items:baseline;justify-content:space-between;padding:.75rem 1rem;background:var(--panel);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.topbar h1{font-size:1.1rem;margin:0}.topbar nav{display:flex;gap:.75rem;align-items:center}.topbar nav a{color:var(--muted);text-decoration:none;padding:.25rem .5rem;border-radius:4px}.topbar nav a.active{color:var(--accent);background:#58a6ff1a}.badge{font-size:.7rem;padding:.1rem .4rem;border-radius:3px;background:var(--border);color:var(--muted)}main{max-width:1100px;margin:0 auto;padding:1rem;display:flex;flex-direction:column;gap:1rem}.panel{background:var(--panel);border:1px solid var(--border);border-radius:6px;padding:.75rem 1rem}.panel.error{border-color:var(--error);color:var(--error)}.panel-row{display:flex;align-items:center;justify-content:space-between}.panel h2,.panel h3{margin:.25rem 0 .75rem}.muted{color:var(--muted);font-size:.85em}.error-text{color:var(--error)}.hidden{display:none!important}code{background:#ffffff0d;padding:1px 4px;border-radius:3px;font-size:.9em}.btn{background:var(--accent);color:#0d1117;border:none;padding:.35rem .75rem;border-radius:4px;cursor:pointer;font:inherit;text-decoration:none;display:inline-block}.btn:hover{filter:brightness(1.1)}table.targets{width:100%;border-collapse:collapse}table.targets th,table.targets td{text-align:left;padding:.4rem .5rem;border-bottom:1px solid var(--border)}table.targets th{font-weight:600;color:var(--muted)}.derived{font-weight:600;padding:1px 6px;border-radius:3px;font-size:.85em}.derived-home{background:var(--home);color:#fff}.derived-line_open{background:var(--line-open);color:#000}.derived-busy{background:var(--busy);color:#fff}.derived-away{background:var(--away);color:#fff}.relay-strip{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.4rem}.relay{font-size:.75em;padding:.15rem .4rem;border-radius:3px;border:1px solid var(--border)}.relay-open{border-color:var(--home);color:var(--home)}.relay-connecting{border-color:var(--line-open);color:var(--line-open)}.relay-dead{border-color:var(--busy);color:var(--busy)}.event-tail{list-style:none;margin:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78em;max-height:480px;overflow-y:auto}.event-tail li{padding:.15rem .25rem;border-bottom:1px solid rgba(255,255,255,.04);white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}.event-tail .t{color:var(--muted);margin-right:.5rem}.event-tail .tgt{color:var(--accent);margin-right:.5rem}.event-tail .ty{display:inline-block;min-width:90px;padding:0 4px;border-radius:2px;margin-right:.5rem}.event-tail .pid{color:var(--muted);margin-right:.5rem}.event-tail .pl{color:var(--text)}.ty-status,.evt-status{background:#2ea04326;color:var(--home)}.ty-peer_join,.evt-peer_join{background:#58a6ff26;color:var(--accent)}.ty-peer_leave,.evt-peer_leave{background:#f8514926;color:var(--busy)}.ty-socket,.evt-socket{background:#8b949e26;color:var(--muted)}.ty-mark,.evt-mark{background:#d2992233;color:var(--line-open)}.ty-observer_start,.evt-observer_start,.ty-observer_stop,.evt-observer_stop,.ty-observer_heartbeat{background:#6e768126;color:var(--muted)}.form-row{display:flex;gap:.75rem;flex-wrap:wrap;align-items:end}.form-row label{display:flex;flex-direction:column;gap:.25rem;color:var(--muted);font-size:.85em}.form-row input,.form-row select{background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:.3rem .5rem;font:inherit}.timeline{position:relative;height:60px;background:var(--bg);border:1px solid var(--border);border-radius:4px;margin-bottom:.5rem}.dot{position:absolute;width:8px;height:8px;border-radius:50%;top:26px;transform:translate(-50%)}.dot-status{background:var(--home)}.dot-peer_join{background:var(--accent)}.dot-peer_leave{background:var(--busy)}.dot-socket{background:var(--muted)}.dot-mark{background:var(--line-open);width:4px;height:60px;border-radius:0;top:0}.dot-observer_start,.dot-observer_stop,.dot-observer_heartbeat{background:#fff3}.legend{list-style:none;margin:0;padding:0;display:flex;gap:1rem;flex-wrap:wrap;font-size:.85em}.legend li{display:flex;align-items:center;gap:.4rem}.legend .dot{position:static;transform:none}
