ntphuc149 commited on
Commit
a7ef2f5
Β·
verified Β·
1 Parent(s): a4f88e4

Update src/App.js

Browse files
Files changed (1) hide show
  1. src/App.js +308 -137
src/App.js CHANGED
@@ -1,77 +1,196 @@
1
- import React, { useState } from 'react';
2
 
3
  const HoroscopeApp = () => {
4
- const [selectedSign, setSelectedSign] = useState('taurus');
5
- const [selectedGender, setSelectedGender] = useState('female');
6
- const [selectedPeriod, setSelectedPeriod] = useState('today');
7
- const [selectedCategory, setSelectedCategory] = useState('love');
8
  const [isDarkMode, setIsDarkMode] = useState(false);
9
 
10
  const zodiacSigns = [
11
- { id: 'taurus', name: 'Taurus', dates: 'April 20 - May 20', emoji: 'πŸ‚', image: '/img/Taurus.jpg' },
12
- { id: 'sagittarius', name: 'Sagittarius', dates: 'Nov 22 - Dec 21', emoji: '🏹', image: '/img/Sagittarius.jpg' },
13
- { id: 'pisces', name: 'Pisces', dates: 'Feb 19 - Mar 20', emoji: '🐠', image: '/img/Pisces.jpg' },
14
- { id: 'libra', name: 'Libra', dates: 'Sep 23 - Oct 22', emoji: 'βš–οΈ', image: '/img/Libra.jpg' },
15
- { id: 'gemini', name: 'Gemini', dates: 'May 21 - Jun 20', emoji: 'πŸ‘―', image: '/img/Gemini.jpg' },
16
- { id: 'leo', name: 'Leo', dates: 'Jul 23 - Aug 22', emoji: '🦁', image: '/img/Leo.jpg' },
17
- { id: 'virgo', name: 'Virgo', dates: 'Aug 23 - Sep 22', emoji: 'πŸ‘Έ', image: '/img/Virgo.jpg' },
18
- { id: 'aquarius', name: 'Aquarius', dates: 'Jan 20 - Feb 18', emoji: '🏺', image: null },
19
- { id: 'aries', name: 'Aries', dates: 'Mar 21 - Apr 19', emoji: '🐏', image: "/img/Aries.png" },
20
- { id: 'cancer', name: 'Cancer', dates: 'Jun 21 - Jul 22', emoji: 'πŸ¦€', image: null },
21
- { id: 'scorpio', name: 'Scorpio', dates: 'Oct 23 - Nov 21', emoji: 'πŸ¦‚', image: null },
22
- { id: 'capricorn', name: 'Capricorn', dates: 'Dec 22 - Jan 19', emoji: '🐐', image: null }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  ];
24
 
25
  const periods = [
26
- { id: 'today', name: 'Today' },
27
- { id: 'week', name: 'Week' },
28
- { id: 'month', name: 'Month' },
29
- { id: 'year', name: 'Year' }
30
  ];
31
 
32
  const categories = [
33
- { id: 'love', name: 'Love', icon: 'πŸ’–' },
34
- { id: 'health', name: 'Health', icon: '🌟' },
35
- { id: 'relationship', name: 'Relationship', icon: 'πŸ‘₯' },
36
- { id: 'finance', name: 'Finance', icon: 'πŸ’°' }
37
  ];
38
 
39
  const horoscopeContent = {
40
  love: {
41
- today: "Love is in the air today! Your romantic side is highlighted, making it a perfect day for expressing your feelings.",
 
42
  week: "This week brings romantic opportunities and deepening connections with your loved ones.",
43
- month: "A month of passionate encounters and meaningful relationships awaits you.",
44
- year: "This year will be transformative for your love life, bringing lasting happiness."
 
45
  },
46
  health: {
47
- today: "Your energy levels are high today. Focus on maintaining balance between work and rest.",
 
48
  week: "Pay attention to your physical wellbeing this week. Small changes can make big differences.",
49
- month: "This month emphasizes the importance of mental and physical health harmony.",
50
- year: "A year of wellness and vitality lies ahead. Make health your priority."
 
51
  },
52
  relationship: {
53
- today: "Relationships flourish under today's cosmic energy. Communication is key to success.",
 
54
  week: "Strengthen your bonds with family and friends through meaningful conversations.",
55
- month: "Social connections expand this month, bringing new friendships and opportunities.",
56
- year: "Your social circle will grow significantly, enriching your life in unexpected ways."
 
57
  },
58
  finance: {
59
- today: "Financial opportunities present themselves today. Stay alert for new possibilities.",
 
60
  week: "This week favors careful financial planning and smart investments.",
61
- month: "Money matters require attention this month. Budget wisely for future security.",
62
- year: "Financial growth and stability are highlighted throughout this year."
63
- }
 
64
  };
65
 
66
  const luckyData = {
67
- colors: ['Green', 'Blue', 'Purple', 'Gold', 'Silver', 'Red', 'Pink', 'Orange', 'Yellow', 'Turquoise', 'Violet', 'Indigo'],
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  numbers: [1, 3, 7, 9, 11, 13, 21, 23, 27, 33, 42, 77],
69
- stones: ['Emerald', 'Sapphire', 'Ruby', 'Diamond', 'Amethyst', 'Topaz', 'Opal', 'Pearl', 'Garnet', 'Aquamarine', 'Citrine', 'Turquoise'],
70
- moods: ['Optimistic', 'Energetic', 'Peaceful', 'Confident', 'Creative', 'Adventurous', 'Romantic', 'Focused', 'Joyful', 'Balanced', 'Inspired', 'Harmonious']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  };
72
 
73
  const getCurrentSign = () => {
74
- return zodiacSigns.find(sign => sign.id === selectedSign);
75
  };
76
 
77
  const getHoroscopeText = () => {
@@ -85,10 +204,10 @@ const HoroscopeApp = () => {
85
 
86
  const getPeriodTitle = () => {
87
  const titles = {
88
- today: 'Horoscope for Today',
89
- week: 'Horoscope for This Week',
90
- month: 'Horoscope for This Month',
91
- year: 'Horoscope for This Year'
92
  };
93
  return titles[selectedPeriod];
94
  };
@@ -98,11 +217,13 @@ const HoroscopeApp = () => {
98
  };
99
 
100
  return (
101
- <div className={`min-h-screen transition-all duration-500 ${
102
- isDarkMode
103
- ? 'bg-gradient-to-br from-gray-900 via-blue-900 to-purple-900 text-white'
104
- : 'bg-gradient-to-br from-blue-50 via-purple-50 to-pink-50 text-gray-800'
105
- }`}>
 
 
106
  <div className="max-w-6xl mx-auto p-5">
107
  {/* Header Controls */}
108
  <div className="flex justify-between items-center mb-6 md:mb-8">
@@ -110,13 +231,15 @@ const HoroscopeApp = () => {
110
  <button
111
  onClick={toggleTheme}
112
  className={`flex items-center gap-2 px-3 md:px-4 py-2 rounded-full font-medium transition-all duration-300 ${
113
- isDarkMode
114
- ? 'bg-white bg-opacity-10 text-white hover:bg-opacity-20'
115
- : 'bg-white bg-opacity-90 text-gray-700 hover:bg-opacity-100'
116
  } shadow-lg hover:scale-105`}
117
  >
118
- <span className="text-xl">{isDarkMode ? 'β˜€οΈ' : 'πŸŒ™'}</span>
119
- <span className="hidden sm:inline">{isDarkMode ? 'Light Mode' : 'Dark Mode'}</span>
 
 
120
  </button>
121
 
122
  {/* App Icon - Visible on mobile */}
@@ -127,26 +250,32 @@ const HoroscopeApp = () => {
127
  </div>
128
 
129
  {/* Gender Selection */}
130
- <div className={`flex rounded-full p-1 shadow-lg ${
131
- isDarkMode ? 'bg-white bg-opacity-10' : 'bg-white bg-opacity-90'
132
- }`}>
 
 
133
  <button
134
- onClick={() => setSelectedGender('female')}
135
  className={`px-3 md:px-6 py-2 rounded-full font-medium transition-all ${
136
- selectedGender === 'female'
137
- ? 'bg-pink-400 text-white shadow-md'
138
- : isDarkMode ? 'text-white hover:text-pink-300' : 'text-gray-600 hover:text-pink-400'
 
 
139
  }`}
140
  >
141
  <span className="hidden sm:inline">Female</span>
142
  <span className="sm:hidden">♀</span>
143
  </button>
144
  <button
145
- onClick={() => setSelectedGender('male')}
146
  className={`px-3 md:px-6 py-2 rounded-full font-medium transition-all ${
147
- selectedGender === 'male'
148
- ? 'bg-blue-400 text-white shadow-md'
149
- : isDarkMode ? 'text-white hover:text-blue-300' : 'text-gray-600 hover:text-blue-400'
 
 
150
  }`}
151
  >
152
  <span className="hidden sm:inline">Male</span>
@@ -172,36 +301,41 @@ const HoroscopeApp = () => {
172
  onClick={() => setSelectedSign(sign.id)}
173
  className="flex flex-col items-center cursor-pointer transition-all duration-300 hover:scale-105 flex-shrink-0"
174
  >
175
- <div className={`w-20 h-20 md:w-24 md:h-24 rounded-full p-0.5 transition-all ${
176
- selectedSign === sign.id
177
- ? 'shadow-lg'
178
- : ''
179
- }`}
180
- style={{
181
- background: selectedSign === sign.id
182
- ? 'linear-gradient(135deg, #1D3249 0%, #96D1E2 100%)'
183
- : 'linear-gradient(135deg, #07090A 0%, #979999 100%)'
184
- }}>
185
- <div className={`w-full h-full rounded-full flex items-center justify-center text-xl overflow-hidden ${
186
- isDarkMode ? 'bg-gray-800' : 'bg-gray-100'
187
- }`}>
 
 
 
188
  {sign.image ? (
189
- <img
190
- src={sign.image}
191
  alt={sign.name}
192
  className="w-full h-full object-cover rounded-full"
193
  onError={(e) => {
194
- e.target.style.display = 'none';
195
- e.target.nextSibling.style.display = 'block';
196
  }}
197
  />
198
  ) : null}
199
- <span style={{ display: sign.image ? 'none' : 'block' }}>
200
  {sign.emoji}
201
  </span>
202
  </div>
203
  </div>
204
- <p className="text-xs font-medium mt-2 text-center">{sign.name}</p>
 
 
205
  </div>
206
  ))}
207
  </div>
@@ -209,17 +343,21 @@ const HoroscopeApp = () => {
209
 
210
  {/* Period Selection */}
211
  <div className="flex justify-center mb-6 md:mb-8">
212
- <div className={`flex rounded-full p-1 shadow-lg ${
213
- isDarkMode ? 'bg-white bg-opacity-10' : 'bg-white bg-opacity-90'
214
- }`}>
 
 
215
  {periods.map((period) => (
216
  <button
217
  key={period.id}
218
  onClick={() => setSelectedPeriod(period.id)}
219
  className={`px-4 md:px-6 py-2 md:py-3 rounded-full font-medium transition-all text-sm md:text-base ${
220
  selectedPeriod === period.id
221
- ? 'bg-blue-400 text-white shadow-md'
222
- : isDarkMode ? 'text-white hover:text-blue-300' : 'text-gray-600 hover:text-blue-400'
 
 
223
  }`}
224
  >
225
  {period.name}
@@ -236,10 +374,10 @@ const HoroscopeApp = () => {
236
  onClick={() => setSelectedCategory(category.id)}
237
  className={`flex items-center gap-2 px-3 md:px-4 py-2 rounded-full font-medium transition-all duration-300 shadow-lg hover:scale-105 text-sm md:text-base ${
238
  selectedCategory === category.id
239
- ? 'bg-purple-400 text-white shadow-lg'
240
- : isDarkMode
241
- ? 'bg-white bg-opacity-10 text-white hover:bg-opacity-20'
242
- : 'bg-white bg-opacity-90 text-gray-600 hover:bg-opacity-100'
243
  }`}
244
  >
245
  <span>{category.icon}</span>
@@ -249,31 +387,41 @@ const HoroscopeApp = () => {
249
  </div>
250
 
251
  {/* Horoscope Content */}
252
- <div className={`rounded-3xl p-8 mb-4 shadow-2xl backdrop-blur-lg transition-all ${
253
- isDarkMode
254
- ? 'bg-white bg-opacity-10 border border-white border-opacity-20'
255
- : 'bg-white bg-opacity-95'
256
- }`}>
 
 
257
  <div className="flex items-center gap-6 mb-8">
258
- <div className="w-20 h-20 rounded-full p-0.5 shadow-lg"
259
- style={{
260
- background: 'linear-gradient(135deg, #1D3249 0%, #96D1E2 100%)'
261
- }}>
262
- <div className={`w-full h-full rounded-full flex items-center justify-center text-2xl overflow-hidden ${
263
- isDarkMode ? 'bg-gray-800' : 'bg-gray-100'
264
- }`}>
 
 
 
 
265
  {getCurrentSign()?.image ? (
266
- <img
267
- src={getCurrentSign()?.image}
268
  alt={getCurrentSign()?.name}
269
  className="w-full h-full object-cover rounded-full"
270
  onError={(e) => {
271
- e.target.style.display = 'none';
272
- e.target.nextSibling.style.display = 'block';
273
  }}
274
  />
275
  ) : null}
276
- <span style={{ display: getCurrentSign()?.image ? 'none' : 'block' }}>
 
 
 
 
277
  {getCurrentSign()?.emoji}
278
  </span>
279
  </div>
@@ -290,64 +438,87 @@ const HoroscopeApp = () => {
290
  </div>
291
  </div>
292
 
293
- <p className={`font-medium mb-6 ${isDarkMode ? 'text-gray-300' : 'text-gray-600'}`}>
 
 
 
 
294
  {getCurrentSign()?.name} ({getCurrentSign()?.dates})
295
  </p>
296
 
297
- <p className="text-lg leading-relaxed mb-8">
298
- {getHoroscopeText()}
299
- </p>
300
 
301
  {/* Lucky Elements */}
302
- <div className={`grid grid-cols-2 md:grid-cols-4 gap-6 pt-6 border-t ${
303
- isDarkMode ? 'border-gray-700' : 'border-gray-200'
304
- }`}>
 
 
305
  <div className="text-center">
306
  <div className="text-3xl mb-3">πŸ€</div>
307
- <p className={`text-xs uppercase tracking-wider mb-2 ${
308
- isDarkMode ? 'text-gray-400' : 'text-gray-500'
309
- }`}>
 
 
310
  Lucky Color
311
  </p>
312
- <p className="font-bold text-green-500">{getLuckyElement('colors')}</p>
 
 
313
  </div>
314
  <div className="text-center">
315
  <div className="text-3xl mb-3">πŸ”’</div>
316
- <p className={`text-xs uppercase tracking-wider mb-2 ${
317
- isDarkMode ? 'text-gray-400' : 'text-gray-500'
318
- }`}>
 
 
319
  Lucky Number
320
  </p>
321
- <p className="font-bold text-blue-500">{getLuckyElement('numbers')}</p>
 
 
322
  </div>
323
  <div className="text-center">
324
  <div className="text-3xl mb-3">πŸ’Ž</div>
325
- <p className={`text-xs uppercase tracking-wider mb-2 ${
326
- isDarkMode ? 'text-gray-400' : 'text-gray-500'
327
- }`}>
 
 
328
  Lucky Stone
329
  </p>
330
- <p className="font-bold text-purple-500">{getLuckyElement('stones')}</p>
 
 
331
  </div>
332
  <div className="text-center">
333
  <div className="text-3xl mb-3">⭐</div>
334
- <p className={`text-xs uppercase tracking-wider mb-2 ${
335
- isDarkMode ? 'text-gray-400' : 'text-gray-500'
336
- }`}>
 
 
337
  Mood
338
  </p>
339
- <p className="font-bold text-yellow-500">{getLuckyElement('moods')}</p>
 
 
340
  </div>
341
  </div>
342
  </div>
343
 
344
  {/* Footer */}
345
  <div className="text-center text-sm opacity-70 mt-4">
346
- <p>✨ Discover your daily horoscope and unlock the secrets of the stars ✨</p>
 
 
 
347
  </div>
348
  </div>
349
  </div>
350
  );
351
  };
352
 
353
- export default HoroscopeApp;
 
1
+ import React, { useState } from "react";
2
 
3
  const HoroscopeApp = () => {
4
+ const [selectedSign, setSelectedSign] = useState("taurus");
5
+ const [selectedGender, setSelectedGender] = useState("female");
6
+ const [selectedPeriod, setSelectedPeriod] = useState("today");
7
+ const [selectedCategory, setSelectedCategory] = useState("love");
8
  const [isDarkMode, setIsDarkMode] = useState(false);
9
 
10
  const zodiacSigns = [
11
+ {
12
+ id: "taurus",
13
+ name: "Taurus",
14
+ dates: "April 20 - May 20",
15
+ emoji: "πŸ‚",
16
+ image: "/img/Taurus.jpg",
17
+ },
18
+ {
19
+ id: "sagittarius",
20
+ name: "Sagittarius",
21
+ dates: "Nov 22 - Dec 21",
22
+ emoji: "🏹",
23
+ image: "/img/Sagittarius.jpg",
24
+ },
25
+ {
26
+ id: "pisces",
27
+ name: "Pisces",
28
+ dates: "Feb 19 - Mar 20",
29
+ emoji: "🐠",
30
+ image: "/img/Pisces.jpg",
31
+ },
32
+ {
33
+ id: "libra",
34
+ name: "Libra",
35
+ dates: "Sep 23 - Oct 22",
36
+ emoji: "βš–οΈ",
37
+ image: "/img/Libra.jpg",
38
+ },
39
+ {
40
+ id: "gemini",
41
+ name: "Gemini",
42
+ dates: "May 21 - Jun 20",
43
+ emoji: "πŸ‘―",
44
+ image: "/img/Gemini.jpg",
45
+ },
46
+ {
47
+ id: "leo",
48
+ name: "Leo",
49
+ dates: "Jul 23 - Aug 22",
50
+ emoji: "🦁",
51
+ image: "/img/Leo.jpg",
52
+ },
53
+ {
54
+ id: "virgo",
55
+ name: "Virgo",
56
+ dates: "Aug 23 - Sep 22",
57
+ emoji: "πŸ‘Έ",
58
+ image: "/img/Virgo.jpg",
59
+ },
60
+ {
61
+ id: "aquarius",
62
+ name: "Aquarius",
63
+ dates: "Jan 20 - Feb 18",
64
+ emoji: "🏺",
65
+ image: "/img/Aquarius.png",
66
+ },
67
+ {
68
+ id: "aries",
69
+ name: "Aries",
70
+ dates: "Mar 21 - Apr 19",
71
+ emoji: "🐏",
72
+ image: "/img/Aries.png",
73
+ },
74
+ {
75
+ id: "cancer",
76
+ name: "Cancer",
77
+ dates: "Jun 21 - Jul 22",
78
+ emoji: "πŸ¦€",
79
+ image: "/img/Cancer.png",
80
+ },
81
+ {
82
+ id: "scorpio",
83
+ name: "Scorpio",
84
+ dates: "Oct 23 - Nov 21",
85
+ emoji: "πŸ¦‚",
86
+ image: "/img/Scorpio.png",
87
+ },
88
+ {
89
+ id: "capricorn",
90
+ name: "Capricorn",
91
+ dates: "Dec 22 - Jan 19",
92
+ emoji: "🐐",
93
+ image: "/img/Capricorn.png",
94
+ },
95
  ];
96
 
97
  const periods = [
98
+ { id: "today", name: "Today" },
99
+ { id: "week", name: "Week" },
100
+ { id: "month", name: "Month" },
101
+ { id: "year", name: "Year" },
102
  ];
103
 
104
  const categories = [
105
+ { id: "love", name: "Love", icon: "πŸ’–" },
106
+ { id: "health", name: "Health", icon: "🌟" },
107
+ { id: "relationship", name: "Relationship", icon: "πŸ‘₯" },
108
+ { id: "finance", name: "Finance", icon: "πŸ’°" },
109
  ];
110
 
111
  const horoscopeContent = {
112
  love: {
113
+ today:
114
+ "Love is in the air today! Your romantic side is highlighted, making it a perfect day for expressing your feelings.",
115
  week: "This week brings romantic opportunities and deepening connections with your loved ones.",
116
+ month:
117
+ "A month of passionate encounters and meaningful relationships awaits you.",
118
+ year: "This year will be transformative for your love life, bringing lasting happiness.",
119
  },
120
  health: {
121
+ today:
122
+ "Your energy levels are high today. Focus on maintaining balance between work and rest.",
123
  week: "Pay attention to your physical wellbeing this week. Small changes can make big differences.",
124
+ month:
125
+ "This month emphasizes the importance of mental and physical health harmony.",
126
+ year: "A year of wellness and vitality lies ahead. Make health your priority.",
127
  },
128
  relationship: {
129
+ today:
130
+ "Relationships flourish under today's cosmic energy. Communication is key to success.",
131
  week: "Strengthen your bonds with family and friends through meaningful conversations.",
132
+ month:
133
+ "Social connections expand this month, bringing new friendships and opportunities.",
134
+ year: "Your social circle will grow significantly, enriching your life in unexpected ways.",
135
  },
136
  finance: {
137
+ today:
138
+ "Financial opportunities present themselves today. Stay alert for new possibilities.",
139
  week: "This week favors careful financial planning and smart investments.",
140
+ month:
141
+ "Money matters require attention this month. Budget wisely for future security.",
142
+ year: "Financial growth and stability are highlighted throughout this year.",
143
+ },
144
  };
145
 
146
  const luckyData = {
147
+ colors: [
148
+ "Green",
149
+ "Blue",
150
+ "Purple",
151
+ "Gold",
152
+ "Silver",
153
+ "Red",
154
+ "Pink",
155
+ "Orange",
156
+ "Yellow",
157
+ "Turquoise",
158
+ "Violet",
159
+ "Indigo",
160
+ ],
161
  numbers: [1, 3, 7, 9, 11, 13, 21, 23, 27, 33, 42, 77],
162
+ stones: [
163
+ "Emerald",
164
+ "Sapphire",
165
+ "Ruby",
166
+ "Diamond",
167
+ "Amethyst",
168
+ "Topaz",
169
+ "Opal",
170
+ "Pearl",
171
+ "Garnet",
172
+ "Aquamarine",
173
+ "Citrine",
174
+ "Turquoise",
175
+ ],
176
+ moods: [
177
+ "Optimistic",
178
+ "Energetic",
179
+ "Peaceful",
180
+ "Confident",
181
+ "Creative",
182
+ "Adventurous",
183
+ "Romantic",
184
+ "Focused",
185
+ "Joyful",
186
+ "Balanced",
187
+ "Inspired",
188
+ "Harmonious",
189
+ ],
190
  };
191
 
192
  const getCurrentSign = () => {
193
+ return zodiacSigns.find((sign) => sign.id === selectedSign);
194
  };
195
 
196
  const getHoroscopeText = () => {
 
204
 
205
  const getPeriodTitle = () => {
206
  const titles = {
207
+ today: "Horoscope for Today",
208
+ week: "Horoscope for This Week",
209
+ month: "Horoscope for This Month",
210
+ year: "Horoscope for This Year",
211
  };
212
  return titles[selectedPeriod];
213
  };
 
217
  };
218
 
219
  return (
220
+ <div
221
+ className={`min-h-screen transition-all duration-500 ${
222
+ isDarkMode
223
+ ? "bg-gradient-to-br from-gray-900 via-blue-900 to-purple-900 text-white"
224
+ : "bg-gradient-to-br from-blue-50 via-purple-50 to-pink-50 text-gray-800"
225
+ }`}
226
+ >
227
  <div className="max-w-6xl mx-auto p-5">
228
  {/* Header Controls */}
229
  <div className="flex justify-between items-center mb-6 md:mb-8">
 
231
  <button
232
  onClick={toggleTheme}
233
  className={`flex items-center gap-2 px-3 md:px-4 py-2 rounded-full font-medium transition-all duration-300 ${
234
+ isDarkMode
235
+ ? "bg-white bg-opacity-10 text-white hover:bg-opacity-20"
236
+ : "bg-white bg-opacity-90 text-gray-700 hover:bg-opacity-100"
237
  } shadow-lg hover:scale-105`}
238
  >
239
+ <span className="text-xl">{isDarkMode ? "β˜€οΈ" : "πŸŒ™"}</span>
240
+ <span className="hidden sm:inline">
241
+ {isDarkMode ? "Light Mode" : "Dark Mode"}
242
+ </span>
243
  </button>
244
 
245
  {/* App Icon - Visible on mobile */}
 
250
  </div>
251
 
252
  {/* Gender Selection */}
253
+ <div
254
+ className={`flex rounded-full p-1 shadow-lg ${
255
+ isDarkMode ? "bg-white bg-opacity-10" : "bg-white bg-opacity-90"
256
+ }`}
257
+ >
258
  <button
259
+ onClick={() => setSelectedGender("female")}
260
  className={`px-3 md:px-6 py-2 rounded-full font-medium transition-all ${
261
+ selectedGender === "female"
262
+ ? "bg-pink-400 text-white shadow-md"
263
+ : isDarkMode
264
+ ? "text-white hover:text-pink-300"
265
+ : "text-gray-600 hover:text-pink-400"
266
  }`}
267
  >
268
  <span className="hidden sm:inline">Female</span>
269
  <span className="sm:hidden">♀</span>
270
  </button>
271
  <button
272
+ onClick={() => setSelectedGender("male")}
273
  className={`px-3 md:px-6 py-2 rounded-full font-medium transition-all ${
274
+ selectedGender === "male"
275
+ ? "bg-blue-400 text-white shadow-md"
276
+ : isDarkMode
277
+ ? "text-white hover:text-blue-300"
278
+ : "text-gray-600 hover:text-blue-400"
279
  }`}
280
  >
281
  <span className="hidden sm:inline">Male</span>
 
301
  onClick={() => setSelectedSign(sign.id)}
302
  className="flex flex-col items-center cursor-pointer transition-all duration-300 hover:scale-105 flex-shrink-0"
303
  >
304
+ <div
305
+ className={`w-20 h-20 md:w-24 md:h-24 rounded-full p-0.5 transition-all ${
306
+ selectedSign === sign.id ? "shadow-lg" : ""
307
+ }`}
308
+ style={{
309
+ background:
310
+ selectedSign === sign.id
311
+ ? "linear-gradient(135deg, #1D3249 0%, #96D1E2 100%)"
312
+ : "linear-gradient(135deg, #07090A 0%, #979999 100%)",
313
+ }}
314
+ >
315
+ <div
316
+ className={`w-full h-full rounded-full flex items-center justify-center text-xl overflow-hidden ${
317
+ isDarkMode ? "bg-gray-800" : "bg-gray-100"
318
+ }`}
319
+ >
320
  {sign.image ? (
321
+ <img
322
+ src={sign.image}
323
  alt={sign.name}
324
  className="w-full h-full object-cover rounded-full"
325
  onError={(e) => {
326
+ e.target.style.display = "none";
327
+ e.target.nextSibling.style.display = "block";
328
  }}
329
  />
330
  ) : null}
331
+ <span style={{ display: sign.image ? "none" : "block" }}>
332
  {sign.emoji}
333
  </span>
334
  </div>
335
  </div>
336
+ <p className="text-xs font-medium mt-2 text-center">
337
+ {sign.name}
338
+ </p>
339
  </div>
340
  ))}
341
  </div>
 
343
 
344
  {/* Period Selection */}
345
  <div className="flex justify-center mb-6 md:mb-8">
346
+ <div
347
+ className={`flex rounded-full p-1 shadow-lg ${
348
+ isDarkMode ? "bg-white bg-opacity-10" : "bg-white bg-opacity-90"
349
+ }`}
350
+ >
351
  {periods.map((period) => (
352
  <button
353
  key={period.id}
354
  onClick={() => setSelectedPeriod(period.id)}
355
  className={`px-4 md:px-6 py-2 md:py-3 rounded-full font-medium transition-all text-sm md:text-base ${
356
  selectedPeriod === period.id
357
+ ? "bg-blue-400 text-white shadow-md"
358
+ : isDarkMode
359
+ ? "text-white hover:text-blue-300"
360
+ : "text-gray-600 hover:text-blue-400"
361
  }`}
362
  >
363
  {period.name}
 
374
  onClick={() => setSelectedCategory(category.id)}
375
  className={`flex items-center gap-2 px-3 md:px-4 py-2 rounded-full font-medium transition-all duration-300 shadow-lg hover:scale-105 text-sm md:text-base ${
376
  selectedCategory === category.id
377
+ ? "bg-purple-400 text-white shadow-lg"
378
+ : isDarkMode
379
+ ? "bg-white bg-opacity-10 text-white hover:bg-opacity-20"
380
+ : "bg-white bg-opacity-90 text-gray-600 hover:bg-opacity-100"
381
  }`}
382
  >
383
  <span>{category.icon}</span>
 
387
  </div>
388
 
389
  {/* Horoscope Content */}
390
+ <div
391
+ className={`rounded-3xl p-8 mb-4 shadow-2xl backdrop-blur-lg transition-all ${
392
+ isDarkMode
393
+ ? "bg-white bg-opacity-10 border border-white border-opacity-20"
394
+ : "bg-white bg-opacity-95"
395
+ }`}
396
+ >
397
  <div className="flex items-center gap-6 mb-8">
398
+ <div
399
+ className="w-20 h-20 rounded-full p-0.5 shadow-lg"
400
+ style={{
401
+ background: "linear-gradient(135deg, #1D3249 0%, #96D1E2 100%)",
402
+ }}
403
+ >
404
+ <div
405
+ className={`w-full h-full rounded-full flex items-center justify-center text-2xl overflow-hidden ${
406
+ isDarkMode ? "bg-gray-800" : "bg-gray-100"
407
+ }`}
408
+ >
409
  {getCurrentSign()?.image ? (
410
+ <img
411
+ src={getCurrentSign()?.image}
412
  alt={getCurrentSign()?.name}
413
  className="w-full h-full object-cover rounded-full"
414
  onError={(e) => {
415
+ e.target.style.display = "none";
416
+ e.target.nextSibling.style.display = "block";
417
  }}
418
  />
419
  ) : null}
420
+ <span
421
+ style={{
422
+ display: getCurrentSign()?.image ? "none" : "block",
423
+ }}
424
+ >
425
  {getCurrentSign()?.emoji}
426
  </span>
427
  </div>
 
438
  </div>
439
  </div>
440
 
441
+ <p
442
+ className={`font-medium mb-6 ${
443
+ isDarkMode ? "text-gray-300" : "text-gray-600"
444
+ }`}
445
+ >
446
  {getCurrentSign()?.name} ({getCurrentSign()?.dates})
447
  </p>
448
 
449
+ <p className="text-lg leading-relaxed mb-8">{getHoroscopeText()}</p>
 
 
450
 
451
  {/* Lucky Elements */}
452
+ <div
453
+ className={`grid grid-cols-2 md:grid-cols-4 gap-6 pt-6 border-t ${
454
+ isDarkMode ? "border-gray-700" : "border-gray-200"
455
+ }`}
456
+ >
457
  <div className="text-center">
458
  <div className="text-3xl mb-3">πŸ€</div>
459
+ <p
460
+ className={`text-xs uppercase tracking-wider mb-2 ${
461
+ isDarkMode ? "text-gray-400" : "text-gray-500"
462
+ }`}
463
+ >
464
  Lucky Color
465
  </p>
466
+ <p className="font-bold text-green-500">
467
+ {getLuckyElement("colors")}
468
+ </p>
469
  </div>
470
  <div className="text-center">
471
  <div className="text-3xl mb-3">πŸ”’</div>
472
+ <p
473
+ className={`text-xs uppercase tracking-wider mb-2 ${
474
+ isDarkMode ? "text-gray-400" : "text-gray-500"
475
+ }`}
476
+ >
477
  Lucky Number
478
  </p>
479
+ <p className="font-bold text-blue-500">
480
+ {getLuckyElement("numbers")}
481
+ </p>
482
  </div>
483
  <div className="text-center">
484
  <div className="text-3xl mb-3">πŸ’Ž</div>
485
+ <p
486
+ className={`text-xs uppercase tracking-wider mb-2 ${
487
+ isDarkMode ? "text-gray-400" : "text-gray-500"
488
+ }`}
489
+ >
490
  Lucky Stone
491
  </p>
492
+ <p className="font-bold text-purple-500">
493
+ {getLuckyElement("stones")}
494
+ </p>
495
  </div>
496
  <div className="text-center">
497
  <div className="text-3xl mb-3">⭐</div>
498
+ <p
499
+ className={`text-xs uppercase tracking-wider mb-2 ${
500
+ isDarkMode ? "text-gray-400" : "text-gray-500"
501
+ }`}
502
+ >
503
  Mood
504
  </p>
505
+ <p className="font-bold text-yellow-500">
506
+ {getLuckyElement("moods")}
507
+ </p>
508
  </div>
509
  </div>
510
  </div>
511
 
512
  {/* Footer */}
513
  <div className="text-center text-sm opacity-70 mt-4">
514
+ <p>
515
+ ✨ Discover your daily horoscope and unlock the secrets of the stars
516
+ ✨
517
+ </p>
518
  </div>
519
  </div>
520
  </div>
521
  );
522
  };
523
 
524
+ export default HoroscopeApp;