@font-face{font-family:Inter;src:url(/Inter.ttf)}*{box-sizing:border-box}body{margin:0;background:#f6f8fa;color:#1f2937;font-family:Inter,Arial,sans-serif;font-size:14px}button,input,select{font:inherit}button{background:#1765d1;color:#fff;border:0;border-radius:7px;padding:11px 16px;font-weight:600;cursor:pointer}button:hover{background:#1055b4}input,select{width:100%;border:1px solid #d7dfe7;border-radius:7px;padding:10px 12px;background:#fff;color:#27364a}input:focus,select:focus{outline:2px solid #a3c7fa}.layout{min-height:100vh;display:flex}aside{width:250px;background:#fff;border-right:1px solid #e5eaf0;display:flex;flex-direction:column;flex-shrink:0}.brand{height:78px;padding:20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #eef1f5}.brand strong{font-size:15px;color:#152944}.brand small{display:block;font-size:9px;letter-spacing:1px;color:#8291a5;margin-top:4px}.logo{width:36px;height:36px;background:#1765d1;color:#fff;border-radius:9px;display:grid;place-items:center;font-size:24px}.side-label{font-weight:700;font-size:10px;color:#9aa7b7;letter-spacing:1px;margin:23px 20px 9px}nav{padding:0 10px}nav a{display:flex;align-items:center;text-decoration:none;color:#627187;padding:9px 10px;border-radius:6px;font-size:12px;font-weight:500}nav a.active{background:#eaf2ff;color:#1765d1;font-weight:700}nav a:hover{background:#f2f6fb}.navicon{width:27px;font-size:17px}.sidefoot{margin:auto 20px 20px;padding-top:20px;color:#586a80;border-top:1px solid #edf0f3;font-size:11px}.sidefoot small{color:#9aa7b7}main{flex:1;min-width:0}header{height:66px;background:#fff;border-bottom:1px solid #e5eaf0;display:flex;justify-content:space-between;align-items:center;padding:0 36px;color:#708095;font-size:12px}.profile{color:#34465c;font-weight:600}.content{max-width:1500px;margin:auto;padding:34px 40px}.heading{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:24px}.crumb{color:#8a9aae;font-size:12px;margin-bottom:10px}h1{font-size:26px;letter-spacing:-.5px;margin:0 0 8px;color:#192b42}p{color:#77879b;margin:0;line-height:1.6}.notice{background:#eef5ff;color:#34587e;border:1px solid #d4e5fb;padding:13px 16px;border-radius:8px;margin-bottom:20px;font-size:12px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:22px}.card{background:#fff;border:1px solid #e4eaf1;border-radius:9px;box-shadow:0 2px 8px #23374c08}.stat{padding:20px;display:flex;flex-direction:column;gap:10px}.stat span{color:#728298;font-size:12px}.stat strong{font-size:26px;color:#192c43}.stat small{font-size:11px;color:#97a6b7}.tablehead{display:flex;align-items:center;justify-content:space-between;padding:21px 22px;gap:20px}.tablehead input{width:230px}h2{font-size:16px;margin:0 0 6px;color:#25364b}.tablehead p,.form p{font-size:12px}.scroll{overflow:auto}table{border-collapse:collapse;width:100%;text-align:left;white-space:nowrap}th{background:#f8fafc;color:#8897a9;font-size:10px;text-transform:uppercase;letter-spacing:.5px}th,td{padding:15px 22px;border-top:1px solid #edf1f5}td{font-size:12px;color:#485a70}.badge{background:#eaf5ef;color:#33875b;border-radius:20px;padding:5px 9px;font-size:11px}.empty{text-align:center;color:#94a1b0;padding:40px}.form{padding:24px}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin:22px 0}.grid label{font-size:12px;color:#475b72;font-weight:600}.grid input,.grid select{display:block;margin-top:8px}.overlay{position:fixed;inset:0;background:#15233877;display:grid;place-items:center;padding:20px}.dialog{background:#fff;border-radius:10px;padding:26px;max-width:430px}.dialog p{margin:14px 0 24px}.dialog button{float:right}@media(max-width:850px){aside{width:195px}.content{padding:25px 20px}.stats{grid-template-columns:repeat(2,1fr)}}@media(max-width:600px){.layout{display:block}aside{width:100%;height:auto}.brand{height:60px}.side-label,.sidefoot{display:none}nav{display:flex;overflow-x:auto;padding:4px}nav a{white-space:nowrap}.navicon{display:none}header{padding:0 18px}.heading{align-items:flex-start;flex-direction:column}.grid{grid-template-columns:1fr}.stats{grid-template-columns:repeat(2,1fr)}}.card+.card{margin-top:20px}.panels{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px;margin:0 0 20px}.panels .card+.card{margin:0}.panels .form button{margin-top:18px}.inner{margin-top:22px}.purple{background:#5142e9;border-radius:7px;padding:13px 16px;color:#fff;font-weight:700;font-size:12px;margin-bottom:22px}.dialog{width:min(680px,100%);max-width:680px;max-height:90vh;overflow:auto}.dialoghead{display:flex;justify-content:space-between;align-items:center}.dialoghead h2{margin:0}.actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.secondary{background:#fff;color:#1765d1;border:1px solid #d7dfe7}.secondary:hover{background:#edf5ff}.linkbutton,.iconbutton{color:#1765d1;background:transparent;border:0;padding:4px;font-weight:600}.linkbutton:hover,.iconbutton:hover{background:#edf5ff}.iconbutton{font-size:24px}.error{color:#b42318;background:#fff0ee;border-radius:6px;padding:10px;margin:10px 0}.check{display:flex;align-items:center;gap:8px;margin-top:20px}.check input{width:auto}button:disabled{background:#acb9c9;cursor:not-allowed}.form>button{margin-top:18px}.form>p+button{margin-top:18px}.form>form>p{margin-top:12px}label,.grid label{display:block}.grid select{margin-top:8px}.tablehead input{max-width:230px}.badge{white-space:nowrap}.student-app{min-height:100vh;background:#f6f8fa}.student-header{height:80px;display:flex;align-items:center;justify-content:space-between;padding:0 32px;background:#fff;border-bottom:1px solid #d7dfe7;color:#52606d}.student-header a{color:#1765d1;text-decoration:none}.student-brand{font-size:16px;font-weight:700}.student-nav{background:#fff;display:flex;gap:5px;overflow-x:auto;padding:8px 24px;border-radius:0 0 12px 12px}.student-nav a{padding:14px 18px;text-decoration:none;color:#52606d;white-space:nowrap;border-radius:8px;font-weight:600}.student-nav a.active{background:#eaf2ff;color:#1765d1}.student-main{max-width:1440px;padding:28px 32px;margin:auto}.student-main h1{font-size:32px;margin:20px 0 8px}.student-subtitle{margin-bottom:22px}.student-info{background:#eaf2ff;border:1px solid #c9dffb;color:#285e9d;padding:15px 18px;border-radius:10px;margin-bottom:22px;line-height:1.5}.student-alert{background:#eef8f0;border:1px solid #c4e6cb;border-radius:8px;padding:14px;margin:12px 0;color:#285f36;display:flex;justify-content:space-between}.student-alert button{padding:0;color:inherit;background:transparent;font-size:20px}.student-card{padding:24px;margin-bottom:20px}.student-card h2{font-size:20px;margin-bottom:12px}.student-card p{margin:10px 0 16px}.student-card form>button,.student-card>button{margin-top:16px}.student-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.student-grid.cards{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.student-grid .student-card+.student-card{margin-top:0}.student-field{display:block;font-weight:600;color:#405168;margin:16px 0}.student-field input,.student-field select{display:block;margin-top:8px}.student-search{display:flex;gap:12px;margin:20px 0}.student-search input{flex:1}.student-number{font-size:18px;font-weight:700;color:#1d4775}.student-row{display:flex;gap:12px;justify-content:space-between;align-items:center;padding:16px 0;border-top:1px solid #e8edf2}.student-row p{margin:6px 0 0}.student-tabs{display:flex;gap:8px;margin-bottom:16px}.student-tabs button{background:#fff;color:#52606d;border:1px solid #d7dfe7}.student-tabs button.selected{background:#eaf2ff;color:#1765d1}.student-app button:disabled{background:#acb9c9;color:#fff;cursor:not-allowed}@media(max-width:650px){.student-header{padding:0 16px;font-size:11px}.student-main{padding:20px 16px}.student-grid{grid-template-columns:1fr}.student-search{flex-direction:column}.student-main h1{font-size:25px}}.auth-portal-tabs{display:flex;gap:12px;margin:16px 0 24px}.auth-portal-tab{flex:1;padding:14px 18px;border:2px solid #d7dfe7;border-radius:12px;background:#f8fafc;cursor:pointer;text-align:left;transition:all .2s ease}.auth-portal-tab.active{border-color:#1765d1;background:#eaf2ff;box-shadow:0 4px 12px #1765d11f}.auth-portal-tab strong{display:block;font-size:15px;color:#1d4775;margin-bottom:4px}.auth-portal-tab span{font-size:12px;color:#52606d}.auth-demo-section{background:#f0f4f8;border:1px dashed #b8c7d6;border-radius:10px;padding:16px;margin:20px 0}.auth-demo-title{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#3b5066;margin-bottom:10px}.auth-demo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}.auth-demo-btn{display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:8px;border:1px solid #cbd5e1;background:#fff;color:#1e293b;cursor:pointer;font-size:13px;font-weight:600;transition:all .15s ease;text-align:left}.auth-demo-btn:hover{background:#e2e8f0;border-color:#94a3b8;transform:translateY(-1px)}.auth-role-badge{display:inline-block;padding:4px 10px;border-radius:20px;font-size:12px;font-weight:700;margin-left:8px}.role-student{background:#e0f2fe;color:#0369a1}.role-privateevowner{background:#fef3c7;color:#92400e}.role-operator{background:#dcfce7;color:#15803d}.role-admin{background:#fee2e2;color:#b91c1c}.auth-profile-card{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:24px;display:flex;flex-direction:column;gap:16px}.auth-cta-group{display:flex;gap:12px;margin-top:12px;flex-wrap:wrap}.auth-btn-danger{background:#ef4444!important;color:#fff!important}.auth-btn-danger:hover{background:#dc2626!important}.auth-field-hint{font-size:12px;color:#64748b;margin-top:4px}.auth-field-error{font-size:12px;color:#ef4444;margin-top:4px;font-weight:600}.auth-role-select{display:flex;gap:12px;margin:12px 0 16px}.auth-role-option{flex:1;padding:12px;border:1px solid #cbd5e1;border-radius:8px;background:#f8fafc;cursor:pointer;font-weight:600;font-size:13px;text-align:center}.auth-role-option.active{border-color:#1765d1;background:#eaf2ff;color:#1765d1}.catalog-header-row{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:20px;flex-wrap:wrap;gap:12px}.catalog-reload-btn{padding:8px 16px;border:1px solid #cbd5e1;border-radius:8px;background:#fff;color:#1e293b;cursor:pointer;font-weight:600;font-size:13px;transition:all .2s}.catalog-reload-btn:hover{background:#f1f5f9;border-color:#94a3b8}.catalog-filter-bar{display:flex;gap:12px;flex-wrap:wrap;background:#f8fafc;padding:16px;border-radius:10px;border:1px solid #e2e8f0;margin-bottom:24px;align-items:center}.catalog-filter-bar .filter-item{flex:1;min-width:180px}.catalog-filter-bar input,.catalog-filter-bar select{width:100%;padding:10px 14px;border:1px solid #cbd5e1;border-radius:8px;font-size:14px;background:#fff;box-sizing:border-box}.catalog-filter-bar .filter-actions{display:flex;gap:8px}.catalog-filter-bar .btn-primary{padding:10px 18px;background:#1765d1;color:#fff;border:none;border-radius:8px;font-weight:600;cursor:pointer}.catalog-filter-bar .btn-primary:hover{background:#124fa6}.catalog-filter-bar .btn-secondary{padding:10px 14px;background:#e2e8f0;color:#334155;border:none;border-radius:8px;font-weight:600;cursor:pointer}.catalog-filter-bar .btn-secondary:hover{background:#cbd5e1}.catalog-loading{color:#64748b;font-style:italic}.catalog-error{color:#dc2626;background:#fee2e2;border:1px solid #fecaca;padding:12px;border-radius:8px;margin-bottom:16px}.catalog-notice{color:#15803d;background:#dcfce7;border:1px solid #bbf7d0;padding:12px;border-radius:8px;margin-bottom:16px}.catalog-empty-notice{background:#fffbeb;border:1px solid #fef3c7;border-radius:10px;padding:20px;text-align:center;color:#92400e;margin:20px 0}.catalog-empty-notice p{margin:0 0 12px;font-weight:600;font-size:15px}.btn-refresh-telemetry{padding:8px 16px;background:#f59e0b;color:#fff;border:none;border-radius:8px;font-weight:600;cursor:pointer}.btn-refresh-telemetry:hover{background:#d97706}.catalog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;margin:20px 0}.vehicle-card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:18px;display:flex;flex-direction:column;justify-content:space-between;gap:14px;transition:transform .15s,box-shadow .15s}.vehicle-card:hover{transform:translateY(-2px);box-shadow:0 6px 16px #0000000f}.vehicle-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.vehicle-title-group{display:flex;flex-direction:column;gap:4px}.vehicle-code{font-size:17px;font-weight:700;color:#1e293b}.vehicle-type-badge{font-size:12px;color:#64748b;background:#f1f5f9;padding:2px 8px;border-radius:6px;width:fit-content}.battery-badge{font-size:12px;font-weight:700;padding:4px 10px;border-radius:20px;white-space:nowrap}.battery-good{background:#dcfce7;color:#15803d;border:1px solid #bbf7d0}.battery-medium{background:#fef3c7;color:#b45309;border:1px solid #fde68a}.battery-low{background:#fee2e2;color:#b91c1c;border:1px solid #fecaca}.battery-na{background:#f1f5f9;color:#64748b}.vehicle-card-body{font-size:13px;color:#475569;display:flex;flex-direction:column;gap:6px}.vehicle-hub{margin:0}.vehicle-telemetry{margin:0;font-size:12px;color:#94a3b8}.vehicle-card-footer{border-top:1px solid #f1f5f9;padding-top:12px}.vehicle-actions{display:flex;gap:8px}.btn-reserve{flex:1;padding:8px 12px;background:#1765d1;color:#fff;border:none;border-radius:8px;font-weight:600;font-size:13px;cursor:pointer}.btn-reserve:hover{background:#124fa6}.btn-pickup{flex:1;padding:8px 12px;background:#0284c7;color:#fff;border:none;border-radius:8px;font-weight:600;font-size:13px;cursor:pointer}.btn-pickup:hover{background:#0369a1}.catalog-role-notice{display:block;font-size:12px;color:#64748b;background:#f8fafc;border:1px dashed #cbd5e1;padding:8px 10px;border-radius:6px;text-align:center}.catalog-pagination{display:flex;justify-content:space-between;align-items:center;margin-top:20px;padding-top:16px;border-top:1px solid #e2e8f0;font-size:14px;color:#64748b;flex-wrap:wrap;gap:12px}.pagination-buttons{display:flex;gap:8px}.pagination-buttons button{padding:6px 14px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;cursor:pointer;font-size:13px}.pagination-buttons button:disabled{opacity:.5;cursor:not-allowed}.hub-kpi-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin:20px 0}.hub-kpi-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:16px;display:flex;align-items:center;gap:14px}.hub-kpi-icon{font-size:28px}.hub-kpi-number{font-size:24px;font-weight:800;color:#1e293b}.hub-kpi-label{font-size:12px;color:#64748b;text-transform:uppercase;letter-spacing:.5px;font-weight:600}.hub-slot-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px;margin:12px 0 24px}.hub-slot-badge{background:#f0fdf4;border:1px solid #bbf7d0;color:#166534;font-weight:700;padding:10px;border-radius:8px;text-align:center;font-size:14px;display:flex;flex-direction:column;gap:2px}.hub-slot-badge small{font-size:11px;font-weight:400;color:#15803d}.hub-charger-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin:12px 0 20px}.hub-charger-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:14px;display:flex;flex-direction:column;gap:6px}.hub-charger-title{display:flex;justify-content:space-between;align-items:center}.hub-charger-code{font-weight:700;color:#1e293b}.hub-charger-power{background:#eff6ff;color:#1d4ed8;font-weight:700;font-size:11px;padding:2px 8px;border-radius:12px}.hub-charger-meta{font-size:12px;color:#64748b}.parking-slot-card{background:#fff;border:1px solid #bbf7d0;border-radius:10px;padding:14px;display:flex;flex-direction:column;justify-content:space-between;gap:10px;box-shadow:0 1px 3px #00000008;transition:transform .15s,box-shadow .15s}.parking-slot-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000000f}.parking-slot-header{display:flex;justify-content:space-between;align-items:center}.parking-slot-code{font-size:16px;font-weight:700;color:#1e293b;display:flex;align-items:center;gap:6px}.parking-slot-status{font-size:11px;font-weight:700;color:#166534;background:#dcfce7;padding:2px 8px;border-radius:12px}.btn-reserve-slot{width:100%;padding:8px 12px;background:#16a34a;color:#fff;border:none;border-radius:6px;font-weight:600;font-size:13px;cursor:pointer;transition:background .15s}.btn-reserve-slot:hover{background:#15803d}.btn-reserve-slot:disabled{background:#94a3b8;cursor:not-allowed}
