/* ============================================================================
   GeoConf — feuille de style
   ========================================================================== */
:root{
  --bg:#070A12; --bg2:#0C1120; --surface:#121A2D; --surface2:#18223A;
  --line:rgba(255,255,255,.075); --line2:rgba(255,255,255,.14);
  --txt:#E9EEFB; --muted:#8C99BC; --dim:#5E6B8C;
  --accent:#2BE08C; --accent-d:#0FA765; --accent2:#7C6CFF; --hot:#FF5470;
  --gold:#F2C14E; --gold-hi:#FFE3A3; --gold-lo:#D3B071;
  --land:#1C2846; --land-str:#36486F; --sea:#070D1A;
  --ok:#2BE08C; --good:#8CE05A; --meh:#FFC24B; --bad:#FF8A4B; --awful:#FF5470;
  --r:16px; --r-sm:11px;
  --fd:"Space Grotesk",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  --fb:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --shadow:0 18px 46px -18px rgba(0,0,0,.85);
}
*,*::before,*::after{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{
  background:
    radial-gradient(1100px 620px at 78% -18%,rgba(124,108,255,.20),transparent 62%),
    radial-gradient(900px 540px at 8% 0%,rgba(43,224,140,.14),transparent 58%),
    var(--bg);
  color:var(--txt); font-family:var(--fb); font-size:15px; line-height:1.5;
  -webkit-font-smoothing:antialiased; min-height:100%;
}
img{max-width:100%;display:block}
button{font:inherit;color:inherit}

.app{max-width:900px;margin:0 auto;padding:18px 16px 22px}
.screen{display:none;animation:rise .34s cubic-bezier(.2,.7,.3,1) both}
.screen.is-active{display:block}
@keyframes rise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* ─────────────── accueil ─────────────── */
.hero{position:relative;padding:26px 24px 24px;border:1px solid var(--line);border-radius:22px;
  background:linear-gradient(165deg,rgba(255,255,255,.055),rgba(255,255,255,.012));
  overflow:hidden;box-shadow:var(--shadow)}
.hero-glow{position:absolute;inset:auto -20% -70% 30%;height:260px;
  background:radial-gradient(closest-side,rgba(43,224,140,.35),transparent 72%);filter:blur(28px);pointer-events:none}
.kicker{display:flex;align-items:center;gap:8px;margin:0 0 16px;font-size:11.5px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted);font-weight:600}
.dot{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 4px rgba(43,224,140,.16);
  animation:pulse 2.4s ease-in-out infinite}
@keyframes pulse{50%{box-shadow:0 0 0 8px rgba(43,224,140,0)}}
.title{font-family:var(--fd);font-size:clamp(34px,7.2vw,58px);line-height:.98;margin:0 0 12px;
  font-weight:700;letter-spacing:-.03em}
.title em{font-style:normal;color:var(--accent)}
.tagline{margin:0 0 14px;font-family:var(--fd);font-size:clamp(15px,2.6vw,18px);font-weight:500;color:#B9C6E6}
.tagline-sub{margin:-8px 0 14px;font-size:14.5px;color:var(--muted)}
.lede{margin:0;max-width:56ch;color:var(--muted);font-size:14.5px}
.lede strong{color:var(--txt);font-weight:600}

.facts{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:22px 0 0;padding:0}
.facts li{position:relative;padding:12px 12px 11px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:rgba(255,255,255,.03)}
.facts i{font-style:normal;font-size:15px;opacity:.85}
.facts b{display:block;font-family:var(--fd);font-size:17px;margin-top:3px;letter-spacing:-.01em}
.facts span{display:block;font-size:11.5px;color:var(--dim);margin-top:1px;line-height:1.35}
@media (max-width:560px){.facts{grid-template-columns:1fr;gap:7px}
  .facts li{display:flex;align-items:baseline;gap:9px;padding:10px 12px}
  .facts b{margin:0;flex:0 0 auto;white-space:nowrap;font-size:15px}
  .facts span{margin:0 0 0 auto;text-align:right;font-size:11px;min-width:0}}

.setup{margin-top:20px;display:grid;gap:18px}
.field-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px;margin-bottom:10px}
.field-note{flex:1 1 220px;margin:0;font-size:12.5px;color:var(--dim)}
.field-head h2{font-family:var(--fd);font-size:13px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);margin:0;font-weight:600}
.pool-info{font-size:12.5px;color:var(--dim);font-variant-numeric:tabular-nums}
.link-btn{background:none;border:0;padding:0;font-size:12.5px;color:var(--accent);cursor:pointer;
  font-weight:600;text-decoration:underline;text-underline-offset:3px;text-decoration-color:rgba(43,224,140,.4)}
