:root{--bg-primary: #1a1a1a;--bg-secondary: #121212;--bg-elevated: #242424;--text-primary: #f5f5f5;--text-secondary: #a3a3a3;--text-muted: #737373;--accent: #f78a1f;--accent-light: #2d2010;--accent-hover: #ff9a33;--accent-gradient: linear-gradient(135deg, #f36c21 0%, #f79a1f 55%, #ffd633 100%);--success: #22c55e;--success-light: #0f2a1a;--error: #ef4444;--error-light: #2a1212;--warning: #f4b400;--warning-light: #2a2510;--info: #3b82f6;--border: #333333;--border-light: #2a2a2a;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--shadow-lg: 0 12px 32px rgba(0, 0, 0, .5);--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-xl: 20px;--bg-header: var(--bg-secondary);--bg-log: var(--bg-secondary);--bg-command: var(--bg-primary);--text-dim: var(--text-secondary);--sent-color: var(--info);--input-bg: var(--bg-primary)}*{margin:0;padding:0;box-sizing:border-box}html,body,#root,.qac-container{height:100%;display:flex;flex-direction:column;font-family:Inter,Segoe UI,system-ui,-apple-system,sans-serif;background:var(--bg-secondary);color:var(--text-primary);overflow-x:hidden;overflow-y:auto;-webkit-font-smoothing:antialiased}body{background:radial-gradient(circle at top left,rgba(247,138,31,.08),transparent 26%),radial-gradient(circle at top right,rgba(255,214,51,.06),transparent 22%),linear-gradient(180deg,#0d0d0d,#121212 42%,#1a1a1a)}.login-page{display:flex;align-items:flex-start;justify-content:center;min-height:100vh;padding:32px 24px;overflow-y:auto;overflow-x:hidden;background:radial-gradient(circle at top left,rgba(247,138,31,.12),transparent 28%),radial-gradient(circle at bottom right,rgba(255,214,51,.08),transparent 22%),linear-gradient(180deg,#0a0a0a,#121212 54%,#1a1a1a)}.login-card{width:min(420px,100%);display:flex;flex-direction:column;gap:28px;padding:40px 36px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:0 24px 60px #0006,0 1px #ffffff0d inset}.login-brand{display:flex;flex-direction:column;gap:12px;text-align:center}.login-kicker{font-size:12px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--accent)}.login-title{font-size:28px;line-height:1.2;font-weight:700;color:var(--text-primary)}.login-copy{font-size:14px;line-height:1.6;color:var(--text-secondary)}.login-form{display:flex;flex-direction:column;gap:16px}.login-mode-switch{display:grid;grid-template-columns:repeat(2,1fr);gap:4px;padding:4px;background:linear-gradient(180deg,#1f1f1f,#242424);border-radius:var(--radius-md)}.login-mode-btn{padding:12px 16px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-secondary);font-size:14px;font-weight:600;cursor:pointer;transition:all .2s ease}.login-mode-btn--active{background:var(--bg-elevated);color:var(--accent);box-shadow:0 8px 20px #0000004d}.login-label{font-size:13px;font-weight:600;color:var(--text-primary);margin-bottom:4px}.login-input{width:100%;padding:14px 16px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-primary);font-size:15px;outline:none;transition:all .2s ease}.login-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px #f78a1f40}.login-helper{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--text-secondary)}.login-rules{display:flex;flex-direction:column;gap:10px;padding:16px;border-radius:var(--radius-md);background:var(--bg-secondary)}.login-rules-title{font-size:12px;font-weight:600;color:var(--text-secondary);margin-bottom:4px}.login-rule{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--text-secondary)}.login-rule--passed{color:var(--success)}.login-rule-dot{width:8px;height:8px;flex:0 0 auto;border-radius:50%;background:var(--border);transition:all .2s ease}.login-rule--passed .login-rule-dot{background:var(--success)}.login-error{padding:12px 16px;border-radius:var(--radius-md);background:var(--error-light);color:var(--error);font-size:14px;line-height:1.5}.login-submit{margin-top:8px;padding:16px 20px;background:var(--accent-gradient);color:#fff;border:none;border-radius:var(--radius-md);font-size:15px;font-weight:600;cursor:pointer;transition:all .2s ease}.login-submit:hover{transform:translateY(-1px);box-shadow:0 18px 30px #0006}.login-examples{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.login-example-chip{padding:8px 12px;border-radius:999px;background:var(--accent-light);color:var(--accent);font-size:13px;font-weight:500}.header{display:flex;justify-content:space-between;align-items:center;padding:10px 20px;background:var(--bg-primary);border-bottom:1px solid var(--border);min-height:64px;height:auto;flex-shrink:0;gap:12px;flex-wrap:nowrap}.header-left{display:flex;gap:12px;align-items:center;min-width:0;flex:1 1 320px;flex-wrap:nowrap}.header-left label{font-size:14px;font-weight:500;color:var(--text-secondary)}.app-version{font-size:15px;font-weight:600;color:var(--text-primary);background:var(--warning-light);padding:4px 10px;border-radius:var(--radius-sm)}.node-id-input{width:280px;flex:1 1 220px;min-width:180px;padding:10px 14px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:14px;outline:none;transition:all .2s ease}.node-id-input:focus{border-color:var(--accent);background:var(--bg-primary);box-shadow:0 0 0 3px #f78a1f40}.node-id-input:disabled{opacity:.6;cursor:not-allowed}.connect-btn{padding:10px 24px;background:var(--accent-gradient);color:#fff;border:none;border-radius:var(--radius-sm);font-size:14px;font-weight:600;cursor:pointer;transition:all .2s ease}.connect-btn:hover{box-shadow:0 10px 18px #0000004d}.connect-btn:disabled{opacity:.5;cursor:not-allowed}.connect-btn.connected{background:var(--error)}.connect-btn.connected:hover{background:#dc2626}.header-right{display:flex;align-items:center;gap:12px;flex:1 1 560px;justify-content:flex-end;flex-wrap:nowrap}.header-user{display:flex;flex-direction:column;gap:2px;padding:8px 14px;background:var(--bg-elevated);border-radius:var(--radius-sm)}.header-user-name{font-size:16px;font-weight:600;color:var(--text-primary)}.header-user-email{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px;color:var(--text-secondary)}.signal-icon{position:relative;display:flex;align-items:flex-end;flex-shrink:0;cursor:default;padding:4px}.signal-bars{display:flex;align-items:flex-end;gap:2px}.signal-bar{width:4px;border-radius:2px;transition:all .3s ease}.signal-icon--good .signal-bar{background:var(--success)}.signal-icon--fair .signal-bar{background:var(--warning)}.signal-icon--poor .signal-bar{background:var(--error)}.signal-icon--unknown .signal-bar{background:var(--text-muted);opacity:.5}.signal-icon--disconnected .signal-bar{background:var(--text-muted);opacity:.35}.signal-icon--connecting .signal-bar{background:var(--warning)}.signal-bar--animating{animation:signal-pulse 1.2s ease-in-out infinite}.signal-bar--inactive{opacity:.2}.signal-bar--stale{opacity:.5}@keyframes signal-pulse{0%,to{opacity:.25}50%{opacity:1}}.signal-cross{position:absolute;top:0;right:0;font-size:12px;font-weight:700;color:var(--error)}.header-wifi-meta{display:flex;align-items:center;gap:8px;padding:8px 14px;background:var(--bg-secondary);border-radius:var(--radius-sm);font-size:15px;min-width:0;flex:0 0 auto;white-space:nowrap}.header-wifi-meta-label{color:var(--text-secondary);font-weight:500;white-space:nowrap}.header-wifi-meta-value{color:var(--text-primary);font-weight:600;font-family:SF Mono,Consolas,monospace;white-space:nowrap}.header-wifi-meta-quality{font-weight:600;white-space:nowrap}.header-wifi-meta--good .header-wifi-meta-quality{color:var(--success)}.header-wifi-meta--fair .header-wifi-meta-quality{color:var(--warning)}.header-wifi-meta--poor .header-wifi-meta-quality{color:var(--error)}.header-wifi-meta--admin .header-wifi-meta-quality{color:var(--warning)}.header-wifi-meta--neutral .header-wifi-meta-quality{color:var(--text-secondary)}.header-wifi-reload-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-primary);color:var(--text-secondary);font-size:14px;cursor:pointer;transition:all .2s ease}.header-wifi-reload-btn:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.header-wifi-reload-btn:disabled{cursor:not-allowed;opacity:.5}.serial-number{font-size:15px;font-weight:600;color:var(--accent);background:var(--accent-light);padding:6px 12px;border-radius:var(--radius-sm)}.menu-btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px;background:none;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:18px;cursor:pointer;transition:all .2s ease}.menu-btn:hover{color:var(--text-primary);background:var(--bg-secondary)}.header-action-btn{padding:8px 16px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.header-action-btn:hover:not(:disabled){background:var(--accent);color:#fff;border-color:var(--accent)}.header-action-btn--warning:hover:not(:disabled){background:var(--warning);border-color:var(--warning)}.header-action-btn--logout:hover:not(:disabled){background:var(--error);border-color:var(--error)}.header-action-btn:disabled{opacity:.4;cursor:not-allowed}.sidebar-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:90;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.sidebar{position:fixed;top:0;left:0;width:280px;height:100%;background:var(--bg-primary);border-right:1px solid var(--border);z-index:100;transform:translate(-100%);transition:transform .3s ease;display:flex;flex-direction:column;box-shadow:var(--shadow-lg)}.sidebar.open{transform:translate(0)}.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:20px;border-bottom:1px solid var(--border)}.sidebar-title{font-size:16px;font-weight:600;color:var(--text-primary)}.sidebar-close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:none;border:none;color:var(--text-secondary);font-size:20px;cursor:pointer;border-radius:var(--radius-sm);transition:all .2s ease}.sidebar-close:hover{color:var(--text-primary);background:var(--bg-secondary)}.sidebar-menu{list-style:none;padding:12px 0;flex:1}.sidebar-item{display:flex;align-items:center;gap:14px;width:100%;padding:14px 24px;background:none;border:none;color:var(--text-secondary);font-size:14px;font-weight:500;cursor:pointer;text-align:left;transition:all .2s ease}.sidebar-item:hover{background:var(--bg-secondary);color:var(--text-primary)}.sidebar-item.active{color:var(--accent);background:var(--accent-light);border-left:3px solid var(--accent);padding-left:21px}.sidebar-icon{font-size:16px;width:20px;text-align:center;flex-shrink:0}.main-content{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;background:var(--bg-secondary);min-width:0;overflow-y:auto;overflow-x:hidden}.machine-control-placeholder{flex:1;display:flex;align-items:center;justify-content:center;background:var(--bg-secondary)}.placeholder-content{text-align:center;color:var(--text-secondary);padding:40px}.placeholder-icon{font-size:56px;display:block;margin-bottom:16px;opacity:.3}.placeholder-content h2{font-size:20px;font-weight:600;color:var(--text-primary);margin-bottom:8px}.placeholder-content p{font-size:15px;color:var(--text-secondary)}.mc-layout{flex:1;display:flex;min-height:0;background:var(--bg-primary);min-width:0}.mc-controls{flex:0 0 55%;display:flex;flex-direction:column;gap:0;overflow-y:auto;border-right:1px solid var(--border);scrollbar-width:thin;scrollbar-color:var(--border) transparent;min-width:0}.mc-controls::-webkit-scrollbar{width:6px}.mc-controls::-webkit-scrollbar-track{background:transparent}.mc-controls::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.mc-logs{flex:0 0 45%;display:flex;flex-direction:column;min-height:0;background:var(--bg-primary);min-width:0}.mc-logs .log-panel{flex:1;border-bottom:none}.mc-quick-cmd{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--border);background:var(--bg-secondary)}.mc-quick-cmd-input{flex:1;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 14px;font-size:13px;font-family:SF Mono,Consolas,monospace;color:var(--text-primary);outline:none;transition:all .2s ease}.mc-quick-cmd-input:focus{border-color:var(--accent)}.mc-quick-cmd-input::placeholder{color:var(--text-muted)}.mc-section{border-bottom:1px solid var(--border);padding:4px 0}.mc-section-header{padding:14px 20px 8px;font-size:12px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.05em}.mc-section-buttons{display:flex;flex-wrap:wrap;gap:10px;padding:8px 20px 16px}.mc-vt-inline{display:flex;align-items:center;gap:10px}.mc-vt-input{width:100px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 8px;font-size:14px;font-weight:500;font-family:SF Mono,Consolas,monospace;color:var(--text-primary);text-align:center;outline:none;transition:all .2s ease}.mc-vt-input:focus{border-color:var(--accent);background:var(--bg-primary)}.mc-vt-input::placeholder{color:var(--text-muted)}.mc-btn{padding:10px 20px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.mc-btn:hover:not(:disabled){background:var(--accent);color:#fff;border-color:var(--accent)}.mc-btn:active:not(:disabled){transform:scale(.98)}.mc-btn:disabled{opacity:.4;cursor:not-allowed}.mc-btn--warning:hover:not(:disabled){background:var(--warning);border-color:var(--warning)}.mc-actions{display:flex;flex-wrap:wrap;gap:12px;padding:16px 20px;margin-top:auto;position:sticky;bottom:0;background:var(--bg-primary);border-top:1px solid var(--border);z-index:10}.mc-actions .mc-btn{flex:1;min-width:120px;padding:12px 16px;white-space:nowrap}.mc-dispense-wrapper{display:flex;gap:16px;padding:8px 20px 18px;align-items:stretch}.mc-dispense-list{display:flex;flex-direction:column;gap:10px;flex:1}.mc-dispense-row{display:flex;align-items:center;gap:12px}.mc-dispense-label{font-size:14px;font-weight:600;color:var(--text-primary);width:60px;flex-shrink:0}.mc-dispense-display,.mc-dispense-input{width:80px;flex-shrink:0;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 8px;font-size:14px;font-weight:600;font-family:SF Mono,Consolas,monospace;color:var(--text-primary);text-align:center}.mc-dispense-input{outline:none;font-weight:500;transition:all .2s ease}.mc-dispense-input:focus{border-color:var(--accent);background:var(--bg-primary)}.mc-dispense-input::placeholder{color:var(--text-muted)}.mc-lc-section{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-width:120px;flex-shrink:0}.mc-lc-display{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 16px;font-size:15px;font-weight:600;font-family:SF Mono,Consolas,monospace;color:var(--text-primary);text-align:center;width:100%}.mc-heater-actions{display:flex;gap:10px;padding:10px 20px;align-items:stretch}.mc-heater-actions .mc-btn{flex:1;min-width:0}.mc-heater-check-card{min-width:100px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-primary);color:var(--warning);font-size:13px;font-weight:600;padding:10px 12px}.mc-heater-check-card--pass{color:var(--success);background:var(--success-light);border-color:var(--success)}.mc-heater-check-card--fail{color:var(--error);background:var(--error-light);border-color:var(--error)}.mc-heater-row{display:flex;align-items:center;gap:10px;padding:0 20px 16px}.mc-heater-display{flex:1;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 10px;display:flex;flex-direction:column;align-items:center;gap:4px}.mc-heater-label{font-size:11px;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em}.mc-heater-value{font-size:15px;font-weight:600;font-family:SF Mono,Consolas,monospace;color:var(--text-primary)}.mc-heater-input-row{padding:0 20px 16px}.mc-heater-control-card{width:100%;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:14px}.mc-heater-input-wrap{display:flex;flex-direction:column;gap:6px;padding:0 10px 0 0}.mc-heater-input-wrap:not(:last-child){border-right:1px solid var(--border)}.mc-heater-input-label{font-size:11px;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em}.mc-heater-input{width:100%;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 12px;font-size:14px;color:var(--text-primary);outline:none;transition:all .2s ease}.mc-heater-input:focus{border-color:var(--accent)}.mc-heater-input-actions{display:flex;align-items:center;gap:8px}.mc-heater-input-actions .mc-heater-input{flex:1}.log-panel{flex:3;display:flex;flex-direction:column;min-height:0;border-bottom:1px solid var(--border)}.log-toolbar{display:flex;align-items:center;padding:10px 16px;background:var(--bg-primary);border-bottom:1px solid var(--border);gap:14px;flex-shrink:0}.log-toolbar span{font-size:13px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em}.log-toolbar button{background:none;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);padding:6px 12px;cursor:pointer;font-size:13px;transition:all .2s ease}.log-toolbar button:hover{color:var(--accent);border-color:var(--accent)}.log-toolbar label{color:var(--text-secondary);font-size:13px;display:flex;align-items:center;gap:6px;margin-left:auto;cursor:pointer}.log-toolbar input[type=checkbox]{accent-color:var(--accent);width:16px;height:16px}.log-output{flex:1;overflow-y:auto;padding:12px 16px;background:var(--bg-secondary);font-family:SF Mono,Consolas,Courier New,monospace;font-size:25px;line-height:1.8}.log-output::-webkit-scrollbar{width:8px}.log-output::-webkit-scrollbar-track{background:transparent}.log-output::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}.log-output::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.log-entry{padding:2px 0;font-size:23px;line-height:1.7;white-space:pre-wrap;word-break:break-word}.log-entry.sent{color:#7cc3ff}.log-entry--command{margin:6px 0;padding:10px 12px;background:#16202df5;border:1px solid rgba(124,195,255,.22);border-left:3px solid #7cc3ff;border-radius:var(--radius-sm);color:#7cc3ff;font-family:SF Mono,Consolas,monospace;font-size:15px;line-height:1.6;box-shadow:0 8px 20px #0000002e}.log-entry.response{color:var(--text-primary)}.log-entry.error{color:var(--error)}.log-entry.system{color:var(--text-secondary);font-style:italic}.log-topic{color:var(--accent);margin-right:10px;font-size:20px;font-weight:600}.command-panel{flex:1;display:flex;gap:12px;padding:16px;background:var(--bg-primary);min-height:80px;border-top:1px solid var(--border)}.command-input{flex:1;resize:none;padding:12px 16px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-primary);font-family:SF Mono,Consolas,Courier New,monospace;font-size:14px;line-height:1.5;outline:none;transition:all .2s ease}.command-input:focus{border-color:var(--accent);background:var(--bg-primary);box-shadow:0 0 0 3px #f78a1f40}.command-input::placeholder{color:var(--text-muted)}.send-btn{padding:12px 32px;background:var(--accent-gradient);color:#fff;border:none;border-radius:var(--radius-md);font-size:14px;font-weight:600;cursor:pointer;align-self:flex-end;transition:all .2s ease}.send-btn:hover{box-shadow:0 10px 18px #0000004d}.send-btn:disabled{opacity:.4;cursor:not-allowed}.roti-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:200;display:flex;align-items:center;justify-content:center;animation:fadeIn .2s ease;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.roti-modal{background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:32px 28px 24px;max-width:400px;width:90%;text-align:center;animation:slideUp .3s ease;box-shadow:var(--shadow-lg)}.roti-modal-icon-wrap{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 16px}.roti-modal--error .roti-modal-icon-wrap{background:var(--error-light)}.roti-modal--success .roti-modal-icon-wrap{background:var(--success-light)}.roti-modal-icon{font-size:28px}.roti-modal--error .roti-modal-icon{color:var(--error)}.roti-modal--success .roti-modal-icon{color:var(--success)}.roti-modal-title{font-size:18px;font-weight:600;margin-bottom:12px;color:var(--text-primary)}.roti-modal--error .roti-modal-title{color:var(--error)}.roti-modal--success .roti-modal-title{color:var(--success)}.roti-modal-msg{font-size:14px;font-family:SF Mono,Consolas,monospace;color:var(--text-secondary);line-height:1.6;word-break:break-word;margin-bottom:24px;max-height:120px;overflow-y:auto}.roti-modal-btn{padding:12px 40px;border:none;border-radius:var(--radius-sm);font-size:14px;font-weight:600;cursor:pointer;transition:all .2s ease}.roti-modal-btn:active{transform:scale(.98)}.roti-modal--error .roti-modal-btn{background:var(--error);color:var(--text-primary)}.roti-modal--error .roti-modal-btn:hover{background:#dc2626}.roti-modal--success .roti-modal-btn{background:var(--success);color:var(--text-primary)}.roti-modal--success .roti-modal-btn:hover{background:#16a34a}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.roti-controls{flex:0 0 55%;padding:0;background:var(--bg-primary)}.roti-section{padding:16px 20px;border-bottom:1px solid var(--border)}.roti-row{display:flex;align-items:stretch;gap:16px}.roti-input-group{flex:1;min-width:180px}.roti-label{display:block;font-size:12px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.05em;margin-bottom:10px}.roti-input-row{display:flex;gap:8px;align-items:center}.roti-select{flex:1;padding:10px 32px 10px 14px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:14px;outline:none;cursor:pointer;transition:all .2s ease;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}.roti-select:focus{border-color:var(--accent)}.roti-select:disabled{opacity:.4;cursor:not-allowed}.roti-select option{background:var(--bg-elevated);color:var(--text-primary)}.roti-number-input{width:80px;padding:10px 12px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:14px;text-align:center;outline:none;transition:all .2s ease;-webkit-appearance:textfield;appearance:textfield;-moz-appearance:textfield}.roti-number-input::-webkit-inner-spin-button,.roti-number-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.roti-number-input:focus{border-color:var(--accent)}.roti-number-input:disabled{opacity:.4;cursor:not-allowed}.roti-btn{padding:10px 18px;border:1px solid var(--border);border-radius:var(--radius-sm);font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;white-space:nowrap}.roti-btn:disabled{opacity:.4;cursor:not-allowed}.roti-btn--primary{background:var(--accent);color:var(--bg-primary);border-color:var(--accent)}.roti-btn--primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.roti-btn--secondary{background:var(--bg-primary);color:var(--text-primary)}.roti-btn--secondary:hover:not(:disabled){background:var(--accent);color:var(--bg-primary);border-color:var(--accent)}.roti-btn--adjust{background:var(--bg-primary);color:var(--text-primary);width:40px;padding:10px 0;text-align:center;font-size:18px;font-weight:600}.roti-btn--adjust:hover:not(:disabled){background:var(--warning);color:var(--bg-primary);border-color:var(--warning)}.roti-btn--small{padding:6px 14px;font-size:12px;background:var(--bg-primary);color:var(--text-secondary)}.roti-btn--small:hover:not(:disabled){color:var(--text-primary);border-color:var(--text-primary)}.roti-btn--action{flex:1;padding:14px 20px;background:var(--bg-primary);color:var(--text-primary);font-size:14px}.roti-btn--action:hover:not(:disabled){background:var(--accent);color:var(--bg-primary);border-color:var(--accent)}.roti-btn--warning:hover:not(:disabled){background:var(--warning);border-color:var(--warning)}.roti-display{min-width:120px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px}.roti-display--wide{min-width:200px;gap:10px}.roti-display-label{font-size:11px;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em}.roti-display-value{font-size:16px;font-weight:600;color:var(--text-primary);font-family:SF Mono,Consolas,monospace}.roti-display-value--dim{color:var(--text-secondary)}.roti-wf-values{display:flex;align-items:center;gap:14px;width:100%;justify-content:center}.roti-wf-item{display:flex;flex-direction:column;align-items:center;gap:4px}.roti-wf-arrow{color:var(--accent);font-size:18px;font-weight:600}.roti-wf-chain{display:flex;align-items:center;flex-wrap:wrap;gap:4px}.roti-wf-chain-item{display:flex;align-items:center;gap:4px}.roti-wf-chain-arrow{color:var(--accent);font-size:14px;font-weight:600}.roti-wf-chain-value{font-size:14px;font-weight:500;font-family:SF Mono,Consolas,monospace;color:var(--text-secondary)}.roti-wf-chain-value--latest{color:var(--accent);font-weight:600}.roti-hardness-section{background:var(--bg-primary)}.roti-hardness-header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px}.roti-hardness-header .roti-label{margin-bottom:0}.roti-live-hardness{display:inline-flex;align-items:baseline;gap:8px;padding:6px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-primary);color:var(--text-secondary);flex:0 1 auto;margin-left:auto;max-width:260px;min-width:0}.roti-live-hardness__label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary);white-space:nowrap}.roti-live-hardness__value{font-size:15px;font-weight:700;font-family:SF Mono,Consolas,monospace;color:var(--text-secondary);white-space:nowrap}.roti-live-hardness--active{border-color:var(--accent);background:#ff6b0014}.roti-live-hardness--active .roti-live-hardness__label,.roti-live-hardness--active .roti-live-hardness__value{color:var(--accent)}.roti-hardness-body{display:flex;flex-direction:column;gap:12px}.roti-hardness-ideal{display:flex;align-items:center;gap:12px;padding:10px 14px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm)}.roti-hardness-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}.roti-hardness-chip{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 10px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm);transition:all .2s ease}.roti-hardness-chip-label{font-size:11px;font-weight:500;color:var(--text-secondary);text-transform:uppercase}.roti-hardness-chip-value{font-size:17px;font-weight:600;font-family:SF Mono,Consolas,monospace;color:var(--text-secondary)}.roti-hardness--ok{border-color:var(--success)}.roti-hardness--ok .roti-hardness-chip-value{color:var(--success)}.roti-hardness--bad{border-color:var(--error)}.roti-hardness--bad .roti-hardness-chip-value{color:var(--error)}.roti-dispense-table{display:flex;flex-direction:column;gap:8px}.roti-dispense-header-row,.roti-dispense-row{display:grid;grid-template-columns:100px 1fr 1fr 1fr;gap:10px;align-items:center}.roti-dispense-cell--label{font-size:13px;font-weight:600;color:var(--accent);padding:10px 12px}.roti-dispense-cell--head{font-size:11px;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;text-align:center;padding:6px 0}.roti-dispense-cell--value{background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 10px;text-align:center;font-size:15px;font-weight:600;font-family:SF Mono,Consolas,monospace;color:var(--text-primary)}.roti-actions{display:flex;flex-wrap:wrap;gap:12px;padding:16px 20px;margin-top:auto;position:sticky;bottom:0;background:var(--bg-primary);border-top:1px solid var(--border);z-index:10}.roti-modal--errorcode{max-width:520px;width:92%}.roti-ec-icon-wrap{background:var(--accent-light)!important}.roti-ec-title{color:var(--text-primary)!important}.roti-ec-hint{font-size:13px;color:var(--text-secondary);margin-bottom:16px}.roti-ec-input{width:100%;padding:14px 16px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:16px;font-family:SF Mono,Consolas,monospace;font-weight:600;letter-spacing:2px;text-align:center;outline:none;transition:all .2s ease;margin-bottom:20px}.roti-ec-input:focus{border-color:var(--accent);background:var(--bg-primary)}.roti-ec-input::placeholder{color:var(--text-muted);font-weight:400;letter-spacing:1px}.roti-ec-btn-row{display:flex;gap:12px;justify-content:center}.roti-ec-btn--cancel{background:var(--bg-primary)!important;color:var(--text-secondary)!important;border:1px solid var(--border)!important}.roti-ec-btn--cancel:hover{color:var(--text-primary)!important;border-color:var(--text-primary)!important}.roti-ec-btn--submit{background:var(--accent)!important;color:#fff!important}.roti-ec-btn--submit:hover{background:var(--accent-hover)!important}.roti-ec-btn--submit:disabled{opacity:.4;cursor:not-allowed}.roti-ec-btn--close{background:var(--accent)!important;color:#fff!important;margin-top:20px}.roti-ec-btn--close:hover{background:var(--accent-hover)!important}.roti-ec-processing{display:flex;flex-direction:column;align-items:center;gap:24px;padding:28px 0}.roti-ec-spinner{width:48px;height:48px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.roti-ec-processing-text{font-size:14px;color:var(--text-secondary);font-weight:500}.roti-ec-results-title{font-size:17px;font-weight:600;color:var(--error);margin-bottom:14px}.roti-ec-module-info{display:flex;align-items:center;gap:10px;justify-content:center;margin-bottom:18px;font-size:14px;color:var(--text-primary);flex-wrap:wrap}.roti-ec-badge{background:var(--accent);color:#fff;padding:4px 12px;border-radius:var(--radius-sm);font-size:13px;font-weight:600;font-family:SF Mono,Consolas,monospace}.roti-ec-value-chip{background:var(--error-light);color:var(--error);padding:4px 12px;border-radius:var(--radius-sm);font-size:13px;font-weight:600;font-family:SF Mono,Consolas,monospace}.roti-ec-table-wrap{max-height:260px;overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius-sm)}.roti-ec-table{width:100%;border-collapse:collapse;font-size:13px;text-align:left}.roti-ec-table thead{position:sticky;top:0;z-index:1}.roti-ec-table th{background:var(--bg-secondary);color:var(--text-secondary);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:10px 14px;border-bottom:1px solid var(--border)}.roti-ec-table td{padding:12px 14px;border-bottom:1px solid var(--border);color:var(--text-primary);vertical-align:top}.roti-ec-table tr:last-child td{border-bottom:none}.roti-ec-table tbody tr{transition:background .15s}.roti-ec-table tbody tr:hover{background:var(--accent-light)}.roti-ec-flag-cell{font-family:SF Mono,Consolas,monospace;font-weight:600;color:var(--warning)!important;white-space:nowrap;width:50px}.roti-ec-meaning-cell{font-weight:600;color:var(--error)!important;white-space:nowrap}.roti-ec-note-cell{color:var(--text-secondary)!important;font-size:12px;line-height:1.5}.ping-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:200;display:flex;align-items:center;justify-content:center;animation:fadeIn .2s ease;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.ping-modal{background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:28px 24px 24px;max-width:480px;width:92%;max-height:85vh;overflow-y:auto;text-align:center;animation:slideUp .3s ease;box-shadow:var(--shadow-lg)}.ping-icon-wrap{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 16px}.ping-icon-wrap--prompt{background:var(--accent-light)}.ping-icon-wrap--success{background:var(--success-light)}.ping-icon-wrap--error{background:var(--error-light)}.ping-icon{font-size:24px}.ping-title{font-size:18px;font-weight:600;color:var(--text-primary);margin-bottom:8px}.ping-title--success{color:var(--success)}.ping-title--error{color:var(--error)}.ping-subtitle{font-size:14px;color:var(--text-secondary);margin-bottom:20px}.ping-input{width:100%;padding:14px 16px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:15px;font-family:SF Mono,Consolas,monospace;text-align:center;outline:none;transition:all .2s ease;margin-bottom:20px}.ping-input:focus{border-color:var(--accent);background:var(--bg-primary)}.ping-input::placeholder{color:var(--text-muted)}.ping-btn-row{display:flex;gap:12px;justify-content:center}.ping-btn{padding:12px 32px;border:none;border-radius:var(--radius-sm);font-size:14px;font-weight:600;cursor:pointer;transition:all .2s ease}.ping-btn:active{transform:scale(.98)}.ping-btn--cancel{background:var(--bg-primary);color:var(--text-secondary);border:1px solid var(--border)}.ping-btn--cancel:hover{color:var(--text-primary);border-color:var(--text-primary)}.ping-btn--proceed{background:var(--accent);color:#fff}.ping-btn--proceed:hover{background:var(--accent-hover)}.ping-btn--proceed:disabled{opacity:.4;cursor:not-allowed}.ping-btn--close{background:var(--accent);color:#fff;margin-top:20px}.ping-btn--close:hover{background:var(--accent-hover)}.ping-processing{display:flex;flex-direction:column;align-items:center;gap:20px;padding:24px 0}.ping-spinner-wrap{position:relative;width:56px;height:56px}.ping-spinner{width:56px;height:56px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.ping-spinner-ring{position:absolute;top:6px;right:6px;bottom:6px;left:6px;border:2px solid transparent;border-bottom-color:var(--accent-hover);border-radius:50%;animation:spin 1.2s linear infinite reverse}.ping-dots{display:flex;gap:8px}.ping-dots span{width:8px;height:8px;background:var(--accent);border-radius:50%;animation:dotBounce 1.4s infinite ease-in-out}.ping-dots span:nth-child(2){animation-delay:.16s}.ping-dots span:nth-child(3){animation-delay:.32s}@keyframes dotBounce{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1.2)}}.ping-info-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:18px 0 14px}.ping-info-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 10px;display:flex;flex-direction:column;gap:6px}.ping-info-label{font-size:11px;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em}.ping-info-value{font-size:14px;font-weight:600;color:var(--text-primary);font-family:SF Mono,Consolas,monospace}.ping-fw-section{margin:14px 0}.ping-section-label{display:block;font-size:12px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.05em;margin-bottom:10px}.ping-fw-chips{display:flex;gap:10px;justify-content:center}.ping-fw-chip{flex:1;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 10px;display:flex;flex-direction:column;align-items:center;gap:6px}.ping-fw-chip-label{font-size:11px;font-weight:500;color:var(--text-secondary);text-transform:uppercase}.ping-fw-chip-value{font-size:14px;font-weight:600;color:var(--success);font-family:SF Mono,Consolas,monospace}.ping-table-section{margin:14px 0;text-align:left}.ping-table-wrap{max-height:200px;overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius-sm)}.ping-table{width:100%;border-collapse:collapse;font-size:13px}.ping-table thead{position:sticky;top:0;z-index:1}.ping-table th{background:var(--bg-secondary);color:var(--text-secondary);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:10px 14px;border-bottom:1px solid var(--border)}.ping-table td{padding:10px 14px;border-bottom:1px solid var(--border);color:var(--text-primary);font-size:13px}.ping-table tr:last-child td{border-bottom:none}.ping-table tbody tr{transition:background .15s}.ping-table tbody tr:hover{background:var(--accent-light)}.ping-cell--ver{font-family:SF Mono,Consolas,monospace;font-weight:600;color:var(--success)}.ping-cell--dim{color:var(--text-secondary);font-style:italic}.ping-error-msg{font-size:14px;color:var(--text-secondary);line-height:1.6;margin-bottom:10px}.cg-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:200;display:flex;align-items:center;justify-content:center;animation:fadeIn .2s ease;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.cg-modal{background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-lg);max-width:440px;width:92%;box-shadow:var(--shadow-lg);animation:slideUp .3s ease;overflow:hidden}.cg-header{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:18px 20px;border-bottom:1px solid var(--border);background:var(--bg-secondary)}.cg-header-title{font-size:15px;font-weight:600;color:var(--text-primary)}.cg-header-center{display:flex;justify-content:center}.cg-nodeid-pill{font-size:13px;font-weight:600;font-family:SF Mono,Consolas,monospace;color:#fff;background:var(--accent);padding:6px 16px;border-radius:20px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cg-nodeid-pill--empty{background:var(--border);color:var(--text-secondary)}.cg-close-btn{justify-self:end;display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:none;border:1px solid transparent;border-radius:var(--radius-sm);color:var(--text-secondary);font-size:16px;cursor:pointer;transition:all .2s ease}.cg-close-btn:hover:not(:disabled){color:var(--text-primary);border-color:var(--border);background:var(--bg-primary)}.cg-close-btn:disabled{opacity:.3;cursor:not-allowed}.cg-body{padding:24px}.cg-loading{display:flex;flex-direction:column;align-items:center;gap:18px;padding:36px 0 32px}.cg-spinner-wrap{position:relative;width:52px;height:52px}.cg-spinner{width:52px;height:52px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.cg-spinner-inner{position:absolute;top:8px;right:8px;bottom:8px;left:8px;border:2px solid transparent;border-bottom-color:var(--accent-hover);border-radius:50%;animation:spin 1.3s linear infinite reverse}.cg-loading-text{font-size:14px;color:var(--text-secondary);font-weight:500}.cg-dots{display:flex;gap:8px}.cg-dots span{width:7px;height:7px;background:var(--accent);border-radius:50%;animation:dotBounce 1.4s infinite ease-in-out;opacity:.5}.cg-dots span:nth-child(2){animation-delay:.16s}.cg-dots span:nth-child(3){animation-delay:.32s}.cg-error-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:16px 0 8px;text-align:center}.cg-error-icon-wrap{width:52px;height:52px;border-radius:50%;background:var(--error-light);display:flex;align-items:center;justify-content:center;margin-bottom:4px}.cg-error-icon{font-size:24px;color:var(--error)}.cg-error-title{font-size:16px;font-weight:600;color:var(--error)}.cg-error-msg{font-size:13px;color:var(--error);font-weight:600;line-height:1.6;max-width:300px;margin-bottom:10px}.cg-form{display:flex;flex-direction:column;gap:20px}.cg-field{display:flex;flex-direction:column;gap:10px}.cg-label{font-size:12px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.05em;display:flex;align-items:center;gap:10px}.cg-label-badge{font-size:11px;font-weight:500;color:#fff;background:var(--accent);padding:2px 10px;border-radius:10px;text-transform:none;letter-spacing:0}.cg-label-badge--dim{background:var(--border);color:var(--text-secondary)}.cg-input-row{display:flex;gap:10px;align-items:center}.cg-input{flex:1;padding:12px 14px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:14px;outline:none;transition:all .2s ease}.cg-input:focus{border-color:var(--accent);background:var(--bg-primary)}.cg-input::placeholder{color:var(--text-muted)}.cg-confirmed{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--success);padding:4px 0}.cg-confirmed-dot{width:8px;height:8px;border-radius:50%;background:var(--success);flex-shrink:0}.cg-divider{height:1px;background:var(--border);margin:4px 0}.cg-readonly-field{display:flex;align-items:center;gap:12px;padding:14px 16px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);min-height:46px}.cg-readonly-dot{width:8px;height:8px;border-radius:50%;background:var(--warning);flex-shrink:0}.cg-readonly-value,.cg-readonly-fwver{font-size:14px;font-weight:600;font-family:SF Mono,Consolas,monospace;color:var(--warning)}.cg-readonly-empty{font-size:14px;color:var(--text-muted)}.cg-readonly-loading{font-size:14px;color:var(--text-secondary);font-style:italic}.cg-select-wrap{position:relative}.cg-select{width:100%;padding:12px 40px 12px 14px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:14px;outline:none;cursor:pointer;-moz-appearance:none;appearance:none;-webkit-appearance:none;transition:all .2s ease}.cg-select:focus{border-color:var(--accent);background:var(--bg-primary)}.cg-select:disabled{opacity:.4;cursor:not-allowed}.cg-select option{background:var(--bg-elevated);color:var(--text-primary)}.cg-select-arrow{position:absolute;right:14px;top:50%;transform:translateY(-50%);color:var(--text-secondary);font-size:12px;pointer-events:none}.cg-selection-info{display:flex;align-items:center;gap:12px;padding:8px 4px 0}.cg-selection-list{margin-top:12px;display:flex;flex-direction:column;gap:8px;max-height:220px;overflow:auto;padding:10px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-primary)}.cg-selection-item{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);cursor:pointer;text-align:left;transition:all .2s ease}.cg-selection-item--active{border-color:var(--accent);background:var(--accent-light)}.cg-selection-item:disabled{opacity:.5;cursor:not-allowed}.cg-selection-name{flex:1;font-weight:500}.cg-selection-empty{padding:12px 14px;color:var(--text-muted);font-size:14px}.cg-type-chip{font-size:11px;font-weight:600;padding:3px 10px;border-radius:10px;text-transform:capitalize}.cg-type-chip--global{background:var(--accent-light);color:var(--accent)}.cg-type-chip--internal{background:var(--success-light);color:var(--success)}.cg-type-chip--beta,.cg-type-chip--testing{background:var(--warning-light);color:var(--warning)}.cg-mch-count{font-size:12px;color:var(--text-secondary)}.cg-footer{display:flex;flex-direction:column;gap:16px;padding-top:8px}.cg-summary{display:flex;align-items:center;justify-content:center;gap:12px;padding:12px 16px;background:var(--accent-light);border:1px solid var(--accent);border-radius:var(--radius-sm);animation:fadeIn .2s ease}.cg-summary-from{font-size:13px;font-weight:600;font-family:SF Mono,Consolas,monospace;color:var(--warning)}.cg-summary-arrow{color:var(--accent);font-size:18px;font-weight:600}.cg-summary-to{font-size:13px;font-weight:600;font-family:SF Mono,Consolas,monospace;color:var(--success)}.cg-submit-error{font-size:13px;color:var(--error);margin:0 0 10px;text-align:right}.cg-repush-success{font-size:13px;color:var(--success);margin:0 0 10px;text-align:right}.cg-footer-btns{display:flex;gap:12px;justify-content:flex-end}.cg-btn{padding:12px 24px;border-radius:var(--radius-sm);font-size:14px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:all .2s ease}.cg-btn:active:not(:disabled){transform:scale(.98)}.cg-btn:disabled{opacity:.4;cursor:not-allowed}.cg-btn--ghost{background:transparent;border-color:var(--border);color:var(--text-secondary)}.cg-btn--ghost:hover:not(:disabled){border-color:var(--text-primary);color:var(--text-primary)}.cg-btn--primary{background:var(--accent);color:#fff}.cg-btn--primary:hover:not(:disabled){background:var(--accent-hover)}.cg-btn--check{background:var(--bg-primary);border-color:var(--accent);color:var(--accent);white-space:nowrap}.cg-btn--check:hover:not(:disabled){background:var(--accent);color:#fff}.cg-btn--secondary{background:var(--bg-primary);border-color:var(--border);color:var(--text-primary)}.cg-btn--secondary:hover:not(:disabled){background:var(--accent-light);border-color:var(--accent);color:var(--accent)}.cg-btn--submit{background:var(--accent);color:#fff;flex:1}.cg-btn--submit:hover:not(:disabled){background:var(--accent-hover)}.fw-ota-page{background:var(--bg-secondary)}.fw-ota-controls{background:transparent}.fw-ota-shell{display:flex;flex-direction:column;gap:20px;padding:24px}.fw-ota-hero{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;padding:24px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-lg)}.fw-ota-eyebrow{font-size:12px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);margin-bottom:10px}.fw-ota-title{font-size:24px;line-height:1.2;font-weight:700;color:var(--text-primary);margin-bottom:10px}.fw-ota-subtitle{max-width:540px;font-size:14px;line-height:1.6;color:var(--text-secondary)}.fw-ota-node-card{min-width:180px;display:flex;flex-direction:column;gap:8px;padding:16px 20px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md)}.fw-ota-node-label{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}.fw-ota-node-value{font-size:15px;font-weight:600;color:var(--accent);font-family:SF Mono,Consolas,monospace;word-break:break-word}.fw-ota-node-value--empty{color:var(--text-muted);font-family:Inter,Segoe UI,system-ui,sans-serif;font-weight:500}.fw-ota-grid{display:grid;grid-template-columns:1fr;gap:20px}.fw-ota-card,.fw-ota-state-card{display:flex;flex-direction:column;gap:18px;padding:20px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-lg)}.fw-ota-card--actions{gap:12px}.fw-ota-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.fw-ota-card-kicker{font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);margin-bottom:8px}.fw-ota-card-title{font-size:18px;font-weight:600;color:var(--text-primary)}.fw-ota-stat-pill{flex-shrink:0;padding:6px 12px;border-radius:999px;background:var(--accent-light);color:var(--accent);font-size:12px;font-weight:600}.fw-ota-selection-list{min-height:240px}.fw-ota-change-btn{width:100%;margin-top:8px}.fw-ota-action-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.fw-ota-action-btn{width:100%;justify-content:center}.fw-ota-feedback{display:flex;flex-direction:column;gap:8px;padding:12px 14px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md)}.fw-ota-feedback .cg-submit-error,.fw-ota-feedback .cg-repush-success{margin:0;text-align:left}.fw-ota-upload-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:220;display:flex;align-items:center;justify-content:center;padding:20px;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.fw-ota-upload-modal{width:min(520px,100%);display:flex;flex-direction:column;gap:16px;padding:24px;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.fw-ota-upload-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.fw-ota-upload-kicker{font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);margin-bottom:8px}.fw-ota-upload-title{font-size:17px;font-weight:600;color:var(--text-primary)}.fw-ota-upload-close{flex:0 0 auto}.fw-ota-upload-copy{font-size:14px;line-height:1.6;color:var(--text-secondary)}.fw-ota-upload-examples{display:flex;flex-wrap:wrap;gap:10px}.fw-ota-upload-chip{padding:8px 12px;border-radius:999px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--accent);font-size:13px;font-weight:500;font-family:SF Mono,Consolas,monospace}.fw-ota-file-input{display:none}.fw-ota-upload-actions{display:flex;gap:12px}.fw-ota-upload-actions .cg-btn{flex:1}.fw-ota-upload-filecard{display:flex;flex-direction:column;gap:8px;padding:14px 16px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md)}.fw-ota-upload-filelabel{font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--text-secondary)}.fw-ota-upload-filename{font-size:14px;font-weight:600;color:var(--text-primary);font-family:SF Mono,Consolas,monospace;word-break:break-word}.fw-ota-upload-filename--empty{font-family:Inter,Segoe UI,system-ui,sans-serif;color:var(--text-muted);font-weight:500}.fw-ota-upload-progress{display:flex;flex-direction:column;gap:10px;padding:14px 16px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md)}.fw-ota-upload-progress-head{display:flex;align-items:center;justify-content:space-between;gap:14px}.fw-ota-upload-progress-label{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}.fw-ota-upload-progress-value{font-size:14px;font-weight:600;color:var(--accent);font-family:SF Mono,Consolas,monospace}.fw-ota-upload-progress-bar{width:100%;height:10px;overflow:hidden;background:var(--border);border-radius:999px}.fw-ota-upload-progress-fill{display:block;height:100%;background:var(--accent);border-radius:inherit;transition:width .2s ease}.fw-ota-upload-progress-fill--error{background:var(--error)}.fw-ota-upload-progress-copy{font-size:14px;line-height:1.5;color:var(--text-secondary)}.fw-ota-delete-input{width:100%;padding:14px 16px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:14px;font-family:SF Mono,Consolas,monospace;outline:none;transition:all .2s ease}.fw-ota-delete-input:focus{border-color:var(--accent);background:var(--bg-primary)}.fw-ota-delete-input::placeholder{color:var(--text-muted);font-family:Inter,Segoe UI,system-ui,sans-serif}.fw-ota-footer-btns{justify-content:space-between}@media (max-width: 640px){.login-page{min-height:100dvh;padding:16px}.login-card{padding:28px 20px;border-radius:var(--radius-lg)}.login-title{font-size:24px}.header{padding:0 12px;height:56px}.node-id-input{width:160px;font-size:13px;padding:8px 12px}.connect-btn{padding:8px 16px;font-size:13px}.header-left label{display:none}.command-panel{flex-direction:column;padding:12px}.send-btn{align-self:stretch}.sidebar{width:260px}.header-user,.header-wifi-meta-label,.header-wifi-meta-quality{display:none}.header-wifi-meta{padding:6px 10px}.mc-layout{flex-direction:column}.mc-controls{flex:none;border-right:none;border-bottom:1px solid var(--border)}.mc-logs{flex:1}.roti-controls{flex:none!important;max-height:60vh}.roti-row{flex-direction:column;gap:10px}.roti-input-group,.roti-display,.roti-display--wide{min-width:0}.roti-wf-values{flex-direction:column;gap:8px}.roti-wf-arrow{transform:rotate(90deg)}.roti-actions{flex-direction:column}.roti-hardness-header{flex-wrap:wrap}.roti-live-hardness{flex:1 1 100%;margin-left:0;order:3;max-width:none}.roti-hardness-header .roti-btn{order:2;margin-left:auto}.roti-hardness-grid{grid-template-columns:repeat(3,1fr)}.roti-dispense-header-row,.roti-dispense-row{grid-template-columns:80px 1fr 1fr 1fr;gap:6px}.roti-dispense-cell--value{font-size:13px;padding:10px 6px}.roti-modal--errorcode{max-width:95%;padding:24px 18px 20px}.roti-ec-table th,.roti-ec-table td{padding:10px;font-size:12px}.roti-ec-note-cell{font-size:11px}.ping-modal{max-width:95%;padding:22px 16px}.ping-info-grid{grid-template-columns:1fr;gap:8px}.ping-fw-chips{flex-direction:column;gap:8px}.mc-dispense-wrapper{flex-direction:column}.mc-lc-section{flex-direction:row;min-width:0}.mc-lc-display{flex:1}.mc-dispense-display,.mc-dispense-input{width:60px}.mc-heater-control-card{grid-template-columns:1fr}.mc-heater-input-wrap{padding:0 0 10px}.mc-heater-input-wrap:not(:last-child){border-right:none;border-bottom:1px solid var(--border)}.cg-modal{max-width:96%;border-radius:var(--radius-md)}.cg-header{padding:14px 16px}.cg-nodeid-pill{max-width:120px;font-size:12px;padding:4px 12px}.cg-body{padding:20px 18px}.cg-footer-btns{flex-direction:column-reverse}.cg-btn--submit,.cg-btn--ghost{flex:none;width:100%;text-align:center}.fw-ota-shell{padding:16px}.fw-ota-hero{flex-direction:column;padding:20px}.fw-ota-node-card{width:100%;min-width:0}.fw-ota-grid,.fw-ota-action-grid{grid-template-columns:1fr}.fw-ota-upload-head,.fw-ota-upload-actions{flex-direction:column}.fw-ota-upload-overlay{padding:14px}.fw-ota-upload-modal{padding:18px}.fw-ota-footer-btns{flex-direction:column-reverse}}@media (max-width: 1280px){.header{padding:8px 16px;flex-wrap:wrap}.header-left,.header-right{flex:1 1 100%}.header-left,.header-right{flex-wrap:wrap}.header-right{justify-content:flex-start}.header-user{max-width:100%}.node-id-input{width:100%;min-width:0;flex:1 1 240px}.main-content{flex:1 1 auto;height:auto;min-height:0}.mc-layout{flex-direction:column}.mc-controls{flex:none;width:100%;border-right:none;border-bottom:1px solid var(--border)}.mc-logs{flex:1;width:100%}.roti-controls{flex:none!important;width:100%}}
