.uploadContainer { display: flex; flex-direction: column; width: 100%; max-width: 550px; animation: slideUpFloat 1s cubic-bezier(0.16, 1, 0.3, 1) 0.2s forwards; opacity: 0; transform: translateY(40px); position: relative; z-index: 20; } .dropZone { width: 100%; min-height: 320px; display: flex; flex-direction: column; align-items: center; justify-content: center; border: 1px dashed var(--border-glass); cursor: pointer; transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); position: relative; overflow: hidden; } .dropZone:hover, .dragging { border-color: var(--accent-primary); background: rgba(255, 42, 42, 0.05); box-shadow: inset 0 0 30px rgba(255, 42, 42, 0.05), 0 15px 40px rgba(0, 0, 0, 0.4); transform: translateY(-8px); } .promptContent { text-align: center; pointer-events: none; } .icon { margin-bottom: 1.5rem; color: var(--accent-primary); filter: drop-shadow(0 10px 20px rgba(56, 189, 248, 0.4)); transition: transform 0.3s ease; } .dropZone:hover .icon { transform: scale(1.1) translateY(-5px); } .hint { color: var(--text-secondary); font-size: 1rem; margin-top: 0.5rem; } .previewContainer { width: 100%; height: 100%; min-height: 320px; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 1rem; animation: fadeIn 0.4s ease; } .previewImage { max-width: 100%; max-height: 220px; object-fit: contain; border-radius: 12px; filter: drop-shadow(0 15px 30px rgba(0, 0, 0, 0.5)); } .actions { margin-top: 1.5rem; } .resetBtn { background: transparent; color: var(--text-secondary); border: 1px solid var(--border-glass); padding: 8px 16px; border-radius: 20px; cursor: pointer; transition: all 0.2s ease; font-family: var(--font-body); font-weight: 500; } .resetBtn:hover { color: var(--text-primary); border-color: var(--text-primary); background: rgba(255, 255, 255, 0.05); } .errorMessage { color: var(--accent-primary); margin-top: 1.5rem; font-weight: 600; text-align: center; background: rgba(255, 42, 42, 0.1); padding: 12px; border-radius: 12px; border: 1px solid rgba(255, 42, 42, 0.2); } .submitBtn { margin-top: 2rem; width: 100%; font-size: 1.2rem; padding: 18px; animation: popIn 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; } @keyframes slideUpFloat { to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes popIn { from { transform: scale(0.95); opacity: 0; } to { transform: scale(1); opacity: 1; } } .errorShake { animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both; border-color: var(--accent-primary); } @keyframes shake { 10%, 90% { transform: translate3d(-1px, 0, 0); } 20%, 80% { transform: translate3d(2px, 0, 0); } 30%, 50%, 70% { transform: translate3d(-4px, 0, 0); } 40%, 60% { transform: translate3d(4px, 0, 0); } } @media (max-width: 968px) { .uploadContainer { max-width: 100%; width: 100%; } } @media (max-width: 768px) { .dropZone { min-height: 260px; } .previewContainer { min-height: 260px; } .submitBtn { font-size: 1.05rem; padding: 16px; } } @media (max-width: 480px) { .dropZone { min-height: 220px; border-radius: 16px; } .previewContainer { min-height: 220px; } .previewImage { max-height: 180px; } .submitBtn { font-size: 1rem; padding: 14px; } }