opsiclear-admin commited on
Commit
304d5fa
·
verified ·
1 Parent(s): ac144c2

Apply ColmapView dark theme styling

Browse files
Files changed (1) hide show
  1. app.py +119 -19
app.py CHANGED
@@ -103,35 +103,135 @@ DEFAULT_STEP = 3
103
 
104
 
105
  css = """
106
- /* Overwrite Gradio Default Style */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  .stepper-wrapper { padding: 0; }
108
  .stepper-container { padding: 0; align-items: center; }
109
  .step-button { flex-direction: row; }
110
  .step-connector { transform: none; }
111
- .step-number { width: 16px; height: 16px; }
112
- .step-label { position: relative; bottom: 0; }
113
  .wrap.center.full { inset: 0; height: 100%; }
114
- .wrap.center.full.translucent { background: var(--block-background-fill); }
115
  .meta-text-center { display: block !important; position: absolute !important; top: unset !important; bottom: 0 !important; right: 0 !important; transform: unset !important; }
116
 
117
  /* Previewer */
118
- .previewer-container { position: relative; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; width: 100%; height: 722px; margin: 0 auto; padding: 20px; display: flex; flex-direction: column; align-items: center; justify-content: center; }
119
- .previewer-container .tips-icon { position: absolute; right: 10px; top: 10px; z-index: 10; border-radius: 10px; color: #fff; background-color: var(--color-accent); padding: 3px 6px; user-select: none; }
120
- .previewer-container .tips-text { position: absolute; right: 10px; top: 50px; color: #fff; background-color: var(--color-accent); border-radius: 10px; padding: 6px; text-align: left; max-width: 300px; z-index: 10; transition: all 0.3s; opacity: 0%; user-select: none; }
121
- .previewer-container .tips-text p { font-size: 14px; line-height: 1.2; }
122
- .tips-icon:hover + .tips-text { display: block; opacity: 100%; }
123
- .previewer-container .mode-row { width: 100%; display: flex; gap: 8px; justify-content: center; margin-bottom: 20px; flex-wrap: wrap; }
124
- .previewer-container .mode-btn { width: 24px; height: 24px; border-radius: 50%; cursor: pointer; opacity: 0.5; transition: all 0.2s; border: 2px solid #ddd; object-fit: cover; }
125
- .previewer-container .mode-btn:hover { opacity: 0.9; transform: scale(1.1); }
126
- .previewer-container .mode-btn.active { opacity: 1; border-color: var(--color-accent); transform: scale(1.1); }
127
- .previewer-container .display-row { margin-bottom: 20px; min-height: 400px; width: 100%; flex-grow: 1; display: flex; justify-content: center; align-items: center; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  .previewer-container .previewer-main-image { max-width: 100%; max-height: 100%; flex-grow: 1; object-fit: contain; display: none; }
129
  .previewer-container .previewer-main-image.visible { display: block; }
130
- .previewer-container .slider-row { width: 100%; display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 0 10px; }
131
- .previewer-container input[type=range] { -webkit-appearance: none; width: 100%; max-width: 400px; background: transparent; }
132
- .previewer-container input[type=range]::-webkit-slider-runnable-track { width: 100%; height: 8px; cursor: pointer; background: #ddd; border-radius: 5px; }
133
- .previewer-container input[type=range]::-webkit-slider-thumb { height: 20px; width: 20px; border-radius: 50%; background: var(--color-accent); cursor: pointer; -webkit-appearance: none; margin-top: -6px; box-shadow: 0 2px 5px rgba(0,0,0,0.2); transition: transform 0.1s; }
134
- .previewer-container input[type=range]::-webkit-slider-thumb:hover { transform: scale(1.2); }
 
 
 
 
135
  .gradio-container .padded:has(.previewer-container) { padding: 0 !important; }
136
  .gradio-container:has(.previewer-container) [data-testid="block-label"] { position: absolute; top: 0; left: 0; }
137
  """
 
103
 
104
 
