:root { color-scheme: dark; --bg: #06080b; --bg-elevated: #0b1016; --bg-pane: #111820; --bg-pane-2: #0d141b; --bg-soft: rgba(255, 255, 255, 0.03); --border: rgba(255, 255, 255, 0.08); --border-strong: rgba(255, 177, 48, 0.35); --text: #e6edf4; --text-dim: #90a0b2; --text-faint: #6e7b8c; --accent: #f5a623; --accent-soft: rgba(245, 166, 35, 0.12); --green: #25c17a; --green-soft: rgba(37, 193, 122, 0.12); --red: #ff6b5f; --red-soft: rgba(255, 107, 95, 0.14); --blue: #4da3ff; --blue-soft: rgba(77, 163, 255, 0.14); --rail-width: 236px; --topbar-height: 76px; } * { box-sizing: border-box; } html, body { margin: 0; min-height: 100%; } body { min-height: 100vh; font-family: var(--font-sans), sans-serif; color: var(--text); background: radial-gradient(circle at top left, rgba(245, 166, 35, 0.12), transparent 26%), linear-gradient(180deg, #081017 0%, #05070a 100%); } a { color: inherit; text-decoration: none; } button, input { font: inherit; } .terminal-shell { min-height: 100vh; display: grid; grid-template-columns: var(--rail-width) minmax(0, 1fr); background: linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px), linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px), linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent 18%), var(--bg); background-size: 32px 32px, 32px 32px, 100% 100%, auto; } .terminal-rail { position: sticky; top: 0; height: 100vh; padding: 24px 18px; display: flex; flex-direction: column; gap: 24px; background: linear-gradient(180deg, rgba(11, 16, 22, 0.96), rgba(6, 8, 11, 0.98)); border-right: 1px solid var(--border); } .terminal-brand { display: grid; gap: 4px; } .terminal-brand-kicker { font-family: var(--font-display), sans-serif; font-size: 0.78rem; letter-spacing: 0.24em; color: var(--accent); } .terminal-brand-name { font-family: var(--font-display), sans-serif; font-size: 1.8rem; letter-spacing: 0.08em; text-transform: uppercase; } .terminal-nav { display: grid; gap: 6px; } .terminal-nav-link { padding: 12px 14px; border: 1px solid transparent; border-radius: 10px; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.78rem; transition: border-color 0.15s ease, background 0.15s ease, color 0.15s ease; } .terminal-nav-link:hover { border-color: var(--border); color: var(--text); background: var(--bg-soft); } .terminal-nav-link-active { border-color: var(--border-strong); color: var(--text); background: linear-gradient(90deg, rgba(245, 166, 35, 0.12), rgba(245, 166, 35, 0.04)); } .shell-metrics { margin-top: auto; display: grid; gap: 10px; } .shell-metric { padding: 12px 14px; border-radius: 10px; border: 1px solid var(--border); background: rgba(255, 255, 255, 0.02); } .shell-metric-label, .overview-label, .focus-label, .terminal-filter-label, .summary-title, .filter-label { display: block; margin-bottom: 6px; color: var(--text-faint); text-transform: uppercase; letter-spacing: 0.16em; font-size: 0.68rem; } .shell-metric-value, .overview-cell strong, .focus-value { font-family: var(--font-mono), monospace; font-size: 0.92rem; } .terminal-frame { min-width: 0; display: grid; grid-template-rows: var(--topbar-height) minmax(0, 1fr); } .terminal-topbar { position: sticky; top: 0; z-index: 20; display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 14px 24px; background: rgba(7, 10, 14, 0.92); backdrop-filter: blur(12px); border-bottom: 1px solid var(--border); } .feed-status-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } .feed-status { display: inline-flex; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 999px; border: 1px solid var(--border); background: rgba(255, 255, 255, 0.02); color: var(--text-dim); font-family: var(--font-mono), monospace; font-size: 0.75rem; } .feed-status-dot, .status-dot, .chart-dot { width: 8px; height: 8px; border-radius: 999px; background: var(--text-faint); } .feed-status-connected .feed-status-dot, .status-connected .status-dot, .chart-status-connected .chart-dot { background: var(--green); box-shadow: 0 0 0 4px rgba(37, 193, 122, 0.14); } .feed-status-connecting .feed-status-dot, .chart-status-connecting .chart-dot { background: var(--accent); box-shadow: 0 0 0 4px rgba(245, 166, 35, 0.12); animation: pulse 1.3s ease-in-out infinite; } .feed-status-disconnected .feed-status-dot, .status-disconnected .status-dot, .chart-status-disconnected .chart-dot { background: var(--red); box-shadow: 0 0 0 4px rgba(255, 107, 95, 0.12); } .terminal-topbar-controls { display: flex; align-items: flex-end; gap: 14px; flex-wrap: wrap; } .terminal-filter { display: grid; gap: 2px; min-width: clamp(220px, 22vw, 320px); flex: 0 1 320px; } .terminal-filter-label { margin-bottom: 0; line-height: 1; } .terminal-filter-field { position: relative; display: flex; align-items: center; min-height: 34px; } .terminal-filter-field::before, .terminal-filter-field::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; transition: opacity 160ms ease, transform 160ms ease, box-shadow 160ms ease, background 160ms ease; } .terminal-filter-field::before { height: 1px; background: linear-gradient(90deg, rgba(245, 166, 35, 0.88), rgba(245, 166, 35, 0.14)); opacity: 0.72; } .terminal-filter-field::after { height: 2px; background: linear-gradient(90deg, rgba(255, 216, 154, 0.98), rgba(245, 166, 35, 0.92)); transform: scaleX(0.18); transform-origin: left center; opacity: 0; } .terminal-input { min-width: 0; width: 100%; padding: 0 0 6px; border: none; border-radius: 0; background: transparent; color: var(--text); font-family: var(--font-mono), monospace; font-size: 0.92rem; font-weight: 600; letter-spacing: 0.01em; } .terminal-input::placeholder { color: rgba(193, 203, 224, 0.58); font-size: 0.86rem; } .terminal-filter:focus-within .terminal-filter-label { color: #ffd89a; } .terminal-filter:focus-within .terminal-filter-field::before { background: linear-gradient(90deg, rgba(255, 216, 154, 0.9), rgba(245, 166, 35, 0.26)); opacity: 0.94; } .terminal-filter:focus-within .terminal-filter-field::after { transform: scaleX(1); opacity: 1; box-shadow: 0 0 18px rgba(245, 166, 35, 0.34); } .terminal-filter:focus-within .terminal-input { color: #fff1cf; text-shadow: 0 0 14px rgba(245, 166, 35, 0.16); } .terminal-input:focus-visible, .filter-input:focus-visible { outline: none; } .terminal-button, .mode-button, .filter-clear, .jump-button, .pause-button, .interval-button, .overlay-toggle, .drawer-close { border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; background: rgba(255, 255, 255, 0.03); color: var(--text); cursor: pointer; text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.72rem; } .terminal-button:disabled, .filter-clear:disabled, .jump-button:disabled { opacity: 0.45; cursor: default; } .terminal-button-primary, .interval-button.active, .overlay-toggle.overlay-toggle-on, .mode-button { border-color: var(--border-strong); background: linear-gradient(180deg, rgba(245, 166, 35, 0.18), rgba(245, 166, 35, 0.08)); color: #ffd89a; } .pause-button { padding: 7px 10px; font-size: 0.66rem; } .terminal-content { min-width: 0; padding: 34px 24px 28px; } .page-shell { display: grid; gap: 18px; } .page-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .page-title, h1, h2, h3 { margin: 0; font-family: var(--font-display), sans-serif; text-transform: uppercase; letter-spacing: 0.08em; } .page-title { font-size: clamp(2rem, 3vw, 2.8rem); } .page-actions { display: flex; align-items: center; gap: 10px; } .overview-strip, .replay-matrix { display: grid; gap: 12px; grid-template-columns: repeat(6, minmax(0, 1fr)); } .overview-cell { min-width: 0; padding: 14px 16px; border: 1px solid var(--border); border-radius: 12px; background: linear-gradient(180deg, rgba(255, 255, 255, 0.035), rgba(255, 255, 255, 0.02)); } .page-grid { display: grid; gap: 16px; align-items: stretch; } .page-grid-overview { grid-template-columns: repeat(3, minmax(0, 1fr)); } .page-grid-tape { grid-template-columns: minmax(0, 1.5fr) minmax(320px, 1fr); } .page-grid-signals { grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-rows: minmax(0, 1fr); height: calc(100vh - var(--topbar-height) - 172px); min-height: 620px; } .page-grid-charts { grid-template-columns: minmax(0, 1.7fr) minmax(320px, 1fr); } .page-grid-replay { grid-template-columns: repeat(3, minmax(0, 1fr)); } .page-grid-overview > :nth-child(1), .page-grid-tape > :nth-child(1), .page-grid-replay > :nth-child(1) { grid-column: 1 / -1; } .terminal-pane { min-width: 0; height: 100%; display: flex; flex-direction: column; border: 1px solid var(--border); border-radius: 14px; background: linear-gradient(180deg, rgba(255, 255, 255, 0.03), transparent 40%), var(--bg-pane); overflow: hidden; } .terminal-pane-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 18px; border-bottom: 1px solid var(--border); background: rgba(255, 255, 255, 0.02); } .terminal-pane-title-row { display: flex; align-items: center; gap: 14px; min-width: 0; } .terminal-pane-title { font-size: 1rem; } .terminal-pane-status { min-width: 0; } .terminal-pane-actions, .card-controls, .chart-controls { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; } .terminal-pane-body, .card-body { display: flex; flex: 1 1 auto; min-height: 0; flex-direction: column; gap: 14px; padding: 16px 18px 18px; } .chart-panel { display: grid; gap: 12px; } .chart-meta { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-size: 0.8rem; color: var(--text-dim); } .chart-status { display: inline-flex; align-items: center; gap: 8px; } .chart-meta-time, .chart-hint, .overlay-legend, .timestamp, .drawer-subtitle, .drawer-note, .drawer-empty, .note, .time { color: var(--text-dim); } .chart-surface { width: 100%; height: 460px; border-radius: 12px; border: 1px solid var(--border); background: #0b1218; overflow: hidden; } .chart-empty { margin-top: -2px; } .chart-intervals { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .status span, .timestamp, .missed-count, .chart-hint, .meta, .note, .drawer-note, .drawer-row-meta { font-family: var(--font-mono), monospace; } .status-replay .status-dot { background: var(--blue); box-shadow: 0 0 0 4px rgba(77, 163, 255, 0.14); } .status-inline { display: inline-flex; align-items: center; gap: 8px; min-height: 32px; min-width: 0; font-family: var(--font-mono), monospace; } .status-inline-label { color: var(--text); font-size: 0.82rem; } .status-inline-meta { color: var(--text-dim); font-size: 0.72rem; } .status-inline-counter { min-width: 82px; color: var(--accent); font-size: 0.72rem; opacity: 0; transition: opacity 0.15s ease; } .status-inline-counter-visible { opacity: 1; } .tape-controls { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; } .missed-count { min-width: 62px; font-size: 0.72rem; color: var(--accent); text-align: right; } .list { display: flex; flex: 1 1 auto; min-height: 0; flex-direction: column; gap: 10px; overflow: auto; padding: 12px; padding-right: 8px; border: 1px solid var(--border); border-radius: 12px; background: linear-gradient(180deg, rgba(255, 255, 255, 0.03), rgba(0, 0, 0, 0.09)); align-self: stretch; } .terminal-list-compact { flex: 0 0 auto; max-height: 260px; } .page-grid-overview > :not(:first-child), .page-grid-replay > :not(:first-child) { height: clamp(430px, 58vh, 760px); } .page-grid-signals > .terminal-pane { height: 100%; min-height: 0; } .page-grid-tape > :first-child { height: clamp(460px, 64vh, 880px); } .page-grid-tape > :not(:first-child) { height: clamp(400px, 50vh, 680px); } .page-grid-charts > :first-child { height: auto; } .page-grid-charts > :last-child { height: clamp(430px, 58vh, 760px); } .row { display: flex; justify-content: space-between; gap: 14px; padding: 14px 16px; border-radius: 12px; border: 1px solid var(--border); background: linear-gradient(180deg, rgba(255, 255, 255, 0.035), rgba(255, 255, 255, 0.018)); } .row-button { width: 100%; text-align: left; color: inherit; } .row-button:hover { border-color: rgba(245, 166, 35, 0.25); background: linear-gradient(180deg, rgba(245, 166, 35, 0.07), rgba(255, 255, 255, 0.018)); } .contract, .drawer-row-title { margin-bottom: 6px; font-size: 0.92rem; font-weight: 600; } .meta, .drawer-row-meta, .flow-meta { display: flex; flex-wrap: wrap; gap: 10px; font-size: 0.76rem; } .pill, .drawer-chip, .flag { display: inline-flex; align-items: center; padding: 3px 8px; border-radius: 999px; border: 1px solid var(--border); font-size: 0.68rem; letter-spacing: 0.08em; text-transform: uppercase; } .structure-tag { border-color: rgba(77, 163, 255, 0.36); color: #9bcbff; background: var(--blue-soft); } .aggressor-tag, .direction-bullish, .severity-low, .flag { border-color: rgba(37, 193, 122, 0.34); color: #98f0c0; background: var(--green-soft); } .direction-bearish, .severity-high, .nbbo-missing { border-color: rgba(255, 107, 95, 0.34); color: #ffc3bd; background: var(--red-soft); } .direction-neutral, .severity-medium, .flag-muted, .nbbo-stale { border-color: rgba(77, 163, 255, 0.26); color: #bddcff; background: var(--blue-soft); } .nbbo-meta { margin-top: 8px; } .nbbo-side { position: relative; display: inline-flex; align-items: center; } .nbbo-tag { padding: 2px 6px; border-radius: 999px; border: 1px solid var(--border); font-size: 0.68rem; text-transform: uppercase; } .nbbo-tag-a, .nbbo-tag-aa { border-color: rgba(37, 193, 122, 0.34); color: #98f0c0; background: var(--green-soft); } .nbbo-tag-b, .nbbo-tag-bb { border-color: rgba(255, 107, 95, 0.34); color: #ffc3bd; background: var(--red-soft); } .nbbo-tooltip { position: absolute; right: 0; bottom: calc(100% + 10px); display: grid; gap: 4px; padding: 10px; border-radius: 10px; border: 1px solid var(--border); background: rgba(7, 10, 14, 0.96); box-shadow: 0 16px 40px rgba(0, 0, 0, 0.45); opacity: 0; pointer-events: none; transform: translateY(8px); transition: opacity 0.15s ease, transform 0.15s ease; z-index: 5; } .nbbo-tooltip-row { display: inline-flex; align-items: center; gap: 6px; font-size: 0.68rem; } .nbbo-side:hover .nbbo-tooltip, .nbbo-side:focus-within .nbbo-tooltip { opacity: 1; transform: translateY(0); } .alert-strips { display: grid; gap: 12px; } .alert-strip-section { display: grid; gap: 6px; } .alert-strip-header { display: flex; justify-content: space-between; gap: 12px; color: var(--text-faint); text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.68rem; } .alert-strip-bar { display: flex; height: 24px; overflow: hidden; border-radius: 999px; border: 1px solid var(--border); background: rgba(255, 255, 255, 0.03); } .strip-segment { display: flex; align-items: center; justify-content: center; font-size: 0.64rem; text-transform: uppercase; letter-spacing: 0.08em; color: #03130a; } .alert-strip-bar .severity-high, .alert-strip-bar .direction-bearish { background: rgba(255, 107, 95, 0.9); color: #230705; } .alert-strip-bar .severity-medium, .alert-strip-bar .direction-neutral { background: rgba(77, 163, 255, 0.9); color: #04111f; } .alert-strip-bar .severity-low, .alert-strip-bar .direction-bullish { background: rgba(37, 193, 122, 0.92); color: #03130a; } .focus-stack { display: grid; gap: 14px; } .focus-block { display: grid; gap: 8px; } .focus-value { font-size: 1.4rem; } .empty { padding: 18px; border-radius: 12px; border: 1px dashed var(--border); background: rgba(255, 255, 255, 0.02); color: var(--text-dim); } .drawer { position: fixed; top: 24px; right: 24px; width: min(420px, calc(100vw - 32px)); max-height: calc(100vh - 48px); overflow: auto; padding: 18px; border-radius: 14px; border: 1px solid rgba(245, 166, 35, 0.2); background: rgba(7, 10, 14, 0.97); box-shadow: 0 24px 70px rgba(0, 0, 0, 0.5); z-index: 40; } .drawer-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 12px; } .drawer-eyebrow { margin: 0 0 6px; font-size: 0.68rem; color: var(--accent); text-transform: uppercase; letter-spacing: 0.14em; } .drawer-meta { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; } .drawer-section { display: grid; gap: 10px; margin-bottom: 18px; } .drawer-section h4 { margin: 0; color: var(--text-faint); text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.72rem; } .drawer-list { display: grid; gap: 10px; } .drawer-row { padding: 12px 14px; border-radius: 12px; border: 1px solid var(--border); background: rgba(255, 255, 255, 0.02); } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.18); } 100% { transform: scale(1); } } @media (max-width: 1180px) { .terminal-shell { grid-template-columns: 1fr; } .terminal-rail { position: static; height: auto; border-right: 0; border-bottom: 1px solid var(--border); } .shell-metrics { margin-top: 0; grid-template-columns: repeat(4, minmax(0, 1fr)); } } @media (max-width: 980px) { .page-grid-overview, .page-grid-tape, .page-grid-signals, .page-grid-charts, .page-grid-replay, .overview-strip, .replay-matrix, .shell-metrics { grid-template-columns: minmax(0, 1fr); } .page-grid-overview > :nth-child(1), .page-grid-tape > :nth-child(1), .page-grid-replay > :nth-child(1) { grid-column: auto; grid-row: auto; } .page-grid-overview > :not(:first-child), .page-grid-signals > .terminal-pane, .page-grid-replay > :not(:first-child), .page-grid-tape > :first-child, .page-grid-tape > :not(:first-child), .page-grid-charts > :last-child { height: auto; } .page-grid-signals { grid-template-rows: auto; min-height: 0; } .terminal-topbar { position: static; height: auto; flex-direction: column; align-items: stretch; } } @media (max-width: 720px) { .terminal-content { padding: 18px 14px 22px; } .page-header, .terminal-pane-head, .chart-controls, .card-controls, .terminal-pane-actions { flex-direction: column; align-items: flex-start; } .terminal-pane-title-row { flex-direction: column; align-items: flex-start; } .terminal-topbar-controls { width: 100%; } .terminal-filter { width: 100%; flex-basis: 100%; } .terminal-input { width: 100%; } .row { flex-direction: column; align-items: flex-start; } .time { text-align: left; } .chart-surface { height: 320px; } .drawer { position: static; width: auto; max-height: none; margin-top: 14px; } }