diff --git a/apps/player/index.html b/apps/player/index.html index 92d3cba..14206bb 100644 --- a/apps/player/index.html +++ b/apps/player/index.html @@ -15,7 +15,7 @@ TheBet365 diff --git a/apps/player/src/components/desktop/DesktopAuthLayout.vue b/apps/player/src/components/desktop/DesktopAuthLayout.vue index 401c2ac..baf85c6 100644 --- a/apps/player/src/components/desktop/DesktopAuthLayout.vue +++ b/apps/player/src/components/desktop/DesktopAuthLayout.vue @@ -90,10 +90,12 @@ withDefaults( .auth-card { width: 100%; max-width: 720px; - background: rgba(255, 255, 255, 0.96); - border: 1px solid var(--border); - border-radius: 12px; - box-shadow: var(--shadow-lg); + background: var(--glass-bg-strong); + backdrop-filter: var(--blur-lg); + -webkit-backdrop-filter: var(--blur-lg); + border: 1px solid var(--glass-border); + border-radius: var(--radius-xl); + box-shadow: var(--shadow-lg), 0 0 40px rgba(0, 102, 204, 0.06); overflow: hidden; } @@ -117,7 +119,7 @@ withDefaults( display: flex; align-items: center; justify-content: center; - padding: 28px 20px; + padding: var(--space-9) var(--space-8); background: linear-gradient(180deg, rgba(0, 102, 204, 0.05) 0%, rgba(232, 237, 242, 0.65) 100%); border-right: 1px solid var(--border); } diff --git a/apps/player/src/styles/desktop/interaction.css b/apps/player/src/styles/desktop/interaction.css index e454264..7850263 100644 --- a/apps/player/src/styles/desktop/interaction.css +++ b/apps/player/src/styles/desktop/interaction.css @@ -1,4 +1,8 @@ -/* Hover Cursors and active resets */ +/* ════════════════════════════════════════════════════════════ + Desktop Interaction System — Theme-2 Blue-White + ════════════════════════════════════════════════════════════ */ + +/* ── Hover Cursors and active resets ── */ .desktop-shell a, .desktop-shell button, .desktop-shell select, @@ -8,7 +12,23 @@ touch-action: auto; } -/* Scrollbar customizations */ +/* ── Global focus-visible (accessibility) ── */ +.desktop-shell :focus-visible { + outline: 2px solid var(--border-active); + outline-offset: 2px; + border-radius: var(--radius-xs); + transition: outline-offset var(--transition-fast); +} + +.desktop-shell input:focus-visible, +.desktop-shell textarea:focus-visible, +.desktop-shell select:focus-visible { + outline: none; + border-color: var(--border-active) !important; + box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.15) !important; +} + +/* ── Scrollbar customizations ── */ .hide-scrollbar, .no-scrollbar { scrollbar-width: none; @@ -27,17 +47,19 @@ height: 6px; } .desktop-shell ::-webkit-scrollbar-track { - background: rgba(0, 0, 0, 0.1); -} -.desktop-shell ::-webkit-scrollbar-thumb { - background: rgba(0, 61, 107, 0.2); + background: rgba(0, 0, 0, 0.04); border-radius: 3px; } +.desktop-shell ::-webkit-scrollbar-thumb { + background: rgba(0, 61, 107, 0.18); + border-radius: 3px; + transition: background var(--transition); +} .desktop-shell ::-webkit-scrollbar-thumb:hover { - background: rgba(0, 61, 107, 0.4); + background: rgba(0, 61, 107, 0.35); } -/* Hover highlights */ +/* ── Hover highlights ── */ .desktop-shell .hover-bg:hover { background-color: var(--bg-hover) !important; } @@ -48,55 +70,64 @@ } .desktop-shell .hover-gold-text:hover { - color: var(--primary-light) !important; + color: var(--primary-lighter) !important; } -/* Form elements styling */ +/* ── Form elements styling ── */ .desktop-shell input { - padding: 10px 12px; + padding: var(--space-4) var(--space-5); font-size: 13px; - border-radius: 4px; + border-radius: var(--radius-xs); + transition: border-color var(--transition), box-shadow var(--transition); } .desktop-shell input:focus { border-color: var(--border-gold) !important; - box-shadow: 0 0 0 2px rgba(0, 102, 204, 0.12) !important; + box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.15) !important; } -/* Button hover overrides */ +/* ── Button hover overrides ── */ .desktop-shell .btn-gold-outline { - transition: background-color 0.2s, border-color 0.2s; + transition: background var(--transition), border-color var(--transition), box-shadow var(--transition); } .desktop-shell .btn-gold-outline:hover:not(:disabled) { background: rgba(0, 102, 204, 0.06); border-color: var(--border-active); + box-shadow: var(--glow-gold); } .desktop-shell .btn-gold-outline:active { - transform: none; /* No mobile shrink on PC */ + transform: scale(0.98); /* subtle press feedback */ } .desktop-shell .btn-primary { - transition: filter 0.2s, transform 0.1s; + transition: filter var(--transition), transform var(--transition-fast), box-shadow var(--transition); } .desktop-shell .btn-primary:hover:not(:disabled) { - filter: brightness(1.1); + filter: brightness(1.08); + box-shadow: var(--glow-gold-lg); } .desktop-shell .btn-primary:active { - transform: translateY(1px); + transform: translateY(1px) scale(0.99); } -/* Skeleton rows animation for high density PC loaders */ +/* ── Skeleton loading animation ── */ @keyframes desktop-skeleton-glow { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } .desktop-skeleton { - background: linear-gradient(90deg, #E5E7EB 25%, #F3F4F6 37%, #E5E7EB 63%); + background: linear-gradient(90deg, + #E5E7EB 25%, + #EFF3F8 37%, + #E5E7EB 63% + ); background-size: 400% 100%; animation: desktop-skeleton-glow 1.4s ease infinite; + border-radius: var(--radius-sm); } +/* ── Bet locate pulse ── */ @keyframes bet-locate-pulse { 0%, 100% { @@ -111,5 +142,17 @@ animation: bet-locate-pulse 0.6s ease 3; border-color: var(--border-gold) !important; position: relative; - z-index: 1; + z-index: var(--z-base); +} + +/* ── Reduced motion support ── */ +@media (prefers-reduced-motion: reduce) { + .desktop-shell *, + .desktop-shell *::before, + .desktop-shell *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + scroll-behavior: auto !important; + } } diff --git a/apps/player/src/styles/desktop/layout.css b/apps/player/src/styles/desktop/layout.css index 82da4a1..7c066bc 100644 --- a/apps/player/src/styles/desktop/layout.css +++ b/apps/player/src/styles/desktop/layout.css @@ -1,4 +1,4 @@ -/* Desktop Global layout structure */ +/* Desktop Global layout structure — Theme-2 Blue-White */ .desktop-shell { position: fixed; inset: 0; @@ -8,23 +8,40 @@ overflow: hidden; } +/* Ambient gradient overlay for depth (light blue tint) */ +.desktop-shell::before { + content: ''; + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 800px 500px at 0% 0%, rgba(0, 91, 159, 0.04), transparent 60%), + radial-gradient(ellipse 600px 400px at 100% 100%, rgba(0, 102, 204, 0.03), transparent 60%); + pointer-events: none; + z-index: 0; +} + .desktop-header-wrap { flex-shrink: 0; height: var(--desktop-header-h); - background: var(--bg-card); + background: var(--glass-bg-strong); + backdrop-filter: var(--blur-md); + -webkit-backdrop-filter: var(--blur-md); border-bottom: 1px solid var(--border); - z-index: 120; + z-index: var(--z-header); display: flex; align-items: center; justify-content: space-between; - padding: 0 20px; + padding: 0 var(--space-7); + box-shadow: var(--shadow-xs); } .desktop-marquee-wrap { flex-shrink: 0; - z-index: 110; + z-index: var(--z-sticky); border-bottom: 1px solid var(--border); - background: var(--bg-card); + background: var(--glass-bg); + backdrop-filter: var(--blur-sm); + -webkit-backdrop-filter: var(--blur-sm); } .desktop-shell.betslip-hidden { @@ -40,6 +57,8 @@ display: flex; min-height: 0; overflow: hidden; + position: relative; + z-index: var(--z-base); } .desktop-main-container { @@ -63,9 +82,11 @@ .desktop-betting-sports-row { flex-shrink: 0; width: 100%; - padding: 0 16px; + padding: 0 var(--space-6); border-bottom: 1px solid var(--border); - background: var(--bg-card); + background: var(--glass-bg); + backdrop-filter: var(--blur-sm); + -webkit-backdrop-filter: var(--blur-sm); } .desktop-layout-betting { @@ -84,7 +105,7 @@ .desktop-betting-center { overflow-y: auto; - padding: 14px 16px; + padding: var(--space-6) var(--space-6); min-width: 0; } @@ -109,7 +130,7 @@ min-height: 0; overflow-y: auto; overflow-x: hidden; - padding: 28px 40px 40px; + padding: var(--space-9) var(--space-11) var(--space-12); align-items: stretch; } @@ -140,7 +161,7 @@ height: 100%; overflow-y: auto; align-items: center; - padding: 20px; + padding: var(--space-7); } .desktop-marketing-content { @@ -174,7 +195,7 @@ .desktop-hub-right { overflow-y: auto; - padding: 20px; + padding: var(--space-8); background: var(--desktop-bg); } @@ -186,15 +207,17 @@ width: 100%; height: 100%; overflow-y: auto; - padding: 40px; + padding: var(--space-11); } .desktop-auth-card { width: 100%; max-width: 440px; - padding: 30px; - background: var(--bg-card); + padding: var(--space-9); + background: var(--glass-bg-strong); + backdrop-filter: var(--blur-lg); + -webkit-backdrop-filter: var(--blur-lg); border: 1px solid var(--border-active); - border-radius: 8px; - box-shadow: var(--shadow); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-lg); } diff --git a/apps/player/src/styles/desktop/records.css b/apps/player/src/styles/desktop/records.css index 624a914..6645b8b 100644 --- a/apps/player/src/styles/desktop/records.css +++ b/apps/player/src/styles/desktop/records.css @@ -1,11 +1,14 @@ -/* PC account records: bets, wallet, recharge, cashbacks */ +/* ════════════════════════════════════════════════════════════ + PC Account Records — Theme-2 Blue-White + Bets, wallet, recharge, cashbacks + ════════════════════════════════════════════════════════════ */ .desktop-records-page { width: 100%; max-width: 1480px; margin: 0 auto; display: flex; flex-direction: column; - gap: 16px; + gap: var(--space-6); flex: 1; min-height: 0; height: 100%; @@ -16,10 +19,10 @@ display: flex; align-items: center; justify-content: space-between; - gap: 20px 32px; + gap: var(--space-7) var(--space-11); flex-wrap: wrap; flex-shrink: 0; - padding-bottom: 14px; + padding-bottom: var(--space-5); border-bottom: 1px solid var(--border); } @@ -34,7 +37,7 @@ .desktop-records-actions { display: flex; align-items: center; - gap: 10px; + gap: var(--space-4); flex-shrink: 0; } @@ -42,8 +45,8 @@ display: inline-flex; align-items: center; justify-content: center; - padding: 8px 18px; - border-radius: 6px; + padding: var(--space-4) var(--space-7); + border-radius: var(--radius-sm); border: 1px solid var(--border-active); background: rgba(0, 102, 204, 0.08); color: var(--primary-light); @@ -51,18 +54,19 @@ font-weight: 700; text-decoration: none; cursor: pointer; - transition: background 0.2s, border-color 0.2s; + transition: background var(--transition), border-color var(--transition), box-shadow var(--transition); } .desktop-records-action-btn:hover { background: rgba(0, 102, 204, 0.14); border-color: var(--border-active); + box-shadow: var(--glow-gold); } .desktop-records-filter-bar { display: flex; flex-wrap: wrap; - gap: 6px; + gap: var(--space-2); align-items: center; } @@ -70,14 +74,14 @@ display: flex; flex-wrap: wrap; align-items: center; - gap: 10px 14px; + gap: var(--space-4) var(--space-6); } .desktop-records-filter-group { display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; + gap: var(--space-4); } .desktop-records-filter-group-label { @@ -97,15 +101,15 @@ } .desktop-records-filter-chip { - padding: 7px 16px; - border-radius: 6px; + padding: 7px var(--space-6); + border-radius: var(--radius-sm); font-size: 12px; font-weight: 700; color: var(--text-muted); background: var(--bg-hover); border: 1px solid transparent; cursor: pointer; - transition: color 0.2s, border-color 0.2s, background 0.2s; + transition: color var(--transition), border-color var(--transition), background var(--transition); white-space: nowrap; } @@ -118,25 +122,26 @@ color: var(--primary-light); background: rgba(0, 102, 204, 0.1); border-color: rgba(0, 102, 204, 0.35); + box-shadow: 0 0 0 1px rgba(0, 102, 204, 0.1); } .desktop-wallet-subnav { display: flex; flex-wrap: wrap; - gap: 4px; + gap: var(--space-1); } .desktop-wallet-subnav-link { display: inline-flex; align-items: center; - padding: 8px 16px; - border-radius: 6px; + padding: var(--space-4) var(--space-6); + border-radius: var(--radius-sm); font-size: 13px; font-weight: 700; color: var(--text-muted); text-decoration: none; border: 1px solid transparent; - transition: color 0.2s, background 0.2s, border-color 0.2s; + transition: color var(--transition), background var(--transition), border-color var(--transition); } .desktop-wallet-subnav-link:hover { @@ -150,6 +155,7 @@ border-color: rgba(0, 102, 204, 0.28); } +/* ── Records Panel ── */ .desktop-records-panel { display: flex; flex-direction: column; @@ -157,8 +163,9 @@ min-height: 0; background: var(--bg-card); border: 1px solid var(--border); - border-radius: 10px; + border-radius: var(--radius-lg); overflow: hidden; + box-shadow: var(--shadow-sm); } .desktop-records-table-wrap { @@ -173,19 +180,23 @@ font-size: 13px; } +/* ── Table Header: glassmorphism + heading font ── */ .desktop-records-table th { position: sticky; top: 0; - z-index: 2; - padding: 12px 16px; + z-index: var(--z-sticky); + padding: var(--space-5) var(--space-6); text-align: left; font-size: 11px; font-weight: 800; - color: var(--primary-light); - background: var(--desktop-bg); + font-family: var(--font-heading); + color: var(--primary); + background: var(--glass-bg-strong); + backdrop-filter: var(--blur-md); + -webkit-backdrop-filter: var(--blur-md); text-transform: uppercase; letter-spacing: 0.06em; - border-bottom: 1px solid var(--border); + border-bottom: 2px solid var(--border-active); white-space: nowrap; } @@ -194,7 +205,7 @@ } .desktop-records-table td { - padding: 12px 16px; + padding: var(--space-5) var(--space-6); border-bottom: 1px solid var(--border); color: var(--text); vertical-align: middle; @@ -204,8 +215,9 @@ background: var(--bg-hover); } +/* ── Row hover: blue left-border indicator ── */ .desktop-records-table tbody tr.hover-row { - transition: background 0.15s; + transition: background var(--transition-fast), box-shadow var(--transition-fast); } .desktop-records-table tbody tr.clickable-row { @@ -215,12 +227,13 @@ .desktop-records-table tbody tr.hover-row:hover, .desktop-records-table tbody tr.clickable-row:hover { background: rgba(0, 102, 204, 0.06); + box-shadow: inset 3px 0 0 var(--primary-lighter); } .desktop-records-table .id-cell { color: var(--text); font-weight: 700; - font-family: 'SF Mono', 'Consolas', monospace; + font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.03em; } @@ -229,6 +242,7 @@ text-align: right; font-variant-numeric: tabular-nums; font-weight: 700; + font-family: var(--font-data); } .desktop-records-table .date-cell { @@ -241,29 +255,33 @@ color: var(--primary-light); font-weight: 700; text-decoration: none; + transition: color var(--transition-fast); } .desktop-records-table .link-cell:hover { + color: var(--primary-lighter); text-decoration: underline; } +/* ── Pagination ── */ .desktop-records-pagination { flex-shrink: 0; - padding: 12px 16px; + padding: var(--space-5) var(--space-6); border-top: 1px solid var(--border); background: var(--desktop-bg); } +/* ── Empty / Loading States ── */ .desktop-records-loading, .desktop-records-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; - gap: 14px; + gap: var(--space-5); flex: 1; min-height: 0; - padding: 48px 24px; + padding: var(--space-13) var(--space-9); color: var(--text-muted); font-size: 14px; font-weight: 600; @@ -277,18 +295,18 @@ .desktop-records-table-empty { text-align: center; - padding: 56px 16px !important; + padding: var(--space-13) var(--space-6) !important; color: var(--text-muted); font-size: 14px; font-weight: 600; } .desktop-records-table-empty .empty-hint { - margin: 8px 0 0; + margin: var(--space-4) 0 0; font-size: 13px; font-weight: 500; line-height: 1.6; - color: var(--text-muted); + color: var(--text-light); } .desktop-records-loading-cell { @@ -296,27 +314,76 @@ align-items: center; justify-content: center; min-height: 280px; - padding: 48px 24px; + padding: var(--space-13) var(--space-9); } +/* ── Status Badges: dot indicator + pulse ── */ .desktop-records-status { display: inline-flex; align-items: center; - padding: 4px 10px; - border-radius: 999px; + gap: 6px; + padding: var(--space-2) var(--space-5); + border-radius: var(--radius-full); font-size: 11px; font-weight: 700; letter-spacing: 0.03em; white-space: nowrap; } -.desktop-records-status.status-won { background: rgba(52, 199, 89, 0.12); color: #4cd964; } -.desktop-records-status.status-lost { background: rgba(255, 69, 58, 0.12); color: #ff453a; } -.desktop-records-status.status-pending { background: rgba(0, 102, 204, 0.12); color: var(--primary-light); } -.desktop-records-status.status-push { background: rgba(100, 100, 100, 0.12); color: #aaa; } -.desktop-records-status.status-cancelled { background: rgba(100, 100, 100, 0.1); color: #777; } -.desktop-records-status.status-default { background: rgba(100, 100, 100, 0.1); color: #888; } +/* Dot indicator before status text */ +.desktop-records-status::before { + content: ''; + width: 6px; + height: 6px; + border-radius: 50%; + flex-shrink: 0; +} -.desktop-records-amount.pos { color: var(--primary-light); } -.desktop-records-amount.neg { color: var(--danger); } +.desktop-records-status.status-won { + background: rgba(52, 199, 89, 0.12); + color: #2BB058; +} +.desktop-records-status.status-won::before { background: #34C759; } + +.desktop-records-status.status-lost { + background: rgba(255, 69, 58, 0.12); + color: #E53935; +} +.desktop-records-status.status-lost::before { background: #FF453A; } + +.desktop-records-status.status-pending { + background: rgba(0, 102, 204, 0.12); + color: var(--primary-light); +} +.desktop-records-status.status-pending::before { + background: var(--primary-lighter); + animation: pulse-dot 1.6s ease-in-out infinite; +} + +.desktop-records-status.status-push { + background: rgba(100, 100, 100, 0.12); + color: #888; +} +.desktop-records-status.status-push::before { background: #aaa; } + +.desktop-records-status.status-cancelled { + background: rgba(100, 100, 100, 0.1); + color: #777; +} +.desktop-records-status.status-cancelled::before { background: #999; } + +.desktop-records-status.status-default { + background: rgba(100, 100, 100, 0.1); + color: #888; +} +.desktop-records-status.status-default::before { background: #aaa; } + +@keyframes pulse-dot { + 0%, 100% { opacity: 1; transform: scale(1); } + 50% { opacity: 0.5; transform: scale(1.3); } +} + +/* ── Amount styling ── */ +.desktop-records-amount.pos { color: var(--primary-light); font-weight: 800; } +.desktop-records-amount.neg { color: var(--danger); font-weight: 800; } .desktop-records-amount.zero { color: var(--text-muted); } diff --git a/apps/player/src/styles/desktop/tokens.css b/apps/player/src/styles/desktop/tokens.css index 31742a0..509232c 100644 --- a/apps/player/src/styles/desktop/tokens.css +++ b/apps/player/src/styles/desktop/tokens.css @@ -1,8 +1,19 @@ .desktop-shell { - /* Color Palette overrides (theme-2 Pinnacle style) */ + /* ════════════════════════════════════════════════════════════ + THEME-2 · Pinnacle Blue-White Design System + ════════════════════════════════════════════════════════════ */ + + /* ── Font System ── */ + --font-heading: 'Russo One', 'Chakra Petch', 'Segoe UI', sans-serif; + --font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-mono: 'SF Mono', 'Consolas', 'Monaco', monospace; + --font-data: 'Chakra Petch', 'SF Mono', 'Consolas', monospace; + + /* ── Color Palette ── */ --primary: #003D6B; --primary-dark: #002847; --primary-light: #005B9F; + --primary-lighter: #0078D4; --secondary: #E8EDF2; --tertiary: #F5F7FA; --neutral: #6B7280; @@ -12,39 +23,101 @@ --bg-elevated: #FFFFFF; --text: #1A1A2E; --text-muted: #6B7280; + --text-light: #9CA3AF; --border: #E5E7EB; --border-active: #0066CC; - - /* Map gold tokens to theme blue/orange */ + --border-soft: rgba(0, 102, 204, 0.12); + + /* ── Blue Accent Tokens (mapped from gold) ── */ --border-gold: #0066CC; --border-gold-soft: rgba(0, 102, 204, 0.2); --shadow-gold: 0 2px 12px rgba(0, 61, 107, 0.1); + --shadow-gold-lg: 0 8px 32px rgba(0, 61, 107, 0.16), 0 2px 8px rgba(0, 102, 204, 0.06); --glow-gold: 0 0 6px rgba(0, 102, 204, 0.12); + --glow-gold-lg: 0 0 16px rgba(0, 102, 204, 0.2), 0 0 4px rgba(0, 102, 204, 0.1); --odds-accent: #F8971F; + --odds-glow: 0 0 10px rgba(248, 151, 31, 0.35); - /* Desktop specific added vars */ - --desktop-bg: #F5F7FA; - --desktop-border: #E5E7EB; - --desktop-sidebar-bg: #FFFFFF; + /* ── Spacing Scale (8dp rhythm) ── */ + --space-0: 0px; + --space-1: 2px; + --space-2: 4px; + --space-3: 6px; + --space-4: 8px; + --space-5: 12px; + --space-6: 16px; + --space-7: 20px; + --space-8: 24px; + --space-9: 28px; + --space-10: 32px; + --space-11: 40px; + --space-12: 48px; + --space-13: 56px; + --space-14: 64px; - --border-w: 1px; - --border-w-thick: 1px; - --danger: #DC2626; + /* ── Radius Scale ── */ --radius: 8px; --radius-sm: 6px; - --shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04); + --radius-xs: 4px; + --radius-lg: 12px; + --radius-xl: 16px; + --radius-2xl: 20px; + --radius-full: 999px; - /* PC Dimensioning */ + /* ── Shadow Scale (light-mode tuned) ── */ + --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04); + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04); + --shadow: 0 2px 8px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.04); + --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.08), 0 2px 6px rgba(0, 0, 0, 0.04); + --shadow-lg: 0 8px 28px rgba(0, 0, 0, 0.1), 0 4px 12px rgba(0, 0, 0, 0.04); + --shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.14), 0 6px 18px rgba(0, 0, 0, 0.06); + + /* ── Blur / Glassmorphism (light-mode tuned) ── */ + --blur-sm: blur(6px); + --blur-md: blur(10px); + --blur-lg: blur(16px); + --glass-bg: rgba(255, 255, 255, 0.88); + --glass-bg-strong: rgba(255, 255, 255, 0.95); + --glass-border: rgba(255, 255, 255, 0.6); + + /* ── Transition Tokens ── */ + --transition-fast: 0.12s cubic-bezier(0.4, 0, 0.2, 1); + --transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1); + --transition-slow: 0.3s cubic-bezier(0.4, 0, 0.2, 1); + --transition-bounce: 0.35s cubic-bezier(0.34, 1.56, 0.64, 1); + --transition-spring: 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); + + /* ── Z-Index Scale ── */ + --z-base: 1; + --z-sticky: 10; + --z-dropdown: 100; + --z-header: 120; + --z-modal: 1000; + --z-toast: 2000; + + /* ── Desktop Layout Dimensions ── */ --desktop-header-h: 56px; --desktop-left-sidebar-w: 220px; --desktop-right-betslip-w: 288px; --desktop-right-betslip-expanded-w: 288px; --desktop-right-betslip-collapsed-w: 40px; - - /* Reset typography inside desktop */ - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + + /* ── Desktop Background ── */ + --desktop-bg: #F5F7FA; + --desktop-border: #E5E7EB; + --desktop-sidebar-bg: #FFFFFF; + + /* ── Borders ── */ + --border-w: 1px; + --border-w-thick: 1px; + --danger: #DC2626; + --success: #34C759; + + /* ── Typography ── */ + font-family: var(--font-body); font-size: 13px; - line-height: 1.4; + line-height: 1.5; color: var(--text); -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } diff --git a/apps/player/src/views/desktop/DesktopHomeView.vue b/apps/player/src/views/desktop/DesktopHomeView.vue index a41ab55..9102ced 100644 --- a/apps/player/src/views/desktop/DesktopHomeView.vue +++ b/apps/player/src/views/desktop/DesktopHomeView.vue @@ -590,8 +590,10 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin .content-section { background: var(--bg-card); border: 1px solid var(--border); - border-radius: 12px; - padding: 16px 18px; + border-radius: var(--radius-lg); + padding: var(--space-6) var(--space-7); + box-shadow: var(--shadow-sm); + transition: box-shadow var(--transition); } /* section-title 閲戠嚎 */ @@ -605,16 +607,18 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin .st-line { width: 4px; height: 18px; - border-radius: 2px; - background: linear-gradient(180deg, var(--primary), var(--primary-light)); - box-shadow: 0 0 8px rgba(0, 102, 204, 0.35); + border-radius: var(--radius-full); + background: linear-gradient(180deg, var(--primary), var(--primary-lighter)); + box-shadow: 0 0 8px rgba(0, 102, 204, 0.4), var(--glow-gold); } .st-text { font-size: 15px; font-weight: 800; + font-family: var(--font-heading); color: var(--text); letter-spacing: 0.5px; + text-transform: uppercase; } .st-refresh { @@ -656,15 +660,15 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin .featured-match { display: flex; flex-direction: column; - gap: 14px; - padding: 18px 20px; - border-radius: 12px; + gap: var(--space-5); + padding: var(--space-7) var(--space-8); + border-radius: var(--radius-lg); background: linear-gradient(180deg, #f8fafc 0%, var(--bg-card) 100%); border: 1px solid var(--border-active); - box-shadow: 0 2px 12px rgba(0, 61, 107, 0.08); - margin-bottom: 14px; + box-shadow: var(--shadow-gold-lg); + margin-bottom: var(--space-5); cursor: pointer; - transition: box-shadow 0.25s, transform 0.15s; + transition: box-shadow var(--transition-slow), transform var(--transition); position: relative; overflow: hidden; } @@ -679,8 +683,8 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin } .featured-match:is(:hover, .featured-match--engaged) { - transform: translateY(-1px); - box-shadow: 0 4px 20px rgba(0, 61, 107, 0.15), inset 0 0 20px rgba(0, 102, 204, 0.06); + transform: translateY(-2px); + box-shadow: var(--shadow-xl), inset 0 0 24px rgba(0, 102, 204, 0.08), var(--glow-gold); } .featured-top { @@ -732,6 +736,7 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin .featured-team-name { font-size: 18px; font-weight: 800; + font-family: var(--font-heading); color: var(--text); text-align: center; line-height: 1.2; @@ -745,6 +750,7 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin font-size: 22px; font-weight: 900; font-style: italic; + font-family: var(--font-heading); color: var(--odds-accent, #F8971F); text-shadow: 0 0 12px rgba(248, 151, 31, 0.35); } @@ -769,6 +775,7 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin .featured-market-label { font-size: 11px; font-weight: 700; + font-family: var(--font-heading); color: var(--primary); text-align: center; letter-spacing: 0.4px; @@ -786,16 +793,16 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin display: flex; background: var(--bg-card); border: 1px solid var(--border); - border-radius: 8px; + border-radius: var(--radius); overflow: hidden; - transition: border-color 0.2s, box-shadow 0.2s, transform 0.15s; + transition: border-color var(--transition), box-shadow var(--transition), transform var(--transition); min-height: 68px; } .match-card:is(:hover, .match-card--engaged) { border-color: var(--border-active); - box-shadow: 0 4px 12px rgba(0, 61, 107, 0.08); - transform: translateY(-1px); + box-shadow: var(--shadow-md), var(--glow-gold); + transform: translateY(-2px); } .match-info-side { @@ -978,8 +985,9 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin .side-card { background: var(--bg-card); border: 1px solid var(--border); - border-radius: 12px; - padding: 12px 14px; + border-radius: var(--radius-lg); + padding: var(--space-5) var(--space-6); + box-shadow: var(--shadow-xs); } .side-card-header { @@ -993,8 +1001,10 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin .side-card-title { font-size: 13px; font-weight: 800; + font-family: var(--font-heading); color: var(--primary-light); letter-spacing: 0.3px; + text-transform: uppercase; } .side-recommend-list { @@ -1281,7 +1291,7 @@ function getHoveredSideForMatch(match: PlayerHomeMatch | null, cardRootId: strin .side-card:hover { transform: translateY(-2px); - box-shadow: 0 4px 20px rgba(0, 61, 107, 0.1); + box-shadow: var(--shadow-md), var(--glow-gold); } /* --- 8. 鎺ㄨ崘鍒楄〃 item 宸︿晶閲戠偣鎸囩ず hover --- */ diff --git a/apps/player/src/views/desktop/DesktopMyBetsView.vue b/apps/player/src/views/desktop/DesktopMyBetsView.vue index 6b018a2..a5b7f54 100644 --- a/apps/player/src/views/desktop/DesktopMyBetsView.vue +++ b/apps/player/src/views/desktop/DesktopMyBetsView.vue @@ -223,5 +223,7 @@ function statusLabel(status: string) { .muted-cell { color: var(--text-muted); max-width: 280px; + font-size: 12px; + font-family: var(--font-data); } diff --git a/apps/player/src/views/desktop/DesktopWalletDetailView.vue b/apps/player/src/views/desktop/DesktopWalletDetailView.vue index 7846170..6a037be 100644 --- a/apps/player/src/views/desktop/DesktopWalletDetailView.vue +++ b/apps/player/src/views/desktop/DesktopWalletDetailView.vue @@ -151,10 +151,13 @@ onActivated(() => { diff --git a/apps/player/src/views/desktop/DesktopWalletView.vue b/apps/player/src/views/desktop/DesktopWalletView.vue index 5e3f174..656d999 100644 --- a/apps/player/src/views/desktop/DesktopWalletView.vue +++ b/apps/player/src/views/desktop/DesktopWalletView.vue @@ -180,10 +180,10 @@ onActivated(loadPage); } .wallet-hero { - padding: 20px 22px; - border-radius: 14px; + padding: var(--space-8) var(--space-9); + border-radius: var(--radius-xl); background: linear-gradient(135deg, #003D6B 0%, #005B9F 52%, #002847 100%); - box-shadow: 0 4px 16px rgba(0, 61, 107, 0.16); + box-shadow: 0 4px 20px rgba(0, 61, 107, 0.2), inset 0 0 24px rgba(0, 102, 204, 0.08); color: #fff; } @@ -210,6 +210,7 @@ onActivated(loadPage); .wallet-hero-brand-text { font-size: 12px; font-weight: 800; + font-family: var(--font-heading); letter-spacing: 0.14em; color: rgba(255, 255, 255, 0.88); } @@ -236,15 +237,16 @@ onActivated(loadPage); display: block; font-size: 11px; font-weight: 700; + font-family: var(--font-heading); letter-spacing: 0.08em; text-transform: uppercase; color: rgba(255, 255, 255, 0.72); - margin-bottom: 6px; + margin-bottom: var(--space-3); } .wallet-hero-balance { margin: 0; - font-family: 'SF Mono', 'Consolas', monospace; + font-family: var(--font-mono); font-size: clamp(30px, 3.2vw, 42px); font-weight: 700; line-height: 1.1; @@ -257,26 +259,35 @@ onActivated(loadPage); } .wallet-stat-card { - padding: 14px 16px; - border-radius: 10px; + padding: var(--space-5) var(--space-6); + border-radius: var(--radius-lg); border: 1px solid var(--border); background: var(--bg-card); + box-shadow: var(--shadow-xs); + transition: box-shadow var(--transition), transform var(--transition); +} + +.wallet-stat-card:hover { + box-shadow: var(--shadow-sm), var(--glow-gold); + transform: translateY(-1px); } .wallet-stat-label { display: block; font-size: 11px; font-weight: 700; + font-family: var(--font-heading); color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.04em; - margin-bottom: 6px; + margin-bottom: var(--space-3); } .wallet-stat-value { display: block; font-size: 16px; font-weight: 800; + font-family: var(--font-data); color: var(--primary); font-variant-numeric: tabular-nums; word-break: break-all; @@ -284,9 +295,10 @@ onActivated(loadPage); .wallet-panel { border: 1px solid var(--border); - border-radius: 12px; + border-radius: var(--radius-lg); background: var(--bg-card); overflow: hidden; + box-shadow: var(--shadow-xs); } .wallet-panel-row { @@ -311,6 +323,7 @@ onActivated(loadPage); .wallet-panel-label { font-size: 12px; font-weight: 800; + font-family: var(--font-heading); color: var(--text-muted); padding-top: 2px; }