:root,[data-theme=dark]{--gray-1: #111113;--gray-2: #18181b;--gray-3: #212125;--gray-4: #28282c;--gray-5: #2e2e32;--gray-6: #34343a;--gray-7: #3e3e44;--gray-8: #504f57;--gray-9: #706f78;--gray-10: #7e7d86;--gray-11: #a09fa6;--gray-12: #ededef;--blue-1: #0d1520;--blue-2: #111927;--blue-3: #0d2847;--blue-4: #003362;--blue-5: #004074;--blue-6: #104d87;--blue-7: #205d9e;--blue-8: #2870bd;--blue-9: #0090ff;--blue-10: #3b9eff;--blue-11: #70b8ff;--blue-12: #c2e6ff;--success: #30a46c;--success-bg: rgba(48, 164, 108, .15);--error: #e5484d;--error-bg: rgba(229, 72, 77, .15);--warning: #f5a623;--warning-bg: rgba(245, 166, 35, .15);--info: #0090ff;--info-bg: rgba(0, 144, 255, .15);--bg-base: var(--gray-1);--bg-subtle: var(--gray-2);--bg-ui: var(--gray-3);--bg-hover: var(--gray-4);--bg-active: var(--gray-5);--border-subtle: var(--gray-4);--border-ui: var(--gray-6);--border-hover: var(--gray-7);--border-focus: var(--blue-9);--text-primary: var(--gray-12);--text-secondary: var(--gray-11);--text-muted: var(--gray-9);--text-accent: var(--blue-11);--shadow: 0 2px 10px rgba(0, 0, 0, .4);--shadow-lg: 0 8px 32px rgba(0, 0, 0, .5);--blur: 12px;--panel-bg: rgba(17, 17, 19, .85);--modal-backdrop: rgba(0, 0, 0, .7);--toolbar-height: 52px;--tab-height: 40px;--border-radius: 6px;--border-radius-sm: 4px;--border-radius-lg: 8px;--transition-fast: .1s ease;--transition-normal: .2s ease;--transition-slow: .3s ease}[data-theme=light]{--gray-1: #fcfcfd;--gray-2: #f9f9fb;--gray-3: #eff0f3;--gray-4: #e7e8ec;--gray-5: #e0e1e6;--gray-6: #d8d9e0;--gray-7: #cdced7;--gray-8: #b9bbc6;--gray-9: #8b8d98;--gray-10: #80828d;--gray-11: #62636c;--gray-12: #1e1f24;--blue-1: #fbfdff;--blue-2: #f5faff;--blue-3: #edf6ff;--blue-4: #e1f0ff;--blue-5: #cee7fe;--blue-6: #b7d9f8;--blue-7: #96c7f2;--blue-8: #5eb0ef;--blue-9: #0091ff;--blue-10: #0081f1;--blue-11: #006adc;--blue-12: #113264;--success: #30a46c;--success-bg: rgba(48, 164, 108, .12);--error: #e5484d;--error-bg: rgba(229, 72, 77, .12);--warning: #f5a623;--warning-bg: rgba(245, 166, 35, .12);--info: #0091ff;--info-bg: rgba(0, 145, 255, .12);--bg-base: var(--gray-1);--bg-subtle: var(--gray-2);--bg-ui: var(--gray-3);--bg-hover: var(--gray-4);--bg-active: var(--gray-5);--border-subtle: var(--gray-4);--border-ui: var(--gray-6);--border-hover: var(--gray-7);--border-focus: var(--blue-9);--text-primary: var(--gray-12);--text-secondary: var(--gray-11);--text-muted: var(--gray-9);--text-accent: var(--blue-11);--shadow: 0 2px 10px rgba(0, 0, 0, .1);--shadow-lg: 0 8px 32px rgba(0, 0, 0, .15);--panel-bg: rgba(252, 252, 253, .9);--modal-backdrop: rgba(0, 0, 0, .4)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:14px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background-color:var(--bg-base);color:var(--text-primary);line-height:1.5;min-height:100vh;overflow:hidden}#app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.toolbar{display:flex;align-items:center;justify-content:space-between;height:var(--toolbar-height);padding:0 16px;background:var(--bg-subtle);border-bottom:1px solid var(--border-subtle);flex-shrink:0}.toolbar-left,.toolbar-right{display:flex;align-items:center;gap:12px}.toolbar-center{display:flex;align-items:center;gap:16px}.app-title{font-size:16px;font-weight:600;color:var(--text-primary)}.device-info{font-size:12px;color:var(--text-muted)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;font-size:13px;font-weight:500;border:1px solid transparent;border-radius:var(--border-radius-sm);cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--blue-9);color:#fff}.btn-primary:hover:not(:disabled){background:var(--blue-10)}.btn-primary:active:not(:disabled){background:var(--blue-8)}.btn-secondary{background:var(--bg-ui);border-color:var(--border-ui);color:var(--text-primary)}.btn-secondary:hover:not(:disabled){background:var(--bg-hover);border-color:var(--border-hover)}.btn-danger{background:var(--error);color:#fff}.btn-danger:hover:not(:disabled){background:#d13438}.btn-icon{padding:6px;background:transparent;border:none;color:var(--text-secondary)}.btn-icon:hover:not(:disabled){color:var(--text-primary);background:var(--bg-hover)}.hidden{display:none!important}.main-content{display:flex;flex-direction:column;flex:1;overflow:hidden}.tabs{display:flex;gap:2px;padding:8px 16px 0;background:var(--bg-subtle);border-bottom:1px solid var(--border-subtle)}.tab{padding:8px 16px;font-size:13px;font-weight:500;color:var(--text-secondary);background:transparent;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:all var(--transition-fast)}.tab:hover{color:var(--text-primary);background:var(--bg-hover)}.tab.active{color:var(--text-accent);border-bottom-color:var(--blue-9)}.tab-panels{flex:1;overflow:hidden}.tab-panel{display:none;height:100%;overflow:auto;padding:16px}.tab-panel.active{display:flex;flex-direction:column}.panel-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.panel-header h2{font-size:18px;font-weight:600}.panel-actions{display:flex;align-items:center;gap:8px}.pins-container{flex:1;overflow:auto}.pins-table{width:100%;border-collapse:collapse;font-size:13px}.pins-table th,.pins-table td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border-subtle)}.pins-table th{font-weight:600;color:var(--text-secondary);background:var(--bg-subtle);position:sticky;top:0;z-index:1}.pins-table tr:hover{background:var(--bg-hover)}.pin-number{font-weight:600;color:var(--text-accent)}.pin-gpio{font-family:SF Mono,Monaco,Cascadia Code,monospace;font-size:12px;color:var(--text-muted)}.mode-select{padding:4px 8px;background:var(--bg-ui);border:1px solid var(--border-ui);border-radius:var(--border-radius-sm);color:var(--text-primary);font-size:12px;width:145px}.value-display{font-family:SF Mono,Monaco,Cascadia Code,monospace;font-size:13px;min-width:100px}.value-input{width:80px;padding:4px 8px;background:var(--bg-ui);border:1px solid var(--border-ui);border-radius:var(--border-radius-sm);color:var(--text-primary);font-size:12px;font-family:SF Mono,Monaco,Cascadia Code,monospace}.value-input:focus{outline:none;border-color:var(--border-focus)}.pin-actions{display:flex;gap:4px}.btn-sm{padding:4px 8px;font-size:11px}.mode-reference{margin-top:20px;padding:16px;background:var(--bg-subtle);border-radius:var(--border-radius);border:1px solid var(--border-subtle)}.mode-reference h3{font-size:14px;margin-bottom:12px;color:var(--text-secondary)}.mode-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px}.mode-item{display:flex;align-items:center;gap:8px;font-size:12px}.mode-badge{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;background:var(--blue-9);color:#fff;border-radius:var(--border-radius-sm);font-weight:600;font-size:11px}.ws-quick-actions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.btn-ws{min-width:50px}.btn-red{background:#e53935;color:#fff}.btn-green{background:#43a047;color:#fff}.btn-blue{background:#1e88e5;color:#fff}.btn-white{background:#fafafa;color:#333}.ws-palette-container{margin-bottom:16px}.ws-palette-container h3{font-size:14px;margin-bottom:12px;color:var(--text-secondary)}.ws-palette{display:grid;grid-template-columns:repeat(32,1fr);gap:2px;padding:8px;background:var(--bg-subtle);border-radius:var(--border-radius);border:1px solid var(--border-subtle)}.palette-color{aspect-ratio:1;border:1px solid var(--border-subtle);border-radius:2px;cursor:pointer;transition:transform var(--transition-fast)}.palette-color:hover{transform:scale(1.3);z-index:1;border-color:var(--text-primary)}.palette-color.selected{outline:2px solid var(--blue-9);outline-offset:1px}.ws-manual{margin-bottom:16px}.ws-manual label{display:block;font-size:13px;margin-bottom:8px;color:var(--text-secondary)}.ws-manual-input{display:flex;gap:8px}.input-text{flex:1;padding:8px 12px;background:var(--bg-ui);border:1px solid var(--border-ui);border-radius:var(--border-radius-sm);color:var(--text-primary);font-family:SF Mono,Monaco,Cascadia Code,monospace;font-size:13px}.input-text:focus{outline:none;border-color:var(--border-focus)}.input-number{width:80px;padding:6px 8px;background:var(--bg-ui);border:1px solid var(--border-ui);border-radius:var(--border-radius-sm);color:var(--text-primary);font-size:13px}.ws-preview h3{font-size:14px;margin-bottom:12px;color:var(--text-secondary)}.led-strip{display:flex;gap:4px;padding:16px;background:var(--gray-1);border-radius:var(--border-radius);border:1px solid var(--border-subtle);overflow-x:auto}.led{width:24px;height:24px;border-radius:50%;background:#111;border:2px solid var(--border-ui);flex-shrink:0;box-shadow:inset 0 0 8px #ffffff1a}.led.on{box-shadow:0 0 12px currentColor,inset 0 0 4px #ffffff4d}.dht-container{flex:1;overflow:auto}.dht-table{width:100%;border-collapse:collapse;font-size:13px}.dht-table th,.dht-table td{padding:12px;text-align:left;border-bottom:1px solid var(--border-subtle)}.dht-table th{font-weight:600;color:var(--text-secondary);background:var(--bg-subtle);position:sticky;top:0}.dht-status{display:inline-flex;align-items:center;gap:6px}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--gray-8)}.status-dot.ok{background:var(--success)}.status-dot.error{background:var(--error)}.temp-value{font-weight:600;color:var(--error)}.humidity-value{font-weight:600;color:var(--blue-9)}.checkbox-label{display:inline-flex;align-items:center;gap:6px;font-size:13px;cursor:pointer}.select-small{padding:4px 8px;background:var(--bg-ui);border:1px solid var(--border-ui);border-radius:var(--border-radius-sm);color:var(--text-primary);font-size:12px}.terminal-container{flex:1;display:flex;flex-direction:column;background:var(--gray-1);border-radius:var(--border-radius);border:1px solid var(--border-subtle);overflow:hidden}.terminal-output{flex:1;padding:12px;overflow:auto;font-family:SF Mono,Monaco,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.6;white-space:pre-wrap;word-break:break-all}.terminal-output .cmd{color:var(--blue-11)}.terminal-output .response{color:var(--success)}.terminal-output .error{color:var(--error)}.terminal-output .info{color:var(--text-muted)}.terminal-input-container{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--bg-subtle);border-top:1px solid var(--border-subtle)}.terminal-prompt{color:var(--blue-9);font-family:SF Mono,Monaco,Cascadia Code,monospace;font-weight:600}.terminal-input{flex:1;padding:6px 8px;background:var(--bg-ui);border:1px solid var(--border-ui);border-radius:var(--border-radius-sm);color:var(--text-primary);font-family:SF Mono,Monaco,Cascadia Code,monospace;font-size:12px}.terminal-input:focus{outline:none;border-color:var(--border-focus)}.monitor-controls{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:16px;padding:12px;background:var(--bg-subtle);border-radius:var(--border-radius);border:1px solid var(--border-subtle)}.monitor-pins,.monitor-type{display:flex;align-items:center;gap:8px}.pin-checkboxes{display:flex;gap:8px}.pin-checkbox{display:inline-flex;align-items:center;gap:4px;font-size:12px;cursor:pointer}.pin-checkbox input{cursor:pointer}.monitor-chart-container{flex:1;min-height:300px;background:var(--bg-subtle);border-radius:var(--border-radius);border:1px solid var(--border-subtle);padding:16px}#monitor-chart{width:100%;height:100%}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center}.modal.hidden{display:none}.modal-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--modal-backdrop);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-content{position:relative;width:90%;max-width:400px;background:var(--bg-subtle);border-radius:var(--border-radius-lg);border:1px solid var(--border-ui);box-shadow:var(--shadow-lg);animation:modal-enter .2s ease}@keyframes modal-enter{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border-subtle)}.modal-header h2{font-size:16px;font-weight:600}.modal-close{font-size:20px;line-height:1}.modal-body{padding:20px}.setting-group{margin-bottom:20px}.setting-group:last-child{margin-bottom:0}.setting-group h3{font-size:13px;font-weight:600;color:var(--text-secondary);margin-bottom:12px}.setting-options{display:flex;flex-wrap:wrap;gap:8px}.setting-option{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--bg-ui);border:1px solid var(--border-ui);border-radius:var(--border-radius-sm);cursor:pointer;transition:all var(--transition-fast)}.setting-option:hover{border-color:var(--border-hover)}.setting-option:has(input:checked){background:var(--blue-3);border-color:var(--blue-9)}.setting-option input{display:none}.setting-option-label{font-size:13px}.notifications{position:fixed;top:60px;right:16px;z-index:1100;display:flex;flex-direction:column;gap:8px;max-width:360px}.notification{display:flex;align-items:flex-start;gap:12px;padding:12px 16px;background:var(--bg-subtle);border:1px solid var(--border-ui);border-radius:var(--border-radius);box-shadow:var(--shadow);animation:notification-enter .2s ease}@keyframes notification-enter{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}.notification.success{background:var(--success-bg);border-color:var(--success)}.notification.error{background:var(--error-bg);border-color:var(--error)}.notification.warning{background:var(--warning-bg);border-color:var(--warning)}.notification.info{background:var(--info-bg);border-color:var(--info)}.notification-message{flex:1;font-size:13px}.notification-close{padding:0;background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:16px;line-height:1}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--gray-6);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--gray-7)}@media(max-width:768px){.toolbar{flex-wrap:wrap;height:auto;padding:8px 12px;gap:8px}.toolbar-center{order:3;width:100%}.tabs{padding:8px 12px 0;overflow-x:auto}.tab{padding:8px 12px;font-size:12px}.tab-panel{padding:12px}.ws-palette{grid-template-columns:repeat(16,1fr)}.mode-list{grid-template-columns:1fr}}
