Files
Laravel/resources/sass/pages/_resume-index.scss
David Melendez e25d53d054 init commit
2026-01-14 22:38:44 +01:00

511 lines
11 KiB
SCSS

// ==========================================================================
// Resume Builder Index Page Styles
// Professional Resume Builder - Resume Management
// ==========================================================================
.resume-index-page {
.page-header {
margin-bottom: var(--spacing-xl);
h1 {
color: var(--color-dark);
font-weight: 700;
margin-bottom: 0.5rem;
}
.header-actions {
.btn {
padding: 0.75rem 1.5rem;
font-weight: 500;
border-radius: var(--border-radius-md);
transition: all 0.2s ease;
&:hover {
transform: translateY(-1px);
}
}
}
}
}
// Statistics Cards
.stats-cards {
margin-bottom: var(--spacing-xl);
.stats-card {
background: var(--color-white);
border: none;
border-radius: var(--border-radius-lg);
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
transition: all 0.3s ease;
height: 100%;
&:hover {
transform: translateY(-4px);
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.card-body {
padding: var(--spacing-lg);
}
.stats-number {
font-size: 2.5rem;
font-weight: 800;
margin-bottom: 0.5rem;
line-height: 1;
&.text-primary {
color: var(--brand-primary) !important;
}
&.text-success {
color: var(--brand-success) !important;
}
&.text-warning {
color: var(--brand-warning) !important;
}
&.text-info {
color: var(--brand-info) !important;
}
}
.stats-label {
font-size: 0.875rem;
font-weight: 500;
color: var(--color-gray-600);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.stats-icon {
width: 3.5rem;
height: 3.5rem;
border-radius: var(--border-radius-lg);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
&.bg-primary {
background: rgba(102, 126, 234, 0.1) !important;
color: var(--brand-primary);
}
&.bg-success {
background: rgba(34, 197, 94, 0.1) !important;
color: var(--brand-success);
}
&.bg-warning {
background: rgba(251, 191, 36, 0.1) !important;
color: var(--brand-warning);
}
&.bg-info {
background: rgba(59, 130, 246, 0.1) !important;
color: var(--brand-info);
}
}
}
}
// Resume Cards Grid
.resumes-grid {
.resume-card {
background: var(--color-white);
border: none;
border-radius: var(--border-radius-lg);
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
transition: all 0.3s ease;
height: 100%;
overflow: hidden;
&:hover {
transform: translateY(-4px);
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.resume-thumbnail {
height: 200px;
background: linear-gradient(135deg, var(--color-gray-50) 0%, var(--color-gray-100) 100%);
display: flex;
align-items: center;
justify-content: center;
border-bottom: 1px solid var(--color-gray-100);
.thumbnail-placeholder {
color: var(--color-gray-400);
text-align: center;
i {
font-size: 3rem;
margin-bottom: 0.5rem;
display: block;
}
span {
font-size: 0.875rem;
font-weight: 500;
}
}
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
.card-body {
padding: var(--spacing-lg);
}
.resume-title {
font-size: 1.25rem;
font-weight: 600;
color: var(--color-dark);
margin-bottom: 0.5rem;
a {
color: inherit;
text-decoration: none;
transition: color 0.2s ease;
&:hover {
color: var(--brand-primary);
}
}
}
.resume-meta {
display: flex;
align-items: center;
gap: var(--spacing-md);
margin-bottom: var(--spacing-md);
.meta-item {
font-size: 0.875rem;
color: var(--color-gray-600);
i {
margin-right: 0.25rem;
color: var(--color-gray-400);
}
}
}
.resume-status {
margin-bottom: var(--spacing-md);
.badge {
font-size: 0.75rem;
font-weight: 500;
padding: 0.375rem 0.75rem;
border-radius: var(--border-radius-full);
&.bg-success {
background: var(--brand-success) !important;
}
&.bg-warning {
background: var(--brand-warning) !important;
color: var(--color-white);
}
&.bg-secondary {
background: var(--color-gray-500) !important;
}
}
}
.resume-actions {
display: flex;
gap: 0.5rem;
.btn {
flex: 1;
padding: 0.5rem;
font-size: 0.875rem;
font-weight: 500;
border-radius: var(--border-radius-md);
transition: all 0.2s ease;
&:hover {
transform: translateY(-1px);
}
i {
font-size: 0.875rem;
}
}
.btn-outline-primary {
border-color: var(--brand-primary);
color: var(--brand-primary);
&:hover {
background: var(--brand-primary);
border-color: var(--brand-primary);
}
}
.btn-outline-success {
border-color: var(--brand-success);
color: var(--brand-success);
&:hover {
background: var(--brand-success);
border-color: var(--brand-success);
}
}
.btn-outline-danger {
border-color: var(--brand-danger);
color: var(--brand-danger);
&:hover {
background: var(--brand-danger);
border-color: var(--brand-danger);
}
}
}
}
}
// Empty State
.empty-state {
text-align: center;
padding: var(--spacing-4xl) var(--spacing-lg);
.empty-icon {
font-size: 4rem;
color: var(--color-gray-300);
margin-bottom: var(--spacing-lg);
}
h3 {
color: var(--color-gray-700);
font-weight: 600;
margin-bottom: var(--spacing-md);
}
p {
color: var(--color-gray-500);
font-size: 1.1rem;
margin-bottom: var(--spacing-xl);
max-width: 400px;
margin-left: auto;
margin-right: auto;
}
.btn {
padding: 0.875rem 2rem;
font-weight: 600;
border-radius: var(--border-radius-md);
}
}
// Filters and Search
.resume-filters {
background: var(--color-white);
border-radius: var(--border-radius-lg);
padding: var(--spacing-lg);
margin-bottom: var(--spacing-xl);
box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.06), 0 1px 2px -1px rgba(0, 0, 0, 0.06);
.search-input {
position: relative;
.form-control {
border-radius: var(--border-radius-md);
border: 1px solid var(--color-gray-300);
padding: 0.75rem 1rem 0.75rem 3rem;
transition: all 0.2s ease;
&:focus {
border-color: var(--brand-primary);
box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.1);
}
}
.search-icon {
position: absolute;
left: 1rem;
top: 50%;
transform: translateY(-50%);
color: var(--color-gray-400);
z-index: 3;
}
}
.filter-buttons {
.btn {
border-radius: var(--border-radius-full);
padding: 0.5rem 1rem;
font-weight: 500;
border: 1px solid var(--color-gray-300);
color: var(--color-gray-600);
background: var(--color-white);
transition: all 0.2s ease;
&.active {
background: var(--brand-primary);
border-color: var(--brand-primary);
color: var(--color-white);
}
&:hover:not(.active) {
background: var(--color-gray-50);
border-color: var(--color-gray-400);
}
}
}
}
// Pagination
.pagination-wrapper {
display: flex;
justify-content: center;
margin-top: var(--spacing-xl);
.pagination {
.page-item {
.page-link {
border: none;
background: transparent;
color: var(--color-gray-600);
font-weight: 500;
padding: 0.5rem 0.75rem;
margin: 0 0.125rem;
border-radius: var(--border-radius-md);
transition: all 0.2s ease;
&:hover {
background: var(--color-gray-100);
color: var(--color-gray-800);
}
}
&.active .page-link {
background: var(--brand-primary);
color: var(--color-white);
&:hover {
background: var(--brand-primary-dark);
}
}
}
}
}
// Responsive Design
@include media-breakpoint-down(lg) {
.resume-index-page {
.page-header {
.header-actions {
margin-top: var(--spacing-md);
.btn {
width: 100%;
margin-bottom: 0.5rem;
&:last-child {
margin-bottom: 0;
}
}
}
}
}
.stats-cards {
.col-xl-3 {
margin-bottom: var(--spacing-md);
}
}
}
@include media-breakpoint-down(md) {
.resume-filters {
.search-input {
margin-bottom: var(--spacing-md);
}
.filter-buttons {
.btn {
width: 100%;
margin-bottom: 0.5rem;
&:last-child {
margin-bottom: 0;
}
}
}
}
.resumes-grid {
.resume-card {
.resume-actions {
.btn {
font-size: 0.8rem;
padding: 0.375rem 0.5rem;
}
}
}
}
}
// Loading States
.loading-skeleton {
.skeleton-card {
background: var(--color-white);
border-radius: var(--border-radius-lg);
padding: var(--spacing-lg);
box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.06);
.skeleton-thumbnail {
height: 200px;
background: linear-gradient(90deg, var(--color-gray-200) 25%, var(--color-gray-100) 50%, var(--color-gray-200) 75%);
background-size: 200% 100%;
animation: shimmer 2s infinite;
border-radius: var(--border-radius-md);
margin-bottom: var(--spacing-md);
}
.skeleton-text {
height: 1rem;
background: linear-gradient(90deg, var(--color-gray-200) 25%, var(--color-gray-100) 50%, var(--color-gray-200) 75%);
background-size: 200% 100%;
animation: shimmer 2s infinite;
border-radius: var(--border-radius-sm);
margin-bottom: 0.5rem;
&.title {
height: 1.5rem;
width: 80%;
}
&.subtitle {
height: 1rem;
width: 60%;
}
&.meta {
height: 0.875rem;
width: 40%;
}
}
}
}
@keyframes shimmer {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}