/* ============================================ Theme MATRIX : Cybersecurite / Lazarus ============================================ */ @import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&family=Inter:wght@400;600;700&display=swap'); :root { --color-bg: #000000; --color-bg-alt: #0a0f0a; --color-bg-card: rgba(0, 20, 0, 0.6); --color-green: #00ff41; --color-green-dim: #00cc33; --color-green-glow: rgba(0, 255, 65, 0.4); --color-green-subtle: rgba(0, 255, 65, 0.08); --color-red: #ff3333; --color-red-glow: rgba(255, 51, 51, 0.4); --color-cyan: #00e5ff; --color-cyan-glow: rgba(0, 229, 255, 0.3); --color-yellow: #ffd600; --color-text: #c0d0c0; --color-text-bright: #e0ffe0; --color-muted: #4a6a4a; --color-border: #0a3a0a; --font-mono: 'Fira Code', 'Cascadia Code', 'Consolas', monospace; --font-sans: 'Inter', 'Segoe UI', Arial, sans-serif; } /* ===================== KEYFRAMES ===================== */ @keyframes matrixGlow { 0%, 100% { text-shadow: 0 0 10px var(--color-green-glow), 0 0 20px var(--color-green-glow); } 50% { text-shadow: 0 0 20px var(--color-green), 0 0 40px var(--color-green-glow), 0 0 60px rgba(0,255,65,0.15); } } @keyframes glitchColor { 0% { text-shadow: 2px 0 #ff0000, -2px 0 #00ffff; } 25% { text-shadow: -2px 0 #ff0000, 2px 0 #00ffff; } 50% { text-shadow: 2px 2px #ff0000, -2px -2px #00ffff; } 75% { text-shadow: -1px 2px #ff0000, 1px -2px #00ffff; } 100% { text-shadow: 2px 0 #ff0000, -2px 0 #00ffff; } } @keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } @keyframes scanline { 0% { transform: translateY(-100%); } 100% { transform: translateY(100vh); } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulseGlow { 0%, 100% { box-shadow: 0 0 5px var(--color-green-glow), inset 0 0 5px rgba(0,255,65,0.05); } 50% { box-shadow: 0 0 20px var(--color-green-glow), 0 0 40px rgba(0,255,65,0.1), inset 0 0 10px rgba(0,255,65,0.08); } } @keyframes redPulse { 0%, 100% { text-shadow: 0 0 10px var(--color-red-glow); } 50% { text-shadow: 0 0 30px var(--color-red), 0 0 60px var(--color-red-glow); } } /* ===================== BASE ===================== */ .reveal { background: var(--color-bg); color: var(--color-text); font-family: var(--font-sans); } /* Scanlines CRT */ .reveal::after { content: ''; position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 9999; background: repeating-linear-gradient( 0deg, transparent, transparent 2px, rgba(0, 255, 65, 0.018) 2px, rgba(0, 255, 65, 0.018) 4px ); } /* Barre de scan lumineuse */ .reveal::before { content: ''; position: fixed; top: 0; left: 0; width: 100%; height: 6px; background: linear-gradient(180deg, transparent, rgba(0,255,65,0.25), transparent); z-index: 9998; pointer-events: none; animation: scanline 8s linear infinite; opacity: 0.4; } .reveal .slides { text-align: left; } /* ===================== TITRES + GLOW ===================== */ .reveal h1, .reveal h2, .reveal h3 { color: var(--color-green); font-family: var(--font-mono); text-transform: none; letter-spacing: -0.02em; } .reveal h1 { font-size: 2.2em; border-bottom: 2px solid var(--color-green); border-image: linear-gradient(90deg, var(--color-green), transparent) 1; padding-bottom: 0.3em; margin-bottom: 0.6em; animation: matrixGlow 3s ease-in-out infinite; } .reveal h2 { font-size: 1.6em; margin-bottom: 0.5em; text-shadow: 0 0 10px var(--color-green-glow); } .reveal h3 { font-size: 1.2em; color: var(--color-cyan); text-shadow: 0 0 8px var(--color-cyan-glow); } /* ===================== TEXTE ===================== */ .reveal p, .reveal li { font-size: 0.85em; line-height: 1.7; color: var(--color-text); } .reveal ul, .reveal ol { margin-left: 1em; } .reveal li { margin-bottom: 0.4em; } /* Puces style terminal > */ .reveal ul > li { list-style: none; padding-left: 1.2em; position: relative; } .reveal ul > li::before { content: '>'; position: absolute; left: 0; color: var(--color-green); font-family: var(--font-mono); font-weight: bold; text-shadow: 0 0 4px var(--color-green-glow); } .reveal strong { color: var(--color-green); text-shadow: 0 0 6px var(--color-green-glow); } .reveal em { color: var(--color-cyan); font-style: italic; text-shadow: 0 0 4px var(--color-cyan-glow); } /* ===================== LIENS ===================== */ .reveal a { color: var(--color-cyan); text-decoration: underline; text-underline-offset: 3px; text-shadow: 0 0 4px var(--color-cyan-glow); } .reveal a:hover { color: var(--color-green); text-shadow: 0 0 10px var(--color-green-glow); } /* ===================== CODE ===================== */ .reveal code { font-family: var(--font-mono); background: var(--color-bg-card); border: 1px solid var(--color-border); border-radius: 4px; padding: 0.15em 0.4em; font-size: 0.85em; color: var(--color-green); text-shadow: 0 0 4px var(--color-green-glow); } .reveal pre { background: var(--color-bg-card); border: 1px solid var(--color-green); border-radius: 6px; padding: 1em; width: 100%; box-sizing: border-box; box-shadow: 0 0 15px rgba(0,255,65,0.1), inset 0 0 30px rgba(0,0,0,0.5); } .reveal pre code { background: transparent; border: none; padding: 0; font-size: 0.75em; line-height: 1.6; } /* ===================== SLIDE TITRE ===================== */ .reveal .title-slide { text-align: center; } .reveal .title-slide h1 { border-bottom: none; border-image: none; font-size: 2.6em; margin-bottom: 0.3em; animation: matrixGlow 2s ease-in-out infinite; } /* Glitch au hover */ .reveal .title-slide h1:hover { animation: glitchColor 0.3s steps(4) infinite, matrixGlow 2s ease-in-out infinite; } .reveal .title-slide .subtitle { color: var(--color-cyan); font-size: 1.1em; font-family: var(--font-mono); margin-bottom: 1.5em; text-shadow: 0 0 10px var(--color-cyan-glow); } /* Curseur clignotant */ .reveal .title-slide .subtitle::after { content: '_'; animation: blink 1s step-end infinite; color: var(--color-green); margin-left: 2px; } .reveal .title-slide .authors { color: var(--color-muted); font-size: 0.9em; margin-top: 1em; } .reveal .title-slide .date { color: var(--color-muted); font-size: 0.75em; margin-top: 0.5em; font-family: var(--font-mono); } /* ===================== UTILITAIRES ===================== */ .reveal .alert { color: var(--color-red); font-weight: bold; animation: redPulse 2s ease-in-out infinite; } .reveal .big-number { font-size: 3em; font-family: var(--font-mono); color: var(--color-red); font-weight: bold; text-align: center; margin: 0.5em 0; text-shadow: 0 0 20px var(--color-red-glow), 0 0 40px rgba(255,51,51,0.15); } .reveal .source { font-size: 0.6em; color: var(--color-muted); font-style: italic; margin-top: 1em; } /* ===================== TIMELINE ===================== */ .reveal .timeline { list-style: none; margin: 0; padding: 0; position: relative; } .reveal .timeline::before { content: ''; position: absolute; left: 8px; top: 0; bottom: 0; width: 2px; background: linear-gradient(180deg, transparent, var(--color-green), var(--color-red)); box-shadow: 0 0 8px var(--color-green-glow); } .reveal .timeline li { padding-left: 30px; position: relative; margin-bottom: 0.6em; font-size: 0.8em; list-style: none; } .reveal .timeline li::before { content: ''; position: absolute; left: 3px; top: 0.45em; width: 12px; height: 12px; border-radius: 50%; background: var(--color-bg); border: 2px solid var(--color-green); box-shadow: 0 0 6px var(--color-green-glow); } /* Dernier point = rouge pulsant */ .reveal .timeline li:last-child::before { border-color: var(--color-red); box-shadow: 0 0 10px var(--color-red-glow), 0 0 20px rgba(255,51,51,0.2); background: rgba(255,51,51,0.2); } .reveal .timeline .year { color: var(--color-cyan); font-family: var(--font-mono); font-weight: bold; margin-right: 0.5em; text-shadow: 0 0 4px var(--color-cyan-glow); } /* ===================== DIAGRAMMES ===================== */ .reveal .diagram { display: flex; align-items: center; justify-content: center; gap: 0.5em; margin: 1.5em 0; flex-wrap: wrap; } .reveal .diagram .box { background: var(--color-bg-card); border: 2px solid var(--color-green); border-radius: 6px; padding: 0.6em 1em; font-family: var(--font-mono); font-size: 0.7em; color: var(--color-green); text-align: center; min-width: 100px; box-shadow: 0 0 10px var(--color-green-glow), inset 0 0 15px rgba(0,255,65,0.03); transition: all 0.3s ease; } .reveal .diagram .box:hover { box-shadow: 0 0 25px var(--color-green-glow), 0 0 50px rgba(0,255,65,0.15); transform: scale(1.05); } .reveal .diagram .box.red { border-color: var(--color-red); color: var(--color-red); box-shadow: 0 0 10px var(--color-red-glow); } .reveal .diagram .box.red:hover { box-shadow: 0 0 25px var(--color-red-glow), 0 0 50px rgba(255,51,51,0.15); } .reveal .diagram .box.cyan { border-color: var(--color-cyan); color: var(--color-cyan); box-shadow: 0 0 10px var(--color-cyan-glow); } .reveal .diagram .arrow { color: var(--color-green-dim); font-size: 1.5em; font-family: var(--font-mono); text-shadow: 0 0 8px var(--color-green-glow); animation: matrixGlow 2s ease-in-out infinite; } /* ===================== LAYOUT ===================== */ .reveal .two-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 2em; align-items: start; } /* ===================== SOMMAIRE ===================== */ .reveal .toc ol { list-style: none; counter-reset: toc-counter; font-family: var(--font-mono); font-size: 0.85em; padding-left: 0; } .reveal .toc ol li { counter-increment: toc-counter; margin-bottom: 0.5em; color: var(--color-text); padding-left: 2.5em; position: relative; } .reveal .toc ol li::before { content: '[' counter(toc-counter, decimal-leading-zero) ']'; color: var(--color-green); position: absolute; left: 0; text-shadow: 0 0 4px var(--color-green-glow); } /* ===================== PROGRESS / SLIDE NUMBER ===================== */ .reveal .progress { color: var(--color-green); height: 3px; } .reveal .progress span { background: var(--color-green); box-shadow: 0 0 10px var(--color-green), 0 0 20px var(--color-green-glow); } .reveal .slide-number { font-family: var(--font-mono); font-size: 0.6em; color: var(--color-green-dim); background: transparent; text-shadow: 0 0 4px var(--color-green-glow); } /* ===================== FRAGMENTS ===================== */ .reveal .fragment { transition: all 0.4s ease; } .reveal .fragment.visible { animation: fadeInUp 0.5s ease forwards; } .reveal .fragment.highlight-green.visible { color: var(--color-green); } .reveal .fragment.highlight-red.visible { color: var(--color-red); } /* ===================== TABLE ===================== */ .reveal table { border-collapse: collapse; width: 100%; font-size: 0.75em; } .reveal table th { background: var(--color-bg-card); color: var(--color-green); font-family: var(--font-mono); padding: 0.5em 0.8em; border-bottom: 2px solid var(--color-green); text-align: left; text-shadow: 0 0 4px var(--color-green-glow); } .reveal table td { padding: 0.4em 0.8em; border-bottom: 1px solid var(--color-border); color: var(--color-text); } .reveal table tr:hover td { background: var(--color-bg-card); color: var(--color-text-bright); } /* ===================== SLIDE FINALE ===================== */ .reveal .end-slide { text-align: center; } .reveal .end-slide h1 { border-bottom: none; border-image: none; font-size: 3em; animation: matrixGlow 1.5s ease-in-out infinite; } /* ===================== GLOW CARD ===================== */ .reveal .glow-card { background: var(--color-bg-card); border: 1px solid var(--color-green); border-radius: 8px; padding: 1.2em 1.5em; margin: 1em 0; box-shadow: 0 0 15px var(--color-green-glow), inset 0 0 30px rgba(0,0,0,0.5); animation: pulseGlow 4s ease-in-out infinite; } .reveal .glow-card.red { border-color: var(--color-red); box-shadow: 0 0 15px var(--color-red-glow), inset 0 0 30px rgba(0,0,0,0.5); } .reveal .glow-card h3 { margin-top: 0; } /* ===================== DATA BACKGROUND ===================== */ .reveal .data-bg { position: relative; overflow: hidden; } .reveal .data-bg::before { content: '01001100 01000001 01011010 01000001 01010010 01010101 01010011 00100000 01000010 01011001 01000010 01001001 01010100 00100000 00110001 00101110 00110101 01000010 '; position: absolute; top: 0; left: 0; width: 100%; height: 100%; font-family: var(--font-mono); font-size: 0.5em; color: rgba(0,255,65,0.04); word-break: break-all; line-height: 1.8; z-index: 0; pointer-events: none; overflow: hidden; } .reveal .data-bg > * { position: relative; z-index: 1; } /* ===================== TERMINAL PROMPT ===================== */ .reveal .terminal-line { font-family: var(--font-mono); font-size: 0.8em; color: var(--color-green); margin: 0.3em 0; } .reveal .terminal-line::before { content: 'root@lazarus:~$ '; color: var(--color-muted); } .reveal .terminal-line::after { content: '_'; animation: blink 1s step-end infinite; } /* ===================== TAGS ===================== */ .reveal .tag { display: inline-block; font-family: var(--font-mono); font-size: 0.65em; padding: 0.2em 0.6em; border-radius: 3px; background: var(--color-bg-card); border: 1px solid var(--color-green); color: var(--color-green); margin: 0.15em; text-shadow: 0 0 4px var(--color-green-glow); } .reveal .tag.red { border-color: var(--color-red); color: var(--color-red); } .reveal .tag.cyan { border-color: var(--color-cyan); color: var(--color-cyan); } /* ===================== SEPARATEUR ===================== */ .reveal .matrix-hr { border: none; height: 1px; background: linear-gradient(90deg, transparent, var(--color-green), transparent); box-shadow: 0 0 10px var(--color-green-glow); margin: 1.5em 0; } /* ===================== CITATION ===================== */ .reveal .matrix-quote { border-left: 3px solid var(--color-green); padding: 0.8em 1.2em; margin: 1em 0; background: var(--color-bg-card); font-style: italic; color: var(--color-text-bright); box-shadow: inset 3px 0 15px rgba(0,255,65,0.05); } /* ===================== STATUS DOT ===================== */ .reveal .status-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--color-green); box-shadow: 0 0 6px var(--color-green); animation: blink 1.5s step-end infinite; margin-right: 6px; vertical-align: middle; } .reveal .status-dot.red { background: var(--color-red); box-shadow: 0 0 6px var(--color-red); } /* ===================== SECTIONS FADE ===================== */ .reveal section { animation: fadeInUp 0.6s ease forwards; } /* ===================== RESPONSIVE ===================== */ @media (max-width: 800px) { .reveal .two-cols { grid-template-columns: 1fr; gap: 1em; } .reveal h1 { font-size: 1.6em; } .reveal .big-number { font-size: 2em; } .reveal .diagram { flex-direction: column; } }