@import url('https://fonts.googleapis.com/css2?family=VT323&family=JetBrains+Mono:wght@300;700&display=swap'); :root { --bg: #0d0e12; --surface: #16171d; --text: #e0e0e0; --cyan: #00a3ac; --alert: #ff3e00; --font-pixel: 'VT323', monospace; --font-code: 'JetBrains Mono', monospace; } body, html { margin: 0; padding: 0; background: var(--bg); color: var(--text); font-family: var(--font-code); overflow: hidden; height: 100vh; } body::before { content: " "; display: block; position: fixed; inset: 0; /* On utilise une répétition de 3px fixe */ background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.15) 50%); background-size: 100% 3px; z-index: 5000; pointer-events: none; } #data-column { position: fixed; top: 0; left: 0; width: 35%; /* Occupe le tiers gauche de l'écran */ height: 100%; font-family: var(--font-code); font-size: 0.65rem; color: rgba(0, 242, 255, 0.08); /* Cyan très très discret */ overflow: hidden; white-space: pre; pointer-events: none; /* Ne bloque pas le clic sur les slides */ z-index: 1; /* Derrière les cartes (z-index 100) */ line-height: 1.2; padding: 10px; } /* Optionnel : une ombre pour séparer visuellement le flux du reste */ #data-column::after { content: ""; position: absolute; top: 0; left: 100%; /* Se place à la fin de la colonne de données */ bottom: 0; width: 150px; /* Largeur de la transition */ background: linear-gradient(to right, rgba(13, 14, 18, 1), transparent); pointer-events: none; } /* --- BACKGROUND FX --- */ #scanner-line { position: fixed; top: 0; left: 0; width: 100%; height: 2px; background: rgba(0, 242, 255, 0.1); box-shadow: 0 0 10px var(--cyan); z-index: 1000; pointer-events: none; animation: scan 4s linear infinite; } @keyframes scan { from { top: -10%; } to { top: 110%; } } #hud { position: fixed; top: 25px; left: 25px; z-index: 3000; /* Doit être au-dessus du scanner mais sous l'effet CRT */ font-family: var(--font-pixel); font-size: 1.4rem; color: #444; letter-spacing: 2px; line-height: 1.4; } /* L'effet de clignotement pour le mot "STABLE" */ .blink { animation: blink-hud 6s steps(2) infinite; color: var(--cyan); } @keyframes blink-hud { 0% { opacity: 1; } 50% { opacity: 0.3; } } /* On s'assure que le HUD change de couleur quand l'Axolotl (fond blanc) arrive */ #hud.dark-mode { color: #000; } #bg-logs { position: fixed; bottom: 0; left: 0; width: 100%; height: 40px; background: rgba(0,0,0,0.8); border-top: 1px solid #333; font-family: var(--font-pixel); font-size: 1.2rem; color: #555; display: flex; align-items: center; white-space: nowrap; overflow: hidden; z-index: 2000; } /* --- CARDS SYSTEM (FLUID LOGIC) --- */ #desk { position: relative; width: 100vw; height: 100vh; perspective: 1200px; padding: 50px; box-sizing: border-box; } .card { position: absolute; width: 750px; /* Augmenté (était à 500px) */ padding: 40px; /* Plus d'espace interne */ background: #ffffff; color: #000000; border: 2px solid #333; box-shadow: 15px 15px 0px #000; /* Ombre plus épaisse */ opacity: 0; visibility: hidden; transition: transform 0.8s cubic-bezier(0.2, 1, 0.3, 1), opacity 0.6s ease, filter 0.8s ease; } /* Positions initiales */ .from-left { transform: translateX(-120vw) scale(1.25) translateZ(100px); } .from-bottom { transform: translateY(120vh) scale(1.25) translateZ(100px); } /* ÉTAT ACTIF */ .card.active { visibility: visible; opacity: 1; filter: grayscale(0) blur(0); border-color: var(--cyan); transform: translate(0, 0) scale(1.25) translateZ(100px); z-index: 100; } /* ÉTAT BACKGROUND (LE DÉZOOM) */ .card.background { visibility: visible; opacity: 0.15; /* Très sombre et discret */ filter: grayscale(1) brightness(0.2); /* On baisse la luminosité très bas */ border-color: #222; z-index: 5; /* On retire la transition de transformation quand elles sont derrière pour qu'elles restent figées lors du retour de l'axolotl */ transition: opacity 1s ease, filter 1s ease; } .card.off-screen { opacity: 0; transform: translateY(-100vh) scale(0.5); } .no-anim { transition: none !important; } /* --- TYPO & UI (STYLING RETRO) --- */ h2 { font-family: var(--font-pixel); font-size: 2.5rem; margin: 0 0 15px 0; color: var(--cyan); text-transform: uppercase; animation: jitter 3s infinite; } @keyframes jitter { 0%, 90%, 100% { transform: translate(0); } 91% { transform: translate(2px, -1px); } 94% { transform: translate(-2px, 1.5px); } } .tag { font-family: var(--font-pixel); font-size: 1rem; color: var(--alert); margin-bottom: 5px; } .code-box { background: #000; padding: 15px; border-left: 3px solid var(--cyan); font-size: 0.85rem; color: #888; margin: 15px 0; } /* --- AXOLOTL LAYER (GLITCH) --- */ #axo-layer { position: fixed; inset: 0; background: #eee; color: #111; display: none; flex-direction: column; justify-content: center; align-items: center; z-index: 500; } #axo-layer.show { display: flex; animation: glitch-flash 0.3s steps(2); } @keyframes glitch-flash { 0% { opacity: 0; transform: skewX(20deg); } 100% { opacity: 1; transform: skewX(0); } } #ui-header { position: fixed; top: 20px; left: 20px; font-family: var(--font-pixel); font-size: 1.5rem; color: #444; z-index: 3000; } /* ÉTAT ACTIF : La slide actuelle est nette, colorée et au-dessus */ .card.active { visibility: visible; opacity: 1; filter: grayscale(0) brightness(1); border-color: var(--cyan); transform: translate(0, 0) scale(1.1) translateZ(100px); /* Légère mise en avant */ z-index: 100; } /* ÉTAT BACKGROUND : Les slides précédentes deviennent grises et transparentes */ .card.background { visibility: visible; opacity: 0.1; /* Très discret */ filter: grayscale(1); /* Devient gris */ border-color: #444; /* Bordure sombre */ transform: translate(0, 0) rotate(var(--r)); /* Elles restent à leur place */ z-index: 5; } /* Garde tes styles précédents pour .card, .active et .background */ .no-transition { transition: none !important; } /* La slide 5 (index 4) doit avoir son animation d'entrée habituelle */ .nav-controls { position: fixed; bottom: 60px; /* Juste au-dessus de la barre de logs */ right: 40px; display: flex; align-items: center; gap: 10px; z-index: 4000; /* Sous l'effet CRT mais au-dessus des cartes */ background: rgba(0, 0, 0, 0.6); padding: 10px; border: 1px solid #333; } .nav-btn { background: transparent; border: 1px solid var(--cyan); color: var(--cyan); font-family: var(--font-pixel); font-size: 1.2rem; padding: 5px 15px; cursor: pointer; transition: all 0.2s; text-transform: uppercase; } .nav-btn:hover { background: var(--cyan); color: #000; box-shadow: 0 0 15px var(--cyan); } .nav-separator { width: 2px; height: 20px; background: #333; } .no-anim { transition: none !important; } /* On rend la boîte de code un peu plus contrastée sur le blanc */ .code-box { background: #f0f0f0; padding: 15px; border-left: 3px solid var(--cyan); font-size: 0.85rem; color: #333; /* Texte plus sombre */ margin: 15px 0; } /* On s'assure que les paragraphes dans les cartes sont bien noirs */ .card p, .card li { font-size: 1.4rem; line-height: 1.6; } /* Corps de texte agrandi */ .card h2 { font-size: 3.5rem !important; } /* Titres plus massifs */ .card .tag { font-size: 1.2rem; } /* À ajouter dans ton