.app-container { display: flex; height: 100vh; width: 100vw; overflow: hidden; position: relative; } .map-container { flex: 1; height: 100%; position: relative; z-index: 1; } .locate-btn { position: absolute; top: 10px; left: 10px; z-index: 10; width: 36px; height: 36px; background: white; border: none; border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,0.3); cursor: pointer; display: flex; align-items: center; justify-content: center; color: #333; transition: background 0.15s, color 0.15s; } .locate-btn:hover { background: #f0f0f0; color: #1a73e8; } .controls { width: 350px; background: white; padding: 20px; box-shadow: -2px 0 10px rgba(0,0,0,0.1); overflow-y: auto; z-index: 2; position: relative; } .control-group { background: #f8f9fa; padding: 15px; border-radius: 8px; margin-bottom: 20px; } .control-group h3 { margin-top: 0; color: #2c3e50; font-size: 16px; margin-bottom: 15px; } .setting-row { display: flex; align-items: center; margin-bottom: 12px; gap: 10px; } .setting-row label { flex: 1; font-size: 14px; color: #555; } .setting-row input[type="range"] { flex: 2; } .setting-row input[type="number"] { width: 80px; padding: 5px; border: 1px solid #ddd; border-radius: 4px; } .setting-row span { font-weight: bold; color: #2c3e50; min-width: 40px; } .setting-row button { padding: 6px 12px; margin: 0 5px; border: 1px solid #ddd; background: white; border-radius: 4px; cursor: pointer; transition: all 0.2s; } .setting-row button:hover { background: #e9ecef; } .setting-row button.active-style { background: #34495e; color: white; border-color: #2c3e50; } .action-btn { width: 100%; padding: 12px; background: #4CAF50; color: white; border: none; border-radius: 6px; font-size: 16px; font-weight: bold; cursor: pointer; transition: background 0.3s; margin-top: 10px; } .action-btn:hover:not(:disabled) { background: #45a049; } .action-btn:disabled { background: #ccc; cursor: not-allowed; } .action-btn-secondary { width: 100%; padding: 12px; background: #34495e; color: white; border: none; border-radius: 6px; font-size: 16px; font-weight: bold; cursor: pointer; transition: background 0.3s; margin-top: 10px; } .action-btn-secondary:hover { background: #2c3e50; } .disabled-controls { opacity: 0.8; } .disabled-controls input { pointer-events: none; cursor: not-allowed; } /* Allow action buttons and settings buttons to work even when locked */ .action-btn, .action-btn-secondary, .setting-row button { pointer-events: auto !important; } .results-panel table thead { position: sticky; top: 0; z-index: 1; } .results-panel { background: #f8f9fa; padding: 15px; border-radius: 8px; margin-bottom: 20px; max-height: 450px; overflow-y: auto; border: 1px solid #eee; } .results-panel h3 { margin-top: 0; color: #2c3e50; font-size: 16px; margin-bottom: 5px; } .results-panel .hint { font-size: 11px; color: #7f8c8d; margin-bottom: 10px; font-style: italic; } .results-panel table { width: 100%; border-collapse: collapse; font-size: 13px; table-layout: fixed; } .results-panel th { background: #34495e; color: white; padding: 8px 4px; text-align: left; } .results-panel td { padding: 8px 4px; border-bottom: 1px solid #ddd; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .results-panel tr { will-change: transform, background-color; } .results-panel tr:nth-child(even) { background: #fdfdfd; } .results-panel tr:hover { background: #ecf0f1; } .results-panel tr.selected-row { background: #d5e8d4 !important; font-weight: bold; } .info-panel-modal { position: absolute; top: 20px; left: 20px; width: 280px; background: white; border-radius: 8px; box-shadow: 0 4px 15px rgba(0,0,0,0.3); z-index: 1000; animation: slideIn 0.3s ease-out; } @keyframes slideIn { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } .info-panel-content { padding: 20px; position: relative; } .info-panel-content h2 { margin-top: 0; margin-bottom: 15px; font-size: 18px; color: #2c3e50; border-bottom: 2px solid #4CAF50; padding-bottom: 8px; } .close-btn { position: absolute; top: 10px; right: 10px; background: none; border: none; font-size: 24px; cursor: pointer; color: #95a5a6; } .close-btn:hover { color: #34495e; } .info-grid { display: flex; flex-direction: column; gap: 12px; margin-bottom: 20px; } .info-item { display: flex; flex-direction: column; } .info-item label { font-size: 11px; color: #7f8c8d; text-transform: uppercase; letter-spacing: 0.5px; } .info-item span { font-size: 14px; color: #2c3e50; font-weight: 500; } .action-btn-small { width: 100%; padding: 8px; background: #3498db; color: white; border: none; border-radius: 4px; font-size: 14px; cursor: pointer; transition: background 0.2s; } .action-btn-small:hover { background: #2980b9; } .more-info { color: #666; font-size: 12px; text-align: center; margin-top: 10px; } .instructions { background: #fff3cd; padding: 15px; border-radius: 8px; border-left: 4px solid #ffc107; } .instructions h3 { margin-top: 0; color: #856404; font-size: 16px; } .instructions ol { margin: 0; padding-left: 20px; font-size: 13px; color: #856404; } .instructions li { margin-bottom: 8px; } .map-info-popup { padding: 5px; font-family: sans-serif; } .popup-header { border-bottom: 1px solid #eee; padding-bottom: 5px; margin-bottom: 5px; color: #2c3e50; font-size: 14px; } .popup-body { font-size: 12px; color: #666; } .popup-body p { margin: 3px 0; } .maplibregl-popup { z-index: 2000 !important; } .maplibregl-popup-content { border-radius: 8px !important; box-shadow: 0 4px 15px rgba(0,0,0,0.3) !important; padding: 15px !important; } .projection-row { align-items: flex-start; } .projection-buttons { display: flex; flex-wrap: wrap; gap: 4px; flex: 2; } .projection-buttons button { padding: 4px 8px; font-size: 11px; border: 1px solid #ddd; background: white; border-radius: 4px; cursor: pointer; transition: all 0.2s; } .projection-buttons button:hover { background: #e9ecef; } .projection-buttons button.active-style { background: #34495e; color: white; border-color: #2c3e50; } @media (max-width: 768px) { .app-container { flex-direction: column; } .controls { width: 100%; max-height: 40vh; order: -1; } .map-container { height: 60vh; } .info-panel-modal { left: 10px; right: 10px; width: auto; bottom: 20px; top: auto; } } .results-panel tr.passed-row { opacity: 0.4; } .results-panel tr.current-row { background: #1abc9c !important; color: white; font-weight: bold; } .results-panel tr.upcoming-row { background: #eaf4fb !important; } .now-passing { background: #1abc9c; color: white; padding: 6px 10px; border-radius: 4px; font-size: 13px; margin-bottom: 8px; }