/* ---------- Décors : un par rang de l'hôte ---------- */
:root{
  --cols: 9; --rows: 6;
  --c: min(10.4vmin, 70px);          /* taille d'une case */
  --gap: calc(var(--c) * .14);
  --ease-drop: cubic-bezier(.45,0,.9,.55);
  --font-d: "Cormorant Garamond", Georgia, serif;
  --font-t: "Manrope", system-ui, sans-serif;
}
body[data-decor="ardoise"]{
  --ink:#e7e9eb; --muted:#9aa1a8; --accent:#c9ced3; --rim1:#6f767d; --rim2:#c2c8ce;
  --plate:#353a3f; --plate2:#2a2e32; --scene:#1c1f22;
  --scene-img: radial-gradient(120% 80% at 50% 0%, #3a4046 0%, transparent 60%),
               repeating-linear-gradient(115deg, rgba(255,255,255,.018) 0 2px, transparent 2px 7px);
}
body[data-decor="bronze"]{
  --ink:#f3e6d6; --muted:#b9a08a; --accent:#d9a36a; --rim1:#7a4a24; --rim2:#e0a56a;
  --plate:#4a1d19; --plate2:#341310; --scene:#1d120b;
  --scene-img: radial-gradient(90% 70% at 50% 10%, rgba(255,190,120,.16) 0%, transparent 60%),
               repeating-linear-gradient(92deg, rgba(0,0,0,.18) 0 3px, rgba(120,70,30,.10) 3px 9px, rgba(0,0,0,.12) 9px 15px),
               linear-gradient(180deg, #3a2414, #1a0f08);
}
body[data-decor="argent"]{
  --ink:#1d2024; --muted:#5e656d; --accent:#7c848d; --rim1:#8e959c; --rim2:#f4f6f8;
  --plate:#eceef1; --plate2:#d6d9de; --scene:#d9dce0;
  --scene-img: radial-gradient(100% 70% at 50% 0%, #ffffff 0%, transparent 65%),
               linear-gradient(125deg, transparent 40%, rgba(120,125,135,.10) 41%, transparent 42.5%),
               linear-gradient(35deg, transparent 62%, rgba(120,125,135,.08) 62.6%, transparent 63.8%),
               linear-gradient(180deg, #e9ebee, #c9cdd2);
}
body[data-decor="or"]{
  --ink:#f4ead2; --muted:#a8977a; --accent:#d4af37; --rim1:#8a6420; --rim2:#f3d48a;
  --plate:#0d0d0e; --plate2:#050505; --scene:#070707;
  --scene-img: radial-gradient(70% 55% at 50% 38%, rgba(212,175,55,.13) 0%, transparent 70%),
               radial-gradient(120% 60% at 50% 110%, rgba(212,175,55,.10), transparent 60%),
               linear-gradient(180deg, #0e0d0b, #050505);
}
body[data-decor="diamant"]{
  --ink:#eef2fa; --muted:#9fabc4; --accent:#dfe8f7; --rim1:#8d97a8; --rim2:#ffffff;
  --plate:#0f1a3a; --plate2:#08112a; --scene:#050a1c;
  --scene-img: radial-gradient(1.5px 1.5px at 12% 22%, #fff 50%, transparent 51%),
               radial-gradient(1px 1px at 78% 14%, #cfe0ff 50%, transparent 51%),
               radial-gradient(1.2px 1.2px at 64% 72%, #fff 50%, transparent 51%),
               radial-gradient(1px 1px at 30% 82%, #dfe9ff 50%, transparent 51%),
               radial-gradient(1.4px 1.4px at 90% 58%, #fff 50%, transparent 51%),
               radial-gradient(80% 60% at 50% 30%, rgba(120,150,255,.16), transparent 70%),
               linear-gradient(180deg, #0a1430, #04081a);
}

*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  font-family:var(--font-t); color:var(--ink); background:var(--scene);
  background-image:var(--scene-img); background-attachment:fixed;
  min-height:100dvh; display:flex; flex-direction:column; align-items:center;
  transition:background-color .8s ease, color .6s ease;
  -webkit-font-smoothing:antialiased;
}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- En-tête ---------- */
header{width:min(1100px,100%);padding:22px 16px 8px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.logo{font-family:var(--font-d);font-weight:700;font-size:clamp(28px,4.4vw,40px);letter-spacing:.32em;margin:0;
  background:linear-gradient(180deg,var(--rim2),var(--accent) 55%,var(--rim1));-webkit-background-clip:text;background-clip:text;color:transparent}
.tag{font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--muted)}
.decor-name{font-family:var(--font-d);font-size:18px;color:var(--accent);text-align:right}
.decor-name small{display:block;font-family:var(--font-t);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}

/* ---------- Table ---------- */
main{flex:1;width:min(1100px,100%);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:20px;padding:8px 16px 16px}
.seat{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center;opacity:.72;transition:opacity .4s, transform .4s}
.seat.active{opacity:1;transform:translateY(-4px)}
.seat .who{font-family:var(--font-d);font-size:24px;font-weight:600}
.seat .rk{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.seat .tk{width:calc(var(--c)*.9);height:calc(var(--c)*.9);position:relative}
.seat .turn{font-size:12px;color:var(--accent);height:16px;letter-spacing:.08em}

.board-wrap{position:relative;padding:calc(var(--c)*.28);border-radius:calc(var(--c)*.3);
  background:linear-gradient(145deg,var(--rim2),var(--rim1) 45%,var(--rim2) 70%,var(--rim1));
  box-shadow:0 30px 60px -20px rgba(0,0,0,.7),0 0 0 1px rgba(255,255,255,.06) inset}
.board{position:relative;width:calc(var(--c)*var(--cols) + var(--gap)*(var(--cols) - 1));height:calc(var(--c)*var(--rows) + var(--gap)*(var(--rows) - 1))}
/* fond des alvéoles : le creux derrière la plaque */
.board::before{content:"";position:absolute;inset:calc(var(--c)*-.18);border-radius:calc(var(--c)*.18);
  background:radial-gradient(120% 90% at 50% 20%,color-mix(in srgb,var(--plate2) 55%,#000),color-mix(in srgb,var(--plate2) 25%,#000))}
body[data-decor="argent"] .board::before{background:radial-gradient(120% 90% at 50% 20%,#aeb3ba,#878d95)}
/* jetons sous la plaque */
.tokens{position:absolute;inset:0}
/* plaque percée : masque radial répété */
.plate{position:absolute;inset:calc(var(--c)*-.18);pointer-events:none;border-radius:calc(var(--c)*.18);
  background:linear-gradient(160deg,var(--plate),var(--plate2));
  --cell:calc(var(--c) + var(--gap));
  --hole: radial-gradient(circle at center, transparent calc(var(--c)*.43), #000 calc(var(--c)*.43 + .6px));
  -webkit-mask: var(--hole) calc(var(--c)*.18 - var(--gap)/2) calc(var(--c)*.18 - var(--gap)/2) / var(--cell) var(--cell) repeat;
          mask: var(--hole) calc(var(--c)*.18 - var(--gap)/2) calc(var(--c)*.18 - var(--gap)/2) / var(--cell) var(--cell) repeat;
  box-shadow:inset 0 2px 0 rgba(255,255,255,.08)}
.plate::after{content:"";position:absolute;inset:0;border-radius:inherit;
  background:linear-gradient(115deg,rgba(255,255,255,.10),transparent 30%,transparent 70%,rgba(255,255,255,.05))}
body[data-decor="or"] .plate::after{background:linear-gradient(115deg,rgba(255,255,255,.16),transparent 26%,transparent 72%,rgba(255,255,255,.06))}
/* bagues autour des trous */
.rings{position:absolute;inset:0;pointer-events:none;display:grid;grid-template-columns:repeat(var(--cols),var(--c));grid-template-rows:repeat(var(--rows),var(--c));gap:var(--gap)}
.rings i{border-radius:50%;box-shadow:0 0 0 calc(var(--c)*.035) color-mix(in srgb,var(--rim2) 70%,transparent), inset 0 3px 6px rgba(0,0,0,.55)}
/* colonnes cliquables */
.cols{position:absolute;inset:calc(var(--c)*-.28) 0;display:grid;grid-template-columns:repeat(var(--cols),var(--c));gap:var(--gap)}
.cols button{all:unset;cursor:pointer;border-radius:calc(var(--c)*.2)}
.cols button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.cols button:hover{background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 10%,transparent),transparent)}
.ghost{position:absolute;top:calc(var(--c)*-1.15);width:var(--c);height:var(--c);opacity:0;transition:left .14s ease, opacity .2s;pointer-events:none}
.board-wrap:hover .ghost.on{opacity:.55}

/* ---------- Jetons ---------- */
.token{position:absolute;width:var(--c);height:var(--c);border-radius:50%;will-change:transform}
.token::before,.token::after{content:"";position:absolute;border-radius:50%}
.token::after{inset:0;box-shadow:inset 0 -3px 6px rgba(0,0,0,.35), inset 0 2px 3px rgba(255,255,255,.35)}
.token.drop{animation:drop var(--t,.5s) var(--ease-drop) both}
@keyframes drop{from{transform:translateY(var(--from))}to{transform:translateY(0)}}
.token.land{animation:land .22s ease-out}
@keyframes land{0%{transform:translateY(0)}40%{transform:translateY(calc(var(--c)*-.08))}100%{transform:translateY(0)}}

/* métaux gagnés */
.m-ardoise{background:radial-gradient(circle at 35% 30%,#aab1b8,#5d646b 60%,#3d4247)}
.m-bronze{background:
  repeating-radial-gradient(circle,rgba(255,255,255,.07) 0 1px,transparent 1px 3px),
  radial-gradient(circle at 34% 28%,#ffd6a8 0,#c98a4e 28%,#8a5126 62%,#5a3016)}
.m-argent{background:
  repeating-radial-gradient(circle,rgba(255,255,255,.12) 0 1px,transparent 1px 3px),
  radial-gradient(circle at 34% 28%,#ffffff 0,#d9dde2 25%,#9aa1aa 62%,#6c727b)}
.m-or{background:
  repeating-radial-gradient(circle,rgba(255,255,255,.09) 0 1px,transparent 1px 3px),
  radial-gradient(circle at 34% 28%,#fff6d0 0,#f1cf78 22%,#c79a35 58%,#7d5a18)}
.m-diamant{background:
  conic-gradient(from 20deg,#ffffff,#cfd9ea,#f7fbff,#9fb0cc,#ffffff,#dbe6f7,#aab8d2,#ffffff,#c6d3ea,#ffffff);
  box-shadow:0 0 calc(var(--c)*.18) rgba(200,220,255,.45)}
.m-diamant::before{inset:22%;background:conic-gradient(from 0deg,#fff,#e2ebfa,#fff,#c4d1e8,#fff,#e9f0fb,#fff);opacity:.9;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}
/* adversaire : onyx ou ivoire selon le fond */
.m-onyx{background:radial-gradient(circle at 34% 28%,#4a4a4f 0,#1b1b1e 38%,#050506 75%);
  box-shadow:0 0 0 1px color-mix(in srgb,var(--rim2) 45%,transparent) inset}
.m-ivoire{background:
  radial-gradient(60% 18% at 62% 70%,rgba(180,150,105,.16),transparent 70%),
  radial-gradient(circle at 34% 28%,#ffffff 0,#f1ece2 40%,#cfc6b4 85%)}

.token.win{animation:win 1.2s ease-in-out infinite}
@keyframes win{0%,100%{filter:brightness(1)}50%{filter:brightness(1.35) drop-shadow(0 0 calc(var(--c)*.2) var(--accent))}}

/* ---------- Contrôles ---------- */
.bar{width:min(1100px,100%);display:flex;flex-wrap:wrap;gap:10px;justify-content:center;padding:6px 16px 26px}
.seg{display:flex;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);border-radius:999px;overflow:hidden}
.seg button,.btn{all:unset;cursor:pointer;font-size:13px;letter-spacing:.06em;padding:9px 16px;color:var(--ink)}
.seg button[aria-pressed="true"]{background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--ink)}
.seg button:focus-visible,.btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.btn{border:1px solid var(--accent);border-radius:999px;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 28%,transparent),transparent)}
.label{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);align-self:center;margin-right:2px}

/* progression */
.prog{width:min(420px,90%);margin:2px auto 0;text-align:center;font-size:12px;color:var(--muted)}
.prog .track{height:3px;border-radius:3px;background:color-mix(in srgb,var(--muted) 30%,transparent);margin-top:6px;overflow:hidden}
.prog .fill{height:100%;background:linear-gradient(90deg,var(--rim1),var(--rim2));transition:width .8s ease}

/* ---------- Résultat ---------- */
.veil{position:fixed;inset:0;display:grid;place-items:center;background:color-mix(in srgb,var(--scene) 55%,transparent);
  backdrop-filter:blur(6px);opacity:0;pointer-events:none;transition:opacity .5s}
.veil.on{opacity:1;pointer-events:auto}
.card{text-align:center;padding:34px 40px;border-radius:18px;max-width:90vw;
  background:linear-gradient(160deg,var(--plate),var(--plate2));border:1px solid color-mix(in srgb,var(--accent) 50%,transparent);
  box-shadow:0 40px 80px -30px rgba(0,0,0,.8)}
.card h2{font-family:var(--font-d);font-weight:600;font-size:clamp(34px,6vw,54px);margin:0 0 6px;letter-spacing:.06em;color:var(--accent)}
.card p{margin:0 0 20px;color:var(--muted)}

@media (max-width:760px){
  main{grid-template-columns:1fr 1fr;grid-template-areas:"a b" "board board"}
  #seat1{grid-area:a} #seat2{grid-area:b} .board-zone{grid-area:board;justify-self:center}
  :root{--c:min(calc((100vw - 34px) / 10.7),58px)}
  .seat .who{font-size:20px}
  header{padding-top:14px}
  .tag{font-size:10px;letter-spacing:.14em;white-space:nowrap}
  .decor-name small{font-size:9px;letter-spacing:.1em;white-space:nowrap}
  .decor-name{font-size:16px}
  .seg button{padding:8px 11px;font-size:12px}
  .seg{flex-wrap:wrap;justify-content:center}
}
@media (prefers-reduced-motion:reduce){
  .token.drop,.token.land,.token.win{animation:none}
  *{transition:none!important}
}
.bar.tight{padding-top:0}

/* invitation par lien */
[hidden]{display:none!important}
.invite{width:min(520px,92vw);margin:14px auto 0;text-align:center}
.invite-t{margin:0 0 8px;font-family:var(--font-d);font-size:20px;color:var(--accent)}
.invite-row{display:flex;gap:8px;align-items:center}
.invite-row input{flex:1;min-width:0;font:13px var(--font-t);color:var(--ink);padding:9px 12px;border-radius:999px;
  border:1px solid color-mix(in srgb,var(--accent) 40%,transparent);background:color-mix(in srgb,var(--plate2) 70%,transparent)}
.invite-s{margin:8px 0 0;font-size:13px;color:var(--muted);min-height:18px}
