346 lines
6.6 KiB
SCSS
346 lines
6.6 KiB
SCSS
// ============================================
|
|
// ANIMATIONS
|
|
// ============================================
|
|
|
|
@keyframes fadeIn {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slideUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes pulseSlow {
|
|
0%,
|
|
100% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
opacity: 0.8;
|
|
}
|
|
}
|
|
|
|
.animate-fade-in {
|
|
animation: fadeIn 0.6s ease-out;
|
|
}
|
|
|
|
.animate-slide-up {
|
|
animation: slideUp 0.6s ease-out;
|
|
}
|
|
|
|
.animate-pulse-slow {
|
|
animation: pulseSlow 3s ease-in-out infinite;
|
|
}
|
|
|
|
.animation-delay-100 {
|
|
animation-delay: 0.1s;
|
|
opacity: 0;
|
|
animation-fill-mode: forwards;
|
|
}
|
|
|
|
.animation-delay-200 {
|
|
animation-delay: 0.2s;
|
|
opacity: 0;
|
|
animation-fill-mode: forwards;
|
|
}
|
|
|
|
.animation-delay-300 {
|
|
animation-delay: 0.3s;
|
|
opacity: 0;
|
|
animation-fill-mode: forwards;
|
|
}
|
|
|
|
// ============================================
|
|
// NAVIGATION PAR ONGLETS
|
|
// ============================================
|
|
|
|
.tab-button {
|
|
@apply bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300;
|
|
@apply hover:bg-indigo-50 dark:hover:bg-gray-600 hover:text-indigo-600 dark:hover:text-indigo-400;
|
|
|
|
&.active-tab {
|
|
@apply bg-gradient-to-r from-indigo-600 to-purple-600 text-white;
|
|
@apply shadow-lg;
|
|
|
|
svg {
|
|
@apply text-white;
|
|
}
|
|
}
|
|
|
|
// Animation au hover
|
|
&:hover:not(.active-tab) {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
// Effet au clic
|
|
&:active {
|
|
transform: scale(0.98);
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// CARDS
|
|
// ============================================
|
|
|
|
.card {
|
|
@apply bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6;
|
|
@apply transition-shadow duration-300;
|
|
|
|
&:hover {
|
|
@apply shadow-xl;
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// RESPONSIVE BREAKPOINTS
|
|
// ============================================
|
|
|
|
// Mobile (par défaut)
|
|
@media (max-width: 640px) {
|
|
.tab-button {
|
|
min-width: auto;
|
|
padding: 0.625rem;
|
|
|
|
span {
|
|
display: none;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Tablet
|
|
@media (min-width: 768px) and (max-width: 1023px) {
|
|
.tab-button {
|
|
font-size: 0.875rem;
|
|
}
|
|
}
|
|
|
|
// Desktop
|
|
@media (min-width: 1024px) {
|
|
// Grille sidebar + contenu
|
|
.sidebar-layout {
|
|
display: grid;
|
|
grid-template-columns: 300px 1fr;
|
|
gap: 1.5rem;
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// BOUTON D'ÉDITION SUR L'AVATAR
|
|
// ============================================
|
|
|
|
.edit-button {
|
|
@apply absolute -top-2 -right-2 z-10;
|
|
@apply w-8 h-8 bg-indigo-600 hover:bg-indigo-700;
|
|
@apply rounded-full flex items-center justify-center;
|
|
@apply shadow-lg transition-all duration-300;
|
|
|
|
&:hover {
|
|
transform: scale(1.1);
|
|
}
|
|
|
|
svg {
|
|
@apply w-4 h-4 text-white;
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// AVATAR
|
|
// ============================================
|
|
|
|
.avatar-wrapper {
|
|
position: relative;
|
|
|
|
.avatar-ring {
|
|
@apply w-28 h-28 md:w-36 md:h-36;
|
|
@apply rounded-full bg-gradient-to-br from-indigo-500 to-purple-600;
|
|
@apply p-1 shadow-2xl;
|
|
@apply transition-transform duration-300;
|
|
|
|
&:hover {
|
|
transform: scale(1.05);
|
|
}
|
|
}
|
|
|
|
.avatar-image {
|
|
@apply w-full h-full rounded-full overflow-hidden bg-white;
|
|
|
|
img {
|
|
@apply object-cover w-full h-full;
|
|
}
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// BANNIÈRE
|
|
// ============================================
|
|
|
|
.banner {
|
|
@apply relative rounded-2xl overflow-hidden shadow-xl;
|
|
|
|
.banner-image {
|
|
@apply h-48 md:h-64 bg-cover bg-center;
|
|
}
|
|
|
|
.banner-overlay {
|
|
@apply absolute inset-0 bg-gradient-to-b from-transparent to-black/30;
|
|
}
|
|
|
|
.banner-content {
|
|
@apply relative z-10 p-4 flex justify-between items-start;
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// BACK BUTTON
|
|
// ============================================
|
|
|
|
.back-button {
|
|
@apply flex items-center justify-center;
|
|
@apply w-10 h-10 md:w-12 md:h-12;
|
|
@apply bg-white/20 backdrop-blur-md rounded-full;
|
|
@apply hover:bg-white/30 transition-all duration-300;
|
|
|
|
&:hover {
|
|
transform: scale(1.1);
|
|
|
|
svg {
|
|
transform: translateX(-4px);
|
|
}
|
|
}
|
|
|
|
svg {
|
|
@apply w-6 h-6 text-white transition-transform;
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// BADGE VÉRIFIÉ
|
|
// ============================================
|
|
|
|
.verified-badge {
|
|
@apply flex items-center gap-2;
|
|
@apply bg-purple-500/20 backdrop-blur-md;
|
|
@apply px-3 py-2 rounded-full;
|
|
|
|
svg {
|
|
@apply w-5 h-5 md:w-6 md:h-6 text-purple-300;
|
|
}
|
|
|
|
span {
|
|
@apply text-white text-sm font-medium;
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// SECTIONS AVEC ICÔNES
|
|
// ============================================
|
|
|
|
.section-title {
|
|
@apply text-lg font-bold text-gray-900 dark:text-white mb-3;
|
|
@apply flex items-center gap-2;
|
|
|
|
svg {
|
|
@apply h-5 w-5 text-indigo-500;
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// AMÉLIORATION DE L'ACCESSIBILITÉ
|
|
// ============================================
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
animation-duration: 0.01ms !important;
|
|
animation-iteration-count: 1 !important;
|
|
transition-duration: 0.01ms !important;
|
|
}
|
|
}
|
|
|
|
// Focus visible pour l'accessibilité
|
|
*:focus-visible {
|
|
outline: 2px solid #4f46e5;
|
|
outline-offset: 2px;
|
|
border-radius: 0.25rem;
|
|
}
|
|
|
|
// ============================================
|
|
// MODE SOMBRE
|
|
// ============================================
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
.card {
|
|
background-color: rgba(31, 41, 55, 0.8);
|
|
border: 1px solid rgba(55, 65, 81, 0.3);
|
|
}
|
|
|
|
.tab-button {
|
|
&:not(.active-tab) {
|
|
background-color: rgba(55, 65, 81, 0.5);
|
|
color: rgba(209, 213, 219, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// UTILITAIRES PERSONNALISÉS
|
|
// ============================================
|
|
|
|
// Divider avec gradient
|
|
.divider-gradient {
|
|
height: 4px;
|
|
background: linear-gradient(90deg, transparent, #4f46e5, transparent);
|
|
border-radius: 9999px;
|
|
}
|
|
|
|
// Card avec hover effect
|
|
.hover-lift {
|
|
transition: all 0.3s ease;
|
|
|
|
&:hover {
|
|
transform: translateY(-4px);
|
|
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
|
|
}
|
|
}
|
|
|
|
// Glassmorphism effect
|
|
.glass {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
backdrop-filter: blur(10px);
|
|
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
// ============================================
|
|
// PRINT STYLES (optionnel)
|
|
// ============================================
|
|
|
|
@media print {
|
|
.banner,
|
|
.back-button,
|
|
.edit-button,
|
|
.tab-button {
|
|
display: none;
|
|
}
|
|
|
|
.card {
|
|
box-shadow: none;
|
|
border: 1px solid #e5e7eb;
|
|
}
|
|
}
|