Skip to content

Commit 6fb84ca

Browse files
committed
Enh(viewer): Styling improvements I
1 parent 156e7e2 commit 6fb84ca

15 files changed

Lines changed: 241 additions & 153 deletions

File tree

codeclash/viewer/static/css/style.css

Lines changed: 140 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,58 @@
1-
/* CodeClash Trajectory Viewer - Modern CSS with Dark Mode */
1+
/* CodeClash Trajectory Viewer - Bootstrap-enhanced Professional Design */
22

33
:root {
4-
/* Light theme colors */
4+
/* Professional color palette - aligned with Bootstrap */
5+
--bs-primary: #0d6efd;
6+
--bs-secondary: #6c757d;
7+
--bs-success: #198754;
8+
--bs-info: #0dcaf0;
9+
--bs-warning: #ffc107;
10+
--bs-danger: #dc3545;
11+
--bs-light: #f8f9fa;
12+
--bs-dark: #212529;
13+
14+
/* Custom theme colors */
515
--bg-primary: #ffffff;
616
--bg-secondary: #f8f9fa;
717
--bg-tertiary: #e9ecef;
818
--text-primary: #212529;
919
--text-secondary: #6c757d;
1020
--text-muted: #adb5bd;
1121
--border-color: #dee2e6;
12-
--accent-color: #0d6efd;
22+
--accent-color: var(--bs-primary);
1323
--accent-hover: #0b5ed7;
14-
--success-color: #198754;
15-
--warning-color: #fd7e14;
16-
--danger-color: #dc3545;
24+
--success-color: var(--bs-success);
25+
--warning-color: var(--bs-warning);
26+
--danger-color: var(--bs-danger);
1727
--code-bg: #f8f9fa;
1828
--shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
1929
--shadow-lg: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
2030
}
2131

2232
[data-theme="dark"] {
23-
/* Dark theme colors */
24-
--bg-primary: #1a1a1a;
25-
--bg-secondary: #2d2d2d;
26-
--bg-tertiary: #404040;
33+
/* Dark theme colors - Bootstrap compatible */
34+
--bs-primary: #6ea8fe;
35+
--bs-secondary: #6c757d;
36+
--bs-success: #75b798;
37+
--bs-info: #6edff6;
38+
--bs-warning: #ffda6a;
39+
--bs-danger: #ea868f;
40+
--bs-light: #f8f9fa;
41+
--bs-dark: #212529;
42+
43+
--bg-primary: #212529;
44+
--bg-secondary: #343a40;
45+
--bg-tertiary: #495057;
2746
--text-primary: #ffffff;
28-
--text-secondary: #b0b0b0;
29-
--text-muted: #808080;
30-
--border-color: #404040;
31-
--accent-color: #4dabf7;
32-
--accent-hover: #339af0;
33-
--success-color: #51cf66;
34-
--warning-color: #ff922b;
35-
--danger-color: #ff6b6b;
36-
--code-bg: #2d2d2d;
47+
--text-secondary: #adb5bd;
48+
--text-muted: #6c757d;
49+
--border-color: #495057;
50+
--accent-color: var(--bs-primary);
51+
--accent-hover: #5a9cfc;
52+
--success-color: var(--bs-success);
53+
--warning-color: var(--bs-warning);
54+
--danger-color: var(--bs-danger);
55+
--code-bg: #343a40;
3756
--shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.3);
3857
--shadow-lg: 0 0.5rem 1rem rgba(0, 0, 0, 0.4);
3958
}
@@ -46,23 +65,36 @@
4665
}
4766

4867
body {
49-
font-family:
50-
-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", sans-serif;
51-
line-height: 1.6;
68+
font-family: var(
69+
--bs-font-sans-serif,
70+
-apple-system,
71+
BlinkMacSystemFont,
72+
"Segoe UI",
73+
"Roboto",
74+
"Helvetica Neue",
75+
Arial,
76+
sans-serif
77+
);
78+
line-height: 1.5;
5279
color: var(--text-primary);
5380
background-color: var(--bg-primary);
54-
transition: all 0.3s ease;
81+
transition:
82+
color 0.15s ease-in-out,
83+
background-color 0.15s ease-in-out;
84+
font-size: 1rem;
85+
font-weight: 400;
5586
}
5687

57-
/* Header */
88+
/* Header - Bootstrap enhanced */
5889
.header {
5990
background-color: var(--bg-secondary);
6091
border-bottom: 1px solid var(--border-color);
6192
padding: 1rem 0;
6293
position: sticky;
6394
top: 0;
64-
z-index: 100;
95+
z-index: 1000;
6596
box-shadow: var(--shadow);
97+
backdrop-filter: blur(10px);
6698
}
6799

