{
  "version": 3,
  "sources": ["rally-library.jsx"],
  "sourcesContent": ["/* FACT Rallye: Community-Bibliothek (Spec 06_Planung/specs/2026-10-17-rallye-organizer-design.md §9)\n *\n * Exporte auf window:\n *   RallyLibraryView({ theme, lang, userId, user, ownerId, onOpenTour(tourId), onCreateEvent(tourId),\n *                      openRequest?: { code?, id?, nonce } | { filterOnly: true, pack?, nonce }, onRequestHandled?, onDetailChange?(open), showToast? })\n *   RallyLibDetail({ template, theme, lang, ownerId, onBack, onOpenTour, onCreateEvent, showToast })\n *   RallyPublishSheet({ open, tour, lang, theme, user, ownerId, onClose, onPublished(tpl), onUnpublished(), onViewInLibrary(tpl), showToast })\n *   RallyLibNudge({ tour, onPublish, onDismiss?, lang })\n *   RallyLibRate({ tour, lang, onRated?, showToast? })\n *\n * Engine (RallyEngine.PACK_KEYS, OFFICIAL_TEMPLATES, officialTemplate, filterLibrary, sortLibrary, ratingOf,\n * prepareForPublish, tourFromTemplate) und Store (publishTemplate, unpublishTemplate, listLibrary, listMyTemplates,\n * getTemplate, getTemplateByCode, useTemplate, rateTemplate, reportTemplate) werden immer mit typeof-Prüfung\n * aufgerufen, damit die Oberfläche nie abstürzt, wenn etwas fehlt.\n *\n * Globaler Babel-Scope: alle Top-Level-Namen beginnen mit RallyLib / rallyLib / RAL_LIB_\n * (plus die vorgegebenen Exporte RallyLibraryView und RallyPublishSheet).\n * Strings: rally-strings-lib.jsx (rally.lib.*). Lädt nach rally-finale.jsx, vor rally-organizer.jsx.\n */\n\nconst RAL_LIB_PACKS = [\n  { key: 'kids', emoji: '🎂' },\n  { key: 'school', emoji: '🎒' },\n  { key: 'jga', emoji: '🥂' },\n  { key: 'beer', emoji: '🍺' },\n  { key: 'history', emoji: '🏛️' },\n];\nconst RAL_LIB_AUDIENCES = ['kids', 'school', 'adults', 'jga'];\nconst RAL_LIB_DURATIONS = [60, 90, 120];\nconst RAL_LIB_DESC_MAX = 400;\nconst RAL_LIB_FILTER_KEY = 'fact_rally_lib_filters';\nconst RAL_LIB_VOTES_KEY = 'fact_rally_lib_votes';\nconst RAL_LIB_REPORTED_KEY = 'fact_rally_lib_reported';\nconst RAL_LIB_NUDGE_OFF_KEY = 'fact_rally_lib_nudge_off';\nconst RAL_LIB_ANON = ['anonym', 'anonymous', ''];\nconst RAL_LIB_KIND_COLOR = { fact: '#E8380D', custom: '#0F9F8C', info: '#3B82F6' };\nconst RAL_LIB_REPORT_REASONS = ['inappropriate', 'unsafe', 'private'];\n\n// ── Helfer ──────────────────────────────────────────────────────────────────\nfunction rallyLibT(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}\nfunction rallyLibFn(obj, name) {\n  return obj && typeof obj[name] === 'function' ? obj[name].bind(obj) : null;\n}\n// Pro Gerät/Konto getrennt (wichtig für ?rallydevice=NAME, mehrere simulierte Geräte in einem Browser)\nfunction rallyLibDevKey(key) {\n  let dev = '';\n  try { const me = window.RallyStore && window.RallyStore.me && window.RallyStore.me(); dev = (me && me.deviceId) || ''; } catch (e) {}\n  return dev ? key + ':' + dev : key;\n}\nfunction rallyLibLsGet(key, fallback) {\n  try { const v = JSON.parse(localStorage.getItem(key) || 'null'); return v == null ? fallback : v; } catch (e) { return fallback; }\n}\nfunction rallyLibLsSet(key, v) {\n  try { localStorage.setItem(key, JSON.stringify(v)); } catch (e) {}\n}\nfunction rallyLibNb(str) {\n  return String(str || '').replace(/ /g, ' ');\n}\nfunction rallyLibFmtDate(iso, lang) {\n  if (!iso) return '';\n  const d = new Date(iso);\n  if (isNaN(d.getTime())) return '';\n  return d.toLocaleDateString(lang === 'en' ? 'en-GB' : 'de-DE', { day: 'numeric', month: 'short', year: 'numeric' });\n}\nfunction rallyLibCopy(text) {\n  const fallback = () => {\n    try {\n      const ta = document.createElement('textarea');\n      ta.value = text;\n      ta.setAttribute('readonly', '');\n      ta.style.cssText = 'position:fixed;top:-1000px;opacity:0;';\n      document.body.appendChild(ta);\n      ta.select();\n      const ok = document.execCommand('copy');\n      document.body.removeChild(ta);\n      return ok;\n    } catch (e) { return false; }\n  };\n  if (navigator.clipboard && navigator.clipboard.writeText) {\n    return navigator.clipboard.writeText(text).then(() => true).catch(() => fallback());\n  }\n  return Promise.resolve(fallback());\n}\nfunction rallyLibTplUrl(code) {\n  const loc = window.location;\n  return `${loc.origin}${loc.pathname}?rallytpl=${encodeURIComponent(String(code || '').toUpperCase())}`;\n}\nfunction rallyLibCleanCode(v) {\n  return String(v || '').toUpperCase().replace(/[^A-Z0-9]/g, '').slice(0, 6);\n}\nfunction rallyLibTitle(tpl, lang) {\n  return rallyPickText(tpl && tpl.title, lang) || t('rally.org.tour.untitled', lang);\n}\nfunction rallyLibIsAnon(name) {\n  return RAL_LIB_ANON.indexOf(String(name || '').trim().toLowerCase()) >= 0;\n}\nfunction rallyLibAuthor(tpl, lang) {\n  if (!tpl) return '';\n  if (tpl.official) return t('rally.lib.official', lang);\n  return rallyLibIsAnon(tpl.authorName) ? t('rally.lib.anonymous', lang) : String(tpl.authorName);\n}\n// Sprache der Vorlage ('de' | 'en' | null)\nfunction rallyLibLang(tpl) {\n  const l = tpl && (tpl.lang || (tpl.tour && tpl.tour.lang));\n  return l === 'de' || l === 'en' ? l : null;\n}\n// Woher stammt die Vorlage? basedOn setzt das Veröffentlichen-Sheet aus tour.origin; ältere Vorlagen haben es nicht.\nfunction rallyLibBasedOn(tpl) {\n  const b = tpl && (tpl.basedOn || (tpl.tour && (tpl.tour.basedOn || tpl.tour.origin)));\n  if (!b || !(b.title || b.templateId)) return null;\n  return b;\n}\nfunction rallyLibBasedOnText(b, lang) {\n  if (!b) return '';\n  const official = String(b.templateId || '').indexOf('official-') === 0;\n  const title = b.title || t('rally.org.tour.untitled', lang);\n  if (official) return rallyLibT('rally.lib.detail.basedOnOfficial', lang, { title });\n  const name = b.authorName && !rallyLibIsAnon(b.authorName) ? String(b.authorName) : '';\n  return name ? rallyLibT('rally.lib.detail.basedOnBy', lang, { title, name }) : rallyLibT('rally.lib.detail.basedOn', lang, { title });\n}\n// Sprache der Tour grob schätzen (Umlaute, häufige deutsche Wörter), damit eine deutsche Tour\n// in der englischen Oberfläche nicht versehentlich als englisch veröffentlicht wird\nfunction rallyLibGuessLang(tour) {\n  if (!tour) return null;\n  const txt = ' ' + [tour.title].concat((tour.stations || []).map(st => {\n    const p = (st && st.puzzle) || {};\n    return [st && st.title, typeof p.question === 'string' ? p.question : ''].join(' ');\n  })).join(' ').toLowerCase() + ' ';\n  const de = (txt.match(/[äöüß]|\\s(der|die|das|und|wie|welche[rs]?|wo|ist|nicht|ein|eine|mit)\\s/g) || []).length;\n  const en = (txt.match(/\\s(the|and|how|which|what|where|is|not|a|an|with|of)\\s/g) || []).length;\n  if (de === 0 && en === 0) return null;\n  return de >= en ? 'de' : 'en';\n}\n// Einfache Plural-Hilfe: key1 für genau 1, sonst key\nfunction rallyLibPl(n, key, lang, vars) {\n  return rallyLibT(+n === 1 ? key + '1' : key, lang, Object.assign({ n }, vars || {}));\n}\n// Eigene Stationen (Orte, die die Organisatorin selbst gesetzt hat)\nfunction rallyLibOwnStations(tour) {\n  return ((tour && tour.stations) || []).filter(s => s && s.kind === 'custom');\n}\n// Grobe Suche nach privaten Daten (Telefon, E-Mail, Hausnummer) in Titeln, Fragen und Antworten\nconst RAL_LIB_PRIVATE_RES = [\n  { key: 'phone', re: /(\\+|\\b0)\\d[\\d \\/-]{6,}\\d/ },\n  { key: 'email', re: /[^\\s@]+@[^\\s@]+\\.[a-z]{2,}/i },\n  { key: 'address', re: /(stra(ß|ss)e|str\\.|weg|gasse|street|road)\\s+\\d{1,4}\\s?[a-z]?\\b/i },\n];\nfunction rallyLibPrivateHits(tour) {\n  const out = [];\n  if (!tour) return out;\n  const textOf = (v) => {\n    if (v == null) return '';\n    if (typeof v === 'object') return Object.keys(v).map(k => textOf(v[k])).join(' ');\n    return String(v);\n  };\n  const check = (txt) => RAL_LIB_PRIVATE_RES.filter(x => x.re.test(txt)).map(x => x.key);\n  const tk = check(textOf(tour.title));\n  if (tk.length) out.push({ no: 0, kinds: tk });\n  (tour.stations || []).forEach((st, i) => {\n    if (!st || st.excludeFromPublish) return;\n    const p = st.puzzle || {};\n    const kinds = check([st.title, st.text, p.question, p.answer, p.options, p.accept].map(textOf).join(' '));\n    if (kinds.length) out.push({ no: i + 1, kinds });\n  });\n  return out;\n}\n\nfunction RallyLibLangBadge({ tpl, lang }) {\n  const l = rallyLibLang(tpl);\n  // Offizielle Vorlagen entstehen immer in der Sprache der Oberfläche, dort wäre das Kürzel nur Rauschen\n  if (!l || (tpl.official && l === lang)) return null;\n  return (\n    <span role=\"img\" aria-label={rallyLibT('rally.lib.langAria', lang, { lang: t('rally.lib.lang.' + l, lang) })} style={{\n      display: 'inline-flex', alignItems: 'center', padding: '2px 8px', borderRadius: 7,\n      border: '1.5px solid ' + (l !== lang ? 'var(--stamp)' : 'var(--border-2)'),\n      color: l !== lang ? 'var(--stamp)' : 'var(--ink-2)', background: 'var(--surface)',\n      fontFamily: RAL_FONT_M, fontWeight: 600, fontSize: 11.5, letterSpacing: '0.08em', lineHeight: 1.4, whiteSpace: 'nowrap',\n    }}>{l.toUpperCase()}</span>\n  );\n}\n\nfunction rallyLibRating(tpl) {\n  const E = window.RallyEngine;\n  const fn = rallyLibFn(E, 'ratingOf');\n  if (fn) { try { return fn(tpl); } catch (e) {} }\n  const c = Number(tpl && tpl.ratingCount) || 0;\n  return { avg: c ? (Number(tpl.ratingSum) || 0) / c : null, count: c };\n}\nfunction rallyLibEstimate(tpl) {\n  // Kennzahlen aus der Vorlage; fehlen sie, aus der Tour schätzen\n  let dur = tpl && tpl.durationMin, dist = tpl && tpl.distanceM, n = tpl && tpl.stationCount;\n  if ((dur == null || dist == null || n == null) && tpl && tpl.tour && window.RallyEngine) {\n    try {\n      const est = window.RallyEngine.estimateTour(tpl.tour);\n      if (dur == null) dur = est.totalMin;\n      if (dist == null) dist = est.distanceM;\n      if (n == null) n = est.stations;\n    } catch (e) {}\n  }\n  return { durationMin: dur, distanceM: dist, stations: n != null ? n : ((tpl && tpl.tour && tpl.tour.stations) || []).length };\n}\nfunction rallyLibFilter(list, f) {\n  const fn = rallyLibFn(window.RallyEngine, 'filterLibrary');\n  if (fn) { try { return fn(list, f); } catch (e) { console.warn('[RallyLib] filterLibrary', e); } }\n  return list.filter(tp => tp && !tp.hidden\n    && (!f.pack || (tp.packs || []).indexOf(f.pack) >= 0)\n    && (!f.audience || tp.audience === f.audience)\n    && (!f.maxDuration || (Number(rallyLibEstimate(tp).durationMin) || 0) <= f.maxDuration));\n}\nfunction rallyLibSort(list, sort) {\n  const fn = rallyLibFn(window.RallyEngine, 'sortLibrary');\n  if (fn) { try { return fn(list, sort); } catch (e) { console.warn('[RallyLib] sortLibrary', e); } }\n  const arr = list.slice();\n  if (sort === 'new') {\n    arr.sort((a, b) => String(b.updatedAt || b.createdAt || '').localeCompare(String(a.updatedAt || a.createdAt || '')));\n  } else {\n    arr.sort((a, b) => ((b.uses || 0) - (a.uses || 0)) || ((rallyLibRating(b).avg || 0) - (rallyLibRating(a).avg || 0)));\n  }\n  return arr;\n}\nfunction rallyLibOfficialList(lang) {\n  const E = window.RallyEngine;\n  if (!E || !Array.isArray(E.OFFICIAL_TEMPLATES) || typeof E.officialTemplate !== 'function') return [];\n  const facts = Array.isArray(window.FACTS) ? window.FACTS : [];\n  const out = [];\n  E.OFFICIAL_TEMPLATES.forEach(def => {\n    try { const tp = E.officialTemplate(def, facts, lang); if (tp) out.push(tp); }\n    catch (e) { console.warn('[RallyLib] officialTemplate', def && def.key, e); }\n  });\n  return out;\n}\nfunction rallyLibUseFactsVersion() {\n  const [v, setV] = React.useState(0);\n  React.useEffect(() => {\n    const fn = () => setV(x => x + 1);\n    window.addEventListener('facts-updated', fn);\n    return () => window.removeEventListener('facts-updated', fn);\n  }, []);\n  return v;\n}\n// Pakete, die zur Tour passen (Vorbelegung im Veröffentlichen-Sheet)\nfunction rallyLibDefaultPacks(tour) {\n  const out = [];\n  if (!tour) return out;\n  if (tour.audience === 'kids' || tour.audience === 'school' || tour.audience === 'jga') out.push(tour.audience);\n  const themes = (tour.themes || []).map(String);\n  if (themes.some(x => /hist|arch/i.test(x))) out.push('history');\n  if (/bier|beer|brau|brew/i.test(String(tour.title || ''))) out.push('beer');\n  return out;\n}\nfunction rallyLibMarkers(tour, lang) {\n  const out = [];\n  if (!tour) return out;\n  if (tour.start) out.push({ id: '__start', kind: 'start', lat: tour.start.lat, lng: tour.start.lng, label: tour.start.label });\n  if (tour.finish) out.push({ id: '__finish', kind: 'finish', lat: tour.finish.lat, lng: tour.finish.lng, label: tour.finish.label });\n  (tour.stations || []).forEach((s, i) => {\n    if (!isFinite(s.lat) || !isFinite(s.lng)) return;\n    out.push({ id: s.id || ('s' + i), kind: 'station', lat: s.lat, lng: s.lng, label: String(i + 1), color: RAL_LIB_KIND_COLOR[s.kind] || RAL_LIB_KIND_COLOR.fact, title: s.title });\n  });\n  return out;\n}\nfunction rallyLibLine(tour) {\n  if (!tour || !tour.start) return null;\n  const pts = [[tour.start.lng, tour.start.lat]];\n  (tour.stations || []).forEach(s => { if (isFinite(s.lat) && isFinite(s.lng)) pts.push([s.lng, s.lat]); });\n  const end = tour.finish || tour.start;\n  pts.push([end.lng, end.lat]);\n  return pts.length >= 2 ? pts : null;\n}\nfunction rallyLibQType(st) {\n  if (!st) return 'none';\n  if (st.kind === 'info') return 'info';\n  return st.puzzle && st.puzzle.type ? st.puzzle.type : 'none';\n}\nfunction rallyLibScrollTop() {\n  try { const sc = document.querySelector('.rally-org .rally-scroll'); if (sc) sc.scrollTop = 0; } catch (e) {}\n}\n\n// ── Kleine Bausteine ────────────────────────────────────────────────────────\nfunction RallyLibStars({ avg, count, lang, size = 14 }) {\n  if (avg == null || !count) {\n    return <span style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, color: 'var(--ink-3)' }}>{t('rally.lib.noRating', lang)}</span>;\n  }\n  const full = Math.round(avg);\n  return (\n    <span role=\"img\" aria-label={rallyLibT(+count === 1 ? 'rally.lib.ratingAria1' : 'rally.lib.ratingAria', lang, { avg: rallyFmtNum(avg, lang, 1), count })}\n      style={{ display: 'inline-flex', alignItems: 'center', gap: 4, whiteSpace: 'nowrap' }}>\n      <span aria-hidden=\"true\" style={{ color: 'var(--coin-dk, #C9A00F)', fontSize: size, letterSpacing: 1 }}>\n        {'★★★★★'.slice(0, full)}<span style={{ color: 'var(--border-2)' }}>{'★★★★★'.slice(full)}</span>\n      </span>\n      <span aria-hidden=\"true\" style={{ fontFamily: RAL_FONT_M, fontWeight: 600, fontSize: 12, color: 'var(--ink-2)' }}>\n        {rallyFmtNum(avg, lang, 1)} ({count})\n      </span>\n    </span>\n  );\n}\n\nfunction RallyLibOfficialBadge({ lang }) {\n  return (\n    <span style={{\n      display: 'inline-flex', alignItems: 'center', gap: 5, padding: '3px 10px', borderRadius: 999,\n      background: 'var(--coin)', color: '#3D2F00', fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 12,\n      letterSpacing: 0.3, whiteSpace: 'nowrap', boxShadow: '0 2px 0 var(--coin-dk, #C9A00F)',\n    }}><span aria-hidden=\"true\">✦</span>{t('rally.lib.official', lang)}</span>\n  );\n}\n\nfunction RallyLibHeader({ kicker, title, onBack, lang }) {\n  return (\n    <div style={{\n      margin: '8px 16px 0', borderRadius: 22, position: 'relative', overflow: 'hidden',\n      background: 'linear-gradient(135deg, var(--stamp-deep) 0%, var(--stamp) 60%, var(--primary-lt) 110%)',\n      padding: '12px 14px 14px', color: '#FFFFFF',\n      boxShadow: '0 12px 28px rgba(168,37,8,0.28), inset 0 1px 0 rgba(255,255,255,0.12)',\n    }}>\n      <div style={{ position: 'relative', display: 'flex', alignItems: 'center', gap: 10 }}>\n        {onBack && (\n          <button type=\"button\" className=\"rally-tap\" onClick={onBack} aria-label={t('rally.app.back', lang)} style={{\n            width: 44, height: 44, borderRadius: 12, flexShrink: 0, padding: 0, cursor: 'pointer',\n            background: 'rgba(0,0,0,0.22)', border: '1px solid rgba(255,255,255,0.22)',\n            display: 'flex', alignItems: 'center', justifyContent: 'center',\n          }}>\n            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" strokeWidth=\"2.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><path d=\"M14 6l-6 6 6 6\" /></svg>\n          </button>\n        )}\n        <div style={{ flex: 1, minWidth: 0 }}>\n          {kicker && (\n            <div style={{ fontFamily: RAL_FONT_M, fontSize: 12, fontWeight: 600, letterSpacing: '0.18em', textTransform: 'uppercase', color: 'rgba(255,255,255,0.78)' }}>{kicker}</div>\n          )}\n          <div style={{\n            fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 21, lineHeight: 1.15, marginTop: 2, overflowWrap: 'anywhere',\n            overflow: 'hidden', display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical',\n          }}>{title}</div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nfunction RallyLibCheck({ checked, onChange, label, hint }) {\n  return (\n    <button type=\"button\" role=\"checkbox\" aria-checked={!!checked} className=\"rally-tap\" onClick={() => onChange(!checked)} style={{\n      display: 'flex', alignItems: 'flex-start', gap: 12, width: '100%', minHeight: 48, padding: '11px 12px',\n      borderRadius: 14, border: '1.5px solid ' + (checked ? 'var(--stamp)' : 'var(--border-2)'),\n      background: checked ? 'var(--stamp-soft)' : 'var(--surface-2)', cursor: 'pointer', textAlign: 'left', color: 'var(--ink)',\n    }}>\n      <span aria-hidden=\"true\" style={{\n        width: 24, height: 24, borderRadius: 7, flexShrink: 0, marginTop: 1,\n        background: checked ? 'var(--stamp)' : 'var(--surface)', border: checked ? 'none' : '2px solid var(--border-2)',\n        display: 'flex', alignItems: 'center', justifyContent: 'center', boxSizing: 'border-box',\n      }}>\n        {checked && <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M3 8.5l3.2 3L13 4.5\" fill=\"none\" stroke=\"#fff\" strokeWidth=\"2.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg>}\n      </span>\n      <span style={{ flex: 1, minWidth: 0 }}>\n        <span style={{ display: 'block', fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15, lineHeight: 1.35 }}>{label}</span>\n        {hint && <span style={{ display: 'block', marginTop: 2, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)' }}>{hint}</span>}\n      </span>\n    </button>\n  );\n}\n\nfunction RallyLibRadio({ active, onClick, icon, title, body }) {\n  return (\n    <button type=\"button\" role=\"radio\" aria-checked={!!active} className=\"rally-tap\" onClick={onClick} style={{\n      display: 'flex', alignItems: 'flex-start', gap: 12, width: '100%', padding: '12px 14px', textAlign: 'left',\n      borderRadius: 14, cursor: 'pointer', minHeight: 56, color: 'var(--ink)',\n      background: active ? 'var(--stamp-soft)' : 'var(--surface)',\n      border: active ? '1.5px solid var(--stamp)' : '1.5px solid var(--border-2)',\n    }}>\n      <span aria-hidden=\"true\" style={{\n        width: 22, height: 22, borderRadius: '50%', flexShrink: 0, marginTop: 1,\n        border: active ? '7px solid var(--stamp)' : '2px solid var(--border-2)', background: 'var(--surface)', boxSizing: 'border-box',\n      }} />\n      <span style={{ flex: 1, minWidth: 0 }}>\n        <span style={{ display: 'block', fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15 }}>\n          {icon && <span aria-hidden=\"true\" style={{ marginRight: 6 }}>{icon}</span>}{title}\n        </span>\n        {body && <span style={{ display: 'block', marginTop: 3, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.45, color: 'var(--ink-2)' }}>{body}</span>}\n      </span>\n    </button>\n  );\n}\n\nfunction RallyLibNote({ tone = 'info', icon, title, children, style }) {\n  const map = {\n    info: { bg: 'var(--surface-2)', bd: 'var(--border)', tc: 'var(--ink)' },\n    warn: { bg: 'var(--coin-soft)', bd: 'rgba(245,197,24,0.35)', tc: 'var(--ink)' },\n    error: { bg: 'var(--stamp-soft)', bd: 'rgba(232,56,13,0.35)', tc: 'var(--stamp)' },\n    ok: { bg: 'rgba(34,197,94,0.12)', bd: 'rgba(34,197,94,0.30)', tc: 'var(--ink)' },\n  }[tone] || {};\n  return (\n    <div role={tone === 'error' ? 'alert' : undefined} style={{\n      display: 'flex', gap: 10, alignItems: 'flex-start', padding: '11px 13px', borderRadius: 14,\n      background: map.bg, border: '1px solid ' + map.bd, ...style,\n    }}>\n      {icon && <span aria-hidden=\"true\" style={{ fontSize: 17, lineHeight: '22px' }}>{icon}</span>}\n      <div style={{ flex: 1, minWidth: 0 }}>\n        {title && <div style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 14.5, lineHeight: 1.35, color: map.tc }}>{title}</div>}\n        {children && <div style={{ marginTop: title ? 2 : 0, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.5, color: 'var(--ink-2)' }}>{children}</div>}\n      </div>\n    </div>\n  );\n}\n\nfunction RallyLibSectionTitle({ children, hint }) {\n  return (\n    <div>\n      <h2 style={{ margin: 0, fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 18, lineHeight: 1.2, color: 'var(--ink)' }}>{children}</h2>\n      {hint && <div style={{ marginTop: 3, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.45, color: 'var(--ink-2)' }}>{hint}</div>}\n    </div>\n  );\n}\n\n// ── Karte in der Bibliotheksliste ───────────────────────────────────────────\nfunction RallyLibCard({ tpl, lang, theme, onOpen, isMine }) {\n  const est = rallyLibEstimate(tpl);\n  const r = rallyLibRating(tpl);\n  const title = rallyLibTitle(tpl, lang);\n  const meta = [\n    est.durationMin != null ? rallyFmtMin(est.durationMin, lang) : null,\n    est.distanceM != null ? rallyFmtDist(est.distanceM, lang) : null,\n    rallyLibPl(est.stations, 'rally.lib.stations', lang),\n  ].filter(Boolean).map(rallyLibNb).join(' · ');\n  return (\n    <RallyCard theme={theme} onClick={onOpen} padding={14} accent={tpl.official ? 'var(--coin)' : undefined}\n      ariaLabel={rallyLibT('rally.lib.openAria', lang, { title })}>\n      <div style={{ display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap', minHeight: 22 }}>\n        {tpl.official ? <RallyLibOfficialBadge lang={lang} /> : (\n          <span style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, color: 'var(--ink-2)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: '100%' }}>\n            {rallyLibT('rally.lib.by', lang, { name: rallyLibAuthor(tpl, lang) })}\n          </span>\n        )}\n        {isMine && <RallyChip>{t('rally.lib.yours', lang)}</RallyChip>}\n        {isMine && (+tpl.reports || 0) > 0 && (\n          <RallyChip icon=\"⚑\" active color=\"var(--coin-dk, #C9A00F)\">{rallyLibPl(+tpl.reports, 'rally.lib.own.flag', lang)}</RallyChip>\n        )}\n        <RallyLibLangBadge tpl={tpl} lang={lang} />\n        <span style={{ marginLeft: 'auto', display: 'inline-flex', gap: 2 }} aria-hidden=\"true\">\n          {(tpl.packs || []).map(k => { const p = RAL_LIB_PACKS.find(x => x.key === k); return p ? <span key={k} style={{ fontSize: 15 }}>{p.emoji}</span> : null; })}\n        </span>\n      </div>\n      <div style={{ marginTop: 6, fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 17, lineHeight: 1.25, overflowWrap: 'anywhere' }}>{title}</div>\n      <div style={{ marginTop: 4, fontFamily: RAL_FONT_M, fontSize: 12, letterSpacing: '0.04em', color: 'var(--ink-2)' }}>{meta}</div>\n      {(r.count > 0 || (tpl.uses || 0) > 0) && <div style={{ marginTop: 8, display: 'flex', alignItems: 'center', gap: 10, flexWrap: 'wrap' }}>\n        {r.count > 0 && <RallyLibStars avg={r.avg} count={r.count} lang={lang} />}\n        {(tpl.uses || 0) > 0 && (\n          <span style={{ fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-2)', whiteSpace: 'nowrap' }}>\n            {rallyLibPl(tpl.uses, 'rally.lib.uses', lang)}\n          </span>\n        )}\n      </div>}\n    </RallyCard>\n  );\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// Bibliothek (Reiter „Entdecken“)\n// ═════════════════════════════════════════════════════════════════════════════\nfunction RallyLibraryView({ theme, lang, userId, user, ownerId, onOpenTour, onCreateEvent, openRequest, onRequestHandled, onDetailChange, showToast, onNeedAccount }) {\n  rallyEnsureStyles();\n  const [ownToast, ownShow] = useRallyToast();\n  const toast = showToast || ownShow;\n  const factsV = rallyLibUseFactsVersion();\n  const official = React.useMemo(() => rallyLibOfficialList(lang), [factsV, lang]); // eslint-disable-line react-hooks/exhaustive-deps\n  // Filter starten bei jedem Öffnen bei „Alle“ und „Beliebt“ (FACT-Auswahl zuerst). Früher gemerkte\n  // Filter ließen die Bibliothek beim nächsten Besuch winzig aussehen, darum wird nichts mehr gespeichert.\n  const [pack, setPack] = React.useState(null);\n  const [audience, setAudience] = React.useState(null);\n  const [maxDur, setMaxDur] = React.useState(null);\n  const [sort, setSort] = React.useState('popular');\n  const [remote, setRemote] = React.useState(null);  // null = lädt\n  const [loadFailed, setLoadFailed] = React.useState(false);\n  const [filterOpen, setFilterOpen] = React.useState(false);\n  const [codeTxt, setCodeTxt] = React.useState('');\n  const [codeBusy, setCodeBusy] = React.useState(false);\n  const [detail, setDetail] = React.useState(null);\n  const packsRef = React.useRef(null);\n  const S = window.RallyStore;\n\n  React.useEffect(() => { try { localStorage.removeItem(RAL_LIB_FILTER_KEY); } catch (e) {} }, []);\n\n  const load = React.useCallback(async () => {\n    const list = rallyLibFn(S, 'listLibrary');\n    if (!list) { setRemote([]); return; }\n    try { const res = await list({ sort }); setRemote(Array.isArray(res) ? res : []); setLoadFailed(false); }\n    catch (e) { console.warn('[RallyLib] listLibrary', e); setRemote([]); setLoadFailed(true); }\n  }, [sort]); // eslint-disable-line react-hooks/exhaustive-deps\n  React.useEffect(() => { load(); }, [load]);\n\n  const openDetail = (tpl) => {\n    setDetail(tpl);\n    if (onDetailChange) onDetailChange(!!tpl);\n    setTimeout(rallyLibScrollTop, 0);\n  };\n  const closeDetail = () => { openDetail(null); load(); };\n\n  const findOfficial = (id) => official.find(o => o.id === id) || rallyLibOfficialList(lang).find(o => o.id === id) || null;\n\n  const resolve = async ({ code, id }) => {\n    if (id && String(id).indexOf('official-') === 0) return findOfficial(id);\n    if (code) {\n      const fn = rallyLibFn(S, 'getTemplateByCode');\n      return fn ? await fn(rallyLibCleanCode(code)) : null;\n    }\n    if (id) {\n      const fn = rallyLibFn(S, 'getTemplate');\n      return fn ? await fn(id) : null;\n    }\n    return null;\n  };\n\n  // Deep Link (?rallytpl=CODE) und „In der Bibliothek ansehen“\n  // Kein Cleanup pro Lauf: onRequestHandled setzt openRequest zurück und löst den Effect erneut aus\n  const mountedRef = React.useRef(true);\n  React.useEffect(() => { mountedRef.current = true; return () => { mountedRef.current = false; }; }, []);\n  React.useEffect(() => {\n    // { filterOnly, pack }: Liste auf ein Paket filtern (aus dem Tour-Assistenten), kein Detail öffnen\n    if (openRequest && openRequest.filterOnly) {\n      if (onRequestHandled) onRequestHandled();\n      setPack(openRequest.pack || null); setAudience(null); setMaxDur(null);\n      // Gewähltes Paket in der waagrechten Chip-Leiste sichtbar machen\n      setTimeout(() => { try { const g = packsRef.current; const a = g && g.querySelector('[aria-pressed=\"true\"]'); if (a) g.scrollLeft = Math.max(0, a.getBoundingClientRect().left - g.getBoundingClientRect().left + g.scrollLeft - 16); } catch (e) {} }, 80);\n      return;\n    }\n    if (!openRequest || (!openRequest.code && !openRequest.id)) return;\n    const req = openRequest;\n    if (onRequestHandled) onRequestHandled();\n    resolve(req).then(tpl => {\n      if (!mountedRef.current) return;\n      if (tpl && !tpl.hidden) openDetail(tpl);\n      else toast(rallyLibT(req.code ? 'rally.lib.code.notFound' : 'rally.lib.code.gone', lang, { code: rallyLibCleanCode(req.code || '') }), 3600);\n    }).catch(() => mountedRef.current && toast(t('rally.lib.code.lookupFailed', lang), 3200));\n  }, [openRequest && openRequest.nonce]); // eslint-disable-line react-hooks/exhaustive-deps\n\n  const submitCode = async () => {\n    const code = rallyLibCleanCode(codeTxt);\n    if (code.length !== 6) { toast(t('rally.lib.code.invalid', lang)); return; }\n    setCodeBusy(true);\n    try {\n      const tpl = await resolve({ code });\n      if (tpl && !tpl.hidden) { setCodeTxt(''); openDetail(tpl); }\n      else toast(rallyLibT('rally.lib.code.notFound', lang, { code }), 3600);\n    } catch (e) { toast(t('rally.lib.code.lookupFailed', lang)); }\n    setCodeBusy(false);\n  };\n\n  if (detail) {\n    return (\n      <div>\n        <RallyLibDetail template={detail} theme={theme} lang={lang} ownerId={ownerId} onBack={closeDetail}\n          onOpenTour={onOpenTour} onCreateEvent={onCreateEvent} showToast={toast} onNeedAccount={onNeedAccount} />\n        {!showToast && <RallyToast message={ownToast} bottom={176} />}\n      </div>\n    );\n  }\n\n  const filters = { pack, audience, maxDuration: maxDur };\n  const merged = [];\n  const seen = {};\n  official.concat(remote || []).forEach(tp => { if (tp && tp.id != null && !seen[tp.id]) { seen[tp.id] = 1; merged.push(tp); } });\n  // Eigene Sprache zuerst: Wer die App auf Englisch nutzt, sah oben lauter deutsche Gemeinschafts-Vorlagen (Funktionstest 25.10.)\n  const sorted = rallyLibSort(rallyLibFilter(merged, filters), sort);\n  const isOtherLang = (tp) => { const l = rallyLibLang(tp); return !!l && l !== lang; };\n  const list = sorted.filter(tp => !isOtherLang(tp)).concat(sorted.filter(isOtherLang));\n  const firstOther = list.findIndex(isOtherLang);\n  const filterCount = (audience ? 1 : 0) + (maxDur ? 1 : 0);\n  const anyFilter = !!(pack || filterCount);\n  const resetFilters = () => { setPack(null); setAudience(null); setMaxDur(null); };\n\n  return (\n    <div style={{ display: 'flex', flexDirection: 'column', gap: 14 }}>\n      <div>\n        <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 14.5, lineHeight: 1.55, color: 'var(--ink-2)' }}>{t('rally.lib.intro', lang)}</div>\n      </div>\n\n      {/* Pakete */}\n      <div ref={packsRef} role=\"group\" aria-label={t('rally.lib.packs', lang)} className=\"rally-scroll no-scroll\" style={{\n        display: 'flex', gap: 8, overflowX: 'auto', margin: '0 -16px', padding: '2px 16px 4px', scrollbarWidth: 'none',\n      }}>\n        <RallyChip active={!pack} onClick={() => setPack(null)}>{t('rally.lib.pack.all', lang)}</RallyChip>\n        {RAL_LIB_PACKS.map(p => (\n          <RallyChip key={p.key} icon={p.emoji} active={pack === p.key} onClick={() => setPack(pack === p.key ? null : p.key)}>\n            {t('rally.lib.pack.' + p.key, lang)}\n          </RallyChip>\n        ))}\n      </div>\n\n      {/* Filter + Sortierung */}\n      <div style={{ display: 'flex', gap: 8, alignItems: 'stretch' }}>\n        <button type=\"button\" className=\"rally-tap\" onClick={() => setFilterOpen(true)} aria-haspopup=\"dialog\" style={{\n          minHeight: 52, padding: '0 14px', borderRadius: 14, cursor: 'pointer', flexShrink: 0,\n          background: filterCount ? 'var(--stamp-soft)' : 'var(--surface-2)', color: filterCount ? 'var(--stamp)' : 'var(--ink)',\n          border: '1.5px solid ' + (filterCount ? 'var(--stamp)' : 'var(--border-2)'),\n          display: 'inline-flex', alignItems: 'center', gap: 7, fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 14,\n        }}>\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.3\" strokeLinecap=\"round\" aria-hidden=\"true\"><path d=\"M4 6h16M7 12h10M10 18h4\" /></svg>\n          {filterCount ? rallyLibT('rally.lib.filterN', lang, { n: filterCount }) : t('rally.lib.filter', lang)}\n        </button>\n        <RallySegmented ariaLabel={t('rally.lib.sort', lang)} value={sort} onChange={setSort} style={{ flex: 1, minWidth: 0 }}\n          options={[{ value: 'popular', label: t('rally.lib.sort.popular', lang) }, { value: 'new', label: t('rally.lib.sort.new', lang) }]} />\n      </div>\n\n      {(audience || maxDur) && (\n        <div style={{ display: 'flex', gap: 6, flexWrap: 'wrap', alignItems: 'center' }}>\n          {audience && <RallyChip active color=\"var(--ink-2)\">{t('rally.org.audience.' + audience, lang)}</RallyChip>}\n          {maxDur && <RallyChip active color=\"var(--ink-2)\">{rallyLibT('rally.lib.maxDur', lang, { min: rallyFmtMin(maxDur, lang) })}</RallyChip>}\n          <button type=\"button\" className=\"rally-tap\" onClick={() => { setAudience(null); setMaxDur(null); }} style={{\n            minHeight: 44, padding: '0 8px', border: 'none', background: 'transparent', cursor: 'pointer',\n            fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 13.5, color: 'var(--stamp)',\n          }}>{t('rally.lib.filter.clear', lang)}</button>\n        </div>\n      )}\n\n      {/* Liste */}\n      {remote == null ? (\n        <div style={{ fontFamily: RAL_FONT_B, color: 'var(--ink-3)', textAlign: 'center', padding: 20 }}>{t('rally.ui.loading', lang)}</div>\n      ) : list.length === 0 ? (\n        <RallyEmpty icon=\"🧭\" title={t(anyFilter ? 'rally.lib.empty.filtered' : 'rally.lib.empty.title', lang)}\n          body={t(anyFilter ? 'rally.lib.empty.filteredBody' : 'rally.lib.empty.body', lang)}\n          action={anyFilter ? <RallyButton variant=\"ghost\" size=\"sm\" onClick={resetFilters}>{t('rally.lib.filter.reset', lang)}</RallyButton> : null} />\n      ) : (\n        <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n          <div aria-live=\"polite\" style={{ fontFamily: RAL_FONT_M, fontSize: 12, letterSpacing: '0.06em', color: 'var(--ink-3)' }}>\n            {rallyLibT(list.length === 1 ? 'rally.lib.count1' : 'rally.lib.count', lang, { n: list.length })}\n          </div>\n          {list.map((tp, i) => (\n            <React.Fragment key={tp.id}>\n              {i === firstOther && (\n                <div style={{ marginTop: i ? 8 : 0, fontFamily: RAL_FONT_M, fontSize: 12, letterSpacing: '0.06em', textTransform: 'uppercase', color: 'var(--ink-3)' }}>\n                  {t('rally.lib.otherLangHeading', lang)}\n                </div>\n              )}\n              <RallyLibCard tpl={tp} lang={lang} theme={theme} onOpen={() => openDetail(tp)}\n                isMine={!tp.official && ownerId != null && tp.authorId === ownerId} />\n            </React.Fragment>\n          ))}\n        </div>\n      )}\n      {loadFailed && <RallyLibNote tone=\"warn\" icon=\"📡\">{t('rally.lib.loadFailed', lang)}</RallyLibNote>}\n\n      {/* Teilen-Code */}\n      <RallyCard theme={theme} padding={14}>\n        <form onSubmit={e => { e.preventDefault(); submitCode(); }}>\n          <label htmlFor=\"ral-lib-code\" style={{ display: 'block', fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15 }}>{t('rally.lib.code.label', lang)}</label>\n          <div style={{ marginTop: 2, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)' }}>{t('rally.lib.code.hint', lang)}</div>\n          <div style={{ display: 'flex', gap: 8, marginTop: 10 }}>\n            <RallyInput id=\"ral-lib-code\" mono value={codeTxt} placeholder=\"ABC234\" maxLength={8}\n              autoCapitalize=\"characters\" autoComplete=\"off\" spellCheck={false}\n              onChange={e => setCodeTxt(rallyLibCleanCode(e.target.value))} style={{ flex: 1, minWidth: 0, textTransform: 'uppercase' }} />\n            <RallyButton type=\"submit\" size=\"md\" disabled={codeBusy || codeTxt.length !== 6}>{t('rally.lib.code.open', lang)}</RallyButton>\n          </div>\n        </form>\n      </RallyCard>\n\n      <RallySheet open={filterOpen} onClose={() => setFilterOpen(false)} lang={lang} title={t('rally.lib.filter', lang)}\n        footer={<RallyButton full onClick={() => setFilterOpen(false)}>{rallyLibT(list.length === 1 ? 'rally.lib.filter.show1' : 'rally.lib.filter.show', lang, { n: list.length })}</RallyButton>}>\n        <div style={{ display: 'flex', flexDirection: 'column', gap: 18, paddingBottom: 6 }}>\n          <RallyField label={t('rally.lib.filter.audience', lang)}>\n            <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\n              <RallyChip active={!audience} onClick={() => setAudience(null)} style={{ width: '100%' }}>{t('rally.lib.filter.any', lang)}</RallyChip>\n              {RAL_LIB_AUDIENCES.map(a => (\n                <RallyChip key={a} active={audience === a} onClick={() => setAudience(a)} style={{ width: '100%' }}>{t('rally.org.audience.' + a, lang)}</RallyChip>\n              ))}\n            </div>\n          </RallyField>\n          <RallyField label={t('rally.lib.filter.duration', lang)}>\n            <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\n              <RallyChip active={!maxDur} onClick={() => setMaxDur(null)} style={{ width: '100%' }}>{t('rally.lib.filter.any', lang)}</RallyChip>\n              {RAL_LIB_DURATIONS.map(d => (\n                <RallyChip key={d} active={maxDur === d} onClick={() => setMaxDur(d)} style={{ width: '100%' }}>\n                  {rallyLibT('rally.lib.maxDur', lang, { min: rallyFmtMin(d, lang) })}\n                </RallyChip>\n              ))}\n            </div>\n          </RallyField>\n        </div>\n      </RallySheet>\n      {!showToast && <RallyToast message={ownToast} bottom={176} />}\n    </div>\n  );\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// Vorlagen-Detail\n// ═════════════════════════════════════════════════════════════════════════════\nfunction RallyLibDetail({ template, theme, lang, ownerId, onBack, onOpenTour, onCreateEvent, showToast, onNeedAccount }) {\n  const tpl = template;\n  const [busy, setBusy] = React.useState(null); // 'adopt' | 'event' | 'report'\n  const [reportOpen, setReportOpen] = React.useState(false);\n  const [reason, setReason] = React.useState(null);\n  const [reported, setReported] = React.useState(() => !!rallyLibLsGet(rallyLibDevKey(RAL_LIB_REPORTED_KEY), {})[tpl.id]);\n  const toast = showToast || (() => {});\n  const S = window.RallyStore;\n  const E = window.RallyEngine;\n  const tour = tpl.tour || { stations: [] };\n  const est = rallyLibEstimate(tpl);\n  const r = rallyLibRating(tpl);\n  const isMine = !tpl.official && ownerId != null && tpl.authorId === ownerId;\n  const title = rallyLibTitle(tpl, lang);\n  const desc = rallyPickText(tpl.description, lang);\n  const center = tour.start || RAL_MUC;\n  const tplLang = rallyLibLang(tpl);\n  const basedOn = tpl.official ? null : rallyLibBasedOn(tpl);\n  // Eigene Vorlage: Meldungen und Kennzahlen (nur die Autorin bekommt sie vom Store)\n  const [ownStats, setOwnStats] = React.useState(null);\n  React.useEffect(() => {\n    if (!isMine) return;\n    const fn = rallyLibFn(S, 'myTemplateStats');\n    if (!fn) return;\n    let alive = true;\n    fn(tpl.id).then(st => { if (alive && st) setOwnStats(st); }).catch(e => console.warn('[RallyLib] myTemplateStats', e));\n    return () => { alive = false; };\n  }, [isMine, tpl.id]); // eslint-disable-line react-hooks/exhaustive-deps\n\n  const adopt = async (then) => {\n    // Gäste dürfen stöbern; übernehmen braucht ein Konto (Touren gehören dem Konto)\n    if (ownerId == null && onNeedAccount) { onNeedAccount(); return; }\n    setBusy(then);\n    try {\n      let tr = null;\n      const use = rallyLibFn(S, 'useTemplate');\n      if (use) {\n        // Immer das Objekt: offizielle und 'link'-Vorlagen kennt getTemplate(id) für Fremde nicht\n        tr = await use(tpl, { ownerId });\n      } else if (E && typeof E.tourFromTemplate === 'function' && S && S.saveTour) {\n        tr = await S.saveTour(E.tourFromTemplate(tpl, { ownerId, now: new Date().toISOString() }));\n      }\n      if (!tr || !tr.id) throw new Error('no_tour');\n      toast(t(then === 'event' ? 'rally.lib.detail.adoptedEvent' : 'rally.lib.detail.adopted', lang), 3000);\n      if (then === 'event') onCreateEvent && onCreateEvent(tr.id);\n      else onOpenTour && onOpenTour(tr.id);\n    } catch (e) {\n      console.warn('[RallyLib] useTemplate', e);\n      toast(t('rally.lib.detail.adoptFailed', lang), 3200);\n      setBusy(null);\n    }\n  };\n\n  const sendReport = async () => {\n    const fn = rallyLibFn(S, 'reportTemplate');\n    setBusy('report');\n    try {\n      if (!fn) throw new Error('unavailable');\n      await fn(tpl.id, reason || 'inappropriate');\n      const m = rallyLibLsGet(rallyLibDevKey(RAL_LIB_REPORTED_KEY), {}); m[tpl.id] = Date.now(); rallyLibLsSet(rallyLibDevKey(RAL_LIB_REPORTED_KEY), m);\n      setReported(true); setReportOpen(false);\n      toast(t('rally.lib.report.thanks', lang), 3200);\n    } catch (e) {\n      console.warn('[RallyLib] reportTemplate', e);\n      toast(t('rally.lib.report.failed', lang), 3200);\n    }\n    setBusy(null);\n  };\n\n  const stats = [\n    { label: t('rally.org.stat.duration', lang), value: est.durationMin != null ? rallyFmtMin(est.durationMin, lang) : '' },\n    { label: t('rally.org.stat.distance', lang), value: est.distanceM != null ? rallyFmtDist(est.distanceM, lang) : '' },\n    { label: t('rally.org.stat.stations', lang), value: String(est.stations) },\n    { label: t('rally.org.stat.audience', lang), value: t('rally.org.audience.' + (tpl.audience || tour.audience || 'adults'), lang), mono: false },\n  ];\n\n  const kicker = tpl.official ? t('rally.lib.official', lang) : t('rally.lib.detail.kicker', lang);\n  const updated = rallyLibFmtDate(tpl.updatedAt || tpl.createdAt, lang);\n\n  return (\n    <div>\n      <RallyLibHeader kicker={kicker} title={title} onBack={onBack} lang={lang} />\n      <div style={{ padding: '14px 16px 0', display: 'flex', flexDirection: 'column', gap: 18 }}>\n        <RallyMap theme={theme} lang={lang} height={220} center={center} zoom={14}\n          markers={rallyLibMarkers(tour, lang)} line={rallyLibLine(tour)} fitToMarkers />\n        <RallyStatsBar items={stats} />\n\n        {/* Herkunft + Bewertung */}\n        <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n          <div style={{ display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap' }}>\n            {tpl.official ? <RallyLibOfficialBadge lang={lang} /> : (\n              <span style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15, color: 'var(--ink)' }}>\n                {rallyLibT('rally.lib.by', lang, { name: rallyLibAuthor(tpl, lang) })}\n              </span>\n            )}\n            {isMine && <RallyChip>{t('rally.lib.yours', lang)}</RallyChip>}\n            <RallyLibLangBadge tpl={tpl} lang={lang} />\n            {!tpl.official && updated && (\n              <span style={{ fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-3)' }}>{rallyLibT('rally.lib.updated', lang, { date: updated })}</span>\n            )}\n          </div>\n          <div style={{ display: 'flex', alignItems: 'center', gap: 12, flexWrap: 'wrap' }}>\n            {(!tpl.official || r.count > 0) && <RallyLibStars avg={r.avg} count={r.count} lang={lang} size={16} />}\n            {(tpl.uses || 0) > 0 && <span style={{ fontFamily: RAL_FONT_M, fontSize: 12.5, color: 'var(--ink-2)' }}>{rallyLibT(tpl.uses === 1 ? 'rally.lib.usesLong1' : 'rally.lib.usesLong', lang, { n: tpl.uses })}</span>}\n          </div>\n          {(tpl.packs || []).length > 0 && (\n            <div style={{ display: 'flex', gap: 6, flexWrap: 'wrap' }}>\n              {tpl.packs.map(k => { const p = RAL_LIB_PACKS.find(x => x.key === k); return p ? <RallyChip key={k} icon={p.emoji}>{t('rally.lib.pack.' + k, lang)}</RallyChip> : null; })}\n            </div>\n          )}\n          {tpl.official && <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.5, color: 'var(--ink-2)' }}>{t('rally.lib.officialHint', lang)}</div>}\n          {basedOn && (\n            <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.5, color: 'var(--ink-2)', overflowWrap: 'anywhere' }}>\n              <span aria-hidden=\"true\" style={{ marginRight: 6 }}>↳</span>{rallyLibBasedOnText(basedOn, lang)}\n            </div>\n          )}\n        </div>\n\n        {tplLang && tplLang !== lang && (\n          <RallyLibNote tone=\"warn\" icon=\"🌐\" title={t('rally.lib.detail.otherLang.' + tplLang, lang)}>\n            {t('rally.lib.detail.otherLangBody', lang)}\n          </RallyLibNote>\n        )}\n\n        {isMine && ownStats && (\n          <RallyLibNote tone={ownStats.reports > 0 ? 'warn' : 'info'} icon={ownStats.reports > 0 ? '⚑' : '📊'}\n            title={ownStats.reports > 0 ? rallyLibPl(ownStats.reports, 'rally.lib.own.reports', lang) : t('rally.lib.own.noReports', lang)}>\n            {[\n              rallyLibPl(ownStats.uses || 0, 'rally.lib.own.uses', lang),\n              ownStats.ratingCount ? rallyLibT('rally.lib.own.rating', lang, { avg: rallyFmtNum(ownStats.ratingAvg, lang, 1), count: ownStats.ratingCount }) : t('rally.lib.noRating', lang),\n              rallyLibT('rally.lib.own.version', lang, { n: ownStats.version || 1 }),\n            ].join(' · ')}\n            {ownStats.hidden && <span style={{ display: 'block', marginTop: 4 }}>{t('rally.lib.own.hidden', lang)}</span>}\n          </RallyLibNote>\n        )}\n\n        {desc && (\n          <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 15, lineHeight: 1.55, color: 'var(--ink)', whiteSpace: 'pre-line', overflowWrap: 'anywhere', textAlign: 'justify', hyphens: 'auto', WebkitHyphens: 'auto' }}\n            lang={lang}>{desc}</div>\n        )}\n\n        {/* Aktionen */}\n        <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n          <RallyButton size=\"lg\" full disabled={!!busy} onClick={() => adopt('edit')} icon=\"✏️\">\n            {busy === 'edit' ? t('rally.lib.detail.working', lang) : t('rally.lib.detail.adopt', lang)}\n          </RallyButton>\n          <RallyButton variant=\"secondary\" full disabled={!!busy} onClick={() => adopt('event')}>\n            {busy === 'event' ? t('rally.lib.detail.working', lang) : t('rally.lib.detail.createEvent', lang)}\n          </RallyButton>\n          <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-3)', textAlign: 'center' }}>\n            {t('rally.lib.detail.adoptHint', lang)}\n          </div>\n        </div>\n\n        {/* Stationen ohne Lösungen */}\n        <section style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n          <RallyLibSectionTitle hint={t('rally.lib.detail.noSolutions', lang)}>\n            {rallyLibPl((tour.stations || []).length, 'rally.lib.detail.stations', lang)}\n          </RallyLibSectionTitle>\n          <ol style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: 6 }}>\n            {tour.start && (\n              <li style={{ display: 'flex', gap: 10, alignItems: 'center', padding: '6px 2px', fontFamily: RAL_FONT_B, fontSize: 14, color: 'var(--ink-2)' }}>\n                <span aria-hidden=\"true\" style={{ width: 30, textAlign: 'center' }}>🚩</span>\n                <span style={{ flex: 1, minWidth: 0, overflowWrap: 'anywhere' }}>{rallyLibT('rally.lib.detail.start', lang, { place: tour.start.label || '' })}</span>\n              </li>\n            )}\n            {(tour.stations || []).map((st, i) => {\n              const q = rallyLibQType(st);\n              return (\n                <li key={st.id || i} style={{\n                  display: 'flex', alignItems: 'center', gap: 10, padding: '10px 12px', borderRadius: 14,\n                  background: 'var(--surface)', border: '1px solid var(--border)',\n                }}>\n                  <span aria-hidden=\"true\" style={{\n                    width: 30, height: 30, borderRadius: '50%', flexShrink: 0, background: RAL_LIB_KIND_COLOR[st.kind] || RAL_LIB_KIND_COLOR.fact, color: '#FFFFFF',\n                    display: 'flex', alignItems: 'center', justifyContent: 'center', fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 14,\n                  }}>{i + 1}</span>\n                  <span style={{ flex: 1, minWidth: 0, fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15, lineHeight: 1.3, overflowWrap: 'anywhere',\n                    display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' }}>\n                    {st.title || t('rally.org.station.untitled', lang)}\n                  </span>\n                  <RallyChip active={q === 'estimate'} color={q === 'estimate' ? 'var(--coin-dk)' : undefined} style={{ fontSize: 12, padding: '1px 9px', flexShrink: 0 }}>\n                    {t('rally.org.qtype.' + q, lang)}\n                  </RallyChip>\n                </li>\n              );\n            })}\n            <li style={{ display: 'flex', gap: 10, alignItems: 'center', padding: '6px 2px', fontFamily: RAL_FONT_B, fontSize: 14, color: 'var(--ink-2)' }}>\n              <span aria-hidden=\"true\" style={{ width: 30, textAlign: 'center' }}>🏁</span>\n              <span style={{ flex: 1, minWidth: 0, overflowWrap: 'anywhere' }}>\n                {tour.finish ? rallyLibT('rally.lib.detail.finish', lang, { place: tour.finish.label || '' }) : t('rally.lib.detail.loop', lang)}\n              </span>\n            </li>\n          </ol>\n        </section>\n\n        {!tpl.official && !isMine && (\n          <div style={{ display: 'flex', justifyContent: 'center' }}>\n            {reported ? (\n              <span style={{ fontFamily: RAL_FONT_B, fontSize: 13.5, color: 'var(--ink-3)', padding: '12px 0' }}>{t('rally.lib.report.done', lang)}</span>\n            ) : (\n              <button type=\"button\" className=\"rally-tap\" onClick={() => { setReason(null); setReportOpen(true); }} style={{\n                minHeight: 44, padding: '0 14px', border: 'none', background: 'transparent', cursor: 'pointer',\n                fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 14, color: 'var(--ink-3)', display: 'inline-flex', alignItems: 'center', gap: 6,\n              }}><span aria-hidden=\"true\">⚑</span>{t('rally.lib.report', lang)}</button>\n            )}\n          </div>\n        )}\n      </div>\n\n      <RallySheet open={reportOpen} onClose={() => setReportOpen(false)} lang={lang}\n        kicker={t('rally.lib.report', lang)} title={t('rally.lib.report.title', lang)}\n        footer={\n          <div style={{ display: 'flex', gap: 10 }}>\n            <RallyButton variant=\"ghost\" onClick={() => setReportOpen(false)} style={{ flex: 1 }}>{t('rally.ui.cancel', lang)}</RallyButton>\n            <RallyButton variant=\"danger\" disabled={!reason || busy === 'report'} onClick={sendReport} style={{ flex: 1.4 }}>{t('rally.lib.report.send', lang)}</RallyButton>\n          </div>\n        }>\n        <div style={{ display: 'flex', flexDirection: 'column', gap: 10, paddingBottom: 6 }}>\n          <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 14.5, lineHeight: 1.55, color: 'var(--ink-2)' }}>{t('rally.lib.report.body', lang)}</div>\n          <div role=\"radiogroup\" aria-label={t('rally.lib.report.title', lang)} style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n            {RAL_LIB_REPORT_REASONS.map(k => (\n              <RallyLibRadio key={k} active={reason === k} onClick={() => setReason(k)} title={t('rally.lib.report.reason.' + k, lang)} />\n            ))}\n          </div>\n        </div>\n      </RallySheet>\n    </div>\n  );\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// Veröffentlichen\n// ═════════════════════════════════════════════════════════════════════════════\nfunction RallyPublishSheet({ open, tour, lang, theme, user, ownerId, onClose, onPublished, onUnpublished, onViewInLibrary, showToast }) {\n  const S = window.RallyStore;\n  const E = window.RallyEngine;\n  const toast = showToast || (() => {});\n  const [desc, setDesc] = React.useState('');\n  const [packs, setPacks] = React.useState([]);\n  const [visibility, setVisibility] = React.useState('public');\n  const [anon, setAnon] = React.useState(false);\n  const [authorName, setAuthorName] = React.useState('');\n  const [agreed, setAgreed] = React.useState(false);\n  const [busy, setBusy] = React.useState(false);\n  const [failIssues, setFailIssues] = React.useState(null);\n  const [result, setResult] = React.useState(null);     // Vorlage nach Erfolg\n  const [resultWasUpdate, setResultWasUpdate] = React.useState(false);\n  const [existing, setExisting] = React.useState(null); // bereits veröffentlichte Vorlage\n  const [confirmUnpub, setConfirmUnpub] = React.useState(false);\n  const [excluded, setExcluded] = React.useState({});   // { stationId: true } = Ort bleibt privat\n  const [pubLang, setPubLang] = React.useState(lang === 'en' ? 'en' : 'de');\n  const [ownStats, setOwnStats] = React.useState(null); // myTemplateStats der eigenen Vorlage\n\n  const pubId = tour && tour.published && tour.published.templateId;\n\n  // Beim Öffnen zurücksetzen. Nur beim Öffnen: nach dem Veröffentlichen ändert sich tour.published,\n  // dann soll der Erfolgszustand stehen bleiben.\n  const prefillRef = React.useRef(false);\n  React.useEffect(() => {\n    if (!open || !tour) return;\n    const name = (user && user.name) ? String(user.name) : '';\n    setDesc(''); setPacks(rallyLibDefaultPacks(tour)); setVisibility('public');\n    // Ohne Namen ist der Standard; der Name steht trotzdem schon im (ausgegrauten) Feld\n    setAuthorName(name); setAnon(true); setAgreed(false);\n    setBusy(false); setFailIssues(null); setResult(null); setExisting(null); setConfirmUnpub(false); setOwnStats(null);\n    const ex = {};\n    // Eigene Stationen (Insider-Fragen zum Bräutigam, private Treffpunkte) sind beim Teilen erst mal ausgeschlossen\n    (tour.stations || []).forEach(st => { if (st && (st.excludeFromPublish || (st.kind === 'custom' && st.excludeFromPublish !== false))) ex[st.id] = true; });\n    setExcluded(ex);\n    setPubLang(tour.lang === 'en' || tour.lang === 'de' ? tour.lang : (rallyLibGuessLang(tour) || (lang === 'en' ? 'en' : 'de')));\n    prefillRef.current = !!pubId;\n  }, [open, tour && tour.id]); // eslint-disable-line react-hooks/exhaustive-deps\n\n  // Vorhandene Vorlage laden (Code, Nutzung, Bewertung); Felder nur vorbelegen, wenn sie beim Öffnen schon geteilt war\n  React.useEffect(() => {\n    if (!open || !pubId) { if (!pubId) setExisting(null); return; }\n    let alive = true;\n    const get = rallyLibFn(S, 'getTemplate');\n    if (!get) return;\n    get(pubId).then(tp => {\n      if (!alive || !tp) return;\n      setExisting(tp);\n      if (!prefillRef.current) return;\n      prefillRef.current = false;\n      setDesc(rallyPickText(tp.description, lang) || '');\n      if (Array.isArray(tp.packs)) setPacks(tp.packs.slice());\n      setVisibility(tp.visibility === 'link' ? 'link' : 'public');\n      if (rallyLibIsAnon(tp.authorName)) setAnon(true);\n      else { setAnon(false); setAuthorName(String(tp.authorName)); }\n      if (tp.lang === 'de' || tp.lang === 'en') setPubLang(tp.lang);\n    }).catch(() => {});\n    const stats = rallyLibFn(S, 'myTemplateStats');\n    if (stats) stats(pubId).then(st => { if (alive && st) setOwnStats(st); }).catch(e => console.warn('[RallyLib] myTemplateStats', e));\n    return () => { alive = false; };\n  }, [open, pubId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n  if (!tour) return null;\n\n  // Was tatsächlich an den Store geht: ausgenommene Stationen markiert, Herkunft für „Basiert auf …“\n  const origin = tour.origin && (tour.origin.title || tour.origin.templateId) ? tour.origin : null;\n  const pubTour = Object.assign({}, tour, {\n    stations: (tour.stations || []).map(st => {\n      if (!st || typeof st !== 'object') return st;\n      const c = Object.assign({}, st);\n      if (excluded[st.id]) c.excludeFromPublish = true; else delete c.excludeFromPublish;\n      return c;\n    }),\n    basedOn: origin ? { templateId: origin.templateId || null, title: origin.title || '', authorName: origin.authorName || null } : null,\n  });\n  const ownStations = rallyLibOwnStations(tour);\n  const excludedCount = ownStations.filter(st => excluded[st.id]).length;\n\n  let removedNotes = 0;\n  let checkTour = pubTour;\n  const prep = rallyLibFn(E, 'prepareForPublish');\n  if (prep) { try { const pr = prep(pubTour); removedNotes = (pr.removed || {}).notes || 0; checkTour = pr.tour || pubTour; } catch (e) {} }\n  else removedNotes = (pubTour.stations || []).filter(s => !s.excludeFromPublish && s.note && String(s.note).trim()).length;\n  const privateHits = rallyLibPrivateHits(pubTour);\n\n  const issues = E && E.validateTour ? E.validateTour(checkTour) : [];\n  const errors = (failIssues || issues).filter(i => i.level === 'error');\n  const stationNo = (id) => (tour.stations || []).findIndex(x => x.id === id) + 1;\n  const issueText = (i) => rallyLibT('rally.org.issue.' + i.code, lang, { n: i.stationId ? stationNo(i.stationId) : '', teams: (tour.settings && tour.settings.defaultTeamCount) || 4 });\n\n  const canPublish = !!rallyLibFn(S, 'publishTemplate');\n  const nameOk = anon || authorName.trim().length > 0;\n  const ready = canPublish && agreed && nameOk && errors.length === 0 && !busy;\n  const isUpdate = !!pubId;\n\n  const togglePack = (k) => setPacks(p => p.indexOf(k) >= 0 ? p.filter(x => x !== k) : p.concat([k]));\n\n  const publish = async () => {\n    if (!ready) return;\n    setBusy(true); setFailIssues(null);\n    try {\n      const tpl = await S.publishTemplate(pubTour, {\n        description: desc.trim().slice(0, RAL_LIB_DESC_MAX), packs, visibility,\n        authorName: anon ? '' : authorName.trim().slice(0, 40),\n        lang: pubLang,\n      });\n      setResultWasUpdate(isUpdate);\n      setResult(tpl || {});\n      if (onPublished) onPublished(tpl);\n    } catch (e) {\n      console.warn('[RallyLib] publishTemplate', e);\n      if (e && (e.message === 'invalid_tour' || e.code === 'invalid_tour')) {\n        setFailIssues(Array.isArray(e.issues) ? e.issues : issues);\n        toast(t('rally.lib.pub.invalid', lang), 3200);\n      } else toast(t('rally.lib.pub.failed', lang), 3200);\n    }\n    setBusy(false);\n  };\n\n  const unpublish = async () => {\n    setConfirmUnpub(false);\n    const fn = rallyLibFn(S, 'unpublishTemplate');\n    if (!fn || !pubId) return;\n    setBusy(true);\n    try {\n      await fn(pubId);\n      // Wer gerade zurückgezogen hat, soll nicht sofort wieder zum Teilen aufgefordert werden\n      if (tour && tour.id) rallyLibSetNudgeOff(tour.id);\n      toast(t('rally.lib.pub.unpublished', lang), 3000);\n      if (onUnpublished) onUnpublished();\n      onClose && onClose();\n    } catch (e) {\n      console.warn('[RallyLib] unpublishTemplate', e);\n      toast(t('rally.lib.pub.failed', lang), 3200);\n    }\n    setBusy(false);\n  };\n\n  // ── Erfolg ──\n  if (result) {\n    const code = result.shareCode || (existing && existing.shareCode) || '';\n    const url = code ? rallyLibTplUrl(code) : '';\n    const doCopy = async () => { const ok = await rallyLibCopy(url); toast(t(ok ? 'rally.lib.pub.copied' : 'rally.lib.pub.copyFailed', lang)); };\n    const doShare = async () => {\n      if (navigator.share) {\n        try { await navigator.share({ title: rallyLibTitle(result.title ? result : tour, lang), text: t('rally.lib.pub.shareText', lang), url }); return; }\n        catch (e) { if (e && e.name === 'AbortError') return; }\n      }\n      doCopy();\n    };\n    return (\n      <RallySheet open={open} onClose={onClose} lang={lang} kicker={t('rally.lib.pub.kicker', lang)}\n        title={t(resultWasUpdate ? 'rally.lib.pub.updatedTitle' : (result.visibility === 'link' ? 'rally.lib.pub.doneLinkTitle' : 'rally.lib.pub.doneTitle'), lang)}\n        footer={<RallyButton full onClick={onClose}>{t('rally.lib.pub.close', lang)}</RallyButton>}>\n        <div style={{ display: 'flex', flexDirection: 'column', gap: 14, paddingBottom: 6 }}>\n          <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 15, lineHeight: 1.55, color: 'var(--ink-2)' }}>\n            {t(resultWasUpdate ? 'rally.lib.pub.updatedBody' : result.visibility === 'link' ? 'rally.lib.pub.doneLinkBody' : 'rally.lib.pub.doneBody', lang)}\n          </div>\n          {code && (\n            <div style={{ textAlign: 'center', padding: '16px 12px', borderRadius: 18, background: 'var(--surface-2)', border: '1px solid var(--border)' }}>\n              <RallyKicker color=\"var(--ink-2)\" style={{ fontSize: 12 }}>{t('rally.lib.pub.code', lang)}</RallyKicker>\n              <div style={{ marginTop: 6, fontFamily: RAL_FONT_M, fontWeight: 600, fontSize: 32, letterSpacing: '0.18em', color: 'var(--ink)' }}>{code}</div>\n              <div style={{ marginTop: 8, fontFamily: RAL_FONT_M, fontSize: 12, letterSpacing: '0.02em', color: 'var(--ink-2)', overflowWrap: 'anywhere' }}>{url}</div>\n            </div>\n          )}\n          {code && (\n            <div style={{ display: 'flex', gap: 10 }}>\n              <RallyButton variant=\"ghost\" onClick={doCopy} style={{ flex: 1 }} icon=\"📋\">{t('rally.lib.pub.copy', lang)}</RallyButton>\n              <RallyButton onClick={doShare} style={{ flex: 1 }} icon=\"📤\">{t('rally.lib.pub.share', lang)}</RallyButton>\n            </div>\n          )}\n          {onViewInLibrary && (\n            <RallyButton variant=\"secondary\" full onClick={() => onViewInLibrary(result)}>{t('rally.lib.pub.view', lang)}</RallyButton>\n          )}\n        </div>\n      </RallySheet>\n    );\n  }\n\n  // ── Formular ──\n  const r = existing ? rallyLibRating(existing) : null;\n  return (\n    <React.Fragment>\n      <RallySheet open={open} onClose={onClose} lang={lang} kicker={t('rally.lib.pub.kicker', lang)}\n        title={t(isUpdate ? 'rally.lib.pub.manageTitle' : 'rally.lib.pub.title', lang)}\n        footer={\n          <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n            {!ready && !busy && canPublish && (\n              <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 12.5, lineHeight: 1.4, color: 'var(--ink-3)', textAlign: 'center' }}>\n                {t(errors.length ? 'rally.lib.pub.blockErrors' : !agreed ? 'rally.lib.pub.blockAgree' : 'rally.lib.pub.blockName', lang)}\n              </div>\n            )}\n            <RallyButton full size=\"lg\" disabled={!ready} onClick={publish}>\n              {busy ? t('rally.lib.detail.working', lang) : t(isUpdate ? 'rally.lib.pub.update' : 'rally.lib.pub.submit', lang)}\n            </RallyButton>\n          </div>\n        }>\n        <div style={{ display: 'flex', flexDirection: 'column', gap: 18, paddingBottom: 6 }}>\n          {isUpdate ? (\n            <RallyCard theme={theme} padding={14}>\n              <div style={{ display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap' }}>\n                <RallyChip active color=\"var(--cat-nat, #22C55E)\" icon=\"✓\">{t('rally.lib.shared', lang)}</RallyChip>\n                {existing && existing.shareCode && <span style={{ fontFamily: RAL_FONT_M, fontWeight: 600, fontSize: 14, letterSpacing: '0.14em' }}>{existing.shareCode}</span>}\n              </div>\n              <div style={{ marginTop: 10, display: 'flex', alignItems: 'center', gap: 12, flexWrap: 'wrap' }}>\n                <span style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15 }}>\n                  {(existing && existing.uses) ? rallyLibT(existing.uses === 1 ? 'rally.lib.pub.usedBy1' : 'rally.lib.pub.usedBy', lang, { n: existing.uses }) : t('rally.lib.pub.usedBy0', lang)}\n                </span>\n                {r && <RallyLibStars avg={r.avg} count={r.count} lang={lang} />}\n              </div>\n              {ownStats && ownStats.reports > 0 && (\n                <RallyLibNote tone=\"warn\" icon=\"⚑\" style={{ marginTop: 10 }} title={rallyLibPl(ownStats.reports, 'rally.lib.own.reports', lang)}>\n                  {t(ownStats.hidden ? 'rally.lib.own.hidden' : 'rally.lib.own.reportsBody', lang)}\n                </RallyLibNote>\n              )}\n              <div style={{ marginTop: 6, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.5, color: 'var(--ink-2)' }}>{t('rally.lib.pub.updateHint', lang)}</div>\n              {existing && existing.shareCode && (\n                <div style={{ display: 'flex', gap: 8, marginTop: 10 }}>\n                  <RallyButton size=\"sm\" variant=\"ghost\" style={{ flex: 1 }} onClick={async () => { const ok = await rallyLibCopy(rallyLibTplUrl(existing.shareCode)); toast(t(ok ? 'rally.lib.pub.copied' : 'rally.lib.pub.copyFailed', lang)); }}>\n                    {t('rally.lib.pub.copyLink', lang)}\n                  </RallyButton>\n                  {onViewInLibrary && <RallyButton size=\"sm\" variant=\"ghost\" style={{ flex: 1 }} onClick={() => onViewInLibrary(existing)}>{t('rally.lib.pub.viewShort', lang)}</RallyButton>}\n                </div>\n              )}\n            </RallyCard>\n          ) : (\n            <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 14.5, lineHeight: 1.55, color: 'var(--ink-2)' }}>{t('rally.lib.pub.intro', lang)}</div>\n          )}\n\n          {!canPublish && <RallyLibNote tone=\"warn\" icon=\"⏳\">{t('rally.lib.pub.unavailable', lang)}</RallyLibNote>}\n\n          {errors.length > 0 && (\n            <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n              <RallyLibNote tone=\"error\" icon=\"⛔\" title={t('rally.lib.pub.errorsTitle', lang)}>{t('rally.lib.pub.errorsBody', lang)}</RallyLibNote>\n              {errors.map((i, k) => (\n                <div key={k} style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 14, lineHeight: 1.45, color: 'var(--ink)', paddingLeft: 8 }}>• {issueText(i)}</div>\n              ))}\n            </div>\n          )}\n\n          <RallyField label={t('rally.lib.pub.desc', lang)} htmlFor=\"ral-lib-desc\"\n            hint={rallyLibPl(RAL_LIB_DESC_MAX - desc.length, 'rally.lib.pub.descHint', lang)}>\n            <RallyTextarea id=\"ral-lib-desc\" rows={4} value={desc} maxLength={RAL_LIB_DESC_MAX}\n              placeholder={t('rally.lib.pub.descPlaceholder', lang)} onChange={e => setDesc(e.target.value.slice(0, RAL_LIB_DESC_MAX))} />\n          </RallyField>\n\n          <RallyField label={t('rally.lib.pub.packs', lang)} hint={t('rally.lib.pub.packsHint', lang)}>\n            <div style={{ display: 'flex', gap: 8, flexWrap: 'wrap' }}>\n              {RAL_LIB_PACKS.map(p => (\n                <RallyChip key={p.key} icon={p.emoji} active={packs.indexOf(p.key) >= 0} onClick={() => togglePack(p.key)}>{t('rally.lib.pack.' + p.key, lang)}</RallyChip>\n              ))}\n            </div>\n          </RallyField>\n\n          <RallyField label={t('rally.lib.pub.lang', lang)} hint={t('rally.lib.pub.langHint', lang)}>\n            <RallySegmented ariaLabel={t('rally.lib.pub.lang', lang)} value={pubLang} onChange={setPubLang}\n              options={[{ value: 'de', label: t('rally.lib.lang.de', lang) }, { value: 'en', label: t('rally.lib.lang.en', lang) }]} />\n          </RallyField>\n\n          <RallyField label={t('rally.lib.pub.visibility', lang)}>\n            <div role=\"radiogroup\" aria-label={t('rally.lib.pub.visibility', lang)} style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n              <RallyLibRadio active={visibility === 'public'} onClick={() => setVisibility('public')} icon=\"🌍\"\n                title={t('rally.lib.pub.vis.public', lang)} body={t('rally.lib.pub.vis.publicBody', lang)} />\n              <RallyLibRadio active={visibility === 'link'} onClick={() => setVisibility('link')} icon=\"🔗\"\n                title={t('rally.lib.pub.vis.link', lang)} body={t('rally.lib.pub.vis.linkBody', lang)} />\n            </div>\n          </RallyField>\n\n          <RallyField label={t('rally.lib.pub.author', lang)} htmlFor=\"ral-lib-author\"\n            hint={t(anon ? 'rally.lib.pub.authorAnonHint' : 'rally.lib.pub.authorHint', lang)}>\n            <RallyInput id=\"ral-lib-author\" value={authorName} maxLength={40} invalid={!anon && !nameOk}\n              disabled={anon} aria-describedby=\"ral-lib-author-state\"\n              placeholder={t('rally.lib.pub.authorPlaceholder', lang)} onChange={e => setAuthorName(e.target.value)}\n              style={anon ? { opacity: 0.5, textDecoration: authorName ? 'line-through' : 'none', cursor: 'not-allowed', background: 'var(--surface-2)' } : undefined} />\n            <span id=\"ral-lib-author-state\" style={{ position: 'absolute', width: 1, height: 1, overflow: 'hidden', clip: 'rect(0 0 0 0)' }}>\n              {t(anon ? 'rally.lib.pub.authorAnonHint' : 'rally.lib.pub.authorHint', lang)}\n            </span>\n            <RallyLibCheck checked={anon} onChange={setAnon} label={t('rally.lib.pub.anon', lang)}\n              hint={t(anon ? 'rally.lib.pub.anonOnHint' : 'rally.lib.pub.anonOffHint', lang)} />\n          </RallyField>\n\n          <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n            <RallyLibSectionTitle>{t('rally.lib.pub.preview', lang)}</RallyLibSectionTitle>\n            <RallyLibNote tone=\"warn\" icon=\"👀\" title={t('rally.lib.pub.publicTitle', lang)}>\n              {t('rally.lib.pub.publicBody', lang)}\n            </RallyLibNote>\n            <RallyLibNote tone=\"info\" icon=\"🔒\" title={t('rally.lib.pub.privateTitle', lang)}>\n              {t('rally.lib.pub.previewBody', lang)}\n              <span style={{ display: 'block', marginTop: 4 }}>\n                {removedNotes === 0 ? t('rally.lib.pub.notes0', lang) : rallyLibPl(removedNotes, 'rally.lib.pub.notes', lang)}\n              </span>\n            </RallyLibNote>\n          </div>\n\n          {ownStations.length > 0 && (\n            <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n              <RallyLibSectionTitle hint={t('rally.lib.pub.ownHint', lang)}>\n                {rallyLibPl(ownStations.length, 'rally.lib.pub.ownTitle', lang)}\n              </RallyLibSectionTitle>\n              {ownStations.map(st => {\n                const no = stationNo(st.id);\n                const keep = !excluded[st.id];\n                return (\n                  <RallyLibCheck key={st.id} checked={keep}\n                    onChange={v => setExcluded(m => { const c = Object.assign({}, m); if (v) delete c[st.id]; else c[st.id] = true; return c; })}\n                    label={no + '. ' + (st.title || t('rally.org.station.untitled', lang))}\n                    hint={t(keep ? 'rally.lib.pub.ownShared' : 'rally.lib.pub.ownPrivate', lang)} />\n                );\n              })}\n              {excludedCount > 0 && (\n                <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)' }}>\n                  {rallyLibPl(excludedCount, 'rally.lib.pub.ownExcluded', lang)}\n                </div>\n              )}\n            </div>\n          )}\n\n          {privateHits.length > 0 && (\n            <RallyLibNote tone=\"warn\" icon=\"⚠️\" title={t('rally.lib.pub.privateHitTitle', lang)}>\n              {privateHits.map(h => rallyLibT(h.no ? 'rally.lib.pub.privateHitStation' : 'rally.lib.pub.privateHitTitleField', lang, {\n                n: h.no, what: h.kinds.map(k => t('rally.lib.pub.privateKind.' + k, lang)).join(', '),\n              })).join(' · ')}\n            </RallyLibNote>\n          )}\n\n          <RallyLibCheck checked={agreed} onChange={setAgreed} label={t('rally.lib.pub.agree', lang)} hint={t('rally.lib.pub.agreeHint', lang)} />\n\n          {isUpdate && (\n            <RallyButton variant=\"ghost\" full disabled={busy} onClick={() => setConfirmUnpub(true)}>{t('rally.lib.pub.unpublish', lang)}</RallyButton>\n          )}\n        </div>\n      </RallySheet>\n      <RallyConfirm open={confirmUnpub} lang={lang} danger zIndex={330}\n        title={t('rally.lib.pub.unpublishTitle', lang)} body={t('rally.lib.pub.unpublishBody', lang)}\n        confirmLabel={t('rally.lib.pub.unpublish', lang)} onCancel={() => setConfirmUnpub(false)} onConfirm={unpublish} />\n    </React.Fragment>\n  );\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// Ermunterung + Bewertung\n// ═════════════════════════════════════════════════════════════════════════════\nfunction rallyLibNudgeOff(tourId) {\n  return !!rallyLibLsGet(rallyLibDevKey(RAL_LIB_NUDGE_OFF_KEY), {})[tourId];\n}\nfunction rallyLibSetNudgeOff(tourId) {\n  const m = rallyLibLsGet(rallyLibDevKey(RAL_LIB_NUDGE_OFF_KEY), {}); m[tourId] = Date.now(); rallyLibLsSet(rallyLibDevKey(RAL_LIB_NUDGE_OFF_KEY), m);\n}\n\nfunction RallyLibNudge({ tour, onPublish, onDismiss, lang, style }) {\n  if (!tour) return null;\n  return (\n    <div style={{\n      position: 'relative', padding: 16, borderRadius: 18, overflow: 'hidden',\n      background: 'var(--coin-soft)', border: '1.5px solid rgba(245,197,24,0.45)', color: 'var(--ink)', ...style,\n    }}>\n      <div style={{ display: 'flex', gap: 12, alignItems: 'flex-start' }}>\n        <span aria-hidden=\"true\" style={{\n          width: 42, height: 42, borderRadius: 14, flexShrink: 0, background: 'var(--coin)', boxShadow: '0 2px 0 var(--coin-dk, #C9A00F)',\n          display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: 21,\n        }}>🤝</span>\n        <div style={{ flex: 1, minWidth: 0 }}>\n          <div style={{ fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 16.5, lineHeight: 1.3 }}>{t('rally.lib.nudge.title', lang)}</div>\n          <div style={{ marginTop: 4, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.5, color: 'var(--ink-2)' }}>\n            {rallyLibT('rally.lib.nudge.body', lang, { title: tour.title || t('rally.org.tour.untitled', lang) })}\n          </div>\n        </div>\n      </div>\n      <div style={{ display: 'flex', gap: 8, marginTop: 12 }}>\n        {onDismiss && <RallyButton size=\"sm\" variant=\"ghost\" onClick={onDismiss} style={{ flex: 1 }}>{t('rally.lib.nudge.later', lang)}</RallyButton>}\n        <RallyButton size=\"sm\" variant=\"gold\" onClick={onPublish} style={{ flex: 1.6 }} icon=\"📤\">{t('rally.lib.nudge.cta', lang)}</RallyButton>\n      </div>\n    </div>\n  );\n}\n\n// canRate: false = sicher noch nicht gespielt (Sterne aus); fehlt es, entscheidet der Store (Fehler no_play)\nfunction RallyLibRate({ tour, lang, onRated, showToast, style, canRate }) {\n  const rawId = tour && tour.origin && tour.origin.templateId;\n  // Offizielle Vorlagen kennt der Store nicht, Bewertung dafür gibt es (noch) nicht\n  const tplId = rawId && String(rawId).indexOf('official-') !== 0 ? rawId : null;\n  const [stars, setStars] = React.useState(() => (tplId ? rallyLibLsGet(rallyLibDevKey(RAL_LIB_VOTES_KEY), {})[tplId] || 0 : 0));\n  const [justRated, setJustRated] = React.useState(false);\n  const [busy, setBusy] = React.useState(false);\n  const [notPlayed, setNotPlayed] = React.useState(canRate === false);\n  React.useEffect(() => { if (canRate === false) setNotPlayed(true); else if (canRate === true) setNotPlayed(false); }, [canRate]);\n  const toast = showToast || (() => {});\n  if (!tplId) return null;\n  const fn = rallyLibFn(window.RallyStore, 'rateTemplate');\n  const title = tour.origin.title || tour.title || '';\n\n  const rate = async (n) => {\n    if (!fn || busy) return;\n    setBusy(true);\n    try {\n      await fn(tplId, n);\n      const m = rallyLibLsGet(rallyLibDevKey(RAL_LIB_VOTES_KEY), {}); m[tplId] = n; rallyLibLsSet(rallyLibDevKey(RAL_LIB_VOTES_KEY), m);\n      setStars(n); setJustRated(true);\n      if (onRated) onRated(n);\n    } catch (e) {\n      if (e && (e.code === 'no_play' || e.message === 'no_play')) setNotPlayed(true);\n      else {\n        console.warn('[RallyLib] rateTemplate', e);\n        toast(t('rally.lib.rate.failed', lang), 3200);\n      }\n    }\n    setBusy(false);\n  };\n\n  return (\n    <div style={{ padding: 16, borderRadius: 18, background: 'var(--surface)', border: '1px solid var(--border)', color: 'var(--ink)', ...style }}>\n      <RallyKicker style={{ fontSize: 12 }}>{t('rally.lib.rate.kicker', lang)}</RallyKicker>\n      <div style={{ marginTop: 4, fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 17, lineHeight: 1.3, overflowWrap: 'anywhere' }}>\n        {rallyLibT('rally.lib.rate.title', lang, { title })}\n      </div>\n      <div style={{ marginTop: 3, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.5, color: 'var(--ink-2)' }}>\n        {tour.origin.authorName && !rallyLibIsAnon(tour.origin.authorName)\n          ? rallyLibT('rally.lib.rate.bodyAuthor', lang, { name: tour.origin.authorName })\n          : t('rally.lib.rate.body', lang)}\n      </div>\n      <div role=\"radiogroup\" aria-label={t('rally.lib.rate.kicker', lang)} style={{ display: 'flex', gap: 4, marginTop: 10 }}>\n        {[1, 2, 3, 4, 5].map(n => (\n          <button key={n} type=\"button\" role=\"radio\" aria-checked={stars === n} className=\"rally-tap\" disabled={!fn || busy || notPlayed}\n            aria-label={rallyLibT('rally.lib.rate.starAria', lang, { n })} onClick={() => rate(n)}\n            style={{\n              width: 48, height: 48, borderRadius: 12, border: 'none', background: 'transparent', padding: 0,\n              cursor: fn && !notPlayed ? 'pointer' : 'not-allowed', fontSize: 32, lineHeight: 1,\n              color: n <= stars ? 'var(--coin)' : 'var(--ink-3)', opacity: n <= stars ? 1 : 0.55,\n              textShadow: n <= stars ? '0 2px 0 var(--coin-dk, #C9A00F)' : 'none',\n            }}>★</button>\n        ))}\n      </div>\n      {notPlayed && (\n        <div role=\"status\" style={{ marginTop: 6, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.45, color: 'var(--ink-2)' }}>\n          {t('rally.lib.rate.notPlayed', lang)}\n        </div>\n      )}\n      {stars > 0 && !notPlayed && (\n        <div aria-live=\"polite\" style={{ marginTop: 6, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, color: 'var(--ink-2)' }}>\n          {rallyLibT(justRated ? 'rally.lib.rate.thanks' : 'rally.lib.rate.yours', lang, { n: stars })}\n        </div>\n      )}\n    </div>\n  );\n}\n\nwindow.RallyLibraryView = RallyLibraryView;\nwindow.RallyLibDetail = RallyLibDetail;\nwindow.RallyPublishSheet = RallyPublishSheet;\nwindow.RallyLibNudge = RallyLibNudge;\nwindow.RallyLibRate = RallyLibRate;\nwindow.rallyLibNudgeOff = rallyLibNudgeOff;\nwindow.rallyLibSetNudgeOff = rallyLibSetNudgeOff;\n"],
  "mappings": "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",
  "names": ["key", "lang", "vars", "s", "k", "obj", "name", "dev", "me", "fallback", "v", "str", "iso", "d", "text", "ta", "ok", "code", "loc", "tpl", "b", "official", "title", "tour", "txt", "st", "p", "de", "en", "n", "out", "textOf", "check", "x", "tk", "i", "kinds", "l", "E", "fn", "c", "dur", "dist", "est", "list", "f", "e", "tp", "sort", "arr", "a", "facts", "def", "setV", "pts", "end", "sc", "avg", "count", "size", "full", "kicker", "onBack", "checked", "onChange", "label", "hint", "active", "onClick", "icon", "body", "tone", "children", "style", "map", "theme", "onOpen", "isMine", "r", "meta", "userId", "user", "ownerId", "onOpenTour", "onCreateEvent", "openRequest", "onRequestHandled", "onDetailChange", "showToast", "onNeedAccount", "ownToast", "ownShow", "toast", "factsV", "pack", "setPack", "audience", "setAudience", "maxDur", "setMaxDur", "setSort", "remote", "setRemote", "loadFailed", "setLoadFailed", "filterOpen", "setFilterOpen", "codeTxt", "setCodeTxt", "codeBusy", "setCodeBusy", "detail", "setDetail", "packsRef", "S", "load", "res", "openDetail", "closeDetail", "findOfficial", "id", "o", "resolve", "mountedRef", "g", "req", "submitCode", "filters", "merged", "seen", "sorted", "isOtherLang", "firstOther", "filterCount", "anyFilter", "resetFilters", "template", "busy", "setBusy", "reportOpen", "setReportOpen", "reason", "setReason", "reported", "setReported", "desc", "center", "tplLang", "basedOn", "ownStats", "setOwnStats", "alive", "adopt", "then", "tr", "use", "sendReport", "m", "stats", "updated", "q", "open", "onClose", "onPublished", "onUnpublished", "onViewInLibrary", "setDesc", "packs", "setPacks", "visibility", "setVisibility", "anon", "setAnon", "authorName", "setAuthorName", "agreed", "setAgreed", "failIssues", "setFailIssues", "result", "setResult", "resultWasUpdate", "setResultWasUpdate", "existing", "setExisting", "confirmUnpub", "setConfirmUnpub", "excluded", "setExcluded", "pubLang", "setPubLang", "pubId", "prefillRef", "ex", "get", "origin", "pubTour", "ownStations", "excludedCount", "removedNotes", "checkTour", "prep", "pr", "privateHits", "issues", "errors", "stationNo", "issueText", "canPublish", "nameOk", "ready", "isUpdate", "togglePack", "publish", "unpublish", "url", "doCopy", "doShare", "no", "keep", "h", "tourId", "onPublish", "onDismiss", "onRated", "canRate", "rawId", "tplId", "stars", "setStars", "justRated", "setJustRated", "notPlayed", "setNotPlayed", "rate"]
}
