:root{--tl-blue:#2f6be4;--tl-blue-container:#d9e7fb;--tl-sky:#70abec;--tl-orange:#f5821f;--tl-navy:#14224e;--tl-footer:#0f1b3d;--tl-footer-text:#c9d3e8;--tl-footer-muted:#9ba9c7;--tl-background:#f3f7fc;--tl-card:#fff;--tl-selected-chip:#d9e7fb;--tl-text:#14224e;--tl-text-secondary:#5b6b8c;--tl-outline:#d6e0ec;--tl-online:#2e9e5b;--tl-offline:#8c96a6;--tl-amber:#d9922f;--tl-error:#b3261e;--tl-error-container:#f9dedc}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--tl-background);color:var(--tl-text);font-family:Avenir Next,Avenir,Segoe UI,Roboto,system-ui,-apple-system,sans-serif;font-size:15px}button{font:inherit;cursor:pointer}input{font:inherit}a{color:var(--tl-blue)}.page{flex-direction:column;height:100%;display:flex}.page>.app,.page>.signin{flex:auto;height:auto;min-height:0}.app{flex-direction:column;height:100%;display:flex}.topbar{background:var(--tl-card);color:var(--tl-navy);border-bottom:1px solid var(--tl-outline);align-items:center;gap:16px;padding:12px 20px;display:flex}.topbar .logo{border-radius:7px;width:28px;height:28px;display:block}.topbar .wordmark{width:auto;height:26px;display:block}.topbar h1{margin:0;font-size:18px;font-weight:700}.topbar .org{color:var(--tl-text-secondary);font-size:14px}.topbar .spacer{flex:1}.topbar .who{color:var(--tl-text-secondary);font-size:13px}.tabs{border-bottom:1px solid var(--tl-outline);background:var(--tl-card);gap:4px;padding:10px 20px 0;display:flex}.tabs button{color:var(--tl-text-secondary);background:0 0;border:none;border-bottom:2px solid #0000;border-radius:12px 12px 0 0;padding:10px 18px;font-weight:600}.tabs button.active{color:var(--tl-blue);border-bottom-color:var(--tl-blue)}.content{flex:1;padding:16px 20px;overflow:auto}.content.map{flex-direction:column;padding:0;display:flex;overflow:hidden}.card{background:var(--tl-card);border:1px solid var(--tl-outline);border-radius:24px;margin-bottom:12px;padding:16px;box-shadow:0 1px 3px #14224e0f}.card h3{margin:0 0 4px;font-size:16px}.muted{color:var(--tl-text-secondary);font-size:13px}.badge{vertical-align:middle;border-radius:6px;margin-left:6px;padding:2px 6px;font-size:11px;font-weight:600;display:inline-block}.chips{flex-shrink:0;gap:8px;padding:12px 20px;display:flex;overflow-x:auto}.chips button{background:var(--tl-card);color:var(--tl-text);border:1px solid var(--tl-outline);white-space:nowrap;border-radius:16px;align-items:center;gap:6px;padding:6px 14px;display:flex}.chips button.selected{background:var(--tl-selected-chip);border-color:var(--tl-blue)}.chip-dot{border-radius:50%;width:10px;height:10px;display:inline-block}.dot{border-radius:50%;flex-shrink:0;width:12px;height:12px;margin-right:8px;display:inline-block}.banner{border-radius:16px;flex-shrink:0;margin:12px 20px 0;padding:10px 14px;font-size:13px}.banner.paywall{background:var(--tl-error-container);color:#601410}.banner.overlimit{color:var(--tl-text);background:#d9922f2e}.signin{justify-content:center;align-items:center;height:100%;display:flex}.signin .card{width:360px}.signin .logo{border-radius:12px;width:48px;height:48px;margin-bottom:12px;display:block}.signin .wordmark-lg{width:auto;height:40px;margin:0 auto 12px;display:block}.signin input{background:var(--tl-card);border:1px solid var(--tl-outline);width:100%;color:var(--tl-text);border-radius:12px;margin-top:8px;padding:10px 12px}.signin input:focus{outline:1px solid var(--tl-blue)}.btn{background:var(--tl-orange);color:#fff;border:none;border-radius:16px;padding:10px 18px;font-weight:600}.btn:disabled{opacity:.5;cursor:default}.btn.ghost{border:1px solid var(--tl-blue);color:var(--tl-blue);background:0 0}.error-text{color:var(--tl-error);margin-top:8px;font-size:13px}.map-wrap{flex:1;min-height:0;position:relative}.map-canvas{position:absolute;inset:0}.map-fallback{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.map-fallback .card{text-align:center;max-width:420px}.info-panel{z-index:5;min-width:260px;max-width:340px;position:absolute;bottom:16px;left:16px}.info-panel .row{justify-content:space-between;gap:16px;padding:2px 0;font-size:13px;display:flex}.info-panel .row span:first-child{color:var(--tl-text-secondary)}.device-row{align-items:center;display:flex}.device-row .name{flex:1;font-weight:700}.btn.danger{background:var(--tl-error);color:#fff;border:none}select{font:inherit;border:1px solid var(--tl-outline);background:var(--tl-card);color:var(--tl-navy);border-radius:10px;padding:6px 10px}.row-actions{flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;display:flex}.swatches{flex-wrap:wrap;gap:8px;margin-top:6px;display:flex}.swatch{border:2px solid var(--tl-outline);cursor:pointer;border-radius:50%;width:26px;height:26px;padding:0}.swatch.selected{border-color:var(--tl-navy);box-shadow:0 0 0 2px var(--tl-card), 0 0 0 4px var(--tl-navy)}.swatch.none{background:var(--tl-card);color:var(--tl-text-secondary);font-size:14px;line-height:1}.assign-row{cursor:pointer;align-items:center;gap:8px;padding:4px 0;display:flex}.modal-scrim{z-index:50;background:#14224e59;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal{width:100%;max-width:420px}.modal-body{margin-top:12px}.modal-footer{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.invite-code{letter-spacing:3px;color:var(--tl-blue);-webkit-user-select:all;user-select:all;font-size:28px;font-weight:800}.site-footer{background:var(--tl-footer);color:var(--tl-footer-text);flex-shrink:0;padding:16px 20px 18px}.site-footer .footer-main{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.site-footer .footer-brand{color:#fff;font-size:14px;font-weight:700}.site-footer .footer-links{flex-wrap:wrap;gap:18px;display:flex}.site-footer .footer-links a{color:var(--tl-footer-text);font-size:13px;font-weight:600;text-decoration:none}.site-footer .footer-links a:hover{color:#fff;text-decoration:underline}.site-footer .footer-note{max-width:80ch;color:var(--tl-footer-muted);margin:10px 0 0;font-size:12px;line-height:1.6}.site-footer .footer-note a{color:var(--tl-footer-text)}.site-footer .footer-legal{color:var(--tl-footer-muted);margin:8px 0 0;font-size:11.5px}
