* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif; height: 100vh; overflow: hidden; } .container { display: flex; height: 100vh; } /* Sidebar */ .sidebar { width: 350px; background: #f8f9fa; padding: 20px; overflow-y: auto; border-right: 1px solid #dee2e6; box-shadow: 2px 0 5px rgba(0,0,0,0.1); } .sidebar h1 { font-size: 24px; margin-bottom: 5px; color: #2c3e50; } .subtitle { font-size: 14px; color: #6c757d; margin-bottom: 25px; } .sidebar h3 { font-size: 16px; margin: 20px 0 10px; color: #495057; } .sidebar h4 { font-size: 14px; margin: 15px 0 8px; color: #495057; } /* Config */ .config-section { margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px solid #dee2e6; } .config-section details summary { font-weight: 500; color: #6c757d; } .config-section details[open] { margin-bottom: 10px; } /* Search */ .search-section { margin-bottom: 20px; } #station-search { width: 100%; padding: 10px; border: 1px solid #ced4da; border-radius: 4px; font-size: 14px; } #station-search:focus { outline: none; border-color: #0080ff; } .search-results { max-height: 200px; overflow-y: auto; margin-top: 8px; } .search-result-item { padding: 8px; border: 1px solid #e9ecef; background: white; cursor: pointer; font-size: 13px; margin-bottom: 4px; border-radius: 3px; transition: background 0.2s; } .search-result-item:hover { background: #e7f3ff; } /* Selected station */ .selected-station { background: #e7f3ff; padding: 12px; border-radius: 4px; margin-bottom: 15px; } #station-name { font-weight: 600; color: #0080ff; margin-bottom: 8px; } #clear-selection { padding: 6px 12px; background: white; border: 1px solid #ced4da; border-radius: 3px; cursor: pointer; font-size: 12px; } #clear-selection:hover { background: #f8f9fa; } /* Time controls */ .checkbox-group { display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; } .checkbox-group label { font-size: 14px; cursor: pointer; display: flex; align-items: center; gap: 6px; } .btn-primary { width: 100%; padding: 12px; background: #0080ff; color: white; border: none; border-radius: 4px; font-size: 14px; font-weight: 600; cursor: pointer; transition: background 0.2s; } .btn-primary:hover { background: #0066cc; } .btn-primary:disabled { background: #ced4da; cursor: not-allowed; } /* Legend */ .legend { background: white; padding: 12px; border-radius: 4px; border: 1px solid #dee2e6; margin-bottom: 15px; } .legend-item { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; font-size: 13px; } .legend-color { width: 20px; height: 20px; border-radius: 3px; border: 1px solid #999; } /* Stats */ .stats { background: white; padding: 12px; border-radius: 4px; border: 1px solid #dee2e6; margin-bottom: 15px; } #stats-content { font-size: 13px; line-height: 1.6; } /* Info */ .info { background: #fff3cd; padding: 12px; border-radius: 4px; border: 1px solid #ffeaa7; font-size: 13px; line-height: 1.6; } .info ol { margin-left: 20px; margin-top: 8px; } .info li { margin-bottom: 4px; } .data-source { margin-top: 12px; font-size: 11px; color: #6c757d; } .data-source a { color: #0080ff; } /* Map */ .map-container { flex: 1; position: relative; } #map { width: 100%; height: 100%; } /* Loading */ .loading { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: white; padding: 30px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); text-align: center; z-index: 1000; } .spinner { border: 4px solid #f3f3f3; border-top: 4px solid #0080ff; border-radius: 50%; width: 40px; height: 40px; animation: spin 1s linear infinite; margin: 0 auto 15px; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Scrollbar */ .sidebar::-webkit-scrollbar { width: 6px; } .sidebar::-webkit-scrollbar-track { background: #f1f1f1; } .sidebar::-webkit-scrollbar-thumb { background: #888; border-radius: 3px; } .sidebar::-webkit-scrollbar-thumb:hover { background: #555; }