Spaces:
Running
Running
| /* ═══════════════════════════════════════════════════════════ | |
| TRADE ANALYZER — Premium Dark Trading Terminal CSS | |
| ═══════════════════════════════════════════════════════════ */ | |
| /* ── CSS Variables (Design Tokens) ───────────────────────── */ | |
| :root { | |
| /* Backgrounds */ | |
| --bg-primary: #0a0e1a; | |
| --bg-secondary: #0f1425; | |
| --bg-tertiary: #141a2e; | |
| --bg-card: rgba(255, 255, 255, 0.03); | |
| --bg-card-hover: rgba(255, 255, 255, 0.06); | |
| --bg-glass: rgba(15, 20, 40, 0.85); | |
| /* Borders */ | |
| --border-subtle: rgba(255, 255, 255, 0.06); | |
| --border-medium: rgba(255, 255, 255, 0.1); | |
| --border-strong: rgba(255, 255, 255, 0.15); | |
| /* Text */ | |
| --text-primary: #e8eaf0; | |
| --text-secondary: #8b92a5; | |
| --text-tertiary: #5a6178; | |
| --text-muted: #3d4458; | |
| /* Trading Colors */ | |
| --bullish: #00e5a0; | |
| --bullish-dim: rgba(0, 229, 160, 0.15); | |
| --bullish-glow: rgba(0, 229, 160, 0.4); | |
| --bearish: #ff4757; | |
| --bearish-dim: rgba(255, 71, 87, 0.15); | |
| --bearish-glow: rgba(255, 71, 87, 0.4); | |
| /* Accents */ | |
| --accent-blue: #3b82f6; | |
| --accent-blue-dim: rgba(59, 130, 246, 0.15); | |
| --accent-amber: #f59e0b; | |
| --accent-amber-dim: rgba(245, 158, 11, 0.15); | |
| --accent-purple: #8b5cf6; | |
| --accent-purple-dim: rgba(139, 92, 246, 0.15); | |
| --accent-cyan: #06b6d4; | |
| /* Grades */ | |
| --grade-a: #00e5a0; | |
| --grade-b: #f59e0b; | |
| --grade-c: #8b92a5; | |
| /* Spacing */ | |
| --gap-xs: 4px; | |
| --gap-sm: 8px; | |
| --gap-md: 12px; | |
| --gap-lg: 16px; | |
| --gap-xl: 24px; | |
| /* Radii */ | |
| --radius-sm: 6px; | |
| --radius-md: 10px; | |
| --radius-lg: 14px; | |
| --radius-xl: 20px; | |
| /* Fonts */ | |
| --font-ui: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; | |
| --font-mono: 'JetBrains Mono', 'Fira Code', monospace; | |
| /* Shadows */ | |
| --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3); | |
| --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.4); | |
| --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5); | |
| --shadow-glow-bull: 0 0 20px rgba(0, 229, 160, 0.2); | |
| --shadow-glow-bear: 0 0 20px rgba(255, 71, 87, 0.2); | |
| } | |
| /* ── Reset & Base ────────────────────────────────────────── */ | |
| *, *::before, *::after { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| html { | |
| font-size: 14px; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| } | |
| body { | |
| font-family: var(--font-ui); | |
| background: var(--bg-primary); | |
| color: var(--text-primary); | |
| overflow: hidden; | |
| height: 100vh; | |
| width: 100vw; | |
| } | |
| /* Scrollbar */ | |
| ::-webkit-scrollbar { | |
| width: 5px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: transparent; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: var(--border-medium); | |
| border-radius: 10px; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: var(--border-strong); | |
| } | |
| /* ── Glass Panel ─────────────────────────────────────────── */ | |
| .glass-panel { | |
| background: var(--bg-glass); | |
| backdrop-filter: blur(20px); | |
| -webkit-backdrop-filter: blur(20px); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-lg); | |
| } | |
| /* ── App Layout ──────────────────────────────────────────── */ | |
| #app { | |
| display: grid; | |
| grid-template-rows: 56px 1fr auto auto; | |
| height: 100vh; | |
| width: 100vw; | |
| padding: var(--gap-sm); | |
| gap: var(--gap-sm); | |
| background: linear-gradient(135deg, var(--bg-primary) 0%, #0d1220 50%, var(--bg-primary) 100%); | |
| } | |
| /* ── Header ──────────────────────────────────────────────── */ | |
| #app-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| padding: 0 var(--gap-lg); | |
| gap: var(--gap-lg); | |
| min-height: 56px; | |
| } | |
| .header-left, | |
| .header-center, | |
| .header-right { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--gap-md); | |
| } | |
| .header-left { | |
| flex: 0 0 auto; | |
| } | |
| .header-center { | |
| flex: 1 1 auto; | |
| justify-content: center; | |
| } | |
| .header-right { | |
| flex: 0 0 auto; | |
| } | |
| /* Logo */ | |
| .logo { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--gap-sm); | |
| font-weight: 700; | |
| font-size: 1.1rem; | |
| letter-spacing: -0.02em; | |
| white-space: nowrap; | |
| } | |
| .logo-icon { | |
| font-size: 1.4rem; | |
| color: var(--accent-blue); | |
| filter: drop-shadow(0 0 8px var(--accent-blue)); | |
| } | |
| .logo-accent { | |
| color: var(--accent-blue); | |
| } | |
| /* Symbol Selector */ | |
| .symbol-selector { | |
| display: flex; | |
| gap: var(--gap-xs); | |
| } | |
| .symbol-btn { | |
| padding: 6px 12px; | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-sm); | |
| background: transparent; | |
| color: var(--text-secondary); | |
| font-family: var(--font-mono); | |
| font-size: 0.78rem; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| white-space: nowrap; | |
| } | |
| .symbol-btn:hover { | |
| background: var(--bg-card-hover); | |
| color: var(--text-primary); | |
| border-color: var(--border-medium); | |
| } | |
| .symbol-btn.active { | |
| background: var(--accent-blue-dim); | |
| color: var(--accent-blue); | |
| border-color: var(--accent-blue); | |
| box-shadow: 0 0 12px rgba(59, 130, 246, 0.15); | |
| } | |
| /* Timeframe Selector */ | |
| .timeframe-selector { | |
| display: flex; | |
| gap: 2px; | |
| background: rgba(255, 255, 255, 0.03); | |
| border-radius: var(--radius-sm); | |
| padding: 2px; | |
| } | |
| .tf-btn { | |
| padding: 5px 10px; | |
| border: none; | |
| border-radius: 4px; | |
| background: transparent; | |
| color: var(--text-tertiary); | |
| font-family: var(--font-mono); | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| } | |
| .tf-btn:hover { | |
| color: var(--text-secondary); | |
| background: rgba(255, 255, 255, 0.05); | |
| } | |
| .tf-btn.active { | |
| background: var(--accent-blue); | |
| color: #fff; | |
| box-shadow: 0 2px 8px rgba(59, 130, 246, 0.3); | |
| } | |
| /* Live Price */ | |
| .live-price-display { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--gap-sm); | |
| } | |
| .price-main { | |
| display: flex; | |
| align-items: baseline; | |
| gap: var(--gap-sm); | |
| } | |
| .current-price { | |
| font-family: var(--font-mono); | |
| font-size: 1.3rem; | |
| font-weight: 700; | |
| letter-spacing: -0.02em; | |
| transition: color 0.15s ease; | |
| } | |
| .current-price.tick-up { | |
| color: var(--bullish); | |
| text-shadow: 0 0 12px var(--bullish-glow); | |
| } | |
| .current-price.tick-down { | |
| color: var(--bearish); | |
| text-shadow: 0 0 12px var(--bearish-glow); | |
| } | |
| .price-change { | |
| font-family: var(--font-mono); | |
| font-size: 0.8rem; | |
| font-weight: 500; | |
| padding: 2px 6px; | |
| border-radius: 4px; | |
| } | |
| .price-change.positive { | |
| color: var(--bullish); | |
| background: var(--bullish-dim); | |
| } | |
| .price-change.negative { | |
| color: var(--bearish); | |
| background: var(--bearish-dim); | |
| } | |
| /* Account Balance & Equity Display */ | |
| .account-summary { | |
| display: flex; | |
| gap: var(--gap-md); | |
| padding: 4px 12px; | |
| border-radius: var(--radius-sm); | |
| border: 1px solid var(--border-subtle); | |
| background: rgba(255, 255, 255, 0.02); | |
| } | |
| .account-metric { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 1px; | |
| } | |
| .account-label { | |
| font-size: 0.6rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| color: var(--text-tertiary); | |
| } | |
| .account-value { | |
| font-family: var(--font-mono); | |
| font-size: 0.85rem; | |
| font-weight: 700; | |
| color: var(--text-primary); | |
| transition: all 0.2s ease; | |
| } | |
| .account-value.equity-up { | |
| color: var(--bullish); | |
| text-shadow: 0 0 8px var(--bullish-glow); | |
| } | |
| .account-value.equity-down { | |
| color: var(--bearish); | |
| text-shadow: 0 0 8px var(--bearish-glow); | |
| } | |
| /* Daily Loss Counter */ | |
| .daily-loss-counter { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 1px; | |
| padding: 4px 10px; | |
| border-radius: var(--radius-sm); | |
| border: 1px solid var(--border-subtle); | |
| } | |
| .loss-label { | |
| font-size: 0.6rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| color: var(--text-tertiary); | |
| } | |
| .loss-count { | |
| font-family: var(--font-mono); | |
| font-size: 0.85rem; | |
| font-weight: 700; | |
| color: var(--text-secondary); | |
| } | |
| .loss-count.warning { | |
| color: var(--accent-amber); | |
| } | |
| .loss-count.danger { | |
| color: var(--bearish); | |
| animation: pulse-danger 1.5s ease-in-out infinite; | |
| } | |
| /* Connection Status */ | |
| .connection-status { | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| font-size: 0.72rem; | |
| color: var(--text-tertiary); | |
| } | |
| .status-dot { | |
| width: 7px; | |
| height: 7px; | |
| border-radius: 50%; | |
| transition: background 0.3s ease; | |
| } | |
| .status-dot.connected { | |
| background: var(--bullish); | |
| box-shadow: 0 0 8px var(--bullish-glow); | |
| animation: pulse-dot 2s ease-in-out infinite; | |
| } | |
| .status-dot.disconnected { | |
| background: var(--bearish); | |
| box-shadow: 0 0 8px var(--bearish-glow); | |
| } | |
| .status-dot.connecting { | |
| background: var(--accent-amber); | |
| animation: pulse-dot 1s ease-in-out infinite; | |
| } | |
| /* ── Main Content ────────────────────────────────────────── */ | |
| .main-content { | |
| display: grid; | |
| grid-template-columns: 1fr 320px; | |
| gap: var(--gap-sm); | |
| min-height: 0; | |
| overflow: hidden; | |
| } | |
| /* Chart Area */ | |
| .chart-area { | |
| position: relative; | |
| overflow: hidden; | |
| min-height: 300px; | |
| } | |
| .chart-container { | |
| width: 100%; | |
| height: 100%; | |
| } | |
| .chart-overlay-info { | |
| position: absolute; | |
| top: var(--gap-md); | |
| left: var(--gap-md); | |
| display: flex; | |
| gap: var(--gap-sm); | |
| pointer-events: none; | |
| z-index: 10; | |
| } | |
| .overlay-symbol { | |
| font-family: var(--font-mono); | |
| font-size: 1.1rem; | |
| font-weight: 700; | |
| color: var(--text-primary); | |
| opacity: 0.5; | |
| } | |
| .overlay-timeframe { | |
| font-family: var(--font-mono); | |
| font-size: 1.1rem; | |
| font-weight: 500; | |
| color: var(--text-tertiary); | |
| opacity: 0.5; | |
| } | |
| /* ── Right Sidebar ───────────────────────────────────────── */ | |
| .right-sidebar { | |
| display: flex; | |
| flex-direction: column; | |
| gap: var(--gap-sm); | |
| overflow: hidden; | |
| } | |
| .signal-panel { | |
| display: none ; | |
| } | |
| .trade-panel { | |
| flex: 1 1 100%; | |
| display: flex; | |
| flex-direction: column; | |
| overflow: hidden; | |
| } | |
| .panel-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| padding: var(--gap-md) var(--gap-lg); | |
| border-bottom: 1px solid var(--border-subtle); | |
| flex-shrink: 0; | |
| } | |
| .panel-title { | |
| font-size: 0.85rem; | |
| font-weight: 600; | |
| display: flex; | |
| align-items: center; | |
| gap: var(--gap-sm); | |
| } | |
| .panel-icon { | |
| font-size: 1rem; | |
| } | |
| .badge { | |
| font-family: var(--font-mono); | |
| font-size: 0.7rem; | |
| font-weight: 700; | |
| padding: 2px 8px; | |
| border-radius: 10px; | |
| background: var(--accent-blue-dim); | |
| color: var(--accent-blue); | |
| } | |
| .signal-list, | |
| .trade-list { | |
| flex: 1 1 auto; | |
| overflow-y: auto; | |
| padding: var(--gap-sm); | |
| } | |
| /* Empty State */ | |
| .empty-state { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| padding: var(--gap-xl); | |
| gap: var(--gap-sm); | |
| color: var(--text-tertiary); | |
| font-size: 0.8rem; | |
| } | |
| .empty-icon { | |
| font-size: 2rem; | |
| opacity: 0.4; | |
| } | |
| /* ── Signal Cards ────────────────────────────────────────── */ | |
| .signal-card { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-md); | |
| padding: var(--gap-md); | |
| margin-bottom: var(--gap-sm); | |
| transition: all 0.2s ease; | |
| animation: slideIn 0.3s ease-out; | |
| } | |
| .signal-card:hover { | |
| border-color: var(--border-medium); | |
| background: var(--bg-card-hover); | |
| } | |
| .signal-card.long { | |
| border-left: 3px solid var(--bullish); | |
| } | |
| .signal-card.short { | |
| border-left: 3px solid var(--bearish); | |
| } | |
| .signal-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| margin-bottom: var(--gap-sm); | |
| } | |
| .signal-direction { | |
| font-family: var(--font-mono); | |
| font-size: 0.72rem; | |
| font-weight: 700; | |
| padding: 3px 8px; | |
| border-radius: 4px; | |
| letter-spacing: 0.05em; | |
| } | |
| .signal-direction.long { | |
| background: var(--bullish-dim); | |
| color: var(--bullish); | |
| } | |
| .signal-direction.short { | |
| background: var(--bearish-dim); | |
| color: var(--bearish); | |
| } | |
| .signal-quality { | |
| font-family: var(--font-mono); | |
| font-size: 0.7rem; | |
| font-weight: 700; | |
| width: 22px; | |
| height: 22px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| border-radius: 50%; | |
| border: 2px solid; | |
| } | |
| .signal-quality.grade-a { | |
| border-color: var(--grade-a); | |
| color: var(--grade-a); | |
| } | |
| .signal-quality.grade-b { | |
| border-color: var(--grade-b); | |
| color: var(--grade-b); | |
| } | |
| .signal-quality.grade-c { | |
| border-color: var(--grade-c); | |
| color: var(--grade-c); | |
| } | |
| .signal-levels { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: var(--gap-xs) var(--gap-md); | |
| margin-bottom: var(--gap-sm); | |
| } | |
| .signal-level { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| font-size: 0.75rem; | |
| } | |
| .signal-level-label { | |
| color: var(--text-tertiary); | |
| font-size: 0.65rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .signal-level-value { | |
| font-family: var(--font-mono); | |
| font-weight: 600; | |
| font-size: 0.78rem; | |
| } | |
| .signal-level-value.entry { color: var(--accent-blue); } | |
| .signal-level-value.sl { color: var(--bearish); } | |
| .signal-level-value.tp { color: var(--bullish); } | |
| .signal-level-value.lots { color: var(--accent-amber); } | |
| .signal-meta { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding-top: var(--gap-sm); | |
| border-top: 1px solid var(--border-subtle); | |
| font-size: 0.72rem; | |
| } | |
| .signal-rr { | |
| font-family: var(--font-mono); | |
| font-weight: 600; | |
| color: var(--accent-cyan); | |
| } | |
| .signal-risk { | |
| font-family: var(--font-mono); | |
| font-weight: 500; | |
| color: var(--text-secondary); | |
| } | |
| .signal-confluences { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: var(--gap-xs); | |
| margin-top: var(--gap-sm); | |
| } | |
| .confluence-tag { | |
| font-size: 0.62rem; | |
| padding: 2px 6px; | |
| border-radius: 3px; | |
| background: rgba(255, 255, 255, 0.05); | |
| color: var(--text-secondary); | |
| border: 1px solid var(--border-subtle); | |
| } | |
| .signal-actions { | |
| display: flex; | |
| gap: var(--gap-sm); | |
| margin-top: var(--gap-sm); | |
| } | |
| /* ── Trade Cards ─────────────────────────────────────────── */ | |
| .trade-card { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-md); | |
| padding: var(--gap-md); | |
| margin-bottom: var(--gap-sm); | |
| } | |
| .trade-pnl { | |
| font-family: var(--font-mono); | |
| font-size: 1rem; | |
| font-weight: 700; | |
| } | |
| .trade-pnl.positive { color: var(--bullish); } | |
| .trade-pnl.negative { color: var(--bearish); } | |
| .trade-suggestion { | |
| font-size: 0.72rem; | |
| padding: 4px 8px; | |
| border-radius: 4px; | |
| margin-top: var(--gap-sm); | |
| } | |
| .trade-suggestion.hold { | |
| background: var(--accent-blue-dim); | |
| color: var(--accent-blue); | |
| } | |
| .trade-suggestion.partial { | |
| background: var(--accent-amber-dim); | |
| color: var(--accent-amber); | |
| } | |
| .trade-suggestion.close { | |
| background: var(--bullish-dim); | |
| color: var(--bullish); | |
| } | |
| .trade-suggestion.warning { | |
| background: var(--bearish-dim); | |
| color: var(--bearish); | |
| } | |
| /* ── Analysis Section ────────────────────────────────────── */ | |
| .analysis-section { | |
| position: relative; | |
| overflow: hidden; | |
| display: flex; | |
| flex-direction: column; | |
| height: 320px; | |
| min-height: 180px; | |
| } | |
| .resize-handle { | |
| height: 6px; | |
| width: 100%; | |
| cursor: ns-resize; | |
| background: transparent; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| z-index: 100; | |
| transition: background 0.2s ease; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .resize-handle::after { | |
| content: ''; | |
| width: 40px; | |
| height: 3px; | |
| background: var(--border-strong); | |
| border-radius: 2px; | |
| opacity: 0; | |
| transition: opacity 0.2s ease, background 0.2s ease; | |
| } | |
| .resize-handle:hover::after, | |
| .resize-handle.active::after { | |
| opacity: 0.8; | |
| background: var(--accent-blue); | |
| } | |
| .resize-handle:hover { | |
| background: rgba(255, 255, 255, 0.03); | |
| } | |
| .resize-handle.active { | |
| background: rgba(59, 130, 246, 0.08); | |
| } | |
| .analysis-tabs { | |
| display: flex; | |
| gap: 2px; | |
| padding: var(--gap-sm) var(--gap-md); | |
| border-bottom: 1px solid var(--border-subtle); | |
| flex-shrink: 0; | |
| overflow-x: auto; | |
| } | |
| .tab-btn { | |
| padding: 6px 14px; | |
| border: none; | |
| border-radius: var(--radius-sm); | |
| background: transparent; | |
| color: var(--text-tertiary); | |
| font-family: var(--font-ui); | |
| font-size: 0.75rem; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| white-space: nowrap; | |
| } | |
| .tab-btn:hover { | |
| color: var(--text-secondary); | |
| background: rgba(255, 255, 255, 0.04); | |
| } | |
| .tab-btn.active { | |
| color: var(--accent-blue); | |
| background: var(--accent-blue-dim); | |
| } | |
| .analysis-content { | |
| flex: 1 1 auto; | |
| overflow-y: auto; | |
| padding: var(--gap-md); | |
| } | |
| .tab-pane { | |
| display: none; | |
| } | |
| .tab-pane.active { | |
| display: block; | |
| } | |
| #tab-chat.tab-pane.active { | |
| display: flex; | |
| flex-direction: column; | |
| height: 100%; | |
| } | |
| /* Analysis Table */ | |
| .analysis-table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| font-size: 0.75rem; | |
| } | |
| .analysis-table th { | |
| text-align: left; | |
| padding: 6px 10px; | |
| color: var(--text-tertiary); | |
| font-weight: 500; | |
| font-size: 0.68rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| border-bottom: 1px solid var(--border-subtle); | |
| } | |
| .analysis-table td { | |
| padding: 6px 10px; | |
| font-family: var(--font-mono); | |
| font-size: 0.75rem; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.02); | |
| } | |
| .analysis-table tr:hover td { | |
| background: rgba(255, 255, 255, 0.02); | |
| } | |
| /* Trend Badges */ | |
| .trend-badge { | |
| font-size: 0.68rem; | |
| font-weight: 600; | |
| padding: 2px 8px; | |
| border-radius: 3px; | |
| font-family: var(--font-mono); | |
| } | |
| .trend-badge.bullish { | |
| background: var(--bullish-dim); | |
| color: var(--bullish); | |
| } | |
| .trend-badge.bearish { | |
| background: var(--bearish-dim); | |
| color: var(--bearish); | |
| } | |
| .trend-badge.ranging { | |
| background: rgba(255, 255, 255, 0.05); | |
| color: var(--text-secondary); | |
| } | |
| /* OB/Zone Badges */ | |
| .ob-badge { | |
| font-size: 0.65rem; | |
| padding: 2px 6px; | |
| border-radius: 3px; | |
| font-family: var(--font-mono); | |
| font-weight: 600; | |
| } | |
| .ob-badge.bullish { background: var(--bullish-dim); color: var(--bullish); } | |
| .ob-badge.bearish { background: var(--bearish-dim); color: var(--bearish); } | |
| .ob-badge.mitigated { opacity: 0.4; text-decoration: line-through; } | |
| .zone-status { | |
| font-size: 0.65rem; | |
| padding: 2px 6px; | |
| border-radius: 3px; | |
| font-family: var(--font-mono); | |
| font-weight: 600; | |
| } | |
| .zone-status.fresh { background: var(--bullish-dim); color: var(--bullish); } | |
| .zone-status.tested { background: var(--accent-amber-dim); color: var(--accent-amber); } | |
| .zone-status.broken { background: var(--bearish-dim); color: var(--bearish); } | |
| /* Indicator Values */ | |
| .indicator-value { | |
| font-family: var(--font-mono); | |
| font-weight: 600; | |
| } | |
| .indicator-value.bullish { color: var(--bullish); } | |
| .indicator-value.bearish { color: var(--bearish); } | |
| .indicator-value.neutral { color: var(--text-secondary); } | |
| /* ── Lot Calculator ──────────────────────────────────────── */ | |
| .calculator-form { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr 1fr; | |
| gap: var(--gap-md); | |
| max-width: 700px; | |
| } | |
| .calc-group { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 4px; | |
| } | |
| .calc-label { | |
| font-size: 0.68rem; | |
| color: var(--text-tertiary); | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .calc-input { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-sm); | |
| padding: 8px 10px; | |
| color: var(--text-primary); | |
| font-family: var(--font-mono); | |
| font-size: 0.82rem; | |
| outline: none; | |
| transition: border-color 0.2s ease; | |
| } | |
| .calc-input:focus { | |
| border-color: var(--accent-blue); | |
| box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15); | |
| } | |
| .calc-input::placeholder { | |
| color: var(--text-muted); | |
| } | |
| .calc-select { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-sm); | |
| padding: 8px 10px; | |
| color: var(--text-primary); | |
| font-family: var(--font-mono); | |
| font-size: 0.82rem; | |
| outline: none; | |
| cursor: pointer; | |
| } | |
| .calc-result { | |
| grid-column: 1 / -1; | |
| display: flex; | |
| gap: var(--gap-lg); | |
| padding: var(--gap-md); | |
| background: var(--bg-card); | |
| border-radius: var(--radius-md); | |
| border: 1px solid var(--border-subtle); | |
| } | |
| .calc-result-item { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 2px; | |
| } | |
| .calc-result-label { | |
| font-size: 0.65rem; | |
| color: var(--text-tertiary); | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .calc-result-value { | |
| font-family: var(--font-mono); | |
| font-size: 1rem; | |
| font-weight: 700; | |
| color: var(--accent-blue); | |
| } | |
| /* ── Buttons ─────────────────────────────────────────────── */ | |
| .btn { | |
| padding: 6px 14px; | |
| border: none; | |
| border-radius: var(--radius-sm); | |
| font-family: var(--font-ui); | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| display: flex; | |
| align-items: center; | |
| gap: var(--gap-xs); | |
| } | |
| .btn-primary { | |
| background: var(--accent-blue); | |
| color: #fff; | |
| } | |
| .btn-primary:hover { | |
| background: #4f8ff7; | |
| box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3); | |
| } | |
| .btn-success { | |
| background: var(--bullish); | |
| color: #000; | |
| } | |
| .btn-success:hover { | |
| box-shadow: var(--shadow-glow-bull); | |
| } | |
| .btn-danger { | |
| background: var(--bearish); | |
| color: #fff; | |
| } | |
| .btn-danger:hover { | |
| box-shadow: var(--shadow-glow-bear); | |
| } | |
| .btn-outline { | |
| background: transparent; | |
| color: var(--text-secondary); | |
| border: 1px solid var(--border-medium); | |
| } | |
| .btn-outline:hover { | |
| background: var(--bg-card-hover); | |
| color: var(--text-primary); | |
| } | |
| .btn-sm { | |
| padding: 4px 10px; | |
| font-size: 0.7rem; | |
| } | |
| /* ── Daily Stop Overlay ──────────────────────────────────── */ | |
| .daily-stop-overlay { | |
| position: fixed; | |
| inset: 0; | |
| background: rgba(0, 0, 0, 0.8); | |
| backdrop-filter: blur(8px); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| z-index: 1000; | |
| animation: fadeIn 0.3s ease; | |
| } | |
| .daily-stop-overlay.hidden { | |
| display: none; | |
| } | |
| .daily-stop-modal { | |
| padding: var(--gap-xl) 40px; | |
| text-align: center; | |
| max-width: 400px; | |
| } | |
| .daily-stop-modal .stop-icon { | |
| font-size: 3rem; | |
| display: block; | |
| margin-bottom: var(--gap-md); | |
| } | |
| .daily-stop-modal h2 { | |
| font-size: 1.3rem; | |
| margin-bottom: var(--gap-sm); | |
| color: var(--bearish); | |
| } | |
| .daily-stop-modal p { | |
| color: var(--text-secondary); | |
| margin-bottom: var(--gap-xl); | |
| line-height: 1.5; | |
| } | |
| /* ── Disclaimer ──────────────────────────────────────────── */ | |
| .disclaimer { | |
| text-align: center; | |
| font-size: 0.65rem; | |
| color: var(--text-muted); | |
| padding: 4px 0; | |
| } | |
| /* ── Overview Grid ───────────────────────────────────────── */ | |
| .overview-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); | |
| gap: var(--gap-md); | |
| } | |
| .overview-card { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-md); | |
| padding: var(--gap-md); | |
| } | |
| .overview-card-title { | |
| font-size: 0.68rem; | |
| color: var(--text-tertiary); | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| margin-bottom: var(--gap-sm); | |
| } | |
| .overview-card-value { | |
| font-family: var(--font-mono); | |
| font-size: 1.1rem; | |
| font-weight: 700; | |
| } | |
| .overview-card-sub { | |
| font-size: 0.72rem; | |
| color: var(--text-secondary); | |
| margin-top: 4px; | |
| } | |
| /* ── Animations ──────────────────────────────────────────── */ | |
| @keyframes fadeIn { | |
| from { opacity: 0; } | |
| to { opacity: 1; } | |
| } | |
| @keyframes slideIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(-8px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| @keyframes pulse-dot { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.4; } | |
| } | |
| @keyframes pulse-danger { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.5; } | |
| } | |
| @keyframes signal-glow { | |
| 0%, 100% { box-shadow: 0 0 5px rgba(59, 130, 246, 0.2); } | |
| 50% { box-shadow: 0 0 15px rgba(59, 130, 246, 0.4); } | |
| } | |
| .signal-new { | |
| animation: signal-glow 2s ease-in-out 3; | |
| } | |
| /* ── Responsive ──────────────────────────────────────────── */ | |
| @media (max-width: 1100px) { | |
| .main-content { | |
| grid-template-columns: 1fr 280px; | |
| } | |
| } | |
| @media (max-width: 900px) { | |
| .main-content { | |
| grid-template-columns: 1fr; | |
| grid-template-rows: 1fr auto; | |
| } | |
| .right-sidebar { | |
| flex-direction: row; | |
| max-height: 200px; | |
| } | |
| .symbol-btn span.full-name { | |
| display: none; | |
| } | |
| } | |
| /* ── P&L Calendar Dashboard & Day-of-Week stats ──────────────── */ | |
| .dashboard-container { | |
| display: flex; | |
| flex-direction: column; | |
| gap: var(--gap-lg); | |
| } | |
| .dashboard-grid { | |
| display: grid; | |
| grid-template-columns: 1.25fr 1fr; | |
| gap: var(--gap-lg); | |
| } | |
| .calendar-section { | |
| display: flex; | |
| flex-direction: column; | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-md); | |
| padding: var(--gap-md); | |
| } | |
| .calendar-header { | |
| margin-bottom: var(--gap-sm); | |
| font-weight: 700; | |
| font-size: 0.85rem; | |
| color: var(--text-primary); | |
| } | |
| .calendar-grid { | |
| display: grid; | |
| grid-template-columns: repeat(7, 1fr); | |
| gap: 4px; | |
| } | |
| .cal-weekday { | |
| text-align: center; | |
| font-size: 0.65rem; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| color: var(--text-tertiary); | |
| padding-bottom: 4px; | |
| } | |
| .cal-cell { | |
| background: rgba(255, 255, 255, 0.02); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: 4px; | |
| aspect-ratio: 1.2; | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: space-between; | |
| padding: 4px; | |
| min-height: 38px; | |
| position: relative; | |
| transition: all 0.2s ease; | |
| } | |
| .cal-cell.empty { | |
| opacity: 0.15; | |
| background: transparent; | |
| border-color: transparent; | |
| } | |
| .cal-cell:hover:not(.empty) { | |
| background: rgba(255, 255, 255, 0.05); | |
| border-color: var(--border-medium); | |
| } | |
| .cal-cell.today { | |
| border-color: var(--accent-blue); | |
| box-shadow: 0 0 8px var(--accent-blue-dim); | |
| } | |
| .cal-day-num { | |
| font-size: 0.68rem; | |
| color: var(--text-secondary); | |
| font-weight: 500; | |
| } | |
| .cal-cell.today .cal-day-num { | |
| color: var(--accent-blue); | |
| font-weight: 700; | |
| } | |
| .cal-pnl { | |
| font-family: var(--font-mono); | |
| font-size: 0.65rem; | |
| font-weight: 700; | |
| text-align: right; | |
| width: 100%; | |
| } | |
| .cal-cell.profit { | |
| background: rgba(0, 229, 160, 0.06); | |
| border-color: rgba(0, 229, 160, 0.15); | |
| } | |
| .cal-cell.loss { | |
| background: rgba(255, 71, 87, 0.06); | |
| border-color: rgba(255, 71, 87, 0.15); | |
| } | |
| .daywise-section { | |
| display: flex; | |
| flex-direction: column; | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-md); | |
| padding: var(--gap-md); | |
| overflow-y: auto; | |
| } | |
| .stats-header { | |
| font-weight: 600; | |
| font-size: 0.85rem; | |
| color: var(--text-primary); | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| } | |
| /* ── AI Analyst Chatbox ───────────────────────────────────── */ | |
| .chat-tab-container { | |
| display: flex; | |
| flex-direction: column; | |
| height: 100%; | |
| } | |
| .chat-messages { | |
| flex: 1 1 auto; | |
| overflow-y: auto; | |
| padding: var(--gap-xs); | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| margin-bottom: 8px; | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-md); | |
| background: rgba(255, 255, 255, 0.01); | |
| padding: var(--gap-sm); | |
| } | |
| .chat-bubble { | |
| max-width: 85%; | |
| padding: 8px 12px; | |
| border-radius: var(--radius-md); | |
| font-size: 0.76rem; | |
| line-height: 1.4; | |
| word-wrap: break-word; | |
| animation: slideIn 0.25s ease-out; | |
| } | |
| .chat-bubble.ai { | |
| align-self: flex-start; | |
| background: rgba(59, 130, 246, 0.04); | |
| border: 1px solid rgba(59, 130, 246, 0.15); | |
| color: var(--text-secondary); | |
| } | |
| .chat-bubble.user { | |
| align-self: flex-end; | |
| background: var(--accent-blue-dim); | |
| border: 1px solid rgba(59, 130, 246, 0.3); | |
| color: var(--text-primary); | |
| } | |
| .chat-bubble p { | |
| margin: 0 0 6px 0; | |
| } | |
| .chat-bubble p:last-child { | |
| margin-bottom: 0; | |
| } | |
| .chat-bubble ul, .chat-bubble ol { | |
| margin: 4px 0; | |
| padding-left: 18px; | |
| } | |
| .chat-bubble li { | |
| margin-bottom: 2px; | |
| } | |
| .chat-controls { | |
| flex-shrink: 0; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| } | |
| .chat-prompt-chips { | |
| display: flex; | |
| gap: 6px; | |
| overflow-x: auto; | |
| padding-bottom: 2px; | |
| } | |
| .chat-chip { | |
| padding: 3px 10px; | |
| background: rgba(255, 255, 255, 0.03); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: 20px; | |
| font-size: 0.65rem; | |
| color: var(--text-secondary); | |
| cursor: pointer; | |
| white-space: nowrap; | |
| transition: all 0.2s ease; | |
| } | |
| .chat-chip:hover { | |
| background: var(--accent-blue-dim); | |
| border-color: var(--accent-blue); | |
| color: var(--accent-blue); | |
| } | |
| .chat-input-bar { | |
| display: flex; | |
| gap: var(--gap-sm); | |
| } | |
| .chat-input-field { | |
| flex: 1; | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-subtle); | |
| border-radius: var(--radius-sm); | |
| padding: var(--gap-sm) 12px; | |
| color: var(--text-primary); | |
| font-family: var(--font-ui); | |
| font-size: 0.78rem; | |
| outline: none; | |
| } | |
| .chat-input-field:focus { | |
| border-color: var(--accent-blue); | |
| } | |
| .chat-send-btn { | |
| background: var(--accent-blue); | |
| color: #fff; | |
| border: none; | |
| border-radius: var(--radius-sm); | |
| padding: 0 16px; | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| } | |
| .chat-send-btn:hover { | |
| background: #4f8ff7; | |
| } | |
| /* ── Mobile & Tablet Responsiveness Overhaul ──────────────── */ | |
| @media (max-width: 768px) { | |
| html, body { | |
| overflow-y: auto ; | |
| overflow-x: hidden ; | |
| height: auto ; | |
| min-height: 100vh; | |
| width: 100% ; | |
| } | |
| #app { | |
| display: flex ; | |
| flex-direction: column ; | |
| height: auto ; | |
| min-height: 100vh; | |
| width: 100% ; | |
| padding: var(--gap-xs) ; | |
| gap: var(--gap-md) ; | |
| overflow: visible ; | |
| } | |
| #app-header { | |
| flex-direction: column ; | |
| height: auto ; | |
| min-height: auto ; | |
| padding: var(--gap-md) ; | |
| gap: var(--gap-md) ; | |
| align-items: stretch ; | |
| } | |
| .header-left, .header-center, .header-right { | |
| flex-direction: column ; | |
| align-items: center ; | |
| width: 100% ; | |
| gap: var(--gap-sm) ; | |
| } | |
| .header-left { | |
| justify-content: space-between ; | |
| flex-direction: row ; | |
| } | |
| .header-right { | |
| flex-direction: row ; | |
| flex-wrap: wrap ; | |
| justify-content: center ; | |
| gap: var(--gap-sm) ; | |
| } | |
| .logo { | |
| font-size: 1.0rem ; | |
| } | |
| #symbol-selector, #timeframe-selector { | |
| display: flex ; | |
| flex-direction: row ; | |
| overflow-x: auto ; | |
| white-space: nowrap ; | |
| -webkit-overflow-scrolling: touch ; | |
| width: 100% ; | |
| padding: 6px var(--gap-sm) ; | |
| justify-content: flex-start ; | |
| gap: var(--gap-xs) ; | |
| scrollbar-width: none ; | |
| } | |
| #symbol-selector::-webkit-scrollbar, #timeframe-selector::-webkit-scrollbar { | |
| display: none ; | |
| } | |
| .main-content { | |
| display: flex ; | |
| flex-direction: column ; | |
| height: auto ; | |
| min-height: auto ; | |
| gap: var(--gap-md) ; | |
| overflow: visible ; | |
| } | |
| .chart-area { | |
| min-height: 380px ; | |
| height: 380px ; | |
| overflow: hidden ; | |
| } | |
| .right-sidebar { | |
| display: flex ; | |
| flex-direction: column ; | |
| width: 100% ; | |
| max-height: none ; | |
| height: auto ; | |
| gap: var(--gap-md) ; | |
| } | |
| .signal-panel, .trade-panel { | |
| width: 100% ; | |
| height: auto ; | |
| min-height: 250px ; | |
| } | |
| #analysis-section { | |
| height: auto ; | |
| min-height: 450px ; | |
| max-height: none ; | |
| width: 100% ; | |
| margin-top: var(--gap-md) ; | |
| } | |
| /* Disable resizer drag bar on mobile */ | |
| .resizer-bar { | |
| display: none ; | |
| } | |
| /* Make P&L grid stack vertically on mobile */ | |
| .dashboard-grid { | |
| grid-template-columns: 1fr ; | |
| gap: var(--gap-md) ; | |
| } | |
| .calendar-grid { | |
| gap: 2px ; | |
| } | |
| .cal-cell { | |
| min-height: 36px ; | |
| padding: 2px ; | |
| } | |
| .cal-date { | |
| font-size: 0.55rem ; | |
| } | |
| .cal-pnl { | |
| font-size: 0.48rem ; | |
| } | |
| .cal-trades { | |
| font-size: 0.42rem ; | |
| } | |
| } | |
| .btn-reset-account { | |
| border-color: rgba(255, 71, 87, 0.25) ; | |
| color: var(--bearish) ; | |
| font-weight: 500; | |
| } | |
| .btn-reset-account:hover { | |
| background: var(--bearish-dim) ; | |
| border-color: var(--bearish) ; | |
| color: var(--bearish) ; | |
| box-shadow: 0 0 8px var(--bearish-glow); | |
| } | |