islandflow/apps/web/app/globals.css
2026-03-28 21:15:19 -04:00

1248 lines
22 KiB
CSS

:root {
color-scheme: dark;
--bg-0: #071018;
--bg-1: #0b1721;
--bg-2: #10202c;
--panel: rgba(10, 21, 31, 0.86);
--panel-strong: rgba(13, 28, 40, 0.95);
--panel-border: rgba(156, 185, 210, 0.16);
--panel-border-strong: rgba(156, 185, 210, 0.28);
--text-0: #edf4fb;
--text-1: #c5d4e1;
--text-2: #8fa6bb;
--grid: rgba(121, 150, 173, 0.08);
--green: #59d98e;
--green-soft: rgba(89, 217, 142, 0.12);
--red: #ff8e63;
--red-soft: rgba(255, 142, 99, 0.14);
--blue: #67b9ff;
--blue-soft: rgba(103, 185, 255, 0.14);
--amber: #f7c56b;
--amber-soft: rgba(247, 197, 107, 0.14);
--shadow: 0 28px 80px rgba(0, 0, 0, 0.32);
--font-display: "Iowan Old Style", "Book Antiqua", "Palatino Linotype", Georgia, serif;
--font-data: "IBM Plex Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
"Liberation Mono", "Courier New", monospace;
}
* {
box-sizing: border-box;
}
html {
min-height: 100%;
background: var(--bg-0);
}
body {
margin: 0;
min-height: 100vh;
background:
radial-gradient(circle at top left, rgba(103, 185, 255, 0.18), transparent 28%),
radial-gradient(circle at top right, rgba(89, 217, 142, 0.1), transparent 22%),
linear-gradient(180deg, #08111a 0%, #09141d 40%, #071018 100%);
color: var(--text-0);
font-family: var(--font-data);
}
body::before {
content: "";
position: fixed;
inset: 0;
pointer-events: none;
background:
linear-gradient(90deg, transparent 0, transparent calc(100% - 1px), var(--grid) calc(100% - 1px)),
linear-gradient(180deg, transparent 0, transparent calc(100% - 1px), var(--grid) calc(100% - 1px));
background-size: 72px 72px;
mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.75), transparent 92%);
}
button,
input {
font: inherit;
}
button {
cursor: pointer;
}
a {
color: inherit;
text-decoration: none;
}
.terminal-shell {
min-height: 100vh;
display: grid;
grid-template-columns: 280px minmax(0, 1fr);
}
.terminal-rail {
position: sticky;
top: 0;
align-self: start;
height: 100vh;
padding: 28px 24px;
border-right: 1px solid var(--panel-border);
background: linear-gradient(180deg, rgba(9, 20, 29, 0.98), rgba(7, 16, 24, 0.94));
display: grid;
grid-template-rows: auto auto 1fr;
gap: 24px;
backdrop-filter: blur(18px);
}
.terminal-brand {
display: grid;
gap: 10px;
}
.terminal-mark {
font-family: var(--font-display);
font-size: 2.1rem;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.terminal-tag {
margin: 0;
color: var(--text-2);
line-height: 1.7;
font-size: 0.8rem;
}
.rail-nav {
display: grid;
gap: 10px;
}
.rail-link {
display: grid;
gap: 4px;
padding: 14px 16px;
border: 1px solid transparent;
border-radius: 18px;
color: var(--text-1);
background: rgba(255, 255, 255, 0.02);
transition: border-color 0.18s ease, background 0.18s ease, transform 0.18s ease;
}
.rail-link:hover,
.rail-link:focus-visible {
border-color: var(--panel-border-strong);
background: rgba(255, 255, 255, 0.04);
transform: translateX(2px);
}
.rail-link-active {
border-color: rgba(103, 185, 255, 0.38);
background:
linear-gradient(135deg, rgba(103, 185, 255, 0.14), transparent 55%),
rgba(255, 255, 255, 0.04);
color: var(--text-0);
}
.rail-link-label {
font-size: 0.86rem;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.rail-link-copy {
color: var(--text-2);
font-size: 0.72rem;
}
.rail-summary {
align-self: end;
display: grid;
gap: 8px;
padding: 16px 18px;
border-radius: 22px;
border: 1px solid var(--panel-border);
background: rgba(255, 255, 255, 0.03);
color: var(--text-1);
font-size: 0.78rem;
line-height: 1.6;
}
.rail-summary-label {
color: var(--text-2);
text-transform: uppercase;
letter-spacing: 0.18em;
font-size: 0.68rem;
}
.terminal-main {
padding: 28px 32px 44px;
display: grid;
gap: 24px;
}
.desk-header {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 24px;
flex-wrap: wrap;
}
.desk-header-copy {
max-width: 720px;
display: grid;
gap: 10px;
}
.desk-kicker {
margin: 0;
color: var(--amber);
letter-spacing: 0.3em;
text-transform: uppercase;
font-size: 0.7rem;
}
.desk-header h1 {
margin: 0;
font-family: var(--font-display);
font-size: clamp(2.5rem, 5vw, 4.4rem);
font-weight: 600;
line-height: 0.92;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.desk-header p {
margin: 0;
color: var(--text-1);
max-width: 760px;
line-height: 1.7;
}
.desk-session {
display: grid;
grid-template-columns: repeat(2, minmax(180px, 1fr));
gap: 14px;
}
.session-card {
min-width: 180px;
display: grid;
gap: 8px;
padding: 16px 18px;
border-radius: 22px;
border: 1px solid var(--panel-border);
background:
linear-gradient(135deg, rgba(103, 185, 255, 0.08), transparent 52%),
var(--panel);
box-shadow: var(--shadow);
}
.session-card strong {
font-size: 1rem;
}
.session-card span {
color: var(--text-1);
font-size: 0.75rem;
line-height: 1.6;
}
.session-label {
color: var(--text-2);
text-transform: uppercase;
letter-spacing: 0.18em;
}
.command-strip {
display: grid;
gap: 14px;
padding: 18px 20px;
border-radius: 24px;
border: 1px solid var(--panel-border);
background:
linear-gradient(135deg, rgba(89, 217, 142, 0.08), transparent 42%),
var(--panel-strong);
box-shadow: var(--shadow);
}
.command-primary {
display: flex;
align-items: flex-end;
gap: 12px;
flex-wrap: wrap;
}
.filter-block {
display: grid;
gap: 8px;
min-width: min(420px, 100%);
flex: 1 1 360px;
}
.filter-label {
color: var(--text-2);
text-transform: uppercase;
letter-spacing: 0.18em;
font-size: 0.68rem;
}
.filter-input {
width: 100%;
border: 1px solid rgba(156, 185, 210, 0.26);
border-radius: 16px;
padding: 14px 16px;
background: rgba(255, 255, 255, 0.04);
color: var(--text-0);
}
.filter-input::placeholder {
color: var(--text-2);
}
.filter-input:focus-visible {
outline: 2px solid rgba(103, 185, 255, 0.35);
outline-offset: 2px;
}
.filter-clear,
.mode-button,
.interval-button,
.overlay-toggle,
.jump-button,
.pause-button,
.drawer-close {
border: 1px solid rgba(156, 185, 210, 0.24);
border-radius: 999px;
padding: 10px 14px;
background: rgba(255, 255, 255, 0.04);
color: var(--text-1);
letter-spacing: 0.12em;
text-transform: uppercase;
font-size: 0.68rem;
}
.mode-button {
background: rgba(103, 185, 255, 0.12);
color: #d7ecff;
border-color: rgba(103, 185, 255, 0.28);
}
.filter-clear:disabled,
.jump-button:disabled {
opacity: 0.5;
cursor: default;
}
.command-secondary {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
}
.command-caption {
color: var(--text-2);
font-size: 0.76rem;
}
.command-focus-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.focus-pill {
border: 1px solid rgba(156, 185, 210, 0.2);
border-radius: 999px;
padding: 8px 12px;
background: rgba(255, 255, 255, 0.04);
color: var(--text-1);
font-size: 0.72rem;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.focus-pill-active,
.interval-button.active,
.overlay-toggle-on {
border-color: rgba(89, 217, 142, 0.34);
background: rgba(89, 217, 142, 0.12);
color: #dcffee;
}
.view-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 20px;
align-items: start;
}
.panel-span-two {
grid-column: span 2;
}
.panel {
min-height: 320px;
display: flex;
flex-direction: column;
gap: 18px;
padding: 22px;
border-radius: 28px;
border: 1px solid var(--panel-border);
background:
linear-gradient(135deg, rgba(103, 185, 255, 0.05), transparent 44%),
linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent 100%),
var(--panel);
box-shadow: var(--shadow);
animation: rise 420ms ease both;
}
.view-grid > .panel:nth-child(2) {
animation-delay: 0.05s;
}
.view-grid > .panel:nth-child(3) {
animation-delay: 0.1s;
}
.view-grid > .panel:nth-child(4) {
animation-delay: 0.15s;
}
.panel-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
}
.panel-header-copy {
display: grid;
gap: 6px;
}
.panel-eyebrow {
color: var(--amber);
text-transform: uppercase;
letter-spacing: 0.22em;
font-size: 0.68rem;
}
.panel-title {
margin: 0;
font-family: var(--font-display);
font-size: 1.7rem;
font-weight: 600;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.panel-subtitle {
margin: 0;
color: var(--text-2);
line-height: 1.6;
font-size: 0.78rem;
max-width: 620px;
}
.panel-actions {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.panel-stack {
min-height: 0;
flex: 1 1 auto;
display: flex;
flex-direction: column;
gap: 16px;
}
.panel-chart {
min-height: 640px;
}
.panel-tape,
.panel-flow,
.panel-signals {
min-height: 760px;
}
.panel-pulse {
min-height: 640px;
}
.panel-focus,
.panel-health {
min-height: 420px;
}
.metric-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px;
}
.metric-card {
display: grid;
gap: 8px;
padding: 16px;
border-radius: 18px;
border: 1px solid rgba(156, 185, 210, 0.16);
background: rgba(255, 255, 255, 0.035);
}
.metric-card-bullish {
background: linear-gradient(180deg, rgba(89, 217, 142, 0.12), rgba(255, 255, 255, 0.02));
}
.metric-card-bearish {
background: linear-gradient(180deg, rgba(255, 142, 99, 0.14), rgba(255, 255, 255, 0.02));
}
.metric-card-signal {
background: linear-gradient(180deg, rgba(247, 197, 107, 0.15), rgba(255, 255, 255, 0.02));
}
.metric-label {
color: var(--text-2);
text-transform: uppercase;
letter-spacing: 0.18em;
font-size: 0.65rem;
}
.metric-value {
font-size: 1.2rem;
}
.metric-foot {
color: var(--text-1);
line-height: 1.6;
font-size: 0.72rem;
}
.spotlight-stack {
display: grid;
gap: 12px;
}
.spotlight-card {
display: grid;
gap: 12px;
padding: 16px;
border-radius: 20px;
border: 1px solid rgba(156, 185, 210, 0.16);
background: rgba(255, 255, 255, 0.03);
}
.spotlight-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.spotlight-label {
color: var(--text-2);
text-transform: uppercase;
letter-spacing: 0.18em;
font-size: 0.65rem;
}
.spotlight-button {
width: 100%;
display: grid;
gap: 8px;
border: 0;
padding: 0;
background: transparent;
color: var(--text-0);
text-align: left;
}
.spotlight-button strong {
font-family: var(--font-display);
font-size: 1.2rem;
text-transform: uppercase;
letter-spacing: 0.04em;
}
.spotlight-button span,
.spotlight-empty {
color: var(--text-1);
line-height: 1.7;
font-size: 0.78rem;
}
.focus-grid {
display: grid;
gap: 12px;
}
.focus-chip {
display: grid;
gap: 6px;
width: 100%;
padding: 16px;
border-radius: 18px;
border: 1px solid rgba(156, 185, 210, 0.18);
background: rgba(255, 255, 255, 0.03);
text-align: left;
color: var(--text-0);
}
.focus-chip-active {
border-color: rgba(103, 185, 255, 0.4);
background: rgba(103, 185, 255, 0.1);
}
.focus-chip-bullish {
box-shadow: inset 0 0 0 1px rgba(89, 217, 142, 0.24);
}
.focus-chip-bearish {
box-shadow: inset 0 0 0 1px rgba(255, 142, 99, 0.24);
}
.focus-symbol {
font-size: 1.1rem;
letter-spacing: 0.14em;
text-transform: uppercase;
}
.focus-meta,
.focus-time {
color: var(--text-1);
font-size: 0.72rem;
}
.health-grid {
display: grid;
gap: 12px;
}
.health-card {
display: grid;
gap: 8px;
padding: 15px 16px;
border-radius: 18px;
border: 1px solid rgba(156, 185, 210, 0.16);
background: rgba(255, 255, 255, 0.03);
}
.health-card-top {
display: flex;
align-items: center;
gap: 10px;
}
.health-card-meta {
display: grid;
gap: 4px;
color: var(--text-1);
font-size: 0.72rem;
}
.health-dot,
.status-dot,
.chart-dot {
width: 10px;
height: 10px;
border-radius: 999px;
background: var(--amber);
box-shadow: 0 0 0 5px rgba(247, 197, 107, 0.12);
}
.health-dot-connected,
.status-connected .status-dot,
.chart-status-connected .chart-dot {
background: var(--green);
box-shadow: 0 0 0 5px rgba(89, 217, 142, 0.14);
}
.health-dot-connecting,
.chart-status-connecting .chart-dot {
background: var(--blue);
box-shadow: 0 0 0 5px rgba(103, 185, 255, 0.12);
animation: pulse 1.3s ease-in-out infinite;
}
.health-dot-disconnected,
.chart-status-disconnected .chart-dot {
background: var(--red);
box-shadow: 0 0 0 5px rgba(255, 142, 99, 0.12);
}
.health-dot-paused {
background: var(--amber);
}
.card-controls,
.chart-controls,
.chart-meta {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
}
.chart-hint,
.chart-meta-time,
.overlay-legend,
.timestamp {
color: var(--text-2);
font-size: 0.72rem;
}
.chart-status {
display: inline-flex;
align-items: center;
gap: 8px;
color: var(--text-1);
}
.chart-panel {
display: grid;
gap: 14px;
}
.chart-surface {
width: 100%;
height: 420px;
border-radius: 22px;
border: 1px solid rgba(156, 185, 210, 0.16);
background: #0c1721;
overflow: hidden;
}
.chart-empty {
margin-top: -2px;
}
.status {
display: grid;
gap: 6px;
min-width: 190px;
padding: 14px 16px;
border-radius: 18px;
border: 1px solid rgba(156, 185, 210, 0.16);
background: rgba(255, 255, 255, 0.03);
}
.status-compact {
padding: 12px 14px;
}
.status-paused {
background: rgba(247, 197, 107, 0.08);
}
.status-replay .status-dot {
background: var(--blue);
box-shadow: 0 0 0 5px rgba(103, 185, 255, 0.14);
}
.status-connecting .status-dot {
animation: pulse 1.3s ease-in-out infinite;
}
.pause-button {
justify-self: start;
}
.tape-controls {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 8px;
}
.jump-button:not(:disabled) {
border-color: rgba(89, 217, 142, 0.28);
background: rgba(89, 217, 142, 0.12);
color: #dcffee;
}
.missed-count {
color: var(--blue);
font-size: 0.68rem;
letter-spacing: 0.12em;
text-transform: uppercase;
opacity: 0;
transform: translateY(-4px);
transition: opacity 0.18s ease, transform 0.18s ease;
}
.tape-controls-active .missed-count {
opacity: 1;
transform: translateY(0);
}
.list {
min-height: 340px;
height: 100%;
overflow: auto;
padding-right: 6px;
display: grid;
gap: 12px;
scrollbar-gutter: stable;
}
.row {
display: flex;
justify-content: space-between;
gap: 16px;
padding: 14px 16px;
border-radius: 18px;
border: 1px solid rgba(156, 185, 210, 0.12);
background: rgba(255, 255, 255, 0.04);
}
.row-button {
width: 100%;
text-align: left;
color: inherit;
border: 0;
}
.row-button:hover,
.row-button:focus-visible,
.focus-chip:hover,
.focus-chip:focus-visible,
.focus-pill:hover,
.focus-pill:focus-visible,
.spotlight-button:hover,
.spotlight-button:focus-visible,
.rail-link:focus-visible,
.mode-button:focus-visible,
.filter-clear:focus-visible,
.interval-button:focus-visible,
.overlay-toggle:focus-visible,
.pause-button:focus-visible,
.jump-button:focus-visible,
.drawer-close:focus-visible {
outline: 2px solid rgba(103, 185, 255, 0.32);
outline-offset: 2px;
}
.row-button:hover {
border-color: rgba(103, 185, 255, 0.24);
}
.contract {
margin-bottom: 6px;
font-weight: 600;
}
.meta,
.drawer-row-meta {
display: flex;
flex-wrap: wrap;
gap: 10px;
color: var(--text-1);
font-size: 0.75rem;
line-height: 1.6;
}
.flow-meta span {
display: inline-flex;
align-items: center;
gap: 6px;
}
.pill,
.drawer-chip {
display: inline-flex;
align-items: center;
padding: 2px 8px;
border-radius: 999px;
border: 1px solid rgba(156, 185, 210, 0.18);
background: rgba(255, 255, 255, 0.04);
color: var(--text-1);
text-transform: uppercase;
letter-spacing: 0.08em;
font-size: 0.64rem;
}
.structure-tag,
.aggressor-tag,
.flag {
border-color: rgba(103, 185, 255, 0.24);
background: rgba(103, 185, 255, 0.12);
color: #d8eeff;
}
.flag-muted {
border-color: rgba(156, 185, 210, 0.18);
background: rgba(255, 255, 255, 0.04);
color: var(--text-2);
}
.nbbo-meta {
font-size: 0.7rem;
}
.nbbo-side {
position: relative;
display: inline-flex;
align-items: center;
}
.nbbo-tag {
display: inline-flex;
align-items: center;
padding: 2px 6px;
border-radius: 999px;
border: 1px solid rgba(156, 185, 210, 0.18);
font-size: 0.64rem;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.nbbo-tag-a,
.direction-bullish,
.severity-low {
border-color: rgba(89, 217, 142, 0.28);
background: rgba(89, 217, 142, 0.12);
color: #dcffee;
}
.nbbo-tag-aa {
border-color: rgba(89, 217, 142, 0.42);
background: rgba(89, 217, 142, 0.18);
color: #e9fff3;
}
.nbbo-tag-b,
.direction-bearish,
.severity-high {
border-color: rgba(255, 142, 99, 0.32);
background: rgba(255, 142, 99, 0.14);
color: #ffe7df;
}
.nbbo-tag-bb {
border-color: rgba(255, 142, 99, 0.46);
background: rgba(255, 142, 99, 0.2);
color: #fff0ea;
}
.direction-neutral,
.severity-medium {
border-color: rgba(103, 185, 255, 0.26);
background: rgba(103, 185, 255, 0.12);
color: #d8eeff;
}
.nbbo-missing,
.nbbo-stale {
border-color: rgba(247, 197, 107, 0.26);
background: rgba(247, 197, 107, 0.12);
color: #ffeec4;
}
.nbbo-tooltip {
position: absolute;
right: 0;
bottom: calc(100% + 8px);
min-width: 160px;
display: grid;
gap: 6px;
padding: 10px;
border-radius: 14px;
border: 1px solid rgba(156, 185, 210, 0.18);
background: rgba(9, 20, 29, 0.96);
box-shadow: var(--shadow);
opacity: 0;
pointer-events: none;
transform: translateY(6px);
transition: opacity 0.15s ease, transform 0.15s ease;
z-index: 10;
}
.nbbo-side:hover .nbbo-tooltip,
.nbbo-side:focus-within .nbbo-tooltip {
opacity: 1;
transform: translateY(0);
}
.nbbo-tooltip-row {
display: inline-flex;
align-items: center;
gap: 8px;
color: var(--text-1);
font-size: 0.68rem;
}
.note,
.drawer-note,
.drawer-empty,
.empty {
color: var(--text-1);
line-height: 1.7;
font-size: 0.74rem;
}
.time {
color: var(--text-2);
font-size: 0.72rem;
text-align: right;
}
.empty {
padding: 20px;
border-radius: 18px;
border: 1px dashed rgba(156, 185, 210, 0.18);
background: rgba(255, 255, 255, 0.03);
}
.drawer {
position: fixed;
top: 24px;
right: 24px;
width: min(400px, calc(100vw - 48px));
max-height: calc(100vh - 48px);
overflow: auto;
padding: 20px;
border-radius: 26px;
border: 1px solid var(--panel-border-strong);
background: rgba(9, 20, 29, 0.98);
box-shadow: 0 28px 90px rgba(0, 0, 0, 0.44);
z-index: 40;
backdrop-filter: blur(18px);
}
.drawer-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 14px;
margin-bottom: 14px;
}
.drawer-eyebrow {
margin: 0 0 6px;
color: var(--amber);
text-transform: uppercase;
letter-spacing: 0.2em;
font-size: 0.66rem;
}
.drawer h3 {
margin: 0 0 4px;
font-family: var(--font-display);
font-size: 1.2rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.drawer-subtitle {
margin: 0;
color: var(--text-2);
font-size: 0.74rem;
}
.drawer-meta {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 18px;
}
.drawer-section {
margin-bottom: 20px;
}
.drawer-section h4 {
margin: 0 0 10px;
color: var(--text-2);
text-transform: uppercase;
letter-spacing: 0.18em;
font-size: 0.68rem;
}
.drawer-list {
display: grid;
gap: 10px;
}
.drawer-row {
padding: 12px 14px;
border-radius: 16px;
border: 1px solid rgba(156, 185, 210, 0.16);
background: rgba(255, 255, 255, 0.03);
}
.drawer-row-title {
margin-bottom: 6px;
font-weight: 600;
}
.alert-strips {
display: grid;
gap: 12px;
padding: 12px 14px;
border-radius: 18px;
border: 1px solid rgba(156, 185, 210, 0.16);
background: rgba(255, 255, 255, 0.03);
}
.alert-strip-section {
display: grid;
gap: 6px;
}
.alert-strip-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
color: var(--text-2);
text-transform: uppercase;
letter-spacing: 0.18em;
font-size: 0.64rem;
}
.alert-strip-bar {
display: flex;
height: 24px;
overflow: hidden;
border-radius: 999px;
border: 1px solid rgba(156, 185, 210, 0.16);
background: rgba(255, 255, 255, 0.03);
}
.strip-segment {
display: inline-flex;
align-items: center;
justify-content: center;
color: #061018;
font-size: 0.62rem;
letter-spacing: 0.08em;
text-transform: uppercase;
white-space: nowrap;
}
.alert-strip-bar .severity-high,
.alert-strip-bar .direction-bearish {
background: var(--red);
}
.alert-strip-bar .severity-medium,
.alert-strip-bar .direction-neutral {
background: var(--blue);
}
.alert-strip-bar .severity-low,
.alert-strip-bar .direction-bullish {
background: var(--green);
}
@keyframes pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.22);
}
100% {
transform: scale(1);
}
}
@keyframes rise {
from {
opacity: 0;
transform: translateY(14px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@media (max-width: 1340px) {
.terminal-shell {
grid-template-columns: 1fr;
}
.terminal-rail {
position: static;
height: auto;
grid-template-rows: auto auto auto;
border-right: 0;
border-bottom: 1px solid var(--panel-border);
}
.rail-summary {
align-self: auto;
}
}
@media (max-width: 1120px) {
.terminal-main {
padding: 24px 20px 36px;
}
.view-grid,
.desk-session {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.panel-span-two {
grid-column: span 2;
}
}
@media (max-width: 780px) {
.terminal-rail,
.terminal-main {
padding-inline: 16px;
}
.desk-session,
.view-grid,
.metric-grid {
grid-template-columns: minmax(0, 1fr);
}
.panel-span-two {
grid-column: span 1;
}
.desk-header {
align-items: flex-start;
}
.command-primary,
.command-secondary,
.card-controls,
.chart-controls,
.chart-meta,
.panel-header {
flex-direction: column;
align-items: stretch;
}
.row {
flex-direction: column;
}
.time {
text-align: left;
}
.chart-surface {
height: 300px;
}
.drawer {
position: static;
width: 100%;
max-height: none;
margin-top: 8px;
}
}