/* Variables pour thème */ :root { --primary-bg: #4c1d95; --secondary-bg: #6b21a8; --glow-color: #7c3aed; --text-color: #ffffff; --button-bg: #2563eb; --button-hover: #3b82f6; --alert-bg: #ef4444; --circle-bg: #87CEEB; --circle-hover: #ADD8E6; } /* Style général */ body, html { margin: 0; padding: 0; height: 100vh; width: 100vw; display: flex; flex-direction: column; justify-content: center; align-items: center; background-image: url('https://i.ibb.co/Jwh6jc8y/20250520-121247.png'); background-size: cover; background-position: center; background-repeat: no-repeat; font-family: 'Inter', sans-serif; overflow: hidden; position: relative; } /* Écran de chargement */ #loading, #prediction-loading { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 1000; transition: opacity 0.5s ease; } .loader { display: flex; gap: 1.2vmin; margin-bottom: 2vmin; } .loader-bar { width: 1vmin; height: 4vmin; background: var(--text-color); border-radius: 0.5vmin; animation: scale 1.2s ease-in-out infinite; } .loader-bar:nth-child(2) { animation-delay: 0.2s; } .loader-bar:nth-child(3) { animation-delay: 0.4s; } @keyframes scale { 0%, 100% { transform: scaleY(1); } 50% { transform: scaleY(1.8); } } .loading-text { color: var(--text-color); font-size: 2.5vmin; font-weight: 500; letter-spacing: 0.1vmin; } /* Contenu principal */ #content { display: none; text-align: center; position: relative; z-index: 1; width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; opacity: 0; transition: opacity 0.5s ease; } #content.visible { display: flex; opacity: 1; } /* Logo */ .logo { position: absolute; top: 5vmin; left: 50%; transform: translateX(-50%); width: 48vmin; max-width: 360px; height: auto; filter: drop-shadow(0 0.2vmin 0.5vmin rgba(0, 0, 0, 0.4)); z-index: 10; } .logo--ios { width: 54vmin; max-width: 420px; top: 6vmin; } /* Alerte */ #alertBox { position: fixed; top: 16vmin; left: 50%; transform: translateX(-50%); background: linear-gradient(135deg, var(--alert-bg), #b91c1c); color: var(--text-color); padding: 2vmin 4vmin; border-radius: 1vmin; box-shadow: 0 0.4vmin 1.2vmin rgba(0, 0, 0, 0.3); font-size: 2.8vmin; font-weight: 600; display: none; animation: slideIn 0.5s ease; z-index: 999; max-width: 80%; text-align: center; } @keyframes slideIn { from { transform: translate(-50%, -2vmin); opacity: 0; } to { transform: translate(-50%, 0); opacity: 1; } } /* Conteneur des carrés */ .circle-container { display: flex; flex-direction: column; gap: 2vmin; margin-top: 20vmin; max-height: 58vh; overflow-y: auto; padding: 2vmin; scrollbar-width: none; width: 90%; background: rgba(255, 255, 255, 0.1); border-radius: 1.5vmin; box-shadow: 0 0.5vmin 1vmin rgba(0, 0, 0, 0.2), 0 0 2vmin var(--glow-color); } .circle-container::-webkit-scrollbar { display: none; } .circle-row { display: flex; justify-content: center; align-items: center; gap: 1.8vmin; position: relative; animation: fadeInRow 0.5s ease; } @keyframes fadeInRow { from { opacity: 0; transform: translateY(1vmin); } to { opacity: 1; transform: translateY(0); } } .circle { width: 9vmin; height: 9vmin; min-width: 54px; min-height: 54px; background: var(--circle-bg); border: 0.4vmin solid var(--text-color); border-radius: 0; box-shadow: 0 0.3vmin 0.8vmin rgba(0, 0, 0, 0.2); display: flex; justify-content: center; align-items: center; overflow: hidden; transition: transform 0.3s ease, border-color 0.3s ease, background 0.3s ease; } .circle--ios { width: 10.5vmin; height: 10.5vmin; min-width: 60px; min-height: 60px; } .circle:hover { transform: scale(1.15); border-color: #60a5fa; background: var(--circle-hover); box-shadow: 0 0 1vmin var(--glow-color); } .circle img { width: 100%; height: 100%; object-fit: cover; display: none; } .row-number { font-size: 2.5vmin; font-weight: 600; color: var(--text-color); position: absolute; right: -25vmin; top: 50%; transform: translateY(-50%); background: rgba(0, 0, 0, 0.6); padding: 0.5vmin 1vmin; border-radius: 1vmin; } /* Boutons */ .buttons { position: fixed; bottom: 12vmin; display: flex; justify-content: center; gap: 2.5vmin; z-index: 10; width: 100%; padding: 0 2vmin; box-sizing: border-box; } .button { padding: 2vmin 5.5vmin; font-size: 2.6vmin; font-weight: 600; color: var(--text-color); background: var(--button-bg); border: none; border-radius: 0.8vmin; box-shadow: 0 0.2vmin 0.6vmin rgba(0, 0, 0, 0.2), 0 0 1vmin var(--glow-color); cursor: pointer; transition: background 0.3s ease, transform 0.2s ease, box-shadow 0.3s ease; display: flex; align-items: center; justify-content: center; gap: 1vmin; max-width: 35%; flex: 1; letter-spacing: 0.05vmin; } .button:hover { background: var(--button-hover); transform: translateY(-0.2vmin); box-shadow: 0 0.4vmin 0.8vmin rgba(0, 0, 0, 0.3), 0 0 1.5vmin var(--glow-color); } .button:disabled { background: #6b7280; color: #d1d5db; cursor: not-allowed; transform: none; box-shadow: none; opacity: 0.7; } .button-icon { width: 4vmin; height: 4vmin; } /* Bouton Retour */ .back-button { position: fixed; bottom: 4vmin; left: 2vmin; padding: 2vmin 4vmin; font-size: 2.6vmin; font-weight: 600; color: var(--text-color); background: #dc2626; border: none; border-radius: 0.8vmin; box-shadow: 0 0.2vmin 0.6vmin rgba(0, 0, 0, 0.2); cursor: pointer; transition: background 0.3s ease, transform 0.2s ease, box-shadow 0.3s ease; display: flex; align-items: center; justify-content: center; gap: 1vmin; z-index: 10; } .back-button:hover { background: #ef4444; transform: translateY(-0.2vmin); box-shadow: 0 0.4vmin 0.8vmin rgba(0, 0, 0, 0.3); } /* Sélecteur de langue */ .language-toggle { position: fixed; top: 3vmin; right: 2vmin; z-index: 10; } .language-toggle select { padding: 1vmin; font-size: 2vmin; background: rgba(255, 255, 255, 0.1); color: var(--text-color); border: 0.2vmin solid var(--text-color); border-radius: 0.5vmin; cursor: pointer; transition: border-color 0.3s ease; } .language-toggle select:focus { outline: none; border-color: #60a5fa; } /* Animation des particules */ .particle { position: absolute; width: 0.3vmin; height: 0.3vmin; background: rgba(255, 255, 255, 0.7); border-radius: 50%; z-index: 5; animation: float 6s ease-in-out forwards; opacity: 0.8; } @keyframes float { 0% { transform: translateY(100vh) translateX(0); opacity: 0.8; } 20% { opacity: 1; } 80% { opacity: 1; } 100% { transform: translateY(-20vh) translateX(calc(5vw * var(--direction))); opacity: 0; } } /* Media Queries pour responsivité */ @media (max-width: 480px) { .circle { width: 10vmin; height: 10vmin; min-width: 50px; min-height: 50px; } .circle--ios { width: 11vmin; height: 11vmin; min-width: 62px; min-height: 62px; } .button { padding: 2.2vmin 4vmin; font-size: 3.2vmin; } .back-button { padding: 2.2vmin 3.5vmin; font-size: 3.2vmin; left: 1vmin; bottom: 2vmin; } .buttons { bottom: 20vmin; } .logo { width: 42vmin; max-width: 300px; top: 4vmin; } .logo--ios { width: 48vmin; max-width: 360px; top: 5vmin; } .circle-container { max-height: 55vh; margin-top: 18vmin; } #alertBox { font-size: 3.5vmin; padding: 2vmin 3.5vmin; top: 14vmin; } .row-number { font-size: 3vmin; right: 0vmin; } .button-icon { width: 4.5vmin; height: 4.5vmin; } .language-toggle select { font-size: 2.5vmin; padding: 1.2vmin; } } @media (min-width: 481px) and (max-width: 768px) { .circle { width: 9.5vmin; height: 9.5vmin; min-width: 52px; min-height: 52px; } .circle--ios { width: 10.5vmin; height: 10.5vmin; min-width: 60px; min-height: 60px; } .button { padding: 2vmin 4.5vmin; font-size: 2.8vmin; } .buttons { bottom: 11vmin; } .back-button { bottom: 3vmin; } .logo { width: 45vmin; max-width: 330px; top: 4.5vmin; } .logo--ios { width: 51vmin; max-width: 390px; top: 5.5vmin; } .circle-container { max-height: 60vh; margin-top: 19vmin; } .language-toggle select { font-size: 2.2vmin; } } @media (min-width: 769px) { .circle { width: 8.5vmin; height: 8.5vmin; min-width: 54px; min-height: 54px; } .circle--ios { width: 10.5vmin; height: 10.5vmin; min-width: 60px; min-height: 60px; } .button { padding: 1.8vmin 5vmin; font-size: 2.3vmin; max-width: 220px; } .logo { width: 48vmin; max-width: 360px; } .logo--ios { width: 54vmin; max-width: 420px; } } @media (orientation: landscape) and (max-height: 500px) { .circle-container { max-height: 45vh; margin-top: 14vmin; } .logo { top: 3vmin; } .logo--ios { top: 4vmin; } .buttons { bottom: 9vmin; } .back-button { bottom: 2vmin; } #alertBox { top: 12vmin; } }