:root{font-family:Inter,"Segoe UI",Arial,"Microsoft YaHei",sans-serif;color:#172638;background:#f3f6fa;font-synthesis:none;text-rendering:optimizeLegibility;--ink:#172638;--muted:#6d7b8c;--line:#dce4ec;--blue:#2563eb;--panel:#fff;--green:#14804a;--red:#b42318;--shadow:0 8px 24px rgba(30,55,80,.06)}*{box-sizing:border-box}body{margin:0;min-width:320px}.shell{width:min(1180px,calc(100% - 40px));margin:0 auto;padding:24px 0 32px}.topbar{height:56px;display:flex;align-items:center;gap:12px;margin-bottom:20px}.brand-mark{width:36px;height:36px;border-radius:11px;background:#183b63;color:#fff;display:grid;place-items:center;font-weight:800;font-size:17px}.brand-copy{display:grid;gap:2px}.brand-copy strong{font-size:14px}.brand-copy span{font-size:11px;color:var(--muted)}.pill{margin-left:auto;border-radius:999px;padding:7px 11px;font-size:12px;font-weight:650}.pill.good{background:#e6f5ec;color:var(--green)}.pill.bad{background:#fff0ee;color:var(--red)}.pill.muted{background:#e9eef4;color:#56677a}.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow)}.hero{padding:22px 24px;display:grid;grid-template-columns:1.25fr .75fr;gap:28px;align-items:center}.eyebrow{font-size:11px;font-weight:750;letter-spacing:.1em;color:#38679a;margin:0 0 8px}.hero h1{font-size:23px;line-height:1.25;margin:0 0 8px;letter-spacing:-.02em}.subtle{margin:0;color:var(--muted);font-size:13px}.identity{border-left:1px solid var(--line);padding-left:24px;min-width:0}.field-label{display:block;color:#718096;font-size:11px;font-weight:700;margin:0 0 6px}.identity-row{display:flex;align-items:center;gap:8px;margin-bottom:12px}.identity-row code{font:600 14px ui-monospace,Consolas,monospace;color:#203a58;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-button{font:inherit;font-size:11px;padding:5px 9px;border:1px solid var(--line);border-radius:7px;background:#fff;color:#52667b;cursor:pointer}.icon-button:disabled{opacity:.45;cursor:not-allowed}.text-input,select{font:inherit;color:var(--ink);border:1px solid #ccd7e3;background:#fff;border-radius:8px;padding:9px 10px;outline:none;min-width:0}.text-input:focus,select:focus{border-color:#7aa6ee;box-shadow:0 0 0 3px rgba(37,99,235,.1)}.identity .text-input{width:100%;padding:8px 10px;font-size:12px}.ports-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:14px}.port-card{padding:17px}.port-heading{display:flex;align-items:center;justify-content:space-between}.port-heading>div{display:flex;align-items:center;gap:9px}.port-index{font:700 10px ui-monospace,monospace;color:#8c9aad}.port-heading h2{font-size:15px;margin:0;letter-spacing:.03em}.port-status{font-size:11px;color:#758397;background:#f1f4f7;border-radius:999px;padding:5px 8px}.port-status.ready{color:#206347;background:#eaf5ee}.port-status.open{color:#1d4ed8;background:#eaf1ff}.port-status.error{color:var(--red);background:#fff0ee}.port-description{color:#718096;font-size:11px;margin:9px 0 13px}.port-actions{display:flex;align-items:center;gap:10px;margin-bottom:14px}.chosen-name{font-size:11px;color:#728096;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.button{font:inherit;font-size:12px;font-weight:700;border:1px solid transparent;border-radius:8px;padding:9px 13px;cursor:pointer;transition:background .12s}.button:disabled{opacity:.48;cursor:not-allowed}.button.secondary{color:#344b65;border-color:#cbd7e4;background:#fff}.button.secondary:hover:not(:disabled){background:#f6f8fb}.button.primary{color:#fff;background:var(--blue)}.button.primary:hover:not(:disabled){background:#1d4ed8}.button.danger{color:#a52820;border-color:#efc5c1;background:#fff}.button.danger:hover:not(:disabled){background:#fff2f0}.config-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px 8px}.config-grid label{font-size:10px;color:#6d7b8c;font-weight:650;display:grid;gap:5px}.config-grid select,.custom-baud{width:100%;padding:7px 8px;font-size:11px}.custom-baud[hidden]{display:none}.connect-row{margin-top:14px;padding:15px 17px;display:flex;align-items:center;justify-content:space-between;gap:16px}.connect-info{display:flex;align-items:center;gap:10px}.status-dot{width:9px;height:9px;background:#a8b3c1;border-radius:50%;box-shadow:0 0 0 4px #eff2f5}.status-dot.connecting{background:#d79a20;box-shadow:0 0 0 4px #fff6df}.status-dot.connected{background:#1b9b5b;box-shadow:0 0 0 4px #e6f6ed}.status-dot.error{background:#d14436;box-shadow:0 0 0 4px #fff0ee}.connect-info div{display:grid;gap:3px}.connect-info strong{font-size:13px}.connect-info div span{font-size:11px;color:var(--muted)}.connect-buttons{display:flex;gap:8px}.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:12px}.stat{padding:13px 15px;display:grid;gap:7px}.stat span{font-size:10px;color:var(--muted);font-weight:650}.stat strong{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.safety-note{font-size:11px;color:#637286;margin:13px 2px 0}.safety-note strong{color:#53657a}.error-banner{margin-top:12px;padding:11px 13px;border:1px solid #f1c6c1;border-radius:9px;background:#fff4f2;color:#9a2c22;font-size:12px;line-height:1.5;overflow-wrap:anywhere}.error-banner[hidden]{display:none}footer{font-size:10px;color:#9aa7b6;text-align:right;margin-top:20px}@media(max-width:900px){.ports-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.hero{grid-template-columns:1fr .8fr}}@media(max-width:650px){.shell{width:min(100% - 24px,540px);padding-top:12px}.topbar{margin-bottom:12px}.hero{grid-template-columns:1fr;padding:18px;gap:16px}.identity{border-left:0;border-top:1px solid var(--line);padding:13px 0 0}.ports-grid{grid-template-columns:1fr;gap:10px;margin-top:10px}.port-card{padding:15px}.config-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.connect-row{align-items:flex-start;flex-direction:column}.connect-buttons{width:100%}.connect-buttons .button{flex:1}.stats-grid{grid-template-columns:repeat(2,1fr);gap:8px}.stat{padding:11px 12px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
.admin-body{background:#f3f6fa}.admin-shell{max-width:1260px}.auth-panel{padding:15px 18px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}.auth-form{display:flex;align-items:center;gap:9px;flex:1;min-width:min(100%,440px)}.auth-form .field-label{margin:0;white-space:nowrap}.auth-form input{width:min(420px,100%);font-size:12px}.auth-message{font-size:11px;color:var(--muted);margin:0 0 0 auto}.auth-message:empty{display:none}.section-heading{display:flex;align-items:center;justify-content:space-between;margin:22px 2px 10px}.section-heading h1{font-size:18px;margin:0 0 4px}.section-heading .subtle{font-size:11px}.device-list{display:grid;gap:12px}.empty-state{padding:30px 15px;text-align:center;color:#7d8b9c;font-size:12px;border:1px dashed #ccd7e3;border-radius:12px}.device-card{background:#fff;border:1px solid var(--line);border-radius:13px;padding:16px 18px;box-shadow:var(--shadow)}.device-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.device-identity h2{font-size:14px;margin:0 0 5px}.device-id-admin{font:11px ui-monospace,Consolas,monospace;color:#6b7e93}.lease-pill{border-radius:999px;padding:6px 9px;background:#edf1f5;color:#627287;font-size:10px;font-weight:700;white-space:nowrap}.lease-pill.claimed{background:#fff5de;color:#8a6413}.lease-pill.owned{background:#e6f5ec;color:#187648}.device-facts{display:flex;gap:15px;flex-wrap:wrap;margin:12px 0 10px;color:#8391a2;font-size:10px}.device-port-summary{display:flex;flex-wrap:wrap;gap:7px}.port-summary{font-size:10px;color:#728196;background:#f1f4f7;border-radius:6px;padding:6px 8px}.port-summary.open{color:#285dac;background:#edf3ff}.device-actions{display:flex;gap:7px;margin-top:13px}.button.small{font-size:10px;padding:7px 10px}.admin-console{border-top:1px solid var(--line);margin-top:15px;padding-top:14px}.admin-port-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:11px}.admin-port{min-width:0;border:1px solid #e0e7ef;border-radius:10px;padding:12px;background:#fbfcfe}.admin-port-header{display:flex;align-items:center;justify-content:space-between}.admin-port-header h3{font-size:12px;margin:0}.admin-port-config{display:block;color:#8190a2;font-size:10px;margin-top:5px}.rx-heading{display:flex;align-items:center;gap:6px;margin-top:12px}.rx-heading strong{font-size:10px;margin-right:auto}.compact-select{font:inherit;font-size:10px;padding:5px 7px;border:1px solid #d1dbe6;border-radius:7px;background:#fff;color:#3a4e64}.rx-output{height:126px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;background:#152235;color:#d9e5f1;border-radius:7px;padding:9px;font:10px/1.45 ui-monospace,Consolas,monospace;margin:7px 0 12px}.admin-form{display:grid;grid-template-columns:1fr auto;align-items:center;gap:7px 6px;border-top:1px solid #e3e9ef;padding-top:10px;margin-top:9px}.admin-form h4{font-size:10px;margin:0}.write-form .compact-select{grid-column:2;grid-row:1}.write-form textarea{grid-column:1/-1;width:100%;resize:vertical;font:10px/1.5 ui-monospace,Consolas,monospace;padding:8px}.command-status{font-size:9px;color:#6c7d90;min-width:0;overflow-wrap:anywhere}.config-form{grid-template-columns:repeat(5,minmax(0,1fr)) auto}.config-form h4{grid-column:1/-1}.config-form input,.config-form select{width:100%;min-width:0;padding:6px 5px;font-size:9px;border-radius:6px}.config-form button,.config-form .command-status{grid-column:1/-1;justify-self:start}.signals-form{grid-template-columns:repeat(3,minmax(0,1fr)) auto}.signals-form h4{grid-column:1/-1}.signal-choice{display:grid;gap:4px;font-size:9px;color:#718096}.signal-choice select{width:100%;padding:6px 5px;font-size:9px;border:1px solid #ccd7e3;border-radius:6px;background:#fff}.signals-form button,.signals-form .command-status{grid-column:1/-1;justify-self:start}.signal-warning{font-size:10px;color:#996400;background:#fff7df;border-radius:6px;padding:7px 8px;margin:10px 0 0}.device-card [hidden],.admin-shell [hidden]{display:none!important}@media(max-width:980px){.admin-port-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:650px){.auth-panel{align-items:stretch}.auth-form{min-width:100%;display:grid;grid-template-columns:1fr auto}.auth-form .field-label{grid-column:1/-1}.auth-form input{width:100%}.auth-message{margin:0}.admin-port-grid{grid-template-columns:1fr}.device-card{padding:14px}.device-facts{gap:8px 12px}.config-form{grid-template-columns:repeat(3,minmax(0,1fr))}.signals-form{grid-template-columns:repeat(3,minmax(0,1fr))}}