:root {
    --bg-deep: #0a0a0f;
    --bg-primary: #12121a;
    --bg-secondary: #1a1a25;
    --accent-primary: #8b3a62;
    --accent-secondary: #5e2a8b;
    --accent-light: #d4a5c9;
    --text-primary: #ffffff;
    --text-secondary: #b8b8c8;
    --text-muted: #6b6b7b;
    --glass-bg: rgba(255, 255, 255, 0.03);
    --glass-border: rgba(255, 255, 255, 0.08);
}

* { margin: 0; padding: 0; box-sizing: border-box; }

body {
    font-family: 'Montserrat', sans-serif;
    background: var(--bg-deep);
    color: var(--text-primary);
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    position: relative;
}

.bg-grid {
    position: fixed;
    inset: 0;
    background-image: 
        linear-gradient(rgba(139, 58, 98, 0.03) 1px, transparent 1px),
        linear-gradient(90deg, rgba(139, 58, 98, 0.03) 1px, transparent 1px);
    background-size: 50px 50px;
    pointer-events: none;
}

.bg-glow {
    position: fixed;
    width: 600px;
    height: 600px;
    border-radius: 50%;
    filter: blur(150px);
    opacity: 0.15;
    pointer-events: none;
}

.bg-glow-1 {
    top: -200px;
    left: -200px;
    background: var(--accent-primary);
    animation: float 8s ease-in-out infinite;
}

.bg-glow-2 {
    bottom: -200px;
    right: -200px;
    background: var(--accent-secondary);
    animation: float 8s ease-in-out infinite reverse;
}

@keyframes float {
    0%, 100% { transform: translate(0, 0); }
    50% { transform: translate(30px, 30px); }
}

.particles {
    position: fixed;
    inset: 0;
    pointer-events: none;
    overflow: hidden;
}

.particle {
    position: absolute;
    width: 4px;
    height: 4px;
    background: var(--accent-light);
    border-radius: 50%;
    opacity: 0.3;
    animation: rise 10s linear infinite;
}

@keyframes rise {
    0% { transform: translateY(100vh) scale(0); opacity: 0; }
    10% { opacity: 0.3; }
    90% { opacity: 0.3; }
    100% { transform: translateY(-100vh) scale(1); opacity: 0; }
}

.container {
    text-align: center;
    z-index: 10;
    padding: 2rem;
    max-width: 600px;
}

.error-code {
    font-size: clamp(8rem, 25vw, 14rem);
    font-weight: 700;
    line-height: 1;
    position: relative;
    margin-bottom: 1rem;
    background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary), var(--accent-light));
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    animation: glitch 3s infinite;
    cursor: pointer;
    user-select: none;
    transition: transform 0.3s ease, filter 0.3s ease;
}

.error-code:hover {
    transform: scale(1.05);
    filter: brightness(1.2);
}

.error-code:active {
    transform: scale(0.98);
}

.error-code::before,
.error-code::after {
    content: '404';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary));
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    opacity: 0.8;
}

.error-code::before {
    animation: glitch-1 0.3s infinite linear alternate-reverse;
    clip-path: polygon(0 0, 100% 0, 100% 35%, 0 35%);
}

.error-code::after {
    animation: glitch-2 0.3s infinite linear alternate-reverse;
    clip-path: polygon(0 65%, 100% 65%, 100% 100%, 0 100%);
}

@keyframes glitch {
    0%, 90%, 100% { transform: translate(0); }
    92% { transform: translate(-2px, 2px); }
    94% { transform: translate(2px, -2px); }
    96% { transform: translate(-2px, -2px); }
    98% { transform: translate(2px, 2px); }
}

@keyframes glitch-1 {
    0% { transform: translate(0); }
    100% { transform: translate(-3px, 1px); }
}

@keyframes glitch-2 {
    0% { transform: translate(0); }
    100% { transform: translate(3px, -1px); }
}

.error-icon {
    width: 80px;
    height: 80px;
    margin: 0 auto 2rem;
    background: var(--glass-bg);
    border: 1px solid var(--glass-border);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    animation: pulse-icon 2s ease-in-out infinite;
}

.error-icon svg {
    width: 40px;
    height: 40px;
    color: var(--accent-light);
}

