/* Annotation UI Specific Styles */ /* Main Layout */ .main-content { padding-top: 1rem; padding-bottom: 1rem; min-height: calc(100vh - 120px); } /* Chart Panel */ .chart-panel { height: calc(100vh - 150px); } .chart-panel .card-body { height: calc(100% - 60px); overflow: hidden; } #chart-container { height: 100%; overflow-y: auto; overflow-x: hidden; } .timeframe-chart { margin-bottom: 1rem; border: 1px solid var(--border-color); border-radius: 4px; background-color: var(--bg-tertiary); } .chart-header { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 1rem; background-color: var(--bg-secondary); border-bottom: 1px solid var(--border-color); } .timeframe-label { font-weight: 600; font-size: 0.875rem; color: var(--text-primary); } .chart-info { font-size: 0.75rem; color: var(--text-secondary); } .chart-plot { height: 300px; padding: 0.5rem; } .chart-loading { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; z-index: 1000; background-color: rgba(17, 24, 39, 0.9); padding: 2rem; border-radius: 8px; } /* Control Panel */ .control-panel { position: sticky; top: 1rem; max-height: calc(100vh - 150px); overflow-y: auto; } .control-panel .card-body { padding: 1rem; } .control-panel .form-label { font-size: 0.875rem; font-weight: 600; margin-bottom: 0.5rem; } .control-panel .form-select, .control-panel .form-control { font-size: 0.875rem; } .control-panel .btn-group-vertical .btn { text-align: left; } /* Annotation List */ .annotation-list { position: sticky; top: 1rem; max-height: 400px; } .annotation-list .card-body { padding: 0; max-height: 350px; overflow-y: auto; } .annotation-list .list-group-item { cursor: pointer; transition: background-color 0.2s; } .annotation-list .list-group-item:hover { background-color: var(--bg-tertiary) !important; } .annotation-list .btn-group-vertical { min-width: 40px; } /* Training Panel */ .training-panel { position: sticky; top: 420px; } .training-panel .card-body { padding: 1rem; } /* Inference Panel */ .inference-panel { padding: 1rem; } #inference-chart { background-color: var(--bg-tertiary); border-radius: 4px; border: 1px solid var(--border-color); } .inference-panel .table-responsive { border: 1px solid var(--border-color); border-radius: 4px; } /* Annotation Markers on Charts */ .annotation-marker-entry { color: #10b981; font-size: 20px; } .annotation-marker-exit { color: #ef4444; font-size: 20px; } .annotation-line { stroke: #3b82f6; stroke-width: 2; stroke-dasharray: 5, 5; } .annotation-pnl-label { font-size: 12px; font-weight: 600; } /* Prediction Markers */ .prediction-marker-correct { color: #10b981; font-size: 16px; } .prediction-marker-incorrect { color: #ef4444; font-size: 16px; } /* Crosshair Cursor */ .chart-plot:hover { cursor: crosshair; } /* Fullscreen Mode */ #chart-container:fullscreen { background-color: var(--bg-primary); padding: 1rem; } #chart-container:-webkit-full-screen { background-color: var(--bg-primary); padding: 1rem; } #chart-container:-moz-full-screen { background-color: var(--bg-primary); padding: 1rem; } /* Responsive Adjustments */ @media (max-width: 1200px) { .chart-plot { height: 250px; } } @media (max-width: 768px) { .main-content { padding-left: 0.5rem; padding-right: 0.5rem; } .chart-plot { height: 200px; } .control-panel, .annotation-list, .training-panel { position: relative; top: 0; margin-bottom: 1rem; } } /* Animation for Loading States */ @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .loading-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } /* Highlight Effect for Selected Annotation */ .annotation-highlighted { animation: highlight-flash 1s ease-in-out; } @keyframes highlight-flash { 0%, 100% { background-color: var(--bg-secondary); } 50% { background-color: rgba(59, 130, 246, 0.3); } } /* Status Indicators */ .status-indicator { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 0.5rem; } .status-indicator.active { background-color: var(--accent-success); box-shadow: 0 0 8px var(--accent-success); } .status-indicator.inactive { background-color: var(--text-muted); } .status-indicator.error { background-color: var(--accent-danger); box-shadow: 0 0 8px var(--accent-danger); } /* Metric Cards */ .metric-card { transition: transform 0.2s; } .metric-card:hover { transform: translateY(-2px); } /* Confusion Matrix Styling */ .confusion-matrix-cell { font-weight: 600; font-size: 1.25rem; } /* Timeline Table Styling */ #prediction-timeline-body tr:last-child { background-color: rgba(59, 130, 246, 0.1); } /* Custom Scrollbar for Panels */ .control-panel::-webkit-scrollbar, .annotation-list .card-body::-webkit-scrollbar, .inference-panel .table-responsive::-webkit-scrollbar { width: 6px; } /* Keyboard Shortcut Hints */ .keyboard-hint { display: inline-block; padding: 0.25rem 0.5rem; background-color: var(--bg-tertiary); border: 1px solid var(--border-color); border-radius: 4px; font-family: monospace; font-size: 0.75rem; margin: 0 0.25rem; } /* Chart Zoom Controls */ .chart-zoom-controls { position: absolute; top: 10px; right: 10px; z-index: 100; } /* Annotation Mode Indicator */ .annotation-mode-active { border: 2px solid var(--accent-success); } .annotation-mode-inactive { border: 2px solid var(--text-muted); }