68100
.header-content {
@@ -101,24 +133,12 @@ body {
101133
font-size: 0.875rem;
102134
}
103135

136+
/* Override Bootstrap button styles for consistency */
104137
.pick-game-button {
105-
padding: 0.5rem 1rem;
106-
border: 1px solid var(--border-color);
107-
border-radius: 0.375rem;
108-
background-color: var(--accent-color);
109-
color: white;
110-
font-size: 0.875rem;
111-
font-weight: 500;
112-
cursor: pointer;
113-
transition: all 0.2s ease;
114138
min-width: 120px;
115139
}
116140

117-
.pick-game-button:hover {
118-
background-color: var(--accent-hover);
119-
transform: translateY(-1px);
120-
box-shadow: var(--shadow);
121-
}
141+
/* Let Bootstrap handle hover states */
122142

123143
.pick-game-button kbd {
124144
background-color: rgba(255, 255, 255, 0.2);
@@ -131,46 +151,24 @@ body {
131151
color: rgba(255, 255, 255, 0.9);
132152
}
133153

154+
/* Bootstrap handles most styling */
134155
.pick-game-new-tab-button {
135-
padding: 0.5rem;
136-
border: 1px solid var(--border-color);
137-
border-radius: 0.375rem;
138-
background-color: var(--bg-tertiary);
139-
color: var(--accent-color);
140-
font-size: 0.9rem;
141-
font-weight: 500;
142-
cursor: pointer;
143-
transition: all 0.2s ease;
144156
margin-left: 0.5rem;
145157
min-width: 40px;
146158
}
147159

148-
.pick-game-new-tab-button:hover {
149-
background-color: var(--accent-color);
150-
color: white;
151-
transform: translateY(-1px);
152-
box-shadow: var(--shadow);
153-
}
160+
/* Let Bootstrap handle hover states */
154161

162+
/* Bootstrap handles most styling for theme toggle */
155163
#theme-toggle {
156-
background-color: var(--bg-tertiary);
157-
border: 1px solid var(--border-color);
158-
border-radius: 0.375rem;
159-
padding: 0.5rem;
160-
cursor: pointer;
161164
font-size: 1.25rem;
162-
color: var(--text-primary);
163-
transition: all 0.2s ease;
164165
}
165166

166-
#theme-toggle:hover {
167-
background-color: var(--accent-color);
168-
color: white;
169-
}
167+
/* Let Bootstrap handle hover states */
170168

171-
/* Main content */
169+
/* Main content - Bootstrap enhanced */
172170
.main-content {
173-
max-width: 1200px;
171+
max-width: 1400px;
174172
margin: 0 auto;
175173
padding: 2rem 1rem;
176174
}
@@ -248,13 +246,10 @@ body {
248246
margin-bottom: 2rem;
249247
}
250248

249+
/* Results Table - Bootstrap enhanced */
251250
.results-table {
252-
width: 100%;
253-
border-collapse: collapse;
254-
background-color: var(--bg-secondary);
255251
border-radius: 0.5rem;
256252
overflow: hidden;
257-
border: 1px solid var(--border-color);
258253
box-shadow: var(--shadow);
259254
}
260255

@@ -352,14 +347,15 @@ body {
352347
line-height: 1.5;
353348
}
354349

355-
/* Foldouts */
350+
/* Foldouts - Professional styling */
356351
.foldout {
357352
border: 1px solid var(--border-color);
358353
border-radius: 0.5rem;
359354
margin-bottom: 1rem;
360355
background-color: var(--bg-secondary);
361356
overflow: hidden;
362357
transition: all 0.2s ease;
358+
box-shadow: var(--shadow);
363359
}
364360

365361
/* Remove any browser default styling that might add blue lines */
@@ -803,12 +799,80 @@ details summary {
803799
}
804800
}
805801

806-
/* Smooth transitions */
802+
/* Bootstrap Integration & Dark Mode Support */
803+
[data-theme="dark"] .btn {
804+
--bs-btn-color: var(--text-primary);
805+
--bs-btn-bg: var(--bg-secondary);
806+
--bs-btn-border-color: var(--border-color);
807+
}
808+
809+
[data-theme="dark"] .btn-primary {
810+
--bs-btn-color: #fff;
811+
--bs-btn-bg: var(--bs-primary);
812+
--bs-btn-border-color: var(--bs-primary);
813+
--bs-btn-hover-color: #fff;
814+
--bs-btn-hover-bg: var(--accent-hover);
815+
--bs-btn-hover-border-color: var(--accent-hover);
816+
}
817+
818+
[data-theme="dark"] .btn-outline-primary {
819+
--bs-btn-color: var(--bs-primary);
820+
--bs-btn-border-color: var(--bs-primary);
821+
--bs-btn-hover-color: #fff;
822+
--bs-btn-hover-bg: var(--bs-primary);
823+
--bs-btn-hover-border-color: var(--bs-primary);
824+
}
825+
826+
[data-theme="dark"] .btn-outline-secondary {
827+
--bs-btn-color: var(--text-secondary);
828+
--bs-btn-border-color: var(--border-color);
829+
--bs-btn-hover-color: var(--text-primary);
830+
--bs-btn-hover-bg: var(--bg-tertiary);
831+
--bs-btn-hover-border-color: var(--border-color);
832+
}
833+
834+
[data-theme="dark"] .table {
835+
--bs-table-color: var(--text-primary);
836+
--bs-table-bg: var(--bg-primary);
837+
--bs-table-border-color: var(--border-color);
838+
--bs-table-striped-bg: var(--bg-secondary);
839+
--bs-table-hover-bg: var(--bg-tertiary);
840+
}
841+
842+
[data-theme="dark"] .form-control {
843+
color: var(--text-primary);
844+
background-color: var(--bg-primary);
845+
border-color: var(--border-color);
846+
}
847+
848+
[data-theme="dark"] .form-control:focus {
849+
color: var(--text-primary);
850+
background-color: var(--bg-primary);
851+
border-color: var(--accent-color);
852+
box-shadow: 0 0 0 0.25rem rgba(110, 168, 254, 0.25);
853+
}
854+
855+
/* Professional subtle animations */
856+
.btn,
857+
.foldout summary,
858+
.nav-to-round-btn {
859+
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
860+
}
861+
862+
.btn:hover {
863+
transform: translateY(-1px);
864+
}
865+
866+
.foldout:hover {
867+
transform: translateY(-1px);
868+
}
869+
870+
/* Smooth transitions for theme changes */
807871
* {
808872
transition:
809-
color 0.3s ease,
810-
background-color 0.3s ease,
811-
border-color 0.3s ease;
873+
color 0.3s cubic-bezier(0.4, 0, 0.2, 1),
874+
background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1),
875+
border-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
812876
}
813877

