Spaces:
Configuration error
Configuration error
Niranjan-Murugarasu024
feat: TradeSense AI Chairman Edition production release ready for Hugging Face Spaces
0125724 Download static/css/control_plane.css from BlueMen/tradesenseAi: direct link, hf CLI and curl.
- Browser
- Download file 63.5 kB
-
https://huggingface.co/spaces/BlueMen/tradesenseAi/resolve/main/static/css/control_plane.css
- Command line
-
hf download hf://spaces/BlueMen/tradesenseAi/static/css/control_plane.css
-
curl -L -o control_plane.css https://huggingface.co/spaces/BlueMen/tradesenseAi/resolve/main/static/css/control_plane.css
63.5 kB
/* ==============================================================================
TradeSense AI — Institutional Quantitative Research Operating System (Milestone 23)
Visual Identity: Deep Midnight Navy · Precision Typography · Technical Grid
Aesthetic: Bloomberg Terminal × Institutional Quantitative Research Workstation
============================================================================== */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
:root {
/* Color Tokens - Modern Dark Obsidian Palette */
--bg-deep: #070b14;
--bg-surface: #0c1322;
--bg-surface-raised: #121a2d;
--bg-surface-elevated: #17223b;
--bg-surface-hover: #1e2c4c;
--bg-surface-active: #25375d;
/* Borders & Dividers */
--border-subtle: rgba(255, 255, 255, 0.07);
--border-medium: rgba(255, 255, 255, 0.13);
--border-strong: rgba(255, 255, 255, 0.22);
--border-focus: #38bdf8;
/* Typography */
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--font-mono: 'JetBrains Mono', monospace;
/* Text Colors */
--text-primary: #f8fafc;
--text-secondary: #94a3b8;
--text-muted: #64748b;
--text-dim: #475569;
/* Institutional Accent System */
--accent-cyan: #38bdf8;
--accent-cyan-bg: rgba(56, 189, 248, 0.12);
--accent-blue: #3b82f6;
--accent-blue-bg: rgba(59, 130, 246, 0.14);
--accent-indigo: #6366f1;
--accent-emerald: #10b981;
--accent-emerald-bg: rgba(16, 185, 129, 0.12);
--accent-amber: #f59e0b;
--accent-rose: #f43f5e;
--accent-purple: #a855f7;
/* Status Badges */
--badge-verified-bg: rgba(16, 185, 129, 0.14);
--badge-verified-text: #34d399;
--badge-running-bg: rgba(6, 182, 212, 0.14);
--badge-running-text: #38bdf8;
--badge-review-bg: rgba(245, 158, 11, 0.14);
--badge-review-text: #fbbf24;
--badge-approved-bg: rgba(59, 130, 246, 0.14);
--badge-approved-text: #60a5fa;
--badge-rejected-bg: rgba(244, 63, 94, 0.14);
--badge-rejected-text: #fb7185;
--badge-archived-bg: rgba(148, 163, 184, 0.14);
--badge-archived-text: #94a3b8;
--badge-locked-bg: rgba(168, 85, 247, 0.16);
--badge-locked-text: #c084fc;
/* Autocomplete & Dropdown Tokens */
--bg-autocomplete: #0c1322;
--border-autocomplete: rgba(56, 189, 248, 0.4);
--shadow-autocomplete: 0 10px 30px rgba(0, 0, 0, 0.7), 0 0 15px rgba(6, 182, 212, 0.2);
--item-hover-autocomplete: rgba(56, 189, 248, 0.12);
/* Card Selection & Active Highlight Tokens */
--bg-card-selected: linear-gradient(135deg, rgba(30, 41, 59, 0.95), rgba(15, 23, 42, 0.95));
--border-card-selected: var(--accent-cyan);
--glow-card-selected: 0 0 16px rgba(6, 182, 212, 0.25);
--bg-row-selected: rgba(56, 189, 248, 0.12);
/* Pipeline & Ticker Strip Tokens */
--workflow-card-bg: linear-gradient(135deg, rgba(15, 23, 42, 0.95), rgba(30, 41, 59, 0.85));
--workflow-card-border: rgba(56, 189, 248, 0.35);
--ticker-tape-bg: linear-gradient(90deg, #080d1a 0%, #0c1427 50%, #080d1a 100%);
--ticker-tape-border: var(--border-subtle);
/* Shadows & Illumination */
--glow-subtle: 0 0 25px rgba(56, 189, 248, 0.08);
--glow-verified: 0 0 30px rgba(16, 185, 129, 0.12);
--shadow-card: 0 4px 18px rgba(0, 0, 0, 0.35);
--shadow-hover: 0 8px 30px rgba(0, 0, 0, 0.5);
--shadow-modal: 0 25px 60px rgba(0, 0, 0, 0.85);
}
/* ==============================================================================
Light Theme System Override
============================================================================== */
[data-theme="light"],
body.light-theme {
--bg-deep: #f8fafc;
--bg-surface: #ffffff;
--bg-surface-raised: #f1f5f9;
--bg-surface-elevated: #e2e8f0;
--bg-surface-hover: #e8edf5;
--bg-surface-active: #dce4ef;
--border-subtle: rgba(15, 23, 42, 0.08);
--border-medium: rgba(15, 23, 42, 0.14);
--border-strong: rgba(15, 23, 42, 0.25);
--border-focus: #2563eb;
--text-primary: #0f172a;
--text-secondary: #334155;
--text-muted: #64748b;
--text-dim: #94a3b8;
--accent-cyan: #0284c7;
--accent-cyan-bg: rgba(2, 132, 199, 0.10);
--accent-blue: #2563eb;
--accent-blue-bg: rgba(37, 99, 235, 0.10);
--accent-indigo: #4f46e5;
--accent-emerald: #059669;
--accent-emerald-bg: rgba(5, 150, 105, 0.10);
--accent-amber: #d97706;
--accent-rose: #e11d48;
--accent-purple: #9333ea;
--badge-verified-bg: rgba(5, 150, 105, 0.12);
--badge-verified-text: #065f46;
--badge-running-bg: rgba(2, 132, 199, 0.12);
--badge-running-text: #0369a1;
--badge-review-bg: rgba(217, 119, 6, 0.12);
--badge-review-text: #92400e;
--badge-approved-bg: rgba(37, 99, 235, 0.12);
--badge-approved-text: #1d4ed8;
--badge-rejected-bg: rgba(225, 29, 72, 0.12);
--badge-rejected-text: #9f1239;
--badge-archived-bg: rgba(100, 116, 139, 0.12);
--badge-archived-text: #475569;
--badge-locked-bg: rgba(147, 51, 234, 0.12);
--badge-locked-text: #6b21a8;
/* Autocomplete & Dropdown Tokens */
--bg-autocomplete: #ffffff;
--border-autocomplete: #cbd5e1;
--shadow-autocomplete: 0 10px 25px rgba(15, 23, 42, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.05);
--item-hover-autocomplete: #f0f7ff;
/* Card Selection & Active Highlight Tokens */
--bg-card-selected: #eff6ff;
--border-card-selected: #2563eb;
--glow-card-selected: 0 0 0 2px #2563eb, 0 4px 16px rgba(37, 99, 235, 0.12);
--bg-row-selected: #e0f2fe;
/* Pipeline & Ticker Strip Tokens */
--workflow-card-bg: linear-gradient(135deg, #ffffff, #f8fafc);
--workflow-card-border: #cbd5e1;
--ticker-tape-bg: linear-gradient(90deg, #f8fafc 0%, #edf2f7 50%, #f8fafc 100%);
--ticker-tape-border: #e2e8f0;
--shadow-card: 0 1px 3px rgba(0, 0, 0, 0.04), 0 6px 16px rgba(0, 0, 0, 0.03);
--shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.08), 0 12px 28px rgba(0, 0, 0, 0.05);
--shadow-modal: 0 20px 50px rgba(15, 23, 42, 0.2);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
*:focus-visible {
outline: 2px solid var(--accent-blue);
outline-offset: 2px;
}
body {
background-color: var(--bg-deep);
background-image:
linear-gradient(rgba(255, 255, 255, 0.015) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.015) 1px, transparent 1px);
background-size: 32px 32px;
color: var(--text-primary);
font-family: var(--font-sans);
font-size: 13px;
line-height: 1.5;
overflow: hidden;
height: 100vh;
width: 100vw;
-webkit-font-smoothing: antialiased;
transition: background-color 0.25s ease, color 0.25s ease;
}
body.light-theme {
background-image:
linear-gradient(rgba(0, 0, 0, 0.02) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 0, 0, 0.02) 1px, transparent 1px);
}
/* Minimalist Modern Scrollbars */
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: var(--border-medium);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--border-strong);
}
/* ==============================================================================
Application Shell: Layout Architecture
============================================================================== */
.app-shell {
display: flex;
flex-direction: column;
height: 100vh;
width: 100vw;
overflow: hidden;
}
/* Top System Bar (Master Institutional Header: 48px) */
.system-bar {
display: flex;
justify-content: space-between;
align-items: center;
height: 48px;
background-color: var(--bg-surface);
border-bottom: 1px solid var(--border-subtle);
padding: 0 16px;
user-select: none;
z-index: 50;
backdrop-filter: blur(12px);
transition: background-color 0.25s ease, border-color 0.25s ease;
flex-shrink: 0;
gap: 12px;
}
.brand-section {
display: flex;
align-items: center;
gap: 10px;
flex-shrink: 0;
}
/* Integrated Header Ticker Strip */
.header-ticker-strip {
display: flex;
align-items: center;
gap: 12px;
flex: 1;
max-width: calc(100vw - 640px);
margin: 0 12px;
overflow: hidden;
height: 100%;
}
.btn-diagnostics-toggle {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 5px 10px;
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
border-radius: 9999px;
color: var(--accent-cyan);
font-family: var(--font-mono);
font-size: 10px;
font-weight: 700;
cursor: pointer;
letter-spacing: 0.04em;
transition: all 0.2s ease;
user-select: none;
}
.btn-diagnostics-toggle:hover {
background-color: var(--bg-surface-hover);
border-color: var(--border-focus);
color: var(--text-primary);
box-shadow: 0 0 10px rgba(56, 189, 248, 0.2);
}
.brand-logo {
font-size: 15px;
font-weight: 800;
letter-spacing: 0.06em;
background: linear-gradient(135deg, var(--accent-cyan), var(--accent-blue));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-transform: uppercase;
}
.brand-tag {
font-family: var(--font-mono);
font-size: 10px;
padding: 3px 8px;
border-radius: 4px;
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
color: var(--text-secondary);
letter-spacing: 0.05em;
}
.system-status-indicator {
display: flex;
align-items: center;
gap: 6px;
font-size: 11px;
font-family: var(--font-mono);
color: var(--accent-emerald);
}
.pulse-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background-color: var(--accent-emerald);
box-shadow: 0 0 8px var(--accent-emerald);
animation: pulse 2s infinite ease-in-out;
}
@keyframes pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.4; transform: scale(0.85); }
}
/* Experience Mode Switcher (Segmented Pill) */
.mode-switch-wrapper {
display: inline-flex;
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
border-radius: 9999px;
padding: 3px;
gap: 3px;
}
.mode-toggle-btn {
display: flex;
align-items: center;
gap: 6px;
padding: 5px 14px;
border-radius: 9999px;
border: none;
background: transparent;
color: var(--text-secondary);
font-size: 11px;
font-weight: 600;
letter-spacing: 0.02em;
cursor: pointer;
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.mode-toggle-btn:hover {
color: var(--text-primary);
}
.mode-toggle-btn.active {
background-color: var(--accent-blue);
color: #ffffff;
box-shadow: 0 2px 8px rgba(37, 99, 235, 0.35);
}
.system-context {
display: flex;
align-items: center;
gap: 12px;
}
.context-pill {
display: flex;
align-items: center;
gap: 6px;
font-size: 12px;
padding: 4px 10px;
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
border-radius: 9999px;
}
.context-label {
color: var(--text-muted);
font-size: 11px;
}
.context-val {
color: var(--text-primary);
font-family: var(--font-mono);
font-weight: 500;
}
/* Theme Toggle Button */
.theme-toggle-btn {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px 12px;
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
border-radius: 9999px;
color: var(--text-primary);
font-family: var(--font-sans);
font-size: 11px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
user-select: none;
}
.theme-toggle-btn:hover {
background-color: var(--bg-surface-hover);
border-color: var(--border-medium);
transform: translateY(-1px);
}
.theme-icon {
font-size: 13px;
line-height: 1;
}
/* Workspace Container (Sidebar + Content) */
.workspace-container {
display: flex;
flex: 1;
min-height: 0;
overflow: hidden;
position: relative;
}
/* 4-Plane Sidebar Navigation */
.dual-plane-sidebar {
width: 240px;
background-color: var(--bg-surface);
border-right: 1px solid var(--border-subtle);
display: flex;
flex-direction: column;
padding: 16px 10px;
overflow-y: auto;
user-select: none;
flex-shrink: 0;
transition: background-color 0.25s ease, border-color 0.25s ease;
}
.nav-plane-heading {
font-family: var(--font-sans);
font-size: 10px;
font-weight: 700;
letter-spacing: 0.08em;
color: var(--text-muted);
padding: 14px 12px 6px;
text-transform: uppercase;
}
.nav-plane-heading:first-child {
padding-top: 4px;
}
.nav-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 12px;
color: var(--text-secondary);
font-size: 12.5px;
font-weight: 500;
cursor: pointer;
transition: all 0.15s ease;
border-radius: 8px;
margin-bottom: 2px;
}
.nav-item:hover {
background-color: var(--bg-surface-hover);
color: var(--text-primary);
transform: translateX(2px);
}
.nav-item.active {
background-color: var(--bg-surface-raised);
color: var(--accent-blue);
font-weight: 600;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}
.nav-badge {
font-family: var(--font-mono);
font-size: 9px;
padding: 1px 6px;
border-radius: 4px;
background-color: var(--bg-surface);
border: 1px solid var(--border-subtle);
}
/* Main Content Layout (Workflow Stepper + Dynamic View) */
.main-content-layout {
flex: 1;
display: flex;
flex-direction: column;
min-width: 0;
min-height: 0;
overflow: hidden;
}
.view-content-area {
flex: 1;
padding: 24px 32px;
overflow-y: auto;
background-color: transparent;
}
/* Bottom Telemetry Bar (Slim 22px Desktop Micro-Strip, Hidden on Mobile) */
.telemetry-footer-bar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
height: 22px;
background-color: var(--bg-surface);
border-top: 1px solid var(--border-subtle);
padding: 0 16px;
font-family: var(--font-mono);
font-size: 10px;
color: var(--text-muted);
user-select: none;
flex-shrink: 0;
cursor: pointer;
transition: background-color 0.2s ease;
}
.telemetry-footer-bar:hover {
background-color: var(--bg-surface-hover);
}
.telemetry-item {
display: flex;
align-items: center;
gap: 5px;
}
.telemetry-label {
color: var(--text-muted);
font-size: 9.5px;
}
.telemetry-val {
color: var(--text-primary);
font-variant-numeric: tabular-nums;
}
.telemetry-action-btn {
display: inline-flex;
align-items: center;
gap: 4px;
}
/* ==============================================================================
Institutional Workflow Stepper & Active Context Rail (42px)
============================================================================== */
.workflow-stepper-container {
background: var(--bg-surface);
border-bottom: 1px solid var(--border-subtle);
padding: 4px 16px;
min-height: 42px;
display: flex;
align-items: center;
justify-content: space-between;
flex-shrink: 0;
z-index: 20;
transition: background-color 0.25s ease, border-color 0.25s ease;
}
.stepper-composite-layout {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
gap: 12px;
}
/* Active Instrument Context Surface */
.terminal-instrument-context {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
flex-shrink: 1;
}
.context-asset-identity {
display: flex;
align-items: center;
gap: 6px;
min-width: 0;
}
.stepper-asset-tag {
font-family: var(--font-mono);
font-size: 13px;
font-weight: 800;
color: var(--accent-cyan);
letter-spacing: 0.04em;
}
.stepper-asset-tag.unselected {
color: var(--text-muted);
font-style: italic;
font-weight: 500;
font-size: 11px;
}
.context-exchange-pill {
font-family: var(--font-mono);
font-size: 9px;
font-weight: 700;
padding: 2px 6px;
border-radius: 4px;
background: rgba(56, 189, 248, 0.12);
border: 1px solid rgba(56, 189, 248, 0.25);
color: var(--accent-cyan);
white-space: nowrap;
}
.context-company-name {
font-size: 11px;
color: var(--text-secondary);
max-width: 120px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.context-hint-text {
font-size: 11px;
color: var(--text-muted);
}
.context-asset-quote {
display: flex;
align-items: center;
gap: 8px;
margin-left: 10px;
padding-left: 10px;
border-left: 1px solid var(--border-subtle);
}
.context-price-val {
font-family: var(--font-mono);
font-size: 13.5px;
font-weight: 800;
color: var(--text-primary);
font-variant-numeric: tabular-nums;
letter-spacing: -0.01em;
}
.context-chg-pill {
font-family: var(--font-mono);
font-size: 10.5px;
font-weight: 700;
padding: 1px 6px;
border-radius: 4px;
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
.context-chg-pill.positive {
color: #34d399;
background: rgba(16, 185, 129, 0.14);
}
.context-chg-pill.negative {
color: #fb7185;
background: rgba(244, 63, 94, 0.14);
}
.context-market-status {
font-family: var(--font-mono);
font-size: 9px;
font-weight: 700;
padding: 2px 6px;
border-radius: 4px;
white-space: nowrap;
}
.context-market-status.live {
color: #34d399;
background: rgba(16, 185, 129, 0.12);
border: 1px solid rgba(16, 185, 129, 0.3);
}
.context-market-status.closed {
color: var(--text-muted);
background: rgba(255, 255, 255, 0.05);
border: 1px solid var(--border-subtle);
}
.context-action-btn {
font-size: 10px;
font-weight: 800;
padding: 2px 8px;
border-radius: 4px;
}
/* 5-Phase Workflow Stepper Rail */
.stepper-pipeline {
display: flex;
align-items: center;
gap: 4px;
flex-shrink: 0;
}
.step-node {
display: flex;
align-items: center;
gap: 6px;
padding: 4px 10px;
border-radius: 6px;
font-size: 11.5px;
font-weight: 600;
color: var(--text-secondary);
cursor: pointer;
transition: all 0.15s ease;
border: 1px solid transparent;
user-select: none;
white-space: nowrap;
}
.step-node:hover {
color: var(--text-primary);
background: var(--bg-surface-hover);
}
.step-node.active {
color: #ffffff;
background: var(--accent-blue);
box-shadow: 0 2px 8px rgba(37, 99, 235, 0.35);
}
.step-node.completed {
color: var(--text-primary);
}
.step-node.active .step-num {
background: rgba(255, 255, 255, 0.25);
color: #ffffff;
}
.step-node.completed .step-num {
background: var(--accent-emerald);
color: #ffffff;
}
.step-num {
width: 18px;
height: 18px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 10px;
font-family: var(--font-mono);
font-weight: 700;
background: var(--bg-surface-raised);
color: var(--text-secondary);
}
.step-arrow {
color: var(--text-dim);
font-size: 9px;
opacity: 0.5;
margin: 0 1px;
}
/* ==============================================================================
Component Design System: Cards, Grids, Tables, Metrics
============================================================================== */
.page-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 24px;
gap: 16px;
}
.page-title {
font-size: 22px;
font-weight: 700;
color: var(--text-primary);
letter-spacing: -0.02em;
}
.page-subtitle {
font-size: 13px;
color: var(--text-secondary);
margin-top: 5px;
line-height: 1.5;
}
.card {
background-color: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: 12px;
padding: 24px;
margin-bottom: 24px;
box-shadow: var(--shadow-card);
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.card:hover {
border-color: var(--border-medium);
}
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 18px;
}
.card-title {
font-size: 15px;
font-weight: 700;
color: var(--text-primary);
letter-spacing: 0.01em;
}
/* Grid Layouts */
.grid-cols-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 18px; }
.grid-cols-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.grid-cols-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
/* Metric Display Boxes */
.metric-box {
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
border-radius: 10px;
padding: 18px 20px;
transition: all 0.2s ease;
}
.metric-box:hover {
border-color: var(--border-medium);
transform: translateY(-1px);
}
.metric-label {
font-size: 11px;
font-family: var(--font-sans);
font-weight: 600;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 6px;
}
.metric-val {
font-size: 24px;
font-family: var(--font-mono);
font-weight: 700;
color: var(--text-primary);
}
.metric-subtext {
font-size: 11.5px;
color: var(--text-secondary);
margin-top: 5px;
}
/* Status Badges */
.badge {
display: inline-flex;
align-items: center;
padding: 4px 10px;
border-radius: 9999px;
font-family: var(--font-sans);
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.badge-verified { background-color: var(--badge-verified-bg); color: var(--badge-verified-text); border: 1px solid rgba(16, 185, 129, 0.3); }
.badge-running { background-color: var(--badge-running-bg); color: var(--badge-running-text); border: 1px solid rgba(6, 182, 212, 0.3); }
.badge-review { background-color: var(--badge-review-bg); color: var(--badge-review-text); border: 1px solid rgba(245, 158, 11, 0.3); }
.badge-approved { background-color: var(--badge-approved-bg); color: var(--badge-approved-text); border: 1px solid rgba(59, 130, 246, 0.3); }
.badge-rejected { background-color: var(--badge-rejected-bg); color: var(--badge-rejected-text); border: 1px solid rgba(244, 63, 94, 0.3); }
.badge-archived { background-color: var(--badge-archived-bg); color: var(--badge-archived-text); border: 1px solid rgba(148, 163, 184, 0.3); }
.badge-locked { background-color: var(--badge-locked-bg); color: var(--badge-locked-text); border: 1px solid rgba(168, 85, 247, 0.3); }
/* Buttons & Inputs */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
padding: 8px 16px;
border-radius: 8px;
font-size: 12px;
font-weight: 600;
letter-spacing: 0.02em;
cursor: pointer;
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
border: none;
font-family: var(--font-sans);
}
.btn:hover {
transform: translateY(-1px);
}
.btn-primary { background-color: var(--accent-blue); color: #ffffff; box-shadow: 0 2px 8px rgba(37, 99, 235, 0.3); }
.btn-primary:hover { background-color: #2563eb; box-shadow: 0 4px 12px rgba(37, 99, 235, 0.45); }
.btn-secondary { background-color: var(--bg-surface-raised); color: var(--text-primary); border: 1px solid var(--border-medium); }
.btn-secondary:hover { background-color: var(--bg-surface-hover); border-color: var(--border-strong); }
.btn-success { background-color: var(--accent-emerald); color: #ffffff; box-shadow: 0 2px 8px rgba(16, 185, 129, 0.3); }
.btn-success:hover { background-color: #059669; }
.btn-danger { background-color: var(--accent-rose); color: #ffffff; }
.btn-danger:hover { background-color: #e11d48; }
.btn-copy {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 2px 6px;
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
border-radius: 3px;
font-family: var(--font-mono);
font-size: 10px;
color: var(--text-secondary);
cursor: pointer;
transition: all 0.15s ease;
}
.btn-copy:hover {
background-color: var(--bg-surface-hover);
color: var(--text-primary);
border-color: var(--border-medium);
}
.btn-auth-action {
padding: 4px 12px;
font-size: 11px;
font-weight: 600;
font-family: var(--font-mono);
background-color: rgba(59, 130, 246, 0.15);
border: 1px solid var(--accent-blue);
color: #60a5fa;
border-radius: 4px;
cursor: pointer;
}
.form-group { margin-bottom: 16px; }
.form-label {
display: block;
font-size: 11px;
font-weight: 500;
color: var(--text-secondary);
margin-bottom: 6px;
}
.form-helper {
font-size: 11px;
color: var(--text-muted);
margin-top: 4px;
}
.form-control {
width: 100%;
padding: 8px 12px;
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
border-radius: 4px;
color: var(--text-primary);
font-size: 12px;
font-family: var(--font-sans);
}
.form-control:focus {
border-color: var(--accent-blue);
outline: none;
}
/* Tables */
.data-table-wrapper {
overflow-x: auto;
border: 1px solid var(--border-subtle);
border-radius: 4px;
}
.data-table {
width: 100%;
border-collapse: collapse;
text-align: left;
}
.data-table th {
background-color: var(--bg-surface-raised);
padding: 10px 14px;
font-family: var(--font-mono);
font-size: 11px;
font-weight: 600;
color: var(--text-muted);
text-transform: uppercase;
border-bottom: 1px solid var(--border-subtle);
}
.data-table td {
padding: 12px 14px;
border-bottom: 1px solid var(--border-subtle);
color: var(--text-secondary);
font-size: 12px;
}
.data-table tr:hover td {
background-color: var(--bg-surface-hover);
color: var(--text-primary);
}
/* Tabs */
.tab-navigation {
display: flex;
gap: 8px;
border-bottom: 1px solid var(--border-subtle);
margin-bottom: 20px;
}
.tab-btn {
padding: 8px 16px;
background: transparent;
border: none;
border-bottom: 2px solid transparent;
color: var(--text-muted);
font-size: 13px;
font-weight: 500;
cursor: pointer;
}
.tab-btn.active {
color: var(--text-primary);
border-bottom-color: var(--accent-blue);
}
/* Modals */
.modal-backdrop {
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
background-color: rgba(5, 8, 17, 0.85);
backdrop-filter: blur(4px);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.modal-card {
background-color: var(--bg-surface);
border: 1px solid var(--border-medium);
border-radius: 6px;
padding: 24px;
width: 520px;
max-width: 90vw;
box-shadow: var(--shadow-modal);
}
/* Code & Output Boxes */
.code-box {
background-color: var(--bg-deep);
border: 1px solid var(--border-subtle);
border-radius: 4px;
padding: 14px;
font-family: var(--font-mono);
font-size: 11px;
color: var(--text-secondary);
overflow-x: auto;
max-height: 400px;
}
/* Wizard Stepper */
.wizard-stepper {
display: flex;
justify-content: space-between;
margin-bottom: 24px;
padding-bottom: 16px;
border-bottom: 1px solid var(--border-subtle);
}
.step-item {
display: flex;
align-items: center;
gap: 8px;
font-size: 12px;
color: var(--text-muted);
}
.step-item.active {
color: var(--accent-blue);
font-weight: 600;
}
.step-item.complete {
color: var(--accent-emerald);
}
.step-number {
width: 20px;
height: 20px;
border-radius: 50%;
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-mono);
font-size: 10px;
}
.step-item.active .step-number {
background-color: var(--accent-blue);
border-color: var(--accent-blue);
color: #fff;
}
.step-item.complete .step-number {
background-color: var(--accent-emerald);
border-color: var(--accent-emerald);
color: #fff;
}
/* Filter Bar */
.filter-bar {
display: flex;
gap: 12px;
margin-bottom: 16px;
align-items: center;
flex-wrap: wrap;
}
/* Tooltip Hint */
.tooltip-hint {
position: relative;
display: inline-flex;
align-items: center;
cursor: help;
color: var(--text-muted);
margin-left: 4px;
}
/* Toast Notification */
.toast-container {
position: fixed;
bottom: 40px;
right: 24px;
z-index: 2000;
display: flex;
flex-direction: column;
gap: 8px;
pointer-events: none;
}
.toast-message {
background-color: var(--bg-surface-elevated);
border: 1px solid var(--accent-blue);
color: var(--text-primary);
padding: 10px 16px;
border-radius: 4px;
font-size: 12px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.6);
animation: slideUp 0.2s ease-out;
pointer-events: auto;
}
@keyframes slideUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
/* ==============================================================================
Decision Center Specific Components
============================================================================== */
.decision-hero-card {
background: linear-gradient(180deg, var(--bg-surface-raised) 0%, var(--bg-surface) 100%);
border: 1px solid var(--border-medium);
border-radius: 6px;
padding: 24px;
margin-bottom: 24px;
box-shadow: var(--shadow-card);
}
.decision-hero-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 20px;
flex-wrap: wrap;
gap: 16px;
}
.decision-asset-title {
font-size: 26px;
font-weight: 700;
letter-spacing: -0.02em;
color: var(--text-primary);
display: flex;
align-items: center;
gap: 12px;
}
.decision-horizon-badge {
font-family: var(--font-mono);
font-size: 12px;
color: var(--text-secondary);
font-weight: 500;
}
.decision-outlook-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 14px;
border-radius: 20px;
font-size: 13px;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.decision-key-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
padding: 16px 0;
border-top: 1px solid var(--border-subtle);
border-bottom: 1px solid var(--border-subtle);
margin-bottom: 20px;
}
.decision-stat-block {
display: flex;
flex-direction: column;
gap: 4px;
}
.decision-stat-label {
font-size: 11px;
color: var(--text-muted);
text-transform: uppercase;
font-weight: 600;
letter-spacing: 0.05em;
}
.decision-stat-val {
font-size: 20px;
font-weight: 700;
font-family: var(--font-mono);
color: var(--text-primary);
}
.decision-stat-sub {
font-size: 11px;
color: var(--text-secondary);
}
.decision-range-bracket {
background-color: var(--bg-surface-elevated);
border: 1px solid var(--border-subtle);
border-radius: 4px;
padding: 10px 14px;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
}
.decision-driver-card {
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
border-radius: 4px;
padding: 14px;
display: flex;
flex-direction: column;
gap: 6px;
}
.decision-driver-head {
display: flex;
justify-content: space-between;
align-items: center;
}
.decision-invalidation-item {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 12px 14px;
background-color: rgba(244, 63, 94, 0.04);
border: 1px solid rgba(244, 63, 94, 0.18);
border-radius: 4px;
margin-bottom: 10px;
}
.decision-invalidation-icon {
color: var(--accent-rose);
font-size: 14px;
font-weight: bold;
line-height: 1.2;
}
.decision-accordion {
border: 1px solid var(--border-subtle);
border-radius: 4px;
background-color: var(--bg-surface);
margin-top: 14px;
overflow: hidden;
}
.decision-accordion summary {
padding: 12px 16px;
font-weight: 600;
font-size: 12px;
cursor: pointer;
background-color: var(--bg-surface-raised);
color: var(--text-secondary);
user-select: none;
display: flex;
align-items: center;
justify-content: space-between;
}
.decision-accordion summary:hover {
color: var(--text-primary);
}
.decision-accordion-content {
padding: 16px;
border-top: 1px solid var(--border-subtle);
}
.decision-provenance-box {
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
border-radius: 4px;
padding: 12px 16px;
font-size: 11px;
color: var(--text-muted);
font-family: var(--font-mono);
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 10px;
}
/* Responsive Breakpoints */
@media (max-width: 1280px) {
.grid-cols-4 { grid-template-columns: repeat(2, 1fr); }
.grid-cols-3 { grid-template-columns: repeat(2, 1fr); }
.decision-key-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 1024px) {
.dual-plane-sidebar { width: 210px; }
.view-content-area { padding: 18px 20px; }
}
@media (max-width: 768px) {
.workspace-container { flex-direction: column; }
.dual-plane-sidebar { width: 100%; height: auto; border-right: none; border-bottom: 1px solid var(--border-subtle); flex-direction: row; overflow-x: auto; padding: 8px 12px; }
.nav-plane-heading { display: none; }
.grid-cols-2, .grid-cols-3, .grid-cols-4 { grid-template-columns: 1fr; }
.decision-key-grid { grid-template-columns: 1fr; }
.decision-hero-header { flex-direction: column; }
}
/* ==============================================================================
Experience Mode Switcher (Retail Investor vs Institutional Quant)
============================================================================== */
.mode-switch-wrapper {
display: inline-flex;
align-items: center;
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
border-radius: 20px;
padding: 3px;
gap: 3px;
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.4);
}
.mode-toggle-btn {
background: transparent;
border: none;
color: var(--text-secondary);
font-family: var(--font-sans);
font-size: 11px;
font-weight: 600;
letter-spacing: 0.03em;
padding: 5px 14px;
border-radius: 16px;
cursor: pointer;
transition: all 0.2s ease;
display: inline-flex;
align-items: center;
gap: 6px;
white-space: nowrap;
}
.mode-toggle-btn:hover {
color: var(--text-primary);
background-color: rgba(255, 255, 255, 0.05);
}
.mode-toggle-btn.active[data-mode="retail"] {
background: linear-gradient(135deg, #059669 0%, #10b981 100%);
color: #ffffff;
box-shadow: 0 2px 10px rgba(16, 185, 129, 0.35);
}
.mode-toggle-btn.active[data-mode="quant"] {
background: linear-gradient(135deg, #2563eb 0%, #3b82f6 100%);
color: #ffffff;
box-shadow: 0 2px 10px rgba(59, 130, 246, 0.35);
}
.mode-toggle-btn.active[data-mode="executive"] {
background: linear-gradient(135deg, #7c3aed 0%, #8b5cf6 100%);
color: #ffffff;
box-shadow: 0 2px 10px rgba(124, 58, 237, 0.35);
}
/* ==============================================================================
Live Indian Market Ticker Tape (Sticky)
============================================================================== */
.live-ticker-tape {
width: 100%;
background: var(--ticker-tape-bg);
border-bottom: 1px solid var(--ticker-tape-border);
height: 34px;
flex-shrink: 0;
display: flex;
align-items: center;
overflow: hidden;
z-index: 90;
}
.ticker-tape-container {
display: flex;
align-items: center;
width: 100%;
height: 100%;
padding: 0 16px;
gap: 16px;
}
.ticker-session-status {
display: flex;
align-items: center;
gap: 6px;
font-size: 10px;
font-weight: 700;
letter-spacing: 0.06em;
color: var(--accent-emerald);
padding: 2px 8px;
background-color: rgba(16, 185, 129, 0.12);
border: 1px solid rgba(16, 185, 129, 0.3);
border-radius: 10px;
white-space: nowrap;
}
.ticker-session-status.closed {
color: var(--accent-amber);
background-color: rgba(245, 158, 11, 0.12);
border-color: rgba(245, 158, 11, 0.3);
}
.ticker-live-dot {
width: 6px;
height: 6px;
background-color: var(--accent-emerald);
border-radius: 50%;
box-shadow: 0 0 6px var(--accent-emerald);
animation: pulse-ticker 1.8s infinite;
}
.ticker-session-status.closed .ticker-live-dot {
background-color: var(--accent-amber);
box-shadow: 0 0 6px var(--accent-amber);
}
@keyframes pulse-ticker {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.4; transform: scale(0.85); }
}
.ticker-items-track {
display: flex;
align-items: center;
gap: 18px;
flex: 1;
overflow-x: auto;
scrollbar-width: none;
}
.ticker-items-track::-webkit-scrollbar { display: none; }
.ticker-pill {
display: inline-flex;
align-items: baseline;
gap: 8px;
font-family: var(--font-mono);
font-size: 11px;
white-space: nowrap;
}
.ticker-pill .ticker-name {
font-family: var(--font-sans);
font-weight: 600;
color: var(--text-secondary);
font-size: 11px;
}
.ticker-pill .ticker-price {
font-weight: 700;
color: var(--text-primary);
}
.ticker-pill .ticker-chg {
font-size: 10px;
font-weight: 600;
padding: 1px 5px;
border-radius: 3px;
}
.ticker-pill .ticker-chg.positive {
color: #34d399;
background-color: rgba(16, 185, 129, 0.14);
}
.ticker-pill .ticker-chg.negative {
color: #fb7185;
background-color: rgba(244, 63, 94, 0.14);
}
.ticker-pill.loading em {
font-style: italic;
color: var(--text-muted);
font-size: 10px;
}
.ticker-exchange-tag {
font-size: 10px;
font-weight: 700;
color: var(--accent-cyan);
background-color: rgba(6, 182, 212, 0.12);
border: 1px solid rgba(6, 182, 212, 0.25);
padding: 2px 8px;
border-radius: 4px;
white-space: nowrap;
}
/* ==============================================================================
Retail Experience Components (Simplified, Jargon-Free, Protection-First)
============================================================================== */
.retail-hero-container {
display: flex;
flex-direction: column;
gap: 20px;
margin-bottom: 24px;
}
.retail-action-card {
background: linear-gradient(135deg, rgba(15, 23, 42, 0.95) 0%, rgba(21, 32, 59, 0.95) 100%);
border: 1px solid var(--border-medium);
border-radius: 12px;
padding: 24px 28px;
position: relative;
overflow: hidden;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
}
.retail-action-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, var(--accent-emerald), var(--accent-cyan));
}
.retail-action-card.caution::before {
background: linear-gradient(90deg, var(--accent-amber), var(--accent-rose));
}
.retail-action-card.danger::before {
background: linear-gradient(90deg, var(--accent-rose), #991b1b);
}
.retail-action-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-wrap: wrap;
gap: 16px;
margin-bottom: 20px;
}
.retail-stock-badge-group {
display: flex;
align-items: center;
gap: 12px;
}
.retail-stock-symbol {
font-size: 26px;
font-weight: 800;
letter-spacing: -0.02em;
color: var(--text-primary);
}
.retail-exchange-tag {
font-size: 11px;
font-weight: 700;
padding: 3px 8px;
border-radius: 4px;
background-color: rgba(6, 182, 212, 0.15);
border: 1px solid var(--accent-cyan);
color: var(--accent-cyan);
}
.retail-action-verdict {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 18px;
border-radius: 8px;
font-size: 14px;
font-weight: 800;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.retail-action-verdict.favorable {
background: linear-gradient(135deg, rgba(16, 185, 129, 0.25) 0%, rgba(5, 150, 105, 0.25) 100%);
border: 1px solid var(--accent-emerald);
color: #34d399;
box-shadow: 0 0 20px rgba(16, 185, 129, 0.2);
}
.retail-action-verdict.neutral {
background: rgba(245, 158, 11, 0.18);
border: 1px solid var(--accent-amber);
color: #fbbf24;
}
.retail-action-verdict.caution {
background: rgba(244, 63, 94, 0.18);
border: 1px solid var(--accent-rose);
color: #fb7185;
}
.retail-price-strip {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 16px;
background-color: rgba(0, 0, 0, 0.25);
border: 1px solid var(--border-subtle);
border-radius: 8px;
padding: 18px 20px;
margin-bottom: 20px;
}
.retail-price-item {
display: flex;
flex-direction: column;
gap: 4px;
}
.retail-price-label {
font-size: 11px;
color: var(--text-secondary);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.retail-price-val {
font-family: var(--font-mono);
font-size: 22px;
font-weight: 700;
color: var(--text-primary);
}
.retail-price-sub {
font-size: 11px;
font-weight: 600;
}
/* 3 Pillars of Retail Protection */
.retail-pillars-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 18px;
margin-bottom: 24px;
}
@media (max-width: 900px) {
.retail-pillars-grid { grid-template-columns: 1fr; }
}
.retail-pillar-card {
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
border-radius: 10px;
padding: 20px;
display: flex;
flex-direction: column;
gap: 12px;
position: relative;
transition: transform 0.2s, border-color 0.2s;
}
.retail-pillar-card:hover {
transform: translateY(-2px);
border-color: var(--border-strong);
}
.retail-pillar-card.stoploss {
border-left: 4px solid var(--accent-rose);
}
.retail-pillar-card.safezone {
border-left: 4px solid var(--accent-cyan);
}
.retail-pillar-card.reliability {
border-left: 4px solid var(--accent-purple);
}
.retail-pillar-header {
display: flex;
align-items: center;
justify-content: space-between;
}
.retail-pillar-title {
font-size: 12px;
font-weight: 700;
color: var(--text-secondary);
letter-spacing: 0.05em;
text-transform: uppercase;
display: flex;
align-items: center;
gap: 6px;
}
.retail-pillar-val {
font-family: var(--font-mono);
font-size: 24px;
font-weight: 700;
color: var(--text-primary);
}
.retail-pillar-desc {
font-size: 12px;
color: var(--text-secondary);
line-height: 1.5;
}
.retail-pillar-alert {
background-color: rgba(244, 63, 94, 0.12);
border: 1px solid rgba(244, 63, 94, 0.3);
color: #fda4af;
border-radius: 6px;
padding: 8px 12px;
font-size: 11px;
font-weight: 500;
}
/* SEBI Statutory Cost Shield Interactive Calculator */
.retail-sebi-shield-card {
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
border-radius: 10px;
padding: 22px 24px;
margin-bottom: 24px;
}
.sebi-shield-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16px;
flex-wrap: wrap;
gap: 12px;
}
.sebi-shield-title {
font-size: 14px;
font-weight: 700;
color: var(--text-primary);
display: flex;
align-items: center;
gap: 8px;
}
.sebi-warning-pill {
font-size: 11px;
font-weight: 600;
padding: 4px 10px;
border-radius: 12px;
background-color: rgba(244, 63, 94, 0.15);
border: 1px solid var(--accent-rose);
color: #fb7185;
}
.sebi-calc-grid {
display: grid;
grid-template-columns: 280px 1fr;
gap: 24px;
align-items: center;
}
@media (max-width: 850px) {
.sebi-calc-grid { grid-template-columns: 1fr; }
}
.sebi-inputs {
display: flex;
flex-direction: column;
gap: 12px;
}
.sebi-output-table {
width: 100%;
border-collapse: collapse;
font-size: 12px;
}
.sebi-output-table td {
padding: 6px 10px;
border-bottom: 1px solid var(--border-subtle);
}
.sebi-output-table tr.total-row td {
font-weight: 700;
font-size: 13px;
border-top: 1px solid var(--border-strong);
border-bottom: none;
padding-top: 10px;
}
/* ==============================================================================
Live Stocks & Charts View (NSE / BSE Multi-Exchange)
============================================================================== */
.live-stocks-header-card {
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
border-radius: 10px;
padding: 18px 24px;
margin-bottom: 20px;
}
.exchange-toggle-group {
display: inline-flex;
border: 1px solid var(--border-medium);
border-radius: 6px;
overflow: hidden;
}
.exchange-btn {
background: var(--bg-surface);
border: none;
color: var(--text-secondary);
font-family: var(--font-sans);
font-size: 12px;
font-weight: 700;
padding: 6px 16px;
cursor: pointer;
transition: all 0.15s ease;
}
.exchange-btn:hover {
color: var(--text-primary);
}
.exchange-btn.active {
background: var(--accent-blue);
color: #ffffff;
}
.quick-stock-chips {
display: flex;
gap: 8px;
flex-wrap: wrap;
margin-top: 12px;
}
.quick-stock-chip {
background-color: var(--bg-surface);
border: 1px solid var(--border-subtle);
color: var(--text-secondary);
padding: 4px 10px;
border-radius: 4px;
font-size: 11px;
font-weight: 600;
cursor: pointer;
transition: all 0.15s ease;
}
.quick-stock-chip:hover, .quick-stock-chip.active {
background-color: var(--bg-surface-elevated);
border-color: var(--accent-cyan);
color: var(--accent-cyan);
}
.live-quote-banner {
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
border-radius: 10px;
padding: 20px 24px;
margin-bottom: 20px;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 20px;
}
.timeframe-selector {
display: inline-flex;
gap: 4px;
background-color: var(--bg-surface);
border: 1px solid var(--border-medium);
border-radius: 6px;
padding: 3px;
}
.timeframe-btn {
background: transparent;
border: none;
color: var(--text-secondary);
font-family: var(--font-sans);
font-size: 11px;
font-weight: 600;
padding: 4px 12px;
border-radius: 4px;
cursor: pointer;
}
.timeframe-btn:hover {
color: var(--text-primary);
}
.timeframe-btn.active {
background: var(--bg-surface-active);
color: var(--accent-cyan);
font-weight: 700;
}
.stock-chart-card {
background-color: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
border-radius: 10px;
padding: 20px;
margin-bottom: 20px;
}
/* ==============================================================================
Company Stocks Overview — Common Suite (Retail & Quant)
============================================================================== */
.market-pulse-ribbon {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 16px;
margin-bottom: 20px;
}
.market-pulse-card {
background: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
border-radius: 10px;
padding: 16px 18px;
display: flex;
flex-direction: column;
justify-content: space-between;
transition: transform 0.15s ease, border-color 0.15s ease;
}
.market-pulse-card:hover {
transform: translateY(-2px);
border-color: rgba(255, 255, 255, 0.2);
}
.pulse-card-label {
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
color: var(--text-muted);
letter-spacing: 0.05em;
margin-bottom: 6px;
}
.breadth-meter-track {
height: 8px;
width: 100%;
background: rgba(244, 63, 94, 0.3);
border-radius: 4px;
overflow: hidden;
margin: 8px 0;
display: flex;
}
.breadth-meter-fill {
height: 100%;
background: #34d399;
transition: width 0.4s ease;
}
.company-filter-toolbar {
background: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
border-radius: 10px;
padding: 16px 20px;
margin-bottom: 24px;
display: flex;
flex-direction: column;
gap: 14px;
}
.filter-row-primary {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 14px;
}
.search-input-wrapper {
position: relative;
display: flex;
align-items: center;
flex: 1;
max-width: 420px;
min-width: 260px;
}
.search-input-wrapper input {
width: 100%;
padding-left: 36px;
background: var(--bg-surface);
border: 1px solid var(--border-medium);
border-radius: 6px;
color: var(--text-primary);
font-size: 13px;
height: 38px;
}
.search-icon-left {
position: absolute;
left: 12px;
color: var(--text-muted);
pointer-events: none;
font-size: 14px;
}
.sector-pills-scroll {
display: flex;
gap: 8px;
overflow-x: auto;
padding-bottom: 4px;
scrollbar-width: thin;
}
.sector-pill-tab {
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
color: var(--text-secondary);
font-size: 12px;
font-weight: 600;
padding: 6px 14px;
border-radius: 20px;
white-space: nowrap;
cursor: pointer;
transition: all 0.15s ease;
}
.sector-pill-tab:hover {
border-color: var(--accent-cyan);
color: var(--text-primary);
background: var(--bg-surface-elevated);
}
.sector-pill-tab.active {
background: rgba(14, 165, 233, 0.15);
border-color: var(--accent-cyan);
color: var(--accent-cyan);
font-weight: 700;
}
.view-mode-toggle {
display: inline-flex;
border: 1px solid var(--border-medium);
border-radius: 6px;
overflow: hidden;
}
.view-mode-btn {
background: var(--bg-surface);
border: none;
color: var(--text-secondary);
font-size: 12px;
font-weight: 600;
padding: 6px 12px;
cursor: pointer;
display: flex;
align-items: center;
gap: 5px;
}
.view-mode-btn.active {
background: var(--accent-blue);
color: #ffffff;
}
/* Card Grid Styles */
.company-cards-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
gap: 18px;
}
.company-stock-card {
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: 12px;
padding: 22px;
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 16px;
position: relative;
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: var(--shadow-card);
}
.company-stock-card:hover {
transform: translateY(-2px);
border-color: var(--border-medium);
box-shadow: var(--shadow-hover);
}
.card-company-header {
display: flex;
align-items: flex-start;
gap: 12px;
}
.company-avatar {
width: 42px;
height: 42px;
border-radius: 10px;
background: var(--bg-surface-elevated);
border: 1px solid var(--border-subtle);
display: flex;
align-items: center;
justify-content: center;
font-weight: 800;
font-size: 13px;
color: var(--accent-cyan);
font-family: var(--font-mono);
flex-shrink: 0;
}
.company-identity {
flex: 1;
min-width: 0;
}
.company-symbol-row {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 2px;
}
.company-symbol-text {
font-size: 16px;
font-weight: 800;
color: var(--text-primary);
font-family: var(--font-mono);
}
.company-name-text {
font-size: 12px;
color: var(--text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-bottom: 6px;
}
.company-price-row {
display: flex;
justify-content: space-between;
align-items: baseline;
padding: 12px 0 8px 0;
border-top: 1px solid var(--border-subtle);
border-bottom: 1px solid var(--border-subtle);
}
.company-price-val {
font-size: 22px;
font-weight: 800;
font-family: var(--font-mono);
color: var(--text-primary);
}
.company-chg-pill {
font-size: 11.5px;
font-weight: 700;
font-family: var(--font-mono);
padding: 3px 8px;
border-radius: 6px;
}
.company-chg-pill.positive {
color: #10b981;
background: rgba(16, 185, 129, 0.12);
border: 1px solid rgba(16, 185, 129, 0.25);
}
.company-chg-pill.negative {
color: #f43f5e;
background: rgba(244, 63, 94, 0.12);
border: 1px solid rgba(244, 63, 94, 0.25);
}
.company-day-range {
display: flex;
flex-direction: column;
gap: 4px;
}
.range-labels {
display: flex;
justify-content: space-between;
font-size: 11px;
color: var(--text-muted);
font-family: var(--font-mono);
}
.range-track {
position: relative;
height: 5px;
background: var(--bg-surface-raised);
border-radius: 3px;
overflow: visible;
}
.range-pin {
position: absolute;
top: -3px;
width: 11px;
height: 11px;
border-radius: 50%;
background: var(--accent-cyan);
border: 2px solid var(--bg-surface);
transform: translateX(-50%);
box-shadow: 0 0 6px var(--accent-cyan);
}
.card-mode-intel {
background: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
border-radius: 8px;
padding: 10px 12px;
font-size: 11px;
display: flex;
justify-content: space-between;
align-items: center;
}
.card-actions-row {
display: flex;
gap: 6px;
margin-top: 4px;
}
.card-action-btn {
flex: 1;
padding: 6px 8px;
font-size: 11px;
font-weight: 700;
border-radius: 6px;
text-align: center;
cursor: pointer;
border: 1px solid var(--border-medium);
background: var(--bg-surface);
color: var(--text-secondary);
transition: all 0.15s ease;
white-space: nowrap;
}
.card-action-btn:hover {
color: var(--text-primary);
background: var(--bg-surface-elevated);
border-color: var(--accent-cyan);
}
.card-action-btn.primary-retail {
background: rgba(16, 185, 129, 0.12);
border-color: rgba(16, 185, 129, 0.35);
color: #34d399;
}
.card-action-btn.primary-retail:hover {
background: rgba(16, 185, 129, 0.25);
color: #ffffff;
}
.card-action-btn.primary-quant {
background: rgba(14, 165, 233, 0.12);
border-color: rgba(14, 165, 233, 0.35);
color: #38bdf8;
}
.card-action-btn.primary-quant:hover {
background: rgba(14, 165, 233, 0.25);
color: #ffffff;
}
/* Screener Table Styles */
.company-screener-table-card {
background: var(--bg-surface-raised);
border: 1px solid var(--border-medium);
border-radius: 12px;
overflow: hidden;
}
.screener-table {
width: 100%;
border-collapse: collapse;
font-size: 12px;
}
.screener-table th {
background: rgba(15, 23, 42, 0.8);
padding: 12px 16px;
text-align: left;
font-weight: 700;
color: var(--text-muted);
border-bottom: 1px solid var(--border-medium);
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.04em;
white-space: nowrap;
}
.screener-table td {
padding: 12px 16px;
border-bottom: 1px solid rgba(255, 255, 255, 0.04);
color: var(--text-primary);
vertical-align: middle;
}
.screener-table tr:hover td {
background: rgba(255, 255, 255, 0.02);
}
/* ==============================================================================
Institutional Diagnostics HUD Drawer & Modal System
============================================================================== */
.diagnostics-card {
max-width: 800px;
width: 92vw;
max-height: 88vh;
overflow-y: auto;
background: rgba(12, 19, 34, 0.98);
border: 1px solid rgba(56, 189, 248, 0.35);
border-radius: 12px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.8), 0 0 30px rgba(56, 189, 248, 0.15);
backdrop-filter: blur(16px);
padding: 24px;
}
.diagnostics-header {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 16px;
border-bottom: 1px solid var(--border-subtle);
margin-bottom: 18px;
}
.diagnostics-section-title {
font-size: 10px;
font-family: var(--font-mono);
font-weight: 700;
color: var(--accent-cyan);
letter-spacing: 0.08em;
text-transform: uppercase;
margin: 16px 0 8px 0;
}
.diagnostics-table {
width: 100%;
border-collapse: collapse;
font-size: 12px;
background: var(--bg-surface-raised);
border: 1px solid var(--border-subtle);
border-radius: 8px;
overflow: hidden;
}
.diagnostics-table td {
padding: 9px 14px;
border-bottom: 1px solid var(--border-subtle);
color: var(--text-primary);
}
.diagnostics-table tr:last-child td {
border-bottom: none;
}
.diagnostics-table td:first-child {
color: var(--text-muted);
width: 240px;
font-weight: 500;
}
/* Tabular Financial Numerals Enforcement (Section 36) */
.ticker-price,
.ticker-chg,
.context-price-val,
.context-chg-pill,
.company-price-val,
.company-chg-pill,
.screener-table td,
.metric-val,
.metric-box,
.decision-price-val,
.telemetry-val,
.stock-metric-val,
.stat-value {
font-variant-numeric: tabular-nums;
}
/* Bottom Next Step Pipeline Guide */
.workflow-next-action-card {
margin-top: 24px;
margin-bottom: 8px;
background: var(--workflow-card-bg);
border: 1px solid var(--workflow-card-border);
border-radius: 12px;
padding: 18px 24px;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 16px;
box-shadow: var(--shadow-card);
}
.workflow-next-label {
font-size: 11px;
font-weight: 700;
color: var(--accent-cyan);
letter-spacing: 0.08em;
text-transform: uppercase;
margin-bottom: 4px;
}
.workflow-next-desc {
font-size: 13px;
color: var(--text-primary);
font-weight: 500;
}
.company-stock-card.selected-stock-card {
border-color: var(--border-card-selected) !important;
box-shadow: var(--glow-card-selected) !important;
background: var(--bg-card-selected) !important;
}
tr.selected-stock-card td {
background-color: var(--bg-row-selected) !important;
}
/* ==============================================================================
Google-Style Intelligent Stock Autocomplete Dropdown
============================================================================== */
.autocomplete-anchor-wrapper {
position: relative;
display: inline-block;
width: 100%;
}
.stock-autocomplete-menu {
position: absolute;
top: calc(100% + 4px);
left: 0;
min-width: 320px;
width: max-content;
max-width: 480px;
background: var(--bg-autocomplete);
border: 1px solid var(--border-autocomplete);
border-radius: 8px;
box-shadow: var(--shadow-autocomplete);
z-index: 1050;
max-height: 380px;
overflow-y: auto;
padding: 6px 0;
display: none;
}
.stock-autocomplete-menu.show {
display: block !important;
}
.autocomplete-header {
padding: 6px 14px;
font-size: 10px;
font-weight: 700;
color: var(--accent-cyan);
text-transform: uppercase;
letter-spacing: 0.08em;
border-bottom: 1px solid var(--border-subtle);
display: flex;
justify-content: space-between;
align-items: center;
}
.autocomplete-item {
padding: 9px 14px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
cursor: pointer;
transition: all 0.15s ease;
border-left: 3px solid transparent;
}
.autocomplete-item:hover,
.autocomplete-item.active-item {
background: var(--item-hover-autocomplete);
border-left-color: var(--accent-cyan);
}
.autocomplete-item-left {
display: flex;
align-items: center;
gap: 10px;
min-width: 0;
}
.autocomplete-avatar {
width: 28px;
height: 28px;
border-radius: 6px;
background: var(--bg-surface-elevated);
border: 1px solid var(--border-medium);
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-mono);
font-weight: 800;
font-size: 10px;
color: var(--accent-cyan);
flex-shrink: 0;
}
.autocomplete-meta {
min-width: 0;
}
.autocomplete-symbol-row {
display: flex;
align-items: center;
gap: 6px;
}
.autocomplete-symbol {
font-family: var(--font-mono);
font-weight: 800;
font-size: 13px;
color: var(--text-primary);
}
.autocomplete-name {
font-size: 11px;
color: var(--text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-top: 1px;
max-width: 260px;
}
.autocomplete-highlight {
color: var(--accent-cyan);
font-weight: 700;
text-decoration: underline;
text-underline-offset: 2px;
}
.autocomplete-item-right {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 2px;
flex-shrink: 0;
}
.autocomplete-exchange-pill {
font-size: 9px;
font-family: var(--font-mono);
font-weight: 700;
padding: 1px 5px;
border-radius: 4px;
background: rgba(14, 165, 233, 0.15);
color: var(--accent-cyan);
border: 1px solid rgba(14, 165, 233, 0.3);
}
.autocomplete-exchange-pill.bse {
background: rgba(245, 158, 11, 0.15);
color: #fbbf24;
border-color: rgba(245, 158, 11, 0.3);
}
.autocomplete-sector {
font-size: 10px;
color: var(--text-muted);
}
.autocomplete-empty {
padding: 18px;
text-align: center;
font-size: 12px;
color: var(--text-muted);
}
/* ==============================================================================
Institutional Responsive Design System (Breakpoints Matrix)
============================================================================== */
/* Desktop & Laptop Adaptations (max-width: 1440px) */
@media (max-width: 1440px) {
.header-ticker-strip {
max-width: calc(100vw - 580px);
}
.context-company-name {
max-width: 140px;
}
.view-content-area {
padding: 20px 24px;
}
}
/* Laptop Terminal Focus (max-width: 1280px / 800px viewport) */
@media (max-width: 1280px) {
.dual-plane-sidebar {
width: 210px;
padding: 12px 8px;
}
.header-ticker-strip {
max-width: calc(100vw - 520px);
}
.context-company-name {
display: none; /* Hide company name to preserve tabular quote & workflow rail */
}
.stepper-pipeline {
gap: 3px;
}
.step-node {
padding: 3px 6px;
font-size: 10.5px;
}
.step-node .step-label {
font-size: 10px;
}
.view-content-area {
padding: 14px 16px;
}
.grid-cols-4 {
grid-template-columns: repeat(2, 1fr);
}
.grid-cols-3 {
grid-template-columns: repeat(2, 1fr);
}
.company-cards-grid {
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
}
}
/* Tablet Landscape Focus (max-width: 1024px) */
@media (max-width: 1024px) {
.dual-plane-sidebar {
width: 190px;
}
.header-ticker-strip {
display: none; /* Hide header ticker on tablet to prevent crowding */
}
.context-company-name {
display: none; /* Hide long name, keep symbol + exchange + price */
}
.step-node .step-label {
font-size: 10.5px;
}
.view-content-area {
padding: 14px 16px;
}
.retail-pillars-grid {
grid-template-columns: 1fr;
}
.sebi-calc-grid {
grid-template-columns: 1fr;
}
}
/* Mobile & Tablet Portrait Focus (max-width: 768px) */
@media (max-width: 768px) {
.app-shell {
height: 100vh;
height: 100dvh;
}
.system-bar {
padding: 0 12px;
height: 46px;
}
.brand-tag {
display: none;
}
.header-ticker-strip {
display: none;
}
.workspace-container {
flex-direction: column;
}
.dual-plane-sidebar {
width: 100%;
height: auto;
border-right: none;
border-bottom: 1px solid var(--border-subtle);
flex-direction: row;
overflow-x: auto;
padding: 6px 8px;
gap: 4px;
flex-shrink: 0;
-webkit-overflow-scrolling: touch;
}
.nav-plane-heading {
display: none;
}
.nav-item {
white-space: nowrap;
padding: 5px 10px;
font-size: 11px;
margin-bottom: 0;
}
.workflow-stepper-container {
padding: 8px 12px;
min-height: auto;
}
.stepper-composite-layout {
flex-direction: column;
align-items: flex-start;
gap: 8px;
}
.stepper-pipeline {
width: 100%;
overflow-x: auto;
padding-bottom: 4px;
-webkit-overflow-scrolling: touch;
}
.view-content-area {
padding: 12px 14px;
}
.grid-cols-2, .grid-cols-3, .grid-cols-4 {
grid-template-columns: 1fr;
}
.company-cards-grid {
grid-template-columns: 1fr;
}
.company-filter-toolbar {
padding: 12px 14px;
}
.filter-row-primary {
flex-direction: column;
align-items: stretch;
gap: 10px;
}
.screener-table-card, .company-screener-table-card {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.telemetry-footer-bar {
display: none; /* Free up permanent vertical space on mobile! */
}
}
/* Small Smartphone Viewport (max-width: 480px) */
@media (max-width: 480px) {
.system-bar {
height: 44px;
}
.brand-logo {
font-size: 13px;
}
.mode-toggle-btn {
padding: 4px 8px;
font-size: 10px;
}
.btn-diagnostics-toggle {
display: none; /* Accessible via system status dot */
}
.page-header {
flex-direction: column;
align-items: flex-start;
gap: 10px;
}
.view-content-area {
padding: 10px;
}
.card {
padding: 14px;
}
.metric-box {
padding: 12px 14px;
}
}
/* ==============================================================================
TradeSense AI — Institutional Quantitative Research Operating System (Milestone 23)
Visual Identity: Deep Midnight Navy · Precision Typography · Technical Grid
Aesthetic: Bloomberg Terminal × Institutional Quantitative Research Workstation
============================================================================== */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
:root {
/* Color Tokens - Modern Dark Obsidian Palette */
--bg-deep: #070b14;
--bg-surface: #0c1322;
--bg-surface-raised: #121a2d;
--bg-surface-elevated: #17223b;
--bg-surface-hover: #1e2c4c;
--bg-surface-active: #25375d;
/* Borders & Dividers */
--border-subtle: rgba(255, 255, 255, 0.07);
--border-medium: rgba(255, 255, 255, 0.13);
--border-strong: rgba(255, 255, 255, 0.22);
--border-focus: #38bdf8;
/* Typography */
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--font-mono: 'JetBrains Mono', monospace;
/* Text Colors */
--text-primary: #f8fafc;
--text-secondary: #94a3b8;
--text-muted: #64748b;
--text-dim: #475569;
/* Institutional Accent System */
--accent-cyan: #38bdf8;
--accent-cyan-bg: rgba(56, 189, 248, 0.12);
--accent-blue: #3b82f6;
--accent-blue-bg: rgba(59, 130, 246, 0.14);
--accent-indigo: #6366f1;
--accent-emerald: #10b981;
--accent-emerald-bg: rgba(16, 185, 129, 0.12);
--accent-amber: #f59e0b;
--accent-rose: #f43f5e;
--accent-purple: #a855f7;
/* Status Badges */
--badge-verified-bg: rgba(16, 185, 129, 0.14);
--badge-verified-text: #34d399;
--badge-running-bg: rgba(6, 182, 212, 0.14);
--badge-running-text: #38bdf8;
--badge-review-bg: rgba(245, 158, 11, 0.14);
--badge-review-text: #fbbf24;
--badge-approved-bg: rgba(59, 130, 246, 0.14);
--badge-approved-text: #60a5fa;
--badge-rejected-bg: rgba(244, 63, 94, 0.14);
--badge-rejected-text: #fb7185;
--badge-archived-bg: rgba(148, 163, 184, 0.14);
--badge-archived-text: #94a3b8;
--badge-locked-bg: rgba(168, 85, 247, 0.16);
--badge-locked-text: #c084fc;
/* Autocomplete & Dropdown Tokens */
--bg-autocomplete: #0c1322;
--border-autocomplete: rgba(56, 189, 248, 0.4);
--shadow-autocomplete: 0 10px 30px rgba(0, 0, 0, 0.7), 0 0 15px rgba(6, 182, 212, 0.2);
--item-hover-autocomplete: rgba(56, 189, 248, 0.12);
/* Card Selection & Active Highlight Tokens */
--bg-card-selected: linear-gradient(135deg, rgba(30, 41, 59, 0.95), rgba(15, 23, 42, 0.95));
--border-card-selected: var(--accent-cyan);
--glow-card-selected: 0 0 16px rgba(6, 182, 212, 0.25);
--bg-row-selected: rgba(56, 189, 248, 0.12);
/* Pipeline & Ticker Strip Tokens */
--workflow-card-bg: linear-gradient(135deg, rgba(15, 23, 42, 0.95), rgba(30, 41, 59, 0.85));
--workflow-card-border: rgba(56, 189, 248, 0.35);
--ticker-tape-bg: linear-gradient(90deg, #080d1a 0%, #0c1427 50%, #080d1a 100%);
--ticker-tape-border: var(--border-subtle);
/* Shadows & Illumination */
--glow-subtle: 0 0 25px rgba(56, 189, 248, 0.08);
--glow-verified: 0 0 30px rgba(16, 185, 129, 0.12);
--shadow-card: 0 4px 18px rgba(0, 0, 0, 0.35);
--shadow-hover: 0 8px 30px rgba(0, 0, 0, 0.5);
--shadow-modal: 0 25px 60px rgba(0, 0, 0, 0.85);
}
/* ==============================================================================
Light Theme System Override
============================================================================== */
[data-theme="light"],
body.light-theme {
--bg-deep: #f8fafc;
--bg-surface: #ffffff;
--bg-surface-raised: #f1f5f9;
--bg-surface-elevated: #e2e8f0;
--bg-surface-hover: #e8edf5;
--bg-surface-active: #dce4ef;
--border-subtle: rgba(15, 23, 42, 0.08);