Refonte UI complète : palettes saisonnières, typo moderne, paroles nettoyées, Shadoks

- Nettoyage paroles : suppression instructions Suno AI, corrections prononciation (11 fichiers)
- 4 palettes saisonnières (Automne/Hiver dark, Printemps/Été light) avec sélecteur
- Typographie modernisée : Outfit (display) + Inter (sans) remplacent Syne + Space Grotesk
- Styles adaptatifs : CSS vars pour couleurs, overrides light mode complets
- Mini-player : bouton Next ajouté, flèche expand plus visible
- BookPlayer : fix scroll mode paginé, croix de fermeture visible
- Illustrations Shadoks inline SVG dans 11 composants/pages
- Suppression soulignés navigation, reset boutons, bordures propres

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-02-23 03:35:45 +01:00
parent 6f422a7369
commit ac4aff4985
43 changed files with 1362 additions and 302 deletions

View File

@@ -60,10 +60,10 @@
@keyframes glow-pulse {
0%, 100% {
box-shadow: 0 0 8px hsl(12 76% 48% / 0.3);
box-shadow: 0 0 8px hsl(var(--color-primary) / 0.3);
}
50% {
box-shadow: 0 0 24px hsl(12 76% 48% / 0.6);
box-shadow: 0 0 24px hsl(var(--color-primary) / 0.6);
}
}

View File

