.btn{padding:var(--spacing-sm) var(--spacing-lg);border:none;border-radius:var(--radius-md);font-weight:600;font-size:1rem;cursor:pointer;transition:all var(--transition-base);display:inline-flex;align-items:center;gap:var(--spacing-sm);text-decoration:none;position:relative;overflow:hidden}.btn:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:#ffffff4d;transform:translate(-50%,-50%);transition:width .6s,height .6s}.btn:hover:before{width:300px;height:300px}.btn-primary{background:linear-gradient(135deg,var(--primary-green) 0%,var(--primary-green-dark) 100%);color:#fff}.btn-primary:hover{transform:translateY(-2px);box-shadow:0 10px 20px #2d7a3e4d}.btn-success{background:linear-gradient(135deg,var(--success) 0%,#059669 100%);color:#fff}.btn-danger{background:linear-gradient(135deg,var(--danger) 0%,#dc2626 100%);color:#fff}.btn-warning{background:linear-gradient(135deg,var(--warning) 0%,#d97706 100%);color:#fff}.btn-secondary{background:var(--bg-tertiary);color:var(--text-primary)}.btn-large{padding:var(--spacing-md) var(--spacing-xl);font-size:1.125rem}.btn:disabled{opacity:.5;cursor:not-allowed}.status-indicator{display:inline-flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-sm);font-size:.875rem;font-weight:600}.status-online{background:#10b9811a;color:var(--success)}.status-delayed{background:#f59e0b1a;color:var(--warning)}.status-offline{background:#ef44441a;color:var(--danger)}.status-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.status-dot.online{background:var(--success);animation:pulse 2s ease-in-out infinite}.status-dot.delayed{background:var(--warning)}.status-dot.offline{background:var(--danger)}.bus-card{background:#fff;border-radius:var(--radius-xl);padding:var(--spacing-lg);margin-bottom:var(--spacing-md);box-shadow:var(--shadow-md);transition:all var(--transition-base);border-left:4px solid var(--primary-green)}.bus-card:hover{box-shadow:var(--shadow-xl);transform:translate(4px)}.bus-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--spacing-md)}.bus-name{font-size:1.25rem;font-weight:700;color:var(--primary-green);display:flex;align-items:center;gap:var(--spacing-sm)}.bus-info{display:grid;gap:var(--spacing-sm);margin-bottom:var(--spacing-md)}.bus-info-row{display:flex;align-items:center;gap:var(--spacing-sm);font-size:.95rem}.bus-info-label{font-weight:600;color:var(--text-secondary);min-width:80px}.bus-info-value{color:var(--text-primary)}.alert-banner{background:linear-gradient(135deg,#f59e0b1a,#f59e0b0d);border-left:4px solid var(--warning);padding:var(--spacing-md);border-radius:var(--radius-md);margin:var(--spacing-md) 0;animation:slideIn var(--transition-base) ease-out}.alert-banner.danger{background:linear-gradient(135deg,#ef44441a,#ef44440d);border-left-color:var(--danger)}.alert-banner.info{background:linear-gradient(135deg,#3b82f61a,#3b82f60d);border-left-color:var(--info)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn var(--transition-fast) ease-out}.modal{background:#fff;border-radius:var(--radius-xl);padding:var(--spacing-xl);max-width:500px;width:90%;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-xl);animation:fadeIn var(--transition-base) ease-out}.modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--spacing-lg)}.modal-title{font-size:1.5rem;font-weight:700;color:var(--text-primary)}.modal-close{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--text-secondary);transition:color var(--transition-fast)}.modal-close:hover{color:var(--text-primary)}.rating{display:flex;align-items:center;gap:var(--spacing-xs)}.star{color:var(--accent-gold);font-size:1.125rem}.star.empty{color:var(--text-tertiary)}.map-container{width:100%;height:500px;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-lg)}.map-container.small{height:250px}.spinner{width:40px;height:40px;border:4px solid var(--bg-tertiary);border-top-color:var(--primary-green);border-radius:50%;animation:spin 1s linear infinite}.feedback-buttons{display:flex;gap:var(--spacing-sm);margin-top:var(--spacing-md)}.feedback-btn{padding:var(--spacing-sm) var(--spacing-md);border:2px solid var(--bg-tertiary);background:#fff;border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-base);font-size:1.5rem}.feedback-btn:hover{transform:scale(1.1);border-color:var(--primary-green)}.feedback-btn.active{background:var(--primary-green);border-color:var(--primary-green)}.form-label{display:block;margin-bottom:var(--spacing-xs);font-weight:600;color:var(--text-primary)}.form-input{width:100%;padding:var(--spacing-md);border:2px solid var(--bg-tertiary);border-radius:var(--radius-md);font-size:1rem;font-family:inherit;transition:border-color var(--transition-base)}.form-input:focus{outline:none;border-color:var(--primary-green)}@media (max-width: 768px){.bus-card{padding:var(--spacing-md)}.modal{padding:var(--spacing-lg)}.map-container{height:350px}}:root{--primary-green: #2d7a3e;--primary-green-light: #3d9a52;--primary-green-dark: #1d5a2e;--accent-gold: #f4a623;--accent-orange: #ff6b35;--accent-blue: #0077be;--success: #10b981;--warning: #f59e0b;--danger: #ef4444;--info: #3b82f6;--bg-primary: #ffffff;--bg-secondary: #f8fafc;--bg-tertiary: #f1f5f9;--text-primary: #1e293b;--text-secondary: #64748b;--text-tertiary: #94a3b8;--dark-bg-primary: #0f172a;--dark-bg-secondary: #1e293b;--dark-bg-tertiary: #334155;--dark-text-primary: #f1f5f9;--dark-text-secondary: #cbd5e1;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .3);--glass-shadow: 0 8px 32px 0 rgba(31, 38, 135, .15);--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--spacing-2xl: 3rem;--radius-sm: .375rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-xl: 1rem;--radius-2xl: 1.5rem;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1);--transition-fast: .15s ease-in-out;--transition-base: .25s ease-in-out;--transition-slow: .35s ease-in-out}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:linear-gradient(135deg,#f8fafc,#e2e8f0);color:var(--text-primary);line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh}body[lang=ml],.malayalam,[lang=ml]{font-family:Noto Sans Malayalam,Inter,sans-serif}#root{min-height:100vh}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.2;color:var(--text-primary)}h1{font-size:2rem}h2{font-size:1.5rem}h3{font-size:1.25rem}h4{font-size:1.125rem}.container{max-width:1200px;margin:0 auto;padding:0 var(--spacing-md)}.glass{background:var(--glass-bg);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.card{background:#fff;border-radius:var(--radius-lg);padding:var(--spacing-lg);box-shadow:var(--shadow-md);transition:all var(--transition-base)}.card:hover{box-shadow:var(--shadow-lg);transform:translateY(-2px)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.7}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fade-in{animation:fadeIn var(--transition-base) ease-out}.slide-in{animation:slideIn var(--transition-base) ease-out}.pulse{animation:pulse 2s ease-in-out infinite}.spin{animation:spin 1s linear infinite}@media (max-width: 768px){h1{font-size:1.5rem}h2{font-size:1.25rem}h3{font-size:1.125rem}.container{padding:0 var(--spacing-sm)}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-tertiary)}::-webkit-scrollbar-thumb{background:var(--text-tertiary);border-radius:var(--radius-sm)}::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}*:focus-visible{outline:2px solid var(--primary-green);outline-offset:2px}
