ashu1069 commited on
Commit
2bd5bc1
·
1 Parent(s): 7bb1554

ui: comprehensive dark sustainability theme — panels, inputs, code, markdown tables

Browse files
Files changed (1) hide show
  1. app.py +290 -12
app.py CHANGED
@@ -161,24 +161,38 @@ def dispatch(mode: str, image_path: str | None, head: str, jurisdiction: str):
161
 
162
 
163
  CSS = """
 
 
164
  :root {
165
  --bg-0: #04080a;
 
 
166
  --emerald: #00d97e;
167
  --emerald-glow: #00ff8c;
168
  --cyan: #00e5ff;
169
  --leaf: #7dd3a8;
170
  --ink: #e6f3ec;
171
  --ink-dim: #8aa39a;
172
- --line: rgba(125, 211, 168, 0.12);
 
 
 
 
173
  }
174
- .gradio-container {
 
 
175
  background: radial-gradient(ellipse 80% 60% at 20% 0%, rgba(0, 217, 126, 0.18), transparent 60%),
176
  radial-gradient(ellipse 70% 50% at 85% 20%, rgba(0, 229, 255, 0.10), transparent 60%),
 
177
  linear-gradient(180deg, #04080a 0%, #061410 50%, #04080a 100%) !important;
178
  color: var(--ink) !important;
179
- font-family: "Inter", ui-sans-serif, system-ui, sans-serif !important;
180
  }
181
- #hero { padding: 28px 4px 8px; }
 
 
 
182
  #hero h1 {
183
  font-family: "Fraunces", Georgia, serif;
184
  font-weight: 400;
@@ -193,26 +207,290 @@ CSS = """
193
  -webkit-text-fill-color: transparent;
194
  font-weight: 300;
195
  }
196
- #hero p { color: var(--ink-dim); margin-top: 12px; max-width: 680px; }
197
  #hero .chip {
198
  display: inline-flex; gap: 8px; align-items: center;
199
  padding: 6px 14px; border-radius: 999px;
200
- border: 1px solid rgba(125, 211, 168, 0.28);
201
  background: linear-gradient(135deg, rgba(0, 217, 126, 0.08), rgba(0, 229, 255, 0.04));
202
  color: var(--leaf); font-size: 0.82rem; font-weight: 500;
203
  }
204
  .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--emerald-glow);
205
- box-shadow: 0 0 12px var(--emerald-glow); display: inline-block; }
206
- .gr-button-primary {
207
- background: linear-gradient(135deg, var(--emerald), var(--cyan)) !important;
208
- color: #04130c !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
209
  border: 0 !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  font-weight: 600 !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
  }
