Skip to content

Commit dc23c1a

Browse files
committed
Ref(viewer): fix overview results table
1 parent 89f2d74 commit dc23c1a

20 files changed

Lines changed: 3389 additions & 786 deletions

viewer_react/CSS_MIGRATION.md

Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
# CSS Migration Summary
2+
3+
This document summarizes the CSS styling migration from the old Flask-based viewer to the new React-based viewer.
4+
5+
## Overview
6+
7+
All styling from the old viewer has been ported to match the professional dark theme with bright green (`#00ff88`) accents. The CSS has been simplified and organized into reusable component-based styles.
8+
9+
## Color Scheme
10+
11+
### Primary Colors
12+
- **Background Primary**: `#000000` (Pure black)
13+
- **Background Secondary**: `#111111` (Dark gray)
14+
- **Background Tertiary**: `#222222` (Lighter gray)
15+
- **Text Primary**: `#ffffff` (White)
16+
- **Text Secondary**: `#cccccc` (Light gray)
17+
- **Text Muted**: `#888888` (Medium gray)
18+
- **Border Color**: `#333333` (Dark border)
19+
20+
### Accent Colors
21+
- **Accent/Primary**: `#00ff88` (Bright green)
22+
- **Accent Hover**: `#00cc66` (Darker green)
23+
- **Success**: `#00ff88` (Same as accent)
24+
- **Warning**: `#f711ff` (Magenta)
25+
- **Danger/Error**: `#ff4444` (Red)
26+
- **Neon Red**: `#ff1188` (Bright red for errors)
27+
28+
### Message Role Colors
29+
- **System**: `#ffaa00` (Orange)
30+
- **User**: `#00ff88` (Green)
31+
- **Assistant**: `#00aaff` (Blue)
32+
33+
## File Structure
34+
35+
### Global Styles
36+
1. **`index.css`** - CSS reset and base HTML/body styles
37+
2. **`App.css`** - Core application styles, CSS variables, utility classes
38+
39+
### Component Styles
40+
1. **`GamePicker.css`** - Game selection table and filtering UI
41+
2. **`GameViewer.css`** - Main game viewer layout
42+
3. **`Header.css`** - Header with navigation and controls
43+
4. **`Overview.css`** - Overview section with agents and results
44+
5. **`Analysis.css`** - Analysis section with charts and matrices
45+
6. **`RoundsList.css`** - Rounds listing and display
46+
7. **`TrajectoryViewer.css`** - Trajectory display with messages
47+
8. **`Storage.css`** - Storage/path management UI
48+
9. **`Readme.css`** - Readme editor component
49+
10. **`ScoresChart.css`** - Score visualization charts
50+
11. **`FloatingToc.css`** - Floating table of contents
51+
12. **`HelpModal.css`** - Keyboard shortcuts help modal
52+
53+
## Key Design Patterns
54+
55+
### 1. Consistent Color Usage
56+
- All text uses high-contrast colors on black background
57+
- Accent color (`#00ff88`) used consistently for:
58+
- Interactive elements
59+
- Headers and titles
60+
- Active states
61+
- Success indicators
62+
63+
### 2. Interactive Elements
64+
- **Buttons**: Black text (`#000000`) on bright green (`#00ff88`)
65+
- **Hover states**: Darker green (`#00cc66`) with slight transform
66+
- **Disabled states**: 50% opacity with no-cursor
67+
- **Focus states**: 2px green outline with offset
68+
69+
### 3. Card Components
70+
- Background: `var(--bg-secondary)`
71+
- Border: `1px solid var(--border-color)`
72+
- Border radius: `0.5rem`
73+
- Box shadow for depth
74+
- Hover effect: subtle transform up
75+
76+
### 4. Foldout/Accordion Components
77+
- Summary with tertiary background
78+
- Hover: Full green background with black text
79+
- Smooth transitions for expand/collapse
80+
- Consistent padding and spacing
81+
82+
### 5. Tables
83+
- Sticky headers with tertiary background
84+
- Row hover: Tertiary background
85+
- Cell padding: `0.75rem 1rem`
86+
- Text: Always white for visibility
87+
- Border: Bottom border on all rows except last
88+
89+
### 6. Code Blocks
90+
- Background: `var(--code-bg)` (`#0a0a0a`)
91+
- Monospace font: "SF Mono", Monaco, "Cascadia Code", etc.
92+
- Border: `1px solid var(--border-color)`
93+
- Pre-wrap for long lines
94+
- Scrollable containers with custom scrollbar
95+
96+
### 7. Scrollbars (Webkit)
97+
- Width/Height: `8px`
98+
- Track: Dark background
99+
- Thumb: Muted gray, bright green on hover
100+
- Border radius: `4px`
101+
102+
### 8. Badges and Tags
103+
- Background: Bright green or success color
104+
- Text: Black (`#000000`) for contrast
105+
- Font weight: `700` (Bold)
106+
- Border radius: `0.75rem` for pills
107+
- Small padding: `0.125rem 0.375rem`
108+
109+
### 9. Status Indicators
110+
- **Submitted**: Green (`#00ff88`)
111+
- **Failed/Timeout**: Neon red (`#ff1188`)
112+
- **Success**: Green
113+
- **Warning**: Magenta (`#f711ff`)
114+
115+
## Reusable CSS Classes
116+
117+
### Spacing Utilities
118+
- `.mt-1`, `.mt-2`, `.mt-3` - Margin top
119+
- `.mb-1`, `.mb-2`, `.mb-3` - Margin bottom
120+
121+
### Flexbox Utilities
122+
- `.flex` - Display flex
123+
- `.flex-col` - Flex column direction
124+
- `.gap-1`, `.gap-2`, `.gap-3` - Gap spacing
125+
- `.items-center` - Align items center
126+
- `.justify-between` - Space between
127+
- `.justify-center` - Center justify
128+
129+
### Grid Utilities
130+
- `.grid` - Display grid
131+
- `.grid-cols-2`, `.grid-cols-3` - Column templates
132+
- `.grid-cols-auto` - Auto-fit grid
133+
134+
### Text Utilities
135+
- `.text-muted` - Muted gray text
136+
- `.text-success` - Success green text
137+
- `.text-warning` - Warning magenta text
138+
- `.text-error` - Error red text
139+
140+
### Component Classes
141+
- `.card` - Card container
142+
- `.section` - Page section
143+
- `.badge` - Badge/pill component
144+
- `.code-block` - Code display
145+
- `.loading`, `.loading-small` - Loading states
146+
- `.error`, `.error-small` - Error states
147+
148+
## Responsive Design
149+
150+
### Breakpoints
151+
- Mobile: `max-width: 768px`
152+
- Small mobile: `max-width: 480px`
153+
154+
### Mobile Adaptations
155+
- Headers: Stack vertically, center align
156+
- Tables: Reduced columns, hide non-essential
157+
- Font sizes: Slightly smaller
158+
- Padding: Reduced spacing
159+
- Grid: Single column layouts
160+
- TOC: Adjusted positioning
161+
162+
## Animation & Transitions
163+
164+
### Standard Transitions
165+
- Duration: `0.2s` for most interactions
166+
- Easing: `cubic-bezier(0.4, 0, 0.2, 1)`
167+
- Properties: `all` or specific (color, background-color, border-color)
168+
169+
### Transform Effects
170+
- Buttons: `-1px` translateY on hover
171+
- Cards: `-2px` translateY on hover
172+
- Scale: `1.05` to `1.1` for small interactive elements
173+
174+
### Loading Spinner
175+
- Border animation rotating 360°
176+
- Duration: `1s linear infinite`
177+
- Border: Top color is accent, others are transparent accent
178+
179+
## Simplifications Made
180+
181+
1. **Consolidated Variables**: Used CSS custom properties throughout
182+
2. **Removed Redundancy**: Eliminated duplicate styles
183+
3. **Component-Based**: Split styles by component for maintainability
184+
4. **Utility Classes**: Created reusable utility classes
185+
5. **Consistent Naming**: Used semantic class names
186+
6. **Simplified Selectors**: Avoided overly specific selectors
187+
7. **Modern CSS**: Used flexbox and grid instead of floats
188+
8. **Better Organization**: Logical grouping of related styles
189+
190+
## Key Improvements
191+
192+
1. **Better Maintainability**: Component-based CSS is easier to update
193+
2. **Consistency**: Centralized color variables ensure uniform appearance
194+
3. **Performance**: Removed unused styles and optimized selectors
195+
4. **Accessibility**: Better focus states and keyboard navigation
196+
5. **Responsiveness**: Mobile-first approach with clear breakpoints
197+
6. **Dark Mode Native**: Built specifically for dark theme
198+
7. **Type Safety**: Can be integrated with CSS-in-JS if needed
199+
200+
## Migration Checklist
201+
202+
✅ Color scheme and variables
203+
✅ Base HTML/body styles
204+
✅ Typography and fonts
205+
✅ Buttons and interactive elements
206+
✅ Cards and containers
207+
✅ Tables and grids
208+
✅ Forms and inputs
209+
✅ Foldouts and accordions
210+
✅ Modals and overlays
211+
✅ Code blocks and monospace
212+
✅ Badges and tags
213+
✅ Status indicators
214+
✅ Loading and error states
215+
✅ Scrollbars
216+
✅ Responsive design
217+
✅ Animations and transitions
218+
✅ Utility classes
219+
✅ Component-specific styles
220+
221+
## Browser Support
222+
223+
The CSS uses modern features supported in:
224+
- Chrome/Edge 88+
225+
- Firefox 78+
226+
- Safari 14+
227+
228+
### Features Used
229+
- CSS Custom Properties (Variables)
230+
- Flexbox
231+
- Grid Layout
232+
- Transform and Transitions
233+
- Border Radius
234+
- Box Shadow
235+
- Backdrop Filter
236+
- Sticky Positioning
237+
- Webkit Scrollbar Styling
238+
239+
## Testing Recommendations
240+
241+
1. Test in all major browsers (Chrome, Firefox, Safari, Edge)
242+
2. Test responsive layouts on various screen sizes
243+
3. Test keyboard navigation and focus states
244+
4. Verify color contrast for accessibility
245+
5. Test with screen readers
246+
6. Verify dark theme in different lighting conditions
247+
7. Test hover states on touch devices
248+
8. Check loading and error states
249+
9. Verify table scrolling and overflow
250+
10. Test modal and overlay interactions
251+
252+
## Future Enhancements
253+
254+
Potential improvements for future iterations:
255+
256+
1. **CSS-in-JS**: Consider styled-components or emotion for type safety
257+
2. **CSS Modules**: For better scoping and collision prevention
258+
3. **Theme Switching**: Add light mode support
259+
4. **CSS Variables**: Expand variable system for more flexibility
260+
5. **Animation Library**: Consider framer-motion for complex animations
261+
6. **Design Tokens**: Implement design token system
262+
7. **CSS Grid Templates**: More sophisticated grid layouts
263+
8. **Print Styles**: Add print-friendly CSS
264+
9. **Reduced Motion**: Respect prefers-reduced-motion
265+
10. **High Contrast**: Support for high-contrast modes

viewer_react/backend.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,10 +282,24 @@ def api_game(folder_path):
282282
for round_key, round_data in round_stats.items():
283283
round_num = int(round_key)
284284
processed_results = process_round_results(round_data, agent_names)
285+
286+
# Add player stats for each agent
287+
player_stats = round_data.get("player_stats", {})
288+
player_stats_formatted = {}
289+
for agent_name in agent_names:
290+
stats = player_stats.get(agent_name, {})
291+
player_stats_formatted[agent_name] = {
292+
"api_calls": stats.get("api_calls", 0),
293+
"cost": stats.get("instance_cost", 0.0),
294+
"exit_status": stats.get("exit_status"),
295+
"valid_submit": stats.get("valid_submit"),
296+
}
297+
285298
rounds.append(
286299
{
287300
"round_num": round_num,
288301
"results": processed_results,
302+
"player_stats": player_stats_formatted,
289303
}
290304
)
291305

0 commit comments

Comments
 (0)