:root{--bg:#f5f7fa;--surface:#fff;--surface-muted:#f7f9fc;--text:#303133;--muted:#909399;--line:#ebeef5;--primary:#409eff;--primary-dark:#2f7fd4;--danger:#f56c6c;--warning:#e6a23c;--ok:#67c23a;--shadow:0 2px 10px #00000008}*{box-sizing:border-box}html{background:var(--bg)}body{background:var(--bg);color:var(--text);margin:0;font-family:Arial,Microsoft YaHei,sans-serif}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}h1,h2,h3,p{margin-top:0}h2,h3{color:var(--text);margin-bottom:16px;font-size:18px}.app-frame{width:100%;max-width:500px;min-height:100vh;margin:0 auto;padding:20px 20px 82px}.app-topbar{justify-content:space-between;align-items:center;margin-bottom:18px;display:flex}.brand{color:var(--text);font-size:22px;font-weight:700;line-height:1.25}.app-subtitle{color:var(--muted);margin-top:4px;font-size:13px}.main{min-width:0}.medication-reminder{border:1px solid #b3d8ff;border-left:4px solid var(--primary);min-width:0;color:var(--text);background:#ecf5ff;border-radius:8px;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:10px;margin-bottom:14px;padding:12px;display:grid}.medication-reminder-icon{color:var(--primary-dark)}.medication-reminder-content{gap:3px;min-width:0;line-height:1.45;display:grid}.medication-reminder-content strong{font-size:14px}.medication-reminder-content span{overflow-wrap:anywhere;font-size:13px}.medication-reminder-actions{align-items:center;gap:6px;display:flex}.medication-reminder-link{background:var(--primary);color:#fff;white-space:nowrap;border-radius:6px;align-items:center;min-height:36px;padding:0 10px;font-size:13px;font-weight:700;display:inline-flex}.medication-reminder-dismiss{width:36px;height:36px;color:var(--muted);background:0 0;border:0;border-radius:6px;flex:0 0 36px;justify-content:center;align-items:center;display:inline-flex}.medication-reminder-dismiss:hover{color:var(--text);background:#d9ecff}.page-header{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:18px;display:flex}.page-title{color:var(--text);margin:0;font-size:24px;line-height:1.25}.grid{gap:16px;display:grid}.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.two-column{grid-template-columns:1fr}.card{background:var(--surface);width:100%;box-shadow:var(--shadow);border:0;border-radius:16px;margin-bottom:20px;padding:20px;overflow-x:auto}.stat-value{color:var(--primary);margin-top:10px;font-size:30px;font-weight:700;line-height:1.1}.muted{color:var(--muted)}.toolbar{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.toolbar>.input,.toolbar>.select{flex:130px;min-width:0}.toolbar>.button{flex:0 auto}.action-toolbar .button{flex:150px}.segmented{background:var(--surface-muted);border:1px solid var(--line);border-radius:12px;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin:18px 0;padding:5px;display:grid}.segmented button{width:100%;min-height:40px;color:var(--muted);background:0 0;border:0;border-radius:10px;font-weight:700}.segmented button.active{background:var(--surface);color:var(--primary);box-shadow:var(--shadow)}.segmented-control{border:1px solid var(--line);background:var(--surface-muted);border-radius:12px;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;padding:5px;display:grid}.segment{min-height:40px;color:var(--muted);background:0 0;border:0;border-radius:10px;font-weight:700}.segment.active{color:var(--primary);background:var(--surface);box-shadow:var(--shadow)}.button{background:var(--primary);color:#fff;border:0;border-radius:10px;outline:none;justify-content:center;align-items:center;gap:8px;min-height:44px;padding:0 16px;font-size:15px;font-weight:700;display:inline-flex}.button:hover{background:var(--primary-dark)}.button.secondary{color:#fff;background:#909399}.button.danger{background:var(--danger)}.icon-button{background:var(--surface-muted);width:40px;height:40px;color:var(--muted);border:0;border-radius:50%;justify-content:center;align-items:center;display:inline-flex}.icon-button.danger{color:var(--danger);background:#fef0f0}.input,.select{border:1px solid var(--line);width:100%;min-height:44px;color:var(--text);background:#fff;border-radius:10px;outline:none;padding:0 14px;font-size:15px}.input:focus,.select:focus{border-color:var(--primary);box-shadow:0 0 0 3px #409eff1f}.textarea{resize:vertical;min-height:88px;padding:12px 14px}.checkbox-row{border:1px solid var(--line);min-height:44px;color:var(--text);white-space:nowrap;background:#fff;border-radius:10px;align-items:center;gap:10px;padding:0 14px;font-size:15px;font-weight:700;display:inline-flex}.checkbox-row input{width:18px;height:18px;accent-color:var(--primary)}.medicine-select-list{gap:10px;max-height:44vh;display:grid;overflow-y:auto}.medicine-select-item{border:1px solid var(--line);background:#fff;border-radius:12px;grid-template-columns:22px minmax(0,1fr);align-items:flex-start;gap:10px;padding:12px;transition:border-color .15s,box-shadow .15s,background .15s;display:grid}.medicine-select-item:hover,.medicine-select-item.active{border-color:var(--primary);background:#f5faff;box-shadow:0 0 0 3px #409eff14}.medicine-select-item input{width:18px;height:18px;accent-color:var(--primary);margin:2px 0 0}.medicine-select-content{gap:5px;min-width:0;display:grid}.medicine-select-title{color:var(--text);font-size:15px;font-weight:700;line-height:1.35}.medicine-select-meta,.medicine-select-footer{color:var(--muted);font-size:12px;line-height:1.35}.medicine-select-footer{flex-wrap:wrap;gap:8px 12px;display:flex}.form{gap:12px;display:grid}.form>.button{width:100%}.form-row{color:var(--text);gap:7px;font-size:14px;font-weight:700;display:grid}.inline-panel{border:1px solid var(--line);background:var(--surface-muted);border-radius:12px;padding:14px}.table{border-collapse:collapse;width:100%;font-size:13px}.table th,.table td{text-align:left;vertical-align:top;word-break:break-word;border-bottom:1px solid #f0f0f0;padding:12px 8px}.table tr:last-child td{border-bottom:0}.table tbody tr{transition:background .15s}.table tbody tr:hover{background:var(--surface-muted)}.badge{background:var(--surface-muted);min-height:24px;color:var(--muted);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;padding:3px 9px;font-size:12px;font-weight:700;display:inline-flex}.badge.warning{color:var(--warning);background:#fdf6ec}.badge.info{color:var(--primary-dark);background:#ecf5ff}.badge.danger{color:var(--danger);background:#fef0f0}.badge.ok{color:var(--ok);background:#f0f9eb}.error,.success{border-radius:10px;margin-bottom:12px;padding:12px 14px;font-size:14px;font-weight:700}.error{color:var(--danger);background:#fef0f0}.success{color:var(--ok);background:#f0f9eb}.auth-page{background:var(--bg);align-items:center;width:100%;max-width:500px;min-height:100vh;margin:0 auto;padding:20px;display:grid}.auth-panel{width:100%}.auth-panel .page-title,.auth-panel .muted{text-align:center}.modal-backdrop{z-index:100;background:#00000073;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal-dialog{background:#fff;border-radius:16px;width:min(430px,100%);max-height:calc(100vh - 40px);padding:20px;overflow-y:auto;box-shadow:0 16px 40px #00000020}.modal-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.modal-header h2{margin:0}.tab-bar{z-index:50;width:100%;max-width:500px;padding-bottom:env(safe-area-inset-bottom);background:#fff;grid-template-columns:repeat(6,minmax(0,1fr));display:grid;position:fixed;bottom:0;left:50%;right:auto;transform:translate(-50%);box-shadow:0 -1px 5px #00000010}.tab-item{color:#666;text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:4px;min-width:0;min-height:62px;font-size:12px;font-weight:700;display:flex}.tab-item svg{flex:none}.tab-item span{text-overflow:ellipsis;white-space:nowrap;max-width:100%;overflow:hidden}.tab-item.active{color:var(--primary)}.device-page-intro{margin:5px 0 0;font-size:13px}.gateway-switcher{scrollbar-width:none;gap:8px;padding:2px 2px 12px;display:flex;overflow-x:auto}.gateway-switcher::-webkit-scrollbar{display:none}.gateway-switch{border:1px solid var(--line);min-height:38px;color:var(--muted);background:#fff;border-radius:999px;flex:none;align-items:center;gap:8px;padding:0 14px;font-size:13px;font-weight:700;display:inline-flex}.gateway-switch.active{color:#14755b;background:#effbf7;border-color:#1f9d78;box-shadow:0 0 0 3px #1f9d7815}.gateway-dot{background:#b8bec9;border-radius:50%;width:8px;height:8px}.gateway-dot.online{background:#34d399;box-shadow:0 0 0 4px #34d39922}.gateway-console{isolation:isolate;color:#e9f5f2;background:linear-gradient(135deg,#101a27 0%,#182b35 58%,#153c38 100%);border:1px solid #24354a;border-radius:20px;margin-bottom:20px;padding:20px;position:relative;overflow:hidden;box-shadow:0 18px 36px #1223312c}.gateway-console.offline{background:linear-gradient(135deg,#171c25,#27303d)}.gateway-console.degraded{background:#27251f;border-color:#7c6334}.gateway-console-glow{z-index:-1;filter:blur(55px);background:#31d6a248;border-radius:50%;width:220px;height:220px;position:absolute;top:-90px;right:-70px}.gateway-console.offline .gateway-console-glow{background:#7f8b9b33}.gateway-console.degraded .gateway-console-glow{background:#d6a02d38}.gateway-console-header,.section-heading-row,.command-title,.token-vault-title{justify-content:space-between;align-items:center;gap:12px;display:flex}.gateway-console-header h2{color:#fff;margin:4px 0 0;font-size:21px}.gateway-eyebrow,.section-kicker{color:#7fe3c4;letter-spacing:.16em;font-size:10px;font-weight:800}.section-kicker{color:#8492a6}.gateway-live-badge{color:#cbd5e1;background:#ffffff0b;border:1px solid #64748b66;border-radius:999px;align-items:center;gap:6px;min-height:30px;padding:0 10px;font-size:12px;font-weight:800;display:inline-flex}.gateway-live-badge.online{color:#82f0ce;background:#3bd5a415;border-color:#55dcb16b}.gateway-live-badge.warning{color:#f4d47f;background:#d5a94217;border-color:#d5a9427d}.gateway-telemetry{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:20px;display:grid}.gateway-telemetry>div{background:#ffffff08;border:1px solid #ffffff14;border-radius:12px;min-width:0;padding:11px}.gateway-telemetry span,.gateway-last-seen{color:#9fb3bf;font-size:11px}.gateway-device-warning{color:#f4d47f;background:#d5a94212;border:1px solid #d5a94252;border-radius:6px;align-items:center;gap:8px;margin-top:12px;padding:10px 12px;font-size:12px;display:flex}.gateway-telemetry strong{color:#f7fffc;text-overflow:ellipsis;white-space:nowrap;margin-top:5px;font-size:14px;display:block;overflow:hidden}.gateway-last-seen{border-top:1px solid #ffffff12;align-items:center;gap:7px;margin-top:14px;padding-top:13px;display:flex}.device-empty-state{text-align:center;padding:32px 22px}.device-empty-state svg{color:var(--primary);margin-bottom:12px}.token-vault{color:#523f12;background:repeating-linear-gradient(-45deg,#fff9e8,#fff9e8 10px,#fff6dc 10px 20px);border:1px solid #e8b94f;border-radius:16px;margin-bottom:20px;padding:18px;overflow:hidden;box-shadow:0 8px 24px #d6a52b18}.token-vault-title{color:#7a5b0b;justify-content:flex-start}.token-vault p{margin:10px 0;font-size:13px;line-height:1.55}.token-vault code{overflow-wrap:anywhere;color:#3d3216;background:#fffdf7;border:1px dashed #d4a737;border-radius:10px;margin-bottom:12px;padding:12px;font-family:Consolas,Microsoft YaHei,monospace;font-size:12px;line-height:1.5;display:block}.token-vault .button{background:#8c690f;width:100%}.section-heading-row{color:var(--muted);align-items:flex-start;margin-bottom:14px}.section-heading-row h2{margin:3px 0 0}.gateway-admin-actions{border-top:1px solid var(--line);grid-template-columns:1fr 1fr;gap:10px;margin-top:16px;padding-top:14px;display:grid}.command-history-card{overflow:hidden}.command-timeline{gap:4px;display:grid}.command-row{grid-template-columns:38px minmax(0,1fr);gap:11px;padding:11px 0;display:grid;position:relative}.command-row+.command-row{border-top:1px solid var(--line)}.command-icon{color:#94620f;background:#fff5df;border-radius:11px;place-items:center;width:36px;height:36px;font-size:14px;font-weight:900;display:grid}.command-icon.ok{color:#237c4b;background:#e9f8ef}.command-icon.danger{color:#b83e3e;background:#fff0f0}.command-content{gap:5px;min-width:0;display:grid}.command-title{align-items:flex-start}.command-title strong{font-size:14px}.command-content>span,.command-content small{color:var(--muted);font-size:11px;line-height:1.45}.command-content small{color:var(--danger)}@media (max-width:420px){.app-frame,.auth-page{padding-left:14px;padding-right:14px}.app-frame{padding-bottom:82px}.stats{grid-template-columns:1fr}.page-header{flex-direction:column}.page-header .toolbar{width:100%}.page-header .button{flex:auto}.medication-reminder{grid-template-columns:24px minmax(0,1fr);align-items:start}.medication-reminder-actions{grid-column:2;justify-content:space-between;min-width:0}.medication-reminder-link{white-space:normal;min-width:0}.gateway-telemetry{grid-template-columns:1fr 1fr}.gateway-telemetry>div:first-child{grid-column:1/-1}.gateway-admin-actions{grid-template-columns:1fr}}.app-frame:has(.serial-workbench){max-width:1180px}.serial-workbench{--serial-ink:#1d252b;--serial-panel:#f9fbfc;--serial-line:#d9e1e5;--serial-green:#16845b;--serial-cyan:#147d92;--serial-amber:#a86513;color:var(--serial-ink);gap:14px;font-family:Bahnschrift,Microsoft YaHei,sans-serif;display:grid}.serial-console-loading{min-height:260px;color:var(--muted);place-items:center;display:grid}.serial-workbench-header{border-bottom:1px solid #cbd5da;align-items:end;padding-bottom:12px}.serial-overline{color:#52656f;letter-spacing:0;margin-bottom:5px;font-family:Consolas,monospace;font-size:11px;font-weight:700;display:block}.serial-header-actions{gap:10px;display:flex}.serial-channel-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:14px;display:grid}.serial-channel{background:var(--serial-panel);border:1px solid var(--serial-line);border-top:4px solid #82929a;border-radius:6px;min-width:0;padding:14px;box-shadow:0 8px 24px #18232a0a}.serial-channel.serial-status-connected{border-top-color:var(--serial-green)}.serial-channel.serial-status-connecting,.serial-channel.serial-status-retrying{border-top-color:var(--serial-amber)}.serial-channel.serial-status-error{border-top-color:var(--danger)}.serial-channel-heading{grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:10px;margin-bottom:14px;display:grid}.serial-role-icon{color:#f4fafb;background:#27363e;border-radius:5px;place-items:center;width:42px;height:42px;display:grid}.serial-channel-heading span{color:#6d7c84;font-family:Consolas,monospace;font-size:10px;font-weight:700;display:block}.serial-channel-heading h2{margin:2px 0 0;font-size:18px}.serial-status-pill{color:#56666e;background:#edf1f3;border-radius:4px;align-items:center;gap:6px;min-width:76px;padding:6px 8px;font-size:12px;font-weight:700;display:inline-flex}.serial-status-pill i{background:#8b989e;border-radius:50%;flex:none;width:7px;height:7px}.serial-status-pill.connected{color:#116743;background:#e4f4eb}.serial-status-pill.connected i{background:var(--serial-green);box-shadow:0 0 0 4px #16845b1f}.serial-status-pill.connecting,.serial-status-pill.retrying{color:#87500c;background:#fff1d9}.serial-status-pill.connecting i,.serial-status-pill.retrying i{background:var(--serial-amber);animation:1.2s ease-in-out infinite serial-pulse}.serial-status-pill.error{color:#a23838;background:#feecec}@keyframes serial-pulse{50%{opacity:.35}}.serial-primary-config,.serial-advanced-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.serial-primary-config label,.serial-advanced-grid label{color:#53636b;gap:6px;font-size:12px;font-weight:700;display:grid}.serial-advanced{border-top:1px solid var(--serial-line);border-bottom:1px solid var(--serial-line);margin-top:12px}.serial-advanced summary{color:#596970;cursor:pointer;padding:11px 0;font-size:12px;font-weight:700}.serial-advanced-grid{padding:2px 0 13px}.serial-metrics{border:1px solid var(--serial-line);border-radius:5px;grid-template-columns:repeat(4,1fr);margin:10px 0;display:grid;overflow:hidden}.serial-metrics>div{background:#fff;grid-template-columns:auto 1fr;align-items:center;gap:4px;min-width:0;padding:9px;display:grid}.serial-metrics>div+div{border-left:1px solid var(--serial-line)}.serial-metrics svg{color:var(--serial-cyan)}.serial-metrics span{color:#7a878d;font-size:10px}.serial-metrics strong{text-overflow:ellipsis;grid-column:1/-1;font-family:Consolas,monospace;font-size:13px;overflow:hidden}.serial-inline-error{overflow-wrap:anywhere;color:#a13c3c;border-left:3px solid var(--danger);background:#fff0f0;margin-bottom:12px;padding:8px 10px;font-family:Consolas,monospace;font-size:11px}.serial-connect-button{justify-content:center;width:100%}.serial-pending-band,.serial-log-console{border:1px solid var(--serial-line);background:#f9fbfc;border-radius:6px;padding:16px 18px}.serial-section-title,.serial-section-title>div,.serial-log-toolbar{justify-content:space-between;align-items:center;gap:9px;display:flex}.serial-section-title h2{margin:0;font-size:16px}.serial-section-title>span{text-align:center;color:#fff;background:#34464f;border-radius:3px;min-width:28px;padding:4px 7px;font-family:Consolas,monospace;font-size:12px}.serial-pending-band>.muted{margin:14px 0 0}.serial-command-list{border-top:1px solid var(--serial-line);margin-top:12px;display:grid}.serial-command-row{border-bottom:1px solid var(--serial-line);grid-template-columns:64px minmax(0,1fr) auto;align-items:center;gap:12px;padding:11px 0;display:grid}.serial-command-code{text-align:center;color:#fff;background:#2f7d65;border-radius:3px;padding:6px;font-family:Consolas,monospace;font-weight:700}.serial-command-code.take{background:#b06a19}.serial-command-row div{gap:3px;min-width:0;display:grid}.serial-command-row small,.serial-command-row time{color:#77858b;font-size:11px}.serial-log-console{background:#182127;border-color:#26343b;padding:0;overflow:hidden}.serial-log-toolbar{color:#dce7eb;background:#222e35;border-bottom:1px solid #34434a;padding:13px 15px}.serial-log-toolbar h2{color:#eef5f7}.serial-log-toolbar .segmented-control{background:#172026;grid-template-columns:repeat(5,minmax(48px,1fr));width:auto;margin:0}.serial-log-toolbar .segment{color:#a9b7bd;background:0 0;min-height:30px;font-size:11px}.serial-log-toolbar .segment.active{color:#102027;background:#89d8c5}.serial-log-table{min-height:180px;max-height:340px;font-family:Consolas,monospace;overflow:auto}.serial-log-empty{text-align:center;color:#66777e;padding:38px 15px;font-size:12px}.serial-log-row{color:#b8c6cc;border-bottom:1px solid #253138;grid-template-columns:78px 48px 34px 48px minmax(0,1fr);align-items:baseline;gap:8px;min-height:34px;padding:8px 12px;font-size:11px;display:grid}.serial-log-row time,.serial-log-role,.serial-log-kind{color:#74878f}.serial-log-direction{color:#72b9c8}.serial-log-direction.tx{color:#ddb46e}.serial-log-row strong{overflow-wrap:anywhere;color:#dce6e9;min-width:0;font-weight:400}.serial-log-row.kind-error strong{color:#ff9898}.serial-log-row.kind-scan strong{color:#86d9b1}.inbound-command-dialog{gap:14px;display:grid}.inbound-command-banner{color:#14563f;background:#e9f6ef;border-left:4px solid #258b66;align-items:center;gap:12px;padding:12px;display:flex}.inbound-command-banner.take{color:#774708;background:#fff3dc;border-left-color:#d18a28}.inbound-command-banner div{gap:3px;display:grid}.inbound-command-banner span{font-size:11px}.inbound-command-banner strong{font-family:Consolas,monospace;font-size:18px}.inbound-command-summary,.inbound-scan-result{border:1px solid var(--line);background:#f6f8f9;border-radius:4px;gap:7px;padding:12px;display:grid}.inbound-command-summary span,.inbound-scan-result span{color:var(--muted);font-size:12px}.inbound-scan-result strong{color:var(--text);font-family:Consolas,monospace}.inbound-scan-waiting{text-align:center;color:#42616e;background:#f1f7f8;border:1px dashed #9db5be;border-radius:5px;align-content:center;place-items:center;gap:7px;min-height:130px;display:grid}.inbound-scan-waiting span{color:#70858e;font-size:12px}.inbound-first-scan-note{color:#915b12;align-items:center;gap:7px;font-size:12px;display:flex}.inbound-command-actions{grid-template-columns:1fr 1.5fr;gap:10px;display:grid}.inbound-command-actions .button{justify-content:center}@media (max-width:760px){.serial-channel-grid,.serial-primary-config,.serial-advanced-grid{grid-template-columns:1fr}.serial-workbench-header,.serial-log-toolbar{flex-direction:column;align-items:stretch}.serial-header-actions,.serial-header-actions .button{width:100%}.serial-header-actions .button{justify-content:center}.serial-metrics{grid-template-columns:repeat(2,1fr)}.serial-metrics>div:nth-child(3){border-left:0;border-top:1px solid var(--serial-line)}.serial-metrics>div:nth-child(4){border-top:1px solid var(--serial-line)}.serial-command-row{grid-template-columns:58px minmax(0,1fr)}.serial-command-row time{grid-column:2}.serial-log-toolbar .segmented-control{grid-template-columns:repeat(5,minmax(56px,1fr));width:100%;overflow-x:auto}.serial-log-row{grid-template-columns:68px 38px 30px minmax(0,1fr)}.serial-log-kind{display:none}.inbound-command-actions{grid-template-columns:1fr}}@media (min-width:1200px){.app-frame:has(.serial-workbench) .tab-bar{border:1px solid #dbe3e6;grid-template-columns:1fr;width:74px;inset:180px 22px auto auto;transform:none;box-shadow:0 5px 20px #18232a14}.app-frame:has(.serial-workbench) .tab-item{min-height:58px;font-size:10px}}.app-frame:has(.gateway-serial-assistant){max-width:1180px}.gateway-serial-assistant{--gateway-ink:#243139;--gateway-muted:#697980;--gateway-line:#d6dfe2;--gateway-panel:#f8fafb;--gateway-green:#147452;--gateway-blue:#246d93;--gateway-amber:#a46918;--gateway-red:#b64840;color:var(--gateway-ink);gap:14px;margin:0 0 20px;font-family:Bahnschrift,Microsoft YaHei,sans-serif;display:grid}.gateway-serial-assistant.loading{min-height:220px;color:var(--muted);border:1px solid var(--line);background:#fff;border-radius:6px;place-items:center}.gateway-serial-assistant-header{border-bottom:1px solid #bfcbd0;justify-content:space-between;align-items:flex-end;gap:16px;padding:16px 0 12px;display:flex}.gateway-serial-assistant-header h2{align-items:center;gap:8px;margin:3px 0 8px;font-size:21px;display:flex}.gateway-serial-revisions{color:var(--gateway-muted);flex-wrap:wrap;align-items:center;gap:8px;font-family:Consolas,monospace;font-size:11px;display:flex}.gateway-serial-revisions span{background:#e9eef0;border-radius:3px;align-items:center;gap:4px;min-height:25px;padding:3px 7px;display:inline-flex}.gateway-serial-revisions .applied{color:#116744;background:#e2f3e9}.gateway-serial-revisions .waiting,.gateway-serial-revisions .dirty{color:#7f510d;background:#fff0d5}.gateway-serial-warning{color:#7d500d;background:#fff5df;border-left:3px solid #d89b2e;align-items:center;gap:8px;padding:10px 12px;font-size:13px;font-weight:700;display:flex}.gateway-serial-channel-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:14px;display:grid}.gateway-serial-channel{background:var(--gateway-panel);border:1px solid var(--gateway-line);border-top:4px solid #829198;border-radius:6px;min-width:0;padding:14px;box-shadow:0 8px 22px #18252b0a}.gateway-serial-channel.status-connected{border-top-color:var(--gateway-green)}.gateway-serial-channel.status-connecting,.gateway-serial-channel.status-disconnecting{border-top-color:var(--gateway-amber)}.gateway-serial-channel.status-error{border-top-color:var(--gateway-red)}.gateway-serial-channel-header{grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:10px;margin-bottom:13px;display:grid}.gateway-serial-role-icon{color:#eef5f6;background:#2e3c43;border-radius:4px;place-items:center;width:38px;height:38px;display:grid}.gateway-serial-channel-header h3{margin:0 0 2px;font-size:16px}.gateway-serial-channel-header>div:nth-child(2) span{color:var(--gateway-muted);text-overflow:ellipsis;white-space:nowrap;font-family:Consolas,monospace;font-size:11px;display:block;overflow:hidden}.gateway-serial-status{color:#59676d;background:#e9eef0;border-radius:3px;align-items:center;gap:6px;min-width:78px;padding:6px 8px;font-size:11px;font-weight:700;display:inline-flex}.gateway-serial-status i{background:#89959a;border-radius:50%;flex:none;width:7px;height:7px}.gateway-serial-status.connected{color:#126746;background:#e2f3e9}.gateway-serial-status.connected i{background:var(--gateway-green);box-shadow:0 0 0 3px #1474521f}.gateway-serial-status.connecting,.gateway-serial-status.disconnecting{color:#81510d;background:#fff0d5}.gateway-serial-status.connecting i,.gateway-serial-status.disconnecting i{background:var(--gateway-amber);animation:1.2s ease-in-out infinite serial-pulse}.gateway-serial-status.error{color:#993d38;background:#feeceb}.gateway-serial-status.error i{background:var(--gateway-red)}.gateway-serial-profile-grid{grid-template-columns:minmax(150px,1.5fr) repeat(4,minmax(80px,.72fr));gap:9px;display:grid}.gateway-serial-profile-grid.advanced{grid-template-columns:repeat(2,minmax(0,1fr));padding:2px 0 12px}.gateway-serial-profile-grid .form-row{color:#596970;gap:5px;min-width:0;font-size:11px;font-weight:700}.gateway-serial-profile-grid .input{border-color:#d2dcdf;border-radius:4px;min-height:38px;padding:0 8px;font-size:12px}.gateway-serial-advanced{border-top:1px solid var(--gateway-line);border-bottom:1px solid var(--gateway-line);margin-top:11px}.gateway-serial-advanced summary{color:#596970;cursor:pointer;padding:10px 0;font-size:11px;font-weight:700}.gateway-serial-channel-footer{justify-content:space-between;align-items:center;gap:10px;padding-top:11px;display:flex}.gateway-serial-channel-footer>span{color:#738188;font-family:Consolas,monospace;font-size:10px}.gateway-serial-channel-footer .button,.gateway-serial-assistant .button{border-radius:4px;min-height:38px;font-size:12px}.gateway-serial-channel-error{color:#9d3f3a;border-left:3px solid var(--gateway-red);background:#fff0ef;margin-top:9px;padding:7px 9px;font-size:11px}.gateway-serial-reconciliation{border:1px solid #e7b1aa;border-left:4px solid var(--gateway-red);background:#fff8f6;border-radius:4px;gap:12px;padding:15px;display:grid}.gateway-serial-reconciliation>header{color:var(--gateway-red);align-items:flex-start;gap:10px;display:flex}.gateway-serial-reconciliation h3{margin:0 0 3px;font-size:15px}.gateway-serial-reconciliation p{color:#865753;margin:0;font-size:12px}.gateway-serial-reconcile-facts{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.gateway-serial-reconcile-facts span{color:#87645f;background:#fff;border:1px solid #ecd1cd;border-radius:3px;gap:3px;min-width:0;padding:8px;font-size:10px;display:grid}.gateway-serial-reconcile-facts strong{color:#4b3431;text-overflow:ellipsis;white-space:nowrap;font-family:Consolas,monospace;overflow:hidden}.gateway-serial-confirm-check{color:#6f3d39;align-items:center;gap:8px;font-size:12px;font-weight:700;display:flex}.gateway-serial-reconciliation textarea{resize:vertical;min-height:72px;padding:9px}.gateway-serial-terminal{background:#fff;border:1px solid #cbd5d9;border-radius:6px;min-width:0;overflow:hidden}.gateway-serial-terminal-header{background:#edf1f2;border-bottom:1px solid #cad4d8;justify-content:space-between;align-items:center;gap:14px;padding:12px 14px;display:flex}.gateway-serial-terminal-header h3{margin:2px 0 0;font-size:15px}.gateway-serial-terminal-tools{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:7px;min-width:0;display:flex}.gateway-serial-terminal-tools .segmented-control.compact{background:#dde5e7;border-radius:4px;width:132px;padding:3px}.gateway-serial-terminal-tools .segment{border-radius:3px;min-height:32px;font-size:11px}.gateway-serial-terminal-tools .input.compact{border-radius:4px;width:auto;min-width:105px;min-height:34px;padding:0 8px;font-size:11px}.gateway-serial-terminal-tools .icon-button{color:#56666c;background:#dce4e6;border-radius:4px;width:34px;height:34px}.gateway-serial-event-log{color:#dce8e2;background:#17221f;height:300px;padding:7px 0;font-family:Consolas,Cascadia Mono,monospace;overflow:auto}.gateway-serial-event-empty{color:#71827b;place-items:center;min-height:280px;font-size:12px;display:grid}.gateway-serial-event{border-left:3px solid #0000;grid-template-columns:142px 48px 32px minmax(0,1fr) 78px;align-items:baseline;gap:8px;min-width:700px;padding:5px 12px;font-size:11px;line-height:1.45;display:grid}.gateway-serial-event:hover{background:#21302b}.gateway-serial-event.rx{border-left-color:#2b9b73}.gateway-serial-event.tx{border-left-color:#d69736}.gateway-serial-event.echo{opacity:.62}.gateway-serial-event time,.gateway-serial-event small{color:#879991}.gateway-serial-event-role{color:#7fbbc9}.gateway-serial-event-direction{color:#e2b15e;font-weight:700}.gateway-serial-event code{overflow-wrap:anywhere;color:#e5eee9;letter-spacing:0}.gateway-serial-send-panel{background:#f6f8f8;border-top:1px solid #cbd5d9;grid-template-columns:minmax(0,1fr) 120px auto;align-items:end;gap:10px;padding:12px 14px 14px;display:grid}.gateway-serial-maintenance-bar{border-bottom:1px solid #dce3e5;grid-column:1/-1;justify-content:space-between;align-items:center;gap:10px;padding-bottom:9px;display:flex}.gateway-serial-maintenance-bar>div{color:#5d6b70;align-items:center;gap:7px;font-size:12px;font-weight:700;display:flex}.gateway-serial-send-panel .form-row{color:#5e6d73;gap:5px;font-size:11px;font-weight:700}.gateway-serial-send-input{resize:vertical;border-radius:4px;min-height:78px;padding:9px 10px;font-family:Consolas,Cascadia Mono,monospace;font-size:12px}.gateway-serial-newline .input{border-radius:4px}.gateway-serial-send-button{background:var(--gateway-green);min-width:156px;min-height:44px!important}.gateway-serial-send-button:hover:not(:disabled){background:#0f6144}.gateway-serial-transmission{color:#5f6d72;background:#edf3f1;border-top:1px solid #d1dcda;grid-template-columns:minmax(0,1fr) auto auto;gap:12px;padding:9px 14px;font-family:Consolas,monospace;font-size:10px;display:grid}.gateway-serial-transmission strong{color:var(--gateway-blue)}.gateway-serial-transmission.status-failed strong,.gateway-serial-transmission.status-reconciliation_required strong{color:var(--gateway-red)}.gateway-serial-transmission.status-succeeded strong{color:var(--gateway-green)}@media (max-width:960px){.gateway-serial-channel-grid{grid-template-columns:1fr}.gateway-serial-profile-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.gateway-serial-port-field{grid-column:span 2}}@media (max-width:700px){.gateway-serial-assistant-header,.gateway-serial-terminal-header,.gateway-serial-maintenance-bar{flex-direction:column;align-items:stretch}.gateway-serial-terminal-tools{justify-content:flex-start}.gateway-serial-terminal-tools .segmented-control.compact,.gateway-serial-terminal-tools .input.compact{flex:120px;width:auto}.gateway-serial-profile-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.gateway-serial-port-field{grid-column:1/-1}.gateway-serial-reconcile-facts,.gateway-serial-send-panel{grid-template-columns:1fr}.gateway-serial-send-button{width:100%}}@media (max-width:420px){.gateway-serial-assistant-header .button{width:100%}.gateway-serial-channel-header{grid-template-columns:34px minmax(0,1fr)}.gateway-serial-role-icon{width:34px;height:34px}.gateway-serial-status{grid-column:1/-1;width:100%}.gateway-serial-profile-grid,.gateway-serial-profile-grid.advanced{grid-template-columns:1fr}.gateway-serial-port-field{grid-column:auto}.gateway-serial-channel-footer{flex-direction:column;align-items:stretch}.gateway-serial-terminal-tools>*{flex:calc(50% - 7px)}.gateway-serial-terminal-tools .icon-button{flex:0 0 34px}.gateway-serial-transmission{grid-template-columns:1fr}}.manual-command-panel{background:#f7faf9;border:1px solid #cedbd7;border-left:4px solid #16845b;border-radius:6px;padding:18px}.manual-command-header,.manual-command-header>div:first-child,.manual-command-header h2{align-items:center;display:flex}.manual-command-header{justify-content:space-between;gap:18px;margin-bottom:16px}.manual-command-header>div:first-child{flex-direction:column;align-items:flex-start;min-width:0}.manual-command-header h2{gap:8px;margin:1px 0 4px;font-size:18px}.manual-command-header p{color:#718087;margin:0;font-size:12px}.manual-controller-state{color:#7b858a;background:#e9edef;border-radius:4px;flex:none;align-items:center;gap:7px;padding:7px 9px;font-size:12px;font-weight:700;display:inline-flex}.manual-controller-state.ready{color:#126945;background:#def2e7}.manual-reconciliation-alert{color:#a13d32;background:#fff0ed;border-left:3px solid #d45245;align-items:center;gap:8px;margin-bottom:14px;padding:10px 12px;font-size:12px;font-weight:700;display:flex}.manual-command-body{grid-template-columns:minmax(0,1.05fr) minmax(320px,.95fr);gap:18px;display:grid}.manual-command-builder{gap:12px;min-width:0;display:grid}.manual-action-switch{border-radius:5px;grid-template-columns:repeat(2,minmax(0,1fr))}.manual-action-switch .segment{border-radius:3px}.manual-slot-grid{grid-template-columns:repeat(6,minmax(0,1fr));gap:7px;display:grid}.manual-slot{color:#6d7a80;background:#fff;border:1px solid #d4dddf;border-radius:4px;align-content:center;place-items:center;gap:2px;min-width:0;min-height:55px;display:grid}.manual-slot strong{font-family:Consolas,monospace;font-size:16px}.manual-slot span{font-size:10px}.manual-slot.occupied{color:#805010;background:#fff6e7;border-color:#e8c88f}.manual-slot.reserved{color:#9d4141;background:#fff0f0;border-color:#e5a0a0}.manual-slot.selected{color:#fff;background:#1d7b5b;border-color:#1d7b5b;box-shadow:0 0 0 3px #1d7b5b22}.manual-slot:disabled:not(.selected){opacity:.48}.manual-command-preview{background:#eaf2f0;border:1px solid #c7d9d4;border-radius:4px;grid-template-columns:88px minmax(0,1fr);align-items:center;gap:12px;padding:11px;display:grid}.manual-command-preview code{text-align:center;color:#dff8ec;background:#203b35;border-radius:3px;padding:8px;font-family:Consolas,monospace;font-size:15px;font-weight:700}.manual-command-preview div{gap:3px;min-width:0;display:grid}.manual-command-preview span{color:#6d7b80;text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.manual-draft-waiting{color:#356473;background:#eaf4f7;border:1px dashed #8eb4c0;border-radius:4px;align-items:center;gap:8px;padding:10px;font-size:12px;font-weight:700;display:flex}.manual-draft-waiting button{color:#8b3d3d;background:0 0;border:0;margin-left:auto;padding:4px 7px;font-weight:700}.manual-send-button{background:#16845b;justify-content:center;width:100%}.manual-send-button:hover:not(:disabled){background:#116d4b}.manual-timeout-note{color:#7c898e;justify-content:center;align-items:center;gap:5px;font-size:11px;display:flex}.manual-command-history{border-left:1px solid #d5dfdc;min-width:0;padding-left:18px}.manual-command-history h3{margin-bottom:9px;font-size:14px}.manual-command-history>p{color:#879399;font-size:12px}.manual-history-row{border-top:1px solid #dde5e3;grid-template-columns:66px minmax(0,1fr) auto;align-items:center;gap:10px;padding:9px 0;display:grid}.manual-history-code{color:#38685a;align-items:center;gap:5px;font-family:Consolas,monospace;font-weight:700;display:flex}.manual-history-row>div:nth-child(2){gap:3px;min-width:0;display:grid}.manual-history-row span,.manual-history-row time{color:#7f8c91;text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.manual-history-row.status-failed strong,.manual-history-row.status-reconciliation_required strong{color:#b1473e}.manual-history-row.status-succeeded strong{color:#16734f}.manual-command-dialog{gap:14px;display:grid}.manual-ack-notice{color:#76500e;background:#fff5df;border-left:3px solid #d79a2d;align-items:center;gap:8px;padding:10px;font-size:12px;display:flex}@media (max-width:760px){.manual-command-header,.manual-command-body{flex-direction:column;grid-template-columns:1fr;align-items:stretch}.manual-controller-state{justify-content:center;align-self:stretch}.manual-slot-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.manual-command-history{border-top:1px solid #d5dfdc;border-left:0;padding-top:14px;padding-left:0}.manual-history-row{grid-template-columns:58px minmax(0,1fr)}.manual-history-row time{grid-column:2}}
