Update color palette and improve UI aesthetics
- Apply new teal-based color palette (#009688, #00796B, #B2DFDB) - Update secondary color to accent yellow (#FFC107) - Replace Material-UI loading states with proper animations and skeletons - Remove ugly gradient background, replace with clean white - Update all gradients to use new color scheme - Improve text colors for better readability (#212121, #757575) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -19,6 +19,8 @@ import {
|
|||||||
Button,
|
Button,
|
||||||
Chip,
|
Chip,
|
||||||
useTheme,
|
useTheme,
|
||||||
|
CircularProgress,
|
||||||
|
Skeleton,
|
||||||
} from '@mui/material'
|
} from '@mui/material'
|
||||||
import {
|
import {
|
||||||
MenuBook,
|
MenuBook,
|
||||||
@@ -27,7 +29,6 @@ import {
|
|||||||
Bookmark,
|
Bookmark,
|
||||||
Share,
|
Share,
|
||||||
} from '@mui/icons-material'
|
} from '@mui/icons-material'
|
||||||
import { Navigation } from '@/components/layout/navigation'
|
|
||||||
import { useState, useEffect } from 'react'
|
import { useState, useEffect } from 'react'
|
||||||
|
|
||||||
interface BibleVerse {
|
interface BibleVerse {
|
||||||
@@ -115,11 +116,13 @@ export default function BiblePage() {
|
|||||||
if (loading && books.length === 0) {
|
if (loading && books.length === 0) {
|
||||||
return (
|
return (
|
||||||
<Box>
|
<Box>
|
||||||
<Navigation />
|
|
||||||
<Container maxWidth="lg" sx={{ py: 4 }}>
|
<Container maxWidth="lg" sx={{ py: 4 }}>
|
||||||
<Typography variant="h4" textAlign="center">
|
<Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 2 }}>
|
||||||
Se încarcă...
|
<CircularProgress size={48} />
|
||||||
|
<Typography variant="h6" color="text.secondary">
|
||||||
|
Se încarcă cărțile...
|
||||||
</Typography>
|
</Typography>
|
||||||
|
</Box>
|
||||||
</Container>
|
</Container>
|
||||||
</Box>
|
</Box>
|
||||||
)
|
)
|
||||||
@@ -127,7 +130,6 @@ export default function BiblePage() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Box>
|
<Box>
|
||||||
<Navigation />
|
|
||||||
|
|
||||||
<Container maxWidth="lg" sx={{ py: 4 }}>
|
<Container maxWidth="lg" sx={{ py: 4 }}>
|
||||||
{/* Header */}
|
{/* Header */}
|
||||||
@@ -232,9 +234,15 @@ export default function BiblePage() {
|
|||||||
|
|
||||||
{/* Bible Verses */}
|
{/* Bible Verses */}
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<Typography textAlign="center" color="text.secondary">
|
<Box>
|
||||||
Se încarcă versetele...
|
{Array.from({ length: 5 }).map((_, index) => (
|
||||||
</Typography>
|
<Box key={index} sx={{ mb: 2 }}>
|
||||||
|
<Skeleton variant="text" width="100%" height={40} />
|
||||||
|
<Skeleton variant="text" width="90%" height={30} />
|
||||||
|
<Skeleton variant="text" width="95%" height={30} />
|
||||||
|
</Box>
|
||||||
|
))}
|
||||||
|
</Box>
|
||||||
) : verses.length > 0 ? (
|
) : verses.length > 0 ? (
|
||||||
<Box>
|
<Box>
|
||||||
{verses.map((verse) => (
|
{verses.map((verse) => (
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ import {
|
|||||||
IconButton,
|
IconButton,
|
||||||
Divider,
|
Divider,
|
||||||
useTheme,
|
useTheme,
|
||||||
|
CircularProgress,
|
||||||
|
Skeleton,
|
||||||
} from '@mui/material'
|
} from '@mui/material'
|
||||||
import {
|
import {
|
||||||
Chat,
|
Chat,
|
||||||
@@ -27,7 +29,6 @@ import {
|
|||||||
ThumbDown,
|
ThumbDown,
|
||||||
Refresh,
|
Refresh,
|
||||||
} from '@mui/icons-material'
|
} from '@mui/icons-material'
|
||||||
import { Navigation } from '@/components/layout/navigation'
|
|
||||||
import { useState, useRef, useEffect } from 'react'
|
import { useState, useRef, useEffect } from 'react'
|
||||||
|
|
||||||
interface ChatMessage {
|
interface ChatMessage {
|
||||||
@@ -134,7 +135,6 @@ export default function ChatPage() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Box>
|
<Box>
|
||||||
<Navigation />
|
|
||||||
|
|
||||||
<Container maxWidth="lg" sx={{ py: 4 }}>
|
<Container maxWidth="lg" sx={{ py: 4 }}>
|
||||||
{/* Header */}
|
{/* Header */}
|
||||||
@@ -281,9 +281,12 @@ export default function ChatPage() {
|
|||||||
<SmartToy />
|
<SmartToy />
|
||||||
</Avatar>
|
</Avatar>
|
||||||
<Paper elevation={1} sx={{ p: 2, borderRadius: 2 }}>
|
<Paper elevation={1} sx={{ p: 2, borderRadius: 2 }}>
|
||||||
|
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
|
||||||
|
<CircularProgress size={16} />
|
||||||
<Typography variant="body1">
|
<Typography variant="body1">
|
||||||
Scriu răspunsul...
|
Scriu răspunsul...
|
||||||
</Typography>
|
</Typography>
|
||||||
|
</Box>
|
||||||
</Paper>
|
</Paper>
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ export default function Home() {
|
|||||||
{/* Hero Section */}
|
{/* Hero Section */}
|
||||||
<Box
|
<Box
|
||||||
sx={{
|
sx={{
|
||||||
background: 'linear-gradient(135deg, #2C5F6B 0%, #5A8A96 100%)',
|
background: 'linear-gradient(135deg, #009688 0%, #00796B 100%)',
|
||||||
color: 'white',
|
color: 'white',
|
||||||
py: 8,
|
py: 8,
|
||||||
mb: 6,
|
mb: 6,
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ import {
|
|||||||
ListItemText,
|
ListItemText,
|
||||||
MenuItem,
|
MenuItem,
|
||||||
useTheme,
|
useTheme,
|
||||||
|
CircularProgress,
|
||||||
|
Skeleton,
|
||||||
} from '@mui/material'
|
} from '@mui/material'
|
||||||
import {
|
import {
|
||||||
Favorite,
|
Favorite,
|
||||||
@@ -34,7 +36,6 @@ import {
|
|||||||
Share,
|
Share,
|
||||||
MoreVert,
|
MoreVert,
|
||||||
} from '@mui/icons-material'
|
} from '@mui/icons-material'
|
||||||
import { Navigation } from '@/components/layout/navigation'
|
|
||||||
import { useState, useEffect } from 'react'
|
import { useState, useEffect } from 'react'
|
||||||
|
|
||||||
interface PrayerRequest {
|
interface PrayerRequest {
|
||||||
@@ -170,7 +171,6 @@ export default function PrayersPage() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Box>
|
<Box>
|
||||||
<Navigation />
|
|
||||||
|
|
||||||
<Container maxWidth="lg" sx={{ py: 4 }}>
|
<Container maxWidth="lg" sx={{ py: 4 }}>
|
||||||
{/* Header */}
|
{/* Header */}
|
||||||
@@ -220,7 +220,36 @@ export default function PrayersPage() {
|
|||||||
{/* Prayer Requests */}
|
{/* Prayer Requests */}
|
||||||
<Grid item xs={12} md={9}>
|
<Grid item xs={12} md={9}>
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<Typography textAlign="center">Se încarcă rugăciunile...</Typography>
|
<Box>
|
||||||
|
{Array.from({ length: 3 }).map((_, index) => (
|
||||||
|
<Card key={index} sx={{ mb: 3 }}>
|
||||||
|
<CardContent>
|
||||||
|
<Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', mb: 2 }}>
|
||||||
|
<Box sx={{ flexGrow: 1 }}>
|
||||||
|
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 1 }}>
|
||||||
|
<Skeleton variant="text" width="60%" height={32} />
|
||||||
|
<Skeleton variant="rounded" width={80} height={24} />
|
||||||
|
</Box>
|
||||||
|
<Box sx={{ display: 'flex', alignItems: 'center', gap: 2, mb: 2 }}>
|
||||||
|
<Skeleton variant="circular" width={24} height={24} />
|
||||||
|
<Skeleton variant="text" width="30%" height={20} />
|
||||||
|
</Box>
|
||||||
|
<Skeleton variant="text" width="100%" height={24} />
|
||||||
|
<Skeleton variant="text" width="90%" height={24} />
|
||||||
|
<Skeleton variant="text" width="95%" height={24} />
|
||||||
|
</Box>
|
||||||
|
</Box>
|
||||||
|
<Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
|
||||||
|
<Box sx={{ display: 'flex', gap: 1 }}>
|
||||||
|
<Skeleton variant="rounded" width={100} height={32} />
|
||||||
|
<Skeleton variant="rounded" width={100} height={32} />
|
||||||
|
</Box>
|
||||||
|
<Skeleton variant="text" width="20%" height={20} />
|
||||||
|
</Box>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
))}
|
||||||
|
</Box>
|
||||||
) : (
|
) : (
|
||||||
<Box>
|
<Box>
|
||||||
{prayers.map((prayer) => {
|
{prayers.map((prayer) => {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import {
|
|||||||
AccordionDetails,
|
AccordionDetails,
|
||||||
useTheme,
|
useTheme,
|
||||||
CircularProgress,
|
CircularProgress,
|
||||||
|
Skeleton,
|
||||||
} from '@mui/material'
|
} from '@mui/material'
|
||||||
import {
|
import {
|
||||||
Search,
|
Search,
|
||||||
@@ -32,7 +33,6 @@ import {
|
|||||||
Close,
|
Close,
|
||||||
History,
|
History,
|
||||||
} from '@mui/icons-material'
|
} from '@mui/icons-material'
|
||||||
import { Navigation } from '@/components/layout/navigation'
|
|
||||||
import { useState, useEffect } from 'react'
|
import { useState, useEffect } from 'react'
|
||||||
|
|
||||||
interface SearchResult {
|
interface SearchResult {
|
||||||
@@ -175,7 +175,6 @@ export default function SearchPage() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Box>
|
<Box>
|
||||||
<Navigation />
|
|
||||||
|
|
||||||
<Container maxWidth="lg" sx={{ py: 4 }}>
|
<Container maxWidth="lg" sx={{ py: 4 }}>
|
||||||
{/* Header */}
|
{/* Header */}
|
||||||
@@ -326,7 +325,7 @@ export default function SearchPage() {
|
|||||||
disabled={!searchQuery.trim() || loading}
|
disabled={!searchQuery.trim() || loading}
|
||||||
sx={{ minWidth: 100 }}
|
sx={{ minWidth: 100 }}
|
||||||
>
|
>
|
||||||
{loading ? <CircularProgress size={24} /> : 'Caută'}
|
{loading ? <CircularProgress size={20} color="inherit" /> : 'Caută'}
|
||||||
</Button>
|
</Button>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
@@ -341,7 +340,38 @@ export default function SearchPage() {
|
|||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
{/* Search Results */}
|
{/* Search Results */}
|
||||||
{results.length > 0 && (
|
{loading && searchQuery && (
|
||||||
|
<Card>
|
||||||
|
<CardContent>
|
||||||
|
<Typography variant="h6" gutterBottom>
|
||||||
|
Se caută...
|
||||||
|
</Typography>
|
||||||
|
<List>
|
||||||
|
{Array.from({ length: 3 }).map((_, index) => (
|
||||||
|
<ListItem key={index} divider>
|
||||||
|
<ListItemText
|
||||||
|
primary={
|
||||||
|
<Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>
|
||||||
|
<Skeleton variant="text" width="40%" height={28} />
|
||||||
|
<Skeleton variant="rounded" width={100} height={24} />
|
||||||
|
</Box>
|
||||||
|
}
|
||||||
|
secondary={
|
||||||
|
<Box>
|
||||||
|
<Skeleton variant="text" width="100%" height={24} />
|
||||||
|
<Skeleton variant="text" width="90%" height={24} />
|
||||||
|
<Skeleton variant="text" width="95%" height={24} />
|
||||||
|
</Box>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</ListItem>
|
||||||
|
))}
|
||||||
|
</List>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{results.length > 0 && !loading && (
|
||||||
<Card>
|
<Card>
|
||||||
<CardContent>
|
<CardContent>
|
||||||
<Typography variant="h6" gutterBottom>
|
<Typography variant="h6" gutterBottom>
|
||||||
|
|||||||
@@ -18,12 +18,7 @@
|
|||||||
|
|
||||||
body {
|
body {
|
||||||
color: rgb(var(--foreground-rgb));
|
color: rgb(var(--foreground-rgb));
|
||||||
background: linear-gradient(
|
background: white;
|
||||||
to bottom,
|
|
||||||
transparent,
|
|
||||||
rgb(var(--background-end-rgb))
|
|
||||||
)
|
|
||||||
rgb(var(--background-start-rgb));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.verse {
|
.verse {
|
||||||
|
|||||||
@@ -167,9 +167,9 @@ export default function FloatingChat() {
|
|||||||
bottom: 24,
|
bottom: 24,
|
||||||
right: 24,
|
right: 24,
|
||||||
zIndex: 1000,
|
zIndex: 1000,
|
||||||
background: 'linear-gradient(45deg, #2C5F6B 30%, #8B7355 90%)',
|
background: 'linear-gradient(45deg, #009688 30%, #00796B 90%)',
|
||||||
'&:hover': {
|
'&:hover': {
|
||||||
background: 'linear-gradient(45deg, #1e4148 30%, #6d5a43 90%)',
|
background: 'linear-gradient(45deg, #00695C 30%, #004D40 90%)',
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -199,7 +199,7 @@ export default function FloatingChat() {
|
|||||||
<Box
|
<Box
|
||||||
sx={{
|
sx={{
|
||||||
p: 2,
|
p: 2,
|
||||||
background: 'linear-gradient(45deg, #2C5F6B 30%, #8B7355 90%)',
|
background: 'linear-gradient(45deg, #009688 30%, #00796B 90%)',
|
||||||
color: 'white',
|
color: 'white',
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
@@ -412,7 +412,7 @@ export default function FloatingChat() {
|
|||||||
minWidth: 'auto',
|
minWidth: 'auto',
|
||||||
px: 2,
|
px: 2,
|
||||||
borderRadius: 2,
|
borderRadius: 2,
|
||||||
background: 'linear-gradient(45deg, #2C5F6B 30%, #8B7355 90%)',
|
background: 'linear-gradient(45deg, #009688 30%, #00796B 90%)',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Send fontSize="small" />
|
<Send fontSize="small" />
|
||||||
|
|||||||
21
lib/theme.ts
21
lib/theme.ts
@@ -5,25 +5,26 @@ export const theme = createTheme({
|
|||||||
palette: {
|
palette: {
|
||||||
mode: 'light',
|
mode: 'light',
|
||||||
primary: {
|
primary: {
|
||||||
main: '#2C5F6B', // Deep teal for spiritual feel
|
main: '#009688', // PRIMARY COLOR
|
||||||
light: '#5A8A96',
|
light: '#B2DFDB', // LIGHT PRIMARY COLOR
|
||||||
dark: '#1A3B42',
|
dark: '#00796B', // DARK PRIMARY COLOR
|
||||||
contrastText: '#ffffff',
|
contrastText: '#FFFFFF', // TEXT / ICONS
|
||||||
},
|
},
|
||||||
secondary: {
|
secondary: {
|
||||||
main: '#8B7355', // Warm brown for earth tones
|
main: '#FFC107', // ACCENT COLOR
|
||||||
light: '#B09A7A',
|
light: '#FFECB3',
|
||||||
dark: '#5D4D37',
|
dark: '#FF8F00',
|
||||||
contrastText: '#ffffff',
|
contrastText: '#212121',
|
||||||
},
|
},
|
||||||
background: {
|
background: {
|
||||||
default: '#FAFAFA',
|
default: '#FAFAFA',
|
||||||
paper: '#FFFFFF',
|
paper: '#FFFFFF',
|
||||||
},
|
},
|
||||||
text: {
|
text: {
|
||||||
primary: '#1A1A1A',
|
primary: '#212121', // PRIMARY TEXT
|
||||||
secondary: '#4A4A4A',
|
secondary: '#757575', // SECONDARY TEXT
|
||||||
},
|
},
|
||||||
|
divider: '#BDBDBD', // DIVIDER COLOR
|
||||||
},
|
},
|
||||||
typography: {
|
typography: {
|
||||||
fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
|
fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
|
||||||
|
|||||||
Reference in New Issue
Block a user