div0-space commited on
Commit
e5ab311
·
verified ·
1 Parent(s): d9c3419

Readable dark theme and light theme

Browse files
Files changed (1) hide show
  1. api-tester.html +94 -4
api-tester.html CHANGED
@@ -4,6 +4,14 @@
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>LibraxisAI Responses API Tester</title>
 
 
 
 
 
 
 
 
7
  <style>
8
  :root {
9
  --bg: #0a0a0f;
@@ -13,13 +21,71 @@
13
  --accent: #6366f1;
14
  --accent-hover: #818cf8;
15
  --text: #e4e4e7;
16
- --text-dim: #71717a;
17
  --success: #22c55e;
18
  --error: #ef4444;
19
  --warning: #f59e0b;
20
  --gradient: linear-gradient(135deg, #6366f1 0%, #a855f7 50%, #ec4899 100%);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  }
22
 
 
 
23
  * { box-sizing: border-box; margin: 0; padding: 0; }
24
 
25
  body {
@@ -32,6 +98,7 @@
32
 
33
  /* Header */
34
  .header {
 
35
  text-align: center;
36
  padding: 1.5rem 0;
37
  border-bottom: 1px solid var(--border);
@@ -337,14 +404,14 @@
337
  justify-content: space-between;
338
  align-items: center;
339
  padding: 0.5rem 0.75rem;
340
- background: rgba(255,255,255,0.02);
341
  border-bottom: 1px solid var(--border);
342
  font-size: 0.75rem;
343
  cursor: pointer;
344
  }
345
 
346
  .output-item-header:hover {
347
- background: rgba(255,255,255,0.04);
348
  }
349
 
350
  .output-step {
@@ -458,7 +525,7 @@
458
  color: var(--text-dim);
459
  text-transform: uppercase;
460
  letter-spacing: 0.05em;
461
- font-size: 0.625rem;
462
  }
463
 
464
  /* Footer */
@@ -508,6 +575,7 @@
508
  </head>
509
  <body>
510
  <div class="header">
 
511
  <h1>LibraxisAI Responses API Tester</h1>
512
  <p>Multi-lane comparison tool for Responses API endpoints with conversation chaining</p>
513
  </div>
@@ -635,6 +703,28 @@
635
  // Parsed step summaries per lane: laneId -> { steps: [...] }
636
  const laneRuns = new Map();
637
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
638
  function collectResults() {
639
  const results = {
640
  timestamp: new Date().toISOString(),
 
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>LibraxisAI Responses API Tester</title>
7
+ <script>
8
+ try {
9
+ const savedTheme = localStorage.getItem('api-tester-theme');
10
+ if (savedTheme === 'light' || savedTheme === 'dark') document.documentElement.dataset.theme = savedTheme;
11
+ } catch (e) {
12
+ // Storage unavailable: follow the system theme.
13
+ }
14
+ </script>
15
  <style>
16
  :root {
17
  --bg: #0a0a0f;
 
21
  --accent: #6366f1;
22
  --accent-hover: #818cf8;
23
  --text: #e4e4e7;
24
+ --text-dim: #a1a1aa;
25
  --success: #22c55e;
26
  --error: #ef4444;
27
  --warning: #f59e0b;
28
  --gradient: linear-gradient(135deg, #6366f1 0%, #a855f7 50%, #ec4899 100%);
29
+ --overlay: rgba(255, 255, 255, 0.03);
30
+ --overlay-strong: rgba(255, 255, 255, 0.06);
31
+ color-scheme: dark;
32
+ }
33
+
34
+ /* Light theme: explicit choice, or the system preference unless dark is forced. */
35
+ :root[data-theme="light"] {
36
+ --bg: #f5f6fa;
37
+ --surface: #ffffff;
38
+ --surface-hover: #eef0f6;
39
+ --border: #d4d7e2;
40
+ --accent: #4f46e5;
41
+ --accent-hover: #4338ca;
42
+ --text: #111827;
43
+ --text-dim: #4b5563;
44
+ --success: #15803d;
45
+ --error: #b91c1c;
46
+ --warning: #b45309;
47
+ --gradient: linear-gradient(135deg, #4f46e5 0%, #9333ea 50%, #db2777 100%);
48
+ --overlay: rgba(15, 23, 42, 0.03);
49
+ --overlay-strong: rgba(15, 23, 42, 0.07);
50
+ color-scheme: light;
51
+ }
52
+
53
+ @media (prefers-color-scheme: light) {
54
+ :root:not([data-theme="dark"]) {
55
+ --bg: #f5f6fa;
56
+ --surface: #ffffff;
57
+ --surface-hover: #eef0f6;
58
+ --border: #d4d7e2;
59
+ --accent: #4f46e5;
60
+ --accent-hover: #4338ca;
61
+ --text: #111827;
62
+ --text-dim: #4b5563;
63
+ --success: #15803d;
64
+ --error: #b91c1c;
65
+ --warning: #b45309;
66
+ --gradient: linear-gradient(135deg, #4f46e5 0%, #9333ea 50%, #db2777 100%);
67
+ --overlay: rgba(15, 23, 42, 0.03);
68
+ --overlay-strong: rgba(15, 23, 42, 0.07);
69
+ color-scheme: light;
70
+ }
71
+ }
72
+
73
+ .theme-toggle {
74
+ position: absolute;
75
+ top: 1rem;
76
+ right: 1rem;
77
+ width: 2.25rem;
78
+ height: 2.25rem;
79
+ border-radius: 50%;
80
+ border: 1px solid var(--border);
81
+ background: var(--surface);
82
+ color: var(--text);
83
+ font-size: 1rem;
84
+ cursor: pointer;
85
  }
86
 
87
+ .theme-toggle:hover { border-color: var(--accent); }
88
+
89
  * { box-sizing: border-box; margin: 0; padding: 0; }
90
 
91
  body {
 
98
 
99
  /* Header */
100
  .header {
101
+ position: relative;
102
  text-align: center;
103
  padding: 1.5rem 0;
104
  border-bottom: 1px solid var(--border);
 
404
  justify-content: space-between;
405
  align-items: center;
406
  padding: 0.5rem 0.75rem;
407
+ background: var(--overlay);
408
  border-bottom: 1px solid var(--border);
409
  font-size: 0.75rem;
410
  cursor: pointer;
411
  }
412
 
413
  .output-item-header:hover {
414
+ background: var(--overlay-strong);
415
  }
416
 
417
  .output-step {
 
525
  color: var(--text-dim);
526
  text-transform: uppercase;
527
  letter-spacing: 0.05em;
528
+ font-size: 0.6875rem;
529
  }
530
 
531
  /* Footer */
 
575
  </head>
576
  <body>
577
  <div class="header">
578
+ <button class="theme-toggle" id="themeToggle" onclick="cycleTheme()" title="Theme: auto → light → dark">◐</button>
579
  <h1>LibraxisAI Responses API Tester</h1>
580
  <p>Multi-lane comparison tool for Responses API endpoints with conversation chaining</p>
581
  </div>
 
703
  // Parsed step summaries per lane: laneId -> { steps: [...] }
704
  const laneRuns = new Map();
705
 
706
+ const THEME_ICONS = { auto: '◐', light: '☀', dark: '☾' };
707
+
708
+ function applyTheme(theme) {
709
+ if (theme === 'light' || theme === 'dark') document.documentElement.dataset.theme = theme;
710
+ else delete document.documentElement.dataset.theme;
711
+ const toggle = document.getElementById('themeToggle');
712
+ if (toggle) toggle.textContent = THEME_ICONS[theme] || THEME_ICONS.auto;
713
+ }
714
+
715
+ function cycleTheme() {
716
+ const current = document.documentElement.dataset.theme || 'auto';
717
+ const next = { auto: 'light', light: 'dark', dark: 'auto' }[current];
718
+ applyTheme(next);
719
+ try {
720
+ localStorage.setItem('api-tester-theme', next);
721
+ } catch (e) {
722
+ // Storage unavailable: the choice lasts for this page view only.
723
+ }
724
+ }
725
+
726
+ applyTheme(document.documentElement.dataset.theme || 'auto');
727
+
728
  function collectResults() {
729
  const results = {
730
  timestamp: new Date().toISOString(),