Основная информация
+-
+
- Дата +
- {formatRaceDate(race.date)} +
- Дистанция +
- {formatDistance(race.distanceKm)} +
- Статус +
- {getRaceStatusLabel(race.status)} +
Загружаем данные старта...
+{errorMessage ?? "Старт не найден."}
+ + Вернуться к списку стартов + ++ {formatRaceDate(race.date)} · {formatDistance(race.distanceKm)} +
++ Метрики появятся после завершения старта и ввода результата. +
+ )} +{race.notes?.trim() ? race.notes : "Заметок пока нет."}
+{race.title}
++ + {race.title} + +
{formatRaceDate(race.date)} · {formatDistance(race.distanceKm)}
diff --git a/frontend/src/styles/global.css b/frontend/src/styles/global.css index eee2a88..766e92b 100644 --- a/frontend/src/styles/global.css +++ b/frontend/src/styles/global.css @@ -183,6 +183,12 @@ a { font-weight: 600; } +.race-card__link:hover, +.race-card__link:focus-visible { + text-decoration: underline; + outline: none; +} + .race-card__meta { margin: var(--space-2) 0 0; color: var(--color-text-muted); @@ -209,9 +215,86 @@ a { color: var(--color-success); } +.page-link { + margin-top: var(--space-4); + display: inline-flex; + color: var(--color-accent); + font-weight: 600; +} + +.page-link:hover, +.page-link:focus-visible { + text-decoration: underline; + outline: none; +} + +.race-details-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: var(--space-4); +} + +.race-details-grid { + margin-top: var(--space-6); + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: var(--space-4); +} + +.race-details-card { + border: 1px solid var(--color-border); + border-radius: var(--radius-md); + padding: var(--space-5); + background: #fcfdff; +} + +.race-details-card--notes { + margin-top: var(--space-4); +} + +.race-details-card__title { + margin: 0 0 var(--space-3); + font-size: var(--font-size-body); + color: var(--color-text-muted); +} + +.race-details-card__empty, +.race-details-card__notes { + margin: 0; + color: var(--color-text-muted); +} + +.race-details-meta { + margin: 0; + display: grid; + gap: var(--space-3); +} + +.race-details-meta__item { + display: grid; + gap: var(--space-1); +} + +.race-details-meta__key { + color: var(--color-text-muted); + font-size: var(--font-size-caption); +} + +.race-details-meta__value { + margin: 0; + font-weight: 600; + color: var(--color-text); +} + @media (max-width: 900px) { .dashboard-grid, - .race-lists { + .race-lists, + .race-details-grid { grid-template-columns: 1fr; } + + .race-details-header { + flex-direction: column; + } }