@keyframes pulse-icon {
    0%, 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(139, 58, 98, 0.4); }
    50% { transform: scale(1.05); box-shadow: 0 0 0 15px rgba(139, 58, 98, 0); }
}

.error-title {
    font-size: 1.75rem;
    font-weight: 600;
    margin-bottom: 1rem;
    color: var(--text-primary);
}

.error-message {
    font-size: 1rem;
    color: var(--text-muted);
    line-height: 1.7;
    margin-bottom: 2.5rem;
}

.error-message span {
    color: var(--accent-light);
}

.buttons {
    display: flex;
    gap: 1rem;
    justify-content: center;
    flex-wrap: wrap;
}

.btn {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.875rem 1.75rem;
    border-radius: 8px;
    font-size: 0.95rem;
    font-weight: 600;
    text-decoration: none;
    transition: all 0.3s ease;
    cursor: pointer;
    border: none;
}

.btn svg { width: 18px; height: 18px; }

.btn-primary {
    background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary));
    color: white;
    box-shadow: 0 4px 20px rgba(139, 58, 98, 0.3);
}

.btn-primary:hover {
    transform: translateY(-3px);
    box-shadow: 0 8px 30px rgba(139, 58, 98, 0.4);
}

.btn-secondary {
    background: var(--glass-bg);
    border: 1px solid var(--glass-border);
    color: var(--text-secondary);
}

.btn-secondary:hover {
    background: rgba(255, 255, 255, 0.08);
    border-color: var(--accent-primary);
    color: var(--text-primary);
}

.portal {
    position: absolute;
    width: 300px;
    height: 300px;
    pointer-events: none;
    opacity: 0.1;
}

.portal-left { left: -100px; top: 50%; transform: translateY(-50%); }
.portal-right { right: -100px; top: 50%; transform: translateY(-50%); }

.portal-ring {
    position: absolute;
    inset: 0;
    border: 2px solid var(--accent-primary);
    border-radius: 50%;
    animation: rotate 10s linear infinite;
}

.portal-ring:nth-child(2) { inset: 20px; border-color: var(--accent-secondary); animation-duration: 8s; animation-direction: reverse; }
.portal-ring:nth-child(3) { inset: 40px; border-color: var(--accent-light); animation-duration: 6s; }

@keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }

.footer {
    position: fixed;
    bottom: 2rem;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    align-items: center;
    gap: 0.5rem;
    color: var(--text-muted);
    font-size: 0.85rem;
    z-index: 10;
}

.footer a { color: var(--accent-light); text-decoration: none; transition: color 0.3s ease; }
.footer a:hover { color: var(--text-primary); }

.logo-mini {
    font-weight: 700;
    background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary));
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}

/* Responsive 404 */
@media (max-width: 768px) {
    .error-code { font-size: clamp(5rem, 20vw, 8rem); }
    .error-icon { width: 60px; height: 60px; margin-bottom: 1.5rem; }
    .error-icon svg { width: 30px; height: 30px; }
    .error-title { font-size: 1.4rem; }
    .error-message { font-size: 0.9rem; padding: 0 1rem; }
    .buttons { flex-direction: column; width: 100%; padding: 0 1rem; }
    .btn { width: 100%; justify-content: center; padding: 1rem 1.5rem; }
    .portal { display: none; }
    .footer { bottom: 1rem; font-size: 0.75rem; }
}

@media (max-width: 480px) {
    .container { padding: 1rem; }
    .error-code { font-size: clamp(4rem, 18vw, 6rem); margin-bottom: 0.5rem; }
    .error-icon { width: 50px; height: 50px; margin-bottom: 1rem; }
    .error-icon svg { width: 24px; height: 24px; }
    .error-title { font-size: 1.2rem; }
    .error-message { font-size: 0.85rem; margin-bottom: 2rem; }
    .btn { font-size: 0.9rem; padding: 0.875rem 1.25rem; }
}

