180 lines
2.5 KiB
SCSS
180 lines
2.5 KiB
SCSS
.card.card {
|
|
padding: 0;
|
|
min-width: 220px;
|
|
max-width: 220px;
|
|
height: auto;
|
|
overflow: hidden;
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
display: flex;
|
|
flex-direction: column;
|
|
cursor: pointer;
|
|
transition:
|
|
transform 0.2s ease,
|
|
box-shadow 0.2s ease;
|
|
|
|
&:hover {
|
|
transform: translateY(-4px);
|
|
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.12);
|
|
}
|
|
|
|
&.disabled {
|
|
cursor: default;
|
|
|
|
&:hover {
|
|
transform: none;
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
}
|
|
}
|
|
}
|
|
|
|
.imageContainer {
|
|
position: relative;
|
|
width: 100%;
|
|
height: 240px;
|
|
background: linear-gradient(180deg, #f5f5f5 0%, #e0e0e0 100%);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.portraitImage {
|
|
object-fit: cover;
|
|
object-position: center;
|
|
}
|
|
|
|
.placeholderImage {
|
|
width: 100%;
|
|
height: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: linear-gradient(135deg, #f5f5f5 0%, #e8e8e8 100%);
|
|
}
|
|
|
|
.placeholderLoader {
|
|
color: #999;
|
|
animation: spin 1s linear infinite;
|
|
}
|
|
|
|
@keyframes spin {
|
|
from {
|
|
transform: rotate(0deg);
|
|
}
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
.content {
|
|
padding: 16px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 12px;
|
|
background: white;
|
|
}
|
|
|
|
.textContent {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
align-items: flex-start;
|
|
text-align: left;
|
|
}
|
|
|
|
.title {
|
|
line-height: 1.3;
|
|
text-align: left;
|
|
}
|
|
|
|
.subtitle {
|
|
line-height: 1.4;
|
|
text-align: left;
|
|
}
|
|
|
|
.footer {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
min-height: 32px;
|
|
}
|
|
|
|
.status {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 0;
|
|
}
|
|
|
|
.statusDone {
|
|
color: #16a34a;
|
|
|
|
.statusText {
|
|
color: #16a34a;
|
|
}
|
|
|
|
.checkmark {
|
|
color: #16a34a;
|
|
}
|
|
}
|
|
|
|
.statusProcessing {
|
|
color: #3b82f6;
|
|
|
|
svg {
|
|
animation: spin 1s linear infinite;
|
|
}
|
|
}
|
|
|
|
.statusQueued {
|
|
color: #f59e0b;
|
|
|
|
svg {
|
|
color: #f59e0b;
|
|
}
|
|
}
|
|
|
|
.statusError {
|
|
color: #ef4444;
|
|
|
|
svg {
|
|
color: #ef4444;
|
|
}
|
|
}
|
|
|
|
.iconCheck,
|
|
.iconQueued,
|
|
.iconError {
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.iconProcessing {
|
|
flex-shrink: 0;
|
|
animation: spin 1s linear infinite;
|
|
}
|
|
|
|
.actionButton {
|
|
width: 40px;
|
|
height: 40px;
|
|
border-radius: 50%;
|
|
background: #3b82f6;
|
|
border: none;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
transition:
|
|
background 0.2s ease,
|
|
transform 0.1s ease;
|
|
flex-shrink: 0;
|
|
|
|
svg {
|
|
color: white;
|
|
}
|
|
|
|
&:hover {
|
|
background: #2563eb;
|
|
}
|
|
|
|
&:active {
|
|
transform: scale(0.95);
|
|
}
|
|
}
|