*{box-sizing:border-box}h1,h2,h3,h4,p{margin-top:0}a{color:inherit}:root{--background:#f8fafc;--foreground:#18181b;--card:#fff;--card-foreground:#18181b;--popover:#fff;--popover-foreground:#18181b;--primary:#2563eb;--primary-foreground:#fff;--secondary:#f4f4f5;--secondary-foreground:#27272a;--muted:#f4f4f5;--muted-foreground:#71717a;--accent:#f4f4f5;--accent-foreground:#18181b;--destructive:#dc2626;--destructive-foreground:#fff;--border:#e4e4e7;--input:#d4d4d8;--ring:#2563eb;--success:#16a34a;--warning:#ea580c;--info:#0284c7;--success-strong:#15803d;--success-deep:#166534;--success-soft:#f0fdf4;--success-faint:#16a34a1a;--success-badge:#dcfce7;--success-border:#bbf7d0;--danger-strong:#b91c1c;--danger-deep:#991b1b;--danger-soft:#fef2f2;--danger-faint:#dc26260f;--danger-hover:#fee2e2;--danger-overlay:#7f1d1d1f;--danger-border:#fecaca;--warning-strong:#92400e;--warning-soft:#fffbeb;--warning-badge:#fef3c7;--warning-border:#fde68a;--orange-strong:#c2410c;--orange-deep:#9a3412;--orange-soft:#fff7ed;--orange-border:#fed7aa;--info-strong:#0369a1;--info-soft:#f0f9ff;--info-border:#bae6fd;--primary-strong:#1d4ed8;--primary-soft:#eff6ff;--primary-border:#bfdbfe;--violet-strong:#6d28d9;--violet-soft:#f5f3ff;--violet-border:#ddd6fe;--violet-faint:#eef2ff;--pink-strong:#be185d;--pink-soft:#fdf2f8;--pink-border:#fbcfe8;--surface-subtle:#fafafa;--border-strong:#cbd5e1;--text-subtle:#52525b;--text-disabled:#a1a1aa;--radius:8px;--bg:var(--background);--card2:var(--surface-subtle);--accent2:#4338ca;--text:var(--foreground);--text2:var(--muted-foreground);--green:var(--success);--red:var(--destructive);--orange:var(--warning);--purple:#7c3aed;--glass:var(--muted)}html{background:var(--background);max-width:100%;min-height:100%;overflow-x:clip}body{background:var(--background);max-width:100%;min-height:100vh;color:var(--foreground);letter-spacing:0;margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:14px;overflow-x:clip}#root{max-width:100%;overflow-x:clip}button,input,select,textarea{font:inherit}button{border-radius:var(--radius);background:var(--primary);min-height:34px;color:var(--primary-foreground);cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:7px;padding:7px 12px;font-size:.84rem;font-weight:600;line-height:1.2;transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s;display:inline-flex}button:hover{background:var(--primary-strong)}button:disabled{cursor:not-allowed;opacity:.45}input,select,textarea{border:1px solid var(--input);border-radius:var(--radius);background:var(--card);width:100%;color:var(--foreground);outline:none;padding:8px 10px;font-size:.84rem;line-height:1.35;transition:border-color .15s,box-shadow .15s,background-color .15s}select{min-height:36px}textarea{resize:vertical;min-height:78px}input:focus,select:focus,textarea:focus{border-color:var(--ring);box-shadow:0 0 0 3px #2563eb1f}input::placeholder,textarea::placeholder{color:var(--text-disabled)}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}.app-shell{display:contents}.app-sidebar{z-index:40;border-right:1px solid var(--border);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#fffffff0;flex-direction:column;width:248px;display:flex;position:fixed;inset:0 auto 0 0}.app-brand{border-bottom:1px solid var(--border);align-items:center;gap:10px;min-height:64px;padding:14px 16px;display:flex}.app-brand-mark,.brand-mark{border:1px solid var(--primary-border);background:var(--primary-soft);width:34px;height:34px;color:var(--primary-strong);border-radius:9px;justify-content:center;align-items:center;font-weight:800;display:inline-flex}.app-brand-title{color:var(--foreground);font-size:.95rem;font-weight:700}.app-brand-subtitle{color:var(--muted-foreground);margin-top:1px;font-family:SF Mono,Consolas,ui-monospace,monospace;font-size:.72rem}.app-nav{gap:4px;padding:14px 10px;display:grid}.app-sidebar .nav-tab{width:100%;height:36px;color:var(--text-subtle);background:0 0;border-color:#0000;justify-content:flex-start;padding:0 10px;font-weight:600}.app-sidebar .nav-tab:hover{background:var(--muted);color:var(--foreground)}.app-sidebar .nav-tab.active{border-color:var(--primary-border);background:var(--primary-soft);color:var(--primary-strong)}.app-sidebar-footer{border-top:1px solid var(--border);gap:8px;margin-top:auto;padding:12px;display:grid}.app-topbar{z-index:30;border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#f8fafceb;justify-content:space-between;align-items:center;gap:16px;min-height:64px;margin-left:248px;padding:10px 24px;display:flex;position:sticky;top:0}.app-topbar-label{color:var(--muted-foreground);font-size:.72rem;font-weight:600}.app-topbar-title{color:var(--foreground);font-size:1.05rem;font-weight:700}.app-topbar-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.app-topbar>div:first-child,.app-topbar-actions,.app-nav,.container>*,.table-box,.table-wrapper{min-width:0}.global-search{width:min(360px,36vw);color:var(--muted-foreground);position:relative}.global-search>svg:first-child{z-index:1;position:absolute;top:10px;left:11px}.global-search input{background:var(--card);height:36px;padding-left:34px;padding-right:34px}.search-spinner{animation:.8s linear infinite search-spin;position:absolute;top:10px;right:11px}@keyframes search-spin{to{transform:rotate(360deg)}}.refresh-spinner{animation:.8s linear infinite search-spin}.search-results{z-index:80;border:1px solid var(--border);border-radius:var(--radius);background:var(--popover);width:min(440px,90vw);max-height:420px;padding:5px;position:absolute;top:calc(100% + 7px);right:0;overflow-y:auto;box-shadow:0 14px 32px #18181b24}.search-results button{width:100%;min-height:50px;color:var(--foreground);text-align:left;background:0 0;border:0;grid-template-columns:20px minmax(0,1fr) auto;display:grid}.search-results button:hover,.search-results button:focus-visible{background:var(--muted)}.search-results button span{gap:2px;min-width:0;display:grid}.search-results button strong,.search-results button small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.search-results button small{color:var(--muted-foreground);font-weight:400}.search-results button em{color:var(--muted-foreground);font-size:.72rem;font-style:normal}.search-state{color:var(--muted-foreground);text-align:center;padding:16px 12px}.search-state.error{color:var(--destructive)}.mobile-nav-label,.mobile-search-button,.mobile-search-layer,.mobile-menu-button,.mobile-drawer-backdrop{display:none}.helper-download-link{overflow-wrap:anywhere;justify-content:center;align-items:center;gap:7px;max-width:100%;text-decoration:none;display:inline-flex}.global-offline-banner{z-index:70;border-bottom:1px solid var(--warning-border);background:var(--warning-soft);color:var(--warning-strong);margin-left:248px;padding:10px 20px;font-size:.84rem;font-weight:600;position:sticky;top:0}.impact-confirmation{max-width:520px;padding:20px}.impact-confirmation-heading{color:var(--destructive);align-items:center;gap:10px;display:flex}.impact-confirmation-heading h2{margin:0;font-size:1.1rem}.impact-scope{gap:10px;margin:18px 0;display:grid}.impact-scope div{border:1px solid var(--border);background:var(--muted);border-radius:6px;grid-template-columns:88px 1fr;gap:12px;padding:12px;display:grid}.impact-scope dt{font-weight:700}.impact-scope dd{overflow-wrap:anywhere;margin:0}.impact-acknowledgement{align-items:flex-start;gap:8px;font-weight:600;display:flex}.impact-acknowledgement input{width:auto;margin-top:3px}.overview-page{gap:16px;display:grid}.page-heading-row{justify-content:space-between;align-items:center;gap:16px;display:flex}.page-heading-row h1{margin:0;font-size:1.35rem}.page-heading-row p{color:var(--muted-foreground);margin:4px 0 0}.inline-status{border:1px solid var(--orange-border);border-radius:var(--radius);background:var(--orange-soft);color:var(--orange-deep);align-items:center;gap:9px;padding:10px 12px;display:flex}.overview-stats{grid-template-columns:repeat(6,minmax(130px,1fr));gap:10px;display:grid}.metric-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);grid-template-columns:22px 1fr;align-items:center;gap:5px 8px;min-height:116px;padding:14px;display:grid}.metric-card>svg{color:var(--info);grid-row:1/3}.metric-card>span{color:var(--muted-foreground);font-size:.78rem}.metric-card>strong{overflow-wrap:anywhere;font-size:1.15rem}.metric-card>small{color:var(--muted-foreground);text-overflow:ellipsis;white-space:nowrap;grid-column:1/3;overflow:hidden}.metric-card.warning>svg{color:var(--warning)}.metric-card.ok>svg{color:var(--success)}.quick-actions{grid-template-columns:repeat(4,1fr);gap:10px;display:grid}.quick-actions button{border-color:var(--border);background:var(--card);color:var(--foreground);justify-content:flex-start}.quick-actions button:hover{border-color:var(--primary-border);background:var(--primary-soft)}.quick-actions button span{text-align:left;flex:1}.overview-columns{grid-template-columns:1fr 1fr;gap:14px;display:grid}.overview-section{border-top:1px solid var(--border);padding-top:14px}.section-heading{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.section-heading h2{margin:0;font-size:1rem}.section-heading span{color:var(--muted-foreground);font-size:.76rem}.text-button{min-height:28px;color:var(--primary);background:0 0;padding:4px 7px}.text-button:hover{background:var(--primary-soft)}.overview-list,.activity-timeline{display:grid}.overview-list button,.activity-timeline button{border:0;border-bottom:1px solid var(--border);width:100%;min-height:58px;color:var(--foreground);text-align:left;background:0 0;border-radius:0;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;display:grid}.overview-list button:hover,.activity-timeline button:hover{background:var(--muted)}.overview-list button span,.activity-timeline button span{gap:3px;min-width:0;display:grid}.overview-list small,.activity-timeline small{color:var(--muted-foreground);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overview-list time,.activity-timeline time{color:var(--muted-foreground);font-size:.7rem}.activity-dot{background:var(--info);border-radius:50%;width:9px;height:9px}.activity-dot.alert{background:var(--warning)}.activity-dot.backup{background:var(--success)}.activity-dot.rollout{background:var(--purple)}.compact-empty,.state-panel{border:1px dashed var(--border);border-radius:var(--radius);min-height:112px;color:var(--muted-foreground);justify-content:center;align-items:center;display:flex}.state-error{color:var(--destructive);gap:10px}.status-pill{border:1px solid var(--success-border);background:var(--success-soft);min-height:28px;color:var(--success-strong);border-radius:999px;align-items:center;gap:6px;padding:4px 9px;font-size:.76rem;font-weight:700;display:inline-flex}.status-pill.subtle{border-color:var(--border);background:var(--card);color:var(--muted-foreground)}.public-topbar{z-index:30;border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#ffffffeb;justify-content:space-between;align-items:center;gap:12px;min-height:60px;padding:0 18px;display:flex;position:sticky;top:0}.public-brand{align-items:center;gap:10px;display:flex}.brand-copy{color:var(--foreground);font-weight:700}.app-shell~.container,.app-shell~.mqtt-grid,.app-shell~.table-box,.app-shell~.filter-box,.app-shell~.sms-header{margin-left:248px}.container{width:min(100%,1480px);margin:0 auto;padding:20px 24px 28px}.app-shell~.container{width:auto;max-width:none;padding-top:20px}.header{margin-bottom:12px}.title{color:var(--foreground);font-size:1.25rem;font-weight:700}.subtitle{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);color:var(--muted-foreground);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;display:flex;box-shadow:0 1px 2px #00000008}.stat-item{color:var(--foreground);white-space:nowrap;align-items:center;gap:5px;font-size:.8rem;font-weight:650;display:inline-flex}.stat-success,.stat-danger,.stat-info{align-items:center;gap:4px;display:inline-flex}.stat-success,.status-text-success{color:var(--success)}.stat-danger,.status-text-danger{color:var(--destructive)}.stat-info{color:var(--info)}.stat-sep{color:var(--border)}.toolbar-card,.filter-box,.table-box,.table-wrapper,.sms-header,.sim-card-item,.robot-row,.device-chip-box,.mqtt-clients,.mqtt-filter-rule{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);box-shadow:0 1px 2px #00000008}.toolbar-card{flex-wrap:wrap;align-items:end;gap:10px;margin-bottom:16px;padding:14px;display:flex}.input-group,.filter-item,.form-group{flex-direction:column;gap:5px;display:flex}.input-group label,.filter-item label,.form-group label,.form-label{color:var(--muted-foreground);font-size:.72rem;font-weight:650}.inline-row{align-items:center;gap:8px;display:flex}.inline-row.wide{width:100%}.inline-row.wide input,.inline-row.wide select{flex:1}.scan-status{border:1px solid var(--primary-border);border-radius:var(--radius);background:var(--primary-soft);width:100%;color:var(--primary-strong);align-items:center;gap:8px;padding:8px 10px;font-size:.82rem;font-weight:600;display:inline-flex}.scan-status.helper-offline{border-color:var(--orange-border);background:var(--orange-soft);color:var(--orange-strong)}.table-wrapper,.table-box{overflow:auto hidden}.table-wrap{overscroll-behavior-x:contain;max-width:100%;overflow-x:auto}.table-search-bar,.table-section-head,.mqtt-clients-head{border-bottom:1px solid var(--border);background:var(--surface-subtle);justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;display:flex}.table-section-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.table-search-bar{justify-content:flex-start}.table-search-bar input{max-width:320px}.table-search-label{color:var(--muted-foreground)}table{border-collapse:collapse;width:100%;font-size:.82rem}thead th,th{border-bottom:1px solid var(--border);background:var(--surface-subtle);color:var(--muted-foreground);text-align:left;white-space:nowrap;padding:10px 12px;font-size:.72rem;font-weight:700}td{border-bottom:1px solid var(--border);color:var(--foreground);vertical-align:top;padding:10px 12px}tbody tr:last-child td{border-bottom:0}tbody tr:hover td{background:var(--surface-subtle)}tr.offline-row td{background:var(--danger-soft);color:var(--muted-foreground)}.ip-cell,.mono-cell{color:var(--primary-strong);font-family:SF Mono,Consolas,ui-monospace,monospace;font-size:.76rem}.mono-cell{text-overflow:ellipsis;white-space:nowrap;max-width:260px;overflow:hidden}.sim-badge,.status-badge,.slot-badge,.msg-type{border:1px solid var(--border);background:var(--muted);color:var(--secondary-foreground);border-radius:6px;align-items:center;padding:3px 7px;font-size:.72rem;font-weight:700;line-height:1.25;display:inline-flex}.sim-badge.registered,.status-badge.status-registered{border-color:var(--success-border);background:var(--success-soft);color:var(--success-strong)}.sim-badge.error{border-color:var(--danger-border);background:var(--danger-soft);color:var(--danger-strong)}.sim-number,.sim-note,.number-hint{text-overflow:ellipsis;white-space:nowrap;background:var(--muted);max-width:180px;color:var(--muted-foreground);border-radius:6px;align-items:center;padding:3px 7px;font-family:SF Mono,Consolas,ui-monospace,monospace;font-size:.72rem;display:inline-flex;overflow:hidden}.sim-note{background:var(--violet-soft);color:var(--violet-strong)}.action-group,.record-action-group,.button-group,.filter-actions,.pagination-btns,.sms-header-actions,.sms-send-inline{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.action-btn,.btn,.btn-outline,.btn-ghost,.btn-logout,.delete-btn,.page-btn,.primary-action,.config-tab{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);min-height:32px;color:var(--foreground);box-shadow:none;padding:6px 10px;font-size:.78rem;font-weight:650}.action-btn:hover,.btn-outline:hover,.btn-ghost:hover,.btn-logout:hover,.delete-btn:hover,.page-btn:hover,.config-tab:hover{border-color:var(--border-strong);background:var(--muted);color:var(--foreground);box-shadow:none}.btn-primary,.primary-action{border-color:var(--primary);background:var(--primary);color:var(--primary-foreground)}.btn-primary:hover,.primary-action:hover{background:var(--primary-strong);color:var(--primary-foreground)}.btn-sm{min-height:28px;padding:5px 9px;font-size:.78rem}.btn-danger,.delete-btn,.action-btn.delete{border-color:var(--danger-border);background:var(--danger-soft);color:var(--danger-strong)}.btn-danger:hover,.delete-btn:hover,.action-btn.delete:hover,.btn-outline.danger:hover{background:var(--danger-hover);color:var(--danger-deep)}.btn-outline.danger{border-color:var(--danger-border);color:var(--danger-strong)}.toast-viewport{z-index:140;flex-direction:column;gap:10px;width:min(360px,100vw - 32px);display:flex;position:fixed;bottom:24px;right:24px}.toast{border:1px solid var(--border);background:var(--card);color:var(--foreground);border-radius:8px;padding:10px 12px;font-size:.85rem;font-weight:650;line-height:1.45;box-shadow:0 18px 40px #0f172a1f}.toast-success{border-color:var(--success-border);background:var(--success-soft);color:var(--success-deep)}.toast-warning{border-color:var(--warning-border);background:var(--warning-soft);color:var(--warning-strong)}.toast-error{border-color:var(--danger-border);background:var(--danger-soft);color:var(--danger-deep)}.action-btn.refresh{border-color:var(--info-border);background:var(--info-soft);color:var(--info-strong)}.action-btn.config,.action-btn.admin{border-color:var(--primary-border);background:var(--primary-soft);color:var(--primary-strong)}.action-btn.sms,.success-text{border-color:var(--success-border);background:var(--success-soft);color:var(--success-strong)!important}.action-btn.sms-list,.action-btn.reboot,.action-btn.locate,.purple-text{border-color:var(--violet-border);background:var(--violet-soft);color:var(--violet-strong)!important}.danger-text{color:var(--destructive)!important}.muted{color:var(--muted-foreground);font-size:.84rem}.empty-state{color:var(--muted-foreground);text-align:center;padding:42px 16px}.empty-state.compact{padding:18px 10px}.sms-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;padding:14px;display:flex}.sms-header h1{color:var(--foreground);align-items:center;gap:8px;font-size:1.15rem;font-weight:750;display:inline-flex}.sms-send-panel{flex-direction:column;gap:6px;display:flex}.sms-device-select{min-width:260px;position:relative}.sms-device-select-trigger{border-color:var(--input);background:var(--card);width:100%;color:var(--foreground);justify-content:space-between}.sms-device-select-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.sms-device-select-caret{color:var(--muted-foreground);font-size:.72rem}.sms-device-select-menu{z-index:70;border:1px solid var(--border);border-radius:var(--radius);background:var(--popover);width:min(380px,100vw - 32px);max-height:330px;padding:5px;position:absolute;top:calc(100% + 6px);left:0;overflow:auto;box-shadow:0 16px 38px #0f172a29}.sms-device-option{width:100%;min-height:auto;color:var(--foreground);text-align:left;background:0 0;border:0;flex-direction:column;align-items:stretch;padding:8px 9px;display:flex}.sms-device-option:hover,.sms-device-option[aria-selected=true]{background:var(--muted)}.sms-device-option-main{font-weight:700}.sms-device-option-sims{color:var(--muted-foreground);gap:2px;margin-top:3px;font-family:SF Mono,Consolas,ui-monospace,monospace;font-size:.73rem;display:grid}.sms-tip{border:1px solid var(--orange-border);border-radius:var(--radius);background:var(--orange-soft);color:var(--orange-strong);margin-bottom:14px;padding:10px 12px;font-size:.84rem;line-height:1.55}.filter-box{margin-bottom:16px;padding:14px}.filter-grid{grid-template-columns:repeat(auto-fit,minmax(158px,1fr));align-items:end;gap:12px;display:grid}.content-cell{text-overflow:ellipsis;white-space:nowrap;max-width:260px;overflow:hidden}.mqtt-payload-cell{min-width:260px;max-width:520px}.mqtt-payload-text{max-height:none;color:var(--secondary-foreground);overflow-wrap:anywhere;white-space:pre-wrap;word-break:break-word;margin:0;font-family:SF Mono,Consolas,ui-monospace,monospace;font-size:.74rem;line-height:1.45;overflow:visible}.sms-content-full{overflow-wrap:anywhere;white-space:pre-wrap;word-break:break-word;max-width:640px;line-height:1.48;overflow:visible}.number-stack{justify-items:start;gap:5px;min-width:130px;display:grid}.record-warning{border:1px solid var(--warning-border);background:var(--warning-soft);max-width:220px;color:var(--warning-strong);border-radius:6px;padding:3px 7px;font-size:.68rem;font-weight:700;line-height:1.25;display:inline-flex}.pagination{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;display:flex}.pagination-info{color:var(--muted-foreground);font-size:.82rem}.page-btn.active{border-color:var(--primary);background:var(--primary);color:var(--primary-foreground)}.modal-mask{z-index:100;background:#18181b6b;justify-content:center;align-items:center;padding:18px;display:flex;position:fixed;inset:0}.modal-container{border:1px solid var(--border);background:var(--popover);width:100%;max-height:min(92vh,980px);color:var(--popover-foreground);border-radius:12px;overflow:auto;box-shadow:0 24px 70px #0f172a3d}.modal-dialog-content{z-index:101;max-width:calc(100vw - 36px);position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.route-loading{min-height:40vh;color:var(--muted-foreground);place-items:center;display:grid}.modal-header{z-index:2;border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff5;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;display:flex;position:sticky;top:0}.modal-header h3{color:var(--foreground);font-size:1rem;font-weight:750}.modal-close{border-color:var(--border);background:var(--card);width:32px;min-height:32px;color:var(--muted-foreground);padding:0;font-size:1.35rem}.modal-body{padding:16px}.config-tabs{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:6px;margin-bottom:16px;padding-bottom:8px;display:flex}.config-tab.active{border-color:var(--primary-border);background:var(--primary-soft);color:var(--primary-strong)}.tab-content{display:none}.tab-content.active{display:block}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.form-group{margin-bottom:12px}.sim-card-item,.robot-row{background:var(--surface-subtle);margin-bottom:14px;padding:14px}.sim-card-header,.batch-select-head,.mqtt-filter-rules-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.save-single-sim{border-color:var(--success-border);background:var(--success-soft);color:var(--success-strong)}.loading-text{color:var(--primary);text-align:center;padding:24px 14px;font-weight:700}.custom-header-row{gap:8px;margin-bottom:8px;display:flex}.device-chip-box{background:var(--surface-subtle);flex-wrap:wrap;gap:8px;max-height:140px;margin-bottom:16px;padding:10px;display:flex;overflow-y:auto}.device-chip{border:1px solid var(--border);background:var(--card);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:5px 9px;font-size:.82rem;display:inline-flex}.device-chip.selected{border-color:var(--primary-border);background:var(--primary-soft);color:var(--primary-strong)}.mqtt-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-bottom:16px;display:grid}.mqtt-log-grid{grid-template-columns:minmax(0,1fr)}.system-status-panel{padding:0}.system-metrics{background:var(--border);border-top:1px solid var(--border);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;display:grid}.system-metrics.compact{border:1px solid var(--border)}.system-metric{background:var(--card);flex-direction:column;gap:4px;min-width:0;padding:12px;display:flex}.system-metric span{color:var(--muted-foreground);font-size:.75rem;font-weight:700}.system-metric strong{color:var(--foreground);overflow-wrap:anywhere;font-size:.98rem}.system-metric.wide{grid-column:span 2}.mqtt-ops-panel,.mqtt-health-panel,.mqtt-phone-assets,.mqtt-recent-errors,.mqtt-ops-grid{margin-bottom:16px}.mqtt-ops-panel .table-section-head{margin-bottom:12px}.maintenance-actions{flex-wrap:wrap;gap:10px;margin-top:12px;display:flex}.scheduled-reboot-panel{margin-bottom:16px}.scheduled-reboot-panel>.table-section-head>div{gap:2px;display:grid}.scheduled-reboot-panel>.table-section-head span,.scheduled-reboot-settings label>span,.scheduled-reboot-next>span{color:var(--muted-foreground);font-size:.75rem}.scheduled-reboot-settings{grid-template-columns:minmax(150px,.8fr) minmax(180px,1fr) minmax(220px,1.3fr) auto;align-items:end;gap:12px;padding:14px 12px;display:grid}.scheduled-reboot-settings label,.scheduled-reboot-next{gap:6px;min-width:0;display:grid}.scheduled-reboot-settings input[type=number]{width:100%}.scheduled-reboot-toggle{grid-template-columns:18px 1fr;align-items:center;min-height:40px}.scheduled-reboot-toggle input{width:18px;height:18px}.scheduled-reboot-next strong{overflow-wrap:anywhere;align-items:center;min-height:40px;display:flex}.scheduled-reboot-history-head{border-top:1px solid var(--border)}.scheduled-reboot-detail-row>td{background:var(--surface-subtle);padding:0 12px 12px}.scheduled-reboot-detail-table{table-layout:fixed;background:var(--card)}@media (width<=900px){.scheduled-reboot-settings{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}@media (width<=560px){.scheduled-reboot-settings{grid-template-columns:minmax(0,1fr)}}.mqtt-ops-grid{grid-template-columns:minmax(0,1fr);gap:16px;display:grid}.mqtt-log-grid .table-box{overflow-x:visible}.mqtt-log-grid table{table-layout:fixed}.mqtt-config-hint{border:1px solid var(--primary-border);background:var(--primary-soft);color:var(--primary-strong);border-radius:8px;margin:12px 0 14px;padding:9px 11px}.secret-field{gap:6px;display:grid}.secret-saved{color:var(--muted-foreground);font-size:.74rem;font-weight:700}.mqtt-log-grid th,.mqtt-log-grid td,.mqtt-log-grid .mono-cell,.mqtt-log-grid .content-cell,.mqtt-log-grid .mqtt-payload-cell{overflow-wrap:anywhere;text-overflow:clip;white-space:normal;word-break:break-word;min-width:0;max-width:none;overflow:visible}.section-title{color:var(--foreground);margin-bottom:12px;font-size:.95rem;font-weight:750}.mqtt-status-row{color:var(--muted-foreground);flex-wrap:wrap;align-items:center;gap:9px;margin-bottom:12px;font-size:.82rem;display:flex}.status-dot{background:var(--destructive);border-radius:999px;width:9px;height:9px;display:inline-block;box-shadow:0 0 0 3px #dc26261f}.status-dot.online{background:var(--success);box-shadow:0 0 0 3px #16a34a1f}.mqtt-clients{margin-bottom:14px;overflow:hidden}.mqtt-client-table th,.mqtt-client-table td{padding:9px 10px;font-size:.76rem}.mqtt-client-table tbody tr{cursor:pointer}.mqtt-client-table tbody tr.selected-client-row td{background:var(--primary-soft)}.mqtt-sim-list{gap:5px;min-width:220px;display:grid}.mqtt-sim-line{white-space:nowrap;grid-template-columns:auto minmax(110px,1fr) auto auto;align-items:center;gap:8px;display:grid}.mqtt-filter-rules{border-top:1px solid var(--border);margin-top:14px;padding-top:14px}.mqtt-filter-rules-head{align-items:flex-start;margin-bottom:12px}.mqtt-filter-rules-head h4,.mqtt-config-writer h4{color:var(--foreground);margin:0 0 4px;font-size:.92rem;font-weight:750}.mqtt-filter-rules-head p{color:var(--muted-foreground);margin:0;font-size:.78rem;line-height:1.45}.mqtt-filter-rule-list{gap:10px;display:grid}.mqtt-filter-rule{background:var(--surface-subtle);box-shadow:none;grid-template-columns:minmax(160px,.75fr) minmax(180px,1fr) minmax(180px,1fr) auto;align-items:end;gap:10px;padding:12px;display:grid}.mqtt-config-writer{border-top:1px solid var(--border);margin-top:16px;padding-top:14px}.config-template-bar{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-subtle);gap:10px;margin:12px 0;padding:12px;display:grid}.template-notice{color:var(--muted-foreground);margin:-2px 0 0;font-size:.78rem}.template-history{flex-wrap:wrap;align-items:center}.template-history select{min-width:180px}.template-diff{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);max-height:120px;color:var(--foreground);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:10px;font-size:.78rem;overflow:auto}.rollout-center{margin-top:16px}.rollout-create{flex-wrap:wrap;align-items:center}.inline-row.wide.rollout-create>.rollout-primary{flex:180px;min-height:38px}.inline-row.wide.rollout-create>.rollout-name,.inline-row.wide.rollout-create>.rollout-template{min-width:180px}.inline-row.wide.rollout-create>.rollout-target{flex-basis:140px;min-width:140px}.rollout-create label{align-items:center;gap:6px;display:inline-flex}.rollout-create input[type=number]{width:72px}.rollout-preview{color:var(--muted-foreground);overflow-wrap:anywhere;margin:8px 0 0;font-size:.8rem}.rollout-list{gap:8px;margin-top:12px;display:grid}.rollout-row{border-top:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:10px 0;display:flex}.rollout-row small{color:var(--muted-foreground);margin-left:8px}.rollout-detail{border-top:1px solid var(--border);gap:8px;margin-top:12px;padding-top:12px;display:grid}.rollout-detail>span{color:var(--muted-foreground);font-size:.8rem}@media (width<=720px){.rollout-row{flex-direction:column;align-items:flex-start}}.command-evidence{overflow-wrap:anywhere;margin-top:.2rem;display:block}.notification-form{grid-template-columns:1fr 2fr 1fr auto auto;align-items:center;gap:10px;padding:14px;display:grid}.notification-secret-field{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;display:grid}.notification-secret-field .btn-outline{min-width:44px;padding-inline:10px}.notification-enabled{white-space:nowrap;cursor:pointer;align-items:center;gap:8px;min-height:44px;display:inline-flex}.notification-enabled input[type=checkbox]{flex:0 0 18px;width:18px;height:18px;min-height:0;margin:0}.notification-form-error{border:1px solid var(--danger-border);background:var(--danger-soft);color:var(--danger-strong);border-radius:6px;margin:0 14px;padding:10px 12px}.notification-form-actions{flex-wrap:nowrap}.notification-events{flex-wrap:wrap;gap:10px;display:flex}.notification-events label{white-space:nowrap;cursor:pointer;align-items:center;gap:7px;min-height:44px;display:inline-flex}.notification-events input[type=checkbox]{flex:0 0 18px;width:18px;height:18px;min-height:0;margin:0}.notification-attempt-head{margin-top:18px}@media (width<=900px){.notification-form{grid-template-columns:1fr}}.ownership-toolbar{flex-wrap:wrap;align-items:center;gap:10px;padding:14px;display:flex}.ownership-panel .device-chip small{background:var(--violet-faint);border-radius:999px;margin-left:4px;padding:2px 6px}.json-editor{font-family:SF Mono,Consolas,ui-monospace,monospace;font-size:.78rem;line-height:1.45}.full-width{width:100%}.mqtt-message-filters{border-bottom:1px solid var(--border);background:var(--card);padding:12px 14px}.mqtt-voice-box{margin-bottom:18px}.voice-file{flex-wrap:wrap;align-items:center;gap:8px;min-width:220px;display:flex}.voice-download-link{color:var(--primary);overflow-wrap:anywhere;align-items:center;gap:6px;font-weight:700;text-decoration:none;display:inline-flex}.voice-download-link:hover{text-decoration:underline}.voice-duration{border:1px solid var(--border);background:var(--muted);color:var(--muted-foreground);border-radius:6px;padding:2px 7px;font-family:SF Mono,Consolas,ui-monospace,monospace;font-size:.72rem;font-weight:700}.voice-player{min-width:260px;color:var(--primary);align-items:center;gap:8px;display:flex}.voice-player audio{width:min(360px,40vw);min-width:220px;height:34px}.type-sms,.type-短信{border-color:var(--primary-border);background:var(--primary-soft);color:var(--primary-strong)}.type-call,.type-来电{border-color:var(--pink-border);background:var(--pink-soft);color:var(--pink-strong)}.login-overlay{z-index:120;background:#18181b7a;justify-content:center;align-items:center;padding:18px;display:flex;position:fixed;inset:0}.login-card{border:1px solid var(--border);background:var(--card);text-align:center;border-radius:12px;width:min(100%,390px);padding:28px;box-shadow:0 22px 60px #0f172a38}.login-icon{color:var(--primary);margin-bottom:10px;font-size:2.4rem}.login-card h2{color:var(--foreground);margin:0;font-size:1.16rem;font-weight:750}.login-sub{color:var(--muted-foreground);margin:6px 0 18px;font-size:.84rem}.login-form{gap:10px;display:grid}.login-form input,.login-form button{width:100%}.login-error{min-height:20px;color:var(--destructive);font-size:.8rem}@media (width<=980px){.app-sidebar{width:100%;height:calc(68px + env(safe-area-inset-bottom,0px));padding-bottom:env(safe-area-inset-bottom,0px);border-right:0;border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:#fffffffa;position:fixed;inset:auto 0 0}.app-brand{display:none}.app-nav{grid-template-columns:repeat(5,minmax(0,1fr));gap:2px;height:100%;padding:6px 5px}.app-sidebar .nav-tab{white-space:nowrap;border:0;flex-direction:column;justify-content:center;gap:3px;height:55px;padding:3px;font-size:.7rem}.desktop-nav-label{display:none}.mobile-nav-label{display:inline}.app-sidebar-footer{display:none}.app-topbar{margin-left:0}.global-offline-banner{margin-left:0;padding-inline:14px}.app-topbar-actions .status-pill{display:none}.mobile-menu-button{background:var(--card);border-color:var(--border);width:36px;min-width:36px;color:var(--foreground);padding:0;display:inline-flex}.mobile-drawer-backdrop{z-index:90;background:#18181b61;display:block;position:fixed;inset:0}.mobile-drawer{background:var(--card);align-content:start;gap:12px;width:min(340px,88vw);height:100%;padding:16px;display:grid;position:absolute;top:0;right:0;box-shadow:-12px 0 32px #18181b2e}.mobile-drawer-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding-bottom:12px;display:flex}.mobile-drawer-head button{width:34px;min-width:34px;color:var(--foreground);background:0 0;padding:0}.app-shell~.container,.app-shell~.mqtt-grid,.app-shell~.table-box,.app-shell~.filter-box,.app-shell~.sms-header{margin-left:0}.container{padding:14px 14px calc(88px + env(safe-area-inset-bottom,0px))}.overview-stats{grid-template-columns:repeat(3,1fr)}.mqtt-grid,.grid-2{grid-template-columns:1fr}}@media (width<=768px){.public-topbar,.app-topbar{align-items:center;gap:8px;min-height:56px;padding:10px 12px}.app-topbar-actions{flex-wrap:nowrap;flex:none;justify-content:flex-end}.app-topbar-label{display:none}.app-topbar-title{white-space:nowrap;font-size:.92rem}.desktop-global-search{display:none}.mobile-search-button,.mobile-menu-button{border-color:var(--border);background:var(--card);width:44px;min-width:44px;min-height:44px;color:var(--foreground);padding:0;display:inline-flex}.mobile-search-layer{z-index:85;border-bottom:1px solid var(--border);background:var(--card);grid-template-columns:minmax(0,1fr) 44px;gap:8px;padding:10px 12px;display:grid;position:fixed;top:56px;left:0;right:0;box-shadow:0 12px 24px #18181b1f}.mobile-search-layer .global-search{width:100%}.mobile-search-layer .global-search input{height:44px}.mobile-search-layer .global-search>svg:first-child,.mobile-search-layer .search-spinner{top:14px}.mobile-search-layer .search-results{width:100%;max-height:min(420px,100dvh - 130px);left:0;right:auto}.mobile-search-close{background:var(--muted);width:44px;min-width:44px;min-height:44px;color:var(--foreground);padding:0}.overview-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.overview-columns,.quick-actions{grid-template-columns:1fr}.page-heading-row{align-items:flex-start}.toolbar-card,.sms-header{flex-direction:column;align-items:stretch}.toolbar-card .input-group,.toolbar-card button,.sms-header-actions,.sms-send-panel,.sms-send-inline,.sms-device-select{width:100%}button,input:not([type=checkbox]):not([type=radio]),select,textarea,.btn,.btn-outline,.btn-ghost,.btn-logout,.action-btn,.page-btn{min-height:44px}.inline-row{flex-wrap:wrap;align-items:stretch}.inline-row>input,.inline-row>select,.inline-row>textarea{flex:180px;min-width:min(100%,180px)}.table-section-head{align-items:flex-start}.table-section-actions{min-width:0}.mobile-card-table{box-shadow:none;background:0 0;border:0;overflow:visible}.mobile-card-table thead{display:none}.mobile-card-table table,.mobile-card-table tbody,.mobile-card-table tr,.mobile-card-table td{width:100%;display:block}.table-wrapper:not(.mobile-card-table),.table-box:not(.mobile-card-table),.table-wrap,.mqtt-log-grid .table-box{overscroll-behavior-x:contain;scrollbar-gutter:stable;max-width:100%;overflow-x:auto}.table-wrapper:not(.mobile-card-table) table,.table-box:not(.mobile-card-table) table,.table-wrap table{min-width:640px}.mqtt-log-grid table{table-layout:auto}.device-row,.sms-row{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);margin-bottom:10px;overflow:hidden;box-shadow:0 1px 2px #00000008}.device-row td,.sms-row td{border-bottom:1px solid var(--border);text-align:right;justify-content:space-between;align-items:flex-start;gap:12px;padding:9px 11px;display:flex}.device-row td:before,.sms-row td:before{content:attr(data-label);color:var(--muted-foreground);text-align:left;flex:none;font-size:.7rem;font-weight:700}.device-row td:last-child,.sms-row td:last-child{border-bottom:0}.action-group,.record-action-group{justify-content:flex-end}.content-cell,.mono-cell,.sms-content-full{white-space:normal;overflow-wrap:anywhere;max-width:none}.number-stack{justify-items:end}.mqtt-filter-rules-head,.batch-select-head,.sim-card-header{flex-direction:column;align-items:stretch}.mqtt-filter-rule{grid-template-columns:1fr}.overview-list button,.activity-timeline button{grid-template-columns:20px minmax(0,1fr);min-width:0}.overview-list button span,.activity-timeline button span,.overview-list strong,.activity-timeline strong,.overview-list small,.activity-timeline small{overflow-wrap:anywhere;text-overflow:clip;white-space:normal;min-width:0;overflow:visible}.overview-list time,.activity-timeline time{grid-column:2}.lifecycle-toolbar{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));align-items:stretch;display:grid}.lifecycle-toolbar>*,.lifecycle-center .inline-row>*,.alert-center .inline-row>*,.observability-center .inline-row>*{min-width:0;min-height:44px}.lifecycle-center .inline-row{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));align-items:stretch;display:grid}.lifecycle-center .inline-row>*,.lifecycle-toolbar>*{width:100%}.rule-list{grid-template-columns:1fr;display:grid}.rule-list span{overflow-wrap:anywhere;min-width:0}.drift-row{grid-template-columns:1fr}.drift-row code{max-width:100%}}@media (width<=480px){.public-topbar{gap:8px}.brand-copy{font-size:.82rem}.sms-header h1{font-size:1rem}.section-heading,.page-heading-row,.table-section-head,.mqtt-clients-head{flex-direction:column;align-items:stretch}.table-section-actions,.maintenance-actions,.recovery-actions,.table-actions,.filter-actions,.sms-header-actions{grid-template-columns:1fr;width:100%;display:grid}.table-section-actions>*,.maintenance-actions>*,.recovery-actions>*,.table-actions>*,.filter-actions>*,.sms-header-actions>*{width:100%;min-width:0}.lifecycle-toolbar,.lifecycle-center .inline-row,.alert-center .inline-row,.observability-center .inline-row{grid-template-columns:1fr;display:grid}.notification-events label{white-space:normal}}.recovery-center{position:relative}.recovery-actions,.table-actions,.pagination-row,.modal-actions{flex-wrap:wrap;align-items:center;gap:.65rem;display:flex}.recovery-validation,.recovery-job{background:var(--success-faint);border-radius:.5rem;margin:.75rem 0;padding:.65rem .8rem}.recovery-confirm{border:1px solid var(--danger-border);background:var(--danger-overlay);border-radius:.75rem;margin-top:1rem;padding:1rem}.recovery-confirm ul{margin:.75rem 0;padding-left:1.4rem}.recovery-confirm label{align-items:center;gap:.55rem;margin-bottom:.9rem;display:flex}.status-ok{color:var(--success)}.status-warning,.error-text{color:var(--destructive)}.empty-cell{text-align:center;opacity:.7}.observability-components{grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px;margin:10px 0;display:grid}.observability-components>div{border:1px solid var(--border);border-radius:8px;justify-content:space-between;padding:8px 10px;display:flex}.metric-bars{gap:5px;min-height:42px;margin-top:10px;display:grid}.metric-bar-row{grid-template-columns:48px minmax(4px,1fr) 56px;align-items:center;gap:8px;display:grid}.metric-bar{background:var(--primary);border-radius:5px;max-width:100%;height:9px;display:block}.notification-coverage-warning{border:1px solid var(--warning-border);background:var(--warning-soft);color:var(--warning-strong);border-radius:8px;margin:.75rem 0;padding:.75rem .9rem}.lifecycle-center{margin-top:14px}.lifecycle-toolbar,.lifecycle-grid,.rule-list{flex-wrap:wrap;gap:10px;margin-top:10px;display:flex}.lifecycle-grid>div{border:1px solid var(--border);border-radius:10px;flex:420px;min-width:0;padding:12px}.lifecycle-confirm{border:1px solid var(--danger-border);background:var(--danger-faint);border-radius:10px;margin-top:12px;padding:12px}.lifecycle-confirm label{align-items:center;gap:7px;margin:10px 0;display:flex}.lifecycle-confirm ul{margin:8px 0;padding-left:22px}.lifecycle-badge{background:var(--success-badge);color:var(--success-deep);border-radius:999px;margin-left:6px;padding:2px 7px;font-size:11px;display:inline-block}.lifecycle-badge.disabled{background:var(--warning-badge);color:var(--warning-strong)}.lifecycle-badge.retired{background:var(--danger-hover);color:var(--danger-deep)}.action-btn:disabled{opacity:.4;cursor:not-allowed}.rule-list span{border:1px solid var(--border);border-radius:7px;padding:5px 8px}.automatic-tag{color:var(--primary)}.drift-row{background:var(--success-faint);border-radius:7px;grid-template-columns:120px 80px 80px minmax(0,1fr);gap:8px;margin-top:8px;padding:8px;display:grid}.drift-row.drifted{background:var(--danger-faint)}.drift-row code{white-space:nowrap;overflow:auto}