212
- .gr-panel, .gr-block, .gr-form {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  background: rgba(7, 18, 15, 0.6) !important;
214
- border-color: var(--line) !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  """
217
 
218
  HERO_HTML = """
 
161
 
162
 
163
  CSS = """
164
+ @import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,300;9..144,400;9..144,500&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
165
+
166
  :root {
167
  --bg-0: #04080a;
168
+ --bg-1: #07120f;
169
+ --bg-2: #0a1f17;
170
  --emerald: #00d97e;
171
  --emerald-glow: #00ff8c;
172
  --cyan: #00e5ff;
173
  --leaf: #7dd3a8;
174
  --ink: #e6f3ec;
175
  --ink-dim: #8aa39a;
176
+ --ink-muted: #5b7a70;
177
+ --line: rgba(125, 211, 168, 0.14);
178
+ --line-bright: rgba(125, 211, 168, 0.28);
179
+ --panel: rgba(10, 28, 22, 0.55);
180
+ --panel-hi: rgba(18, 42, 32, 0.72);
181
  }
182
+
183
+ /* ===== Page background ===== */
184
+ html, body, gradio-app, .gradio-container {
185
  background: radial-gradient(ellipse 80% 60% at 20% 0%, rgba(0, 217, 126, 0.18), transparent 60%),
186
  radial-gradient(ellipse 70% 50% at 85% 20%, rgba(0, 229, 255, 0.10), transparent 60%),
187
+ radial-gradient(ellipse 90% 70% at 50% 110%, rgba(0, 217, 126, 0.10), transparent 60%),
188
  linear-gradient(180deg, #04080a 0%, #061410 50%, #04080a 100%) !important;
189
  color: var(--ink) !important;
190
+ font-family: "Inter", ui-sans-serif, system-ui, -apple-system, sans-serif !important;
191
  }
192
+ .gradio-container { max-width: 1280px !important; margin: 0 auto !important; }
193
+
194
+ /* ===== Hero ===== */
195
+ #hero { padding: 32px 4px 12px; }
196
  #hero h1 {
197
  font-family: "Fraunces", Georgia, serif;
198
  font-weight: 400;
 
207
  -webkit-text-fill-color: transparent;
208
  font-weight: 300;
209
  }
210
+ #hero p { color: var(--ink-dim); margin-top: 14px; max-width: 680px; line-height: 1.55; }
211
  #hero .chip {
212
  display: inline-flex; gap: 8px; align-items: center;
213
  padding: 6px 14px; border-radius: 999px;
214
+ border: 1px solid var(--line-bright);
215
  background: linear-gradient(135deg, rgba(0, 217, 126, 0.08), rgba(0, 229, 255, 0.04));
216
  color: var(--leaf); font-size: 0.82rem; font-weight: 500;
217
  }
218
  .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--emerald-glow);
219
+ box-shadow: 0 0 12px var(--emerald-glow); display: inline-block;
220
+ animation: pulse 1.6s ease-in-out infinite; }
221
+ @keyframes pulse { 0%,100% {opacity:1;} 50% {opacity:0.4;} }
222
+
223
+ /* ===== Catch-all: every Gradio block becomes a glass panel ===== */
224
+ .gradio-container [class*="block"],
225
+ .gradio-container [class*="panel"],
226
+ .gradio-container [class*="form"],
227
+ .gradio-container .form,
228
+ .gradio-container .block {
229
+ background: var(--panel) !important;
230
+ border: 1px solid var(--line) !important;
231
+ border-radius: 14px !important;
232
+ backdrop-filter: blur(10px);
233
+ }
234
+ /* Don't double-wrap rows/cols — they're transparent layout containers */
235
+ .gradio-container [class*="row"],
236
+ .gradio-container [class*="column"],
237
+ .gradio-container [class*="group"]:not([class*="block"]) {
238
+ background: transparent !important;
239
  border: 0 !important;
240
+ backdrop-filter: none;
241
+ }
242
+
243
+ /* ===== Labels ===== */
244
+ .gradio-container label,
245
+ .gradio-container [class*="label"] {
246
+ color: var(--ink-dim) !important;
247
+ font-size: 0.78rem !important;
248
+ font-weight: 600 !important;
249
+ letter-spacing: 0.06em;
250
+ text-transform: uppercase;
251
+ }
252
+
253
+ /* ===== Inputs (textbox, dropdown, etc.) ===== */
254
+ .gradio-container input[type="text"],
255
+ .gradio-container input[type="number"],
256
+ .gradio-container textarea,
257
+ .gradio-container select,
258
+ .gradio-container [class*="input"] input,
259
+ .gradio-container [class*="textbox"] textarea {
260
+ background: rgba(4, 12, 9, 0.7) !important;
261
+ color: var(--ink) !important;
262
+ border: 1px solid var(--line) !important;
263
+ border-radius: 10px !important;
264
+ font-family: "Inter", sans-serif !important;
265
+ }
266
+ .gradio-container input:focus,
267
+ .gradio-container textarea:focus,
268
+ .gradio-container select:focus {
269
+ border-color: var(--emerald) !important;
270
+ outline: 0 !important;
271
+ box-shadow: 0 0 0 3px rgba(0, 217, 126, 0.15) !important;
272
+ }
273
+
274
+ /* ===== Dropdown menu ===== */
275
+ .gradio-container [class*="dropdown"] [class*="options"],
276
+ .gradio-container [class*="dropdown"] ul,
277
+ .gradio-container [role="listbox"] {
278
+ background: var(--bg-1) !important;
279
+ border: 1px solid var(--line-bright) !important;
280
+ border-radius: 10px !important;
281
+ color: var(--ink) !important;
282
+ }
283
+ .gradio-container [role="option"] {
284
+ color: var(--ink) !important;
285
+ }
286
+ .gradio-container [role="option"]:hover,
287
+ .gradio-container [role="option"][aria-selected="true"] {
288
+ background: rgba(0, 217, 126, 0.12) !important;
289
+ color: var(--emerald-glow) !important;
290
+ }
291
+
292
+ /* ===== Radio buttons ===== */
293
+ .gradio-container [class*="radio"] label,
294
+ .gradio-container input[type="radio"] + span,
295
+ .gradio-container [role="radio"] {
296
+ background: rgba(4, 12, 9, 0.55) !important;
297
+ border: 1px solid var(--line) !important;
298
+ border-radius: 10px !important;
299
+ color: var(--ink-dim) !important;
300
+ padding: 8px 14px !important;
301
+ cursor: pointer !important;
302
+ font-weight: 500 !important;
303
+ text-transform: none !important;
304
+ letter-spacing: 0 !important;
305
+ font-size: 0.9rem !important;
306
+ transition: all 200ms;
307
+ }
308
+ .gradio-container [class*="radio"] input[type="radio"]:checked + span,
309
+ .gradio-container [class*="radio"] [aria-checked="true"],
310
+ .gradio-container [role="radio"][aria-checked="true"] {
311
+ background: linear-gradient(135deg, rgba(0, 217, 126, 0.18), rgba(0, 229, 255, 0.08)) !important;
312
+ border-color: var(--emerald) !important;
313
+ color: var(--emerald-glow) !important;
314
+ }
315
+
316
+ /* ===== Buttons ===== */
317
+ .gradio-container button {
318
+ font-family: "Inter", sans-serif !important;
319
  font-weight: 600 !important;
320
+ border-radius: 999px !important;
321
+ transition: all 240ms cubic-bezier(0.2, 0.8, 0.2, 1) !important;
322
+ }
323
+ .gradio-container button[class*="primary"],
324
+ .gradio-container .primary {
325
+ background: linear-gradient(135deg, var(--emerald) 0%, var(--cyan) 100%) !important;
326
+ color: #04130c !important;
327
+ border: 0 !important;
328
+ box-shadow: 0 6px 24px rgba(0, 217, 126, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.25) !important;
329
+ }
330
+ .gradio-container button[class*="primary"]:hover {
331
+ transform: translateY(-1px);
332
+ box-shadow: 0 12px 32px rgba(0, 217, 126, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.3) !important;
333
+ }
334
+ .gradio-container button[class*="secondary"],
335
+ .gradio-container button:not([class*="primary"]) {
336
+ background: rgba(125, 211, 168, 0.06) !important;
337
+ color: var(--ink) !important;
338
+ border: 1px solid var(--line-bright) !important;
339
+ }
340
+ .gradio-container button:not([class*="primary"]):hover {
341
+ background: rgba(0, 217, 126, 0.12) !important;
342
+ border-color: var(--emerald) !important;
343
  }
344
+
345
+ /* ===== Image upload zone ===== */
346
+ .gradio-container [class*="image"] [class*="upload"],
347
+ .gradio-container [data-testid="image"],
348
+ .gradio-container [class*="ImageUploader"] {
349
+ background: rgba(4, 12, 9, 0.55) !important;
350
+ border: 1.5px dashed var(--line-bright) !important;
351
+ border-radius: 14px !important;
352
+ color: var(--ink-dim) !important;
353
+ transition: all 220ms;
354
+ }
355
+ .gradio-container [class*="image"] [class*="upload"]:hover {
356
+ border-color: var(--emerald) !important;
357
+ background: rgba(0, 217, 126, 0.05) !important;
358
+ }
359
+ .gradio-container [class*="image"] svg {
360
+ color: var(--leaf) !important;
361
+ }
362
+
363
+ /* ===== Examples gallery ===== */
364
+ .gradio-container [class*="examples"] table,
365
+ .gradio-container [class*="example"] {
366
+ background: transparent !important;
367
+ border: 0 !important;
368
+ }
369
+ .gradio-container [class*="examples"] tr,
370
+ .gradio-container [class*="example"] td {
371
  background: rgba(7, 18, 15, 0.6) !important;
372
+ border: 1px solid var(--line) !important;
373
+ border-radius: 10px !important;
374
+ color: var(--ink-dim) !important;
375
+ }
376
+ .gradio-container [class*="examples"] tr:hover {
377
+ border-color: var(--emerald) !important;
378
+ background: rgba(0, 217, 126, 0.05) !important;
379
+ }
380
+
381
+ /* ===== Output: Markdown rendering ===== */
382
+ .gradio-container [class*="markdown"],
383
+ .gradio-container [class*="prose"] {
384
+ color: var(--ink) !important;
385
+ font-family: "Inter", sans-serif !important;
386
+ }
387
+ .gradio-container [class*="markdown"] h1,
388
+ .gradio-container [class*="markdown"] h2,
389
+ .gradio-container [class*="markdown"] h3 {
390
+ font-family: "Fraunces", Georgia, serif !important;
391
+ font-weight: 400 !important;
392
+ letter-spacing: -0.015em !important;
393
+ color: var(--ink) !important;
394
+ margin-top: 4px !important;
395
+ }
396
+ .gradio-container [class*="markdown"] h3 {
397
+ font-size: 1.4rem !important;
398
+ border-bottom: 1px solid var(--line) !important;
399
+ padding-bottom: 8px;
400
+ }
401
+ .gradio-container [class*="markdown"] strong { color: var(--ink) !important; }
402
+ .gradio-container [class*="markdown"] em { color: var(--leaf) !important; font-style: italic; }
403
+ .gradio-container [class*="markdown"] code {
404
+ background: rgba(0, 217, 126, 0.08) !important;
405
+ color: var(--leaf) !important;
406
+ font-family: "JetBrains Mono", ui-monospace, monospace !important;
407
+ padding: 2px 6px !important;
408
+ border-radius: 6px !important;
409
+ font-size: 0.86em !important;
410
+ border: 1px solid var(--line);
411
  }
412
+ .gradio-container [class*="markdown"] table {
413
+ border-collapse: separate !important;
414
+ border-spacing: 0 !important;
415
+ width: 100%;
416
+ margin: 12px 0 !important;
417
+ border: 1px solid var(--line) !important;
418
+ border-radius: 10px !important;
419
+ overflow: hidden;
420
+ }
421
+ .gradio-container [class*="markdown"] th,
422
+ .gradio-container [class*="markdown"] td {
423
+ padding: 10px 14px !important;
424
+ border-bottom: 1px solid var(--line) !important;
425
+ text-align: left !important;
426
+ background: rgba(7, 18, 15, 0.5) !important;
427
+ }
428
+ .gradio-container [class*="markdown"] tr:last-child td { border-bottom: 0 !important; }
429
+ .gradio-container [class*="markdown"] th {
430
+ background: rgba(0, 217, 126, 0.06) !important;
431
+ color: var(--leaf) !important;
432
+ font-weight: 600 !important;
433
+ text-transform: uppercase;
434
+ font-size: 0.74rem;
435
+ letter-spacing: 0.08em;
436
+ }
437
+
438
+ /* ===== Output: Code block (JSON) ===== */
439
+ .gradio-container [class*="code"] pre,
440
+ .gradio-container [class*="code"] code,
441
+ .gradio-container [class*="Code"] pre {
442
+ background: rgba(2, 8, 6, 0.92) !important;
443
+ color: #d2efe0 !important;
444
+ font-family: "JetBrains Mono", ui-monospace, monospace !important;
445
+ font-size: 0.82rem !important;
446
+ line-height: 1.6 !important;
447
+ border-radius: 12px !important;
448
+ border: 1px solid var(--line) !important;
449
+ padding: 16px !important;
450
+ }
451
+ .gradio-container [class*="code"] .token.string { color: #a5e8ff !important; }
452
+ .gradio-container [class*="code"] .token.property,
453
+ .gradio-container [class*="code"] .token.key { color: var(--leaf) !important; }
454
+ .gradio-container [class*="code"] .token.number { color: #ffb547 !important; }
455
+ .gradio-container [class*="code"] .token.boolean,
456
+ .gradio-container [class*="code"] .token.null { color: #ff9bcc !important; }
457
+
458
+ /* ===== Accordion ===== */
459
+ .gradio-container [class*="accordion"] [class*="label"],
460
+ .gradio-container details summary {
461
+ color: var(--leaf) !important;
462
+ font-weight: 600 !important;
463
+ letter-spacing: 0.06em;
464
+ text-transform: uppercase;
465
+ font-size: 0.78rem !important;
466
+ cursor: pointer;
467
+ }
468
+
469
+ /* ===== Section titles (gr.Markdown ### Capture / Passport) ===== */
470
+ .gradio-container [class*="markdown"] > h3:first-child {
471
+ font-size: 1.6rem !important;
472
+ border-bottom: 0 !important;
473
+ padding-bottom: 0;
474
+ margin-bottom: 12px !important;
475
+ display: flex; align-items: center; gap: 12px;
476
+ }
477
+ .gradio-container [class*="markdown"] > h3:first-child::before {
478
+ content: "";
479
+ width: 28px; height: 1px;
480
+ background: linear-gradient(90deg, var(--emerald), transparent);
481
+ }
482
+
483
+ /* ===== Scrollbars ===== */
484
+ .gradio-container ::-webkit-scrollbar { width: 8px; height: 8px; }
485
+ .gradio-container ::-webkit-scrollbar-thumb { background: rgba(125, 211, 168, 0.18); border-radius: 4px; }
486
+ .gradio-container ::-webkit-scrollbar-track { background: transparent; }
487
+
488
+ /* ===== Selection ===== */
489
+ ::selection { background: rgba(0, 217, 126, 0.35); color: white; }
490
+
491
+ /* ===== Footer ===== */
492
+ .gradio-container a { color: var(--leaf) !important; }
493
+ .gradio-container a:hover { color: var(--emerald-glow) !important; }
494
  """
495
 
496
  HERO_HTML = """