Redesign: phosphor-terminal identity and simplified 4-page structure
Deploy / lint (push) Successful in 6s
Deploy / test (push) Successful in 31s
Deploy / deploy (push) Successful in 22s

Information architecture (6 nav destinations -> 4):
- New Overview home: metric strip (live setups, high confidence,
  hit rate, expectancy), top-5 setups, watchlist pulse
- Market = Watchlist + Rankings merged as tabs; scoring weights
  moved into a collapsible disclosure
- Signals = Scanner + Performance merged as tabs (Setups | Track
  Record) with actions inside the panels
- Legacy routes redirect (/watchlist, /rankings, /scanner,
  /performance)

Visual identity:
- Warm ash-green dark palette replaces cold navy; citron lime
  accent replaces blue (Tailwind gray/blue remapped at config
  level so all components reskin)
- Primary buttons: lime with ink text; long/short stays
  emerald/red
- Typography: Bricolage Grotesque display, Instrument Sans body,
  IBM Plex Mono for all numerals incl. chart canvas labels
- Atmosphere: graph-paper grid + citron glow + film grain;
  pulsing brand dot; mono-numbered nav

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 14:42:05 +02:00
parent 21ed83c56c
commit 9c6a0a72fa
20 changed files with 548 additions and 213 deletions
+42 -5
View File
@@ -6,14 +6,46 @@ export default {
theme: {
extend: {
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
sans: ['"Instrument Sans"', 'system-ui', 'sans-serif'],
display: ['"Bricolage Grotesque"', 'system-ui', 'sans-serif'],
mono: ['"IBM Plex Mono"', 'ui-monospace', 'monospace'],
},
colors: {
// Warm ash neutrals (green-tinted) — replaces Tailwind's cool gray
// throughout the app, since components reference gray-* directly.
gray: {
50: '#f7f8f4',
100: '#eef0e9',
200: '#dde1d4',
300: '#bfc5b2',
400: '#959d87',
500: '#6e7562',
600: '#4d5344',
700: '#373c30',
800: '#22261d',
900: '#151911',
950: '#0e120f',
},
// Citron signal accent — replaces blue so every accent reference
// (text-blue-*, bg-blue-*, ring-blue-*) lights up in the brand color.
blue: {
50: '#fafee8',
100: '#f2fcc6',
200: '#e6f996',
300: '#d6f25c',
400: '#c3e82e',
500: '#a4cd14',
600: '#82a40b',
700: '#627c0e',
800: '#4e6212',
900: '#425314',
950: '#222e05',
},
surface: {
DEFAULT: 'rgba(255, 255, 255, 0.05)',
hover: 'rgba(255, 255, 255, 0.08)',
active: 'rgba(255, 255, 255, 0.12)',
border: 'rgba(255, 255, 255, 0.08)',
DEFAULT: 'rgba(255, 255, 255, 0.04)',
hover: 'rgba(255, 255, 255, 0.07)',
active: 'rgba(255, 255, 255, 0.1)',
border: 'rgba(223, 242, 178, 0.09)',
},
},
backdropBlur: {
@@ -23,6 +55,7 @@ export default {
'glow-pulse': 'glow-pulse 3s ease-in-out infinite',
'fade-in': 'fade-in 0.3s ease-out',
'slide-up': 'slide-up 0.4s ease-out',
'signal-pulse': 'signal-pulse 2.4s ease-in-out infinite',
},
keyframes: {
'glow-pulse': {
@@ -37,6 +70,10 @@ export default {
from: { opacity: '0', transform: 'translateY(12px)' },
to: { opacity: '1', transform: 'translateY(0)' },
},
'signal-pulse': {
'0%, 100%': { opacity: '1', transform: 'scale(1)' },
'50%': { opacity: '0.35', transform: 'scale(0.8)' },
},
},
},
},