/* ============================================================ Trump Alpha — Design System ============================================================ */ :root { /* Surfaces — warm off-whites */ --bg: oklch(99% 0.004 85); --bg-sunk: oklch(97.8% 0.006 85); --bg-elev: #ffffff; --surface: #ffffff; --surface-2: oklch(97.2% 0.006 85); --surface-3: oklch(94% 0.008 85); /* Text */ --ink: oklch(18% 0.008 85); --ink-2: oklch(38% 0.008 85); --ink-3: oklch(55% 0.008 85); --ink-4: oklch(70% 0.006 85); /* Borders */ --line: oklch(93% 0.008 85); --line-2: oklch(88% 0.01 85); /* Amber accent */ --amber: oklch(78% 0.17 75); --amber-ink: oklch(45% 0.16 70); --amber-soft: oklch(96% 0.05 85); --amber-ring: oklch(88% 0.12 80); /* Signal colors */ --up: oklch(62% 0.17 148); --up-soft: oklch(95% 0.05 148); --down: oklch(58% 0.22 25); --down-soft: oklch(95% 0.05 25); --violet: oklch(55% 0.17 280); --violet-soft: oklch(96% 0.04 280); /* Radii */ --r-xs: 8px; --r-sm: 10px; --r-md: 14px; --r-lg: 20px; --r-xl: 28px; --r-pill: 999px; /* Shadow */ --shadow-1: 0 1px 2px rgba(20, 18, 14, 0.04), 0 1px 1px rgba(20, 18, 14, 0.02); --shadow-2: 0 4px 16px rgba(20, 18, 14, 0.06), 0 1px 2px rgba(20, 18, 14, 0.03); --shadow-3: 0 12px 40px rgba(20, 18, 14, 0.08), 0 2px 4px rgba(20, 18, 14, 0.04); --sans: var(--font-geist-sans), ui-sans-serif, system-ui, -apple-system, 'Helvetica Neue', sans-serif; --mono: var(--font-geist-mono), ui-monospace, 'SF Mono', Menlo, monospace; } html[data-theme="dark"] { --bg: oklch(15% 0.008 85); --bg-sunk: oklch(12% 0.008 85); --bg-elev: oklch(20% 0.008 85); --surface: oklch(18% 0.008 85); --surface-2: oklch(21% 0.008 85); --surface-3: oklch(25% 0.01 85); --ink: oklch(97% 0.005 85); --ink-2: oklch(82% 0.006 85); --ink-3: oklch(62% 0.006 85); --ink-4: oklch(45% 0.006 85); --line: oklch(24% 0.008 85); --line-2: oklch(30% 0.01 85); --amber: oklch(78% 0.17 75); --amber-ink: oklch(82% 0.16 75); --amber-soft: oklch(25% 0.05 75); --amber-ring: oklch(38% 0.12 75); --up: oklch(70% 0.18 148); --up-soft: oklch(24% 0.06 148); --down: oklch(68% 0.22 25); --down-soft: oklch(24% 0.08 25); --violet: oklch(70% 0.17 280); --violet-soft: oklch(24% 0.06 280); --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.3); --shadow-2: 0 4px 16px rgba(0, 0, 0, 0.35); --shadow-3: 0 12px 40px rgba(0, 0, 0, 0.5); color-scheme: dark; } html[data-theme="dark"] .src-ico.x { background: oklch(92% 0.005 85); color: oklch(15% 0.008 85); } html[data-theme="dark"] .bot-status { background: linear-gradient(160deg, oklch(28% 0.015 85) 0%, oklch(20% 0.01 85) 100%); border: 1px solid oklch(30% 0.01 85); } html[data-theme="dark"] .kpi.accent { background: linear-gradient(135deg, oklch(28% 0.05 75), oklch(24% 0.07 70)); } html[data-theme="dark"] .landing-nav { background: oklch(15% 0.008 85 / 0.8); } html[data-theme="dark"] .src-ico.truth { background: oklch(30% 0.08 25); color: oklch(80% 0.15 25); } html[data-theme="dark"] .post-row.selected { background: oklch(22% 0.03 75); } html, body { margin: 0; padding: 0; background: var(--bg); color: var(--ink); font-family: var(--sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-feature-settings: 'ss01', 'cv11'; transition: background 200ms, color 200ms; } * { box-sizing: border-box; } button { font-family: inherit; cursor: pointer; border: 0; background: transparent; color: inherit; } input, textarea { font-family: inherit; } a { color: inherit; text-decoration: none; } .mono { font-family: var(--mono); font-feature-settings: 'tnum', 'zero'; } .tnum { font-variant-numeric: tabular-nums; } /* ============================================================ App scaffold ============================================================ */ .app { min-height: 100vh; display: flex; flex-direction: column; } /* ---------- Top navbar ---------- */ .nav { height: 64px; padding: 0 28px; display: flex; align-items: center; gap: 32px; background: var(--bg); border-bottom: 1px solid var(--line); position: sticky; top: 0; z-index: 40; } .brand { display: flex; align-items: center; gap: 10px; font-weight: 600; font-size: 15px; letter-spacing: -0.01em; } .brand-mark { width: 28px; height: 28px; border-radius: 8px; background: var(--ink); color: var(--bg); display: grid; place-items: center; font-family: var(--mono); font-size: 15px; font-weight: 500; position: relative; } .brand-mark::after { content: ''; position: absolute; right: -3px; bottom: -3px; width: 10px; height: 10px; border-radius: 999px; background: var(--amber); border: 2px solid var(--bg); } .nav-tabs { display: flex; align-items: center; gap: 4px; padding: 4px; background: var(--bg-sunk); border: 1px solid var(--line); border-radius: var(--r-pill); } .nav-tab { padding: 7px 14px; border-radius: var(--r-pill); font-size: 13px; font-weight: 500; color: var(--ink-3); transition: color 120ms, background 120ms; } .nav-tab:hover { color: var(--ink); } .nav-tab.active { background: var(--surface); color: var(--ink); box-shadow: var(--shadow-1); } .nav-spacer { flex: 1; } .nav-right { display: flex; align-items: center; gap: 10px; } .icon-btn { width: 36px; height: 36px; border-radius: var(--r-pill); background: var(--bg-sunk); border: 1px solid var(--line); display: grid; place-items: center; color: var(--ink-2); transition: background 120ms, color 120ms; } .icon-btn:hover { background: var(--surface-3); color: var(--ink); } .connect-btn { padding: 12px 22px; border-radius: var(--r-pill); background: var(--ink); color: var(--bg); font-size: 14px; font-weight: 600; letter-spacing: -0.005em; transition: background 120ms, transform 120ms, box-shadow 120ms; box-shadow: var(--shadow-1); } .connect-btn:hover { background: oklch(30% 0.01 85); box-shadow: var(--shadow-2); } .connect-btn:active { transform: scale(0.98); } .connect-btn.lg { padding: 13px 26px; font-size: 14px; } html[data-theme="dark"] .connect-btn { background: var(--amber); color: oklch(20% 0.04 75); } html[data-theme="dark"] .connect-btn:hover { background: oklch(82% 0.17 75); } .theme-toggle { width: 40px; height: 40px; } html[data-theme="dark"] .icon-btn { background: var(--surface-2); border-color: var(--line); } html[data-theme="dark"] .icon-btn:hover { background: var(--surface-3); } html[data-theme="dark"] .nav-tab.active { background: var(--surface-2); } html[data-theme="dark"] .asset-switch button.on { background: var(--surface-2); } .wallet-chip { display: flex; align-items: center; gap: 8px; padding: 6px 12px 6px 6px; border-radius: var(--r-pill); background: var(--bg-sunk); border: 1px solid var(--line); font-size: 13px; } .wallet-chip .ava { width: 24px; height: 24px; border-radius: 999px; background: linear-gradient(135deg, var(--amber), oklch(65% 0.2 35)); } .wallet-menu { display: none; position: absolute; right: 0; top: calc(100% + 6px); min-width: 180px; padding: 6px; z-index: 1000; background: var(--bg-elev); border: 1px solid var(--line); border-radius: var(--r-sm); box-shadow: var(--shadow-2); } .wallet-menu.open { display: block; } .wallet-menu button { width: 100%; padding: 8px 10px; font-size: 13px; text-align: left; border-radius: 6px; color: var(--ink); } .wallet-menu button:hover { background: var(--bg-sunk); } .wallet-menu button.danger { color: var(--down); } /* ============================================================ Page shell ============================================================ */ .page { max-width: 1360px; margin: 0 auto; padding: 32px 28px 80px; width: 100%; } .page.wide { max-width: 1600px; } .page-head { display: flex; align-items: flex-end; justify-content: space-between; margin-bottom: 28px; gap: 24px; } .page-title { font-size: 34px; letter-spacing: -0.02em; font-weight: 600; line-height: 1.05; margin: 0; } .page-sub { color: var(--ink-3); font-size: 14px; margin-top: 6px; margin-bottom: 0; } /* ============================================================ Cards + primitives ============================================================ */ .card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); padding: 20px; } .card.flush { padding: 0; } .card.soft { background: var(--bg-sunk); } .card.raise { box-shadow: var(--shadow-1); } .section-title { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; } .section-title h2 { margin: 0; font-size: 16px; font-weight: 600; letter-spacing: -0.01em; } .section-title .hint { font-size: 12px; color: var(--ink-3); } .chip { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: var(--r-pill); background: var(--bg-sunk); border: 1px solid var(--line); font-size: 12px; color: var(--ink-2); font-weight: 500; } .chip .dot { width: 6px; height: 6px; border-radius: 999px; background: currentColor; } .chip.up { color: oklch(40% 0.16 148); background: var(--up-soft); border-color: oklch(85% 0.08 148); } .chip.down { color: oklch(44% 0.2 25); background: var(--down-soft); border-color: oklch(87% 0.08 25); } .chip.amber { color: var(--amber-ink); background: var(--amber-soft); border-color: var(--amber-ring); } .chip.violet { color: oklch(38% 0.15 280); background: var(--violet-soft); border-color: oklch(86% 0.08 280); } .chip.neutral { color: var(--ink-2); } .live-dot { width: 6px; height: 6px; border-radius: 999px; background: var(--up); position: relative; display: inline-block; } .live-dot::after { content: ''; position: absolute; inset: -4px; border-radius: 999px; background: var(--up); opacity: 0.3; animation: pulse 1.6s ease-out infinite; } @keyframes pulse { 0% { transform: scale(0.6); opacity: 0.5; } 100% { transform: scale(2.2); opacity: 0; } } .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 16px; border-radius: var(--r-pill); font-size: 13px; font-weight: 500; transition: background 120ms, transform 120ms; border: 1px solid transparent; } .btn.primary { background: var(--ink); color: var(--bg); } .btn.primary:hover { background: oklch(30% 0.01 85); } .btn.amber { background: var(--amber); color: oklch(22% 0.04 75); font-weight: 600; } .btn.amber:hover { background: oklch(82% 0.17 75); } .btn.ghost { background: var(--bg-sunk); color: var(--ink); border-color: var(--line); } .btn.ghost:hover { background: var(--surface-3); } .btn.lg { padding: 14px 22px; font-size: 15px; } .btn:active { transform: scale(0.98); } .delta { font-family: var(--mono); font-weight: 500; } .delta.up { color: oklch(42% 0.16 148); } .delta.down { color: oklch(46% 0.2 25); } /* ── iOS-style toggle switch ──────────────────────────────── */ .switch { position: relative; display: inline-block; width: 34px; height: 20px; flex-shrink: 0; } .switch input { opacity: 0; width: 0; height: 0; } .switch-track { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background: var(--line-2); border-radius: 999px; transition: background 160ms; } .switch-track::before { content: ''; position: absolute; height: 16px; width: 16px; left: 2px; top: 2px; background: #fff; border-radius: 50%; transition: transform 160ms; box-shadow: 0 1px 2px rgba(0,0,0,0.15); } .switch input:checked + .switch-track { background: var(--amber); } .switch input:checked + .switch-track::before { transform: translateX(14px); } .switch.up input:checked + .switch-track { background: var(--up); } .switch.down input:checked + .switch-track { background: var(--down); } /* ── Form row: label | control, strict-aligned ─────────────── */ .form-row { display: grid; grid-template-columns: 200px 1fr; align-items: center; gap: 24px; padding: 14px 0; } .form-row + .form-row { border-top: 1px solid var(--line); } .form-row-label { font-size: 13px; font-weight: 500; color: var(--ink); } .form-row-label .hint { display: block; font-size: 11px; font-weight: 400; color: var(--ink-4); margin-top: 3px; } .form-row-control { display: flex; align-items: center; gap: 10px; min-width: 0; } /* ── Section divider with label ────────────────────────────── */ .section-head { display: flex; align-items: center; gap: 12px; margin: 10px 0 2px; padding-top: 18px; border-top: 1px solid var(--line); } .section-head:first-child { border-top: 0; padding-top: 0; } .section-head-label { font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-4); } /* ── Inline $ prefix input ─────────────────────────────────── */ .num-field { display: inline-flex; align-items: center; background: var(--bg-sunk); border: 1px solid var(--line); border-radius: var(--r-sm); padding: 0 10px; transition: border-color 120ms, background 120ms; } .num-field:focus-within { border-color: var(--amber-ring); background: var(--bg); } .num-field[data-disabled='true'] { opacity: 0.4; pointer-events: none; } .num-field .prefix, .num-field .suffix { font-size: 12px; color: var(--ink-3); font-family: var(--mono); } .num-field input { border: 0; background: transparent; font-family: var(--mono); font-size: 13px; padding: 8px 6px; width: 80px; outline: none; color: var(--ink); } .num-field input::-webkit-inner-spin-button, .num-field input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } /* ── Slider: unified look ──────────────────────────────────── */ .slider-field { flex: 1; display: flex; flex-direction: column; gap: 4px; } .slider-field input[type=range] { -webkit-appearance: none; width: 100%; height: 4px; background: var(--line-2); border-radius: 999px; outline: none; } .slider-field input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 16px; height: 16px; background: var(--amber); border: 2px solid var(--bg); border-radius: 50%; box-shadow: 0 1px 3px rgba(0,0,0,0.18); cursor: pointer; } .slider-field .ticks { display: flex; justify-content: space-between; font-size: 10px; color: var(--ink-4); font-variant-numeric: tabular-nums; } .slider-readout { font-family: var(--mono); font-size: 14px; font-weight: 600; min-width: 48px; text-align: right; color: var(--ink); font-variant-numeric: tabular-nums; } /* ============================================================ Dashboard specific ============================================================ */ .dash-grid { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 20px; align-items: start; } .hero-value { font-size: 44px; font-weight: 500; letter-spacing: -0.025em; line-height: 1; font-family: var(--mono); font-feature-settings: 'tnum'; } .hero-value .cents { color: var(--ink-3); font-size: 0.6em; } .asset-switch { display: inline-flex; padding: 4px; background: var(--bg-sunk); border: 1px solid var(--line); border-radius: var(--r-pill); gap: 2px; } .asset-switch button { padding: 7px 14px; border-radius: var(--r-pill); font-size: 13px; font-weight: 500; color: var(--ink-3); display: flex; align-items: center; gap: 6px; } .asset-switch button.on { background: var(--surface); color: var(--ink); box-shadow: var(--shadow-1); } .asset-dot { width: 14px; height: 14px; border-radius: 999px; } .asset-dot.btc { background: linear-gradient(135deg, #f7931a, #f2a93b); } .asset-dot.eth { background: linear-gradient(135deg, #627eea, #8fa2ff); } .tf-bar { display: inline-flex; gap: 2px; padding: 3px; background: var(--bg-sunk); border: 1px solid var(--line); border-radius: var(--r-pill); } .tf-bar button { padding: 5px 10px; border-radius: var(--r-pill); font-size: 12px; font-weight: 500; color: var(--ink-3); font-family: var(--mono); } .tf-bar button.on { background: var(--ink); color: var(--bg); } .chart-wrap { margin-top: 8px; position: relative; height: 360px; } .chart-footnote { display: flex; gap: 18px; font-size: 12px; color: var(--ink-3); border-top: 1px dashed var(--line); padding-top: 14px; margin-top: 4px; } .chart-footnote .item { display: flex; align-items: center; gap: 6px; } .legend-dot { width: 8px; height: 8px; border-radius: 2px; } /* KPI tiles */ .kpi-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 20px; } .kpi { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); padding: 16px 18px; display: flex; flex-direction: column; gap: 6px; position: relative; overflow: hidden; } .kpi .label { font-size: 12px; color: var(--ink-3); display: flex; align-items: center; gap: 6px; } .kpi .value { font-size: 22px; font-weight: 500; letter-spacing: -0.01em; font-family: var(--mono); } .kpi .foot { font-size: 12px; color: var(--ink-3); display: flex; align-items: center; gap: 6px; } .kpi.accent { background: linear-gradient(135deg, oklch(97% 0.04 85), oklch(95% 0.07 80)); border-color: var(--amber-ring); } .kpi.accent .label { color: var(--amber-ink); } /* Right rail */ .rail { display: flex; flex-direction: column; gap: 20px; } .signal-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); padding: 18px; } .signal-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; } .signal-head h3 { margin: 0; font-size: 14px; font-weight: 600; } .latest-post { border: 1px solid var(--line); border-radius: var(--r-sm); padding: 14px; background: var(--bg-sunk); } .latest-post .meta { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--ink-3); margin-bottom: 10px; } .latest-post .text { font-size: 13px; line-height: 1.55; color: var(--ink); margin: 0 0 12px; } .latest-post .divider { height: 1px; background: var(--line); margin: 12px 0; } .latest-post .lp-row { display: flex; justify-content: space-between; align-items: center; font-size: 12px; } .latest-post .lp-row + .lp-row { margin-top: 6px; } .latest-post .lp-row .k { color: var(--ink-3); } .confidence-bar { height: 6px; background: var(--surface-3); border-radius: 999px; overflow: hidden; position: relative; margin-top: 6px; } .confidence-bar > div { height: 100%; background: linear-gradient(90deg, var(--amber) 0%, oklch(68% 0.2 45) 100%); border-radius: 999px; transition: width 600ms ease-out; } .ai-metric-head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin-bottom: 8px; font-size: 13px; color: var(--ink-3); } .ai-metric-head strong { font-size: 18px; line-height: 1; color: var(--ink); font-family: var(--mono); font-weight: 600; letter-spacing: -0.02em; } .ai-reasoning-label { display: inline-flex; align-items: center; gap: 8px; margin-bottom: 10px; font-size: 12px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--amber-ink); } .ai-reasoning-label::before { content: ''; width: 8px; height: 8px; border-radius: 999px; background: linear-gradient(135deg, var(--amber), oklch(68% 0.2 45)); box-shadow: 0 0 0 4px color-mix(in oklab, var(--amber) 18%, transparent); } .ai-reasoning-card { padding: 16px 18px; background: linear-gradient(180deg, color-mix(in oklab, var(--amber-soft) 55%, var(--surface)) 0%, var(--bg-sunk) 100%); border-radius: 18px; border: 1px solid color-mix(in oklab, var(--amber-ring) 55%, var(--line)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7), var(--shadow-1); font-size: 15px; line-height: 1.78; color: var(--ink); } .ai-reasoning-card.scroll { max-height: 180px; overflow-y: auto; padding-right: 14px; } html[data-theme="dark"] .ai-reasoning-card { background: linear-gradient(180deg, color-mix(in oklab, var(--amber-soft) 30%, var(--surface-2)) 0%, var(--surface) 100%); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03), var(--shadow-1); } /* Bot status */ .bot-status { background: linear-gradient(160deg, oklch(22% 0.01 85) 0%, oklch(14% 0.01 85) 100%); color: oklch(96% 0.005 85); border-radius: var(--r-lg); padding: 22px; position: relative; overflow: hidden; } .bot-status::after { content: ''; position: absolute; right: -40px; top: -40px; width: 180px; height: 180px; background: radial-gradient(circle, oklch(75% 0.17 75 / 0.4) 0%, transparent 70%); pointer-events: none; } .bot-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 18px; } .bot-head h3 { margin: 0; font-size: 15px; font-weight: 600; display: flex; align-items: center; gap: 8px; } .bot-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 20px; position: relative; z-index: 1; } .bot-stat .k { font-size: 11px; color: oklch(70% 0.01 85); text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 4px; } .bot-stat .v { font-size: 20px; font-family: var(--mono); font-weight: 500; letter-spacing: -0.01em; } .bot-stat .v.up { color: oklch(75% 0.17 148); } .bot-stat .v.amber { color: var(--amber); } .bot-cta { margin-top: 18px; display: flex; gap: 8px; position: relative; z-index: 1; } .bot-cta .btn { flex: 1; } /* Post list (stream) */ .post-stream { display: flex; flex-direction: column; gap: 10px; } .post-row { display: flex; flex-direction: column; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); transition: border-color 120ms, background 120ms; cursor: pointer; overflow: hidden; } .post-row:hover { border-color: var(--line-2); } .post-row.selected { border-color: var(--amber-ring); background: oklch(99% 0.02 85); } .post-row-main { display: grid; grid-template-columns: 36px 1fr auto; gap: 14px; padding: 14px 16px; align-items: flex-start; } .post-row-detail { border-top: 1px solid var(--line); padding: 14px 16px; display: flex; flex-direction: column; gap: 14px; } .src-ico { width: 36px; height: 36px; border-radius: 10px; display: grid; place-items: center; font-family: var(--mono); font-weight: 600; font-size: 15px; flex-shrink: 0; } .src-ico.x { background: #111; color: #fff; } .src-ico.truth { background: oklch(94% 0.05 25); color: oklch(45% 0.2 25); } /* Non-Trump sources — distinct hues so the feed reads at a glance. */ .src-ico.breakout { background: oklch(94% 0.08 200); color: oklch(40% 0.15 220); } .src-ico.reversal { background: oklch(94% 0.08 300); color: oklch(40% 0.15 300); } .src-ico.whale { background: oklch(94% 0.08 150); color: oklch(40% 0.15 150); font-size: 13px; } .src-ico.manual { background: oklch(94% 0.05 60); color: oklch(45% 0.15 60); font-size: 13px; } .src-ico.external { background: var(--bg-sunk); color: var(--ink-2); } .post-body .meta { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; font-size: 12px; color: var(--ink-3); } .post-body .text { font-size: 14px; line-height: 1.5; color: var(--ink); margin: 0 0 10px; } .post-aside { display: flex; flex-direction: column; gap: 8px; align-items: flex-end; min-width: 120px; } /* Signal pill */ .sig { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border-radius: var(--r-pill); font-size: 12px; font-weight: 600; letter-spacing: 0.02em; } .sig.buy { background: var(--up-soft); color: oklch(38% 0.16 148); } .sig.sell, .sig.short { background: var(--down-soft); color: oklch(42% 0.2 25); } .sig.hold { background: var(--bg-sunk); color: var(--ink-2); } .impact-mini { display: flex; gap: 8px; align-items: center; font-family: var(--mono); font-size: 12px; } .impact-mini .tf { color: var(--ink-4); font-size: 11px; } /* Trades table */ .table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px; } .table th { text-align: left; font-weight: 500; color: var(--ink-3); padding: 14px 18px; border-bottom: 1px solid var(--line); font-size: 12px; background: var(--bg-sunk); } .table th:first-child { border-top-left-radius: var(--r-md); } .table th:last-child { border-top-right-radius: var(--r-md); text-align: right; } .table td { padding: 14px 18px; border-bottom: 1px solid var(--line); } .table td:last-child { text-align: right; } .table tr:last-child td { border-bottom: 0; } .table tr:hover td { background: var(--bg-sunk); } .side-pill { display: inline-flex; align-items: center; gap: 6px; padding: 3px 9px; border-radius: var(--r-pill); font-size: 12px; font-weight: 600; } .side-pill.long { background: var(--up-soft); color: oklch(38% 0.16 148); } .side-pill.short { background: var(--down-soft); color: oklch(42% 0.2 25); } /* Settings */ .settings-grid { display: grid; grid-template-columns: 260px 1fr; gap: 32px; align-items: start; } .settings-side { position: sticky; top: 84px; display: flex; flex-direction: column; gap: 2px; } .settings-side button { text-align: left; padding: 10px 14px; border-radius: var(--r-sm); font-size: 13px; color: var(--ink-2); font-weight: 500; } .settings-side button.on { background: var(--bg-sunk); color: var(--ink); } .settings-side button:hover { background: var(--bg-sunk); color: var(--ink); } .field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 20px; } .field label { font-size: 13px; font-weight: 500; } .field .hint { font-size: 12px; color: var(--ink-3); } .field input, .field select, .field textarea { border: 1px solid var(--line); background: var(--surface); border-radius: var(--r-sm); padding: 11px 14px; font-size: 14px; width: 100%; outline: none; transition: border-color 120ms, box-shadow 120ms; color: var(--ink); } .field input:focus, .field textarea:focus { border-color: var(--amber-ring); box-shadow: 0 0 0 3px oklch(88% 0.12 80 / 0.4); } .settings-switch { --w: 40px; width: var(--w); height: 24px; border-radius: 999px; background: var(--surface-3); position: relative; cursor: pointer; transition: background 150ms; border: 1px solid var(--line); flex-shrink: 0; } .settings-switch::after { content: ''; position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 999px; background: var(--surface); box-shadow: var(--shadow-1); transition: transform 180ms; } .settings-switch.on { background: var(--ink); border-color: var(--ink); } .settings-switch.on::after { transform: translateX(16px); } .setting-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; padding: 16px 0; border-bottom: 1px solid var(--line); } .setting-row:last-child { border-bottom: 0; } .setting-row .desc { font-size: 12px; color: var(--ink-3); margin-top: 4px; max-width: 440px; line-height: 1.5; } /* Analytics */ .metric-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; } @media (max-width: 1180px) { .dash-grid { grid-template-columns: 1fr; } .rail { order: -1; } } @media (max-width: 900px) { .nav { height: auto; min-height: 64px; padding: 12px 18px; flex-wrap: wrap; gap: 12px; } .brand { flex: 1; } .nav-tabs { order: 3; width: 100%; overflow-x: auto; justify-content: flex-start; } .nav-right { margin-left: auto; } .page { padding: 24px 18px 64px; } .page-head { align-items: flex-start; flex-direction: column; gap: 12px; } .page-title { font-size: 28px; } .kpi-row, .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .settings-grid, .form-row { grid-template-columns: 1fr; gap: 10px; } .settings-side { position: static; } .chart-footnote { flex-wrap: wrap; } .chart-footnote > div:last-child { margin-left: 0 !important; width: 100%; } .table { min-width: 760px; } .card.flush { overflow-x: auto !important; } } @media (max-width: 900px) { .nav-tabs { /* Edge-to-edge horizontal scroll with snap on mobile */ margin: 0 -18px; padding: 0 18px; gap: 4px; scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch; scrollbar-width: none; } .nav-tabs::-webkit-scrollbar { display: none; } .nav-tab { flex: 0 0 auto; scroll-snap-align: start; padding: 8px 12px; font-size: 13px; } } @media (max-width: 640px) { .nav { padding: 10px 14px; } .brand span:last-child { display: none; } .connect-btn.lg { padding: 9px 12px; font-size: 13px; } .wallet-chip { padding: 6px 10px !important; font-size: 12px; } .page { padding: 20px 14px 56px; } .kpi-row, .metric-grid { grid-template-columns: 1fr; } .row.between { align-items: flex-start; } .post-row-main { grid-template-columns: 32px 1fr; } .post-aside { grid-column: 2; align-items: flex-start; min-width: 0; } .src-ico { width: 32px; height: 32px; } .chart-wrap, .chart-wrap > div { height: 300px !important; } .hero-value { font-size: 34px; } .asset-switch, .tf-bar { max-width: 100%; overflow-x: auto; } footer { flex-wrap: wrap; padding: 18px 14px !important; } .card[style*='grid-template-columns: 1fr auto'] { grid-template-columns: 1fr !important; } /* Tables: horizontal-scroll with subtle hint rather than page overflow */ .card.flush { border-radius: 10px; } .table { font-size: 12px; } .table th, .table td { padding: 10px 12px !important; } /* Modals / dialogs on small screens */ .modal, .dialog { width: calc(100vw - 24px) !important; max-width: calc(100vw - 24px) !important; } } @media (max-width: 380px) { .nav { padding: 8px 12px; } .page { padding: 16px 12px 48px; } .page-title { font-size: 24px; } .hero-value { font-size: 28px; } .connect-btn.lg { padding: 8px 10px; font-size: 12px; } } /* Global safety: no page-level horizontal scroll */ html, body { max-width: 100%; overflow-x: hidden; } /* Misc utilities */ .stack { display: flex; flex-direction: column; } .row { display: flex; align-items: center; } .between { justify-content: space-between; } .gap-s { gap: 8px; } .gap-m { gap: 14px; } .gap-l { gap: 20px; } .grow { flex: 1; } .mono-num { font-family: var(--mono); font-variant-numeric: tabular-nums; } .muted { color: var(--ink-3); } .tiny { font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-3); font-weight: 500; } /* Scrollbar */ ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--line-2); border-radius: 999px; border: 2px solid var(--bg); } ::-webkit-scrollbar-thumb:hover { background: oklch(80% 0.01 85); } /* ── Skeleton / shimmer loading ───────────────────────────────────────────── Use .skeleton on any block element to get a shimmer placeholder. Combine with explicit width/height or min-height to shape the placeholder. .skeleton-card wraps a card-shaped block. */ @keyframes shimmer { 0% { background-position: -600px 0; } 100% { background-position: 600px 0; } } .skeleton { border-radius: 6px; background: linear-gradient( 90deg, var(--bg-sunk) 25%, color-mix(in srgb, var(--bg-sunk) 60%, var(--line)) 50%, var(--bg-sunk) 75% ); background-size: 1200px 100%; animation: shimmer 1.4s ease-in-out infinite; } .skeleton-card { border-radius: var(--r); border: 1px solid var(--line); padding: 20px; background: var(--bg-card); display: flex; flex-direction: column; gap: 10px; } /* Convenience shorthands */ .sk-line { height: 14px; } .sk-line-sm { height: 11px; } .sk-title { height: 20px; } .sk-w-full { width: 100%; } .sk-w-3q { width: 75%; } .sk-w-half { width: 50%; } .sk-w-q { width: 25%; }