/* ============================================================
   BOCCE RAZIONALI — design system "cartoon piazza estiva"
   ============================================================ */
:root{
  --cielo:#8ED8F0; --cielo-basso:#BFEAF7;
  --sole:#FFD24C; --terracotta:#E8794A; --ocra:#F2B24C; --rosa:#F2A38F;
  --crema:#FFF6E6; --sabbia:#F7E8CD;
  --sanpietrini:#EBD3A2; --sanpietrini-scuro:#D9B87E;
  --verde:#4C9F70; --ink:#4A322B; --ink-soft:rgba(74,50,43,.18);

  --p-rosso:#FF5A5F; --p-blu:#3E8EF7; --p-giallo:#FFC531; --p-verde:#4CBB6C;
  --p-viola:#A15FD9; --p-arancio:#FF8A3D; --p-rosa:#F06292; --p-azzurro:#4DD0E1;

  --f-display:'Baloo 2','Arial Rounded MT Bold',ui-rounded,sans-serif;
  --f-body:'Nunito','Trebuchet MS',sans-serif;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{font-family:var(--f-body);color:var(--ink);background:var(--sabbia)}

/* ---------- componenti base ---------- */
.card{background:var(--crema);border:4px solid var(--ink);border-radius:20px;box-shadow:0 6px 0 var(--ink-soft)}
.btn{
  display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:15px;
  font-family:var(--f-display);font-weight:800;font-size:23px;color:#fff;background:var(--verde);
  border:4px solid var(--ink);border-radius:20px;box-shadow:0 7px 0 var(--ink-soft);
  cursor:pointer;user-select:none;text-decoration:none;
}
.btn:active{transform:translateY(4px);box-shadow:0 3px 0 var(--ink-soft)}
.btn.rosso{background:var(--p-rosso)}
.btn.ghost{background:var(--crema);color:var(--terracotta)}
.btn.mini{width:auto;padding:8px 16px;font-size:17px;border-radius:14px;box-shadow:0 4px 0 var(--ink-soft)}
.btn[disabled]{opacity:.45;pointer-events:none}
.chip{display:inline-block;font-weight:900;font-size:14px;background:var(--sole);border:3px solid var(--ink);border-radius:10px;padding:3px 12px}
.dot{width:20px;height:20px;border-radius:50%;border:4px solid var(--ink);flex:none;display:inline-block;vertical-align:-4px}
.bot-badge{font-size:12px;background:var(--ink);color:#fff;border-radius:8px;padding:1px 7px;font-weight:900}

.c-rosso{background:var(--p-rosso)} .c-blu{background:var(--p-blu)}
.c-giallo{background:var(--p-giallo)} .c-verde{background:var(--p-verde)}
.c-viola{background:var(--p-viola)} .c-arancio{background:var(--p-arancio)}
.c-rosa{background:var(--p-rosa)} .c-azzurro{background:var(--p-azzurro)}

.field label{display:block;font-weight:900;font-size:14px;letter-spacing:1.5px;color:var(--terracotta);margin-bottom:6px}
.field input{
  width:100%;padding:12px 16px;font-family:var(--f-display);font-weight:800;font-size:24px;color:var(--ink);
  background:#fff;border:4px solid var(--ink);border-radius:16px;outline:none;
}
.field input.pin{text-align:center;letter-spacing:10px;font-size:30px}
.field input:focus{box-shadow:0 0 0 4px rgba(255,210,76,.65)}

/* ---------- pagine mobile ---------- */
.mobile-wrap{min-height:100%;max-width:460px;margin:0 auto;padding:18px 18px 96px;display:flex;flex-direction:column;gap:14px;position:relative}
.mobile-strip{
  position:fixed;left:0;right:0;bottom:0;height:64px;z-index:5;
  background:
    radial-gradient(ellipse 34px 20px at 25% 30%, var(--sanpietrini-scuro) 42%, transparent 43%),
    radial-gradient(ellipse 34px 20px at 75% 75%, var(--sanpietrini-scuro) 42%, transparent 43%),
    var(--sanpietrini);
  background-size:136px 74px;border-top:5px solid var(--ink);
}
.title-row{display:flex;align-items:center;justify-content:space-between;gap:10px}
.ident{display:flex;align-items:center;gap:10px;padding:8px 16px}
.ident .nm{font-family:var(--f-display);font-weight:800;font-size:21px}

.logo-card{display:flex;align-items:center;gap:12px;padding:12px 20px;align-self:center}
.ballmark{width:34px;height:34px;border-radius:50%;background:var(--p-rosso);border:4px solid var(--ink);position:relative;flex:none}
.ballmark::after{content:'';position:absolute;top:4px;left:6px;width:9px;height:9px;border-radius:50%;background:rgba(255,255,255,.85)}
.logo-card h1{font-family:var(--f-display);font-weight:800;font-size:26px;line-height:1}
.logo-card h1 span{color:var(--terracotta)}

/* home */
body.page-home{background:linear-gradient(180deg,var(--cielo) 0%,var(--cielo-basso) 100%)}
.home-claim{text-align:center;font-weight:900;font-size:16px;opacity:.75}
.home-or{display:flex;align-items:center;gap:12px;font-weight:900;font-size:14px;opacity:.6}
.home-or::before,.home-or::after{content:'';flex:1;height:3px;background:var(--ink);opacity:.25;border-radius:3px}
.form-card{padding:18px;display:flex;flex-direction:column;gap:14px}

/* giocatore */
.pos-card{padding:14px 18px;text-align:center}
.pos-card .lbl{font-weight:900;font-size:14px;letter-spacing:1.5px;color:var(--terracotta)}
.pos-card .val{font-family:var(--f-display);font-weight:800;font-size:60px;line-height:1.05}
.mini-lane{position:relative;height:30px;margin:10px 6px 2px;background:var(--sanpietrini);border:4px solid var(--ink);border-radius:12px}
.mini-lane .t{position:absolute;top:0;bottom:0;border-left:3px dashed rgba(74,50,43,.3)}
.mini-lane .me{position:absolute;top:50%;width:26px;height:26px;margin:-13px 0 0 -13px;border-radius:50%;border:4px solid var(--ink);transition:left .8s ease}
.mini-lane .cap{position:absolute;top:0;font-family:var(--f-display);font-weight:800;font-size:13px;opacity:.55}
.throw-card{padding:16px 18px;display:flex;flex-direction:column;gap:12px}
.throw-card .lbl{font-weight:900;font-size:14px;letter-spacing:1.5px;color:var(--terracotta);text-align:center}
.throw-val{font-family:var(--f-display);font-weight:800;font-size:80px;line-height:.95;text-align:center}
.stepper{display:flex;align-items:center;gap:14px}
.step-btn{
  width:54px;height:54px;flex:none;border-radius:50%;background:var(--sole);border:4px solid var(--ink);
  box-shadow:0 5px 0 var(--ink-soft);font-family:var(--f-display);font-weight:800;font-size:28px;
  display:flex;align-items:center;justify-content:center;cursor:pointer;user-select:none;
}
.step-btn:active{transform:translateY(3px);box-shadow:0 2px 0 var(--ink-soft)}
input[type=range]{-webkit-appearance:none;appearance:none;flex:1;height:18px;border-radius:12px;background:#fff;border:4px solid var(--ink);outline:none}
input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;width:38px;height:38px;border-radius:50%;
  background:var(--p-rosso);border:4px solid var(--ink);cursor:pointer;box-shadow:0 4px 0 var(--ink-soft);
}
input[type=range]::-moz-range-thumb{width:34px;height:34px;border-radius:50%;background:var(--p-rosso);border:4px solid var(--ink);cursor:pointer}
.preview{text-align:center;font-weight:900;font-size:17px;background:#fff;border:3px dashed var(--ink);border-radius:14px;padding:8px}
.preview b{font-family:var(--f-display);font-size:21px;color:var(--terracotta)}
.hint{text-align:center;font-weight:800;font-size:14px;opacity:.6}
.waiting-card{padding:26px 18px;text-align:center;display:flex;flex-direction:column;gap:10px}
.waiting-card .big{font-family:var(--f-display);font-weight:800;font-size:30px}
.pulse{animation:blink 1.2s ease-in-out infinite}
@keyframes blink{50%{opacity:.35}}

/* organizzatore */
.org-chip{font-weight:900;font-size:13px;letter-spacing:1.5px;background:var(--ink);color:var(--crema);border-radius:12px;padding:6px 14px}
.pin-row{display:flex;gap:12px}
.pin-box{flex:1;padding:10px 16px;text-align:center}
.pin-box .lbl{font-weight:900;font-size:13px;letter-spacing:2px;color:var(--terracotta)}
.pin-box .num{font-family:var(--f-display);font-weight:800;font-size:42px;line-height:1;letter-spacing:6px}
.qr-box{width:96px;padding:8px;display:flex;align-items:center;justify-content:center}
.qr-box img,.qr-box canvas{width:100%!important;height:auto!important;image-rendering:pixelated}
.players-card{padding:14px 18px;display:flex;flex-direction:column;gap:9px}
.players-card h2{font-family:var(--f-display);font-weight:800;font-size:20px;display:flex;justify-content:space-between;align-items:center}
.orow{display:flex;align-items:center;gap:10px;font-size:17px;font-weight:800}
.orow .st{font-size:14px;font-weight:900;margin-left:auto}
.st.ok{color:var(--verde)} .st.wait{color:var(--terracotta)}
.kick{
  margin-left:auto;width:30px;height:30px;border-radius:10px;flex:none;background:#fff;border:3px solid var(--ink);
  color:var(--p-rosso);font-weight:900;font-size:15px;display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.settings-row{display:flex;gap:10px}
.setting{flex:1;text-align:center;padding:10px;font-weight:900;font-size:14px}
.setting b{display:block;font-family:var(--f-display);font-size:24px;color:var(--terracotta)}
.setting select{
  width:100%;margin-top:4px;font-family:var(--f-display);font-weight:800;font-size:22px;color:var(--terracotta);
  border:none;background:transparent;text-align:center;outline:none;
}
.danger-link{text-align:center;font-weight:900;font-size:14px;color:var(--p-rosso);text-decoration:underline;opacity:.85;cursor:pointer}

/* ---------- toast ---------- */
#toast{
  position:fixed;left:50%;bottom:84px;transform:translateX(-50%) translateY(20px);z-index:200;
  background:var(--ink);color:var(--crema);font-weight:900;font-size:16px;
  padding:10px 20px;border-radius:16px;border:3px solid rgba(255,246,230,.4);
  opacity:0;pointer-events:none;transition:all .25s ease;max-width:90vw;text-align:center;
}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ---------- pannello audio ---------- */
.sound-fab{
  position:fixed;right:14px;bottom:14px;z-index:150;width:56px;height:56px;border-radius:50%;
  background:var(--crema);border:4px solid var(--ink);box-shadow:0 5px 0 var(--ink-soft);
  font-size:26px;display:flex;align-items:center;justify-content:center;cursor:pointer;user-select:none;
}
.sound-pop{
  position:fixed;right:14px;bottom:80px;z-index:150;width:270px;padding:16px;display:none;
  flex-direction:column;gap:12px;
}
.sound-pop.open{display:flex}
.sound-pop h3{font-family:var(--f-display);font-weight:800;font-size:19px}
.vol-row{display:flex;align-items:center;gap:10px;font-weight:900;font-size:15px}
.vol-row span{width:70px;flex:none}
.vol-row input[type=range]{height:14px}
.vol-row input[type=range]::-webkit-slider-thumb{width:28px;height:28px;background:var(--sole)}
.sound-note{font-size:12px;font-weight:800;opacity:.6}

/* ============================================================
   SCHERMATA TV (stage 1600x900 scalato)
   ============================================================ */
body.page-tv{background:#2B2320;overflow:hidden;display:flex;align-items:center;justify-content:center}
#stage{
  width:1600px;height:900px;transform-origin:center center;position:relative;border-radius:18px;overflow:hidden;
  background:linear-gradient(180deg,var(--cielo) 0%,var(--cielo-basso) 52%,var(--sanpietrini) 52.01%);
  box-shadow:0 30px 80px rgba(0,0,0,.55);
}
.topbar{position:absolute;top:0;left:0;right:0;height:96px;display:flex;align-items:center;justify-content:space-between;padding:16px 28px;z-index:40}
.logo{display:flex;align-items:center;gap:14px;padding:8px 22px}
.logo .ballmark{width:38px;height:38px}
.logo h1{font-family:var(--f-display);font-weight:800;font-size:34px;letter-spacing:.5px;line-height:1}
.logo h1 span{color:var(--terracotta)}
.turno{padding:10px 26px;font-family:var(--f-display);font-weight:800;font-size:28px;background:var(--sole)}
.turno b{font-size:36px}
.join{display:flex;align-items:center;gap:14px}
.pin-mini{padding:8px 20px;text-align:center}
.pin-mini .lbl{font-size:14px;font-weight:900;letter-spacing:2px;color:var(--terracotta)}
.pin-mini .num{font-family:var(--f-display);font-weight:800;font-size:36px;line-height:1;letter-spacing:4px}
.qr-tv{width:76px;height:76px;padding:6px;display:flex;align-items:center;justify-content:center;overflow:hidden}
.qr-tv img,.qr-tv canvas{width:100%!important;height:100%!important;image-rendering:pixelated}

/* scena piazza */
.scene{position:absolute;top:0;left:0;right:0;height:472px;overflow:hidden}
.sun{position:absolute;top:96px;left:112px;width:104px;height:104px;z-index:2}
.sun .core{position:absolute;inset:14px;border-radius:50%;background:var(--sole);border:5px solid var(--ink)}
.sun .rays{position:absolute;inset:0;animation:spin 40s linear infinite}
.sun .rays span{position:absolute;top:0;left:50%;width:8px;height:16px;margin-left:-4px;background:var(--sole);border:3px solid var(--ink);border-radius:6px;transform-origin:4px 52px}
@keyframes spin{to{transform:rotate(360deg)}}
.cloud{position:absolute;background:#fff;border:4px solid var(--ink);border-radius:60px;z-index:1}
.cloud::before,.cloud::after{content:'';position:absolute;background:#fff;border:4px solid var(--ink);border-radius:50%}
.cloud.c1{top:120px;right:340px;width:130px;height:44px}
.cloud.c1::before{width:52px;height:52px;top:-30px;left:20px}
.cloud.c1::after{width:38px;height:38px;top:-20px;left:66px}
.cloud.c2{top:170px;left:430px;width:96px;height:36px}
.cloud.c2::before{width:40px;height:40px;top:-24px;left:16px}
.cloud.c2::after{width:28px;height:28px;top:-14px;left:50px}

.skyline{position:absolute;left:0;right:0;bottom:0;height:330px;display:flex;align-items:flex-end;z-index:3}
.bld{position:relative;border:5px solid var(--ink);border-bottom:none;border-radius:14px 14px 0 0;flex:none}
.bld .roof{position:absolute;top:-26px;left:-5px;right:-5px;height:26px;background:var(--terracotta);border:5px solid var(--ink);border-radius:10px}
.win{position:absolute;width:34px;height:44px;border:4px solid var(--ink);border-radius:8px;background:#FDF3DC}
.win.shut{background:linear-gradient(90deg,var(--verde) 50%,#3F8A5F 50%)}
.awn{position:absolute;left:50%;transform:translateX(-50%);bottom:64px;width:120px;height:30px;background:repeating-linear-gradient(90deg,#fff 0 16px,var(--p-rosso) 16px 32px);border:4px solid var(--ink);border-radius:0 0 16px 16px}
.door{position:absolute;left:50%;transform:translateX(-50%);bottom:0;width:52px;height:66px;background:#8A5A3B;border:4px solid var(--ink);border-bottom:none;border-radius:12px 12px 0 0}

.fountain{position:absolute;bottom:0;left:50%;transform:translateX(-50%);z-index:5;width:250px;height:190px}
.fountain .basin{position:absolute;bottom:0;left:0;right:0;height:64px;background:#DCD3C4;border:5px solid var(--ink);border-radius:22px}
.fountain .water{position:absolute;bottom:14px;left:14px;right:14px;height:30px;background:#7FD0EA;border:4px solid var(--ink);border-radius:14px}
.fountain .stem{position:absolute;bottom:58px;left:50%;transform:translateX(-50%);width:34px;height:64px;background:#DCD3C4;border:5px solid var(--ink);border-radius:8px}
.fountain .bowl{position:absolute;bottom:112px;left:50%;transform:translateX(-50%);width:118px;height:34px;background:#DCD3C4;border:5px solid var(--ink);border-radius:16px}
.fountain .jet{position:absolute;bottom:146px;left:50%;transform:translateX(-50%);width:14px;height:34px;background:#7FD0EA;border:4px solid var(--ink);border-radius:8px 8px 4px 4px}
.drop{position:absolute;width:10px;height:10px;border-radius:50%;background:#7FD0EA;border:3px solid var(--ink);animation:drip 1.6s ease-in infinite}
.drop.d1{bottom:150px;left:38%} .drop.d2{bottom:156px;left:58%;animation-delay:.5s}
@keyframes drip{0%{transform:translateY(0);opacity:1}100%{transform:translateY(56px);opacity:0}}

.boccino-hide{position:absolute;bottom:8px;right:-30px;z-index:6}
.boccino-hide .ball{
  width:46px;height:46px;border-radius:50%;background:#fff;border:4px solid var(--ink);
  display:flex;align-items:center;justify-content:center;font-family:var(--f-display);font-weight:800;font-size:24px;
  animation:peek 3.2s ease-in-out infinite;
}
@keyframes peek{0%,100%{transform:translateY(10px)}50%{transform:translateY(0)}}
.boccino-hide .tag{position:absolute;bottom:52px;right:-40px;white-space:nowrap;background:#fff;border:3px solid var(--ink);border-radius:12px;padding:4px 12px;font-weight:900;font-size:15px;box-shadow:0 4px 0 var(--ink-soft)}

.cypress{position:absolute;bottom:0;width:46px;z-index:4}
.cypress .top{width:46px;height:150px;background:#3F8A5F;border:5px solid var(--ink);border-radius:50% 50% 42% 42%}
.cypress .trunk{width:14px;height:22px;background:#8A5A3B;border:4px solid var(--ink);margin:0 auto;border-radius:0 0 6px 6px}
.cart{position:absolute;bottom:0;right:96px;z-index:5}

.bunting{position:absolute;left:0;right:0;top:88px;z-index:8;pointer-events:none}
.bunting svg{width:100%;height:150px;overflow:visible}
.flagset{animation:sway 5s ease-in-out infinite;transform-origin:center top}
.flagset.f2{animation-delay:1.4s}
@keyframes sway{0%,100%{transform:rotate(-1.1deg)}50%{transform:rotate(1.1deg)}}

/* campo numeri */
.court{
  position:absolute;left:0;right:0;top:452px;height:190px;z-index:10;
  background:
    radial-gradient(ellipse 46px 26px at 25% 30%, var(--sanpietrini-scuro) 42%, transparent 43%),
    radial-gradient(ellipse 46px 26px at 75% 75%, var(--sanpietrini-scuro) 42%, transparent 43%),
    var(--sanpietrini);
  background-size:180px 96px;border-top:6px solid var(--ink);border-bottom:6px solid var(--ink);
}
.lane{position:absolute;left:70px;right:70px;top:0;bottom:0}
.tick{position:absolute;top:0;bottom:0;width:0;border-left:4px dashed rgba(74,50,43,.35)}
.tick i{position:absolute;bottom:8px;left:-22px;width:44px;text-align:center;font-style:normal;font-family:var(--f-display);font-weight:800;font-size:22px;color:rgba(74,50,43,.65)}
.endflag{position:absolute;top:-42px;width:0}
.endflag .pole{position:absolute;left:-3px;top:0;width:6px;height:70px;background:var(--ink);border-radius:4px}
.endflag .flag{position:absolute;left:3px;top:0;padding:3px 10px;font-family:var(--f-display);font-weight:800;font-size:20px;color:#fff;background:var(--terracotta);border:4px solid var(--ink);border-radius:8px}
.endflag.right .flag{left:auto;right:3px;background:var(--verde)}
.endflag.right .pole{left:auto;right:-3px}

.boccia{position:absolute;top:50%;width:0;height:0;z-index:12;transition:left 1s cubic-bezier(.3,.9,.35,1.15)}
.boccia .ball{
  position:absolute;left:-33px;top:-33px;width:66px;height:66px;border-radius:50%;
  border:5px solid var(--ink);box-shadow:0 7px 0 var(--ink-soft);animation:bob 2.6s ease-in-out infinite;
}
.boccia .ball::after{content:'';position:absolute;top:8px;left:11px;width:16px;height:16px;border-radius:50%;background:rgba(255,255,255,.85)}
.boccia .ball::before{content:attr(data-pos);position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--f-display);font-weight:800;font-size:24px;color:#fff;text-shadow:0 2px 0 rgba(0,0,0,.25)}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
.boccia .name{
  position:absolute;left:0;transform:translateX(-50%);white-space:nowrap;font-family:var(--f-display);font-weight:800;font-size:19px;color:#fff;
  padding:4px 14px;border-radius:14px;border:4px solid var(--ink);box-shadow:0 4px 0 var(--ink-soft);
}
.boccia .name::after{content:'';position:absolute;left:50%;transform:translateX(-50%);border:8px solid transparent}
.boccia.up .name{top:-92px}
.boccia.up .name::after{bottom:-19px;border-top-color:var(--ink)}
.boccia.down .name{top:44px}
.boccia.down .name::after{top:-19px;border-bottom-color:var(--ink)}
.boccia.shake .ball{animation:shake .5s ease-in-out}
@keyframes shake{0%,100%{transform:translate(0,0)}20%{transform:translate(-6px,-3px) rotate(-6deg)}40%{transform:translate(6px,2px) rotate(6deg)}60%{transform:translate(-5px,1px)}80%{transform:translate(4px,-2px)}}
.boccia.winner .ball{box-shadow:0 0 0 8px rgba(255,210,76,.75),0 7px 0 var(--ink-soft)}

/* boccino rivelato sul campo */
.boccia.boccino-field .ball{background:#fff}
.boccia.boccino-field .ball::before{color:var(--ink);text-shadow:none}
.boccia.boccino-field .name{background:#fff;color:var(--ink)}

/* esplosione sbocciata */
.boom-fx{position:absolute;top:50%;z-index:30;pointer-events:none;font-size:64px;transform:translate(-50%,-60%) scale(.3);opacity:0}
.boom-fx.go{animation:boom .9s ease-out forwards}
@keyframes boom{0%{transform:translate(-50%,-60%) scale(.3);opacity:0}25%{opacity:1;transform:translate(-50%,-70%) scale(1.35)}100%{transform:translate(-50%,-110%) scale(1);opacity:0}}

/* pannelli bassi TV */
.panels{position:absolute;left:24px;right:24px;top:664px;bottom:64px;display:grid;grid-template-columns:1fr 1.2fr;gap:20px;z-index:20}
.panel{padding:14px 20px;overflow:hidden}
.panel h2{font-family:var(--f-display);font-weight:800;font-size:22px;margin-bottom:8px;display:flex;align-items:center;gap:10px}
.plist{display:grid;grid-template-columns:1fr 1fr;gap:7px 16px}
.plist.ranked{grid-auto-flow:column}
.prow{display:flex;align-items:center;gap:9px;font-size:18px;font-weight:800;white-space:nowrap}
.prow .pos{margin-left:auto;font-family:var(--f-display);font-size:20px;color:var(--terracotta)}
.prow .st{font-size:15px;font-weight:900}
.prow .num{font-family:var(--f-display);font-weight:800;font-size:19px;width:32px;flex:none;text-align:right;color:var(--terracotta)}
.prow.lead{background:linear-gradient(90deg,rgba(255,210,76,.8),rgba(255,210,76,.08));border-radius:12px;padding:1px 8px;margin:-1px -8px}
.prow.lead .num{color:var(--ink)}
.st.wait{animation:blink 1.2s ease-in-out infinite}
.recap-list{display:flex;flex-direction:column;gap:6px;font-size:18px;font-weight:800}
.recap-list .mv{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.mv .arrow{color:var(--terracotta);font-family:var(--f-display)}
.mv.boom-line{background:linear-gradient(90deg,rgba(255,197,49,.5),rgba(255,197,49,.12));border:3px solid var(--ink);border-radius:12px;padding:4px 12px;margin:2px 0}
.hintbar{
  position:absolute;left:0;right:0;bottom:0;height:52px;z-index:30;background:var(--ink);color:var(--crema);
  display:flex;align-items:center;justify-content:center;gap:14px;font-weight:800;font-size:20px;letter-spacing:.4px;
}
.hintbar b{color:var(--sole);font-family:var(--f-display);letter-spacing:2px;font-size:23px}

/* overlay TV: lobby / podio */
.tv-overlay{
  position:absolute;inset:0;z-index:60;display:none;align-items:center;justify-content:center;
  background:rgba(43,35,32,.55);backdrop-filter:blur(2px);
}
.tv-overlay.open{display:flex}
.overlay-card{width:760px;max-width:92%;padding:34px 40px;text-align:center;display:flex;flex-direction:column;gap:18px;align-items:center}
.overlay-card h2{font-family:var(--f-display);font-weight:800;font-size:44px}
.overlay-card .sub{font-weight:900;font-size:20px;opacity:.75}
.big-pin{font-family:var(--f-display);font-weight:800;font-size:96px;letter-spacing:14px;line-height:1;color:var(--terracotta)}
.lobby-dots{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.lobby-p{display:flex;align-items:center;gap:8px;font-weight:900;font-size:19px;background:#fff;border:3px solid var(--ink);border-radius:14px;padding:6px 14px;animation:popin .4s ease}
@keyframes popin{0%{transform:scale(.4);opacity:0}100%{transform:scale(1);opacity:1}}
.podium{display:flex;align-items:flex-end;gap:16px;justify-content:center;margin-top:6px}
.pod{display:flex;flex-direction:column;align-items:center;gap:8px}
.pod .cube{width:130px;border:5px solid var(--ink);border-radius:14px 14px 0 0;background:var(--sole);display:flex;align-items:flex-start;justify-content:center;font-family:var(--f-display);font-weight:800;font-size:34px;padding-top:6px}
.pod.p1 .cube{height:130px} .pod.p2 .cube{height:96px;background:#DCD3C4} .pod.p3 .cube{height:72px;background:#E8A87C}
.pod .who{font-family:var(--f-display);font-weight:800;font-size:22px;display:flex;align-items:center;gap:8px}
.pod .dist{font-weight:900;font-size:15px;opacity:.7}
.rank-rest{display:flex;flex-direction:column;gap:4px;font-weight:900;font-size:17px}

/* ---------- classifica vicinanza al boccino (overlay TV fra i turni) ---------- */
.rank-ov{
  position:absolute;inset:0;z-index:58;display:none;align-items:center;justify-content:center;
  background:rgba(43,35,32,.62);backdrop-filter:blur(2px);
}
.rank-ov.open{display:flex}
.rank-card{width:800px;max-width:92%;padding:26px 32px;display:flex;flex-direction:column;gap:11px}
.rank-card h2{font-family:var(--f-display);font-weight:800;font-size:40px;text-align:center;line-height:1.1}
.rank-card .sub{font-weight:900;font-size:20px;opacity:.72;text-align:center;margin:-4px 0 6px}
.rank-card .rows{display:flex;flex-direction:column;gap:9px}
.nrow{
  display:flex;align-items:center;gap:14px;font-weight:900;font-size:24px;
  background:#fff;border:4px solid var(--ink);border-radius:16px;padding:7px 16px;
  opacity:0;transform:translateX(-46px);
}
.nrow.in{animation:rankin .42s cubic-bezier(.3,.9,.35,1.3) forwards}
@keyframes rankin{to{opacity:1;transform:translateX(0)}}
.nrow .num{font-family:var(--f-display);font-weight:800;font-size:30px;color:var(--terracotta);width:56px;flex:none}
.nrow .pos{margin-left:auto;font-family:var(--f-display);font-size:23px;opacity:.6}
.nrow .tag{font-size:15px;font-weight:900;background:var(--sole);border:3px solid var(--ink);border-radius:10px;padding:2px 10px;white-space:nowrap}
.nrow.first{background:linear-gradient(90deg,var(--sole),#FFEDBC);box-shadow:0 5px 0 var(--ink-soft)}
.nrow.first .num{color:var(--ink)}
.nrow.last .tag{background:#fff}

/* ---------- classifica vicinanza (telefono) ---------- */
.rank-card-m{padding:12px 15px;display:flex;flex-direction:column;gap:6px}
.rank-card-m h2{font-family:var(--f-display);font-weight:800;font-size:19px;display:flex;align-items:center;gap:8px}
.rank-card-m .sub{font-weight:900;font-size:12px;opacity:.6;margin:-4px 0 2px}
.mrow{
  display:flex;align-items:center;gap:9px;font-weight:800;font-size:16px;
  background:#fff;border:3px solid var(--ink);border-radius:12px;padding:4px 9px;
}
.rank-card-m.anim .mrow{opacity:0;transform:translateX(-16px);animation:mrowin .34s ease forwards}
@keyframes mrowin{to{opacity:1;transform:translateX(0)}}
.mrow .num{font-family:var(--f-display);font-weight:800;font-size:17px;width:26px;flex:none;color:var(--terracotta)}
.mrow .pos{margin-left:auto;font-family:var(--f-display);font-size:17px;opacity:.6}
.mrow.first{background:linear-gradient(90deg,var(--sole),#FFEDBC);box-shadow:0 3px 0 var(--ink-soft)}
.mrow.first .num{color:var(--ink)}
.mrow.me{border-width:4px;border-color:var(--terracotta)}

/* coriandoli */
.confetto{position:absolute;top:-20px;width:14px;height:14px;border:3px solid var(--ink);z-index:70;animation:fall linear forwards}
@keyframes fall{to{transform:translateY(960px) rotate(720deg)}}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation:none !important;transition:none !important}
  /* le righe di classifica compaiono via animazione: senza, restano visibili subito */
  .nrow,.rank-card-m .mrow{opacity:1 !important;transform:none !important}
}
