:root{--nuit:#10142e;--nuit-2:#1c2350;--nuit-3:#2a3470;--nuit-4:#3f4c94;--brume:#aeb4d8;--creme:#f6eedf;--ambre:#f2a93b;--lueur:#ffd98a;--sable:#f5e6cc;--papier:#fdf6e9;--kraft:#c99a62;--laterite:#b4532a;--encre:#2b1810;--bassin:#2bb3a3;--bissap:#c42f72;--reussite:#3dae5e;--danger:#c93a24;--titre:"Bricolage Grotesque", "Trebuchet MS", "Segoe UI", system-ui, sans-serif;--texte:"Atkinson Hyperlegible", "Segoe UI", system-ui, sans-serif;--chiffres:"Martian Mono", ui-monospace, "Cascadia Mono", Consolas, monospace}*{box-sizing:border-box}html,body,#racine{height:100%;margin:0}body{background:var(--nuit);color:var(--creme);font:16px/1.4 var(--texte);-webkit-text-size-adjust:100%}.page{max-width:430px;min-height:100%;padding:max(16px, env(safe-area-inset-top)) 16px max(16px, env(safe-area-inset-bottom));flex-direction:column;gap:16px;margin:0 auto;display:flex}.page.jour{background:var(--sable);color:var(--encre)}.colonne{flex-direction:column;flex:1;gap:12px;display:flex}.bas{flex-direction:column;gap:12px;margin-top:auto;padding-top:16px;display:flex}h1{font:800 30px/1.05 var(--titre);letter-spacing:-.01em;margin:24px 0 0}label,.etiquette{margin-top:12px;font-weight:700}.etiquette{font:500 12px var(--chiffres);letter-spacing:.08em;text-transform:uppercase;opacity:.7;margin:16px 0 0}.doux{opacity:.75;margin:0}.aide{opacity:.7;margin:0;font-size:14px}.centre{text-align:center}.cache{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}.logo{width:min(70%,260px);margin:12vh auto 0}.logo svg{width:100%;height:auto;display:block;overflow:visible}.profil{align-items:center;gap:10px;display:flex}.pastille{background:var(--ambre);width:40px;height:40px;color:var(--encre);font:800 18px/40px var(--titre);text-align:center;border:2px solid var(--encre);border-radius:50%;flex:none}.bouton{border:2px solid var(--encre);background:var(--ambre);min-height:56px;color:var(--encre);font:800 18px/1.1 var(--titre);cursor:pointer;border-radius:16px;flex-direction:column;justify-content:center;align-items:center;gap:2px;width:100%;padding:10px 16px;text-decoration:none;display:flex}.bouton small{font:400 13px var(--texte);opacity:.8}.bouton:disabled{opacity:.45;cursor:default}.bouton.second{color:var(--creme);border-color:var(--creme);background:0 0}.bouton.encre{background:var(--encre);color:var(--creme)}.bouton.clair{color:var(--encre);background:0 0}.bouton.whatsapp{background:var(--reussite);color:#fff}.bouton:focus-visible,.lien:focus-visible,.champ:focus-visible{outline:3px solid var(--lueur);outline-offset:2px}.lien{color:inherit;font:700 15px var(--texte);cursor:pointer;text-underline-offset:3px;background:0 0;border:0;align-self:flex-start;min-height:48px;padding:0 4px;text-decoration:underline}.champ{border:2px solid var(--encre);background:var(--papier);height:56px;color:var(--encre);font:700 18px var(--texte);border-radius:16px;width:100%;padding:0 16px}.cases{gap:10px;margin-top:8px;display:flex;position:relative}.case{border:2px solid var(--encre);background:var(--papier);height:72px;font:800 34px/68px var(--titre);text-align:center;border-radius:16px;flex:1}.case.active{border-color:var(--laterite);box-shadow:0 0 0 3px var(--lueur)}.cases input{opacity:0;width:100%;font-size:16px;position:absolute;inset:0}.code{font:800 56px/1 var(--titre);letter-spacing:.12em;margin:0 0 8px}.bandeau,.info,.erreur{border-radius:12px;margin:0;padding:10px 12px;font-size:15px}.bandeau{background:#2b181014}.info{background:var(--nuit-2);color:var(--brume)}.erreur{background:var(--danger);color:#fff;font-weight:700}.joueurs{flex-direction:column;gap:8px;margin:4px 0 0;padding:0;list-style:none;display:flex}.joueurs li{background:var(--papier);border:2px solid var(--encre);border-radius:16px;align-items:center;gap:10px;min-height:56px;padding:8px 12px;display:flex}.joueurs li.absent{opacity:.55}.marques{gap:6px;margin-left:auto;display:flex}.marques em{font:500 11px var(--chiffres);text-transform:uppercase;background:#2b18101a;border-radius:8px;padding:3px 6px}.marques em.hote{background:var(--ambre)}@media (prefers-reduced-motion:no-preference){.bouton{transition:transform 80ms}.bouton:active:not(:disabled){transform:translateY(2px)}}
