| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Car Garage - Vue SPA</title> |
| <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> |
| <script src="https://cdn.jsdelivr.net/npm/three@0.150.0/build/three.min.js"></script> |
| <script src="https://cdn.jsdelivr.net/npm/three@0.150.0/examples/js/loaders/GLTFLoader.js"></script> |
| <script src="https://cdn.jsdelivr.net/npm/three@0.150.0/examples/js/controls/OrbitControls.js"></script> |
| <style> |
| * { |
| margin: 0; |
| padding: 0; |
| box-sizing: border-box; |
| } |
| |
| body { |
| font-family: 'Arial', sans-serif; |
| overflow: hidden; |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); |
| } |
| |
| #app { |
| width: 100vw; |
| height: 100vh; |
| display: flex; |
| flex-direction: column; |
| } |
| |
| .garage-container { |
| flex: 1; |
| display: flex; |
| flex-direction: column; |
| padding: 20px; |
| position: relative; |
| } |
| |
| .header { |
| display: flex; |
| justify-content: space-between; |
| align-items: center; |
| margin-bottom: 20px; |
| } |
| |
| .mode-toggle { |
| background: rgba(255, 255, 255, 0.2); |
| border: 2px solid rgba(255, 255, 255, 0.4); |
| color: white; |
| padding: 10px 20px; |
| border-radius: 8px; |
| cursor: pointer; |
| font-weight: bold; |
| transition: all 0.3s ease; |
| backdrop-filter: blur(10px); |
| } |
| |
| .mode-toggle:hover { |
| background: rgba(255, 255, 255, 0.3); |
| transform: translateY(-2px); |
| } |
| |
| .main-display { |
| flex: 1; |
| display: flex; |
| justify-content: center; |
| align-items: center; |
| margin-bottom: 20px; |
| } |
| |
| .image-slot { |
| width: 600px; |
| height: 400px; |
| background: rgba(255, 255, 255, 0.1); |
| border: 3px dashed rgba(255, 255, 255, 0.4); |
| border-radius: 15px; |
| display: flex; |
| flex-direction: column; |
| justify-content: center; |
| align-items: center; |
| cursor: pointer; |
| transition: all 0.3s ease; |
| position: relative; |
| overflow: hidden; |
| backdrop-filter: blur(10px); |
| } |
| |
| .image-slot:hover { |
| background: rgba(255, 255, 255, 0.2); |
| border-color: rgba(255, 255, 255, 0.6); |
| transform: scale(1.02); |
| } |
| |
| .image-slot img { |
| max-width: 100%; |
| max-height: 100%; |
| object-fit: contain; |
| } |
| |
| .placeholder { |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| color: rgba(255, 255, 255, 0.7); |
| } |
| |
| .question-mark { |
| font-size: 120px; |
| font-weight: bold; |
| margin-bottom: 20px; |
| text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); |
| } |
| |
| .placeholder-text { |
| font-size: 18px; |
| text-align: center; |
| } |
| |
| .viewer-3d { |
| width: 600px; |
| height: 400px; |
| border-radius: 15px; |
| overflow: hidden; |
| } |
| |
| .inventory-bar { |
| background: rgba(0, 0, 0, 0.3); |
| padding: 15px; |
| border-radius: 10px; |
| backdrop-filter: blur(10px); |
| } |
| |
| .inventory-slots { |
| display: flex; |
| gap: 15px; |
| overflow-x: auto; |
| padding: 10px 0; |
| } |
| |
| .inventory-slot { |
| min-width: 100px; |
| height: 100px; |
| background: rgba(255, 255, 255, 0.1); |
| border: 2px solid rgba(255, 255, 255, 0.3); |
| border-radius: 10px; |
| display: flex; |
| justify-content: center; |
| align-items: center; |
| cursor: pointer; |
| transition: all 0.3s ease; |
| position: relative; |
| overflow: hidden; |
| } |
| |
| .inventory-slot:hover { |
| background: rgba(255, 255, 255, 0.2); |
| border-color: rgba(255, 255, 255, 0.5); |
| transform: translateY(-5px); |
| } |
| |
| .inventory-slot.active { |
| border-color: #4CAF50; |
| box-shadow: 0 0 20px rgba(76, 175, 80, 0.5); |
| } |
| |
| .inventory-slot img { |
| max-width: 100%; |
| max-height: 100%; |
| object-fit: cover; |
| } |
| |
| .inventory-slot .empty { |
| color: rgba(255, 255, 255, 0.3); |
| font-size: 40px; |
| } |
| |
| .remove-btn { |
| position: absolute; |
| top: 5px; |
| right: 5px; |
| background: rgba(255, 0, 0, 0.7); |
| color: white; |
| border: none; |
| border-radius: 50%; |
| width: 25px; |
| height: 25px; |
| cursor: pointer; |
| display: none; |
| align-items: center; |
| justify-content: center; |
| font-size: 16px; |
| font-weight: bold; |
| } |
| |
| .inventory-slot:hover .remove-btn, |
| .image-slot:hover .remove-btn { |
| display: flex; |
| } |
| |
| .image-slot .remove-btn { |
| width: 40px; |
| height: 40px; |
| font-size: 24px; |
| } |
| |
| input[type="file"] { |
| display: none; |
| } |
| |
| .inventory-title { |
| color: white; |
| margin-bottom: 10px; |
| font-size: 16px; |
| font-weight: bold; |
| text-transform: uppercase; |
| letter-spacing: 1px; |
| } |
| |
| .loading { |
| color: white; |
| |