basilwong's picture
Upload frontend_v2/styles.css with huggingface_hub
ef6bf50 verified
Raw
History Blame Contribute Delete
28.2 kB
/* Alpha Signal Analysis — Trading Terminal Theme */
:root {
--bg-primary: #0c0c0c;
--bg-secondary: #121212;
--bg-card: #1a1a1a;
--bg-input: #0e0e0e;
--border: #2a2a2a;
--border-active: #00ff88;
--text-primary: #d4d4d4;
--text-secondary: #808080;
--text-muted: #555555;
--accent-green: #00ff88;
--accent-red: #ff4444;
--accent-blue: #00aaff;
--accent-yellow: #ffcc00;
--accent-purple: #aa66ff;
--font-mono: 'JetBrains Mono', 'Fira Code', 'SF Mono', 'Consolas', monospace;
--font-sans: var(--font-mono);
--radius: 2px;
--shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: var(--font-mono);
background: var(--bg-primary);
color: var(--text-primary);
min-height: 100vh;
display: flex;
flex-direction: column;
font-size: 13px;
line-height: 1.5;
}
/* Header */
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 24px;
background: var(--bg-secondary);
border-bottom: 1px solid var(--border);
}
.header-left {
display: flex;
align-items: center;
gap: 12px;
}
.logo {
font-size: 20px;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
background: transparent;
border: 1px solid var(--accent-green);
border-radius: var(--radius);
color: var(--accent-green);
}
.header h1 {
font-size: 15px;
font-weight: 400;
letter-spacing: 1px;
text-transform: uppercase;
color: var(--accent-green);
}
.badge {
font-size: 10px;
padding: 2px 6px;
background: transparent;
border: 1px solid var(--text-muted);
border-radius: var(--radius);
font-weight: 400;
color: var(--text-muted);
}
.header-right {
display: flex;
align-items: center;
gap: 8px;
font-size: 13px;
color: var(--text-secondary);
}
.status-dot {
width: 8px;
height: 8px;
background: var(--accent-green);
border-radius: 50%;
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
/* Tab Navigation */
.tab-nav {
display: flex;
gap: 0;
padding: 0 24px;
background: var(--bg-secondary);
border-bottom: 1px solid var(--border);
}
.tab-btn {
padding: 10px 16px;
background: none;
border: none;
color: var(--text-muted);
font-size: 12px;
font-weight: 400;
cursor: pointer;
border-bottom: 1px solid transparent;
transition: all 0.2s;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.tab-btn:hover {
color: var(--text-primary);
}
.tab-btn.active {
color: var(--accent-green);
border-bottom-color: var(--accent-green);
}
/* Content */
.content {
flex: 1;
padding: 24px;
max-width: 1400px;
margin: 0 auto;
width: 100%;
}
.tab-panel {
display: none;
}
.tab-panel.active {
display: block;
}
.panel-header {
margin-bottom: 24px;
}
.panel-header h2 {
font-size: 16px;
font-weight: 400;
margin-bottom: 4px;
text-transform: uppercase;
letter-spacing: 1px;
color: var(--accent-green);
}
.panel-desc {
color: var(--text-muted);
font-size: 12px;
}
/* Controls */
.control-row {
display: flex;
gap: 16px;
align-items: end;
margin-bottom: 16px;
}
.control-group {
display: flex;
flex-direction: column;
gap: 4px;
}
.control-group label {
font-size: 12px;
font-weight: 500;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.flex-grow { flex: 1; }
select, textarea, input[type="text"] {
background: var(--bg-input);
border: 1px solid var(--border);
color: var(--text-primary);
padding: 10px 12px;
border-radius: var(--radius);
font-size: 14px;
font-family: var(--font-sans);
transition: border-color 0.2s;
}
select:focus, textarea:focus, input:focus {
outline: none;
border-color: var(--accent-blue);
}
textarea {
width: 100%;
min-height: 120px;
resize: vertical;
margin-bottom: 12px;
}
/* Toggle */
.toggle {
position: relative;
display: inline-block;
width: 44px;
height: 24px;
cursor: pointer;
}
.toggle input { opacity: 0; width: 0; height: 0; }
.toggle-slider {
position: absolute;
inset: 0;
background: var(--border);
border-radius: 12px;
transition: 0.3s;
}
.toggle-slider::before {
content: '';
position: absolute;
width: 18px;
height: 18px;
left: 3px;
bottom: 3px;
background: var(--text-primary);
border-radius: 50%;
transition: 0.3s;
}
.toggle input:checked + .toggle-slider {
background: var(--accent-blue);
}
.toggle input:checked + .toggle-slider::before {
transform: translateX(20px);
}
/* Buttons */
.btn-primary {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 20px;
background: transparent;
border: 1px solid var(--accent-green);
color: var(--accent-green);
font-size: 13px;
font-weight: 400;
border-radius: var(--radius);
cursor: pointer;
transition: background 0.2s, color 0.2s;
font-family: var(--font-mono);
}
.btn-primary:hover {
background: var(--accent-green);
color: #000;
}
.btn-primary:active { transform: scale(0.98); }
.btn-primary:disabled { opacity: 0.5; cursor: not-allowed; }
.btn-icon { font-size: 16px; }
/* Results */
.results-panel {
margin-top: 24px;
padding: 20px;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius);
}
.results-header {
display: flex;
justify-content: flex-end;
margin-bottom: 12px;
}
.latency-badge {
font-family: var(--font-mono);
font-size: 12px;
padding: 4px 10px;
background: var(--bg-input);
border: 1px solid var(--border);
border-radius: 4px;
color: var(--accent-green);
}
.hidden { display: none; }
/* Signal meta cards */
.signal-meta {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 12px;
margin: 16px 0;
}
.meta-card {
padding: 12px;
background: var(--bg-input);
border: 1px solid var(--border);
border-radius: var(--radius);
}
.meta-card label {
display: block;
font-size: 11px;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 4px;
}
.meta-card span {
font-size: 14px;
font-weight: 600;
color: var(--text-primary);
}
/* Expandable sections */
.expandable {
margin-top: 12px;
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
}
.expand-btn {
width: 100%;
padding: 10px 16px;
background: var(--bg-input);
border: none;
color: var(--text-secondary);
font-size: 13px;
text-align: left;
cursor: pointer;
transition: background 0.2s;
}
.expand-btn:hover { background: var(--bg-card); }
.expand-content {
padding: 16px;
display: none;
font-size: 14px;
line-height: 1.6;
color: var(--text-secondary);
}
.expand-content.open { display: block; }
.expand-content.code {
font-family: var(--font-mono);
font-size: 12px;
white-space: pre-wrap;
background: var(--bg-primary);
}
/* Charts */
.chart-container {
width: 100%;
min-height: 300px;
margin: 12px 0;
}
.chart-section {
margin-bottom: 32px;
}
.chart-section h3 {
font-size: 16px;
font-weight: 600;
margin-bottom: 12px;
display: flex;
align-items: center;
gap: 8px;
}
/* Info button */
.info-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 18px;
height: 18px;
font-size: 12px;
background: var(--border);
border-radius: 50%;
color: var(--text-muted);
cursor: help;
}
/* Evaluation */
.eval-controls {
margin-bottom: 20px;
}
.checkbox-group {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-top: 8px;
}
.checkbox-group label {
display: flex;
align-items: center;
gap: 6px;
padding: 8px 14px;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius);
cursor: pointer;
font-size: 13px;
transition: border-color 0.2s;
}
.checkbox-group label:has(input:checked) {
border-color: var(--accent-blue);
background: rgba(59, 130, 246, 0.1);
}
.checkbox-group input[type="checkbox"] {
accent-color: var(--accent-blue);
}
.eval-metrics-summary {
padding: 16px;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius);
margin-bottom: 24px;
font-size: 14px;
color: var(--text-secondary);
}
/* Table */
.table-container {
overflow-x: auto;
}
.table-container table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
.table-container th, .table-container td {
padding: 10px 14px;
text-align: left;
border-bottom: 1px solid var(--border);
}
.table-container th {
background: var(--bg-input);
color: var(--text-secondary);
font-weight: 600;
text-transform: uppercase;
font-size: 11px;
letter-spacing: 0.5px;
}
.table-container td {
font-family: var(--font-mono);
}
.table-container td.positive { color: var(--accent-green); }
.table-container td.negative { color: var(--accent-red); }
.table-container td.significant { font-weight: 700; }
/* Sector */
.sector-clusters {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 16px;
margin: 24px 0;
}
.cluster-card {
padding: 16px;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius);
}
.cluster-card h4 {
font-size: 14px;
margin-bottom: 8px;
color: var(--accent-blue);
}
.cluster-card .ticker-list {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.ticker-tag {
padding: 4px 8px;
background: var(--bg-input);
border-radius: 4px;
font-family: var(--font-mono);
font-size: 12px;
font-weight: 600;
}
/* Limitations */
.limitations {
margin-top: 32px;
padding: 16px;
background: rgba(239, 68, 68, 0.05);
border: 1px solid rgba(239, 68, 68, 0.2);
border-radius: var(--radius);
}
.limitations h4 {
font-size: 14px;
color: var(--accent-red);
margin-bottom: 8px;
}
.limitations ul {
padding-left: 20px;
font-size: 13px;
color: var(--text-secondary);
line-height: 1.8;
}
/* Model details grid */
.model-details-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 16px;
margin-top: 20px;
}
.model-detail-card {
padding: 16px;
background: var(--bg-input);
border: 1px solid var(--border);
border-radius: var(--radius);
}
.model-detail-card h4 {
font-size: 13px;
color: var(--accent-blue);
margin-bottom: 8px;
}
/* Article info */
.article-info {
padding: 12px 16px;
background: var(--bg-input);
border-left: 3px solid var(--accent-blue);
border-radius: 0 var(--radius) var(--radius) 0;
margin-bottom: 20px;
font-size: 14px;
}
.article-info .title { font-weight: 600; }
.article-info .meta { color: var(--text-muted); font-size: 12px; margin-top: 4px; }
/* Footer */
.footer {
display: flex;
justify-content: space-between;
padding: 12px 24px;
background: var(--bg-secondary);
border-top: 1px solid var(--border);
font-size: 12px;
color: var(--text-muted);
}
/* Responsive */
@media (max-width: 768px) {
.signal-meta { grid-template-columns: repeat(2, 1fr); }
.control-row { flex-direction: column; }
.header h1 { font-size: 14px; }
.tab-btn { font-size: 12px; padding: 10px 12px; }
}
/* Loading spinner */
.loading {
display: inline-block;
width: 16px;
height: 16px;
border: 2px solid var(--border);
border-top-color: var(--accent-blue);
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
/* Evaluation context cards */
.eval-context {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
margin-bottom: 24px;
}
.context-card {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 16px 20px;
}
.context-card h4 {
color: var(--accent-green);
font-size: 11px;
font-weight: 400;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 8px;
}
.context-card p {
color: var(--text-secondary);
font-size: 13px;
line-height: 1.6;
}
.context-card strong {
color: var(--text-primary);
}
@media (max-width: 768px) {
.eval-context {
grid-template-columns: 1fr;
}
}
/* Product overview card */
.product-overview {
margin-bottom: 24px;
}
.overview-card {
background: var(--bg-card);
border: 1px solid var(--accent-green);
border-radius: var(--radius);
padding: 20px 24px;
}
.overview-card h3 {
color: var(--accent-green);
font-size: 14px;
font-weight: 400;
margin-bottom: 12px;
text-transform: uppercase;
letter-spacing: 1px;
}
.overview-card p {
color: var(--text-secondary);
font-size: 14px;
line-height: 1.7;
margin-bottom: 10px;
}
.overview-card p:last-child {
margin-bottom: 0;
color: var(--text-muted);
font-size: 13px;
}
.overview-card strong {
color: var(--text-primary);
}
/* Welcome overlay / splash screen */
.welcome-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.97);
z-index: 10000;
display: flex;
align-items: flex-start;
justify-content: center;
backdrop-filter: blur(4px);
animation: fadeIn 0.3s ease;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
.welcome-overlay.hidden {
display: none;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.welcome-modal {
max-width: 680px;
width: 90%;
text-align: center;
padding: 48px 40px;
margin: 40px auto;
}
.welcome-top {
margin-bottom: 24px;
}
.welcome-logo {
font-size: 36px;
margin-bottom: 16px;
filter: drop-shadow(0 0 12px rgba(0, 255, 136, 0.4));
color: var(--accent-green);
}
.welcome-title {
font-size: 24px;
font-weight: 400;
color: var(--accent-green);
margin-bottom: 8px;
letter-spacing: 2px;
text-transform: uppercase;
}
.welcome-tagline {
font-size: 12px;
color: var(--text-secondary);
font-weight: 400;
margin-bottom: 24px;
text-transform: uppercase;
letter-spacing: 2px;
}
.welcome-body {
text-align: left;
margin-bottom: 32px;
}
.welcome-lead {
font-size: 16px;
color: var(--text-primary);
line-height: 1.6;
margin-bottom: 24px;
font-weight: 500;
}
.welcome-stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 12px;
margin-bottom: 24px;
}
.welcome-stat {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 14px 8px;
text-align: center;
}
.stat-value {
display: block;
font-size: 16px;
font-weight: 400;
color: var(--accent-green);
font-family: var(--font-mono);
}
.stat-label {
display: block;
font-size: 11px;
color: var(--text-muted);
margin-top: 4px;
text-transform: uppercase;
letter-spacing: 0.3px;
}
.welcome-description {
font-size: 14px;
color: var(--text-secondary);
line-height: 1.7;
margin-bottom: 16px;
}
.welcome-context {
font-size: 14px;
color: var(--text-secondary);
line-height: 1.7;
margin-bottom: 0;
}
.welcome-context a {
color: var(--accent-blue);
text-decoration: underline;
}
.welcome-cta {
display: inline-block;
background: transparent;
color: var(--accent-green);
border: 1px solid var(--accent-green);
padding: 12px 32px;
font-size: 14px;
font-weight: 400;
font-family: var(--font-mono);
border-radius: var(--radius);
cursor: pointer;
transition: background 0.2s, color 0.2s;
margin-bottom: 20px;
text-transform: uppercase;
letter-spacing: 1px;
}
.welcome-cta:hover {
background: var(--accent-green);
color: #000;
}
.welcome-cta:active {
transform: scale(0.98);
}
.welcome-footer {
font-size: 12px;
color: var(--text-muted);
}
@media (max-width: 600px) {
.welcome-modal {
padding: 32px 24px;
}
.welcome-title {
font-size: 24px;
}
.welcome-stats {
grid-template-columns: repeat(2, 1fr);
}
.welcome-cta {
padding: 14px 24px;
font-size: 14px;
}
}
/* Live feed styles */
.feed-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 24px;
margin-bottom: 12px;
padding: 0 4px;
}
.feed-header h3 {
font-size: 16px;
color: var(--text-primary);
}
.feed-count {
font-size: 13px;
color: var(--text-muted);
font-weight: 400;
margin-left: 8px;
}
.btn-secondary {
background: transparent;
border: 1px solid var(--border);
color: var(--text-muted);
padding: 6px 14px;
font-size: 12px;
border-radius: var(--radius);
cursor: pointer;
transition: border-color 0.15s, color 0.15s;
}
.btn-secondary:hover {
border-color: var(--text-secondary);
color: var(--text-secondary);
}
.live-feed {
display: flex;
flex-direction: column;
gap: 12px;
}
.feed-empty {
text-align: center;
padding: 48px 20px;
color: var(--text-muted);
font-size: 14px;
border: 1px dashed var(--border);
border-radius: var(--radius);
}
.feed-card {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 16px 20px;
animation: slideIn 0.2s ease;
}
@keyframes slideIn {
from { opacity: 0; transform: translateY(-8px); }
to { opacity: 1; transform: translateY(0); }
}
.feed-card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 8px;
}
.feed-card-meta {
display: flex;
align-items: center;
gap: 8px;
}
.feed-model-badge {
background: transparent;
color: var(--accent-green);
border: 1px solid var(--accent-green);
padding: 2px 8px;
border-radius: var(--radius);
font-size: 10px;
font-weight: 400;
}
.feed-source-badge {
background: var(--bg-input);
color: var(--text-secondary);
padding: 2px 8px;
border-radius: 4px;
font-size: 11px;
border: 1px solid var(--border);
}
.feed-time {
font-size: 11px;
color: var(--text-muted);
}
.feed-status {
font-size: 12px;
font-weight: 600;
}
.loading-status {
color: var(--accent-yellow);
}
.success-status {
color: var(--accent-green);
}
.error-status {
color: var(--accent-red);
}
.feed-card-preview {
font-size: 12px;
color: var(--text-muted);
line-height: 1.4;
margin-bottom: 12px;
padding: 8px 12px;
background: var(--bg-input);
border-radius: 4px;
border-left: 3px solid var(--border);
}
.feed-card-body {
min-height: 0;
}
.feed-signal-chart {
display: flex;
flex-direction: column;
gap: 4px;
margin-bottom: 12px;
}
.feed-signal-row {
display: grid;
grid-template-columns: 50px 1fr 55px;
align-items: center;
gap: 8px;
height: 22px;
}
.feed-ticker {
font-size: 11px;
font-weight: 600;
color: var(--text-secondary);
font-family: var(--font-mono);
}
.feed-bar-container {
height: 14px;
background: var(--bg-input);
border-radius: 3px;
overflow: hidden;
display: flex;
}
.feed-bar {
height: 100%;
border-radius: 3px;
transition: width 0.3s ease;
}
.feed-score {
font-size: 11px;
font-family: var(--font-mono);
font-weight: 600;
text-align: right;
}
.feed-meta-line {
font-size: 11px;
color: var(--text-muted);
margin-bottom: 8px;
padding: 6px 0;
border-top: 1px solid var(--border);
}
.feed-translation {
font-size: 13px;
color: var(--text-secondary);
line-height: 1.5;
margin-bottom: 8px;
}
.feed-details {
margin-top: 8px;
}
.feed-details summary {
font-size: 12px;
color: var(--text-muted);
cursor: pointer;
padding: 4px 0;
}
.feed-details summary:hover {
color: var(--text-secondary);
}
.feed-json {
font-size: 11px;
font-family: var(--font-mono);
color: var(--text-secondary);
background: var(--bg-input);
padding: 12px;
border-radius: 4px;
overflow-x: auto;
max-height: 300px;
overflow-y: auto;
margin-top: 4px;
white-space: pre-wrap;
word-break: break-word;
}
.feed-error {
color: var(--accent-red);
font-size: 13px;
padding: 8px 12px;
background: rgba(239, 68, 68, 0.1);
border-radius: 4px;
border: 1px solid rgba(239, 68, 68, 0.2);
}
/* ============================================================
MOBILE RESPONSIVE OVERRIDES
============================================================ */
@media (max-width: 768px) {
/* Header */
.header {
padding: 10px 12px;
}
.header-left {
gap: 8px;
}
.logo {
width: 32px;
height: 32px;
font-size: 18px;
}
.header h1 {
font-size: 14px;
}
.badge {
display: none;
}
.header-right .status-text {
display: none;
}
/* Tab navigation - scrollable */
.tab-nav {
padding: 0 8px;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
scrollbar-width: none;
}
.tab-nav::-webkit-scrollbar {
display: none;
}
.tab-btn {
font-size: 12px;
padding: 10px 12px;
white-space: nowrap;
flex-shrink: 0;
}
/* Content */
.content {
padding: 16px 12px;
}
.panel-header h2 {
font-size: 18px;
}
.panel-desc {
font-size: 13px;
}
/* Product overview */
.overview-card {
padding: 16px;
}
.overview-card h3 {
font-size: 16px;
}
.overview-card p {
font-size: 13px;
}
/* Eval context cards */
.eval-context {
grid-template-columns: 1fr;
}
/* Eval controls - wrap checkboxes */
.checkbox-group {
flex-wrap: wrap;
}
.checkbox-group label {
font-size: 11px;
}
/* Charts */
.chart-container {
overflow-x: auto;
}
/* Tables */
.table-container {
overflow-x: auto;
}
table {
font-size: 11px;
}
table th, table td {
padding: 6px 8px;
}
/* Live feed */
.feed-card {
padding: 12px 14px;
}
.feed-card-meta {
flex-wrap: wrap;
gap: 4px;
}
.feed-signal-row {
grid-template-columns: 42px 1fr 48px;
}
.feed-ticker {
font-size: 10px;
}
.feed-score {
font-size: 10px;
}
/* Historical controls */
.historical-controls select {
font-size: 12px;
}
/* Sector clusters */
.sector-clusters {
grid-template-columns: 1fr 1fr !important;
}
/* Footer */
.footer {
flex-direction: column;
gap: 4px;
padding: 12px;
font-size: 11px;
}
}
@media (max-width: 480px) {
/* Extra small screens */
.welcome-stats {
grid-template-columns: repeat(2, 1fr);
}
.welcome-title {
font-size: 22px;
}
.welcome-tagline {
font-size: 12px;
letter-spacing: 1px;
}
.welcome-cta {
padding: 14px 20px;
font-size: 14px;
width: 100%;
}
.welcome-modal {
padding: 28px 16px;
}
.tab-btn {
font-size: 11px;
padding: 8px 10px;
}
.content {
padding: 12px 8px;
}
.control-row {
gap: 10px;
}
.feed-header {
flex-direction: column;
align-items: flex-start;
gap: 8px;
}
.eval-charts {
gap: 16px;
}
}
/* Panel header with button */
.panel-header-row {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
}
.btn-info {
background: transparent;
border: 1px solid var(--text-muted);
color: var(--text-muted);
padding: 6px 12px;
font-size: 11px;
font-weight: 400;
font-family: var(--font-mono);
border-radius: var(--radius);
cursor: pointer;
white-space: nowrap;
transition: border-color 0.15s, color 0.15s;
flex-shrink: 0;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.btn-info:hover {
border-color: var(--accent-green);
color: var(--accent-green);
}
@media (max-width: 480px) {
.panel-header-row {
flex-direction: column;
}
}
/* ============================================================
MOBILE FIXES: Live Signal Debugging + Historical Prediction Analysis
============================================================ */
@media (max-width: 768px) {
/* Live tab: textarea and button full width */
.live-controls textarea {
min-height: 100px;
font-size: 13px;
}
.live-controls .btn-primary {
width: 100%;
justify-content: center;
}
.live-controls .control-row {
flex-direction: column;
gap: 12px;
}
.live-controls .control-group {
width: 100%;
}
.live-controls select {
width: 100%;
}
/* Feed cards: tighter on mobile */
.feed-card-header {
flex-direction: column;
align-items: flex-start;
gap: 6px;
}
.feed-card-preview {
font-size: 11px;
padding: 6px 10px;
}
.feed-translation {
font-size: 12px;
}
.feed-json {
font-size: 10px;
max-height: 200px;
}
/* Historical tab: event select full width, text wrapping */
.historical-controls select {
width: 100%;
font-size: 12px;
white-space: normal;
word-wrap: break-word;
}
/* Historical results panel */
#hist-results {
padding: 12px;
}
#hist-results h3 {
font-size: 14px;
flex-wrap: wrap;
}
/* Article info block */
.article-info {
font-size: 12px;
padding: 10px 12px;
}
.article-info .title {
word-wrap: break-word;
overflow-wrap: break-word;
}
/* Chart containers: allow horizontal scroll, reduce min-height */
.chart-container {
min-height: 250px;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
/* Model details grid: single column on mobile */
.model-details-grid {
grid-template-columns: 1fr;
}
.model-detail-card {
padding: 12px;
}
.model-detail-card h4 {
font-size: 12px;
}
.model-detail-card p {
font-size: 11px;
}
/* Historical checkbox group: smaller pills */
.historical-controls .checkbox-group {
gap: 6px;
}
.historical-controls .checkbox-group label {
padding: 6px 10px;
font-size: 11px;
}
}
@media (max-width: 480px) {
/* Extra small: stack everything aggressively */
.feed-signal-row {
grid-template-columns: 36px 1fr 42px;
height: 20px;
}
.feed-bar-container {
height: 12px;
}
/* Historical: even tighter */
#hist-results {
padding: 8px;
}
.chart-container {
min-height: 220px;
}
/* Model filter checkboxes wrap tighter */
.checkbox-group label {
padding: 5px 8px;
font-size: 10px;
}
}
/* No signal indicator */
.feed-no-signal {
color: var(--accent-yellow);
font-size: 12px;
padding: 8px 12px;
background: rgba(255, 204, 0, 0.08);
border: 1px solid rgba(255, 204, 0, 0.2);
border-radius: var(--radius);
margin-bottom: 12px;
text-transform: uppercase;
letter-spacing: 0.5px;
}