814878
/* Focus styles for accessibility */

codeclash/viewer/static/js/app.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ function setTheme(theme) {
1616
const themeIcon = themeToggle.querySelector(".theme-icon");
1717

1818
if (theme === "dark") {
19-
themeIcon.textContent = "☀️";
19+
themeIcon.innerHTML = '<i class="bi bi-sun"></i>';
2020
themeToggle.setAttribute("aria-label", "Switch to light mode");
2121
} else {
22-
themeIcon.textContent = "🌙";
22+
themeIcon.innerHTML = '<i class="bi bi-moon"></i>';
2323
themeToggle.setAttribute("aria-label", "Switch to dark mode");
2424
}
2525
}

codeclash/viewer/static/js/picker.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ function toggleFolder(folderPath) {
119119
if (isCollapsed) {
120120
// Expand folder - show all children
121121
folderRow.classList.remove("collapsed");
122-
if (collapseIcon) collapseIcon.textContent = "📁";
122+
if (collapseIcon) collapseIcon.innerHTML = '<i class="bi bi-folder"></i>';
123123

124124
// Show all descendant rows
125125
const allRows = document.querySelectorAll(".game-row");
@@ -141,7 +141,8 @@ function toggleFolder(folderPath) {
141141
} else {
142142
// Collapse folder - hide all children
143143
folderRow.classList.add("collapsed");
144-
if (collapseIcon) collapseIcon.textContent = "📂";
144+
if (collapseIcon)
145+
collapseIcon.innerHTML = '<i class="bi bi-folder-open"></i>';
145146

146147
hideChildrenOfFolder(folderPath);
147148
}

codeclash/viewer/templates/includes/analysis.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<!-- Analysis Section -->
22
<section class="analysis-section">
3-
<h2>📊 Analysis</h2>
3+
<h2><i class="bi bi-graph-up"></i> Analysis</h2>
44

55
<!-- Line Counting Analysis -->
66
<details class="foldout">
7-
<summary>📈 Line Counting Analysis</summary>
7+
<summary><i class="bi bi-graph-up-arrow"></i> Line Counting Analysis</summary>
88
<div class="log-content">
99
{% if analysis_data and analysis_data.all_files %}
1010
<div class="line-analysis-container">

codeclash/viewer/templates/includes/folder_path.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
<!-- Current Folder Path -->
22
<section class="folder-path-section">
33
<div class="folder-path-container">
4-
<h3>📁 Current Folder:</h3>
4+
<h3><i class="bi bi-folder"></i> Current Folder:</h3>
55
<div class="path-display">
66
<code class="folder-path">{{ selected_folder_path }}</code>
7-
<button class="copy-path-btn" data-path="{{ selected_folder_path }}" title="Copy folder path">
8-
📋 Copy path
7+
<button class="btn btn-outline-primary btn-sm copy-path-btn" data-path="{{ selected_folder_path }}" title="Copy folder path">
8+
<i class="bi bi-clipboard"></i> Copy path
99
</button>
10-
<button class="move-rename-btn" onclick="showMoveDialog('{{ selected_folder_path }}')" title="Move/rename this experiment">
11-
📁 Move/Rename
10+
<button class="btn btn-outline-warning btn-sm move-rename-btn" onclick="showMoveDialog('{{ selected_folder_path }}')" title="Move/rename this experiment">
11+
<i class="bi bi-folder-symlink"></i> Move/Rename
1212
</button>
13-
<button class="delete-experiment-btn" data-folder-path="{{ selected_folder_path }}" title="Delete this experiment">
14-
🗑️ Delete
13+
<button class="btn btn-outline-danger btn-sm delete-experiment-btn" data-folder-path="{{ selected_folder_path }}" title="Delete this experiment">
14+
<i class="bi bi-trash"></i> Delete
1515
</button>
1616
</div>
1717
</div>

0 commit comments

Comments
 (0)