@media (max-height: 600px) {
    .error-icon { display: none; }
    .error-code { margin-bottom: 0.5rem; }
    .error-title { font-size: 1.2rem; margin-bottom: 0.5rem; }
    .error-message { margin-bottom: 1.5rem; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   EASTER EGG — portail de transition
   Déplacé depuis assets/js/pages/404.js : la CSP (style-src 'self')
   bloque tout élément <style> injecté par JavaScript.
   ═══════════════════════════════════════════════════════════════════════════ */

#portal-transition{position:fixed;inset:0;z-index:10000;background:#000;display:flex;align-items:center;justify-content:center;overflow:hidden}
.warp-container{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;perspective:500px}
.warp-tunnel{position:absolute;width:200vmax;height:200vmax;background:repeating-conic-gradient(from 0deg,transparent 0deg 10deg,rgba(139,58,98,0.1) 10deg 20deg);animation:tunnelSpin 2s linear infinite,tunnelZoom 3s ease-in forwards}
@keyframes tunnelSpin{to{transform:rotate(360deg)}
}
@keyframes tunnelZoom{0%{transform:rotate(0)scale(1);opacity:0}
20%{opacity:1}
100%{transform:rotate(720deg)scale(20);opacity:0}
}
.warp-stars{position:absolute;inset:0;background-image:radial-gradient(2px 2px at 20px 30px,#fff,transparent),radial-gradient(2px 2px at 40px 70px,rgba(255,255,255,0.8),transparent),radial-gradient(1px 1px at 90px 40px,#fff,transparent);background-size:350px 200px;animation:starsWarp 3s ease-in forwards}
@keyframes starsWarp{0%{transform:scale(1);opacity:0}
30%{opacity:1}
100%{transform:scale(50);opacity:0}
}
.warp-center{position:relative;width:150px;height:150px;animation:centerPulse 0.5s ease-in-out infinite,centerGrow 2.5s ease-in forwards}
@keyframes centerPulse{0%,100%{filter:brightness(1)}
50%{filter:brightness(1.5)}
}
@keyframes centerGrow{0%{transform:scale(0);opacity:0}
20%{transform:scale(1);opacity:1}
80%{transform:scale(1);opacity:1}
100%{transform:scale(100);opacity:1}
}
.warp-ring{position:absolute;inset:0;border:4px solid #8b3a62;border-radius:50%;animation:ringPulse 1s ease-in-out infinite;box-shadow:0 0 30px #8b3a62,inset 0 0 30px #8b3a62}
.warp-ring:nth-child(2){inset:20px;border-color:#5e2a8b;animation-delay:0.2s;box-shadow:0 0 30px #5e2a8b,inset 0 0 30px #5e2a8b}
.warp-ring:nth-child(3){inset:40px;border-color:#d4a5c9;animation-delay:0.4s;box-shadow:0 0 30px #d4a5c9,inset 0 0 30px #d4a5c9}
@keyframes ringPulse{0%,100%{transform:scale(1);opacity:1}
50%{transform:scale(1.1);opacity:0.8}
}
.warp-flash{position:absolute;inset:0;background:#fff;opacity:0;animation:flashBang 0.5s ease-out 2.5s forwards}
@keyframes flashBang{0%{opacity:0}
50%{opacity:1}
100%{opacity:0}
}
.warp-text{position:absolute;font-size:1.5rem;font-weight:700;color:#fff;letter-spacing:0.3rem;z-index:10;opacity:0;animation:textAppear 0.5s ease 0.5s forwards,textFade 0.5s ease 2s forwards}
@keyframes textAppear{to{opacity:1}
}
@keyframes textFade{to{opacity:0;transform:scale(2)}
}


/* ═══════════════════════════════════════════════════════════════════════════
   EASTER EGG — Jeu de la Vie de Conway
   Même origine, même raison.
   ═══════════════════════════════════════════════════════════════════════════ */

#game-of-life{position:fixed;inset:0;z-index:10000;background:#050508;animation:golIn 0.5s ease}
@keyframes golIn{from{opacity:0}
to{opacity:1}
}
#gol-canvas{position:absolute;inset:0;width:100%;height:100%;cursor:crosshair}
.gol-ui{position:absolute;top:20px;left:20px;background:rgba(10,10,15,0.95);backdrop-filter:blur(10px);border:1px solid rgba(139,58,98,0.3);border-radius:16px;padding:1rem;min-width:280px;box-shadow:0 20px 60px rgba(0,0,0,0.5)}
.gol-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:0.75rem}
.gol-header-text h1{font-size:1.1rem;margin-bottom:0.1rem;background:linear-gradient(135deg,#d4a5c9,#8b3a62);-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.gol-header-text p{font-size:0.7rem;color:#6b6b7b}
.gol-minimize{width:32px;height:32px;border:1px solid rgba(255,255,255,0.1);background:rgba(255,255,255,0.05);border-radius:8px;color:#b8b8c8;cursor:pointer;display:flex;align-items:center;justify-content:center}
.gol-minimize:hover{background:rgba(139,58,98,0.3);border-color:#8b3a62;color:#fff}
.gol-minimize svg{width:16px;height:16px}
.gol-minimize .icon-max{display:none}
.gol-ui.minimized .gol-body,.gol-ui.minimized .gol-exit{display:none}
.gol-ui.minimized .gol-minimize .icon-min{display:none}
.gol-ui.minimized .gol-minimize .icon-max{display:block}
.gol-ui.minimized{min-width:auto}
.gol-body{display:flex;flex-direction:column;gap:0.75rem}
.gol-description{background:rgba(139,58,98,0.1);border:1px solid rgba(139,58,98,0.2);border-radius:8px;padding:0.5rem}
.gol-description p{font-size:0.7rem;color:#b8b8c8;margin:0}
.gol-description strong{color:#d4a5c9}
.gol-controls{display:flex;gap:0.4rem;flex-wrap:wrap}
.gol-btn{width:40px;height:40px;border:1px solid rgba(255,255,255,0.1);background:rgba(255,255,255,0.05);border-radius:8px;color:#b8b8c8;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all 0.2s}
.gol-btn:hover{background:rgba(139,58,98,0.3);border-color:#8b3a62;color:#fff;transform:translateY(-2px)}
.gol-btn svg{width:18px;height:18px}
.gol-btn.active{background:linear-gradient(135deg,#8b3a62,#5e2a8b);border-color:transparent;color:#fff}
.gol-btn .icon-play{display:none}
.gol-btn .icon-pause{display:block}
.gol-btn:not(.active) .icon-play{display:block}
.gol-btn:not(.active) .icon-pause{display:none}
.gol-btn-sm{width:32px;height:32px;font-size:1.2rem;font-weight:bold}
.gol-zoom-row,.gol-speed-row{display:flex;align-items:center;gap:0.5rem}
.gol-zoom-row span{color:#d4a5c9;font-family:monospace;font-size:0.85rem;min-width:40px;text-align:center}
.gol-speed-row{flex-direction:column;align-items:stretch}
.gol-speed-row label{font-size:0.75rem;color:#b8b8c8}
.gol-speed-row label span{color:#d4a5c9;font-family:monospace}
.gol-speed-row input{width:100%;height:6px;-webkit-appearance:none;background:rgba(255,255,255,0.1);border-radius:3px;cursor:pointer}
.gol-speed-row input::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;background:linear-gradient(135deg,#8b3a62,#5e2a8b);border-radius:50%;cursor:pointer}
.gol-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:0.5rem}
.gol-stat{text-align:center;padding:0.4rem;background:rgba(255,255,255,0.03);border-radius:6px}
.gol-stat span{font-size:1rem;font-weight:700;color:#d4a5c9;font-family:monospace;display:block}
.gol-stat label{font-size:0.6rem;color:#6b6b7b;text-transform:uppercase}
.gol-exit{width:100%;margin-top:0.5rem;padding:0.6rem;background:transparent;border:1px solid rgba(255,255,255,0.1);border-radius:8px;color:#6b6b7b;font-size:0.8rem;cursor:pointer;transition:all 0.2s}
.gol-exit:hover{background:rgba(255,50,50,0.2);border-color:rgba(255,50,50,0.5);color:#ff6b6b}
@media(max-width:768px){.gol-ui{top:auto;bottom:0;left:0;right:0;border-radius:16px 16px 0 0;max-height:50vh;overflow-y:auto;min-width:auto}
.gol-header-text p,.gol-description{display:none}
.gol-ui.minimized{max-height:none}
}
@media(max-width:480px){.gol-ui{padding:0.75rem}
.gol-btn{width:36px;height:36px}
.gol-btn-sm{width:28px;height:28px}
}

