diff --git a/frontend/src/app.css b/frontend/src/app.css index bacc69e..a53ce54 100644 --- a/frontend/src/app.css +++ b/frontend/src/app.css @@ -6658,6 +6658,21 @@ button.combo-coach-cand-link:hover { max-width: none !important; padding: 0 !important; } + /* Split: jede weitere Breakout-Spalte auf neuer Seite (Gesamtplan-Druck) */ + .training-run-breakout-stream--page-break { + break-before: page; + page-break-before: always; + } + .training-run-parallel-columns { + display: block !important; + } + .training-run-breakout-stream { + margin-bottom: 14px; + } + .training-run-phase-schedule { + break-inside: avoid; + page-break-inside: avoid; + } .training-run-section, .training-run-header { break-inside: avoid; diff --git a/frontend/src/pages/TrainingCoachPage.jsx b/frontend/src/pages/TrainingCoachPage.jsx index bd22b50..6df96f4 100644 --- a/frontend/src/pages/TrainingCoachPage.jsx +++ b/frontend/src/pages/TrainingCoachPage.jsx @@ -1,6 +1,6 @@ /** * Coach-Modus: eine Position nach der anderen mit Assistentenhinweisen, Zeitnahme und optionaler Nachbereitung. - * Parallele Streams: Schritte aus flattenPlanTimeline (linear); Stream-/Phasenwahl später einzubinden. + * Timeline: flach in Phasen-/Stream-Reihenfolge (flattenPlanTimeline). */ import React, { useCallback, useEffect, useMemo, useState } from 'react' import { Link, useNavigate, useParams } from 'react-router-dom' @@ -525,7 +525,7 @@ export default function TrainingCoachPage() {
{timeline.map((ent, ix) => { const lbl = summarizeTimelineEntry(ent) - const secTitle = ent.sec.title || `Abschnitt ${ent.si + 1}` + const ctx = ent.coachContext || '' const active = coachDebriefPhase ? ix === timeline.length - 1 : ix === step return ( ) @@ -573,7 +577,10 @@ export default function TrainingCoachPage() { const val = deltas[k]?.actual_duration_min ?? ent.item.actual_duration_min ?? '' return (