@@ -2,11 +2,11 @@
/* This file provides fallback and utility classes */
.font-display {
font-family: 'Syne', system-ui, sans-serif;
font-family: 'Outfit', system-ui, sans-serif;
}
.font-sans {
font-family: 'Space Grotesk', system-ui, sans-serif;
font-family: 'Inter', system-ui, sans-serif;
}
.font-mono {

View File

@@ -3,20 +3,20 @@
@import './typography.css';
:root {
--color-primary: 12 76% 48%;
--color-accent: 36 80% 52%;
--color-bg: 20 8% 3.5%;
--color-surface: 20 8% 8%;
--color-surface-light: 20 8% 13%;
--color-primary: 18 80% 45%;
--color-accent: 32 85% 50%;
--color-bg: 16 12% 4%;
--color-surface: 16 12% 9%;
--color-surface-light: 16 10% 14%;
--color-text: 0 0% 100%;
--color-text-muted: 0 0% 100% / 0.6;
--color-text-muted: 0 0% 60%;
--header-height: 4rem;
--player-height: 0rem;
--sidebar-width: 280px;
--font-display: 'Syne', sans-serif;
--font-sans: 'Space Grotesk', sans-serif;
--font-display: 'Outfit', sans-serif;
--font-sans: 'Inter', sans-serif;
--font-mono: 'JetBrains Mono', monospace;
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
@@ -43,9 +43,22 @@ body {
min-height: 100dvh;
}
button {
border: none;
background: none;
cursor: pointer;
font: inherit;
color: inherit;
}
a {
text-decoration: none;
color: inherit;
}
::selection {
background-color: hsl(var(--color-primary) / 0.3);
color: white;
color: hsl(var(--color-text));
}
:focus-visible {
@@ -72,6 +85,78 @@ body {
background: hsl(var(--color-text) / 0.25);
}
/* ═══ Light mode overrides ═══ */
.palette-light {
color-scheme: light;
}
.palette-light,
.palette-light .text-white {
color: hsl(var(--color-text));
}
/* white with opacity → dark text with same opacity */
.palette-light .text-white\/20 { color: hsl(var(--color-text) / 0.2); }
.palette-light .text-white\/30 { color: hsl(var(--color-text) / 0.3); }
.palette-light .text-white\/40 { color: hsl(var(--color-text) / 0.4); }
.palette-light .text-white\/45 { color: hsl(var(--color-text) / 0.45); }
.palette-light .text-white\/50 { color: hsl(var(--color-text) / 0.5); }
.palette-light .text-white\/60 { color: hsl(var(--color-text) / 0.6); }
.palette-light .text-white\/70 { color: hsl(var(--color-text) / 0.7); }
.palette-light .text-white\/80 { color: hsl(var(--color-text) / 0.8); }
.palette-light .text-white\/85 { color: hsl(var(--color-text) / 0.85); }
/* white backgrounds → surface tones */
.palette-light .bg-white\/5 { background-color: hsl(var(--color-text) / 0.04); }
.palette-light .bg-white\/8 { background-color: hsl(var(--color-text) / 0.06); }
.palette-light .bg-white\/10 { background-color: hsl(var(--color-text) / 0.07); }
/* borders */
.palette-light .border-white\/8 { border-color: hsl(var(--color-text) / 0.1); }
/* hover overrides */
.palette-light .hover\:text-white:hover,
.palette-light .hover\:text-white\/70:hover,
.palette-light .hover\:text-white\/80:hover {
color: hsl(var(--color-text));
}
.palette-light .hover\:text-white\/60:hover {
color: hsl(var(--color-text) / 0.6);
}
.palette-light .hover\:bg-white\/5:hover {
background-color: hsl(var(--color-text) / 0.04);
}
.palette-light .hover\:bg-white\/10:hover {
background-color: hsl(var(--color-text) / 0.07);
}
/* placeholder overrides */
.palette-light .placeholder\:text-white\/30::placeholder {
color: hsl(var(--color-text) / 0.3);
}
/* Prose/content in light mode */
.palette-light .prose { color: hsl(var(--color-text)); }
.palette-light .prose :where(h1,h2,h3,h4,h5,h6) { color: hsl(var(--color-text)); }
/* Active states */
.palette-light .text-white\! { color: hsl(var(--color-text)) !important; }
.palette-light .active-class .text-white\! { color: hsl(var(--color-text)) !important; }
/* text-gradient in light mode */
.palette-light .text-gradient {
background-image: linear-gradient(to right, hsl(var(--color-primary)), hsl(var(--color-accent)));
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
/* card surfaces */
.palette-light .card-surface {
background: hsl(var(--color-surface));
border-color: hsl(var(--color-text) / 0.1);
}
/* Page transitions */
.page-enter-active,
.page-leave-active {

View File

@@ -3,7 +3,7 @@
font-family: var(--font-sans);
font-size: 1.125rem;
line-height: 1.8;
color: hsl(0 0% 100% / 0.90);
color: hsl(var(--color-text) / 0.90);
max-width: 65ch;
}
@@ -13,11 +13,11 @@
font-weight: 800;
line-height: 1.25;
letter-spacing: -0.02em;
color: white;
color: hsl(var(--color-text));
margin-top: 0;
margin-bottom: 1.5rem;
padding-bottom: 0.75rem;
border-bottom: 2px solid hsl(12 76% 48% / 0.4);
border-bottom: 2px solid hsl(var(--color-primary) / 0.4);
}
.prose h2 {
@@ -26,11 +26,11 @@
font-weight: 700;
line-height: 1.3;
letter-spacing: -0.01em;
color: white;
color: hsl(var(--color-text));
margin-top: 3.5rem;
margin-bottom: 1rem;
padding-left: 0.75rem;
border-left: 3px solid hsl(12 76% 48% / 0.5);
border-left: 3px solid hsl(var(--color-primary) / 0.5);
}
.prose h3 {
@@ -38,7 +38,7 @@
font-size: clamp(1.25rem, 3vw, 1.625rem);
font-weight: 600;
line-height: 1.4;
color: hsl(0 0% 100% / 0.92);
color: hsl(var(--color-text) / 0.92);
margin-top: 3rem;
margin-bottom: 0.75rem;
}
@@ -49,7 +49,7 @@
width: 0.5rem;
height: 0.5rem;
border-radius: 50%;
background: hsl(36 80% 52%);
background: hsl(var(--color-accent));
margin-right: 0.625rem;
vertical-align: middle;
position: relative;
@@ -61,7 +61,7 @@
font-size: clamp(1.065rem, 2.5vw, 1.25rem);
font-weight: 600;
line-height: 1.45;
color: hsl(0 0% 100% / 0.85);
color: hsl(var(--color-text) / 0.85);
margin-top: 2.5rem;
margin-bottom: 0.625rem;
}
@@ -69,7 +69,7 @@
.prose h4::before {
content: '//';
font-family: var(--font-mono);
color: hsl(36 80% 52%);
color: hsl(var(--color-accent));
margin-right: 0.5rem;
font-weight: 500;
}
@@ -78,7 +78,7 @@
.prose h2 + p,
.prose h3 + p {
font-size: 1.175rem;
color: hsl(0 0% 100% / 0.75);
color: hsl(var(--color-text) / 0.75);
line-height: 1.85;
}
@@ -88,25 +88,25 @@
}
.prose a {
color: hsl(12 76% 68%);
color: hsl(var(--color-primary) / 0.85);
text-decoration: underline;
text-decoration-color: hsl(12 76% 58% / 0.3);
text-decoration-color: hsl(var(--color-primary) / 0.3);
text-underline-offset: 3px;
transition: text-decoration-color 0.2s;
}
.prose a:hover {
text-decoration-color: hsl(12 76% 58%);
text-decoration-color: hsl(var(--color-primary));
}
.prose blockquote {
margin: 2rem 0;
padding: 1rem 1.5rem;
border-left: 3px solid hsl(12 76% 58%);
background: hsl(240 10% 8%);
border-left: 3px solid hsl(var(--color-primary));
background: hsl(var(--color-surface));
border-radius: 0 0.5rem 0.5rem 0;
font-style: italic;
color: hsl(0 0% 100% / 0.75);
color: hsl(var(--color-text) / 0.75);
}
.prose blockquote p:last-child {
@@ -116,17 +116,17 @@
.prose code {
font-family: var(--font-mono);
font-size: 0.875em;
background: hsl(240 10% 12%);
background: hsl(var(--color-surface-light));
padding: 0.2em 0.4em;
border-radius: 0.25rem;
color: hsl(31 97% 66%);
color: hsl(var(--color-accent));
}
.prose pre {
margin: 2rem 0;
padding: 1.5rem;
background: hsl(240 10% 6%);
border: 1px solid hsl(0 0% 100% / 0.08);
background: hsl(var(--color-bg));
border: 1px solid hsl(var(--color-text) / 0.08);
border-radius: 0.75rem;
overflow-x: auto;
}
@@ -134,7 +134,7 @@
.prose pre code {
background: none;
padding: 0;
color: hsl(0 0% 100% / 0.87);
color: hsl(var(--color-text) / 0.87);
}
.prose ul,
@@ -149,22 +149,22 @@
}
.prose li::marker {
color: hsl(12 76% 58%);
color: hsl(var(--color-primary));
}
.prose hr {
margin: 3rem 0;
border: none;
border-top: 1px solid hsl(0 0% 100% / 0.1);
border-top: 1px solid hsl(var(--color-text) / 0.1);
}
.prose strong {
color: white;
color: hsl(var(--color-text));
font-weight: 600;
}
.prose em {
color: hsl(0 0% 100% / 0.9);
color: hsl(var(--color-text) / 0.9);
}
.prose img {