Files
polymarket-bot/dashboard/src/index.css
T
chemavx 9bdafaa51e
CI/CD / build-and-push (push) Successful in 2m24s
feat: add dashboard source code with Vite + React + Recharts and CI/CD build
- Reconstruct dashboard from compiled container: App.jsx, main.jsx, index.css
- nginx.conf with SPA routing and /api proxy to api:8000
- Multi-stage Dockerfile: node:20-alpine build + nginx:alpine serve
- Add third kaniko build step in ci.yml for chemavx/polymarket-bot-dashboard
- Update k8s manifest sed to patch deployment-dashboard.yaml image on each push

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 17:18:32 +00:00

258 lines
4.1 KiB
CSS

:root {
--bg: #0F1117;
--surface: #1A1D27;
--surface2: #232635;
--border: rgba(255, 255, 255, 0.08);
--text: #F1F5F9;
--text-muted: #94A3B8;
--blue: #3B82F6;
--green: #22C55E;
--red: #EF4444;
--amber: #F59E0B;
--purple: #8B5CF6;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
background: var(--bg);
color: var(--text);
font-family: -apple-system, BlinkMacSystemFont, Inter, sans-serif;
font-size: 14px;
min-height: 100vh;
}
.app {
max-width: 1280px;
margin: 0 auto;
padding: 24px;
}
/* Header */
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24px;
}
.header h1 {
font-size: 22px;
font-weight: 600;
}
.badge {
display: inline-block;
padding: 3px 10px;
border-radius: 20px;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.5px;
margin-left: 12px;
}
.badge.paper {
background: #f59e0b26;
color: var(--amber);
border: 1px solid rgba(245, 158, 11, 0.3);
}
.last-update {
color: var(--text-muted);
font-size: 12px;
}
/* Promotion banner */
.promotion-banner {
display: flex;
align-items: center;
gap: 16px;
background: #22c55e1a;
border: 1px solid rgba(34, 197, 94, 0.3);
border-radius: 12px;
padding: 16px 20px;
margin-bottom: 24px;
}
.promotion-banner .banner-icon {
font-size: 24px;
}
.promotion-banner code {
background: #ffffff1a;
padding: 2px 6px;
border-radius: 4px;
font-family: monospace;
font-size: 12px;
}
/* Metrics grid */
.metrics-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 16px;
margin-bottom: 32px;
}
.metric-card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
padding: 16px 20px;
}
.metric-header {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-bottom: 4px;
}
.metric-title {
color: var(--text-muted);
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.metric-value {
font-size: 22px;
font-weight: 600;
}
.metric-subtitle {
color: var(--text-muted);
font-size: 11px;
}
.progress-bar {
height: 3px;
background: #ffffff14;
border-radius: 2px;
margin-top: 10px;
overflow: hidden;
}
.progress-fill {
height: 100%;
border-radius: 2px;
transition: width 0.5s ease;
}
/* Sections */
.section {
margin-bottom: 32px;
}
.section h2 {
font-size: 16px;
font-weight: 500;
margin-bottom: 16px;
color: var(--text-muted);
}
.chart-container {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
padding: 20px;
}
.empty-chart,
.empty-table {
text-align: center;
padding: 48px;
color: var(--text-muted);
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
}
/* Trade table */
.table-wrapper {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
overflow-x: auto;
}
.trade-table {
width: 100%;
border-collapse: collapse;
}
.trade-table th {
padding: 12px 16px;
text-align: left;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--text-muted);
border-bottom: 1px solid var(--border);
}
.trade-table td {
padding: 10px 16px;
border-bottom: 1px solid var(--border);
font-size: 13px;
}
.trade-table tr:last-child td {
border-bottom: none;
}
.trade-table tr:hover td {
background: #ffffff05;
}
.market-question {
max-width: 360px;
color: var(--text-muted);
}
.direction-badge {
display: inline-block;
padding: 2px 8px;
border-radius: 6px;
font-size: 11px;
font-weight: 600;
}
.direction-badge.yes {
background: #22c55e1a;
color: var(--green);
}
.direction-badge.no {
background: #ef44441a;
color: var(--red);
}
/* Loading */
.loading {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 100vh;
gap: 16px;
color: var(--text-muted);
}
.spinner {
width: 32px;
height: 32px;
border: 2px solid var(--border);
border-top-color: var(--blue);
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}