feat(quick-260916-bwo): Widget-Inhalt skaliert per Container-Queries (Uhr, Stoppuhr, Rechner), Punktgroesse der Uhrzeit einstellbar

- widget-wrapper.tsx: Rumpf ist Groessen-Container (@container-size) fuer cqw/cqh
- clock-font-size.ts (neu): Grenzen 8..200, resolveClockTimeFontSizePt nur fuer endliche Zahlen (T-BWO-01)
- clock-widget.tsx: Container-Query-Klassen mit clamp(), data-font-mode auto/fixed, Inline-pt nur bei Zahl, keine vw-Formel mehr, p-1
- stopwatch-widget.tsx: Anzeige per Container-Query, p-1.5; calculator-widget.tsx: Anzeige und Tasten skalieren, Tasten h-full min-h-7, p-1
- widget-settings-panel.tsx: Zahlenfeld Schriftgroesse der Uhrzeit (Blur/Enter, leer = automatisch, Fehlermeldung ausserhalb 8..200)
- de.json/en.json: widgets.clock.fontSizeLabel/fontSizeAuto/fontSizeHint/fontSizeInvalid (Sie-Form, Waechter gruen)
- Tests: Uhr +4, Stoppuhr +1, Rechner +1, widget-settings-panel.test.tsx neu (4)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018N9CD3ebPKm1b32bPpBknY
This commit is contained in:
2026-09-16 09:12:02 +02:00
parent 3f5afb0f54
commit 2d8efe1a97
12 changed files with 364 additions and 20 deletions
@@ -65,8 +65,13 @@ export function WidgetWrapper({ widget, isEditMode, onRemove }: WidgetWrapperPro
</button>
)}
{/* Widget body */}
<div className={`h-full ${isEditMode ? 'pt-0' : ''}`}>
{/* Widget body.
quick-260916-bwo: Groessen-Container (@container-size -> container-type: size),
damit die Widget-Inhalte per cqw/cqh mit der Kachel skalieren. Braucht eine
definite Hoehe — die kommt ueber h-full aus der Karte, die das RGL-Element
mit Pixelhoehe fuellt. Steht am Rumpf statt an der Karte, weil die Karte
im Bearbeitungsmodus zusaetzlich den Griff traegt. */}
<div className={`@container-size h-full ${isEditMode ? 'pt-0' : ''}`}>
{WidgetComponent ? (
<WidgetComponent
instanceId={widget.id}