{
  "version": 3,
  "sources": ["rally-finale.jsx"],
  "sourcesContent": ["/* FACT Rallye: Finale (Schätzfragen-Enthüllung + Siegerehrung) und Rangliste.\n * Spec 06_Planung/specs/2026-10-17-rallye-organizer-design.md §6.1 Punkt 8.\n *\n * Exporte (stabile Props, werden auch von rally-play.jsx benutzt):\n *   window.RallyStandingsList({ standings, lang, theme, highlightTeam, hideEstimates, event?, noSpeed?, flags?, answers? })\n *     standings aus RallyEngine.standings: adjust/adjustReasons (Korrektur der Spielleitung),\n *     disqualified (rank null, steht hinten, „ausgeschlossen“). Mit event: Teamnamen über RallyEngine.teamName.\n *   window.RallyFinaleView({ event, players, answers, finishes, lang, theme, isHost, myTeam, onNext, onEnd })\n *\n * Ablauf über event.revealStep (vom Organisator gesteuert, alle Geräte zeigen dasselbe):\n *   0       Intro „Gleich wird aufgelöst“ (nur wenn es Schätzfragen gibt)\n *   1..n    Schätzfrage n in Tour-Reihenfolge\n *   > n     Siegerehrung (bei n = 0 sofort)\n * status 'ended' zeigt immer die Siegerehrung, ohne Knöpfe.\n *\n * Globaler Babel-Scope: Top-Level-Namen mit RallyFin / rallyFin / RAL_FIN_ (plus die zwei Exporte).\n */\n\nconst RAL_FIN_FD = \"'Nunito', system-ui, sans-serif\";\nconst RAL_FIN_FB = \"'DM Sans', system-ui, sans-serif\";\nconst RAL_FIN_FM = \"'JetBrains Mono', ui-monospace, monospace\";\n\nfunction rallyFinT(key, lang, vars) {\n  let s = t(key, lang);\n  if (vars) Object.keys(vars).forEach(k => { s = s.split('{' + k + '}').join(String(vars[k])); });\n  return s;\n}\n\nfunction rallyFinStyles() {\n  if (typeof document === 'undefined' || document.getElementById('rally-finale-styles')) return;\n  const s = document.createElement('style');\n  s.id = 'rally-finale-styles';\n  s.textContent = `\n@keyframes rallyFinPop   { 0% { transform: scale(0.6); opacity: 0; } 70% { transform: scale(1.08); opacity: 1; } 100% { transform: scale(1); } }\n@keyframes rallyFinRise  { from { transform: scaleY(0); } to { transform: scaleY(1); } }\n@keyframes rallyFinFade  { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }\n@keyframes rallyFinGrow  { from { transform: scaleX(0); } to { transform: scaleX(1); } }\n.rally-fin-pop  { animation: rallyFinPop 0.55s cubic-bezier(0.2, 0.9, 0.3, 1.2) both; }\n.rally-fin-rise { transform-origin: bottom; animation: rallyFinRise 0.6s cubic-bezier(0.2, 0.8, 0.2, 1) both; }\n.rally-fin-fade { animation: rallyFinFade 0.35s ease-out both; }\n.rally-fin-grow { transform-origin: left; animation: rallyFinGrow 0.7s cubic-bezier(0.2, 0.8, 0.2, 1) both; }\n@media (prefers-reduced-motion: reduce) {\n  .rally-fin-pop, .rally-fin-rise, .rally-fin-fade, .rally-fin-grow { animation: none !important; }\n}\n`;\n  document.head.appendChild(s);\n}\n\nfunction rallyFinReducedMotion() {\n  try { return window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; } catch (e) { return false; }\n}\n\nfunction rallyFinFmt(n, lang, unit) {\n  if (n == null || !isFinite(n)) return '';\n  const digits = Math.abs(n - Math.round(n)) > 1e-9 ? Math.min(2, (String(n).split('.')[1] || '').length) : 0;\n  return Number(n).toLocaleString(lang === 'en' ? 'en-US' : 'de-DE', { minimumFractionDigits: digits, maximumFractionDigits: digits, useGrouping: !/jahr|year/i.test(String(unit || '')) });\n}\n\nfunction rallyFinTeam(event, no) {\n  return ((event && event.teams) || []).find(tm => +tm.no === +no) || { no, name: '#' + no, emoji: '👥', color: '#888888' };\n}\n// Anzeigename eines Teams: RallyEngine.teamName (eigener Name oder Vorgabe in der Sprache), sonst Name aus der Zeile\nfunction rallyFinTeamName(event, row, lang) {\n  const E = window.RallyEngine;\n  const no = row && (row.team != null ? row.team : row.no);\n  if (event && E && typeof E.teamName === 'function' && no != null) {\n    try { const n = E.teamName(event, no, lang); if (n) return n; } catch (e) {}\n  }\n  return rallyPickText(row && row.name, lang) || ('#' + no);\n}\n// Sieger ohne ausgeschlossene Teams\nfunction rallyFinWinners(rows) {\n  const E = window.RallyEngine;\n  if (E && typeof E.winners === 'function') { try { return E.winners(rows) || []; } catch (e) {} }\n  return (rows || []).filter(r => r && r.rank === 1 && !r.disqualified);\n}\nfunction rallyFinSigned(n, lang) {\n  const v = Math.round(+n || 0);\n  return (v > 0 ? '+' : v < 0 ? '−' : '') + rallyFinFmt(Math.abs(v), lang);\n}\n// Warum hat ein Team keinen Bonus fürs frühe Ankommen bekommen? 'fast' | 'gps' | null\nfunction rallyFinSpeedWhy(row) {\n  if (!row || !row.suspicious || row.disqualified || (+row.speed || 0) > 0) return null;\n  return typeof row.paceKmh === 'number' && row.paceKmh > 8 ? 'fast' : 'gps';\n}\n\n// Erste Antwort je Team für eine Station\nfunction rallyFinFirstByTeam(answers, stationId) {\n  const out = {};\n  (answers || []).forEach(a => {\n    if (!a || a.stationId !== stationId) return;\n    const cur = out[a.team];\n    if (!cur || String(a.at) < String(cur.at)) out[a.team] = a;\n  });\n  return out;\n}\n\n// Gibt es Schätzfragen? (Engine-Funktion, sonst selbst zählen)\nfunction rallyFinHasEstimates(event) {\n  const E = window.RallyEngine;\n  if (E && typeof E.hasEstimates === 'function') { try { return !!E.hasEstimates(event); } catch (e) {} }\n  return ((event && event.tour && event.tour.stations) || []).some(s => s && s.puzzle && s.puzzle.type === 'estimate');\n}\n// Bonus fürs frühe Ankommen ausgeschaltet? Dann taucht er in Wertung und Legende nicht auf.\nfunction rallyFinNoSpeed(event) {\n  return !!(event && event.tour && event.tour.settings && event.tour.settings.speedWeight === 'off');\n}\nfunction rallyFinLegendKey(hasEst, noSpeed) {\n  return 'rally.fin.legend' + (hasEst ? '' : 'NoEst') + (noSpeed ? 'NoSpeed' : '');\n}\nfunction rallyFinIsSingle(event) {\n  return !!event && ((Array.isArray(event.teams) && event.teams.length === 1) || +event.teamCount === 1);\n}\n// Schnellstart: Gastgeber spielt mit, es gibt keine „Spielleitung“\nfunction rallyFinIsPlayerMode(event) {\n  return !!event && event.organizerMode === 'player';\n}\nfunction rallyFinHostName(event, players) {\n  const n = event && event.tour && event.tour.hostName;\n  if (n) return String(n);\n  return ''; // erster Beitretender ist nicht unbedingt die Spielleitung (Event aus der Planung)\n}\n// Letzte Zeile je (Team, Station): bei zwei Versuchen zählt der zweite\nfunction rallyFinLastByStation(answers, team) {\n  const out = {};\n  (answers || []).forEach(a => {\n    if (!a || +a.team !== +team) return;\n    const cur = out[a.stationId];\n    const at = +a.attempt || 1, ct = cur ? (+cur.attempt || 1) : 0;\n    if (!cur || at > ct || (at === ct && String(a.at) > String(cur.at))) out[a.stationId] = a;\n  });\n  return out;\n}\n// Ehrlichkeits- und Tempo-Signale je Team. Felder aus RallyEngine.standings, sonst aus den Antworten geschätzt.\nfunction rallyFinTeamFlags(row, answers) {\n  const last = row ? rallyFinLastByStation(answers, row.team) : {};\n  const rows = Object.keys(last).map(k => last[k]);\n  const honestCount = row && typeof row.honestCount === 'number' ? row.honestCount : rows.filter(a => a.honest).length;\n  const answered = row && typeof row.answered === 'number' ? row.answered : rows.length;\n  const pace = row && typeof row.paceKmh === 'number' && isFinite(row.paceKmh) ? row.paceKmh : null;\n  const suspicious = row && typeof row.suspicious === 'boolean' ? row.suspicious\n    : (answered > 0 && honestCount > answered / 2) || (pace != null && pace > 8);\n  const reason = !suspicious ? null : (pace != null && pace > 8 ? 'fast' : 'gps');\n  const retries = rows.filter(a => +a.attempt === 2).length;\n  return { honestCount, answered, pace, suspicious, reason, retries };\n}\n// Höchstmögliche Punkte (für „Euer Ergebnis“ bei einem Team)\nfunction rallyFinMaxPoints(event) {\n  const st = (event && event.tour && event.tour.stations) || [];\n  let max = 0;\n  st.forEach(s => {\n    if (!s || !s.puzzle) return;\n    if (s.puzzle.type === 'estimate') max += 100;\n    else max += typeof s.puzzle.points === 'number' ? s.puzzle.points : 100;\n  });\n  const w = event && event.tour && event.tour.settings && event.tour.settings.speedWeight;\n  max += w === 'off' ? 0 : w === 'high' ? 150 : 50;\n  return max;\n}\n\n// Hinweis-Chips für die Spielleitung (ohne GPS, auffällig schnell)\nfunction RallyFinFlagChips({ flags, lang, explain, noSpeed }) {\n  if (!flags || (!flags.honestCount && !flags.suspicious)) return null;\n  const chip = (warn, text) => (\n    <span style={{\n      display: 'inline-flex', alignItems: 'center', gap: 4, padding: '2px 9px', borderRadius: 999, whiteSpace: 'nowrap',\n      background: warn ? 'var(--coin-soft)' : 'var(--surface-2)', color: 'var(--ink)',\n      border: '1px solid ' + (warn ? 'rgba(201,160,15,0.55)' : 'var(--border-2)'),\n      fontFamily: RAL_FIN_FD, fontWeight: 800, fontSize: 12, lineHeight: 1.5,\n    }}>{text}</span>\n  );\n  return (\n    <span style={{ display: 'block', marginTop: 6 }}>\n      <span style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>\n        {flags.suspicious && chip(true, '⚠️ ' + (flags.reason === 'fast'\n          ? rallyFinT('rally.finale.flag.fast', lang, { kmh: rallyFinFmt(Math.round(flags.pace), lang) })\n          : t('rally.finale.flag.gps', lang)))}\n        {flags.honestCount > 0 && chip(false, rallyFinT('rally.finale.flag.noGps', lang, { n: flags.honestCount }))}\n      </span>\n      {flags.suspicious && explain !== false && (\n        <span style={{ display: 'block', marginTop: 4, fontFamily: RAL_FIN_FB, fontWeight: 500, fontSize: 12.5, lineHeight: 1.45, color: 'var(--ink-2)' }}>\n          {t(noSpeed ? 'rally.finale.flag.explainCheck' : 'rally.fin.flag.explain', lang)}\n        </span>\n      )}\n    </span>\n  );\n}\n\nfunction RallyFinBadge({ team, size = 32 }) {\n  return (\n    <span aria-hidden=\"true\" style={{\n      width: size, height: size, borderRadius: '50%', flexShrink: 0, background: team.color || 'var(--stamp)',\n      display: 'inline-flex', alignItems: 'center', justifyContent: 'center', fontSize: Math.round(size * 0.55), lineHeight: 1,\n      border: '2px solid #FFFFFF', boxShadow: '0 2px 5px rgba(0,0,0,0.2)', boxSizing: 'border-box',\n    }}>{team.emoji || '👥'}</span>\n  );\n}\n\n// ── Rangliste ────────────────────────────────────────────────────────────────\n// flags: Hinweise für die Spielleitung (ohne GPS, auffällig schnell); answers: zählt 2. Versuche\nfunction RallyStandingsList({ standings = [], lang = 'de', theme, highlightTeam, hideEstimates, flags, answers, noSpeed, event }) {\n  rallyFinStyles();\n  if (noSpeed == null) noSpeed = rallyFinNoSpeed(event);\n  if (!standings.length) {\n    return <div style={{ fontFamily: RAL_FIN_FB, fontSize: 14, color: 'var(--ink-3)' }}>{t('rally.finale.noTeams', lang)}</div>;\n  }\n  return (\n    <ol style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: 8 }}>\n      {standings.map(s => {\n        const mine = highlightTeam != null && +highlightTeam === +s.team;\n        const dq = !!s.disqualified || s.rank == null;\n        const top = !dq && s.rank === 1;\n        const fl = (flags || answers) ? rallyFinTeamFlags(s, answers) : null;\n        const parts = [rallyFinT('rally.finale.base', lang, { n: s.base })];\n        if (fl && fl.retries > 0) parts.push(rallyFinT('rally.finale.retries', lang, { n: fl.retries }));\n        if (!hideEstimates) parts.push(rallyFinT('rally.finale.estimate', lang, { n: s.estimate }));\n        if (!noSpeed) {\n          const why = rallyFinSpeedWhy(s);\n          parts.push(rallyFinT('rally.fin.speed', lang, { n: s.speed }) + (why ? ' ' + t('rally.fin.speedWhy.' + why, lang) : ''));\n        }\n        const adj = Math.round(+s.adjust || 0);\n        const reasons = (Array.isArray(s.adjustReasons) ? s.adjustReasons : []).filter(Boolean);\n        const total = hideEstimates ? s.total - (s.estimate || 0) : s.total;\n        const name = rallyFinTeamName(event, s, lang);\n        return (\n          <li key={s.team} style={{\n            display: 'flex', alignItems: 'center', gap: 10, padding: '10px 12px', borderRadius: 16,\n            background: mine ? 'var(--stamp-soft)' : dq ? 'var(--surface-2)' : 'var(--surface)',\n            border: mine ? '1.5px solid var(--stamp)' : dq ? '1px dashed var(--border-2)' : '1px solid var(--border)',\n          }}>\n            <span role=\"img\" style={{\n              width: 28, flexShrink: 0, textAlign: 'center', fontFamily: RAL_FIN_FM, fontWeight: 600, fontSize: 16,\n              color: top ? 'var(--coin-dk)' : 'var(--ink-2)', alignSelf: 'flex-start', paddingTop: 7,\n            }} aria-label={dq ? t('rally.fin.dqAria', lang) : rallyFinT('rally.finale.rankAria', lang, { n: s.rank })}>{dq ? '✕' : s.rank + '.'}</span>\n            <span style={{ alignSelf: 'flex-start', display: 'flex', opacity: dq ? 0.55 : 1 }}><RallyFinBadge team={s} size={34} /></span>\n            <span style={{ flex: 1, minWidth: 0 }}>\n              <span style={{ display: 'flex', alignItems: 'center', gap: 6, minWidth: 0 }}>\n                <span style={{ minWidth: 0, fontFamily: RAL_FIN_FD, fontWeight: 800, fontSize: 15.5, lineHeight: 1.2, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', color: dq ? 'var(--ink-2)' : 'var(--ink)' }}>\n                  {name}\n                </span>\n                {dq && (\n                  <span style={{\n                    flexShrink: 0, padding: '1px 8px', borderRadius: 999, background: 'var(--stamp-soft)', color: 'var(--stamp)',\n                    border: '1px solid rgba(232,56,13,0.35)', fontFamily: RAL_FIN_FD, fontWeight: 900, fontSize: 11.5, lineHeight: 1.5, whiteSpace: 'nowrap',\n                  }}>{t('rally.fin.dq', lang)}</span>\n                )}\n              </span>\n              <span style={{ display: 'block', marginTop: 2, fontFamily: RAL_FIN_FM, fontSize: 12, letterSpacing: '0.02em', lineHeight: 1.45, color: 'var(--ink-2)', overflowWrap: 'anywhere' }}>\n                {mine && <span style={{ fontFamily: RAL_FIN_FD, fontWeight: 900, letterSpacing: 0, color: 'var(--stamp)' }}>{t('rally.finale.you', lang)} · </span>}\n                {parts.join(' · ')}{s.finishedAt ? ' · 🏁' : ''}\n              </span>\n              {(adj !== 0 || (dq && reasons.length > 0)) && (\n                <span style={{ display: 'block', marginTop: 3, fontFamily: RAL_FIN_FB, fontWeight: 500, fontSize: 12.5, lineHeight: 1.45, color: 'var(--ink-2)', overflowWrap: 'anywhere' }}>\n                  {adj !== 0 && rallyFinT(reasons.length ? 'rally.fin.adjustWhy' : 'rally.fin.adjust', lang, { n: rallyFinSigned(adj, lang), why: reasons.join(', ') })}\n                  {adj === 0 && dq && rallyFinT('rally.fin.dqWhy', lang, { why: reasons.join(', ') })}\n                </span>\n              )}\n              {flags && <RallyFinFlagChips flags={fl} lang={lang} noSpeed={noSpeed} />}\n            </span>\n            <span style={{\n              fontFamily: RAL_FIN_FM, fontWeight: 600, fontSize: 20, alignSelf: 'flex-start', paddingTop: 4,\n              color: dq ? 'var(--ink-3)' : 'var(--ink)', textDecoration: dq ? 'line-through' : 'none',\n            }}>{total}</span>\n          </li>\n        );\n      })}\n    </ol>\n  );\n}\n\n// ── Intro ────────────────────────────────────────────────────────────────────\n// Wer deckt auf? Spielleitung (Standard), im Schnellstart der Gastgeber mit Namen, „du“ oder „ihr“\nfunction rallyFinWho(event, players, isHost) {\n  if (!rallyFinIsPlayerMode(event)) return { kind: 'lead' };\n  if (isHost) return { kind: 'you' };\n  const host = rallyFinHostName(event, players);\n  return host ? { kind: 'named', host } : { kind: 'us' };\n}\nfunction rallyFinWhoText(base, who, lang, vars) {\n  const suffix = who.kind === 'lead' ? '' : who.kind === 'you' ? 'You' : who.kind === 'named' ? 'Named' : 'Us';\n  return rallyFinT(base + suffix, lang, Object.assign({ host: who.host || '' }, vars || {}));\n}\n\nfunction RallyFinIntro({ count, lang, isHost, who }) {\n  who = who || { kind: 'lead' };\n  return (\n    <div className=\"rally-fin-fade\" style={{\n      borderRadius: 22, padding: '28px 20px', textAlign: 'center', color: '#FFFFFF',\n      background: 'linear-gradient(150deg, #1A0830 0%, #2D1408 60%, #1A0A04 100%)',\n      border: '1px solid rgba(232,56,13,0.25)', boxShadow: '0 10px 30px rgba(0,0,0,0.25)',\n    }}>\n      <div className=\"rally-fin-pop\" aria-hidden=\"true\" style={{ fontSize: 52, lineHeight: 1 }}>🎯</div>\n      <div style={{ marginTop: 14, fontFamily: RAL_FIN_FD, fontWeight: 900, fontSize: 26, lineHeight: 1.15 }}>{t('rally.finale.introTitle', lang)}</div>\n      <div style={{ marginTop: 8, fontFamily: RAL_FIN_FB, fontWeight: 500, fontSize: 15, lineHeight: 1.55, color: 'rgba(245,240,232,0.85)' }}>\n        {rallyFinWhoText(count === 1 ? 'rally.finale.introBodyOne' : 'rally.finale.introBody', who, lang, { n: count })}\n      </div>\n      {!isHost && (\n        <div style={{ marginTop: 14, fontFamily: RAL_FIN_FM, fontSize: 12.5, letterSpacing: '0.04em', color: 'rgba(245,240,232,0.72)' }}>{rallyFinWhoText('rally.finale.waitHost', who, lang)}</div>\n      )}\n    </div>\n  );\n}\n\n// ── Enthüllung einer Schätzfrage ─────────────────────────────────────────────\nfunction RallyFinReveal({ event, station, no, total, answers, lang }) {\n  const reduced = React.useMemo(() => rallyFinReducedMotion(), []);\n  const [phase, setPhase] = React.useState(reduced ? 2 : 0); // 0 Schätzungen, 1 Wahrheit, 2 Punkte\n  const [shown, setShown] = React.useState(reduced ? 1 : 0);  // Count-up-Fortschritt 0..1\n  const puzzle = station.puzzle || {};\n  const truth = window.RallyEngine.parseNumber(puzzle.answer);\n\n  React.useEffect(() => {\n    if (reduced) return;\n    const t1 = setTimeout(() => setPhase(1), 1400);\n    const t2 = setTimeout(() => setPhase(2), 2700);\n    return () => { clearTimeout(t1); clearTimeout(t2); };\n  }, [reduced]);\n\n  React.useEffect(() => {\n    if (reduced || phase < 1) return;\n    let raf = 0;\n    const t0 = performance.now();\n    const step = (now) => {\n      const k = Math.min(1, (now - t0) / 1000);\n      setShown(1 - Math.pow(1 - k, 3));\n      if (k < 1) raf = requestAnimationFrame(step);\n    };\n    raf = requestAnimationFrame(step);\n    return () => cancelAnimationFrame(raf);\n  }, [phase, reduced]);\n\n  const first = rallyFinFirstByTeam(answers, station.id);\n  const byTeam = {};\n  Object.keys(first).forEach(k => { byTeam[k] = first[k].value; });\n  const ranking = window.RallyEngine.estimateRanking(puzzle, byTeam);\n  const rankByTeam = {};\n  ranking.forEach(r => { rankByTeam[r.team] = r; });\n  const teams = (event.teams || []).slice();\n  const noGuess = teams.filter(tm => !rankByTeam[tm.no]);\n\n  const values = ranking.map(r => r.value).concat(isFinite(truth) ? [truth] : []);\n  const maxV = Math.max.apply(null, values.map(v => Math.abs(v)).concat([1])) * 1.08;\n  const pct = (v) => Math.max(0, Math.min(100, (v / maxV) * 100));\n\n  const rows = phase >= 1\n    ? ranking.slice()\n    : ranking.slice().sort((a, b) => a.team - b.team);\n  const unit = puzzle.unit ? ' ' + puzzle.unit : '';\n\n  return (\n    <div className=\"rally-fin-fade\" style={{ display: 'flex', flexDirection: 'column', gap: 14 }}>\n      <div style={{ padding: '16px 16px 18px', borderRadius: 20, background: 'var(--surface)', border: '1px solid var(--border)' }}>\n        <div style={{ fontFamily: RAL_FIN_FD, fontWeight: 900, fontSize: 12, letterSpacing: 1.4, textTransform: 'uppercase', color: 'var(--stamp)' }}>\n          {rallyFinT('rally.finale.questionKicker', lang, { n: no, total })}\n        </div>\n        <div style={{\n          marginTop: 4, fontFamily: RAL_FIN_FD, fontWeight: 800, fontSize: 13, lineHeight: 1.35, color: 'var(--ink-2)',\n          display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden', overflowWrap: 'anywhere',\n        }}>{station.title}</div>\n        <div style={{ marginTop: 8, fontFamily: RAL_FIN_FD, fontWeight: 800, fontSize: 19, lineHeight: 1.3, color: 'var(--ink)', overflowWrap: 'anywhere' }}>{puzzle.question}</div>\n      </div>\n\n      <div aria-live=\"polite\" style={{\n        borderRadius: 20, padding: '16px 14px', textAlign: 'center',\n        background: phase >= 1 ? 'var(--coin-soft)' : 'var(--surface-2)',\n        border: phase >= 1 ? '1.5px solid var(--coin)' : '1.5px dashed var(--border-2)', transition: 'background 0.3s, border-color 0.3s',\n      }}>\n        <div style={{ fontFamily: RAL_FIN_FD, fontWeight: 900, fontSize: 12, letterSpacing: 1.4, textTransform: 'uppercase', color: 'var(--ink-2)' }}>{t('rally.finale.truth', lang)}</div>\n        <div className={phase >= 1 ? 'rally-fin-pop' : undefined} style={{ marginTop: 4, fontFamily: RAL_FIN_FM, fontWeight: 600, fontSize: 40, lineHeight: 1.1, color: phase >= 1 ? 'var(--ink)' : 'var(--ink-3)' }}>\n          {phase >= 1 && isFinite(truth) ? rallyFinFmt(shown >= 1 || phase >= 2 ? truth : Math.round(truth * shown), lang, unit) + unit : '?'}\n        </div>\n      </div>\n\n      <ol style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: 10 }}>\n        {rows.map((r, i) => {\n          const tm = rallyFinTeam(event, r.team);\n          return (\n            <li key={r.team} className=\"rally-fin-fade\" style={{\n              animationDelay: (phase >= 1 ? i * 0.06 : i * 0.12) + 's',\n              padding: '10px 12px', borderRadius: 16, background: 'var(--surface)',\n              border: phase >= 2 && r.rank === 1 ? '1.5px solid var(--coin)' : '1px solid var(--border)',\n            }}>\n              <div style={{ display: 'flex', alignItems: 'center', gap: 10 }}>\n                <RallyFinBadge team={tm} size={30} />\n                <span style={{ flex: 1, minWidth: 0, fontFamily: RAL_FIN_FD, fontWeight: 800, fontSize: 15, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{rallyFinTeamName(event, tm, lang)}</span>\n                <span style={{ fontFamily: RAL_FIN_FM, fontWeight: 600, fontSize: 16 }}>{rallyFinFmt(r.value, lang, unit)}{unit}</span>\n              </div>\n              <div style={{ position: 'relative', marginTop: 8, height: 12, borderRadius: 999, background: 'var(--surface-2)' }}>\n                <div className=\"rally-fin-grow\" style={{\n                  position: 'absolute', left: 0, top: 0, bottom: 0, width: pct(r.value) + '%', borderRadius: 999, background: tm.color || 'var(--stamp)',\n                  animationDelay: (i * 0.12) + 's',\n                }} />\n                {phase >= 1 && isFinite(truth) && (\n                  <div className=\"rally-fin-fade\" aria-hidden=\"true\" style={{\n                    position: 'absolute', top: -4, bottom: -4, left: 'calc(' + pct(truth) + '% - 2px)', width: 4, borderRadius: 2,\n                    background: 'var(--coin)', boxShadow: '0 0 0 2px var(--surface)',\n                  }} />\n                )}\n              </div>\n              {phase >= 2 && (\n                <div className=\"rally-fin-fade\" style={{ display: 'flex', alignItems: 'center', gap: 8, marginTop: 8 }}>\n                  <span style={{ fontFamily: RAL_FIN_FM, fontSize: 12, color: 'var(--ink-2)', flex: 1 }}>\n                    {r.error === 0 ? t('rally.finale.exact', lang) : rallyFinT('rally.finale.off', lang, { n: rallyFinFmt(r.error, lang) + unit })}\n                  </span>\n                  <span style={{\n                    padding: '3px 10px', borderRadius: 999, background: r.rank === 1 ? 'var(--coin)' : 'var(--surface-2)',\n                    color: r.rank === 1 ? '#3D2F00' : 'var(--ink)', fontFamily: RAL_FIN_FM, fontWeight: 600, fontSize: 13,\n                  }}>{rallyFinT(+r.points === 1 ? 'rally.fin.points1' : 'rally.finale.points', lang, { n: r.points })}</span>\n                </div>\n              )}\n            </li>\n          );\n        })}\n      </ol>\n      {noGuess.length > 0 && (\n        <div style={{ fontFamily: RAL_FIN_FB, fontSize: 13, color: 'var(--ink-3)' }}>\n          {rallyFinT('rally.finale.noGuess', lang, { teams: noGuess.map(tm => (tm.emoji ? tm.emoji + ' ' : '') + rallyFinTeamName(event, tm, lang)).join(', ') })}\n        </div>\n      )}\n    </div>\n  );\n}\n\n// ── Siegerehrung ─────────────────────────────────────────────────────────────\n// Ein Team: kein Podest, sondern „Euer Ergebnis“ mit Punkten von maximal möglichen\nfunction RallyFinSolo({ event, row, answers, lang, flags, hasEst }) {\n  const max = rallyFinMaxPoints(event);\n  const fl = rallyFinTeamFlags(row, answers);\n  const items = [[t('rally.finale.soloQuestions', lang), row.base]];\n  if (hasEst) items.push([t('rally.finale.soloEstimates', lang), row.estimate]);\n  const why = rallyFinSpeedWhy(row);\n  if (!rallyFinNoSpeed(event)) items.push([t('rally.fin.soloSpeed', lang) + (why ? ' ' + t('rally.fin.speedWhy.' + why, lang) : ''), row.speed]);\n  const adj = Math.round(+row.adjust || 0);\n  const reasons = (Array.isArray(row.adjustReasons) ? row.adjustReasons : []).filter(Boolean);\n  if (adj !== 0) items.push([t('rally.fin.soloAdjust', lang) + (reasons.length ? ' (' + reasons.join(', ') + ')' : ''), rallyFinSigned(adj, lang)]);\n  return (\n    <div style={{ display: 'flex', flexDirection: 'column', gap: 14 }}>\n      <div className=\"rally-fin-fade\" style={{\n        borderRadius: 22, padding: '22px 18px', textAlign: 'center', color: '#FFFFFF',\n        background: 'linear-gradient(135deg, var(--stamp), var(--primary-lt))', boxShadow: '0 4px 0 var(--stamp-deep)',\n      }}>\n        <div style={{ fontFamily: RAL_FIN_FD, fontWeight: 900, fontSize: 12, letterSpacing: 1.5, textTransform: 'uppercase', opacity: 0.92 }}>{t('rally.finale.soloKicker', lang)}</div>\n        <div style={{ marginTop: 4, fontFamily: RAL_FIN_FD, fontWeight: 800, fontSize: 15, overflowWrap: 'anywhere' }}>\n          {(row.emoji ? row.emoji + ' ' : '') + rallyFinTeamName(event, row, lang)}\n        </div>\n        {row.disqualified && (\n          <div style={{ marginTop: 6 }}>\n            <span style={{ display: 'inline-block', padding: '2px 10px', borderRadius: 999, background: 'rgba(0,0,0,0.25)', fontFamily: RAL_FIN_FD, fontWeight: 900, fontSize: 12 }}>\n              {t('rally.fin.dq', lang)}\n            </span>\n          </div>\n        )}\n        <div className=\"rally-fin-pop\" style={{ marginTop: 8, fontFamily: RAL_FIN_FM, fontWeight: 600, fontSize: 40, lineHeight: 1.1 }}>{row.total}</div>\n        <div style={{ marginTop: 4, fontFamily: RAL_FIN_FB, fontWeight: 500, fontSize: 15 }}>{rallyFinT('rally.finale.soloOf', lang, { max })}</div>\n      </div>\n      <div style={{ display: 'flex', flexDirection: 'column', gap: 6, padding: '12px 14px', borderRadius: 16, background: 'var(--surface)', border: '1px solid var(--border)' }}>\n        {items.map(([label, v]) => (\n          <div key={label} style={{ display: 'flex', alignItems: 'baseline', gap: 8 }}>\n            <span style={{ flex: 1, minWidth: 0, fontFamily: RAL_FIN_FB, fontWeight: 500, fontSize: 14.5, color: 'var(--ink-2)', overflowWrap: 'anywhere' }}>{label}</span>\n            <span style={{ fontFamily: RAL_FIN_FM, fontWeight: 600, fontSize: 16, color: 'var(--ink)' }}>{v}</span>\n          </div>\n        ))}\n        <div style={{ fontFamily: RAL_FIN_FB, fontWeight: 500, fontSize: 13, color: 'var(--ink-2)' }}>\n          {rallyFinT('rally.finale.soloCorrect', lang, { n: row.correct, total: ((event.tour && event.tour.stations) || []).filter(s => s && s.puzzle && s.puzzle.type !== 'estimate').length })}\n          {fl.retries > 0 ? ' · ' + rallyFinT('rally.finale.retries', lang, { n: fl.retries }) : ''}\n        </div>\n        {flags && <RallyFinFlagChips flags={fl} lang={lang} noSpeed={rallyFinNoSpeed(event)} />}\n      </div>\n    </div>\n  );\n}\n\nfunction RallyFinCeremony({ event, answers, finishes, lang, theme, myTeam, flags }) {\n  const st = window.RallyEngine.standings(event, answers, finishes, { revealEstimates: true });\n  const hasEst = rallyFinHasEstimates(event);\n  if (rallyFinIsSingle(event) && st.length === 1) {\n    return <RallyFinSolo event={event} row={st[0]} answers={answers} lang={lang} flags={flags} hasEst={hasEst} />;\n  }\n  // Ausgeschlossene Teams (rank null) stehen nicht auf dem Podest und gewinnen nie\n  const ranked = st.filter(s => !s.disqualified && s.rank != null);\n  const top = ranked.slice(0, 3);\n  const winners = rallyFinWinners(st);\n  const noSpeed = rallyFinNoSpeed(event);\n  const anyAdjust = st.some(s => Math.round(+s.adjust || 0) !== 0 || s.disqualified);\n  const order = top.length >= 3 ? [top[1], top[0], top[2]] : top.length === 2 ? [top[1], top[0]] : top;\n  const heights = { 1: 118, 2: 88, 3: 66 };\n\n  return (\n    <div style={{ display: 'flex', flexDirection: 'column', gap: 18 }}>\n      <div style={{ textAlign: 'center', paddingTop: 4 }}>\n        <div style={{ fontFamily: RAL_FIN_FD, fontWeight: 900, fontSize: 12, letterSpacing: 1.4, textTransform: 'uppercase', color: 'var(--stamp)' }}>{t('rally.finale.ceremony', lang)}</div>\n        <div className=\"rally-fin-fade\" style={{ marginTop: 4, fontFamily: RAL_FIN_FD, fontWeight: 900, fontSize: 26, lineHeight: 1.15, color: 'var(--ink)', overflowWrap: 'anywhere' }}>\n          {winners.length > 1\n            ? t('rally.finale.tie', lang)\n            : winners.length === 1 ? rallyFinT('rally.finale.winner', lang, { team: (winners[0].emoji ? winners[0].emoji + ' ' : '') + rallyFinTeamName(event, winners[0], lang) }) : t('rally.fin.noWinner', lang)}\n        </div>\n      </div>\n\n      {order.length > 0 && (\n        <div role=\"list\" aria-label={t('rally.finale.podium', lang)} style={{ display: 'flex', alignItems: 'flex-end', justifyContent: 'center', gap: 8, padding: '6px 0 0' }}>\n          {order.map((s, i) => {\n            const place = Math.min(3, s.rank);\n            const h = heights[place] || 60;\n            return (\n              <div role=\"listitem\" key={s.team} style={{ flex: 1, maxWidth: 120, minWidth: 0, display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n                <div className=\"rally-fin-pop\" style={{ animationDelay: (0.5 + (3 - place) * 0.35) + 's' }}>\n                  <RallyFinBadge team={s} size={place === 1 ? 54 : 44} />\n                </div>\n                <div style={{\n                  marginTop: 6, maxWidth: '100%', fontFamily: RAL_FIN_FD, fontWeight: 800, fontSize: 13.5, textAlign: 'center',\n                  overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', color: 'var(--ink)',\n                }}>{rallyFinTeamName(event, s, lang)}</div>\n                <div style={{ fontFamily: RAL_FIN_FM, fontWeight: 600, fontSize: 15, color: 'var(--ink-2)' }}>{s.total}</div>\n                <div className=\"rally-fin-rise\" style={{\n                  animationDelay: (i * 0.12) + 's',\n                  marginTop: 6, width: '100%', height: h, borderRadius: '14px 14px 4px 4px',\n                  background: place === 1 ? 'linear-gradient(180deg, var(--coin), var(--coin-dk))' : place === 2 ? 'linear-gradient(180deg, #D9D4CC, #A9A196)' : 'linear-gradient(180deg, #E0A36E, #B5753F)',\n                  boxShadow: '0 4px 12px rgba(0,0,0,0.15)', display: 'flex', alignItems: 'flex-start', justifyContent: 'center', paddingTop: 8,\n                  fontFamily: RAL_FIN_FD, fontWeight: 900, fontSize: 24, color: place === 1 ? '#3D2F00' : '#FFFFFF',\n                }}>{s.rank}</div>\n              </div>\n            );\n          })}\n        </div>\n      )}\n\n      <div>\n        <div style={{ fontFamily: RAL_FIN_FD, fontWeight: 900, fontSize: 17, marginBottom: 8, color: 'var(--ink)' }}>{t('rally.finale.allTeams', lang)}</div>\n        <RallyStandingsList standings={st} lang={lang} theme={theme} highlightTeam={myTeam} hideEstimates={!hasEst} flags={flags} answers={answers} noSpeed={noSpeed} event={event} />\n        <div style={{ marginTop: 8, fontFamily: RAL_FIN_FB, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)' }}>\n          {t(rallyFinLegendKey(hasEst, noSpeed), lang)}{anyAdjust ? ' ' + t('rally.fin.legendAdjust', lang) : ''}\n        </div>\n      </div>\n    </div>\n  );\n}\n\n// ── Finale-Ansicht ───────────────────────────────────────────────────────────\nfunction RallyFinaleView({ event, players, answers = [], finishes = [], lang = 'de', theme, isHost, myTeam, onNext, onEnd, flags }) {\n  rallyFinStyles();\n  const [busy, setBusy] = React.useState(false);\n  const [failed, setFailed] = React.useState(false);\n  if (!event) return null;\n  const stations = (event.tour && event.tour.stations) || [];\n  const est = stations.filter(s => s.puzzle && s.puzzle.type === 'estimate');\n  const n = est.length;\n  const step = event.revealStep || 0;\n  const ended = event.status === 'ended';\n  const ceremony = ended || n === 0 || step > n;\n  const host = !!isHost && !ended;\n  const who = rallyFinWho(event, players, !!isHost);\n  // „Spiel“ statt „Event“, wenn nur ein Team spielt oder der Gastgeber mitspielt\n  const gameWord = rallyFinIsSingle(event) || rallyFinIsPlayerMode(event);\n\n  const press = async (fn) => {\n    if (busy || !fn) return;\n    setBusy(true); setFailed(false);\n    try { await fn(); } catch (e) { console.warn('[RallyFinale]', e); setFailed(true); }\n    setBusy(false);\n  };\n\n  let body;\n  if (ceremony) body = <RallyFinCeremony event={event} answers={answers} finishes={finishes} lang={lang} theme={theme} myTeam={myTeam} flags={flags} />;\n  else if (step === 0) body = <RallyFinIntro count={n} lang={lang} isHost={host} who={who} />;\n  else {\n    const station = est[step - 1];\n    body = <RallyFinReveal key={station.id} event={event} station={station} no={step} total={n} answers={answers} lang={lang} />;\n  }\n\n  let action = null;\n  if (host) {\n    if (ceremony) {\n      action = <RallyButton size=\"lg\" full variant=\"primary\" disabled={busy} onClick={() => press(onEnd)} icon=\"🏁\">{t(gameWord ? 'rally.finale.endGame' : 'rally.finale.end', lang)}</RallyButton>;\n    } else {\n      const label = step === 0 ? t(n === 1 ? 'rally.finale.firstOne' : 'rally.finale.first', lang) : step === n ? t('rally.finale.toCeremony', lang) : t('rally.finale.next', lang);\n      action = <RallyButton size=\"lg\" full variant={step === n ? 'gold' : 'primary'} disabled={busy} onClick={() => press(onNext)}>{label}</RallyButton>;\n    }\n  } else if (!ended && !ceremony && step > 0) {\n    action = <div style={{ textAlign: 'center', fontFamily: RAL_FIN_FB, fontSize: 13.5, color: 'var(--ink-2)' }}>{rallyFinWhoText('rally.finale.waitHost', who, lang)}</div>;\n  } else if (!ended && ceremony && !host) {\n    action = <div style={{ textAlign: 'center', fontFamily: RAL_FIN_FB, fontSize: 13.5, color: 'var(--ink-2)' }}>{who.kind === 'lead' && gameWord ? t('rally.finale.waitEndGame', lang) : rallyFinWhoText('rally.finale.waitEnd', who, lang)}</div>;\n  } else if (ended) {\n    action = <div style={{ textAlign: 'center' }}><RallyChip icon=\"✓\">{t(gameWord ? 'rally.finale.endedGame' : 'rally.finale.ended', lang)}</RallyChip></div>;\n  }\n\n  return (\n    <div style={{ display: 'flex', flexDirection: 'column', gap: 18 }}>\n      {!ceremony && n > 0 && (\n        <div aria-hidden=\"true\" style={{ display: 'flex', gap: 6, justifyContent: 'center' }}>\n          {est.map((s, i) => (\n            <span key={s.id} style={{ width: i + 1 === step ? 22 : 8, height: 8, borderRadius: 999, background: i + 1 <= step ? 'var(--stamp)' : 'var(--border-2)', transition: 'width 0.2s' }} />\n          ))}\n        </div>\n      )}\n      {body}\n      {action}\n      {failed && host && (\n        <div role=\"alert\" style={{ textAlign: 'center', fontFamily: RAL_FIN_FB, fontSize: 13.5, color: 'var(--stamp)' }}>\n          {t('rally.finale.actionFailed', lang)}\n        </div>\n      )}\n    </div>\n  );\n}\n\nwindow.RallyStandingsList = RallyStandingsList;\nwindow.RallyFinaleView = RallyFinaleView;\n"],
  "mappings": "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",
  "names": ["key", "lang", "vars", "s", "k", "n", "unit", "digits", "event", "no", "tm", "row", "E", "rows", "r", "v", "answers", "stationId", "out", "a", "cur", "hasEst", "noSpeed", "players", "team", "at", "ct", "last", "honestCount", "answered", "pace", "suspicious", "reason", "retries", "st", "max", "w", "flags", "explain", "chip", "warn", "text", "size", "standings", "theme", "highlightTeam", "hideEstimates", "mine", "dq", "top", "fl", "parts", "why", "adj", "reasons", "total", "name", "isHost", "host", "base", "who", "suffix", "count", "station", "reduced", "phase", "setPhase", "shown", "setShown", "puzzle", "truth", "t1", "t2", "raf", "t0", "step", "now", "first", "byTeam", "ranking", "rankByTeam", "noGuess", "values", "maxV", "pct", "b", "i", "items", "label", "finishes", "myTeam", "winners", "anyAdjust", "order", "heights", "place", "h", "onNext", "onEnd", "busy", "setBusy", "failed", "setFailed", "est", "ended", "ceremony", "gameWord", "press", "fn", "e", "body", "action"]
}