105
  css = """
106
+ /* ColmapView Dark Theme */
107
+ :root {
108
+ --bg-void: #0a0a0a;
109
+ --bg-primary: #0f0f0f;
110
+ --bg-secondary: #161616;
111
+ --bg-tertiary: #1e1e1e;
112
+ --bg-input: #1a1a1a;
113
+ --bg-elevated: #242424;
114
+ --bg-hover: #262626;
115
+ --text-primary: #e8e8e8;
116
+ --text-secondary: #8a8a8a;
117
+ --text-muted: #5a5a5a;
118
+ --border-subtle: #222222;
119
+ --border-color: #2a2a2a;
120
+ --border-light: #3a3a3a;
121
+ --accent: #b8b8b8;
122
+ --accent-hover: #d0d0d0;
123
+ --accent-dim: rgba(184, 184, 184, 0.12);
124
+ --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3);
125
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.5), 0 2px 4px rgba(0, 0, 0, 0.3);
126
+ --radius: 0.25rem;
127
+ --radius-md: 0.375rem;
128
+ --radius-lg: 0.5rem;
129
+ --font-sans: 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif;
130
+ --font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
131
+ }
132
+
133
+ /* Global Overrides */
134
+ .gradio-container { background: var(--bg-primary) !important; color: var(--text-primary) !important; font-family: var(--font-sans) !important; }
135
+ .dark { background: var(--bg-primary) !important; }
136
+ body { background: var(--bg-void) !important; color-scheme: dark; }
137
+
138
+ /* Panels & Blocks */
139
+ .block { background: var(--bg-secondary) !important; border: 1px solid var(--border-color) !important; border-radius: var(--radius-lg) !important; }
140
+ .panel { background: var(--bg-secondary) !important; }
141
+
142
+ /* Inputs */
143
+ input, textarea, select { background: var(--bg-input) !important; border: 1px solid var(--border-color) !important; color: var(--text-primary) !important; border-radius: var(--radius) !important; }
144
+ input:focus, textarea:focus, select:focus { border-color: var(--accent) !important; outline: none !important; }
145
+
146
+ /* Buttons */
147
+ .primary { background: var(--accent) !important; color: var(--bg-void) !important; border: none !important; }
148
+ .primary:hover { background: var(--accent-hover) !important; }
149
+ .secondary { background: var(--bg-hover) !important; color: var(--text-primary) !important; border: 1px solid var(--border-color) !important; }
150
+ .secondary:hover { background: var(--bg-tertiary) !important; }
151
+ button { transition: all 0.15s ease-out !important; }
152
+
153
+ /* Labels & Text */
154
+ label, .label-wrap { color: var(--text-secondary) !important; font-size: 0.875rem !important; }
155
+ .prose { color: var(--text-primary) !important; }
156
+ .prose h2 { color: var(--text-primary) !important; border: none !important; }
157
+
158
+ /* Sliders */
159
+ input[type="range"] { accent-color: var(--accent) !important; }
160
+
161
+ /* Gallery */
162
+ .gallery { background: var(--bg-tertiary) !important; border: 1px solid var(--border-color) !important; }
163
+
164
+ /* Accordion */
165
+ .accordion { background: var(--bg-secondary) !important; border: 1px solid var(--border-color) !important; }
166
+
167
+ /* Scrollbar */
168
+ ::-webkit-scrollbar { width: 12px; }
169
+ ::-webkit-scrollbar-track { background: var(--bg-secondary); }
170
+ ::-webkit-scrollbar-thumb { background: var(--border-light); border-radius: 9999px; }
171
+ ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); }
172
+
173
+ /* Gradio Overrides */
174
  .stepper-wrapper { padding: 0; }
175
  .stepper-container { padding: 0; align-items: center; }
176
  .step-button { flex-direction: row; }
177
  .step-connector { transform: none; }
178
+ .step-number { width: 16px; height: 16px; background: var(--bg-tertiary) !important; border: 1px solid var(--border-color) !important; }
179
+ .step-label { position: relative; bottom: 0; color: var(--text-secondary) !important; }
180
  .wrap.center.full { inset: 0; height: 100%; }
181
+ .wrap.center.full.translucent { background: var(--bg-secondary); }
182
  .meta-text-center { display: block !important; position: absolute !important; top: unset !important; bottom: 0 !important; right: 0 !important; transform: unset !important; }
183
 
184
  /* Previewer */
185
+ .previewer-container {
186
+ position: relative;
187
+ font-family: var(--font-sans);
188
+ width: 100%;
189
+ height: 722px;
190
+ margin: 0 auto;
191
+ padding: 20px;
192
+ display: flex;
193
+ flex-direction: column;
194
+ align-items: center;
195
+ justify-content: center;
196
+ background: var(--bg-void);
197
+ border-radius: var(--radius-lg);
198
+ }
199
+ .previewer-container .tips-icon {
200
+ position: absolute; right: 10px; top: 10px; z-index: 10;
201
+ border-radius: var(--radius-md); color: var(--bg-void);
202
+ background-color: var(--accent); padding: 4px 8px;
203
+ user-select: none; font-size: 0.75rem; font-weight: 500;
204
+ }
205
+ .previewer-container .tips-text {
206
+ position: absolute; right: 10px; top: 45px;
207
+ color: var(--text-primary); background-color: var(--bg-elevated);
208
+ border: 1px solid var(--border-light); border-radius: var(--radius-md);
209
+ padding: 8px 12px; text-align: left; max-width: 280px; z-index: 10;
210
+ transition: opacity 0.15s ease-out; opacity: 0; user-select: none;
211
+ box-shadow: var(--shadow-md);
212
+ }
213
+ .previewer-container .tips-text p { font-size: 0.75rem; line-height: 1.4; color: var(--text-secondary); margin: 4px 0; }
214
+ .tips-icon:hover + .tips-text { opacity: 1; }
215
+ .previewer-container .mode-row { width: 100%; display: flex; gap: 8px; justify-content: center; margin-bottom: 16px; flex-wrap: wrap; }
216
+ .previewer-container .mode-btn {
217
+ width: 28px; height: 28px; border-radius: 50%; cursor: pointer;
218
+ opacity: 0.5; transition: all 0.15s ease-out;
219
+ border: 2px solid var(--border-light); object-fit: cover;
220
+ }
221
+ .previewer-container .mode-btn:hover { opacity: 0.85; transform: scale(1.1); border-color: var(--text-muted); }
222
+ .previewer-container .mode-btn.active { opacity: 1; border-color: var(--accent); transform: scale(1.1); }
223
+ .previewer-container .display-row { margin-bottom: 16px; min-height: 400px; width: 100%; flex-grow: 1; display: flex; justify-content: center; align-items: center; }
224
  .previewer-container .previewer-main-image { max-width: 100%; max-height: 100%; flex-grow: 1; object-fit: contain; display: none; }
225
  .previewer-container .previewer-main-image.visible { display: block; }
226
+ .previewer-container .slider-row { width: 100%; display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 0 16px; }
227
+ .previewer-container input[type=range] { -webkit-appearance: none; width: 100%; max-width: 400px; background: transparent; height: 20px; }
228
+ .previewer-container input[type=range]::-webkit-slider-runnable-track { width: 100%; height: 4px; cursor: pointer; background: var(--bg-tertiary); border-radius: 9999px; }
229
+ .previewer-container input[type=range]::-webkit-slider-thumb {
230
+ height: 12px; width: 12px; border-radius: 50%; background: var(--accent);
231
+ cursor: pointer; -webkit-appearance: none; margin-top: -4px;
232
+ box-shadow: var(--shadow-sm); transition: transform 0.1s ease-out;
233
+ }
234
+ .previewer-container input[type=range]::-webkit-slider-thumb:hover { transform: scale(1.2); background: var(--accent-hover); }
235
  .gradio-container .padded:has(.previewer-container) { padding: 0 !important; }
236
  .gradio-container:has(.previewer-container) [data-testid="block-label"] { position: absolute; top: 0; left: 0; }
237
  """