/* pages-inner.jsx — Kurse, KW-Plan, Checkliste, 7-Tage-Plan, Shop */ /* persistent state helper */ function useStore(key, initial) { const [val, setVal] = useState(() => { try { const r = localStorage.getItem(key); return r ? JSON.parse(r) : initial; } catch (e) { return initial; } }); useEffect(() => { try { localStorage.setItem(key, JSON.stringify(val)); } catch (e) {} }, [key, val]); return [val, setVal]; } function PageHeader({ eyebrow, title, lead, children }) { return (
{eyebrow}

{title}

{lead &&

{lead}

} {children}
); } /* ============================== Kurse ============================== */ function KursePage({ onNav }) { return (
{COURSE_CATEGORIES.map(cat => (

{cat.label}

{cat.blurb}

{cat.courses.length} Kurse
{cat.courses.map((c, i) => (

{c.t}

{c.tag && {c.tag}}
{c.lvl} {c.units} Einheiten {c.dur}
))}
))}
); } /* ============================== KW-Plan ============================== */ function KwPlanPage({ onNav }) { const [done, setDone] = useStore('rs.kw.done', {}); const allTasks = KW_PLAN.flatMap(w => w.tasks.map(t => t.id)); const doneCount = allTasks.filter(id => done[id]).length; const toggle = (id) => setDone(d => ({ ...d, [id]: !d[id] })); return (
{doneCount} / {allTasks.length} Aufgaben erledigt {Math.round((doneCount / allTasks.length) * 100)} %
{KW_PLAN.map(w => { const wd = w.tasks.filter(t => done[t.id]).length; const complete = wd === w.tasks.length; return (
KW {w.kw} {w.phase} {complete && }

Woche {w.week}

    {w.tasks.map(t => (
  • ))}
); })}
); } /* ============================== Checkliste ============================== */ function ChecklistePage({ onNav }) { const [done, setDone] = useStore('rs.check.done', {}); const all = CHECKLIST.flatMap((g, gi) => g.items.map((_, ii) => `${gi}-${ii}`)); const doneCount = all.filter(k => done[k]).length; const toggle = (k) => setDone(d => ({ ...d, [k]: !d[k] })); const reset = () => setDone({}); return (
{doneCount} / {all.length} erledigt
{CHECKLIST.map((g, gi) => { const gd = g.items.filter((_, ii) => done[`${gi}-${ii}`]).length; return (

{g.group}

{gd}/{g.items.length}
    {g.items.map((item, ii) => { const k = `${gi}-${ii}`; return (
  • ); })}
); })}
); } /* ============================== 7-Tage-Plan ============================== */ function Plan7Page({ onNav }) { const [done, setDone] = useStore('rs.p7.done', {}); const toggle = (k) => setDone(d => ({ ...d, [k]: !d[k] })); return (
    {PLAN_7.map((day, di) => (
  1. {di + 1} {di < PLAN_7.length - 1 && }
    {day.d}

    {day.focus}

    {di === PLAN_7.length - 1 && Dienststart}
      {day.tasks.map((t, ti) => { const k = `${di}-${ti}`; return (
    • ); })}
  2. ))}
); } /* ============================== Shop ============================== */ function ShopPage({ onNav }) { return (
{SHOP.map(s => (

{s.name}

{s.badge && {s.badge}}

{s.desc}

    {s.items.map((it, i) =>
  • {it}
  • )}
{s.price}
))}

Preise inkl. MwSt. Digitale Inhalte sind nach dem Kauf sofort verfügbar. Kein offizielles Angebot der Bundeswehr.

); } Object.assign(window, { KursePage, KwPlanPage, ChecklistePage, Plan7Page, ShopPage, useStore });