/* DotMatrix Font by NikBLN - https://github.com/NikBLN/weilSieDichLieben */ @font-face { font-family: 'DotMatrix'; src: url('https://raw.githubusercontent.com/NikBLN/weilSieDichLieben/refs/heads/main/public/fonts/DotMatrix.ttf') format('truetype'); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'DotMatrix', 'Courier New', monospace; background-color: #000; color: #FFED00; min-height: 100vh; overflow-x: hidden; -webkit-tap-highlight-color: transparent; } .container { max-width: 100%; padding: 10px; } @media (min-width: 768px) { .container { padding: 15px 20px; } } .header { text-align: center; padding: 20px 10px 15px; background-color: #000; position: sticky; top: 0; z-index: 10000; border-bottom: 2px solid #FFED00; } .header-content { display: flex; justify-content: space-between; align-items: center; max-width: 100%; } .header-title { flex: 1; text-align: left; padding-left: 15px; max-width: calc(100% - 100px); } .header h1 { font-size: 26px; letter-spacing: 2px; margin-bottom: 6px; } .header .subtitle { font-size: 11px; opacity: 0.7; letter-spacing: 1px; margin-bottom: 6px; } .header .author { font-size: 9px; opacity: 0.5; font-style: italic; } .menu-btn { position: absolute; right: 15px; top: 50%; transform: translateY(-50%); background: none; border: 2px solid #FFED00; color: #FFED00; font-size: 24px; padding: 8px 12px; cursor: pointer; border-radius: 6px; transition: background-color 0.2s; line-height: 1; z-index: 10001; } .menu-btn:active { background-color: #FFED00; color: #000; } /* Navigation Menu */ .nav-menu { position: fixed; top: 0; right: -300px; width: 280px; height: 100%; background-color: #000; border-left: 2px solid #FFED00; z-index: 10003; transition: right 0.3s ease; } .nav-menu.active { right: 0; } .nav-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); z-index: 10002; display: none; } .nav-overlay.active { display: block; } .nav-header { padding: 20px; border-bottom: 1px solid #333; display: flex; justify-content: space-between; align-items: center; } .nav-header h3 { font-size: 18px; color: #FFED00; } .nav-close { background: none; border: none; color: #FFED00; font-size: 32px; cursor: pointer; padding: 0; line-height: 1; } .nav-items { padding: 10px 0; } .nav-item { width: 100%; padding: 18px 20px; background: none; border: none; color: #FFED00; text-align: left; cursor: pointer; display: flex; align-items: center; gap: 15px; font-family: 'DotMatrix', 'Courier New', monospace; font-size: 16px; transition: background-color 0.2s; border-left: 4px solid transparent; } .nav-item:active, .nav-item.active { background-color: #1a1a1a; border-left-color: #FFED00; } .nav-icon { font-size: 24px; } .nav-label { flex: 1; } /* View Container */ .view-container { display: none; } .view-container.active { display: block; } .controls { background-color: #0a0a0a; padding: 15px; border-radius: 8px; margin: 15px 0; border: 1px solid #222; } .search-row { display: flex; gap: 10px; margin-bottom: 15px; align-items: stretch; } .search-container { position: relative; flex: 1; } .search-input { width: 100%; padding: 12px 45px 12px 12px; font-family: 'DotMatrix', 'Courier New', monospace; font-size: 16px; background-color: #000 !important; color: #FFED00; border: 2px solid #FFED00; border-radius: 6px; outline: none; transition: border-color 0.2s; height: 48px; box-sizing: border-box; } .search-input:focus { border-color: #fff; } .search-input::placeholder { color: rgba(255, 237, 0, 0.5); } /* Webkit Auto-fill Override */ .search-input:-webkit-autofill, .search-input:-webkit-autofill:hover, .search-input:-webkit-autofill:focus { -webkit-box-shadow: 0 0 0 1000px #000 inset !important; -webkit-text-fill-color: #FFED00 !important; } .clear-btn { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); background: none; border: none; color: #FFED00; font-size: 24px; cursor: pointer; padding: 4px 6px; display: none; line-height: 1; opacity: 0.7; transition: opacity 0.2s; } .clear-btn:hover, .clear-btn:active { opacity: 1; } .search-input:not(:placeholder-shown) ~ .clear-btn { display: block; } .suggestions { position: absolute; top: 100%; left: 0; right: 0; background-color: #0a0a0a; border: 2px solid #FFED00; border-top: none; border-radius: 0 0 6px 6px; max-height: 300px; overflow-y: auto; z-index: 1000; display: none; } .suggestions.active { display: block; } .suggestion-item { padding: 12px; cursor: pointer; border-bottom: 1px solid #222; transition: background-color 0.15s; } .suggestion-item:last-child { border-bottom: none; } .suggestion-item:hover, .suggestion-item:active { background-color: #FFED00; color: #000; } .suggestion-name { font-size: 14px; font-weight: bold; } .suggestion-products { font-size: 11px; opacity: 0.7; margin-top: 4px; } .button-group { display: flex; flex-direction: column; gap: 0; margin-top: 0; } .btn { flex: 1; padding: 12px; font-family: 'DotMatrix', 'Courier New', monospace; font-size: 14px; background-color: #FFED00; color: #000; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; transition: background-color 0.15s; } .btn-full-width { width: 100%; } .btn:active { background-color: #FFD700; } .btn:disabled { opacity: 0.4; cursor: not-allowed; background-color: #666; } .departures-container { margin-top: 20px; } .station-info { background-color: #0a0a0a; padding: 15px; border-radius: 8px; margin-bottom: 15px; border-left: 4px solid #FFED00; } .station-name { font-size: 22px; font-weight: bold; margin-bottom: 6px; } .last-update { font-size: 13px; opacity: 0.6; } .departure-item { background-color: #0a0a0a; padding: 14px; margin-bottom: 10px; border-radius: 8px; border-left: 4px solid #666; display: flex; justify-content: space-between; align-items: center; cursor: pointer; transition: background-color 0.15s; } .departure-item:active { background-color: #111; } .departure-info { flex: 1; } .departure-header { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; flex-wrap: wrap; } .line-badge { display: inline-block; padding: 6px 12px; border-radius: 4px; font-weight: bold; font-size: 16px; } .departure-destination { font-size: 18px; margin-bottom: 4px; } .departure-platform { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; background-color: #1a1a1a; border-radius: 3px; font-size: 13px; border: 1px solid #333; } .platform-icon { font-size: 12px; opacity: 0.7; } .platform-text { font-weight: bold; color: #FFED00; } .departure-time { text-align: right; font-size: 24px; font-weight: bold; min-width: 70px; } .departure-delay { font-size: 13px; color: #ff5555; margin-top: 4px; font-weight: bold; } /* Journey Planner */ .journey-inputs { margin-bottom: 15px; } .journey-input-group { margin-bottom: 12px; } .journey-label { display: block; font-size: 16px; margin-bottom: 8px; font-weight: bold; } .swap-btn { width: 100%; padding: 12px; margin: 15px 0; background-color: #0a0a0a; color: #FFED00; border: 1px solid #333; border-radius: 6px; font-size: 20px; cursor: pointer; transition: background-color 0.2s; } .swap-btn:active { background-color: #1a1a1a; } .journey-container { margin-top: 15px; } .journey-result { background-color: #0a0a0a; border: 1px solid #222; border-radius: 8px; padding: 15px; margin-bottom: 12px; } .journey-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid #222; } .journey-time { font-size: 20px; font-weight: bold; } .journey-duration { font-size: 14px; opacity: 0.7; } .journey-legs { margin-top: 12px; } .journey-leg { margin-bottom: 12px; padding: 16px; background-color: #050505; border-radius: 6px; border-left: 4px solid #666; } .journey-leg-header { display: flex; align-items: center; gap: 15px; margin-bottom: 15px; } .journey-leg-icon { font-size: 28px; min-width: 32px; } .journey-leg-line { font-weight: bold; font-size: 20px; flex: 1; } .journey-leg-duration { font-size: 16px; opacity: 0.6; } .journey-leg-stop { display: grid; grid-template-columns: 1fr auto auto; gap: 30px; align-items: center; padding: 10px 0; border-bottom: 1px solid #111; } .journey-leg-stop:last-child { border-bottom: none; } .journey-leg-station { font-size: 18px; font-weight: 500; } .journey-leg-platform { font-size: 16px; color: #FFED00; font-weight: bold; min-width: 100px; text-align: right; } .journey-leg-time { font-size: 20px; font-weight: bold; text-align: right; min-width: 70px; } .journey-transfer { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px; margin: 10px 0; background-color: #1a1a00; border-radius: 4px; font-size: 14px; border-left: 3px solid #FFED00; } .journey-transfer.tight { background-color: #2a1a00; border-left-color: #ff9900; } .journey-transfer.very-tight { background-color: #2a0000; border-left-color: #ff3333; } .journey-transfer-time { font-weight: bold; color: #FFED00; font-size: 16px; margin-left: auto; } .journey-transfer.tight .journey-transfer-time { color: #ff9900; } .journey-transfer.very-tight .journey-transfer-time { color: #ff3333; } .loading { text-align: center; padding: 40px; font-size: 18px; animation: pulse 1.5s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .error { background: linear-gradient(135deg, #ff4444 0%, #cc0000 100%); color: #fff; padding: 18px; border-radius: 12px; margin: 15px 0; text-align: center; box-shadow: 0 4px 20px rgba(255, 68, 68, 0.4); border: 1px solid rgba(255, 255, 255, 0.1); } .empty-state { text-align: center; padding: 50px 20px; opacity: 0.7; } .empty-state-icon { font-size: 56px; margin-bottom: 20px; animation: float 3s ease-in-out infinite; } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } .offline-indicator { background: linear-gradient(135deg, #ff4444 0%, #cc0000 100%); color: #fff; padding: 12px; text-align: center; font-size: 12px; position: fixed; top: 0; left: 0; right: 0; z-index: 200; display: none; box-shadow: 0 2px 10px rgba(255, 68, 68, 0.5); font-weight: bold; letter-spacing: 0.5px; } .offline-indicator.show { display: block; animation: slideDown 0.3s ease-out; } @keyframes slideDown { from { transform: translateY(-100%); } to { transform: translateY(0); } } /* Detail Modal */ .detail-modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.97); z-index: 10005; display: none; overflow-y: auto; -webkit-overflow-scrolling: touch; } .detail-modal.active { display: block; } .detail-header { position: sticky; top: 0; background-color: #000; padding: 15px; border-bottom: 2px solid #FFED00; display: flex; justify-content: space-between; align-items: center; z-index: 10006; } .detail-back-btn { background: none; border: 1px solid #FFED00; color: #FFED00; font-size: 22px; cursor: pointer; padding: 6px 12px; font-family: 'DotMatrix', 'Courier New', monospace; border-radius: 6px; transition: background-color 0.15s; } .detail-back-btn:active { background-color: #FFED00; color: #000; } .detail-title { flex: 1; text-align: center; font-size: 16px; font-weight: bold; } .detail-content { padding: 15px; } .detail-section { background-color: #0a0a0a; padding: 15px; margin-bottom: 12px; border-radius: 8px; border-left: 4px solid #FFED00; } .detail-section-title { font-size: 13px; font-weight: bold; margin-bottom: 10px; opacity: 0.8; text-transform: uppercase; letter-spacing: 0.5px; } .detail-row { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #222; } .detail-row:last-child { border-bottom: none; } .detail-label { font-size: 12px; opacity: 0.7; } .detail-value { font-size: 12px; font-weight: bold; text-align: right; } .stop-list { margin-top: 10px; } .stop-item { padding: 10px; margin-bottom: 8px; background-color: #050505; border-radius: 6px; border-left: 3px solid #555; transition: background-color 0.15s; } .stop-item.current { border-left-color: #FFED00; background-color: #0f0f0a; } .stop-name { font-size: 13px; font-weight: bold; margin-bottom: 4px; } .stop-time { font-size: 11px; opacity: 0.7; } .stop-delay { color: #ff5555; font-size: 11px; margin-left: 8px; font-weight: bold; } .remark-item { background-color: #0a0500; padding: 10px; margin-bottom: 8px; border-radius: 6px; border-left: 3px solid #ff8800; } .remark-type { font-size: 10px; opacity: 0.7; text-transform: uppercase; margin-bottom: 4px; color: #ff8800; font-weight: bold; } .remark-text { font-size: 12px; line-height: 1.3; } .loading-detail { text-align: center; padding: 50px 20px; font-size: 16px; opacity: 0.7; } /* Journey Detail Modal */ .journey-detail-leg { margin-bottom: 20px; padding: 15px; background-color: #050505; border-radius: 6px; } .journey-detail-leg-header { display: flex; align-items: center; gap: 10px; margin-bottom: 15px; padding-bottom: 10px; border-bottom: 1px solid #222; } .journey-detail-stop { padding: 10px 0; margin-left: 30px; } .journey-detail-stop-time { font-size: 18px; font-weight: bold; color: #FFED00; margin-bottom: 4px; } .journey-detail-stop-name { font-size: 14px; margin-bottom: 3px; } .journey-detail-platform { font-size: 11px; color: #FFED00; opacity: 0.8; } .journey-detail-intermediate { margin: 8px 0 8px 30px; padding: 8px; background-color: #0a0a0a; border-radius: 4px; } .journey-detail-transfer { display: flex; flex-direction: column; gap: 4px; padding: 12px; margin: 10px 0; background-color: #1a1a00; border-radius: 4px; border-left: 3px solid #FFED00; font-size: 12px; } .journey-detail-transfer.tight { background-color: #2a1a00; border-left-color: #ff9900; } .journey-detail-transfer.very-tight { background-color: #2a0000; border-left-color: #ff3333; } /* Touch improvements */ .departure-item { min-height: 70px; -webkit-tap-highlight-color: rgba(255, 237, 0, 0.1); } .suggestion-item { min-height: 50px; -webkit-tap-highlight-color: rgba(255, 237, 0, 0.1); } /* Better scrolling */ .suggestions { -webkit-overflow-scrolling: touch; scrollbar-width: thin; scrollbar-color: #FFED00 #1a1a1a; } .suggestions::-webkit-scrollbar { width: 6px; } .suggestions::-webkit-scrollbar-track { background: #1a1a1a; } .suggestions::-webkit-scrollbar-thumb { background-color: #FFED00; border-radius: 3px; } /* Improved button spacing */ .btn { min-height: 48px; } .location-btn-side { width: 48px; height: 48px; min-width: 48px; min-height: 48px; padding: 0; font-size: 20px; background-color: #000; color: #FFED00; border: 2px solid #FFED00; border-radius: 6px; cursor: pointer; transition: background-color 0.15s, color 0.15s; -webkit-appearance: none; -moz-appearance: none; appearance: none; outline: none; display: flex; align-items: center; justify-content: center; flex-shrink: 0; box-sizing: border-box; } .location-btn-side:active { background-color: #FFED00; color: #000; } .location-btn-side:disabled { opacity: 0.4; cursor: not-allowed; } /* KEIN Scale/Transform - nur Emoji ändert sich */ .location-btn-side.loading { /* Button bleibt gleich, nur Emoji wird gewechselt */ } /* Status badge */ .status-badge { display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 10px; margin-left: 8px; font-weight: bold; } .status-cancelled { background-color: #cc0000; color: #fff; } .status-ontime { background-color: #00cc00; color: #000; } @media (min-width: 768px) { .container { max-width: 600px; margin: 0 auto; padding: 20px; } .detail-modal { left: 50%; transform: translateX(-50%); max-width: 600px; } } /* Pull-to-refresh styles */ .ptr-container { position: fixed; top: 0; left: 0; right: 0; height: 60px; display: flex; align-items: center; justify-content: center; background-color: #000; transform: translateY(-100%); transition: transform 0.3s; z-index: 99; } .ptr-container.pulling { transform: translateY(0); } .ptr-spinner { width: 30px; height: 30px; border: 3px solid #333; border-top-color: #FFED00; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* ============================================ RESPONSIVE DESIGN ============================================ */ /* Tablet & Desktop */ @media (min-width: 768px) { .container { max-width: 1200px; margin: 0 auto; padding: 20px 30px; } .header h1 { font-size: 32px; letter-spacing: 3px; } .header .subtitle { font-size: 13px; } .menu-btn { font-size: 28px; padding: 10px 16px; right: 20px; } /* Hover-Effekte für Desktop */ .menu-btn:hover { background-color: rgba(255, 237, 0, 0.1); } .nav-item:hover { background-color: #1a1a1a; } .departure-item:hover { background-color: #111; transform: translateX(4px); transition: transform 0.2s; } .journey-result:hover { background-color: #111; border-color: #333; } .btn:hover { background-color: rgba(255, 237, 0, 0.1); } .swap-btn:hover { background-color: #1a1a1a; } .suggestion-item:hover { background-color: #2a2a2a; } .nav-menu { width: 280px; } /* Header größer auf Desktop */ .header h1 { font-size: 36px; letter-spacing: 3px; } .header .subtitle { font-size: 14px; } .header .author { font-size: 11px; } /* Controls größer */ .controls { padding: 20px; background-color: rgba(10, 10, 10, 0.5); border-radius: 8px; } .search-input { height: 56px; font-size: 18px; padding: 14px 50px 14px 14px; } .location-btn-side { width: 56px; height: 56px; min-width: 56px; min-height: 56px; font-size: 22px; } .btn { padding: 18px; font-size: 18px; min-height: 60px; } .btn-full-width { width: 100%; font-size: 18px; } /* Journey Input - 2 Column Layout */ .journey-inputs { display: grid; grid-template-columns: 1fr auto 1fr; gap: 20px; align-items: start; } .journey-input-group { margin-bottom: 0; } .swap-btn { margin: 45px 0 0 0; width: auto; padding: 12px 20px; } .journey-label { font-size: 18px; } /* Station Info größer */ .station-info { padding: 25px; background: linear-gradient(135deg, #0a0a0a 0%, #1a1a00 100%); } .station-name { font-size: 28px; } .last-update { font-size: 15px; } /* Departure Items größer */ .departure-item { padding: 24px; margin-bottom: 18px; cursor: pointer; } .line-badge { padding: 8px 16px; font-size: 20px; } .departure-destination { font-size: 22px; } .departure-platform { font-size: 16px; padding: 5px 12px; } .platform-icon { font-size: 14px; } .departure-time { font-size: 32px; } .departure-delay { font-size: 16px; } /* Journey Results */ .journey-result { padding: 25px; margin-bottom: 20px; cursor: pointer; transition: all 0.2s; } .journey-time { font-size: 32px; } .journey-duration { font-size: 20px; } .journey-leg { padding: 25px; } .journey-leg-header { margin-bottom: 20px; } .journey-leg-icon { font-size: 36px; } .journey-leg-line { font-size: 28px; } .journey-leg-duration { font-size: 20px; } .journey-leg-stop { padding: 14px 0; gap: 40px; } .journey-leg-station { font-size: 22px; } .journey-leg-platform { font-size: 20px; min-width: 120px; } .journey-leg-time { font-size: 24px; min-width: 80px; } .journey-transfer { padding: 18px 24px; font-size: 20px; } .journey-transfer-time { font-size: 22px; } /* Detail Modal */ .detail-header { padding: 28px; } .detail-title { font-size: 26px; } .detail-content { padding: 32px 28px; } .detail-section { padding: 24px; } .stop-item { padding: 16px; } .stop-name { font-size: 18px; } /* Journey Detail Modal */ .journey-detail-leg { padding: 22px; } .journey-detail-stop-time { font-size: 24px; } .journey-detail-stop-name { font-size: 20px; } .journey-detail-platform { font-size: 16px; } .journey-detail-transfer { font-size: 18px; } } /* Large Desktop - 2 Column Layout */ @media (min-width: 1200px) { .container { padding: 30px 40px; } /* Abfahrten in 2 Spalten */ #departuresContainer { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; } .station-info { grid-column: 1 / -1; } /* Journey auch größer */ .journey-result { padding: 30px; } .journey-leg { padding: 16px; } } /* Extra Large Desktop */ @media (min-width: 1600px) { .container { max-width: 1400px; } /* 3 Spalten für Abfahrten */ #departuresContainer { grid-template-columns: repeat(3, 1fr); } .station-info { grid-column: 1 / -1; } } /* Mobile Optimierungen */ @media (max-width: 767px) { /* Mobile Design mit größerer Schrift */ .container { padding: 10px; } .header { padding: 15px 10px 12px; } .header-title { max-width: calc(100% - 80px); padding-left: 10px; } .header h1 { font-size: 24px; letter-spacing: 1.5px; } .header .subtitle { font-size: 12px; } .header .author { font-size: 10px; } .menu-btn { font-size: 26px; padding: 8px 12px; right: 10px; } .controls { padding: 12px; } .search-input { font-size: 18px; padding: 12px 44px 12px 12px; height: 48px; } .location-btn-side { width: 48px; height: 48px; min-width: 48px; min-height: 48px; font-size: 20px; } .btn { padding: 14px; font-size: 18px; } .btn-full-width { width: 100%; font-size: 18px; } .station-info { padding: 14px; } .station-name { font-size: 20px; } .last-update { font-size: 12px; } .departure-item { padding: 16px; margin-bottom: 12px; } .line-badge { padding: 6px 12px; font-size: 16px; } .departure-destination { font-size: 18px; } .departure-platform { font-size: 14px; padding: 4px 10px; } .platform-icon { font-size: 13px; } .departure-time { font-size: 26px; } .departure-delay { font-size: 14px; } .journey-result { padding: 16px; margin-bottom: 12px; } .journey-header { margin-bottom: 12px; padding-bottom: 12px; } .journey-time { font-size: 20px; } .journey-duration { font-size: 16px; } .journey-leg { padding: 14px; } .journey-leg-header { margin-bottom: 10px; gap: 10px; } .journey-leg-icon { font-size: 22px; } .journey-leg-line { font-size: 17px; } .journey-leg-duration { font-size: 13px; } .journey-leg-stop { padding: 6px 0; gap: 12px; } .journey-leg-station { font-size: 15px; } .journey-leg-platform { font-size: 13px; min-width: 70px; } .journey-leg-time { font-size: 16px; min-width: 55px; } .journey-transfer { padding: 12px 14px; font-size: 15px; } .journey-transfer-time { font-size: 17px; } .journey-label { font-size: 16px; } .swap-btn { margin: 12px 0; font-size: 20px; } body { overflow-x: hidden; } /* Text truncation für lange Namen */ .departure-destination { overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } } .journey-leg { padding: 10px; gap: 10px; } .journey-leg-icon { font-size: 18px; } .journey-leg-line { font-size: 13px; } .journey-leg-stations { font-size: 11px; } .journey-leg-time { font-size: 10px; min-width: 50px; } .journey-transfer { padding: 10px 12px; font-size: 13px; } .journey-transfer-time { font-size: 15px; } .journey-label { font-size: 14px; } .swap-btn { margin: 10px 0; font-size: 18px; } body { overflow-x: hidden; } /* Text truncation für lange Namen */ .departure-destination { overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } } /* Extra Small Mobile (SE, kleine Geräte) */ @media (max-width: 360px) { .header h1 { font-size: 20px; } .departure-item { padding: 10px; } .line-badge { font-size: 11px; } .departure-destination { font-size: 13px; } .departure-time { font-size: 16px; } } /* Live-Map Styles */ .livemap-container { width: 100%; height: calc(100vh - 140px); position: relative; overflow: hidden; } #liveMap { width: 100%; height: 100%; } .livemap-controls { position: absolute; top: 10px; left: 10px; right: 10px; z-index: 1000; display: flex; flex-direction: column; gap: 10px; } .livemap-info { background-color: rgba(0, 0, 0, 0.85); padding: 12px 16px; border-radius: 8px; border: 2px solid #FFED00; font-size: 16px; font-weight: bold; text-align: center; color: #FFED00; } .livemap-filters { display: flex; gap: 8px; flex-wrap: wrap; justify-content: center; } .filter-btn { background-color: rgba(0, 0, 0, 0.85); border: 2px solid #666; color: #FFED00; padding: 8px 14px; border-radius: 6px; font-family: 'DotMatrix', 'Courier New', monospace; font-size: 14px; cursor: pointer; transition: all 0.2s; font-weight: bold; } .filter-btn.active { background-color: #FFED00; color: #000; border-color: #FFED00; } .filter-btn:active { transform: scale(0.95); } /* Leaflet Marker Styling */ .vehicle-marker-container { display: flex; flex-direction: column; align-items: center; animation: pulse-marker 2s ease-in-out infinite; cursor: pointer; } .vehicle-emoji { font-size: 28px; line-height: 1; margin-bottom: 3px; text-shadow: 2px 2px 4px rgba(0,0,0,0.8); filter: drop-shadow(0 0 3px rgba(255,237,0,0.3)); } .vehicle-line { font-family: 'DotMatrix', 'Courier New', monospace; font-size: 11px; font-weight: bold; padding: 3px 6px; border-radius: 4px; border: 2px solid #000; min-width: 28px; text-align: center; box-shadow: 0 2px 6px rgba(0,0,0,0.6); white-space: nowrap; line-height: 1; } @keyframes pulse-marker { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } } .vehicle-popup { font-family: 'DotMatrix', 'Courier New', monospace; background-color: #000 !important; color: #fff; } .vehicle-popup .popup-line { font-size: 16px; font-weight: bold; text-align: center; } .vehicle-popup .popup-direction { font-size: 14px; margin-bottom: 6px; color: #fff; text-align: center; } .vehicle-popup .popup-delay { font-size: 12px; color: #ff5555; font-weight: bold; text-align: center; } /* Leaflet Popup Dark Mode */ .leaflet-popup-content-wrapper { background-color: #000 !important; border: 2px solid #FFED00 !important; border-radius: 8px !important; padding: 12px !important; } .leaflet-popup-tip { background-color: #000 !important; } .leaflet-popup-content { margin: 0 !important; } /* Popup über alles andere (Header hat z-index: 10000, Nav: 10003) */ .leaflet-popup-pane { z-index: 10010 !important; } .leaflet-popup { z-index: 10010 !important; } /* Leaflet Zoom Controls nur Desktop */ @media (max-width: 767px) { .leaflet-control-zoom { display: none !important; } .livemap-controls { top: 5px; left: 5px; right: 5px; } .livemap-info { padding: 10px 12px; font-size: 14px; } .filter-btn { padding: 6px 10px; font-size: 12px; } .vehicle-emoji { font-size: 24px; } .vehicle-line { font-size: 10px; padding: 2px 5px; min-width: 24px; } } @media (min-width: 768px) { .vehicle-emoji { font-size: 32px; } .vehicle-line { font-size: 12px; padding: 4px 8px; min-width: 32px; } } /* ========================================== HOME VIEW STYLING - COMBINED HERO! ========================================== */ .home-container { max-width: 900px; margin: 0 auto; padding: 0; padding-bottom: 70px; } /* Combined Hero + Navigation Box - ALLES IN EINER BOX! */ .home-hero-combined { background: linear-gradient(135deg, #000 0%, #1a1a1a 100%); border: 3px solid #FFED00; border-radius: 12px; padding: 20px; margin: 20px 20px 20px 20px; } /* Navigation Hint - OBEN in der Box */ .home-nav-hint { margin-bottom: 20px; padding-bottom: 20px; border-bottom: 2px solid #333; } .home-hint-text { flex: 1; color: #fff; line-height: 1.6; font-size: 14px; } .home-hint-text strong { color: #FFED00; } /* Hero Title - UNTEN in der Box */ .home-hero-title { text-align: center; } .home-hero-title h1 { font-family: 'DotMatrix', 'Courier New', monospace; font-size: 32px; color: #FFED00; margin: 0 0 8px 0; letter-spacing: 2px; } .home-hero-title p { font-size: 15px; color: #fff; margin: 0 0 12px 0; } .home-version { display: inline-block; background: #FFED00; color: #000; padding: 4px 10px; border-radius: 20px; font-size: 11px; font-weight: bold; } /* Quick Info Cards */ .home-quick-info { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin: 0 20px 20px 20px; } .home-info-card { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 15px 12px; text-align: center; } .home-info-icon { font-size: 32px; margin-bottom: 8px; } .home-info-text strong { display: block; color: #FFED00; font-size: 13px; margin-bottom: 4px; } .home-info-text p { margin: 0; color: #999; font-size: 11px; line-height: 1.3; } /* Two Column Layout */ .home-columns { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin: 0 20px 20px 20px; } .home-box { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 18px; } .home-box-title { font-family: 'DotMatrix', 'Courier New', monospace; font-size: 18px; color: #FFED00; margin: 0 0 15px 0; padding-bottom: 8px; border-bottom: 2px solid #333; } /* Update/Changelog Items */ .home-update { margin-bottom: 12px; padding: 10px; background: #000; border-radius: 6px; border: 1px solid #333; } .home-update-latest { border: 2px solid #FFED00; } .home-update-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; } .home-update-version { background: #FFED00; color: #000; padding: 2px 8px; border-radius: 4px; font-weight: bold; font-size: 11px; } .home-update-date { color: #888; font-size: 10px; } .home-update h3 { font-size: 13px; color: #FFED00; margin: 0 0 6px 0; } .home-update ul { margin: 0; padding-left: 16px; color: #ccc; } .home-update li { margin-bottom: 3px; font-size: 12px; line-height: 1.4; } /* Details/Summary (Collapsible) */ .home-details { margin-top: 10px; } .home-summary { cursor: pointer; padding: 8px; background: #000; border: 1px solid #333; border-radius: 6px; color: #FFED00; font-weight: bold; font-size: 12px; user-select: none; text-align: center; } .home-summary:hover { background: #1a1a1a; } .home-details[open] .home-summary { border-bottom-left-radius: 0; border-bottom-right-radius: 0; margin-bottom: 10px; } /* Credit Items */ .home-credit { margin-bottom: 10px; padding: 8px; background: #000; border-radius: 6px; border: 1px solid #333; } .home-credit:last-child { margin-bottom: 0; } .home-credit strong { color: #FFED00; display: block; margin-bottom: 3px; font-size: 12px; } .home-credit p { margin: 0; color: #ccc; font-size: 12px; line-height: 1.4; } .home-credit a { color: #FFED00; text-decoration: none; } .home-credit a:hover { text-decoration: underline; } /* Features Box */ .home-features-box { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 18px; margin: 0 20px 20px 20px; } .home-features-box h3 { font-family: 'DotMatrix', 'Courier New', monospace; font-size: 18px; color: #FFED00; margin: 0 0 12px 0; padding-bottom: 8px; border-bottom: 2px solid #333; } .home-features-box ul { margin: 0; padding-left: 20px; color: #ccc; } .home-features-box li { margin-bottom: 8px; font-size: 13px; line-height: 1.5; } .home-features-box li:last-child { margin-bottom: 0; } .home-features-box strong { color: #FFED00; } /* Footer */ .home-footer { text-align: center; padding: 20px; margin: 0 20px; color: #888; border-top: 1px solid #333; } .home-footer p { margin: 5px 0; font-size: 13px; } .home-footer strong { color: #FFED00; } .home-footer-small { font-size: 11px; color: #666; } .home-footer-github { margin-top: 15px !important; } .home-footer-github a { display: inline-block; padding: 8px 16px; background: #1a1a1a; color: #FFED00; text-decoration: none; border-radius: 5px; border: 1px solid #333; font-size: 13px; transition: all 0.2s ease; } .home-footer-github a:hover { background: #FFED00; color: #000; border-color: #FFED00; } /* GitHub Link Button */ .home-github-link { text-align: center; margin: 20px 0; padding-bottom: 20px; border-bottom: 2px solid #333; } .home-github-btn { display: inline-block; padding: 12px 24px; background: #1a1a1a; color: #FFED00; text-decoration: none; border-radius: 5px; border: 2px solid #FFED00; font-size: 14px; font-weight: bold; transition: all 0.2s ease; } .home-github-btn:hover { background: #FFED00; color: #000; transform: translateY(-2px); } /* Mobile Responsive */ @media (max-width: 767px) { .home-container { padding-bottom: 60px; } .home-hero-combined { padding: 15px; margin: 15px 15px 15px 15px; } .home-nav-hint { text-align: center; margin-bottom: 15px; padding-bottom: 15px; } .home-hint-text { font-size: 13px; } .home-hero-title h1 { font-size: 26px; } .home-hero-title p { font-size: 13px; } /* Quick Info Cards - Single Row on Mobile */ .home-quick-info { grid-template-columns: 1fr; gap: 10px; margin: 0 15px 15px 15px; } .home-info-card { display: flex; align-items: center; gap: 12px; text-align: left; padding: 12px; } .home-info-icon { font-size: 28px; margin-bottom: 0; } .home-info-text strong { font-size: 14px; } .home-info-text p { font-size: 12px; } /* Single Column on Mobile */ .home-columns { grid-template-columns: 1fr; gap: 12px; margin: 0 15px 15px 15px; } .home-box { padding: 15px; } .home-box-title { font-size: 16px; } .home-features-box { padding: 15px; margin: 0 15px 15px 15px; } .home-features-box h3 { font-size: 16px; } .home-footer { margin: 0 15px; } .home-github-btn { font-size: 13px; padding: 10px 18px; } .home-footer-github a { font-size: 12px; padding: 7px 14px; } }