- Check console (F12) for details -
diff --git a/src/api/dashboard/static/index.html b/src/api/dashboard/static/index.html index c2b31aa..8743ac1 100644 --- a/src/api/dashboard/static/index.html +++ b/src/api/dashboard/static/index.html @@ -159,10 +159,18 @@ .stat-value.negative { color: var(--tv-red); } .main-container { + flex: 1; + display: flex; + flex-direction: row; + overflow: hidden; + } + + .chart-area { flex: 1; display: flex; flex-direction: column; overflow: hidden; + min-width: 0; } .chart-wrapper { @@ -182,6 +190,337 @@ background: var(--tv-panel-bg); border-top: 1px solid var(--tv-border); display: flex; + } + + /* Right Sidebar - Strategy Simulation */ + .right-sidebar { + width: 350px; + background: var(--tv-panel-bg); + border-left: 1px solid var(--tv-border); + display: flex; + flex-direction: column; + overflow: hidden; + transition: width 0.3s ease; + } + + .right-sidebar.collapsed { + width: 44px; + min-width: 44px; + } + + .sidebar-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 16px; + border-bottom: 1px solid var(--tv-border); + background: var(--tv-bg); + min-height: 48px; + } + + .right-sidebar.collapsed .sidebar-header { + justify-content: center; + padding: 12px 4px; + } + + .sidebar-title { + font-size: 14px; + font-weight: 600; + display: flex; + align-items: center; + gap: 8px; + white-space: nowrap; + } + + .right-sidebar.collapsed .sidebar-title { + display: none; + } + + .sidebar-toggle { + background: transparent; + border: none; + color: var(--tv-text); + cursor: pointer; + padding: 4px; + font-size: 16px; + transition: transform 0.3s ease; + min-width: 24px; + min-height: 24px; + display: flex; + align-items: center; + justify-content: center; + } + + .sidebar-toggle:hover { + background: var(--tv-hover); + border-radius: 4px; + } + + .right-sidebar.collapsed .sidebar-toggle { + transform: rotate(180deg); + } + + .sidebar-content { + flex: 1; + overflow-y: auto; + padding: 12px; + } + + .right-sidebar.collapsed .sidebar-content { + display: none; + } + + .sidebar-section { + margin-bottom: 16px; + border: 1px solid var(--tv-border); + border-radius: 6px; + overflow: hidden; + } + + .sidebar-section-header { + background: var(--tv-bg); + padding: 10px 12px; + font-size: 12px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + border-bottom: 1px solid var(--tv-border); + display: flex; + align-items: center; + gap: 6px; + } + + .sidebar-section-content { + padding: 12px; + } + + /* Strategy Config Form */ + .config-group { + margin-bottom: 12px; + } + + .config-label { + display: block; + font-size: 11px; + color: var(--tv-text-secondary); + text-transform: uppercase; + margin-bottom: 4px; + } + + .config-input { + width: 100%; + background: var(--tv-bg); + border: 1px solid var(--tv-border); + border-radius: 4px; + padding: 8px; + color: var(--tv-text); + font-size: 13px; + } + + .config-input:focus { + outline: none; + border-color: var(--tv-blue); + } + + /* Strategy List */ + .strategy-item { + display: flex; + align-items: center; + gap: 8px; + padding: 10px; + border-bottom: 1px solid var(--tv-border); + cursor: pointer; + transition: background 0.2s; + } + + .strategy-item:last-child { + border-bottom: none; + } + + .strategy-item:hover { + background: var(--tv-hover); + } + + .strategy-item.selected { + background: rgba(41, 98, 255, 0.1); + border-left: 3px solid var(--tv-blue); + } + + .strategy-radio { + width: 16px; + height: 16px; + accent-color: var(--tv-blue); + } + + .strategy-name { + flex: 1; + font-size: 13px; + } + + .strategy-info { + color: var(--tv-text-secondary); + font-size: 14px; + cursor: help; + } + + /* Results Panel */ + .results-summary { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8px; + margin-bottom: 12px; + } + + .result-stat { + background: var(--tv-bg); + padding: 8px; + border-radius: 4px; + text-align: center; + } + + .result-stat-value { + font-size: 18px; + font-weight: 600; + } + + .result-stat-label { + font-size: 10px; + color: var(--tv-text-secondary); + text-transform: uppercase; + } + + /* Equity Sparkline */ + .equity-sparkline { + height: 60px; + background: var(--tv-bg); + border-radius: 4px; + margin-bottom: 12px; + position: relative; + } + + /* Action Buttons */ + .action-btn { + width: 100%; + padding: 10px; + border: none; + border-radius: 4px; + font-size: 13px; + font-weight: 600; + cursor: pointer; + transition: opacity 0.2s; + margin-bottom: 8px; + } + + .action-btn:hover { + opacity: 0.9; + } + + .action-btn.primary { + background: var(--tv-blue); + color: white; + } + + .action-btn.secondary { + background: var(--tv-bg); + color: var(--tv-text); + border: 1px solid var(--tv-border); + } + + .action-btn.success { + background: var(--tv-green); + color: white; + } + + /* Saved Simulations List */ + .saved-sim-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px; + background: var(--tv-bg); + border-radius: 4px; + margin-bottom: 6px; + font-size: 12px; + } + + .saved-sim-name { + flex: 1; + cursor: pointer; + } + + .saved-sim-name:hover { + color: var(--tv-blue); + } + + .saved-sim-actions { + display: flex; + gap: 4px; + } + + .sim-action-btn { + background: transparent; + border: none; + color: var(--tv-text-secondary); + cursor: pointer; + padding: 2px 4px; + font-size: 12px; + } + + .sim-action-btn:hover { + color: var(--tv-text); + } + + /* Export Dialog */ + .export-dialog { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: var(--tv-panel-bg); + border: 1px solid var(--tv-border); + border-radius: 8px; + padding: 20px; + z-index: 10000; + min-width: 300px; + box-shadow: 0 4px 20px rgba(0,0,0,0.5); + } + + .export-dialog-title { + font-size: 16px; + font-weight: 600; + margin-bottom: 16px; + } + + .export-options { + display: flex; + flex-direction: column; + gap: 8px; + margin-bottom: 16px; + } + + .export-option { + display: flex; + align-items: center; + gap: 8px; + padding: 8px; + background: var(--tv-bg); + border-radius: 4px; + cursor: pointer; + } + + .export-option:hover { + background: var(--tv-hover); + } + + .dialog-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0,0,0,0.7); + z-index: 9999; + } flex-direction: column; min-height: 200px; max-height: 400px; @@ -605,28 +944,166 @@