+ {/* Back link */}
+
+ ← {t('waves.backToAll')}
+
+
+ {/* Header */}
+
+
+
+
+ W{wave.number}
+
+
+
+
+
+ {wave.title}
+
+
+
+ {meta.label}
+
+
+
+ {t('waves.waveNumber', { number: wave.number })} · {dateRange}
+
+
+
+
+ {/* Key metrics */}
+
+
+
+ {t('waves.budget')}
+
+
+ {Number(wave.budget).toLocaleString()}
+
+ {wave.budgetToken}
+
+
+
+ {t('waves.prs')}
+
+
+ {wave.prsmerged > 0 ? wave.prsmerged : '—'}
+
+
+
+
+ {t('waves.contributors')}
+
+
+ {wave.contributors.length > 0 ? wave.contributors.length : '—'}
+
+
+
+
+ {t('waves.goals')}
+
+
+ {wave.goals.length}
+
+
+
+
+
+ {/* Summary */}
+
+
+ {t('waves.overviewHeading')}
+
+
+ {wave.summary}
+
+
+
+ {/* Goals */}
+
+
+ {t('waves.goalsHeading')}
+
+
+ {wave.goals.map((goal, i) => (
+ -
+
+ {goal}
+
+ ))}
+
+
+
+ {/* Highlights — only for completed waves */}
+ {wave.highlights.length > 0 && (
+
+
+ {t('waves.highlightsHeading')}
+
+
+ {wave.highlights.map((highlight, i) => (
+ -
+
+ {highlight}
+
+ ))}
+
+
+ )}
+
+ {/* Contributors */}
+ {wave.contributors.length > 0 && (
+
+
+ {t('waves.contributorsHeading')}
+
+
+ {t('waves.contributorsOptInNote')}
+
+
+ {optedInContributors.map((contributor) => (
+
+
+
+ {contributor.handle}
+
+
+ {contributor.role}
+
+
+
+ {contributor.prs} {contributor.prs === 1 ? t('waves.pr') : t('waves.prsLabel')}
+
+
+ ))}
+
+ {anonCount > 0 && (
+
+ {t('waves.anonNote', { count: anonCount })}
+
+ )}
+
+ )}
+
+ {/* Open wave CTA */}
+ {wave.status === 'open' && wave.issuesUrl && (
+
+ )}
+
+ {/* Winners note */}
+ {wave.winnersNote && (
+
+
+ {t('waves.dripsNote')} {wave.winnersNote}
+
+
+ )}
+
+