:root{--color-primary:#0abf53;--color-primary-hover:#099e46;--color-primary-light:#e8f9ef;--color-text-primary:#00112c;--color-text-secondary:#687282;--color-text-muted:#99a5b4;--color-bg-primary:#fff;--color-bg-secondary:#f7f8fa;--color-bg-tertiary:#eef1f4;--color-border:#e6e9ed;--color-border-hover:#cdd3db;--color-success:#0abf53;--color-error:#e22c2c;--color-warning:#f5a623;--color-info:#0070e0;--shadow-sm:0 1px 2px #00112c0a;--shadow-md:0 2px 8px #00112c14;--shadow-lg:0 4px 16px #00112c1f;--space-xs:4px;--space-sm:8px;--space-md:16px;--space-lg:24px;--space-xl:32px;--space-2xl:48px;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--font-family:-apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", sans-serif;--font-mono:"SF Mono", "Monaco", "Inconsolata", "Fira Code", monospace}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-family);color:var(--color-text-primary);background:var(--color-bg-secondary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px;line-height:1.5}.app{background:var(--color-bg-secondary);min-height:100vh}.sidebar{display:none}.sidebar-header{padding:var(--space-lg);border-bottom:1px solid var(--color-border)}.logo{align-items:center;gap:var(--space-sm);text-decoration:none;display:flex}.logo-icon{background:var(--color-primary);border-radius:var(--radius-md);color:#fff;justify-content:center;align-items:center;width:32px;height:32px;font-size:16px;font-weight:700;display:flex}.logo-text{color:var(--color-text-primary);letter-spacing:-.5px;font-size:18px;font-weight:700}.logo-subtitle{color:var(--color-text-muted);margin-top:2px;font-size:11px}.sidebar-nav{padding:var(--space-md);flex:1;overflow-y:auto}.nav-section{margin-bottom:var(--space-lg)}.nav-section-title{text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);padding:var(--space-sm) var(--space-sm);margin-bottom:var(--space-xs);font-size:11px;font-weight:600}.nav-item{align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);color:var(--color-text-secondary);cursor:pointer;text-align:left;background:0 0;border:none;width:100%;font-size:14px;font-weight:500;transition:all .15s;display:flex}.nav-item:hover{background:var(--color-bg-secondary);color:var(--color-text-primary)}.nav-item.active{background:var(--color-primary-light);color:var(--color-primary)}.nav-item-icon{justify-content:center;align-items:center;width:20px;height:20px;font-size:16px;display:flex}.sidebar-footer{padding:var(--space-md);border-top:1px solid var(--color-border)}.mode-badge{align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-bg-secondary);border-radius:var(--radius-md);color:var(--color-text-secondary);font-size:12px;display:flex}.mode-indicator{background:var(--color-primary);border-radius:50%;width:8px;height:8px}.exit-btn{width:100%;margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text-secondary);cursor:pointer;background:0 0;font-size:13px;transition:all .15s;display:block}.exit-btn:hover{border-color:var(--color-error);color:var(--color-error)}.main-content{flex:1;min-height:100vh}.page-header{background:var(--color-bg-primary);border-bottom:1px solid var(--color-border);padding:var(--space-lg) var(--space-xl);z-index:50;position:sticky;top:0}.page-header-content{justify-content:space-between;align-items:center;max-width:1400px;margin:0 auto;display:flex}.page-title{color:var(--color-text-primary);font-size:20px;font-weight:600}.page-subtitle{color:var(--color-text-secondary);margin-top:2px;font-size:13px}.page-actions{gap:var(--space-sm);display:flex}.page-body{padding:var(--space-xl);max-width:1400px;margin:0 auto}.welcome-container{background:linear-gradient(135deg, var(--color-bg-secondary) 0%, var(--color-bg-tertiary) 100%);justify-content:center;align-items:center;min-height:100vh;display:flex}.welcome-card-centered{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-xl);padding:var(--space-2xl);text-align:center;width:100%;max-width:400px;box-shadow:var(--shadow-lg);cursor:pointer;transition:all .2s}.welcome-card-centered:hover{transform:translateY(-4px);box-shadow:0 8px 32px #00112c26}.welcome-card-centered .welcome-icon{margin-bottom:var(--space-md);font-size:48px}.welcome-card-centered h2{color:var(--color-text-primary);margin-bottom:var(--space-xs);font-size:28px;font-weight:700}.welcome-card-centered p{color:var(--color-text-secondary);margin-bottom:var(--space-xs);font-size:14px}.welcome-card-centered .welcome-subtitle{color:var(--color-text-muted);margin-bottom:var(--space-lg);font-size:13px}.welcome-card-centered .btn{margin-top:var(--space-md)}.welcome-header{background:var(--color-bg-primary);border-bottom:1px solid var(--color-border);padding:var(--space-lg) var(--space-xl)}.welcome-header-content{justify-content:space-between;align-items:center;max-width:1200px;margin:0 auto;display:flex}.welcome-body{padding:var(--space-2xl);flex:1;justify-content:center;align-items:center;display:flex}.welcome-grid{gap:var(--space-xl);grid-template-columns:repeat(auto-fit,minmax(340px,1fr));width:100%;max-width:800px;display:grid}.welcome-card{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-xl);padding:var(--space-xl);cursor:pointer;transition:all .2s}.welcome-card:hover{border-color:var(--color-primary);box-shadow:var(--shadow-lg)}.welcome-card-icon{background:var(--color-primary-light);border-radius:var(--radius-lg);width:48px;height:48px;margin-bottom:var(--space-md);justify-content:center;align-items:center;font-size:24px;display:flex}.welcome-card h2{color:var(--color-text-primary);margin-bottom:var(--space-xs);font-size:18px;font-weight:600}.welcome-card p{color:var(--color-text-secondary);margin-bottom:var(--space-md);font-size:14px}.welcome-card ul{margin-bottom:var(--space-lg);list-style:none}.welcome-card li{color:var(--color-text-secondary);padding:var(--space-xs) 0;padding-left:var(--space-lg);font-size:13px;position:relative}.welcome-card li:before{content:"✓";color:var(--color-primary);font-weight:600;position:absolute;left:0}.card{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-lg)}.card-header{margin-bottom:var(--space-md);padding-bottom:var(--space-md);border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;display:flex}.card-title{color:var(--color-text-primary);font-size:16px;font-weight:600}.card-subtitle{color:var(--color-text-secondary);font-size:13px}.container{background:var(--color-bg-primary);border-radius:var(--radius-xl);box-shadow:var(--shadow-sm);padding:var(--space-xl)}.btn{justify-content:center;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);cursor:pointer;border:none;font-family:inherit;font-size:14px;font-weight:500;transition:all .15s;display:inline-flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary{background:var(--color-bg-secondary);color:var(--color-text-primary);border:1px solid var(--color-border)}.btn-secondary:hover:not(:disabled){background:var(--color-bg-tertiary);border-color:var(--color-border-hover)}.btn-danger{color:var(--color-error);background:#fef2f2;border:1px solid #fecaca}.btn-danger:hover:not(:disabled){background:#fee2e2}.btn-small{padding:var(--space-xs) var(--space-sm);font-size:13px}.btn-tiny{border-radius:var(--radius-sm);padding:2px 6px;font-size:12px}.btn-large{padding:var(--space-md) var(--space-lg);font-size:15px}.btn-add{background:var(--color-primary);color:#fff}.btn-add:hover:not(:disabled){background:var(--color-primary-hover)}.refresh-btn{background:var(--color-bg-secondary);color:var(--color-text-primary);border:1px solid var(--color-border);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);cursor:pointer;font-size:13px;font-weight:500;transition:all .15s}.refresh-btn:hover:not(:disabled){background:var(--color-bg-tertiary);border-color:var(--color-border-hover)}.refresh-btn:disabled{opacity:.5;cursor:not-allowed}.form{gap:var(--space-md);flex-direction:column;display:flex}.form-row{gap:var(--space-md);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.form-group{gap:var(--space-xs);flex-direction:column;display:flex}.form-group label{color:var(--color-text-primary);font-size:13px;font-weight:500}.form-group input,.form-group select,.form-group textarea{padding:var(--space-sm) var(--space-md);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-primary);color:var(--color-text-primary);font-family:inherit;font-size:14px;transition:border-color .15s}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light);outline:none}.form-group input::placeholder{color:var(--color-text-muted)}.form-row-inline{gap:var(--space-sm);flex-wrap:wrap;align-items:flex-end;display:flex}.form-row-inline input,.form-row-inline select{min-width:100px;padding:var(--space-sm);border:1px solid var(--color-border);border-radius:var(--radius-md);flex:1;font-size:13px}.form-field{flex-direction:column;gap:2px;display:flex}.form-field label{text-transform:uppercase;letter-spacing:.3px;color:var(--color-text-muted);font-size:11px}.form-field input,.form-field select{padding:var(--space-sm);border:1px solid var(--color-border);border-radius:var(--radius-sm);font-size:13px}.form-field-button{align-items:flex-end;display:flex}.add-evse-form,.add-connector-form,.edit-form{background:var(--color-bg-secondary);padding:var(--space-md);border-radius:var(--radius-md);margin-bottom:var(--space-md)}.edit-form-inline{gap:var(--space-sm);background:var(--color-bg-secondary);padding:var(--space-sm);border-radius:var(--radius-sm);margin-bottom:var(--space-sm);flex-wrap:wrap;align-items:center;display:flex}.connector-form-grid{gap:var(--space-sm);grid-template-columns:repeat(auto-fit,minmax(80px,1fr));display:grid}.button-row{gap:var(--space-sm);margin-top:var(--space-sm);display:flex}.error{color:var(--color-error);padding:var(--space-md);border-radius:var(--radius-md);border-left:3px solid var(--color-error);margin:var(--space-md) 0;background:#fef2f2;font-size:14px}.error-small{color:var(--color-error);margin-top:var(--space-xs);font-size:12px}.success{background:var(--color-primary-light);color:#166534;padding:var(--space-md);border-radius:var(--radius-md);border-left:3px solid var(--color-primary);margin:var(--space-md) 0;font-size:14px}.info-box{padding:var(--space-md);border-radius:var(--radius-md);border-left:3px solid var(--color-info);margin:var(--space-md) 0;background:#f0f9ff}.info-box h4{color:var(--color-info);margin-bottom:var(--space-xs);font-size:14px;font-weight:600}.info-box ul{margin-left:var(--space-lg);color:var(--color-text-secondary);font-size:13px}.info-box code{background:var(--color-bg-primary);border-radius:var(--radius-sm);font-family:var(--font-mono);color:var(--color-info);padding:2px 6px;font-size:12px}.stats-grid{gap:var(--space-md);margin-bottom:var(--space-xl);grid-template-columns:repeat(auto-fit,minmax(140px,1fr));display:grid}.stat-card{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-lg);text-align:center;transition:all .15s}.stat-card:hover{border-color:var(--color-border-hover);box-shadow:var(--shadow-md)}.stat-card.highlight{background:var(--color-primary);border-color:var(--color-primary)}.stat-icon{margin-bottom:var(--space-sm);opacity:.8;font-size:24px}.stat-value{color:var(--color-text-primary);font-size:32px;font-weight:700;line-height:1}.stat-card.highlight .stat-value{color:#fff}.stat-label{color:var(--color-text-secondary);margin-top:var(--space-xs);text-transform:uppercase;letter-spacing:.3px;font-size:12px}.stat-card.highlight .stat-label{color:#ffffffd9}.location-grid{gap:var(--space-md);grid-template-columns:repeat(auto-fill,minmax(400px,1fr));display:grid}.location-card{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-lg);cursor:pointer;transition:all .15s}.location-card:hover{border-color:var(--color-primary);box-shadow:var(--shadow-md)}.location-card.selected{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.location-header{margin-bottom:var(--space-md);justify-content:space-between;align-items:flex-start;display:flex}.location-header h3{color:var(--color-text-primary);font-size:16px;font-weight:600}.evse-count{background:var(--color-bg-secondary);color:var(--color-text-secondary);border-radius:var(--radius-md);padding:4px 10px;font-size:12px;font-weight:500}.location-details{color:var(--color-text-secondary);margin-bottom:var(--space-md);font-size:13px}.location-details p{margin:var(--space-xs) 0}.location-details strong{color:var(--color-text-primary)}.detail-row{color:var(--color-text-secondary);margin-bottom:var(--space-xs);font-size:13px}.location-actions{gap:var(--space-sm);margin:var(--space-md) 0;padding-top:var(--space-md);border-top:1px solid var(--color-border);display:flex}.location-expanded{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--color-border)}.evse-section{margin-top:var(--space-md)}.evse-section-header{margin-bottom:var(--space-sm);justify-content:space-between;align-items:center;display:flex}.evse-section-header h4{color:var(--color-text-primary);font-size:14px;font-weight:600}.evse-list{gap:var(--space-sm);flex-direction:column;display:flex}.evse-item{background:var(--color-bg-secondary);border-radius:var(--radius-md);padding:var(--space-md)}.evse-header{margin-bottom:var(--space-sm);justify-content:space-between;align-items:center;display:flex}.evse-id{font-family:var(--font-mono);color:var(--color-text-primary);font-size:13px;font-weight:600}.evse-actions{gap:4px;display:flex}.floor{color:var(--color-text-muted);background:var(--color-bg-tertiary);border-radius:var(--radius-sm);padding:2px 6px;font-size:11px}.no-evses,.no-connectors{color:var(--color-text-muted);padding:var(--space-sm) 0;font-size:13px;font-style:italic}.status{border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.3px;padding:3px 8px;font-size:11px;font-weight:600}.status.available{background:var(--color-primary-light);color:#166534}.status.charging{color:#92400e;background:#fef3c7}.status.blocked,.status.inoperative,.status.outofservice{color:var(--color-error);background:#fef2f2}.status-badge{border-radius:var(--radius-sm);text-transform:uppercase;padding:3px 8px;font-size:11px;font-weight:600}.connectors-section{margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px dashed var(--color-border)}.connectors-header{margin-bottom:var(--space-sm);justify-content:space-between;align-items:center;display:flex}.connectors-label{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.3px;font-size:12px}.connectors{flex-direction:column;gap:4px;display:flex}.connector-item{align-items:center;gap:var(--space-sm);background:var(--color-bg-primary);padding:var(--space-sm);border-radius:var(--radius-sm);font-size:13px;display:flex}.connector-id{font-family:var(--font-mono);color:var(--color-text-primary);font-size:12px;font-weight:600}.connector-type{color:#4338ca;border-radius:var(--radius-sm);background:#e0e7ff;padding:2px 6px;font-size:11px;font-weight:500}.connector-format,.power{color:var(--color-text-muted);font-size:11px}.connector-actions{gap:4px;margin-left:auto;display:flex}.tariff-badge{color:#92400e;border-radius:var(--radius-sm);background:#fef3c7;padding:2px 6px;font-size:10px}.tariff-manager{background:var(--color-bg-primary)}.tariff-form{margin-bottom:var(--space-xl)}.tariff-form h3{margin-bottom:var(--space-md);font-size:16px;font-weight:600}.tariff-form h4{color:var(--color-text-secondary);margin:var(--space-lg) 0 var(--space-sm) 0;font-size:13px;font-weight:600}.tariff-list{gap:var(--space-md);grid-template-columns:repeat(auto-fill,minmax(280px,1fr));display:grid}.tariff-card{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-md)}.tariff-header{margin-bottom:var(--space-sm);justify-content:space-between;align-items:center;display:flex}.tariff-header h3{color:var(--color-text-primary);font-size:15px;font-weight:600}.tariff-type{color:#4338ca;border-radius:var(--radius-sm);text-transform:uppercase;background:#e0e7ff;padding:3px 8px;font-size:10px;font-weight:600}.tariff-details{color:var(--color-text-secondary);font-size:13px}.tariff-details p{margin:4px 0}.price-components{gap:var(--space-xs);margin-top:var(--space-sm);flex-wrap:wrap;display:flex}.price-badge{background:var(--color-primary-light);color:#166534;border-radius:var(--radius-sm);padding:3px 8px;font-size:12px}.tariff-actions{gap:var(--space-sm);margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--color-border);display:flex}.log-viewer{background:var(--color-bg-primary)}.log-viewer-header{margin-bottom:var(--space-md);justify-content:space-between;align-items:center;gap:var(--space-md);flex-wrap:wrap;display:flex}.log-viewer-header h2{font-size:16px;font-weight:600}.log-controls{gap:var(--space-sm);flex-wrap:wrap;align-items:center;display:flex}.filter-input,.filter-select{padding:var(--space-sm);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-primary);font-size:13px}.auto-refresh-label{color:var(--color-text-secondary);align-items:center;gap:4px;font-size:13px;display:flex}.log-stats{color:var(--color-text-muted);margin-bottom:var(--space-md);font-size:12px}.log-list{gap:var(--space-sm);flex-direction:column;display:flex}.log-entry{border:1px solid var(--color-border);border-radius:var(--radius-md);transition:border-color .15s;overflow:hidden}.log-entry:hover{border-color:var(--color-border-hover)}.log-entry.expanded{border-color:var(--color-primary)}.log-entry.error-entry{border-color:#fecaca}.log-entry-header{align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);cursor:pointer;background:var(--color-bg-secondary);transition:background .15s;display:flex}.log-entry-header:hover{background:var(--color-bg-tertiary)}.log-entry.error-entry .log-entry-header{background:#fef2f2}.log-method{border-radius:var(--radius-sm);color:#fff;text-align:center;min-width:50px;padding:3px 8px;font-size:11px;font-weight:600}.log-path{font-family:var(--font-mono);color:var(--color-text-primary);flex:1;font-size:13px}.log-status{font-size:13px;font-weight:600}.log-status.success{color:var(--color-primary)}.log-status.error{color:var(--color-error)}.log-duration{color:var(--color-text-muted);font-size:12px}.log-timestamp,.log-expand-icon{color:var(--color-text-muted);font-size:11px}.log-entry-details{padding:var(--space-md);border-top:1px solid var(--color-border);background:var(--color-bg-primary)}.log-detail-row{gap:var(--space-sm);margin-bottom:var(--space-sm);font-size:13px;display:flex}.log-detail-row code{background:var(--color-bg-secondary);border-radius:var(--radius-sm);padding:2px 6px;font-size:12px}.log-section{margin-top:var(--space-md)}.log-section h4{color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.3px;margin-bottom:var(--space-sm);font-size:12px;font-weight:600}.log-section.error-section{padding:var(--space-md);border-radius:var(--radius-md);background:#fef2f2}.json-viewer{color:#e2e8f0;padding:var(--space-md);border-radius:var(--radius-md);font-family:var(--font-mono);white-space:pre-wrap;word-break:break-word;background:#1e293b;max-height:400px;font-size:12px;line-height:1.6;overflow:auto}.json-section{margin-top:var(--space-md)}.json-section h4{color:var(--color-text-secondary);text-transform:uppercase;margin-bottom:var(--space-sm);font-size:12px;font-weight:600}.session-manager{background:var(--color-bg-primary)}.sub-tab{padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);cursor:pointer;color:var(--color-text-secondary);background:0 0;border:none;font-size:13px;font-weight:500;transition:all .15s}.session-card,.cdr-card{border:1px solid var(--color-border);border-radius:var(--radius-md);margin-bottom:var(--space-sm);overflow:hidden}.session-header,.cdr-header{align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-md);cursor:pointer;background:var(--color-bg-secondary);transition:background .15s;display:flex}.session-header:hover,.cdr-header:hover{background:var(--color-bg-tertiary)}.session-id,.cdr-id{font-family:var(--font-mono);color:var(--color-text-primary);font-size:13px}.session-kwh,.cdr-energy{color:var(--color-primary);font-weight:600}.session-location,.cdr-date{color:var(--color-text-secondary);font-size:13px}.cdr-cost{color:var(--color-info);font-weight:600}.session-details,.cdr-details{padding:var(--space-md);border-top:1px solid var(--color-border)}.detail-grid{gap:var(--space-sm);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));font-size:13px;display:grid}.expand-icon{color:var(--color-text-muted);margin-left:auto;font-size:11px}.simulate-panel{padding:var(--space-md) 0}.start-session-form,.active-session-panel{max-width:480px}.start-session-form h3,.active-session-panel h3{margin-bottom:var(--space-lg);font-size:16px;font-weight:600}.session-info-card{background:var(--color-primary);border-radius:var(--radius-lg);padding:var(--space-lg);color:#fff;margin-bottom:var(--space-lg)}.session-info-header{margin-bottom:var(--space-lg);justify-content:space-between;align-items:center;display:flex}.session-info-header .session-id{color:#ffffffd9;font-size:13px}.session-metrics{gap:var(--space-xl);margin-bottom:var(--space-lg);display:flex}.metric{text-align:center}.metric-value{font-size:36px;font-weight:700;line-height:1;display:block}.metric-label{opacity:.85;margin-top:var(--space-xs);font-size:13px}.meter-controls{gap:var(--space-md);margin-bottom:var(--space-md);align-items:flex-end;display:flex}.meter-controls .form-group{flex:1}.meter-controls input{color:#fff;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);background:#ffffff26;border:1px solid #ffffff4d;width:100%}.meter-controls label{color:#ffffffd9;margin-bottom:var(--space-xs);font-size:13px;display:block}.quick-increments{gap:var(--space-sm);margin-bottom:var(--space-md);align-items:center;font-size:13px;display:flex}.quick-increments span{color:#ffffffb3}.quick-increments .btn-tiny{color:#fff;background:#ffffff26;border:1px solid #ffffff4d}.quick-increments .btn-tiny:hover{background:#ffffff40}.token-manager{background:var(--color-bg-primary)}.token-manager .section-header{margin-bottom:var(--space-lg);justify-content:space-between;align-items:center;display:flex}.header-actions{gap:var(--space-sm);display:flex}.auth-test-panel{background:var(--color-bg-secondary);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-lg)}.auth-test-panel h3{margin-bottom:var(--space-sm);font-size:14px;font-weight:600}.auth-test-form{gap:var(--space-sm);display:flex}.auth-test-form input{padding:var(--space-sm);border:1px solid var(--color-border);border-radius:var(--radius-md);flex:1}.auth-result{margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);font-size:13px}.token-form{background:var(--color-bg-secondary);border-radius:var(--radius-lg);padding:var(--space-lg);margin-bottom:var(--space-lg)}.token-form h3{margin-bottom:var(--space-md);font-size:15px;font-weight:600}.form-grid{gap:var(--space-md);margin-bottom:var(--space-md);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}.token-list{gap:var(--space-sm);flex-direction:column;display:flex}.token-card{border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.token-card.invalid{background:#fef2f2;border-color:#fecaca}.token-header{align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);cursor:pointer;background:var(--color-bg-secondary);transition:background .15s;display:flex}.token-header:hover{background:var(--color-bg-tertiary)}.token-card.invalid .token-header{background:#fef2f2}.token-type-badge{color:#1e40af;border-radius:var(--radius-sm);text-transform:uppercase;background:#dbeafe;padding:3px 8px;font-size:10px;font-weight:600}.token-uid{font-family:var(--font-mono);color:var(--color-text-primary);font-size:13px}.token-valid-badge{border-radius:var(--radius-sm);padding:3px 8px;font-size:10px;font-weight:600}.token-valid-badge.valid{background:var(--color-primary-light);color:#166534}.token-valid-badge.blocked{color:var(--color-error);background:#fecaca}.token-issuer{color:var(--color-text-muted);margin-left:auto;font-size:13px}.token-details{padding:var(--space-md);border-top:1px solid var(--color-border)}.token-actions{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--color-border)}.dashboard{background:var(--color-bg-primary)}.dashboard-header{margin-bottom:var(--space-lg);justify-content:space-between;align-items:center;display:flex}.dashboard-timestamp{align-items:center;gap:var(--space-sm);color:var(--color-text-muted);font-size:13px;display:flex}.api-stats{background:var(--color-bg-secondary);border-radius:var(--radius-lg);padding:var(--space-lg);margin-bottom:var(--space-lg)}.api-stats h3{margin-bottom:var(--space-md);font-size:14px;font-weight:600}.api-stats-grid{gap:var(--space-md);margin-bottom:var(--space-lg);grid-template-columns:repeat(auto-fit,minmax(100px,1fr));display:grid}.api-stat{text-align:center;padding:var(--space-md);background:var(--color-bg-primary);border-radius:var(--radius-md)}.api-stat.success .api-stat-value{color:var(--color-primary)}.api-stat.danger .api-stat-value{color:var(--color-error)}.api-stat-value{color:var(--color-text-primary);font-size:24px;font-weight:700}.api-stat-label{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.3px;margin-top:4px;font-size:11px}.breakdown-section{margin-top:var(--space-lg)}.breakdown-section h4{color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.3px;margin-bottom:var(--space-sm);font-size:12px;font-weight:600}.breakdown-bars{gap:var(--space-sm);flex-direction:column;display:flex}.breakdown-bar{align-items:center;gap:var(--space-sm);display:flex}.method-badge{border-radius:var(--radius-sm);color:#fff;text-align:center;text-transform:uppercase;min-width:50px;padding:3px 8px;font-size:10px;font-weight:600}.method-badge.method-get{background:var(--color-primary)}.method-badge.method-post{background:var(--color-info)}.method-badge.method-put{background:var(--color-warning)}.method-badge.method-patch{background:#8b5cf6}.method-badge.method-delete{background:var(--color-error)}.bar-container{background:var(--color-bg-tertiary);border-radius:var(--radius-sm);flex:1;height:6px;overflow:hidden}.bar-fill{background:var(--color-primary);border-radius:var(--radius-sm);height:100%;transition:width .3s}.bar-count{text-align:right;min-width:36px;color:var(--color-text-secondary);font-size:13px}.endpoint-list{gap:var(--space-sm);flex-direction:column;display:flex}.endpoint-item{padding:var(--space-sm) var(--space-md);background:var(--color-bg-primary);border-radius:var(--radius-md);justify-content:space-between;align-items:center;display:flex}.endpoint-item code{color:var(--color-text-primary);font-size:13px}.endpoint-count{background:var(--color-bg-tertiary);border-radius:var(--radius-sm);color:var(--color-text-secondary);padding:3px 8px;font-size:12px}.quick-actions{background:var(--color-bg-secondary);border-radius:var(--radius-lg);padding:var(--space-lg)}.quick-actions h3{margin-bottom:var(--space-md);font-size:14px;font-weight:600}.action-buttons{gap:var(--space-sm);flex-wrap:wrap;display:flex}.action-btn{padding:var(--space-sm) var(--space-md);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text-primary);cursor:pointer;font-size:13px;text-decoration:none;transition:all .15s}.action-btn:hover{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.push-log-viewer{background:var(--color-bg-primary)}.push-status-badge{border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;font-size:12px;font-weight:600;display:flex}.push-status-badge.success{background:var(--color-primary-light);color:#166534}.push-status-badge.failed{color:var(--color-error);background:#fef2f2}.push-type{color:#1e40af;border-radius:var(--radius-sm);text-transform:uppercase;background:#dbeafe;padding:3px 8px;font-size:10px;font-weight:600}.emsp-manager{background:var(--color-bg-primary)}.emsp-list{gap:var(--space-sm);flex-direction:column;display:flex}.emsp-card{border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.emsp-header{align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-md);cursor:pointer;background:var(--color-bg-secondary);transition:background .15s;display:flex}.emsp-header:hover{background:var(--color-bg-tertiary)}.emsp-party{background:var(--color-primary);color:#fff;border-radius:var(--radius-sm);padding:4px 10px;font-size:12px;font-weight:600}.emsp-name{flex:1;font-weight:500}.emsp-version,.emsp-expires{color:var(--color-text-muted);font-size:13px}.emsp-expires.expired{color:var(--color-error)}.emsp-details{padding:var(--space-md);border-top:1px solid var(--color-border)}.emsp-token-section{align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);padding:var(--space-sm);background:var(--color-bg-secondary);border-radius:var(--radius-md);display:flex}.token-display{color:#e2e8f0;padding:var(--space-sm);border-radius:var(--radius-sm);font-family:var(--font-mono);background:#1e293b;flex:1;font-size:12px;overflow-x:auto}.endpoints-section{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--color-border)}.endpoints-section h4{margin-bottom:var(--space-sm);font-size:13px;font-weight:600}.endpoints-list{gap:var(--space-sm);margin-bottom:var(--space-sm);flex-direction:column;display:flex}.endpoint-row{align-items:center;gap:var(--space-sm);padding:var(--space-sm);background:var(--color-bg-secondary);border-radius:var(--radius-sm);display:flex}.endpoint-type{color:#1e40af;border-radius:var(--radius-sm);text-align:center;text-transform:uppercase;background:#dbeafe;min-width:80px;padding:3px 8px;font-size:10px;font-weight:600}.endpoints-form{margin-bottom:var(--space-md)}.empty-state{text-align:center;padding:var(--space-2xl) var(--space-lg);color:var(--color-text-muted)}.empty-state p{margin:var(--space-sm) 0;font-size:15px}.text-small{color:var(--color-text-muted);font-size:13px}.section{margin-top:var(--space-lg)}.section h2{color:var(--color-text-primary);margin-bottom:var(--space-md);font-size:18px;font-weight:600}.section h3{color:var(--color-text-primary);margin-top:var(--space-lg);margin-bottom:var(--space-sm);font-size:15px;font-weight:600}.section h4{color:var(--color-text-secondary);margin:var(--space-md) 0 var(--space-sm) 0;font-size:13px;font-weight:600}.section-header{margin-bottom:var(--space-md);justify-content:space-between;align-items:center;display:flex}.header{background:var(--color-bg-primary);border-bottom:1px solid var(--color-border);padding:var(--space-lg) var(--space-xl);justify-content:space-between;align-items:center;gap:var(--space-md);flex-wrap:wrap;display:flex}.header h1{color:var(--color-text-primary);font-size:20px;font-weight:700}.header .subtitle{color:var(--color-text-secondary);margin-left:var(--space-md);font-size:13px}.auth-status{align-items:center;gap:var(--space-md);display:flex}.token-badge{background:var(--color-bg-secondary);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);font-size:12px;font-family:var(--font-mono);color:var(--color-text-secondary)}.logout-btn{color:var(--color-error);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);cursor:pointer;background:#fef2f2;border:1px solid #fecaca;font-size:13px;font-weight:500;transition:all .15s}.logout-btn:hover{background:#fee2e2}.tabs{gap:var(--space-xs);padding:var(--space-sm) var(--space-lg);border-bottom:1px solid var(--color-border);background:var(--color-bg-primary);display:flex;overflow-x:auto}.tab{padding:var(--space-sm) var(--space-md);cursor:pointer;color:var(--color-text-secondary);border-radius:var(--radius-md);white-space:nowrap;background:0 0;border:none;font-size:13px;font-weight:500;transition:all .15s}.tab:hover{color:var(--color-text-primary);background:var(--color-bg-secondary)}.tab.active{color:var(--color-primary);background:var(--color-primary-light)}.container{background:var(--color-bg-primary);margin:var(--space-lg);border-radius:var(--radius-xl);padding:var(--space-xl);box-shadow:var(--shadow-sm)}@media (width<=992px){.sidebar{display:none}.main-content{margin-left:0}.tabs{padding:var(--space-sm)}}@media (width<=768px){.header{padding:var(--space-md);flex-direction:column;align-items:flex-start}.header h1{font-size:18px}.header .subtitle{margin-left:0;margin-top:var(--space-xs)}.auth-status{flex-direction:column;align-items:stretch;width:100%}.location-grid,.welcome-grid{grid-template-columns:1fr}.tabs{flex-wrap:nowrap}.section-header{align-items:flex-start;gap:var(--space-sm);flex-direction:column}.form-row{grid-template-columns:1fr}.stats-grid{grid-template-columns:repeat(2,1fr)}.container{margin:var(--space-sm);padding:var(--space-md);border-radius:var(--radius-lg)}}@media (width<=576px){.stats-grid{grid-template-columns:1fr}.page-body{padding:var(--space-md)}}.data-table-container{background:var(--color-bg-primary)}.table-header{margin-bottom:var(--space-lg);justify-content:space-between;align-items:center;display:flex}.table-header h2{margin:0;font-size:18px;font-weight:600}.data-table{border-collapse:collapse;width:100%;font-size:13px}.data-table th{text-align:left;padding:var(--space-sm) var(--space-md);background:var(--color-bg-secondary);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--color-border);font-size:11px;font-weight:600}.data-table th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.data-table th.sortable:hover{color:var(--color-text-primary)}.sort-icon{margin-left:var(--space-xs);opacity:.5}.data-table td{padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--color-border);color:var(--color-text-primary)}.data-table tr.clickable{cursor:pointer;transition:background .15s}.data-table tr.clickable:hover,.data-table tr.nested-row{background:var(--color-bg-secondary)}.data-table tr.nested-row td{padding-top:var(--space-xs);padding-bottom:var(--space-xs);color:var(--color-text-secondary);font-size:12px}.data-table tr.form-row-nested td{background:var(--color-bg-tertiary);padding:var(--space-md)}.data-table .mono{font-family:var(--font-mono);font-size:12px}.data-table .center{text-align:center}.data-table .truncate{text-overflow:ellipsis;white-space:nowrap;max-width:200px;overflow:hidden}.type-badge{background:var(--color-bg-tertiary);border-radius:var(--radius-sm);color:var(--color-text-secondary);padding:2px 8px;font-size:11px;font-weight:500;display:inline-block}.status-badge{border-radius:var(--radius-sm);text-transform:uppercase;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.status-badge.status-available{background:var(--color-primary-light);color:#166534}.status-badge.status-charging{color:#92400e;background:#fef3c7}.status-badge.status-blocked,.status-badge.status-outofservice,.status-badge.status-inoperative{color:var(--color-error);background:#fef2f2}.detail-page{background:var(--color-bg-primary)}.detail-header{align-items:center;gap:var(--space-md);padding-bottom:var(--space-lg);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-lg);display:flex}.detail-title{flex:1}.detail-title h2{margin:0;font-size:20px;font-weight:600}.detail-subtitle{color:var(--color-text-secondary);font-size:14px}.detail-actions{gap:var(--space-sm);display:flex}.detail-tabs{gap:var(--space-xs);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-lg);display:flex}.detail-tab{padding:var(--space-sm) var(--space-md);color:var(--color-text-secondary);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;font-size:14px;font-weight:500;transition:all .15s}.detail-tab:hover{color:var(--color-text-primary)}.detail-tab.active{color:var(--color-primary);border-bottom-color:var(--color-primary)}.detail-content{padding:var(--space-md) 0}.info-grid{gap:var(--space-sm);flex-direction:column;display:flex}.info-row{padding:var(--space-sm) 0;border-bottom:1px solid var(--color-border);display:flex}.info-label{width:150px;color:var(--color-text-secondary);flex-shrink:0;font-size:13px}.info-value{color:var(--color-text-primary);font-size:14px}.info-value.mono{font-family:var(--font-mono);font-size:13px}.add-form{background:var(--color-bg-secondary);padding:var(--space-md);border-radius:var(--radius-md);margin-bottom:var(--space-md)}.connector-form{background:var(--color-bg-primary);padding:var(--space-sm);border-radius:var(--radius-sm)}.connector-form .form-row-inline{gap:var(--space-sm);flex-wrap:wrap}.stats-row{gap:var(--space-md);margin-bottom:var(--space-lg);display:flex}.stat-card{background:var(--color-bg-secondary);padding:var(--space-md);border-radius:var(--radius-md);text-align:center;min-width:100px}.stat-value{color:var(--color-text-primary);font-size:24px;font-weight:600}.stat-label{color:var(--color-text-secondary);text-transform:uppercase;margin-top:var(--space-xs);font-size:12px}.auth-test-card{background:var(--color-bg-secondary);padding:var(--space-md);border-radius:var(--radius-md);margin-bottom:var(--space-lg)}.auth-test-card h3{margin:0 0 var(--space-md) 0;font-size:14px}.auth-result{padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);font-size:13px}.auth-result.success{background:var(--color-primary-light);color:#166534}.auth-result.failed{color:var(--color-error);background:#fef2f2}.simulator-panel{padding:var(--space-md) 0}.simulator-panel h2{margin-bottom:var(--space-md)}.start-form{max-width:600px}.session-card-large{background:var(--color-bg-secondary);padding:var(--space-lg);border-radius:var(--radius-lg);max-width:500px}.session-card-large .session-header{align-items:center;gap:var(--space-md);margin-bottom:var(--space-lg);display:flex}.meter-update{gap:var(--space-sm);margin-top:var(--space-lg);padding-top:var(--space-lg);border-top:1px solid var(--color-border);flex-direction:column;display:flex}.quick-buttons{gap:var(--space-sm);display:flex}.sub-tabs{gap:var(--space-xs);margin-bottom:var(--space-lg);border-bottom:1px solid var(--color-border);padding-bottom:var(--space-sm);display:flex}.sub-tab{padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);color:var(--color-text-secondary);cursor:pointer;background:0 0;border:none;font-size:13px;font-weight:500;transition:all .15s}.sub-tab:hover{background:var(--color-bg-secondary);color:var(--color-text-primary)}.sub-tab.active{background:var(--color-primary-light);color:var(--color-primary)}.status-badge.status-active,.status-badge.status-charging{color:#92400e;background:#fef3c7}.status-badge.status-completed{background:var(--color-primary-light);color:#166534}.status-badge.status-pending{color:#0369a1;background:#e0f2fe}.status-badge.status-invalid{color:var(--color-error);background:#fef2f2}.text-muted{color:var(--color-text-muted);font-size:13px}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body,#root{height:100%;margin:0;padding:0}body{margin:0}
