-
Winbit
+

{user && (
@@ -41,12 +131,13 @@ export const Header = () => {
+
{item.icon}
{item.label}
))}
@@ -165,13 +256,14 @@ export const Header = () => {
setIsMobileMenuOpen(false)}
>
+
{item.icon}
{item.label}
))}
diff --git a/src/components/layout/Header.test.jsx b/src/components/layout/Header.test.jsx
index 0bfb7fe..0d0eaff 100644
--- a/src/components/layout/Header.test.jsx
+++ b/src/components/layout/Header.test.jsx
@@ -28,7 +28,7 @@ describe('Header', () => {
it('renders logo', () => {
useAuth.mockReturnValue({ user: null, logout: vi.fn() });
renderWithRouter(
);
- expect(screen.getByText('Winbit')).toBeInTheDocument();
+ expect(screen.getByAltText('Winbit')).toBeInTheDocument();
});
it('renders navigation when user is logged in', () => {
diff --git a/src/components/ui/Button.jsx b/src/components/ui/Button.jsx
index 4638f1d..ac895b0 100644
--- a/src/components/ui/Button.jsx
+++ b/src/components/ui/Button.jsx
@@ -11,13 +11,13 @@ export const Button = ({
const variants = {
primary:
- 'bg-[rgba(101,167,165,0.15)] text-[#8dc8bf] border border-[rgba(101,167,165,0.35)] hover:bg-[rgba(101,167,165,0.25)] hover:border-[rgba(101,167,165,0.55)] focus:ring-primary',
+ 'bg-[rgba(101,167,165,0.2)] text-white border border-[rgba(101,167,165,0.35)] hover:bg-[rgba(101,167,165,0.3)] hover:border-[rgba(101,167,165,0.55)] focus:ring-primary',
secondary:
- 'bg-[rgba(101,167,165,0.10)] text-[#8dc8bf] border border-[rgba(101,167,165,0.35)] hover:bg-[rgba(101,167,165,0.18)] hover:border-[rgba(101,167,165,0.55)] focus:ring-primary',
+ 'bg-[rgba(101,167,165,0.1)] text-[#8dc8bf] border border-[rgba(101,167,165,0.35)] hover:bg-[rgba(101,167,165,0.2)] hover:border-[rgba(101,167,165,0.55)] focus:ring-primary',
danger:
'bg-[rgba(196,107,107,0.14)] text-[#c46b6b] border border-[rgba(196,107,107,0.18)] hover:bg-[rgba(196,107,107,0.22)] focus:ring-error',
outline:
- 'bg-[rgba(101,167,165,0.10)] text-[#8dc8bf] border border-[rgba(101,167,165,0.35)] hover:bg-[rgba(101,167,165,0.18)] hover:border-[rgba(101,167,165,0.55)] focus:ring-primary',
+ 'bg-[rgba(101,167,165,0.1)] text-[#8dc8bf] border border-[rgba(101,167,165,0.35)] hover:bg-[rgba(101,167,165,0.2)] hover:border-[rgba(101,167,165,0.55)] focus:ring-primary',
copy: 'btn-copy text-xs focus:ring-primary',
};
diff --git a/src/components/ui/ConfirmModal.jsx b/src/components/ui/ConfirmModal.jsx
index b38447f..9909acb 100644
--- a/src/components/ui/ConfirmModal.jsx
+++ b/src/components/ui/ConfirmModal.jsx
@@ -26,10 +26,13 @@ export const ConfirmModal = ({
return (
-
+
{title && (
-
+
{title}
)}
@@ -74,14 +77,14 @@ export const ConfirmModal = ({
diff --git a/src/components/ui/Modal.jsx b/src/components/ui/Modal.jsx
index 49ce3fa..79c8c97 100644
--- a/src/components/ui/Modal.jsx
+++ b/src/components/ui/Modal.jsx
@@ -15,30 +15,18 @@ export const Modal = ({ isOpen, onClose, title, message, type = 'info' }) => {
if (!isOpen) return null;
- const bgColorClass =
- type === 'success'
- ? 'bg-[rgba(76,175,80,0.15)] border-[rgba(76,175,80,0.3)]'
- : type === 'error'
- ? 'bg-[rgba(239,83,80,0.15)] border-[rgba(239,83,80,0.3)]'
- : 'bg-[rgba(101,167,165,0.15)] border-[rgba(101,167,165,0.3)]';
-
const iconColorClass =
type === 'success' ? 'text-success' : type === 'error' ? 'text-error' : 'text-primary';
- const buttonColorClass =
- type === 'success'
- ? 'bg-success hover:bg-success/80 focus:ring-success'
- : type === 'error'
- ? 'bg-error hover:bg-error/80 focus:ring-error'
- : 'bg-primary hover:bg-primary/80 focus:ring-primary';
-
return (
- {/* Backdrop */}
-
+
{
{title && (
-
+
{title}
)}
@@ -101,7 +89,7 @@ export const Modal = ({ isOpen, onClose, title, message, type = 'info' }) => {
diff --git a/src/index.css b/src/index.css
index c533e0f..73f18d5 100644
--- a/src/index.css
+++ b/src/index.css
@@ -4,10 +4,12 @@
@layer base {
body {
- background:
- radial-gradient(circle at 20% 0%, rgba(101, 167, 165, 0.05) 0%, rgba(101, 167, 165, 0) 40%),
- radial-gradient(circle at 80% 100%, rgba(101, 167, 165, 0.03) 0%, rgba(101, 167, 165, 0) 35%),
- #0f1113;
+ background: radial-gradient(
+ circle at 30% 20%,
+ rgba(31, 122, 99, 0.25),
+ rgba(11, 15, 14, 1) 60%
+ );
+ background-color: #0b0f0e;
color: #e8e8e8;
font-family:
'Montserrat',
@@ -21,18 +23,20 @@
input,
select,
textarea {
- background: rgba(15, 18, 18, 0.8);
- border: 1px solid rgba(255, 255, 255, 0.08);
+ background: #121716;
+ color: #ffffff;
+ border: 1px solid rgba(101, 167, 165, 0.25);
border-radius: 0.5rem;
padding: 0.75rem 1rem;
- color: #e8e8e8;
font-family:
'Montserrat',
-apple-system,
BlinkMacSystemFont,
sans-serif;
font-size: 0.95rem;
- transition: border-color 0.2s ease;
+ transition:
+ border-color 0.2s ease,
+ box-shadow 0.2s ease;
}
input::placeholder,
@@ -45,8 +49,8 @@
select:focus,
textarea:focus {
outline: none;
- border-color: rgba(101, 167, 165, 0.5);
- box-shadow: 0 0 0 2px rgba(101, 167, 165, 0.15);
+ border-color: #65a7a5;
+ box-shadow: 0 0 0 1px rgba(101, 167, 165, 0.3);
}
}
@@ -56,39 +60,80 @@
}
.winbit-card {
- background: linear-gradient(180deg, rgba(18, 24, 24, 0.92) 0%, rgba(15, 18, 18, 0.96) 100%);
- border: 1px solid rgba(101, 167, 165, 0.22);
+ background: rgba(20, 20, 20, 0.6);
+ backdrop-filter: blur(14px);
+ -webkit-backdrop-filter: blur(14px);
+ border: 1px solid rgba(101, 167, 165, 0.25);
border-radius: 8px;
- padding: 28px 26px;
+ padding: 32px 30px;
box-shadow:
- inset 3px 0 0 rgba(101, 167, 165, 0.22),
- 0 10px 28px rgba(0, 0, 0, 0.22);
+ inset 0 0 0 1px rgba(255, 255, 255, 0.02),
+ 0 10px 30px rgba(0, 0, 0, 0.35);
+ transition:
+ transform 0.2s ease,
+ box-shadow 0.2s ease;
+ }
+
+ .winbit-card:hover {
+ transform: translateY(-2px);
+ box-shadow:
+ inset 0 0 0 1px rgba(255, 255, 255, 0.03),
+ 0 14px 36px rgba(0, 0, 0, 0.4);
}
.winbit-card--highlight {
- background: linear-gradient(180deg, rgba(28, 40, 40, 0.94) 0%, rgba(20, 28, 28, 0.98) 100%);
- border: 1px solid rgba(101, 167, 165, 0.32);
+ background: rgba(20, 20, 20, 0.6);
+ backdrop-filter: blur(14px);
+ -webkit-backdrop-filter: blur(14px);
+ border: 1px solid rgba(101, 167, 165, 0.35);
border-radius: 8px;
- padding: 28px 26px;
+ padding: 32px 30px;
+ box-shadow:
+ inset 0 0 0 1px rgba(255, 255, 255, 0.03),
+ 0 12px 32px rgba(0, 0, 0, 0.38);
+ transition:
+ transform 0.2s ease,
+ box-shadow 0.2s ease;
+ }
+
+ .winbit-card--highlight:hover {
+ transform: translateY(-2px);
box-shadow:
- inset 4px 0 0 rgba(101, 167, 165, 0.3),
- 0 12px 30px rgba(0, 0, 0, 0.24);
+ inset 0 0 0 1px rgba(255, 255, 255, 0.04),
+ 0 16px 40px rgba(0, 0, 0, 0.42);
}
.winbit-card--compact {
- background: linear-gradient(180deg, rgba(18, 24, 24, 0.92) 0%, rgba(15, 18, 18, 0.96) 100%);
- border: 1px solid rgba(101, 167, 165, 0.22);
+ background: rgba(20, 20, 20, 0.6);
+ backdrop-filter: blur(14px);
+ -webkit-backdrop-filter: blur(14px);
+ border: 1px solid rgba(101, 167, 165, 0.25);
border-radius: 8px;
- padding: 20px 22px;
+ padding: 24px 26px;
+ box-shadow:
+ inset 0 0 0 1px rgba(255, 255, 255, 0.02),
+ 0 10px 30px rgba(0, 0, 0, 0.35);
+ transition:
+ transform 0.2s ease,
+ box-shadow 0.2s ease;
+ }
+
+ .winbit-card--compact:hover {
+ transform: translateY(-2px);
box-shadow:
- inset 3px 0 0 rgba(101, 167, 165, 0.22),
- 0 10px 28px rgba(0, 0, 0, 0.22);
+ inset 0 0 0 1px rgba(255, 255, 255, 0.03),
+ 0 14px 36px rgba(0, 0, 0, 0.4);
+ }
+
+ .card-inner {
+ background: rgba(255, 255, 255, 0.02);
+ border-radius: 6px;
+ padding: 16px;
}
.section-subtitle {
color: #65a7a5;
padding-bottom: 8px;
- border-bottom: 1px solid rgba(101, 167, 165, 0.35);
font-size: 0.95rem;
margin-top: 4px;
}
@@ -133,11 +178,12 @@
}
.row-negative {
- background: rgba(196, 107, 107, 0.1);
+ color: #d16b6b;
+ background: rgba(209, 107, 107, 0.08);
}
.row-negative:hover {
- background: rgba(196, 107, 107, 0.16);
+ background: rgba(209, 107, 107, 0.14);
}
.row-fee {
@@ -150,7 +196,7 @@
.btn-copy {
background: rgba(101, 167, 165, 0.1);
- border: 1px solid rgba(101, 167, 165, 0.35);
+ border: 1px solid rgba(101, 167, 165, 0.4);
color: #8dc8bf;
border-radius: 6px;
padding: 8px 16px;
diff --git a/src/pages/DashboardPage.jsx b/src/pages/DashboardPage.jsx
index 5d1ce0c..fc49077 100644
--- a/src/pages/DashboardPage.jsx
+++ b/src/pages/DashboardPage.jsx
@@ -442,7 +442,7 @@ export const DashboardPage = () => {
}
return (
-
+
{t('dashboard.welcomeBack', { name: formatName(data.name) })}
@@ -451,7 +451,7 @@ export const DashboardPage = () => {
{/* Row 1: Valor del portfolio + Capital invertido */}
-
+
{
{/* Row 2: Resultado histórico (%) + Resultado histórico (USD) */}
-
+
{
{/* Row 3: Resultado estrategia actual (%) + Resultado estrategia actual (USD) */}
-
+
{
-
+
{formatDate(row.date)}
{movementText(row, t)}
diff --git a/tailwind.config.js b/tailwind.config.js
index 653a25d..8abb1d3 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -10,8 +10,8 @@ export default {
'accent-dim': 'rgba(101, 167, 165, 0.15)',
'accent-glow': 'rgba(101, 167, 165, 0.3)',
dark: {
- bg: '#0d0f10',
- card: 'rgba(20, 20, 20, 0.5)',
+ bg: '#0B0F0E',
+ card: 'rgba(20, 20, 20, 0.6)',
section: 'rgba(20, 20, 20, 0.55)',
},
'text-primary': '#e8e8e8',