synchronisation du contenu avec la DB et amélioration du CMS

- Migration du blog et des interviews des données mockées vers PostgreSQL (Prisma).
- Refonte des pages publiques en Server Components pour de meilleures performances/SEO.
- Intégration d'un éditeur de texte riche (React Quill) avec titres H1-H6 et séparateurs.
- Correction des erreurs de validation Prisma liées aux paramètres asynchrones (Next.js 15+).
- Correction des problèmes d'affichage des modales de suspension via React Portals.
- Installation de @tailwindcss/typography et correction du débordement de texte (break-words).
- Implémentation des actions de modération (suspension/révocation) pour les utilisateurs et boutiques.
This commit is contained in:
2026-04-12 18:59:20 +02:00
parent b73939d381
commit 887030ee47
84 changed files with 5577 additions and 15128 deletions

View File

@@ -144,6 +144,24 @@ body {
opacity: 0.9;
}
.btn-action {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.4rem 0.75rem;
border-radius: 0.5rem;
border: 1px solid transparent;
cursor: pointer;
font-size: 0.75rem;
font-weight: 600;
transition: all 0.2s;
}
.btn-action:hover {
opacity: 1;
transform: translateY(-1px);
}
.badge {
padding: 0.25rem 0.5rem;
border-radius: 9999px;
@@ -161,6 +179,11 @@ body {
color: #f59e0b;
}
.badge-error {
background-color: rgba(239, 68, 68, 0.1);
color: #ef4444;
}
/* Modals */
.modal-overlay {
position: fixed;
@@ -185,11 +208,87 @@ body {
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.5);
}
.btn-star {
color: var(--muted);
transition: color 0.2s;
}
.btn-star:hover, .btn-star.active {
color: #f59e0b;
}
/* Quill Dark Theme Overrides */
.quill-dark-wrapper .ql-toolbar.ql-snow {
background-color: var(--secondary);
border-color: var(--border);
border-top-left-radius: 0.5rem;
border-top-right-radius: 0.5rem;
}
.quill-dark-wrapper .ql-container.ql-snow {
background-color: var(--background);
border-color: var(--border);
border-bottom-left-radius: 0.5rem;
border-bottom-right-radius: 0.5rem;
min-height: 300px;
font-family: inherit;
font-size: 1rem;
}
.quill-dark-wrapper .ql-snow .ql-stroke {
stroke: var(--foreground);
}
.quill-dark-wrapper .ql-snow .ql-fill {
fill: var(--foreground);
}
.quill-dark-wrapper .ql-snow .ql-picker {
color: var(--foreground);
}
.quill-dark-wrapper .ql-snow .ql-picker-options {
background-color: var(--secondary);
border-color: var(--border);
}
.quill-dark-wrapper .ql-snow .ql-picker-item:hover,
.quill-dark-wrapper .ql-snow .ql-picker-label:hover {
color: var(--primary);
}
.quill-dark-wrapper .ql-snow .ql-active {
color: var(--primary) !important;
}
.quill-dark-wrapper .ql-snow .ql-active .ql-stroke {
stroke: var(--primary) !important;
}
.quill-dark-wrapper .ql-editor.ql-blank::before {
color: var(--muted);
font-style: normal;
}
/* Styles for the Divider (HR) */
.quill-dark-wrapper .ql-editor hr {
border: none;
border-top: 2px solid var(--border);
margin: 1.5em 0;
cursor: default;
}
.quill-dark-wrapper .ql-snow.ql-toolbar button.ql-divider {
width: 32px;
position: relative;
}
.quill-dark-wrapper .ql-snow.ql-toolbar button.ql-divider::before {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 16px;
height: 2px;
background-color: var(--foreground);
}
.quill-dark-wrapper .ql-snow.ql-toolbar button.ql-divider:hover::before {
background-color: var(--primary);
}