.link-btn:hover{text-decoration-color:var(--accent)}

.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{flex:1 1 108px;min-width:96px;display:flex;flex-direction:column;gap:1px;align-items:flex-start;
  padding:10px 13px;border:1px solid var(--line2);border-radius:var(--r-sm);background:rgba(255,255,255,.035);
  cursor:pointer;transition:transform .16s,border-color .16s,background .16s,box-shadow .16s;text-align:left}
.chip:hover:not(:disabled){transform:translateY(-2px);border-color:rgba(255,255,255,.3);background:rgba(255,255,255,.06)}
.chip:disabled{opacity:.32;cursor:not-allowed}
.chip.is-dim{opacity:.34}
.chip-main{font-family:var(--fd);font-size:15px;font-weight:600;letter-spacing:-.01em}
.chip-sub{font-size:11px;color:var(--dim)}
.chip.is-on{background:rgba(242,193,78,.15);border-color:rgba(242,193,78,.72);
  box-shadow:0 0 0 1px rgba(242,193,78,.22),0 10px 26px -16px rgba(242,193,78,.75)}
.chip.is-on .chip-main{color:var(--gold-hi)}
.chip.is-on .chip-sub{color:var(--gold-lo)}
/* Le mix n'est pas un continent : on le distingue des autres cases. */
.chip-mix{flex:1 1 100%;border-style:dashed}
.chip-mix.is-on{border-style:solid}
@media (min-width:620px){.chip-mix{flex:1 1 150px}}

.chip-num{flex:1 1 0;min-width:78px;align-items:center;text-align:center}
/* Cinq options ne tombent pas juste sur une ligne étroite : grille de trois,
   la dernière occupant les deux colonnes restantes. */
@media (max-width:620px){
  #count-chips{display:grid;grid-template-columns:repeat(3,1fr)}
  #count-chips .chip{min-width:0}
  #count-chips .chip:last-child{grid-column:span 2}
}

.cta{width:100%;display:flex;flex-direction:column;align-items:center;gap:2px;padding:15px 20px;border:0;
  border-radius:14px;cursor:pointer;color:#04140C;font-family:var(--fd);font-weight:700;
  background:var(--accent);
  box-shadow:0 12px 30px -16px rgba(43,224,140,.8);transition:transform .16s,background .16s,box-shadow .16s}
