SocialShare / frontend /src /components /common /FileUpload.css
NitinBot002's picture
Initial commit with all project files
f4854a1
/* ============================================================
FileUpload Component Styles
============================================================ */
.fu-root {
width: 100%;
}
/* ── Drop Zone ── */
.fu-zone {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 0.6rem;
border: 2px dashed var(--color-neutral-300);
border-radius: var(--radius-xl);
padding: 2rem 1.5rem;
background: var(--color-neutral-50);
cursor: pointer;
transition: all 0.22s ease;
position: relative;
overflow: hidden;
text-align: center;
min-height: 140px;
}
.fu-zone:hover {
border-color: var(--color-primary-400);
background: var(--color-primary-50);
}
.fu-zone--dragging {
border-color: var(--color-primary-500);
background: linear-gradient(135deg, var(--color-primary-50), #dcfce7);
transform: scale(1.01);
box-shadow: 0 0 0 4px rgba(45, 106, 79, 0.12);
}
.fu-zone--uploading {
pointer-events: none;
opacity: 0.85;
}
/* Hidden native input */
.fu-input {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
}
/* Icon */
.fu-zone__icon {
font-size: 2.2rem;
color: var(--color-primary-400);
transition: color 0.2s, transform 0.2s;
}
.fu-zone:hover .fu-zone__icon,
.fu-zone--dragging .fu-zone__icon {
color: var(--color-primary-600);
transform: translateY(-2px);
}
.fu-zone__label {
font-size: 0.95rem;
font-weight: 600;
color: var(--color-neutral-700);
margin: 0;
}
.fu-zone__hint {
font-size: 0.78rem;
color: var(--color-neutral-400);
margin: 0;
}
/* ── Progress Bar ── */
.fu-progress {
width: 100%;
height: 6px;
background: var(--color-neutral-200);
border-radius: 999px;
overflow: hidden;
position: relative;
margin-top: 0.5rem;
}
.fu-progress__bar {
height: 100%;
background: linear-gradient(90deg, var(--color-primary-500), var(--color-primary-400));
border-radius: 999px;
transition: width 0.2s ease;
}
.fu-progress__label {
position: absolute;
right: 0;
top: -1.5rem;
font-size: 0.75rem;
color: var(--color-primary-600);
font-weight: 600;
}
/* ── Preview State ── */
.fu-preview {
position: relative;
border-radius: var(--radius-xl);
overflow: hidden;
border: 2px solid var(--color-neutral-200);
background: var(--color-neutral-50);
}
.fu-preview__img {
width: 100%;
height: 180px;
object-fit: cover;
display: block;
}
.fu-preview__doc {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 0.5rem;
padding: 2rem;
color: var(--color-neutral-500);
}
.fu-preview__doc-icon {
font-size: 2.5rem;
color: var(--color-primary-400);
}
/* Remove button */
.fu-preview__remove {
position: absolute;
top: 0.5rem;
right: 0.5rem;
width: 2rem;
height: 2rem;
background: rgba(0, 0, 0, 0.55);
border: none;
border-radius: 50%;
color: white;
font-size: 1rem;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: background 0.2s;
z-index: 2;
}
.fu-preview__remove:hover {
background: rgba(239, 68, 68, 0.85);
}
/* Success badge */
.fu-preview__success {
position: absolute;
bottom: 0.5rem;
left: 0.5rem;
background: rgba(16, 185, 129, 0.9);
color: white;
font-size: 0.75rem;
font-weight: 600;
padding: 0.25rem 0.6rem;
border-radius: var(--radius-full);
display: flex;
align-items: center;
gap: 0.3rem;
}
/* ── Error ── */
.fu-error {
display: flex;
align-items: center;
gap: 0.4rem;
margin-top: 0.5rem;
font-size: 0.82rem;
color: #EF4444;
}
/* ── Spin (shared) ── */
@keyframes spin {
to { transform: rotate(360deg); }
}
.spin-icon {
animation: spin 0.8s linear infinite;
}