/* FileUpload Component Styles */ .file-upload { width: 100%; margin: 20px 0; } /* Drop Zone */ .drop-zone { border: 2px dashed #007bff; border-radius: 12px; padding: 40px 20px; text-align: center; cursor: pointer; transition: all 0.3s ease; background: #f8f9fa; position: relative; min-height: 150px; display: flex; align-items: center; justify-content: center; } .drop-zone:hover { border-color: #0056b3; background: #e3f2fd; transform: translateY(-2px); } .drop-zone.drag-over { border-color: #28a745; background: #d4edda; border-style: solid; } .drop-zone.disabled { opacity: 0.6; cursor: not-allowed; background: #e9ecef; border-color: #ced4da; } .drop-zone.disabled:hover { transform: none; border-color: #ced4da; background: #e9ecef; } .drop-zone-content { pointer-events: none; } .upload-icon { font-size: 3em; margin-bottom: 15px; opacity: 0.7; } .upload-text { font-size: 1.1em; font-weight: 600; color: #333; margin: 0 0 8px 0; } .upload-hint { font-size: 0.9em; color: #666; margin: 0; } /* Error Messages */ .upload-errors { margin-top: 15px; } .error-message { background: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; border-radius: 6px; padding: 8px 12px; margin-bottom: 8px; font-size: 0.9em; } /* File Previews */ .file-previews { margin-top: 20px; border-top: 1px solid #e0e0e0; padding-top: 20px; } .preview-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; } .preview-header h4 { margin: 0; color: #333; font-size: 1.1em; } .clear-all-btn { background: #dc3545; color: white; border: none; padding: 6px 12px; border-radius: 6px; font-size: 0.9em; cursor: pointer; transition: all 0.3s ease; } .clear-all-btn:hover:not(:disabled) { background: #c82333; transform: translateY(-1px); } .clear-all-btn:disabled { opacity: 0.6; cursor: not-allowed; transform: none; } /* Preview Grid */ .preview-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 15px; } .file-preview { background: white; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; transition: all 0.3s ease; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .file-preview:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); } .preview-image { position: relative; width: 100%; height: 150px; background: #f8f9fa; display: flex; align-items: center; justify-content: center; overflow: hidden; } .preview-image img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s ease; } .preview-image:hover img { transform: scale(1.05); } .remove-file-btn { position: absolute; top: 8px; right: 8px; background: rgba(220, 53, 69, 0.9); color: white; border: none; width: 24px; height: 24px; border-radius: 50%; font-size: 12px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; opacity: 0; } .file-preview:hover .remove-file-btn { opacity: 1; } .remove-file-btn:hover:not(:disabled) { background: rgba(200, 35, 51, 0.9); transform: scale(1.1); } .remove-file-btn:disabled { opacity: 0.4; cursor: not-allowed; transform: none; } .file-info { padding: 12px; text-align: left; } .file-name { font-weight: 600; color: #333; font-size: 0.9em; margin-bottom: 4px; word-break: break-word; } .file-size { color: #666; font-size: 0.8em; } /* Progress Bar (for future use) */ .upload-progress { margin-top: 15px; background: #e9ecef; border-radius: 10px; overflow: hidden; height: 8px; } .upload-progress-bar { height: 100%; background: linear-gradient(90deg, #007bff, #0056b3); transition: width 0.3s ease; border-radius: 10px; } /* Responsive Design */ @media (max-width: 768px) { .drop-zone { padding: 30px 15px; min-height: 120px; } .upload-icon { font-size: 2.5em; margin-bottom: 10px; } .upload-text { font-size: 1em; } .upload-hint { font-size: 0.8em; } .preview-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; } .preview-image { height: 120px; } .preview-header { flex-direction: column; gap: 10px; align-items: stretch; } .clear-all-btn { align-self: center; width: fit-content; } } @media (max-width: 480px) { .preview-grid { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); } .file-info { padding: 8px; } .file-name { font-size: 0.8em; } .file-size { font-size: 0.75em; } }