:root{--bg-primary: #0a0e17;--bg-card: #111827;--bg-card-alt: #151d2e;--border: rgba(255, 255, 255, .06);--text: #e2e8f0;--text-dim: #64748b;--accent: #00e5a0;--accent-blue: #0090ff;--radius: 10px;--font: "DM Sans", system-ui, sans-serif;--font-mono: "JetBrains Mono", monospace}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body,#root{height:100%;background:var(--bg-primary);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased}.loading-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:16px;color:var(--text-dim);font-size:14px;letter-spacing:.02em}.loading-pulse{width:40px;height:40px;border-radius:50%;background:var(--accent);animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{0%,to{transform:scale(.8);opacity:.4}50%{transform:scale(1.2);opacity:1}}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.app-header{display:flex;align-items:center;gap:16px;padding:12px 20px;border-bottom:1px solid var(--border);background:#0a0e17f2;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);z-index:1000}.logo{display:flex;align-items:center;gap:8px;font-weight:600;font-size:18px;letter-spacing:-.02em;color:var(--text);flex-shrink:0}.header-meta{margin-left:auto;display:flex;align-items:center;gap:6px;flex-shrink:0}.status-dot{width:8px;height:8px;border-radius:50%}.status-dot.online{background:var(--accent);box-shadow:0 0 6px var(--accent);animation:blink 2.5s ease-in-out infinite}.status-dot.offline{background:#ef4444;box-shadow:0 0 6px #ef4444}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}.status-label{font-size:12px;font-family:var(--font-mono);color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em}.device-heading{display:flex;align-items:center;gap:6px;font-size:16px;font-weight:500;font-family:var(--font-mono);color:var(--text);letter-spacing:-.01em}.device-label{color:var(--text-dim);flex-shrink:0}.device-id-static{color:var(--text-dim)}.device-inline-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;color:var(--text);border:none;border-bottom:1px dashed rgba(255,255,255,.25);padding:2px 20px 2px 0;font-family:var(--font-mono);font-size:16px;font-weight:500;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' fill='%2364748b'%3E%3Cpath d='M5 7L0.67 2h8.66z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 2px center;transition:border-color .15s;max-width:260px}.device-inline-select:hover{border-bottom-color:var(--accent)}.device-inline-select:focus{outline:none;border-bottom-color:var(--accent);border-bottom-style:solid}.device-inline-select option{background:var(--bg-card);color:var(--text);font-size:12px}.error-banner{background:#ef44441f;color:#fca5a5;font-size:13px;text-align:center;padding:8px;border-bottom:1px solid rgba(239,68,68,.2)}.app-main{flex:1;display:flex;flex-direction:column;overflow:hidden}.map-section{flex:0 0 42%;min-height:260px;position:relative;border-bottom:1px solid var(--border)}.map-container{width:100%;height:100%;background:var(--bg-primary)}.leaflet-popup-content-wrapper{background:var(--bg-card)!important;color:var(--text)!important;border-radius:8px!important;font-family:var(--font-mono)!important;font-size:11px!important;line-height:1.6!important;box-shadow:0 8px 32px #00000080!important;border:1px solid var(--border)!important}.leaflet-popup-tip{background:var(--bg-card)!important}.leaflet-popup-close-button{color:var(--text-dim)!important}.charts-section{flex:1;overflow-y:auto;padding:16px 20px 24px}.charts-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:12px;flex-wrap:wrap}.charts-header-left{display:flex;align-items:baseline;gap:12px;min-width:0}.charts-header h2{font-size:16px;font-weight:500;letter-spacing:-.01em;font-family:var(--font-mono);color:var(--text);margin:0}.reading-count{font-size:12px;color:var(--text-dim);font-family:var(--font-mono);white-space:nowrap}.charts-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.export-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:flex;align-items:center;gap:5px;background:var(--bg-card);color:var(--text-dim);border:1px solid var(--border);border-radius:6px;padding:4px 10px;font-family:var(--font-mono);font-size:11px;font-weight:500;cursor:pointer;transition:all .15s;white-space:nowrap}.export-btn:hover:not(:disabled){color:var(--text);border-color:#fff3}.export-btn:disabled{opacity:.35;cursor:not-allowed}.export-wrapper{position:relative}.export-panel{position:absolute;top:calc(100% + 6px);right:0;z-index:100;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;padding:12px;min-width:280px;box-shadow:0 8px 32px #00000080}.export-panel-header{font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;margin-bottom:10px}.export-presets{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:10px}.export-preset-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg-card-alt);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:5px 10px;font-family:var(--font-mono);font-size:11px;cursor:pointer;transition:all .15s}.export-preset-btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.export-preset-btn:disabled{opacity:.4;cursor:not-allowed}.export-divider{display:flex;align-items:center;gap:8px;margin:10px 0;font-family:var(--font-mono);font-size:10px;color:var(--text-dim)}.export-divider:before,.export-divider:after{content:"";flex:1;height:1px;background:var(--border)}.export-custom{display:flex;flex-direction:column;gap:6px}.export-field{display:flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;color:var(--text-dim)}.export-field span{width:36px;flex-shrink:0}.export-field input[type=datetime-local]{flex:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg-primary);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:4px 6px;font-family:var(--font-mono);font-size:11px;color-scheme:dark;cursor:pointer;transition:border-color .15s}.export-field input[type=datetime-local]:focus{border-color:var(--accent-blue);outline:none}.export-custom-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--accent);color:var(--bg-primary);border:none;border-radius:4px;padding:6px 12px;font-family:var(--font-mono);font-size:11px;font-weight:600;cursor:pointer;transition:opacity .15s;margin-top:4px}.export-custom-btn:hover:not(:disabled){opacity:.85}.export-custom-btn:disabled{opacity:.35;cursor:not-allowed}.export-error{margin-top:8px;font-family:var(--font-mono);font-size:11px;color:#fca5a5}.time-range-wrapper{display:flex;flex-direction:column;align-items:flex-end;gap:6px}.time-range-selector{display:flex;gap:2px;background:var(--bg-card);border:1px solid var(--border);border-radius:6px;padding:2px;flex-shrink:0}.time-range-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;color:var(--text-dim);border:none;border-radius:4px;padding:4px 10px;font-family:var(--font-mono);font-size:11px;font-weight:500;cursor:pointer;transition:all .15s;white-space:nowrap}.time-range-btn:hover{color:var(--text);background:#ffffff0d}.time-range-btn.active{color:var(--bg-primary);background:var(--accent)}.time-range-custom{display:flex;gap:8px;align-items:center}.time-range-field{display:flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;color:var(--text-dim)}.time-range-field input[type=datetime-local]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg-card);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:3px 6px;font-family:var(--font-mono);font-size:11px;color-scheme:dark;cursor:pointer;transition:border-color .15s}.time-range-field input[type=datetime-local]:hover,.time-range-field input[type=datetime-local]:focus{border-color:var(--accent-blue);outline:none}.charts-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--text-dim);font-size:14px}.charts-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}.chart-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px 10px;transition:border-color .2s}.chart-card:hover{border-color:#ffffff1f}.chart-card-header{display:flex;align-items:center;gap:8px;margin-bottom:10px}.chart-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.chart-label{font-size:12px;font-weight:500;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em}.chart-latest{margin-left:auto;font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--text)}.chart-no-data{display:flex;align-items:center;justify-content:center;height:160px;font-size:12px;color:var(--text-dim)}.chart-tooltip{background:var(--bg-card-alt);border:1px solid var(--border);border-radius:6px;padding:6px 10px;display:flex;flex-direction:column;gap:2px;font-family:var(--font-mono);box-shadow:0 4px 16px #0006}.chart-tooltip-time{font-size:10px;color:var(--text-dim)}.chart-tooltip-val{font-size:13px;font-weight:500;color:var(--text)}.recharts-cartesian-axis-tick-value{fill:var(--text-dim)!important}@media(max-width:640px){.app-header{padding:10px 12px;gap:8px}.logo span{display:none}.charts-section{padding:12px}.charts-grid{grid-template-columns:1fr}.map-section{flex:0 0 35%;min-height:200px}.charts-header{flex-direction:column;align-items:flex-start}.charts-header-right{width:100%;flex-direction:column;align-items:stretch}.time-range-wrapper{align-items:stretch}.device-inline-select{font-size:14px;max-width:180px}.time-range-selector{width:100%}.time-range-btn{flex:1;padding:6px 4px;text-align:center}.time-range-custom{flex-direction:column;gap:4px}.time-range-field{width:100%}.time-range-field input[type=datetime-local]{flex:1}}.charts-section::-webkit-scrollbar{width:6px}.charts-section::-webkit-scrollbar-track{background:transparent}.charts-section::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:3px}.charts-section::-webkit-scrollbar-thumb:hover{background:#fff3}
