From 808fb26ab660730bc5dbe60dfa37c8d97cc42b26 Mon Sep 17 00:00:00 2001 From: Julian Cuni Date: Fri, 19 Jun 2026 10:07:39 +0200 Subject: [PATCH] feat(web): UI component layer + dark-theme reskin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The TRM tokens were good but every screen hand-rolled inputs and buttons as bare outlines on near-black panels, so fields, cards and buttons were visually indistinguishable. Add a component layer (.input/.select/.textarea as recessed slots, .btn family with a FILLED primary, .card scaffolding) and adopt it across the booth/shift/login/tariff/site screens — several of which were still light-theme inline styles dropped on a dark background. Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V --- apps/web/src/ActiveSessions.tsx | 2 +- apps/web/src/BoothPayModal.tsx | 19 ++-- apps/web/src/BoothScreen.tsx | 7 +- apps/web/src/Login.tsx | 52 ++++----- apps/web/src/ShiftControl.tsx | 86 +++++++-------- apps/web/src/SiteSettings.tsx | 65 +++++++----- apps/web/src/TariffComposer.tsx | 182 +++++++++++++++++--------------- apps/web/src/index.css | 161 ++++++++++++++++++++++++++++ 8 files changed, 371 insertions(+), 203 deletions(-) diff --git a/apps/web/src/ActiveSessions.tsx b/apps/web/src/ActiveSessions.tsx index 1eb6e6d..282e0b4 100644 --- a/apps/web/src/ActiveSessions.tsx +++ b/apps/web/src/ActiveSessions.tsx @@ -108,7 +108,7 @@ export function ActiveSessions({ onPick }: { onPick: (identity: string) => void type="button" disabled={reopen.isPending || !shiftReady} onClick={() => handleReopen(s)} - className="shrink-0 rounded-term border border-term-cyan px-2 py-0.5 text-[10px] uppercase tracking-wider text-term-cyan hover:bg-term-cyan/10 disabled:opacity-50" + className="btn btn-pay btn-sm shrink-0" title={shiftReady ? t("booth.openBarrierTitle") : t("shift.gateTitle")} > {t("booth.openBarrier")} diff --git a/apps/web/src/BoothPayModal.tsx b/apps/web/src/BoothPayModal.tsx index 3b9dda4..11f5492 100644 --- a/apps/web/src/BoothPayModal.tsx +++ b/apps/web/src/BoothPayModal.tsx @@ -186,7 +186,7 @@ export function BoothPayModal({ identity, onClose }: { identity: string; onClose type="button" onClick={handleOpenShift} disabled={openingShift} - className="mt-2 rounded-term border border-term-green bg-term-green/10 px-3 py-1 text-[12px] font-semibold uppercase tracking-wider text-term-green disabled:opacity-50" + className="btn btn-go btn-sm mt-2" > {openingShift ? t("shift.opening") : t("shift.openNow")} @@ -263,11 +263,7 @@ export function BoothPayModal({ identity, onClose }: { identity: string; onClose key={tn} type="button" onClick={() => setTender(tn)} - className={`rounded-term border px-3 py-1 text-[12px] uppercase tracking-wider ${ - tender === tn - ? "border-term-amber text-term-amber" - : "border-term-border text-term-muted hover:text-term-text" - }`} + className={tender === tn ? "btn btn-primary btn-sm" : "btn btn-sm"} > {t(`pay.${tn}`)} @@ -279,6 +275,7 @@ export function BoothPayModal({ identity, onClose }: { identity: string; onClose