mirror of
https://github.com/R0m1k3/PleinR.git
synced 2026-10-11 17:27:54 +02:00
- Composant Reveal (IntersectionObserver) + keyframes CSS : sections et grilles apparaissent en fondu/glissement, cartes en cascade (stagger). Respecte prefers-reduced-motion + repli no-JS. - Étoiles (sparkles) : l'animation twinkle inclut désormais une dérive (translation) pour un mouvement nettement visible. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XwfhYHzC9hQWPDnQ2p53GL
354 lines
6.7 KiB
CSS
354 lines
6.7 KiB
CSS
:root {
|
|
--cream: #f6f2e8;
|
|
--cream-2: #efe9da;
|
|
--cream-3: #ede7d7;
|
|
--ink: #33291d;
|
|
--ink-strong: #26201a;
|
|
--ink-soft: #3c3322;
|
|
--muted: #6c6150;
|
|
--muted-2: #8c8068;
|
|
--muted-3: #9a8d72;
|
|
--muted-4: #a99c82;
|
|
--brown: #9a6638;
|
|
--blue: #2c6fb3;
|
|
--blue-deep: #1e588f;
|
|
--navy: #13324f;
|
|
--gold: #e0a63c;
|
|
--teal: #6fb0c6;
|
|
--green: #1f8a5b;
|
|
--red: #d8472b;
|
|
--border: #e6dcc6;
|
|
--border-2: #f0e8d6;
|
|
--field-border: #ddd2bb;
|
|
--field-bg: #faf7ef;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
html,
|
|
body {
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
body {
|
|
background: var(--cream);
|
|
font-family: "Public Sans", system-ui, sans-serif;
|
|
color: var(--ink);
|
|
}
|
|
|
|
a {
|
|
color: inherit;
|
|
}
|
|
|
|
.font-display {
|
|
font-family: "Bricolage Grotesque", "Public Sans", system-ui, sans-serif;
|
|
}
|
|
|
|
input::placeholder,
|
|
textarea::placeholder {
|
|
color: var(--muted-4);
|
|
}
|
|
|
|
button {
|
|
font-family: inherit;
|
|
}
|
|
|
|
/* ---- Animations ---- */
|
|
@keyframes plr-twinkle {
|
|
0% {
|
|
transform: translate(0, 0) scale(0.9) rotate(0deg);
|
|
opacity: 0.55;
|
|
}
|
|
25% {
|
|
transform: translate(4px, -9px) scale(1.15) rotate(15deg);
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
transform: translate(-3px, -13px) scale(1.32) rotate(26deg);
|
|
opacity: 0.85;
|
|
}
|
|
75% {
|
|
transform: translate(-5px, -5px) scale(1.1) rotate(12deg);
|
|
opacity: 1;
|
|
}
|
|
100% {
|
|
transform: translate(0, 0) scale(0.9) rotate(0deg);
|
|
opacity: 0.55;
|
|
}
|
|
}
|
|
@keyframes plr-floatlogo {
|
|
0%,
|
|
100% {
|
|
transform: translateY(0) rotate(-0.6deg);
|
|
}
|
|
50% {
|
|
transform: translateY(-14px) rotate(0.6deg);
|
|
}
|
|
}
|
|
@media (prefers-reduced-motion: reduce) {
|
|
* {
|
|
animation: none !important;
|
|
}
|
|
}
|
|
|
|
.sparkle {
|
|
clip-path: polygon(50% 0, 60% 40%, 100% 50%, 60% 60%, 50% 100%, 40% 60%, 0 50%, 40% 40%);
|
|
}
|
|
|
|
/* ---- Scroll-reveal entrance animations ---- */
|
|
@keyframes plr-fade-up {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(18px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: none;
|
|
}
|
|
}
|
|
|
|
.reveal {
|
|
opacity: 0;
|
|
}
|
|
.reveal.is-visible {
|
|
animation: plr-fade-up 0.6s cubic-bezier(0.22, 0.61, 0.36, 1) both;
|
|
}
|
|
|
|
/* Staggered children (grids) */
|
|
.reveal-stagger > * {
|
|
opacity: 0;
|
|
}
|
|
.reveal-stagger.is-visible > * {
|
|
animation: plr-fade-up 0.55s cubic-bezier(0.22, 0.61, 0.36, 1) both;
|
|
}
|
|
.reveal-stagger.is-visible > *:nth-child(1) { animation-delay: 0.04s; }
|
|
.reveal-stagger.is-visible > *:nth-child(2) { animation-delay: 0.1s; }
|
|
.reveal-stagger.is-visible > *:nth-child(3) { animation-delay: 0.16s; }
|
|
.reveal-stagger.is-visible > *:nth-child(4) { animation-delay: 0.22s; }
|
|
.reveal-stagger.is-visible > *:nth-child(5) { animation-delay: 0.28s; }
|
|
.reveal-stagger.is-visible > *:nth-child(6) { animation-delay: 0.34s; }
|
|
.reveal-stagger.is-visible > *:nth-child(7) { animation-delay: 0.4s; }
|
|
.reveal-stagger.is-visible > *:nth-child(8) { animation-delay: 0.46s; }
|
|
.reveal-stagger.is-visible > *:nth-child(n + 9) { animation-delay: 0.52s; }
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.reveal,
|
|
.reveal-stagger > * {
|
|
opacity: 1 !important;
|
|
}
|
|
.reveal.is-visible,
|
|
.reveal-stagger.is-visible > * {
|
|
animation: none !important;
|
|
}
|
|
}
|
|
.twinkle {
|
|
animation: plr-twinkle 3.2s ease-in-out infinite;
|
|
}
|
|
.floatlogo {
|
|
animation: plr-floatlogo 6s ease-in-out infinite;
|
|
}
|
|
|
|
/* ---- Hover lifts ---- */
|
|
.lift {
|
|
transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
|
|
}
|
|
.lift:hover {
|
|
transform: translateY(-5px);
|
|
box-shadow: 0 16px 30px -18px rgba(40, 30, 15, 0.45);
|
|
border-color: #d8cdb4;
|
|
}
|
|
.lift-card {
|
|
transition: transform 0.28s ease, box-shadow 0.28s ease;
|
|
}
|
|
.lift-card:hover {
|
|
transform: translateY(-6px);
|
|
box-shadow: 0 24px 44px -24px rgba(40, 30, 15, 0.5);
|
|
}
|
|
.lift-cta {
|
|
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
}
|
|
.lift-cta:hover {
|
|
transform: translateY(-3px) scale(1.03);
|
|
box-shadow: 0 16px 30px -14px rgba(0, 0, 0, 0.4);
|
|
}
|
|
.link-arrow:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
/* ---- Layout helpers ---- */
|
|
.container {
|
|
max-width: 1280px;
|
|
margin: 0 auto;
|
|
padding: 0 56px;
|
|
}
|
|
|
|
.grid {
|
|
display: grid;
|
|
}
|
|
.grid-6 {
|
|
grid-template-columns: repeat(6, 1fr);
|
|
gap: 14px;
|
|
}
|
|
.grid-4 {
|
|
grid-template-columns: repeat(4, 1fr);
|
|
gap: 18px;
|
|
}
|
|
.grid-3 {
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 20px;
|
|
}
|
|
.grid-2 {
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 22px;
|
|
}
|
|
.hero-grid {
|
|
grid-template-columns: 0.92fr 1.08fr;
|
|
gap: 48px;
|
|
align-items: center;
|
|
}
|
|
.dash-split {
|
|
grid-template-columns: 1.4fr 1fr;
|
|
gap: 18px;
|
|
}
|
|
.admins-split {
|
|
grid-template-columns: 1.5fr 1fr;
|
|
gap: 18px;
|
|
align-items: start;
|
|
}
|
|
.fiche-split {
|
|
grid-template-columns: 1.65fr 1fr;
|
|
gap: 26px;
|
|
align-items: start;
|
|
}
|
|
|
|
@media (max-width: 1024px) {
|
|
.grid-6 {
|
|
grid-template-columns: repeat(3, 1fr);
|
|
}
|
|
.grid-4 {
|
|
grid-template-columns: repeat(2, 1fr);
|
|
}
|
|
.grid-3 {
|
|
grid-template-columns: repeat(2, 1fr);
|
|
}
|
|
.dash-split,
|
|
.admins-split,
|
|
.fiche-split {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
@media (max-width: 860px) {
|
|
.container {
|
|
padding: 0 24px;
|
|
}
|
|
.hero-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
.grid-2 {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
@media (max-width: 640px) {
|
|
.grid-6,
|
|
.grid-4,
|
|
.grid-3 {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
|
|
/* ---- Backend layout ---- */
|
|
.backend {
|
|
display: flex;
|
|
min-height: 100vh;
|
|
background: var(--cream-3);
|
|
}
|
|
.sidebar {
|
|
width: 248px;
|
|
flex-shrink: 0;
|
|
background: var(--navy);
|
|
color: #cfe0ee;
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding: 22px 16px;
|
|
position: sticky;
|
|
top: 0;
|
|
height: 100vh;
|
|
}
|
|
.nav-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 11px;
|
|
width: 100%;
|
|
text-align: left;
|
|
border: none;
|
|
cursor: pointer;
|
|
font-family: "Public Sans", sans-serif;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
padding: 11px 12px;
|
|
border-radius: 10px;
|
|
margin-bottom: 3px;
|
|
transition: background 0.15s;
|
|
text-decoration: none;
|
|
background: transparent;
|
|
color: #9bb6cd;
|
|
}
|
|
.nav-btn:hover {
|
|
background: rgba(255, 255, 255, 0.06);
|
|
color: #cfe0ee;
|
|
}
|
|
.nav-btn.active {
|
|
background: rgba(224, 166, 60, 0.22);
|
|
color: #fff;
|
|
box-shadow: inset 3px 0 0 var(--gold);
|
|
}
|
|
|
|
::-webkit-scrollbar {
|
|
width: 10px;
|
|
height: 10px;
|
|
}
|
|
::-webkit-scrollbar-thumb {
|
|
background: #d8cdb4;
|
|
border-radius: 6px;
|
|
}
|
|
|
|
@media (max-width: 860px) {
|
|
.backend {
|
|
flex-direction: column;
|
|
}
|
|
.sidebar {
|
|
width: 100%;
|
|
height: auto;
|
|
position: static;
|
|
flex-direction: row;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
}
|
|
}
|
|
|
|
/* ---- Forms ---- */
|
|
.field {
|
|
width: 100%;
|
|
border: 1px solid var(--field-border);
|
|
border-radius: 10px;
|
|
padding: 11px 13px;
|
|
font-size: 14px;
|
|
font-family: "Public Sans", sans-serif;
|
|
color: var(--ink-soft);
|
|
background: var(--field-bg);
|
|
}
|
|
.field:focus {
|
|
outline: 2px solid rgba(44, 111, 179, 0.35);
|
|
outline-offset: 1px;
|
|
}
|
|
.field-label {
|
|
display: block;
|
|
font-size: 12.5px;
|
|
font-weight: 700;
|
|
color: var(--muted);
|
|
margin-bottom: 6px;
|
|
}
|