.cta:hover:not(:disabled){transform:translateY(-2px);background:#43EDA0;box-shadow:0 16px 36px -16px rgba(43,224,140,.95)}
.cta:active:not(:disabled){transform:translateY(0)}
.cta:disabled{opacity:.4;cursor:not-allowed;box-shadow:none}
.cta-label{font-size:17px;letter-spacing:-.01em}
.cta-sub{font-size:11.5px;font-weight:500;opacity:.72}
.cta-sm{width:auto;flex-direction:row;padding:12px 26px;font-size:15px;flex:0 0 auto}
/* Le bouton de lancement n'a plus besoin de toute la largeur : il se pose au
   centre de la grille des réglages. */
#btn-play{width:min(290px,100%);justify-self:center;padding:12px 30px;border-radius:12px}
#btn-play .cta-label{font-size:15.5px}
#btn-play .cta-sub{font-size:11px}
.warn{margin:0;font-size:13px;color:var(--meh)}

/* ─────────────── HUD de jeu ─────────────── */
.hud{position:relative;display:flex;align-items:center;gap:14px;padding:13px 15px 15px;
  border:1px solid var(--line);border-radius:var(--r);background:linear-gradient(160deg,rgba(255,255,255,.06),rgba(255,255,255,.015));
  box-shadow:var(--shadow);overflow:hidden}
.hud-club{display:flex;align-items:center;gap:12px;min-width:0;flex:1}
.crest{position:relative;flex:0 0 auto;width:52px;height:52px;border-radius:13px;overflow:hidden;
  background:var(--surface2);border:1px solid var(--line2);display:grid;place-items:center}
.crest.has-logo{background:linear-gradient(158deg,#FBFCFE,#E7ECF5);border-color:rgba(255,255,255,.26)}
/* Sans cela le monogramme dégradé reste sous le logo et mange la plaque claire. */
.crest.has-logo .crest-fb{display:none}
.crest img{width:100%;height:100%;object-fit:contain;padding:6px;position:relative;z-index:2}
.crest-fb{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--fd);font-weight:700;
  font-size:19px;letter-spacing:-.02em;color:#fff;z-index:1;
  background:linear-gradient(145deg,hsl(var(--h) 62% 42%),hsl(calc(var(--h) + 42) 58% 26%))}
.hud-id{min-width:0}
.club-name{font-family:var(--fd);font-size:clamp(18px,3.4vw,25px);font-weight:700;margin:0;
  letter-spacing:-.025em;line-height:1.1;overflow-wrap:anywhere}
.club-meta{display:flex;align-items:center;gap:7px;margin:4px 0 0;font-size:12.5px;color:var(--muted);flex-wrap:wrap}
.club-meta .flag{font-size:14px;line-height:1}
.club-meta .ctry.is-revealed{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;
  border-radius:7px;background:rgba(124,108,255,.18);border:1px solid rgba(124,108,255,.42);
  color:#CFC8FF;font-weight:600;animation:pop .3s cubic-bezier(.2,.8,.3,1.25) both}
@keyframes pop{from{opacity:0;transform:scale(.85)}to{opacity:1;transform:none}}
.club-meta .seas{display:inline-flex;gap:4px}
.club-meta .seas b{font-family:var(--fd);font-size:10px;font-weight:600;padding:2px 6px;border-radius:5px;
  background:rgba(255,255,255,.07);color:var(--muted);letter-spacing:.02em}
.hud-score{display:flex;gap:16px;flex:0 0 auto}
.stat{text-align:right}
.stat-k{display:block;font-size:10px;letter-spacing:.11em;text-transform:uppercase;color:var(--dim)}
.stat b{font-family:var(--fd);font-size:19px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.stat b i{font-style:normal;font-size:12px;color:var(--dim);font-weight:500}
.progress{position:absolute;left:0;right:0;bottom:0;height:3px;background:rgba(255,255,255,.07)}
.progress span{display:block;height:100%;width:0;border-radius:0 3px 3px 0;
  background:linear-gradient(90deg,var(--accent),#8FE0FF);transition:width .45s cubic-bezier(.2,.7,.3,1)}
@media (max-width:520px){
  .hud{flex-wrap:wrap}
  .hud-score{width:100%;justify-content:space-between;gap:10px;order:3}
  .stat{text-align:left}
}

/* ─────────────── carte ─────────────── */
/* Le rapport largeur/hauteur est fixé sur la largeur, jamais sur vh : dans une
   iframe qui s'auto-dimensionne, vh dépendrait de la hauteur qu'on est en train
   de calculer, et la carte rétrécirait à chaque aller-retour. */
.map-wrap{position:relative;margin-top:12px;border:1px solid var(--line);border-radius:var(--r);
  overflow:hidden;background:linear-gradient(180deg,#070D1A,#050912);box-shadow:var(--shadow);
  aspect-ratio:1.45;max-height:560px}
/* Le fond est un <canvas> ; seuls les marqueurs restent en SVG par-dessus. */
.map{position:absolute;inset:0;cursor:crosshair;touch-action:none}
.map.is-grabbing{cursor:grabbing}
.m-canvas{position:absolute;inset:0;display:block}
.m-overlay{position:absolute;inset:0;overflow:visible;pointer-events:none}
.m-link{fill:none;stroke:#fff;stroke-opacity:.55;stroke-width:2;stroke-dasharray:5 5;
  animation:dash 14s linear infinite}
@keyframes dash{to{stroke-dashoffset:-200}}
.m-mk{pointer-events:none}
.m-mk-guess .m-shadow{fill:rgba(0,0,0,.5)}
.m-mk-guess .m-core{fill:var(--hot);stroke:#fff;stroke-width:2}
.m-mk-guess .m-dot{fill:#fff}
.m-mk-truth .m-halo{fill:var(--accent);fill-opacity:.16;animation:halo 2.2s ease-out infinite}
@keyframes halo{0%{r:9;fill-opacity:.4}100%{r:26;fill-opacity:0}}
.m-mk-truth .m-ring{fill:none;stroke:var(--accent);stroke-width:2.5}
.m-mk-truth .m-core{fill:var(--accent)}
.m-label{fill:#fff;font:600 11px/1 var(--fd);text-anchor:middle;paint-order:stroke;
  stroke:rgba(4,8,16,.9);stroke-width:3.5;stroke-linejoin:round}
.map-tools{position:absolute;top:10px;right:10px;display:flex;flex-direction:column;gap:5px}
.map-tools button{width:34px;height:34px;border-radius:9px;border:1px solid var(--line2);
  background:rgba(10,16,30,.82);backdrop-filter:blur(8px);font-size:16px;line-height:1;cursor:pointer;
  color:var(--txt);transition:background .15s,transform .15s}
.map-tools button:hover{background:rgba(30,42,70,.95);transform:scale(1.06)}
.map-hint{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);margin:0;text-align:center;
  max-width:calc(100% - 28px);padding:7px 15px;border-radius:16px;font-size:12.5px;color:#CBD6F2;
  background:rgba(8,13,26,.84);backdrop-filter:blur(8px);border:1px solid var(--line);
  pointer-events:none;animation:rise .4s both;line-height:1.4}
@media (max-width:640px){.map-hint{font-size:11.5px;padding:6px 12px}}
@media (max-width:560px){.map-wrap{aspect-ratio:1;max-height:none}}

/* ─────────────── barre d'action ─────────────── */
.actionbar{display:flex;align-items:center;gap:14px;margin-top:12px;padding:13px 15px;
  border:1px solid var(--line);border-radius:var(--r);background:rgba(255,255,255,.032);
  transition:border-color .3s,background .3s}
.actionbar .cta-sm{margin-left:auto}
.actionbar.is-revealed{animation:rise .3s both}
.actionbar.b-ace,.actionbar.b-great{border-color:rgba(43,224,140,.5);background:rgba(43,224,140,.07)}
.actionbar.b-good{border-color:rgba(255,194,75,.45);background:rgba(255,194,75,.06)}
.actionbar.b-meh{border-color:rgba(255,138,75,.45);background:rgba(255,138,75,.06)}
.actionbar.b-bad,.actionbar.b-awful{border-color:rgba(255,84,112,.45);background:rgba(255,84,112,.06)}
/* Indice : trois par partie, chacun dévoile le pays du club. */
.hint-btn{flex:0 0 auto;display:inline-flex;align-items:center;gap:8px;padding:9px 13px 9px 10px;
  border-radius:11px;border:1px solid rgba(124,108,255,.45);background:rgba(124,108,255,.13);
  cursor:pointer;font-size:13.5px;font-weight:600;color:#C9C1FF;
  transition:transform .15s,background .15s,border-color .15s,opacity .2s}
.hint-btn:hover:not(:disabled){transform:translateY(-2px);background:rgba(124,108,255,.24);
  border-color:rgba(124,108,255,.75)}
.hint-btn:disabled{opacity:.42;cursor:not-allowed}
.hint-ico{width:19px;height:19px;flex:0 0 auto;border-radius:50%;display:grid;place-items:center;
  background:rgba(124,108,255,.38);font-family:var(--fd);font-size:12px;font-weight:700;color:#EDEAFF}
.hint-btn b{font-family:var(--fd);font-size:12px;font-variant-numeric:tabular-nums;
  padding:1px 7px;border-radius:99px;background:rgba(0,0,0,.32)}
.hint-btn.is-spent b{display:none}

.verdict{min-width:0;flex:1}
.verdict-main{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.verdict-main b{font-family:var(--fd);font-size:26px;font-weight:700;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums}
.badge{font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:4px 9px;
  border-radius:99px;background:rgba(255,255,255,.1)}
.badge.b-ace{background:rgba(43,224,140,.22);color:#7DF3BD}
.badge.b-great{background:rgba(140,224,90,.2);color:#BCF08E}
.badge.b-good{background:rgba(255,194,75,.2);color:#FFD98A}
.badge.b-meh{background:rgba(255,138,75,.2);color:#FFBB8F}
.badge.b-bad,.badge.b-awful{background:rgba(255,84,112,.2);color:#FF9AAE}
.verdict-sub{margin:5px 0 0;font-size:13px;color:var(--muted)}
.verdict-sub strong{color:var(--txt);font-weight:600}
.verdict-sub em{font-style:normal;color:var(--dim)}
@media (max-width:520px){
  .actionbar{flex-wrap:wrap;gap:10px}
  .actionbar .cta-sm{width:100%;margin-left:0;justify-content:center;order:3}
  .hint-btn{order:1}
  .verdict{order:2;flex:1 1 100%}
}

/* ─────────────── écran final ─────────────── */
.final{padding:26px 24px;border:1px solid var(--line);border-radius:22px;text-align:center;
  background:linear-gradient(165deg,rgba(255,255,255,.06),rgba(255,255,255,.014));box-shadow:var(--shadow)}
.final .kicker{justify-content:center}
.final-score{display:flex;align-items:baseline;justify-content:center;gap:9px}
.final-score b{font-family:var(--fd);font-size:clamp(48px,12vw,82px);font-weight:700;line-height:1;
  letter-spacing:-.045em;font-variant-numeric:tabular-nums;
  background:linear-gradient(96deg,var(--accent),#8FE0FF);-webkit-background-clip:text;background-clip:text;color:transparent}
.final-score span{font-family:var(--fd);font-size:14px;color:var(--muted)}
.final-rank{margin:14px 0 0}
.final-rank b{display:block;font-family:var(--fd);font-size:19px;letter-spacing:-.02em}
.final-rank span{display:block;font-size:13px;color:var(--muted);margin-top:3px}
.final-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-top:20px}
.final-grid div{padding:11px 8px;border-radius:var(--r-sm);background:rgba(255,255,255,.04);border:1px solid var(--line)}
.final-grid span{display:block;font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--dim)}
.final-grid b{display:block;font-family:var(--fd);font-size:16px;margin-top:3px;font-variant-numeric:tabular-nums}
.final-grid small{display:block;font-family:var(--fb);font-size:11px;font-weight:400;color:var(--dim);
  margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.squares{margin-top:18px;font-size:22px;line-height:1.5;letter-spacing:2px;word-break:break-all}

.recap{margin-top:14px;border:1px solid var(--line);border-radius:var(--r);background:rgba(255,255,255,.028);
  overflow:hidden}
.recap summary{padding:13px 16px;cursor:pointer;font-family:var(--fd);font-size:13.5px;font-weight:600;
  list-style:none;display:flex;align-items:center;gap:8px;color:var(--muted)}
.recap summary::-webkit-details-marker{display:none}
.recap summary::before{content:"▸";transition:transform .2s;color:var(--accent)}
.recap[open] summary::before{transform:rotate(90deg)}
.recap-list{list-style:none;margin:0;padding:0 8px 8px;counter-reset:r}
.recap-list li{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:9px;font-size:13.5px}
.recap-list li:nth-child(odd){background:rgba(255,255,255,.028)}
.rc-sq{flex:0 0 auto;font-size:14px}
.rc-name{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rc-city{color:var(--dim);font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rc-km{margin-left:auto;font-family:var(--fd);font-variant-numeric:tabular-nums;font-weight:600;flex:0 0 auto}
.recap-list li.b-ace .rc-km,.recap-list li.b-great .rc-km{color:var(--ok)}
.recap-list li.b-good .rc-km{color:var(--meh)}
.recap-list li.b-meh .rc-km{color:var(--bad)}
.recap-list li.b-bad .rc-km,.recap-list li.b-awful .rc-km{color:var(--awful)}

.share{margin-top:14px;padding:18px 16px;border:1px solid var(--line);border-radius:var(--r);
  background:rgba(255,255,255,.028)}
.share h2{font-family:var(--fd);font-size:13px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);
  margin:0 0 12px;font-weight:600}
.share-btns{display:flex;flex-wrap:wrap;gap:8px}
.sh{display:inline-flex;align-items:center;gap:7px;padding:10px 15px;border-radius:10px;cursor:pointer;
  border:1px solid var(--line2);background:rgba(255,255,255,.05);font-size:13.5px;font-weight:600;
  text-decoration:none;color:var(--txt);transition:transform .15s,background .15s,border-color .15s}
.sh:hover{transform:translateY(-2px);background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.28)}
.sh-copy{background:linear-gradient(100deg,rgba(43,224,140,.22),rgba(124,108,255,.18));border-color:rgba(43,224,140,.5)}
.sh-x::before{content:"𝕏"}.sh-wa::before{content:"💬"}.sh-bs::before{content:"🦋"}.sh-fb::before{content:"f";font-weight:800}
.sh-copy::before{content:"⧉"}.sh-native::before{content:"↗"}
.share-preview{margin:14px 0 0;padding:13px 14px;border-radius:11px;background:rgba(0,0,0,.35);
  border:1px solid var(--line);font:12.5px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted);
  white-space:pre-wrap;word-break:break-word;overflow-x:auto}

.again{margin-top:16px;display:flex;flex-direction:column;align-items:center;gap:11px}
.again .cta{max-width:340px}

.foot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  margin-top:22px;padding-top:14px;border-top:1px solid var(--line);font-size:11.5px;color:var(--dim)}
.foot a{color:var(--muted);text-decoration:none;border-bottom:1px solid var(--line2)}
.foot a:hover{color:var(--accent)}

/* état de chargement */
body:not(.is-ready) .setup,body:not(.is-ready) .facts{opacity:.35;pointer-events:none;transition:opacity .3s}

:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
