Spaces:
Running
Running
| /* ═══════════════════════════════════════════════════════ | |
| AI FORECAST MULTI-CHART WORKSPACE — CSS | |
| ═══════════════════════════════════════════════════════ */ | |
| /* ── Layout Switcher (ultra-compact pill) ──────────── */ | |
| .layout-menu { | |
| position: relative; | |
| flex: 0 0 auto; | |
| min-width: 0; | |
| } | |
| .layout-menu-button { | |
| height: var(--ctrl-h); | |
| min-width: 78px; | |
| padding: 0 12px; | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 8px; | |
| border-radius: var(--radius); | |
| border: 1px solid var(--bdr-base); | |
| background: var(--bg-control); | |
| color: var(--txt-secondary); | |
| font-family: var(--ff-display); | |
| font-size: 0.78rem; | |
| font-weight: 700; | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| white-space: nowrap; | |
| } | |
| .layout-menu-button:hover, | |
| .layout-menu.open .layout-menu-button { | |
| border-color: var(--bdr-accent); | |
| box-shadow: 0 10px 24px rgba(145, 101, 34, 0.16); | |
| color: var(--txt-primary); | |
| } | |
| .layout-menu-current { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| min-width: 22px; | |
| height: 22px; | |
| padding: 0 6px; | |
| border-radius: 999px; | |
| background: var(--accent-lo); | |
| color: var(--accent); | |
| font-family: var(--ff-mono, 'Space Mono', monospace); | |
| font-size: 0.68rem; | |
| } | |
| .layout-menu-popup { | |
| position: absolute; | |
| top: calc(100% + 10px); | |
| right: 0; | |
| min-width: 190px; | |
| padding: 10px; | |
| border-radius: 18px; | |
| border: 1px solid rgba(255, 255, 255, 0.32); | |
| background: linear-gradient(180deg, rgba(255, 255, 255, 0.92) 0%, rgba(241, 247, 255, 0.9) 100%); | |
| box-shadow: 0 26px 56px rgba(28, 56, 108, 0.18); | |
| backdrop-filter: blur(22px) saturate(175%); | |
| -webkit-backdrop-filter: blur(22px) saturate(175%); | |
| display: grid; | |
| grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| gap: 8px; | |
| opacity: 0; | |
| pointer-events: none; | |
| transform: translateY(-6px) scale(0.98); | |
| transform-origin: top right; | |
| transition: opacity 0.18s ease, transform 0.18s ease; | |
| z-index: 120; | |
| } | |
| .layout-menu.open .layout-menu-popup { | |
| opacity: 1; | |
| pointer-events: auto; | |
| transform: translateY(0) scale(1); | |
| } | |
| .layout-menu-option { | |
| min-height: 58px; | |
| border: 1px solid rgba(120, 157, 218, 0.18); | |
| border-radius: 14px; | |
| background: rgba(255, 255, 255, 0.52); | |
| color: var(--txt-secondary); | |
| display: flex; | |
| flex-direction: column; | |
| align-items: flex-start; | |
| justify-content: center; | |
| gap: 3px; | |
| padding: 10px 12px; | |
| cursor: pointer; | |
| transition: all 0.18s ease; | |
| } | |
| .layout-menu-option:hover, | |
| .layout-menu-option.active { | |
| border-color: var(--bdr-accent); | |
| color: var(--txt-primary); | |
| box-shadow: 0 12px 24px rgba(145, 101, 34, 0.12); | |
| } | |
| .layout-menu-option strong { | |
| font-size: 0.88rem; | |
| line-height: 1; | |
| } | |
| .layout-menu-option span { | |
| font-size: 0.64rem; | |
| opacity: 0.78; | |
| letter-spacing: 0.04em; | |
| text-transform: uppercase; | |
| } | |
| /* ── Workspace Grid ────────────────────────────────── */ | |
| .workspace-grid { | |
| display: grid; | |
| width: 100%; | |
| height: 100%; | |
| gap: 2px; | |
| padding: 0; | |
| position: relative; | |
| } | |
| .workspace-grid.layout-1 { | |
| grid-template-columns: 1fr; | |
| grid-template-rows: 1fr; | |
| } | |
| .workspace-grid.layout-2 { | |
| grid-template-columns: 1fr 1fr; | |
| grid-template-rows: 1fr; | |
| } | |
| .workspace-grid.layout-4 { | |
| grid-template-columns: 1fr 1fr; | |
| grid-template-rows: 1fr 1fr; | |
| } | |
| .workspace-grid.layout-8 { | |
| grid-template-columns: repeat(4, 1fr); | |
| grid-template-rows: 1fr 1fr; | |
| } | |
| /* ── Chart Pane ────────────────────────────────────── */ | |
| .chart-pane { | |
| position: relative; | |
| border: 1px solid color-mix(in srgb, var(--bdr-base) 70%, rgba(255, 255, 255, 0.20)); | |
| border-radius: 18px; | |
| overflow: hidden; | |
| background: linear-gradient(180deg, color-mix(in srgb, var(--bg-depth) 92%, rgba(255, 255, 255, 0.08)) 0%, color-mix(in srgb, var(--bg-depth) 100%, transparent) 100%); | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08), 0 18px 36px rgba(0, 0, 0, 0.14); | |
| transition: border-color 0.25s ease, box-shadow 0.25s ease; | |
| min-height: 0; | |
| min-width: 0; | |
| } | |
| .chart-pane:hover { | |
| border-color: var(--bdr-subtle, var(--accent-mid)); | |
| } | |
| .chart-pane.active { | |
| border-color: var(--accent); | |
| box-shadow: | |
| 0 0 0 1px color-mix(in srgb, var(--accent) 72%, transparent), | |
| inset 0 0 28px color-mix(in srgb, var(--accent) 12%, transparent), | |
| 0 26px 48px rgba(0, 0, 0, 0.18); | |
| } | |
| .workspace-grid.pane-focus-mode { | |
| overflow: hidden; | |
| } | |
| .workspace-grid.pane-focus-mode .chart-pane { | |
| transition: | |
| opacity 0.22s ease, | |
| transform 0.22s ease, | |
| visibility 0.22s ease, | |
| box-shadow 0.22s ease, | |
| border-color 0.22s ease; | |
| } | |
| .workspace-grid.pane-focus-mode .chart-pane.is-collapsed { | |
| opacity: 0; | |
| visibility: hidden; | |
| pointer-events: none; | |
| transform: scale(0.985); | |
| } | |
| .workspace-grid.pane-focus-mode .chart-pane.is-maximized { | |
| position: absolute; | |
| inset: 0; | |
| z-index: 40; | |
| opacity: 1; | |
| visibility: visible; | |
| transform: none; | |
| border-color: color-mix(in srgb, var(--accent) 82%, rgba(255, 255, 255, 0.18)); | |
| box-shadow: | |
| 0 0 0 1px color-mix(in srgb, var(--accent) 56%, transparent), | |
| inset 0 0 34px color-mix(in srgb, var(--accent) 12%, transparent), | |
| 0 30px 54px rgba(0, 0, 0, 0.24); | |
| } | |
| .workspace-grid.pane-focus-mode .chart-pane.is-maximized .pane-header-mini { | |
| display: none; | |
| } | |
| /* ── Pane Mini Header ──────────────────────────────── */ | |
| .pane-header-mini { | |
| position: absolute; | |
| top: 3px; | |
| left: 6px; | |
| z-index: 10; | |
| display: flex; | |
| align-items: center; | |
| gap: 4px; | |
| font-family: var(--ff-display); | |
| font-size: 0.62rem; | |
| opacity: 0.85; | |
| pointer-events: none; | |
| user-select: none; | |
| } | |
| .layout-1 .pane-header-mini { | |
| display: none; /* single pane doesn't need mini header */ | |
| } | |
| .pane-symbol { | |
| font-weight: 700; | |
| color: var(--accent); | |
| letter-spacing: 0.03em; | |
| } | |
| .pane-sep { | |
| color: var(--txt-muted); | |
| opacity: 0.5; | |
| } | |
| .pane-interval { | |
| font-weight: 500; | |
| color: var(--txt-secondary); | |
| text-transform: uppercase; | |
| } | |
| .pane-price { | |
| font-weight: 600; | |
| color: var(--txt-primary); | |
| margin-left: 3px; | |
| font-family: var(--ff-mono, 'Space Mono', monospace); | |
| font-size: 0.6rem; | |
| } | |
| /* ── Pane Chart Container ──────────────────────────── */ | |
| .pane-chart { | |
| width: 100%; | |
| height: 100%; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| } | |
| .pane-forecast-hover { | |
| position: absolute; | |
| top: 34px; | |
| right: 8px; | |
| z-index: 11; | |
| min-height: 22px; | |
| padding: 0 9px; | |
| border-radius: 999px; | |
| border: 1px solid color-mix(in srgb, var(--accent) 22%, rgba(255, 255, 255, 0.12)); | |
| background: linear-gradient(180deg, rgba(255, 255, 255, 0.72), rgba(244, 248, 255, 0.56)); | |
| color: var(--txt-primary); | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 7px; | |
| font-family: var(--ff-display); | |
| font-size: 0.56rem; | |
| font-weight: 700; | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| box-shadow: 0 12px 28px rgba(88, 108, 146, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.52); | |
| backdrop-filter: blur(14px); | |
| -webkit-backdrop-filter: blur(14px); | |
| pointer-events: none; | |
| opacity: 1; | |
| transform: translateY(0); | |
| transition: opacity 0.16s ease, transform 0.16s ease, border-color 0.16s ease; | |
| } | |
| .pane-forecast-hover.hidden { | |
| opacity: 0; | |
| transform: translateY(-4px); | |
| } | |
| .pane-forecast-hover::before { | |
| content: ''; | |
| width: 7px; | |
| height: 7px; | |
| border-radius: 50%; | |
| background: currentColor; | |
| box-shadow: 0 0 0 3px color-mix(in srgb, currentColor 18%, transparent); | |
| } | |
| /* ── Pane Loader ───────────────────────────────────── */ | |
| .pane-loader { | |
| position: absolute; | |
| inset: 0; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| background: rgba(4, 13, 30, 0.5); | |
| backdrop-filter: blur(4px); | |
| z-index: 15; | |
| transition: opacity 0.3s ease; | |
| } | |
| .pane-loader.hidden { | |
| opacity: 0; | |
| pointer-events: none; | |
| } | |
| .pane-loader .loader-ring { | |
| width: 28px; | |
| height: 28px; | |
| border-radius: 50%; | |
| border: 2px solid rgba(40, 80, 140, 0.15); | |
| border-top-color: var(--accent); | |
| animation: spin 0.8s linear infinite; | |
| } | |
| /* ── Pane Gauges ───────────────────────────────────── */ | |
| .pane-gauges { | |
| position: absolute; | |
| top: 30px; | |
| left: 6px; | |
| right: auto; | |
| z-index: 10; | |
| display: flex; | |
| gap: 5px; | |
| flex-wrap: wrap; | |
| justify-content: flex-start; | |
| max-width: min(68%, 288px); | |
| pointer-events: auto; | |
| } | |
| .layout-1 .pane-gauges { | |
| top: 40px; | |
| max-width: min(72%, 400px); | |
| } | |
| .pane-gauge-chip { | |
| min-height: 22px; | |
| padding: 0 8px; | |
| border-radius: 999px; | |
| border: 1px solid rgba(255, 255, 255, 0.12); | |
| background: linear-gradient(180deg, rgba(255, 255, 255, 0.72), rgba(245, 249, 255, 0.56)); | |
| color: var(--txt-primary); | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| font-family: var(--ff-mono, 'Space Mono', monospace); | |
| font-size: 0.62rem; | |
| line-height: 1; | |
| box-shadow: 0 12px 28px rgba(88, 108, 146, 0.16), inset 0 1px 0 rgba(255, 255, 255, 0.56); | |
| backdrop-filter: blur(14px); | |
| } | |
| .pane-gauge-chip b { | |
| font-size: 0.66rem; | |
| } | |
| .pane-gauge-chip[data-tone="bull"] { | |
| border-color: rgba(85, 207, 144, 0.36); | |
| color: #dcffef; | |
| } | |
| .pane-gauge-chip[data-tone="bear"] { | |
| border-color: rgba(232, 109, 124, 0.38); | |
| color: #ffe0e6; | |
| } | |
| .pane-gauge-chip[data-tone="flat"] { | |
| border-color: rgba(244, 198, 107, 0.30); | |
| color: #fbe7bb; | |
| } | |
| .pane-gauge-verdict { | |
| min-height: 22px; | |
| padding: 0 9px; | |
| border-radius: 999px; | |
| background: var(--accent-lo); | |
| border: 1px solid var(--accent-mid); | |
| color: var(--accent); | |
| display: inline-flex; | |
| align-items: center; | |
| font-family: var(--ff-display); | |
| font-size: 0.6rem; | |
| font-weight: 700; | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| box-shadow: 0 12px 28px rgba(90, 61, 22, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.12); | |
| } | |
| .pane-analysis-btn { | |
| position: absolute; | |
| top: 6px; | |
| right: 6px; | |
| z-index: 12; | |
| min-width: 52px; | |
| height: 22px; | |
| padding: 0 7px; | |
| border-radius: 999px; | |
| border: 1px solid rgba(255, 255, 255, 0.10); | |
| background: linear-gradient(180deg, rgba(255, 255, 255, 0.78), rgba(245, 249, 255, 0.58)); | |
| color: var(--txt-primary); | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 6px; | |
| font-family: var(--ff-display); | |
| font-size: 0.54rem; | |
| font-weight: 700; | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| cursor: pointer; | |
| box-shadow: 0 12px 28px rgba(88, 108, 146, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.58); | |
| backdrop-filter: blur(14px); | |
| transition: border-color 0.18s ease, transform 0.18s ease, box-shadow 0.18s ease; | |
| } | |
| .pane-analysis-btn:hover { | |
| transform: translateY(-1px); | |
| border-color: var(--accent-mid); | |
| box-shadow: 0 14px 30px rgba(88, 108, 146, 0.22), 0 0 0 6px color-mix(in srgb, var(--accent) 6%, transparent); | |
| } | |
| .pane-analysis-btn .dot { | |
| width: 6px; | |
| height: 6px; | |
| border-radius: 50%; | |
| background: rgba(148, 163, 184, 0.9); | |
| box-shadow: 0 0 0 3px rgba(148, 163, 184, 0.14); | |
| } | |
| .pane-analysis-btn[data-state="loading"] .dot { | |
| background: #f59e0b; | |
| box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.16); | |
| } | |
| .pane-analysis-btn[data-state="ready"] .dot { | |
| background: #10b981; | |
| box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.16); | |
| } | |
| .pane-analysis-btn[data-state="error"] .dot { | |
| background: #f43f5e; | |
| box-shadow: 0 0 0 3px rgba(244, 63, 94, 0.16); | |
| } | |
| .pane-analysis-btn.active { | |
| border-color: var(--accent); | |
| color: var(--accent); | |
| box-shadow: 0 16px 34px rgba(118, 85, 34, 0.22), 0 0 0 1px color-mix(in srgb, var(--accent) 24%, transparent); | |
| } | |
| .pane-analysis-title { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 10px; | |
| margin-bottom: 10px; | |
| font-family: var(--ff-display); | |
| font-size: 0.72rem; | |
| font-weight: 700; | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| } | |
| .pane-analysis-meta { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 8px; | |
| flex-wrap: wrap; | |
| } | |
| .pane-analysis-pill { | |
| min-height: 21px; | |
| padding: 0 8px; | |
| border-radius: 999px; | |
| border: 1px solid rgba(110, 156, 229, 0.22); | |
| background: rgba(255, 255, 255, 0.04); | |
| display: inline-flex; | |
| align-items: center; | |
| font-size: 0.58rem; | |
| letter-spacing: 0.04em; | |
| } | |
| .pane-analysis-grid { | |
| display: grid; | |
| grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| gap: 8px; | |
| } | |
| .pane-analysis-card { | |
| border-radius: 12px; | |
| border: 1px solid rgba(110, 156, 229, 0.18); | |
| background: rgba(255, 255, 255, 0.04); | |
| padding: 9px 10px; | |
| } | |
| .pane-analysis-card strong { | |
| display: block; | |
| margin-bottom: 5px; | |
| font-size: 0.62rem; | |
| letter-spacing: 0.06em; | |
| text-transform: uppercase; | |
| color: rgba(180, 214, 255, 0.92); | |
| } | |
| .pane-analysis-body { | |
| font-size: 0.72rem; | |
| line-height: 1.45; | |
| color: rgba(235, 244, 255, 0.92); | |
| } | |
| .pane-analysis-loading, | |
| .pane-analysis-empty { | |
| min-height: 92px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| text-align: center; | |
| font-size: 0.74rem; | |
| color: rgba(210, 224, 244, 0.86); | |
| } | |
| /* ── Multi-pane responsive ─────────────────────────── */ | |
| .pane-gauges .compact-gauge-card { | |
| min-width: 66px; | |
| width: 66px; | |
| min-height: 82px; | |
| padding: 5px 4px 6px; | |
| border-radius: 14px; | |
| } | |
| body.dark-theme .pane-forecast-hover { | |
| background: linear-gradient(180deg, rgba(19, 28, 48, 0.82), rgba(8, 14, 28, 0.70)); | |
| color: rgba(242, 247, 255, 0.94); | |
| box-shadow: 0 12px 28px rgba(2, 8, 23, 0.30), inset 0 1px 0 rgba(255, 255, 255, 0.08); | |
| } | |
| body.dark-theme .pane-gauge-chip { | |
| background: linear-gradient(180deg, rgba(20, 30, 52, 0.82), rgba(8, 15, 28, 0.72)); | |
| color: rgba(232, 240, 255, 0.92); | |
| box-shadow: 0 12px 28px rgba(0, 0, 0, 0.20), inset 0 1px 0 rgba(255, 255, 255, 0.08); | |
| } | |
| body.dark-theme .pane-analysis-btn { | |
| background: linear-gradient(180deg, rgba(18, 27, 47, 0.84), rgba(8, 14, 28, 0.72)); | |
| color: rgba(236, 243, 255, 0.92); | |
| box-shadow: 0 12px 28px rgba(2, 8, 23, 0.30), inset 0 1px 0 rgba(255, 255, 255, 0.08); | |
| } | |
| body.dark-theme .pane-analysis-btn:hover { | |
| box-shadow: 0 14px 30px rgba(0, 0, 0, 0.34), 0 0 0 6px color-mix(in srgb, var(--accent) 6%, transparent); | |
| } | |
| body.dark-theme .pane-analysis-btn.active { | |
| color: #fff8ed; | |
| box-shadow: 0 16px 34px rgba(0, 0, 0, 0.36), 0 0 0 1px color-mix(in srgb, var(--accent) 24%, transparent); | |
| } | |
| .pane-gauges .compact-gauge-title { | |
| font-size: 0.5rem; | |
| } | |
| .pane-gauges .compact-gauge-signal { | |
| font-size: 0.46rem; | |
| line-height: 1.15; | |
| } | |
| .pane-analysis-sheet .dash-gauges-hero { | |
| gap: 10px; | |
| margin-bottom: 10px; | |
| } | |
| .pane-analysis-sheet .gauge-hero-card { | |
| min-height: auto; | |
| padding: 12px 10px 10px; | |
| border-radius: 14px; | |
| } | |
| .pane-analysis-sheet .gauge-hero-title { | |
| font-size: 0.62rem; | |
| } | |
| .pane-analysis-sheet .gauge-hero-signal { | |
| font-size: 0.64rem; | |
| padding: 6px 10px; | |
| } | |
| .pane-analysis-sheet .gauge-hero-counts { | |
| gap: 8px; | |
| font-size: 0.58rem; | |
| } | |
| .pane-analysis-sheet .dash-tables-row { | |
| gap: 10px; | |
| } | |
| .pane-analysis-sheet .dash-col-stack { | |
| display: grid; | |
| grid-template-rows: minmax(0, 1fr) minmax(0, 1fr); | |
| gap: 10px; | |
| min-height: 0; | |
| } | |
| .pane-analysis-sheet .dash-col { | |
| min-height: 0; | |
| max-height: 220px; | |
| } | |
| .pane-analysis-sheet .dash-col-stack .dash-col { | |
| max-height: 105px; | |
| } | |
| .pane-analysis-sheet .dash-table-wrap { | |
| max-height: 170px; | |
| } | |
| .pane-analysis-sheet .dash-col-stack .dash-table-wrap { | |
| max-height: 56px; | |
| } | |
| .pane-analysis-sheet .dt, | |
| .pane-analysis-sheet .pivot-table { | |
| font-size: 0.6rem; | |
| } | |
| .pane-analysis-sheet .dc-header { | |
| font-size: 0.68rem; | |
| margin-bottom: 8px; | |
| } | |
| .pane-analysis-sheet .summary-disclaimer { | |
| margin-top: 10px; | |
| padding: 10px 12px; | |
| font-size: 0.66rem; | |
| } | |
| @media (max-width: 900px) { | |
| .layout-menu-popup { | |
| right: auto; | |
| left: 0; | |
| transform-origin: top left; | |
| } | |
| .workspace-grid.layout-8 { | |
| grid-template-columns: repeat(2, 1fr); | |
| grid-template-rows: repeat(4, 1fr); | |
| } | |
| } | |
| @media (max-width: 600px) { | |
| .layout-menu-button { | |
| min-width: 62px; | |
| padding: 0 10px; | |
| gap: 6px; | |
| font-size: 0.72rem; | |
| } | |
| .layout-menu-popup { | |
| min-width: 168px; | |
| grid-template-columns: 1fr; | |
| } | |
| .workspace-grid.layout-4 { | |
| grid-template-columns: 1fr; | |
| grid-template-rows: repeat(4, 1fr); | |
| } | |
| .workspace-grid.layout-2 { | |
| grid-template-columns: 1fr; | |
| grid-template-rows: 1fr 1fr; | |
| } | |
| .workspace-grid.layout-8 { | |
| grid-template-columns: 1fr; | |
| grid-template-rows: repeat(8, 1fr); | |
| } | |
| .pane-gauges, | |
| .layout-1 .pane-gauges { | |
| max-width: calc(100% - 16px); | |
| } | |
| .pane-analysis-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| .pane-analysis-sheet .dash-gauges-hero, | |
| .pane-analysis-sheet .dash-tables-row { | |
| grid-template-columns: 1fr; | |
| } | |
| .pane-analysis-sheet .dash-col-stack { | |
| grid-template-rows: auto auto; | |
| } | |
| } | |