diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..24eefb3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +Lession_material +*.DS_Store +.aider* diff --git a/css/map.css b/css/map.css index e69de29..ba46085 100644 --- a/css/map.css +++ b/css/map.css @@ -0,0 +1,528 @@ +/* Map Page Specific Styles */ + +/* App Layout */ +.app-container { + display: flex; + height: 100vh; + overflow: hidden; + font-family: 'Poppins', sans-serif; +} + +/* Sidebar Styles */ +.sidebar { + width: 350px; + background-color: #2c3e50; + color: #ecf0f1; + display: flex; + flex-direction: column; + box-shadow: 2px 0 10px rgba(0, 0, 0, 0.1); + transition: transform 0.3s ease; + z-index: 10; +} + +.sidebar-header { + padding: 20px; + border-bottom: 1px solid #34495e; +} + +.sidebar-header h1 { + margin: 0; + font-size: 1.5rem; + display: flex; + align-items: center; + gap: 10px; +} + +.tagline { + margin: 5px 0 0; + font-size: 0.85rem; + color: #bdc3c7; + font-family: 'Roboto', sans-serif; +} + +/* Mode Selector */ +.mode-selector { + display: flex; + padding: 15px; + gap: 10px; + border-bottom: 1px solid #34495e; +} + +.mode-btn { + flex: 1; + padding: 10px; + background-color: #34495e; + border: none; + color: #ecf0f1; + border-radius: 5px; + cursor: pointer; + font-family: 'Poppins', sans-serif; + font-weight: 500; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + transition: all 0.2s ease; +} + +.mode-btn:hover { + background-color: #3d566e; +} + +.mode-btn.active { + background-color: #3498db; + box-shadow: 0 2px 5px rgba(52, 152, 219, 0.3); +} + +/* Panels */ +.panel { + padding: 20px; + border-bottom: 1px solid #34495e; + display: none; +} + +.panel.active-panel { + display: block; +} + +.panel h3 { + margin-top: 0; + display: flex; + align-items: center; + gap: 10px; + font-size: 1.2rem; +} + +/* Form Styles */ +.form-group { + margin-bottom: 15px; +} + +.form-group label { + display: block; + margin-bottom: 5px; + font-weight: 500; + display: flex; + align-items: center; + gap: 5px; +} + +.form-group input, +.form-group textarea, +.form-group select { + width: 100%; + padding: 10px; + border-radius: 5px; + border: 1px solid #34495e; + background-color: #34495e; + color: #ecf0f1; + font-family: 'Roboto', sans-serif; +} + +.form-group textarea { + min-height: 80px; + resize: vertical; +} + +/* Instructions */ +.instructions { + background-color: rgba(52, 73, 94, 0.5); + border-radius: 5px; + padding: 15px; + margin: 15px 0; +} + +.instructions h4 { + margin-top: 0; + display: flex; + align-items: center; + gap: 8px; +} + +.instructions ol { + margin: 10px 0 0; + padding-left: 20px; +} + +.instructions li { + margin-bottom: 5px; + font-size: 0.9rem; +} + +/* Buttons */ +.button-group { + display: flex; + gap: 10px; + margin-top: 15px; +} + +.btn { + padding: 10px 15px; + border: none; + border-radius: 5px; + cursor: pointer; + font-family: 'Poppins', sans-serif; + font-weight: 500; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + transition: all 0.2s ease; +} + +.btn-primary { + background-color: #3498db; + color: white; +} + +.btn-primary:hover { + background-color: #2980b9; +} + +.btn-secondary { + background-color: #7f8c8d; + color: white; +} + +.btn-secondary:hover { + background-color: #6c7b7d; +} + +.btn-danger { + background-color: #e74c3c; + color: white; +} + +.btn-danger:hover { + background-color: #c0392b; +} + +.btn-small { + padding: 5px 10px; + font-size: 0.85rem; +} + +/* Filter Options */ +.filter-options { + margin: 15px 0; +} + +.checkbox-group { + display: flex; + flex-direction: column; + gap: 8px; +} + +.checkbox-group label { + display: flex; + align-items: center; + gap: 8px; + cursor: pointer; +} + +/* Journey Info */ +.journey-info { + background-color: rgba(52, 73, 94, 0.5); + border-radius: 5px; + padding: 15px; + margin-top: 15px; +} + +.info-content p { + margin: 8px 0; +} + +/* Markers List */ +.markers-list { + flex: 1; + padding: 20px; + overflow-y: auto; +} + +.markers-list h3 { + display: flex; + align-items: center; + gap: 10px; + margin-top: 0; +} + +#markers-container { + margin-top: 15px; +} + +.empty-message { + text-align: center; + color: #7f8c8d; + font-style: italic; + padding: 20px; +} + +/* Footer */ +.sidebar-footer { + padding: 15px 20px; + border-top: 1px solid #34495e; + background-color: #253342; +} + +.navigation { + display: flex; + justify-content: space-around; + margin-bottom: 10px; +} + +.nav-link { + color: #3498db; + text-decoration: none; + display: flex; + align-items: center; + gap: 5px; + font-size: 0.9rem; +} + +.nav-link:hover { + text-decoration: underline; +} + +.footer-text { + text-align: center; + font-size: 0.8rem; + color: #7f8c8d; + margin: 0; +} + +/* Map Area */ +.map-area { + flex: 1; + position: relative; +} + +#map { + width: 100%; + height: 100%; +} + +/* Map Controls */ +.map-controls { + position: absolute; + top: 20px; + right: 20px; + display: flex; + flex-direction: column; + gap: 10px; + z-index: 1; +} + +.control-btn { + width: 40px; + height: 40px; + border-radius: 5px; + background-color: white; + border: none; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 1rem; + color: #2c3e50; + transition: all 0.2s ease; +} + +.control-btn:hover { + background-color: #f8f9fa; + transform: translateY(-2px); +} + +/* Mode Indicator */ +.mode-indicator { + position: absolute; + top: 20px; + left: 20px; + background-color: rgba(255, 255, 255, 0.9); + padding: 10px 15px; + border-radius: 5px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + display: flex; + align-items: center; + gap: 10px; + z-index: 1; +} + +.indicator-text { + font-weight: 500; + color: #2c3e50; +} + +.indicator-dot { + width: 10px; + height: 10px; + border-radius: 50%; +} + +.indicator-dot.creating { + background-color: #3498db; +} + +.indicator-dot.viewing { + background-color: #2ecc71; +} + +/* Modal */ +.modal { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + z-index: 100; + align-items: center; + justify-content: center; +} + +.modal.active { + display: flex; +} + +.modal-content { + background-color: white; + border-radius: 10px; + width: 90%; + max-width: 500px; + max-height: 90vh; + overflow-y: auto; + box-shadow: 0 5px 20px rgba(0, 0, 0, 0.2); +} + +.modal-header { + padding: 20px; + border-bottom: 1px solid #eee; + display: flex; + justify-content: space-between; + align-items: center; +} + +.modal-header h3 { + margin: 0; + display: flex; + align-items: center; + gap: 10px; +} + +.close-btn { + background: none; + border: none; + font-size: 1.5rem; + cursor: pointer; + color: #7f8c8d; +} + +.close-btn:hover { + color: #2c3e50; +} + +.modal-body { + padding: 20px; +} + +/* Image Upload */ +.image-upload-area { + border: 2px dashed #ddd; + border-radius: 5px; + padding: 15px; + margin-top: 5px; +} + +.image-preview { + display: flex; + flex-wrap: wrap; + gap: 10px; + margin-bottom: 15px; + min-height: 60px; +} + +.upload-actions { + display: flex; + gap: 10px; +} + +.help-text { + display: block; + margin-top: 5px; + color: #7f8c8d; + font-size: 0.85rem; +} + +.coordinates { + padding: 10px; + background-color: #f8f9fa; + border-radius: 5px; + margin-top: 15px; +} + +.modal-footer { + padding: 15px 20px; + border-top: 1px solid #eee; + display: flex; + gap: 10px; + justify-content: flex-end; +} + +/* Toast */ +.toast { + position: fixed; + bottom: 20px; + right: 20px; + background-color: #2ecc71; + color: white; + padding: 15px 20px; + border-radius: 5px; + box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2); + display: none; + z-index: 100; + animation: slideIn 0.3s ease; +} + +@keyframes slideIn { + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0); + opacity: 1; + } +} + +/* Responsive */ +@media (max-width: 768px) { + .sidebar { + position: fixed; + top: 0; + left: 0; + height: 100%; + transform: translateX(-100%); + } + + .sidebar.active { + transform: translateX(0); + } + + .app-container { + flex-direction: column; + } + + .map-controls { + top: auto; + bottom: 20px; + right: 20px; + flex-direction: row; + } + + .mode-indicator { + top: 10px; + left: 10px; + font-size: 0.9rem; + } +} \ No newline at end of file diff --git a/css/style.css b/css/style.css index b941227..de33381 100644 --- a/css/style.css +++ b/css/style.css @@ -9,4 +9,39 @@ .sidebar { width: 350px; } -} \ No newline at end of file +} + +/* Journey timeline styles */ +.journey-timeline { + padding: 20px; + max-width: 800px; + margin: 0 auto; +} + +.timeline-event { + border-left: 3px solid #3498db; + padding: 15px 20px; + margin: 20px 0; + background-color: #f9f9f9; +} + +.timeline-event .date { + color: #7f8c8d; + font-style: italic; +} + +.timeline-event .location { + font-size: 0.9em; + color: #2c3e50; +} + +.images-container { + display: flex; + gap: 10px; + flex-wrap: wrap; +} + +.images-container img { + max-width: 100px; + height: auto; +} diff --git a/journey.html b/journey.html index e69de29..826cb5f 100644 --- a/journey.html +++ b/journey.html @@ -0,0 +1,17 @@ + + +
+ + +${marker.content.date}
+${marker.lngLat.lng.toFixed(4)}, ${marker.lngLat.lat.toFixed(4)}
+${marker.content.text}
+ ${marker.content.videoUrl ? `` : ''} +