05010771a3
A tiny typed i18n layer (no library): en.ts is the single source of UI copy and the clarity rewrite lives there — shorter sentences, plain words, the dense Methodology/Scoreboard copy untangled. de.ts mirrors its shape exactly, enforced by the compiler, with placeholder parity covered by tests. Every page now reads from the dictionary via useT(); dates flip locale through useFormat() (en-GB/de-DE); raw server values (status, outcome, stage) map through total records. The header gains an EN/DE toggle (persisted, defaults from the browser language); <html lang> stays in sync. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
12 lines
512 B
TypeScript
12 lines
512 B
TypeScript
import type { ReactNode } from 'react';
|
|
|
|
/** Consistent section heading: smallcaps label with optional right-side extra. */
|
|
export function SectionTitle({ children, extra }: { children: ReactNode; extra?: ReactNode }) {
|
|
return (
|
|
<div className="mb-3 mt-6 flex items-baseline justify-between gap-3 first:mt-0">
|
|
<h2 className="smallcaps text-xs font-bold uppercase tracking-widest text-faint">{children}</h2>
|
|
{extra != null && <div className="text-xs text-faint">{extra}</div>}
|
|
</div>
|
|
);
|
|
}
|