diff --git a/.aiideas b/.aiideas index 49d9059..904ea96 100644 --- a/.aiideas +++ b/.aiideas @@ -1,117 +1,103 @@ -Rolle: Du bist ein Senior Frontend Engineer(React / Tailwind) und UI / UX Designer.Ziel: Wir machen ein umfassendes UI - Overhaul einer bestehenden Whisky - App("WhiskyVault") und benennen sie um in "DramLog".Das Ziel ist eine Premium - Mobile - Experience(Dark Mode, Gold Akzente, Serif Fonts). +Rolle: Du bist ein UI - Designer mit Fokus auf "Modern Minimalist" Design(Stilrichtung: Linear, Teenage Engineering, Vercel).Ziel: Redesign der Whisky - App "DramLog".Wir verabschieden uns vom klassischen "Luxus-Look"(Gold / Serifen) und nutzen einen "Industrial Dark" Stil. -Tech Stack: React, Tailwind CSS, Lucide - React Icons. -1. Globales Design - System(Anwenden auf alle Views) +Design Rules & Tokens: -Branding: App Name ist "DramLog". + Color Palette(Tailwind): - Farben: +Bg - App: bg - zinc - 950(Ein sehr dunkles, warmes Grau, kein hartes Schwarz). -Background: #0F1014(Deep Rich Black) + Bg - Card: bg - zinc - 900(Deutlich abgesetzt vom Hintergrund). -Surface: #1A1B20(Card Backgrounds) + Text - Primary: text - zinc - 50(Fast Weiß, hoher Kontrast). - Primary Accent: #C89D46(Whisky Amber / Gold) + Text - Secondary: text - zinc - 400(Mittelgrau für Labels). -Text - Secondary: #8F9096 + Accent: text - orange - 500(Ein sattes, mattes Orange für Highlights) und bg - orange - 600 für Primary Buttons.Keine Verläufe / Gradients, sondern flache("flat") Farben. -Typografie: + Typography: - Importiere und nutze Playfair Display(Serif) für: Überschriften(h1 - h3), Whisky - Namen auf Cards. + Nutze Inter oder DM Sans für alles. - Nutze Inter(Sans) für: UI - Elemente, Labels, Fließtext, Daten. + Headlines: font - bold tracking - tight(Enger Buchstabenabstand, wirkt kompakt und modern). - Shape: rounded - 2xl für Cards, rounded - full für Buttons. + Labels: uppercase text - xs tracking - widest font - semibold(Technischer Look). -2. Spezifische Component Refactorings + Component: Whisky Card(Clean Split): -A.Dashboard(Home View): + Kein Text mehr über dem Bild! - Entferne die grauen Hintergründe der 4 oberen Statistik - Boxen.Zeige die Werte(Zahlen) groß in Playfair Display(Weiß) und die Labels klein darunter(Grau).Ordne sie in einem Grid oder einer flex - row mit justify - between an. +Top: Bild(Aspect Ratio 4: 3 oder 16: 9), rounded - t - xl. - Benenne "Dein Bestand" um in "Collection". + Bottom: Info - Block(p - 4 bg - zinc - 900 rounded - b - xl). - Mache die Listen - Einträge unter "Tasting Sessions" interaktiv.Entferne die sichtbaren Trash / Edit Buttons und nutze ein sauberes Listen - Layout. + Inhalt: Whisky Name(Bold, White), darunter Destillerie(Orange, Small). - B.Whisky Card(Collection Grid): + Tags: Kleine "Pills" mit bg - zinc - 800 text - zinc - 300. - Redesign der Card - Komponente. +Component: Dashboard Stats: - Bild: Muss bis an den Rand gehen(w - full, kein Padding). +Minimalistisch.Nur die Zahl(riesig, z.B.text - 4xl font - bold text - white) und darunter das Label(text - zinc - 500). - Overlay: Lege einen bg - gradient - to - t from - black via - black / 80 to - transparent über das untere Drittel des Bildes. + Keine Boxen, keine Rahmen. "Data Ink Ratio" optimieren. - Text: Platziere Name(Serif) und Destillerie(Sans, Uppercase, Gold) weiß auf dem Bild im unteren Bereich(über dem Gradient). + Component: Floating Navigation(The Capsule): - Tags: Mache Tags minimalistisch(bg - white / 10 backdrop - blur - sm text - xs border border - white / 10). + Statt einer durchgehenden Leiste unten, nutze eine "Floating Capsule". -3. Die "Floating" Navigation(Core Feature) + Eine abgerundete "Insel"(rounded - full) die ca. 20px über dem unteren Bildschirmrand schwebt. -Erstelle eine neue Komponente BottomNavigation.Sie ersetzt alle bisherigen Menüs.Sie muss am unteren Bildschirmrand fixiert sein.WICHTIG: Implementiere exakt dieses Layout - Pattern für den schwebenden Button: + Breite: ca. 90 % des Screens oder max - w - md. + + Farbe: bg - zinc - 800 / 90 backdrop - blur - md border border - zinc - 700. + + Scan Button: In der Mitte der Kapsel, Kreis in bg - orange - 600(Flat, kein Schatten), weißes Icon. + + Code - Snippet für die "Industrial Capsule Navigation": JavaScript -// Reference Implementation for BottomNavigation.jsx -import { Home, Grid, Scan, User, Search } from 'lucide-react'; +import { Home, Grid, Scan, User } from 'lucide-react'; -export const BottomNavigation = () => { +export const NavigationCapsule = () => { return ( -
- {/* Background Container mit Glassmorphism */ } - < div className = "relative bg-[#0F1014]/90 backdrop-blur-xl border-t border-white/10 pb-safe pt-2" > +
+
-
- - {/* Left Actions */ } - < button className = "flex flex-col items-center gap-1 text-[#C89D46] w-12" > - - < span className = "text-[10px] font-medium" > Home - - - < button className = "flex flex-col items-center gap-1 text-gray-500 hover:text-white w-12 transition-colors" > - - < span className = "text-[10px] font-medium" > Shelf - - - {/* Spacer für den Center Button */ } -
- - {/* Right Actions */ } - < button className = "flex flex-col items-center gap-1 text-gray-500 hover:text-white w-12 transition-colors" > - - < span className = "text-[10px] font-medium" > Search + {/* Left Item */ } + < button className = "p-3 text-zinc-400 hover:text-white transition-colors" > + - < button className = "flex flex-col items-center gap-1 text-gray-500 hover:text-white w-12 transition-colors" > - - < span className = "text-[10px] font-medium" > Profile - -
- - {/* THE FLOATING MAGIC BUTTON */ } -
- -
-
-
+ {/* PRIMARY ACTION - The "Industrial Button" */ } + + + {/* Right Item */ } + + + {/* Right Item (Settings/More) */ } + + +
+
); }; -Aufgabe: +Aufgabe: Setze die bestehenden Views(Dashboard und Liste) mit diesen neuen "Industrial Dark" Regeln um.Sorge für klare Kontraste durch zinc - 950 vs zinc - 900 Flächen. +Was dieser Look ändert: - Implementiere das globale Styling(Fonts / Colors). +Lesbarkeit: Durch den zinc - 900 Hintergrund der Karten hebt sich der weiße Text extrem gut ab.Kein "Text auf unruhigem Foto" - Problem mehr. - Baue die BottomNavigation ein(ersetze alte Navs). + Modernität: Das "Pill" - Menü(Capsule) sieht aus wie bei modernen iOS Apps(Dynamic Island Ästhetik). - Passe die Dashboard View an den neuen "Clean Look" an. - - Passe die WhiskyCard an den neuen "Editorial Look" an. \ No newline at end of file + Ehrlichkeit: Es versucht nicht, "altes Geld"(Gold / Serifen) zu imitieren, sondern wirkt wie ein modernes Werkzeug für Enthusiasten. \ No newline at end of file diff --git a/src/app/global-error.tsx b/src/app/global-error.tsx index 6119cb9..825662d 100644 --- a/src/app/global-error.tsx +++ b/src/app/global-error.tsx @@ -12,10 +12,10 @@ export default function GlobalError({ return ( -
-
+
+
-

Kritischer Fehler

+

Kritischer Fehler

Ein schwerwiegender Fehler ist aufgetreten. Bitte versuche die Seite neu zu laden.

@@ -23,7 +23,7 @@ export default function GlobalError({ @@ -206,7 +206,7 @@ export default function Home() {
-
+
@@ -215,27 +215,27 @@ export default function Home() {
-
+
-

+

Collection

- + {bottles.length} Bottles
{isLoading ? (
-
+
) : fetchError ? ( -
-

{t('common.error')}

-

{fetchError}

+
+

{t('common.error')}

+

{fetchError}

diff --git a/src/components/ActiveSessionBanner.tsx b/src/components/ActiveSessionBanner.tsx index 254eb6a..1cc8dce 100644 --- a/src/components/ActiveSessionBanner.tsx +++ b/src/components/ActiveSessionBanner.tsx @@ -14,7 +14,7 @@ export default function ActiveSessionBanner() { return (
-
+
-
+
diff --git a/src/components/AvatarStack.tsx b/src/components/AvatarStack.tsx index 85e4040..5161103 100644 --- a/src/components/AvatarStack.tsx +++ b/src/components/AvatarStack.tsx @@ -30,7 +30,7 @@ export default function AvatarStack({ names, limit = 3, size = 'sm' }: AvatarSta {visibleNames.map((name, i) => (
{getInitials(name)} diff --git a/src/components/BottleDetails.tsx b/src/components/BottleDetails.tsx index 23cada4..5db25ae 100644 --- a/src/components/BottleDetails.tsx +++ b/src/components/BottleDetails.tsx @@ -24,7 +24,7 @@ export default function BottleDetails({ bottleId, sessionId, userId }: BottleDet if (loading) { return (
- +

{t('common.loading')}

); @@ -42,7 +42,7 @@ export default function BottleDetails({ bottleId, sessionId, userId }: BottleDet Inhalte konnten nicht geladen werden. Bitte stelle eine Internetverbindung her, um diese Flasche zum ersten Mal zu laden.

- + Zurück zum Vault
@@ -56,22 +56,22 @@ export default function BottleDetails({ bottleId, sessionId, userId }: BottleDet {/* Back Button */} Zurück zur Sammlung {isOffline && ( -
- -

Offline-Modus: Daten aus dem Cache

+
+ +

Offline-Modus: Daten aus dem Cache

)} {/* Hero Section */}
-
+
{bottle.name}
-

+

{bottle.name}

-

{bottle.distillery}

+

{bottle.distillery}

{bottle.whiskybase_id && (
@@ -92,9 +92,9 @@ export default function BottleDetails({ bottleId, sessionId, userId }: BottleDet href={`https://www.whiskybase.com/whiskies/whisky/${bottle.whiskybase_id}`} target="_blank" rel="noopener noreferrer" - className="inline-flex items-center gap-2 px-4 py-2 bg-[#db0000] text-white rounded-xl text-sm font-bold shadow-lg shadow-red-600/20 hover:scale-[1.05] transition-transform" + className="inline-flex items-center gap-2 px-4 py-2 bg-zinc-900 text-zinc-400 border border-zinc-800 rounded-xl text-xs font-bold hover:text-orange-600 transition-colors" > - + Whiskybase ID: {bottle.whiskybase_id}
@@ -102,59 +102,59 @@ export default function BottleDetails({ bottleId, sessionId, userId }: BottleDet
-
+
-
+
Kategorie
-
{bottle.category || '-'}
+
{bottle.category || '-'}
-
-
+
+
Alkoholgehalt
-
{bottle.abv}% Vol.
+
{bottle.abv}% Vol.
-
-
+
+
Alter
-
{bottle.age ? `${bottle.age} J.` : '-'}
+
{bottle.age ? `${bottle.age} J.` : '-'}
{bottle.distilled_at && ( -
-
+
+
Destilliert
-
{bottle.distilled_at}
+
{bottle.distilled_at}
)} {bottle.bottled_at && ( -
-
+
+
Abgefüllt
-
{bottle.bottled_at}
+
{bottle.bottled_at}
)} {bottle.batch_info && ( -
-
+
+
Batch / Code
-
{bottle.batch_info}
+
{bottle.batch_info}
)} -
-
+
+
Letzter Dram
-
+
{tastings && tastings.length > 0 ? new Date(tastings[0].created_at).toLocaleDateString('de-DE') : 'Noch nie'} @@ -164,9 +164,9 @@ export default function BottleDetails({ bottleId, sessionId, userId }: BottleDet
{isOffline ? ( -
- - Bearbeiten & Löschen nur online möglich +
+ + Bearbeiten & Löschen nur online möglich
) : ( <> @@ -178,21 +178,21 @@ export default function BottleDetails({ bottleId, sessionId, userId }: BottleDet
-
+
{/* Tasting Notes Section */}
-

Tasting Notes

+

Tasting Notes

Hier findest du deine bisherigen Eindrücke.

{/* Form */} -
-

+
+

Dram bewerten

diff --git a/src/components/BottleGrid.tsx b/src/components/BottleGrid.tsx index 248f105..a061d18 100644 --- a/src/components/BottleGrid.tsx +++ b/src/components/BottleGrid.tsx @@ -36,71 +36,65 @@ function BottleCard({ bottle, sessionId }: BottleCardProps) { return ( - {/* Image Layer - Edge to Edge */} -
+ {/* Image Layer - Clean Split Top */} +
{bottle.name} - - {/* Gradient Overlay as requested: bottom third, black to transparent */} -
- {/* Content Layer */} -
-
- {/* Tags Layer - Minimalist Glassmorphism */} -
- - {shortenCategory(bottle.category)} - - - {bottle.abv}% VOL - -
+ {/* Info Layer - Clean Split Bottom */} +
+
+

+ {bottle.distillery} +

+

+ {bottle.name || t('grid.unknownBottle')} +

+
-
-

- {bottle.distillery} -

-

- {bottle.name || t('grid.unknownBottle')} -

-
+
+ + {shortenCategory(bottle.category)} + + + {bottle.abv}% VOL + +
- {/* Metadata items */} -
-
- - {new Date(bottle.created_at).toLocaleDateString(locale === 'de' ? 'de-DE' : 'en-US')} + {/* Metadata items */} +
+
+ + {new Date(bottle.created_at).toLocaleDateString(locale === 'de' ? 'de-DE' : 'en-US')} +
+ {bottle.last_tasted && ( +
+ + {new Date(bottle.last_tasted).toLocaleDateString(locale === 'de' ? 'de-DE' : 'en-US')}
- {bottle.last_tasted && ( -
- - {new Date(bottle.last_tasted).toLocaleDateString(locale === 'de' ? 'de-DE' : 'en-US')} -
- )} -
+ )}
{/* Top Overlays */} {(bottle.is_whisky === false || (bottle.confidence && bottle.confidence < 70)) && ( -
-
- +
+
+
)} {sessionId && ( -
- - ADD TO SESSION +
+ + ADD
)} @@ -200,13 +194,13 @@ export default function BottleGrid({ bottles }: BottleGridProps) {
- + setSearchQuery(e.target.value)} - className="w-full pl-8 pr-8 py-4 bg-transparent border-b border-white/10 focus:border-[#C89D46] outline-none transition-all text-white placeholder:text-[#8F9096] font-sans" + className="w-full pl-8 pr-8 py-4 bg-transparent border-b border-zinc-800 focus:border-orange-500 outline-none transition-all text-zinc-50 placeholder:text-zinc-500" /> {searchQuery && (
- {/* Category Quick Filter - Glass Chips */} + {/* Category Quick Filter - Flat Chips */}
- {/* Collapsible Advanced Filters - Minimalist Overlay */} + {/* Collapsible Advanced Filters - Industrial Overlay */} {isFiltersOpen && ( -
+
- +
-
+
diff --git a/src/components/BottomNavigation.tsx b/src/components/BottomNavigation.tsx index 8fe190e..39f847c 100644 --- a/src/components/BottomNavigation.tsx +++ b/src/components/BottomNavigation.tsx @@ -31,7 +31,7 @@ export const BottomNavigation = ({ onHome, onShelf, onSearch, onProfile, onScan }; return ( -
+
{/* Hidden Input for Scanning */} - {/* Background Container mit Glassmorphism */} -
+
+ {/* Left Items */} + -
- {/* Left Actions */} - + - + {/* PRIMARY ACTION - The "Industrial Button" */} + - {/* Spacer für den Center Button */} -
- - {/* Right Actions */} - - - -
- - {/* THE FLOATING MAGIC BUTTON */} -
- - {/* Visual Gold Glow */} -
-
+ {/* Right Items */} + +
); diff --git a/src/components/BuddyList.tsx b/src/components/BuddyList.tsx index 4ba9208..4aebbcc 100644 --- a/src/components/BuddyList.tsx +++ b/src/components/BuddyList.tsx @@ -80,18 +80,18 @@ export default function BuddyList() { }; return ( -
+
-

- +

+ {t('buddy.title')} {!isCollapsed && buddies.length > 0 && ( - ({buddies.length}) + ({buddies.length}) )}

{isLoading ? ( -
+
) : buddies.length === 0 ? ( -
+
{t('buddy.noBuddies')}
) : ( @@ -130,22 +130,22 @@ export default function BuddyList() { {buddies.map((buddy) => (
-
+
{buddy.name[0].toUpperCase()}
- {buddy.name} + {buddy.name} {buddy.buddy_profile_id && ( - {t('common.link')} + {t('common.link')} )}
@@ -160,17 +160,17 @@ export default function BuddyList() {
{buddies.slice(0, 5).map((b, i) => ( -
+
{b.name[0].toUpperCase()}
))} {buddies.length > 5 && ( -
+
+{buddies.length - 5}
)}
- {buddies.length} Buddies + {buddies.length} Buddies
)}
diff --git a/src/components/DramOfTheDay.tsx b/src/components/DramOfTheDay.tsx index 8bdfe23..d34ad47 100644 --- a/src/components/DramOfTheDay.tsx +++ b/src/components/DramOfTheDay.tsx @@ -44,7 +44,7 @@ export default function DramOfTheDay({ bottles }: DramOfTheDayProps) { {suggestion && ( -
-
+
+
-
+
-

{t('home.dramOfDay.title')}

-

+

{t('home.dramOfDay.title')}

+

{suggestion.name}

{suggestion.distillery && ( @@ -83,13 +83,13 @@ export default function DramOfTheDay({ bottles }: DramOfTheDayProps) { setSuggestion(null)} - className="block w-full py-4 bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 rounded-2xl font-black uppercase tracking-widest text-xs hover:bg-amber-600 dark:hover:bg-amber-600 hover:text-white transition-all shadow-xl" + className="block w-full py-4 bg-orange-600 text-white rounded-2xl font-bold uppercase tracking-widest text-xs hover:bg-orange-700 transition-all shadow-xl shadow-orange-950/20" > {t('home.dramOfDay.viewBottle')} diff --git a/src/components/EditBottleForm.tsx b/src/components/EditBottleForm.tsx index f1758da..6d6223d 100644 --- a/src/components/EditBottleForm.tsx +++ b/src/components/EditBottleForm.tsx @@ -123,9 +123,9 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro } return ( -
+
-

+

{t('bottle.editTitle')}

@@ -152,7 +152,7 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro type="text" value={formData.distillery} onChange={(e) => setFormData({ ...formData, distillery: e.target.value })} - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" + className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-orange-600/50" />
@@ -161,7 +161,7 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro type="text" value={formData.category} onChange={(e) => setFormData({ ...formData, category: e.target.value })} - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" + className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-orange-600/50" />
@@ -172,7 +172,7 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro step="0.1" value={formData.abv} onChange={(e) => setFormData({ ...formData, abv: parseFloat(e.target.value) })} - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" + className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-orange-600/50" />
@@ -181,7 +181,7 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro type="number" value={formData.age} onChange={(e) => setFormData({ ...formData, age: parseInt(e.target.value) })} - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" + className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-orange-600/50" />
@@ -192,7 +192,7 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro type="button" onClick={handleDiscover} disabled={isSearching} - className="text-amber-600 hover:text-amber-700 flex items-center gap-1 normal-case font-bold" + className="text-orange-600 hover:text-orange-700 flex items-center gap-1 normal-case font-bold" > {isSearching ? : } {t('bottle.autoSearch')} @@ -202,17 +202,17 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro type="text" value={formData.whiskybase_id} onChange={(e) => setFormData({ ...formData, whiskybase_id: e.target.value })} - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" + className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-orange-600/50" /> {discoveryResult && ( -
+

Treffer gefunden:

-

{discoveryResult.title}

+

{discoveryResult.title}

@@ -236,7 +236,7 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro placeholder="0.00" value={formData.purchase_price} onChange={(e) => setFormData({ ...formData, purchase_price: e.target.value })} - className="w-full px-4 py-2 bg-amber-50 dark:bg-amber-900/10 border border-amber-200 dark:border-amber-900/30 rounded-xl outline-none focus:ring-2 focus:ring-amber-500 font-bold text-amber-700 dark:text-amber-400" + className="w-full px-4 py-2 bg-zinc-950 border border-zinc-800 rounded-xl outline-none focus:ring-2 focus:ring-orange-600/50 font-bold text-zinc-100" />
@@ -247,7 +247,7 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro placeholder="z.B. 2010" value={formData.distilled_at} onChange={(e) => setFormData({ ...formData, distilled_at: e.target.value })} - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" + className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-orange-600/50" />
@@ -258,7 +258,7 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro placeholder="z.B. 2022" value={formData.bottled_at} onChange={(e) => setFormData({ ...formData, bottled_at: e.target.value })} - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" + className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-orange-600/50" />
@@ -269,7 +269,7 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro placeholder="z.B. Batch 12 oder L-Code" value={formData.batch_info} onChange={(e) => setFormData({ ...formData, batch_info: e.target.value })} - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" + className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-orange-600/50" />
@@ -279,7 +279,7 @@ export default function EditBottleForm({ bottle, onComplete }: EditBottleFormPro
); diff --git a/src/components/LanguageSwitcher.tsx b/src/components/LanguageSwitcher.tsx index 0c0943b..d309ec6 100644 --- a/src/components/LanguageSwitcher.tsx +++ b/src/components/LanguageSwitcher.tsx @@ -11,8 +11,8 @@ const LanguageSwitcher = () => { @@ -210,15 +210,15 @@ export default function PlanManagementClient({ initialPlans }: PlanManagementCli {/* Edit/Create Modal */} {(editingPlan || isCreating) && ( -
-
+
+
-

+

{isCreating ? 'Create Plan' : 'Edit Plan'}

@@ -227,79 +227,79 @@ export default function PlanManagementClient({ initialPlans }: PlanManagementCli
- + setFormData({ ...formData, name: e.target.value })} placeholder="e.g. starter" - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-amber-500/50" + className="w-full px-4 py-2 bg-zinc-800 border border-zinc-700 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-orange-600/50 text-white" />
- + setFormData({ ...formData, display_name: e.target.value })} placeholder="e.g. Starter" - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-amber-500/50" + className="w-full px-4 py-2 bg-zinc-800 border border-zinc-700 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-orange-600/50 text-white" />
- + setFormData({ ...formData, monthly_credits: parseInt(e.target.value) || 0 })} - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-amber-500/50" + className="w-full px-4 py-2 bg-zinc-800 border border-zinc-700 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-orange-600/50 text-white" />
- + setFormData({ ...formData, price: parseFloat(e.target.value) || 0 })} - className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-amber-500/50" + className="w-full px-4 py-2 bg-zinc-800 border border-zinc-700 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-orange-600/50 text-white" />
- +