:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--font-sans:Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-mono:source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;--color-bg-app:#1a2332;--color-bg-deep:#1a2332;--color-bg-base:#1a2332;--color-bg-elevated:#232d3d;--color-bg-panel:#283445;--color-bg-muted:#2e3a4c;--color-bg-card:#243041;--color-bg-card-2:#1e2838;--color-text-primary:#f4f7fb;--color-text-secondary:#cde0ef;--color-text-muted:#97a5b5;--color-text-muted-2:#7d8798;--color-border:#ffffff1a;--color-border-strong:#ffffff24;--color-chip:#ffffff14;--color-primary:#31d17c;--color-primary-hover:#4fe095;--color-primary-dark:#0e8d4f;--color-success:#31d17c;--color-success-soft:#31d17c24;--color-warning:#ffb547;--color-warning-soft:#ffb54724;--color-danger:#ff5d6c;--color-danger-soft:#ff5d6c24;--color-info:#4e9cff;--color-info-soft:#4e9cff24;--color-cyan:#7fe0ff;--color-cyan-soft:#7fe0ff24;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--radius-sm:10px;--radius-md:14px;--radius-lg:18px;--radius-xl:24px;--radius-pill:999px;--shadow-sm:0 6px 18px #00000047;--shadow-md:0 14px 40px #00000059;--shadow-card-hover:0 18px 44px #00000073;--focus-ring:0 0 0 3px #31d17c59;--glow-primary-soft:0 0 22px #31d17c38;--color-on-primary:#0b1a12;--color-on-primary-muted:#e8fff0;--color-primary-soft:#31d17c29;--color-primary-soft-subtle:#31d17c14;--color-primary-border:#31d17c73;--color-primary-border-subtle:#31d17c59;--color-display-success:#6ee7a0;--color-display-warning:#ffd666;--color-display-danger:#ff9a9c;--color-display-info:#8bb4ff;--color-display-unknown:#e0c08a;--color-chip-success-fg:#52dc91;--color-chip-success-bg:#52dc911f;--color-chip-info-fg:#78a6ff;--color-chip-info-fg-muted:#a9c4ff;--color-chip-info-bg:#78a6ff1f;--color-chip-warning-fg:#f1b94f;--color-chip-warning-bg:#f1b94f1f;--color-chip-danger-fg:#ff6b68;--color-chip-danger-bg:#ff6b681f;--color-chip-neutral-fg:#bec8d4;--color-chip-neutral-bg:#202934d9;--color-pill-success-bg:#2ecc712e;--color-pill-info-bg:#4f8cff2e;--color-pill-warning-bg:#ffc10729;--color-pill-danger-bg:#ff4d4f29;--color-dot-online:#2ecc71;--color-dot-offline:#ff4d4f;--color-overlay:#0000008c;--color-shadow-popover:#00000059;--color-surface-hover:#ffffff14;--color-surface-hover-subtle:#ffffff05;--color-surface-inset:#00000040;--color-text-address:#c5ced8;--color-text-address-muted:#c8cfcb;--color-link-data:#6fcfff;--color-notice-bg:#171713;--color-notice-border:#493e28;--color-danger-border:#ff6b6859;--color-danger-border-strong:#ff6b688c;--color-danger-hover-bg:#ff6b6814;--color-accent:#6ea8fe;--color-chart-grid:#2434538c;--color-chart-blue:#5794f2;--color-chart-green:#73bf69;--color-chart-amber:#f2cc0c;--color-chart-orange:#ff9830;--color-trend-offline:#ff6b6b;--color-trend-offline-fill:#ff6b6b33;--color-trend-error:#ffa94d;--color-trend-error-fill:#ffa94d33;--color-trend-stale:#4dabf7;--color-trend-stale-fill:#4dabf733;--color-marker-online:#2ecc71;--color-marker-offline:#ff4d4f;--color-marker-charging:#4dabf7;--color-marker-maintenance:#ffd666;--color-marker-unknown:#9aa5b1;--color-marker-outline:#fff;--color-map-canvas:#1a2332;--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-spring:cubic-bezier(.34, 1.15, .64, 1);--duration-fast:.2s;--duration-normal:.36s;--duration-slow:.5s;--bp-mobile-max:767px;--bp-tablet-min:768px;--bp-desktop-min:1180px;--content-max-mobile:430px;--content-max-tablet:720px;--content-max-desktop:1040px;--tap-target-min:44px}:root[data-theme=midnight]{--color-bg-app:#070a12;--color-bg-deep:#070a12;--color-bg-base:#0a101b;--color-bg-elevated:#0e1624;--color-bg-panel:#111a29;--color-bg-muted:#172235;--color-bg-card:#0e1624;--color-bg-card-2:#0a111d;--color-text-primary:#f4f7ff;--color-text-secondary:#c0ccdc;--color-text-muted:#91a0b5;--color-text-muted-2:#748398;--color-border:#9db5d629;--color-border-strong:#9db5d640;--color-chip:#9db5d61a;--color-primary:#53e6b3;--color-primary-hover:#74efc2;--color-primary-dark:#168f6b;--color-success:#53e6b3;--color-success-soft:#53e6b324;--color-warning:#ffd166;--color-warning-soft:#ffd16624;--color-danger:#ff7185;--color-danger-soft:#ff718524;--color-info:#62a8ff;--color-info-soft:#62a8ff24;--color-cyan:#7bdcff;--color-cyan-soft:#7bdcff24;--color-on-primary:#06140f;--color-on-primary-muted:#eafff7;--color-primary-soft:#53e6b329;--color-primary-soft-subtle:#53e6b314;--color-primary-border:#53e6b380;--color-primary-border-subtle:#53e6b35c;--color-display-success:#6ff0c0;--color-display-warning:#ffd978;--color-display-danger:#ff8e9f;--color-display-info:#80b9ff;--color-display-unknown:#e9c98e;--color-chip-success-fg:#6ff0c0;--color-chip-success-bg:#53e6b321;--color-chip-info-fg:#80b9ff;--color-chip-info-fg-muted:#afceff;--color-chip-info-bg:#62a8ff21;--color-chip-warning-fg:#ffd978;--color-chip-warning-bg:#ffd16621;--color-chip-danger-fg:#ff8e9f;--color-chip-danger-bg:#ff718521;--color-chip-neutral-fg:#c0ccdc;--color-chip-neutral-bg:#172235e0;--color-pill-success-bg:#53e6b329;--color-pill-info-bg:#62a8ff29;--color-pill-warning-bg:#ffd16629;--color-pill-danger-bg:#ff718529;--color-dot-online:#53e6b3;--color-dot-offline:#ff7185;--color-text-address:#c0ccdc;--color-text-address-muted:#b4c1d2;--color-link-data:#7bdcff;--color-notice-bg:#15140e;--color-notice-border:#52482f;--color-danger-border:#ff718561;--color-danger-border-strong:#ff718594;--color-danger-hover-bg:#ff71851a;--color-accent:#62a8ff;--shadow-sm:0 6px 18px #0000005c;--shadow-md:0 14px 40px #00000075;--shadow-card-hover:0 18px 44px #0000008c;--focus-ring:0 0 0 3px #53e6b357;--glow-primary-soft:0 0 20px #53e6b333;--color-chart-grid:#80a0cc40;--color-chart-blue:#62a8ff;--color-chart-green:#53e6b3;--color-chart-amber:#ffd166;--color-chart-orange:#ff9f68;--color-trend-offline:#ff7185;--color-trend-offline-fill:#ff718533;--color-trend-error:#ffd166;--color-trend-error-fill:#ffd16633;--color-trend-stale:#62a8ff;--color-trend-stale-fill:#62a8ff33;--color-marker-online:#53e6b3;--color-marker-offline:#ff7185;--color-marker-charging:#62a8ff;--color-marker-maintenance:#ffd166;--color-marker-unknown:#91a0b5;--color-marker-outline:#f4f7ff;--color-map-canvas:#070a12}@keyframes fade-in-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes content-enter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes popover-in{0%{opacity:0;transform:translateY(-6px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes soft-fade-in{0%{opacity:0}to{opacity:1}}@keyframes analytics-spin{to{transform:rotate(360deg)}}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{min-height:100%}body{font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--color-bg-deep);color:var(--color-text-primary);line-height:1.5;overflow-x:hidden}code{font-family:var(--font-mono)}a{color:inherit;text-decoration:none}button,input,select,textarea{font-family:inherit}a,button,[role=button],summary{transition:color var(--duration-fast) var(--ease-out), background-color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out), opacity var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out)}input,select,textarea{transition:color var(--duration-fast) var(--ease-out), background-color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out)}:focus:not(:focus-visible){outline:none}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.api-error-banner{background:var(--color-warning-soft,#ffb54724);color:var(--color-text-primary,#e8edf5);border:1px solid #ffb54759;border-radius:12px;justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:12px;padding:.75rem 1rem;font-size:.9rem;display:flex;box-shadow:0 2px 12px #0000001f}.api-error-banner__body{flex:1;min-width:0}.api-error-banner__title{margin-bottom:.15rem;font-size:.9rem;font-weight:600;display:block}.api-error-banner__text{-webkit-line-clamp:2;color:var(--color-text-muted,#9aa7bd);-webkit-box-orient:vertical;font-size:.85rem;line-height:1.35;display:-webkit-box;overflow:hidden}.api-error-banner__dismiss{width:2rem;height:2rem;color:inherit;cursor:pointer;background:#ffffff14;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:1.25rem;line-height:1;display:flex}.api-error-banner__dismiss:hover{background:#ffffff24}.topbar{flex-shrink:0;justify-content:space-between;align-items:center;margin-bottom:16px;padding-top:0;display:flex}.topbar-brand{min-width:0;color:inherit;cursor:pointer;align-items:center;gap:10px;text-decoration:none;display:flex}.topbar-brand:hover .topbar-brand-text h1{color:var(--color-text-primary)}.topbar-brand:focus-visible{box-shadow:var(--focus-ring,0 0 0 2px #31d17c73);border-radius:12px;outline:none}.topbar-logo{object-fit:cover;width:38px;height:38px;box-shadow:none;background:0 0;border-radius:10px;flex-shrink:0;display:block;overflow:hidden}.topbar-brand-text{min-width:0}.topbar-brand-text h1{letter-spacing:.02em;color:var(--color-text-primary);white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:15px;font-weight:800;line-height:1.1;overflow:hidden}.topbar-brand-text p{color:var(--color-text-muted);margin:3px 0 0;font-size:12px}.topbar-actions{flex-shrink:0;align-items:center;display:flex;position:relative}.topbar-icon-btn{width:var(--tap-target-min);height:var(--tap-target-min);border:1px solid var(--color-border);color:var(--color-text-primary);cursor:pointer;box-shadow:none;transition:border-color var(--duration-fast) var(--ease-out), background-color var(--duration-fast) var(--ease-out);background:#ffffff0a;border-radius:14px;place-items:center;font-size:14px;font-weight:700;display:grid}.topbar-icon-btn:hover{border-color:var(--color-border-strong);background:#ffffff12}.topbar-icon-btn:focus-visible{box-shadow:var(--focus-ring);outline:none}.topbar-menu{background:var(--color-bg-panel);border:1px solid var(--color-border);border-radius:var(--radius-md);min-width:min(280px,100vw - 32px);box-shadow:var(--shadow-md);z-index:50;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);transform-origin:100% 0;animation:popover-in var(--duration-normal) var(--ease-out) both;padding:8px;position:absolute;top:calc(100% + 8px);right:0}.topbar-burger{flex-direction:column;justify-content:center;gap:5px;width:18px;height:14px;display:flex}.topbar-burger span{width:100%;height:2px;transition:transform var(--duration-fast) var(--ease-out), opacity var(--duration-fast) var(--ease-out);background:currentColor;border-radius:999px;display:block}.topbar-burger.is-open span:first-child{transform:translateY(7px)rotate(45deg)}.topbar-burger.is-open span:nth-child(2){opacity:0}.topbar-burger.is-open span:nth-child(3){transform:translateY(-7px)rotate(-45deg)}.topbar-menu-header{border-bottom:1px solid var(--color-border);align-items:center;gap:10px;margin-bottom:6px;padding:8px 10px 12px;display:flex}.topbar-menu-avatar{border:1px solid var(--color-border);background:#ffffff0a;border-radius:12px;flex-shrink:0;place-items:center;width:36px;height:36px;font-size:13px;font-weight:700;display:grid}.topbar-menu-nav{border-bottom:1px solid var(--color-border);flex-direction:column;gap:2px;margin-bottom:6px;padding-bottom:6px;display:flex}.topbar-menu-nav-item{align-items:center;gap:10px;text-decoration:none;display:flex}.topbar-menu-nav-item.is-active{color:#e8fff0;background:#31d17c29}.topbar-menu-nav-icon{width:20px;height:20px;color:inherit;display:inline-flex}.topbar-menu-nav-icon svg{width:20px;height:20px;display:block}.topbar-menu-name{color:var(--color-text-primary);font-size:.95rem;font-weight:700}.topbar-menu-email{color:var(--color-text-muted);word-break:break-all;margin-top:2px;font-size:.8rem}.topbar-menu-item{text-align:left;width:100%;color:var(--color-text-primary);transition:background-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);cursor:pointer;transition:background-color var(--duration-fast) var(--ease-out);background:0 0;border:0;border-radius:10px;padding:12px;font-size:.9rem;display:block}@media (width<=420px){.topbar-brand-text p{display:none}.topbar-brand-text h1{font-size:14px}.topbar-logo{width:34px;height:34px}}@media (width>=1180px){.topbar{margin-bottom:18px}.topbar-brand-text h1{font-size:16px}}.topbar-menu-item:hover{background:#ffffff0d}.topbar-menu-item.topbar-menu-nav-item{display:flex}.topbar-menu-item-danger{color:var(--color-danger)}.app-layout{justify-content:center;width:100%;min-height:100vh;display:flex}.app-shell{width:100%;max-width:var(--content-max-mobile);min-height:100dvh;padding:calc(env(safe-area-inset-top,0px) + 10px) 16px calc(env(safe-area-inset-bottom,0px) + 16px);box-sizing:border-box;flex-direction:column;display:flex;position:relative}.content-area{flex:1;min-width:0;padding:0 0 12px}.content-route{min-width:0;animation:soft-fade-in var(--duration-normal) var(--ease-out) both}.content-fallback{min-height:28vh;color:var(--color-text-muted);animation:soft-fade-in var(--duration-normal) var(--ease-out) both;justify-content:center;align-items:center;font-size:.9rem;display:flex}@media (prefers-reduced-motion:reduce){.content-route,.content-fallback{animation:none}}@media (width>=768px){.app-shell{max-width:var(--content-max-tablet);padding:calc(env(safe-area-inset-top,0px) + 16px) 20px calc(env(safe-area-inset-bottom,0px) + 20px)}}@media (width>=1180px){.app-shell{max-width:var(--content-max-desktop);padding-inline:24px}}.page{width:100%}.page-title{margin-bottom:var(--space-6);color:var(--color-text-primary);letter-spacing:-.02em;font-size:clamp(1.5rem,2vw,1.85rem);font-weight:700;line-height:1.25}.page-header{justify-content:space-between;align-items:center;gap:var(--space-3);margin-bottom:var(--space-6);flex-wrap:wrap;display:flex}.page-actions{gap:var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.card{background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);transition:box-shadow var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out)}.app-error-boundary{place-content:center;justify-items:center;gap:var(--space-4);min-height:100vh;padding:var(--space-6);background:var(--color-bg-base);color:var(--color-text-primary);text-align:center;display:grid}.app-error-boundary h1,.app-error-boundary p{margin:0}.app-error-boundary p{max-width:520px;color:var(--color-text-muted)}@media (hover:hover) and (pointer:fine){.card:hover{box-shadow:var(--shadow-card-hover);border-color:#31d17c59;transform:translateY(-2px)}}.btn{justify-content:center;align-items:center;gap:var(--space-2);min-height:var(--tap-target-min);border-radius:var(--radius-sm);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background-color var(--duration-normal) var(--ease-out), color var(--duration-normal) var(--ease-out), border-color var(--duration-normal) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-spring);border:1px solid #0000;padding:.5rem 1rem;font-size:.9rem;font-weight:600;display:inline-flex}.btn:active{transform:translateY(1px)}.btn:focus,.btn:focus-visible{outline:none}.btn:focus-visible{box-shadow:var(--focus-ring)}.btn-primary{background:var(--color-primary);color:#07120c}.btn-primary:hover{background:var(--color-primary-hover);box-shadow:var(--glow-primary-soft)}.btn-primary:active{box-shadow:none}.btn-secondary{background:var(--color-bg-muted);color:var(--color-text-primary);border-color:var(--color-border)}.btn-secondary:hover{background:var(--color-bg-elevated);border-color:#31d17c59}.btn-outline{border-color:var(--color-primary);color:var(--color-primary);background:0 0}.btn-outline:hover{background:#31d17c29;box-shadow:0 0 0 1px #31d17c40}.btn-link{color:var(--color-primary);padding:var(--space-2);transition:color var(--duration-fast) var(--ease-out);background:0 0;border:none;text-decoration:underline}.btn-link:hover{color:var(--color-primary-hover)}.btn-icon{cursor:pointer;padding:var(--space-2);border-radius:var(--radius-sm);color:var(--color-text-secondary);transition:background-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);background:0 0;border:none}.btn-icon:hover{background:var(--color-bg-muted);color:var(--color-text-primary)}.btn-icon:focus-visible{box-shadow:var(--focus-ring);outline:none}.btn-small{min-height:36px;padding:.35rem .65rem;font-size:.82rem}.form-group{margin-bottom:var(--space-4)}.form-group label{margin-bottom:var(--space-2);color:var(--color-text-primary);font-weight:600;display:block}.form-group input,.form-group select,.form-group textarea,.input{border:1px solid var(--color-border);border-radius:var(--radius-sm);width:100%;color:var(--color-text-primary);background:var(--color-bg-muted);transition:border-color var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out);padding:.65rem .8rem;font-size:1rem}.form-group input:hover,.form-group select:hover,.form-group textarea:hover,.input:hover{border-color:#31d17c47}.form-group input:focus,.form-group select:focus,.form-group textarea:focus,.input:focus{border-color:var(--color-primary);box-shadow:var(--focus-ring);outline:none}.hint{color:var(--color-text-secondary);font-size:.9rem;line-height:1.45}.message{border-radius:var(--radius-sm);padding:.6rem .75rem;font-size:.9rem}.message-ok{color:var(--color-success);background:#30c77724}.message-error{color:var(--color-danger);background:#ff6b6b24}.loading{text-align:center;color:var(--color-text-secondary);padding:3rem}.table-container{background:var(--color-bg-elevated);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);border:1px solid var(--color-border);transition:box-shadow var(--duration-normal) var(--ease-out), border-color var(--duration-normal) var(--ease-out);overflow:auto hidden}.data-table{border-collapse:collapse;width:100%}.data-table thead{background:var(--color-bg-muted);border-bottom:1px solid var(--color-border)}.data-table th{text-align:left;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.045em;padding:.95rem;font-size:.78rem;font-weight:700}.data-table td{border-bottom:1px solid var(--color-border);color:var(--color-text-primary);padding:.95rem}.data-table tbody tr{transition:background-color var(--duration-fast) var(--ease-out)}.data-table tbody tr:hover{background:var(--color-bg-muted)}.empty-state{text-align:center;color:var(--color-text-secondary);padding:3rem}.monospace{font-family:var(--font-mono);font-size:.85rem}.modal-close{-webkit-tap-highlight-color:transparent}.modal-close:focus{outline:none}.modal-close:focus-visible{box-shadow:none;outline:none}
