IceKhoffi commited on
Commit
4592459
·
verified ·
1 Parent(s): 29d9372

Update static/index.html

Browse files
Files changed (1) hide show
  1. static/index.html +43 -63
static/index.html CHANGED
@@ -4,7 +4,7 @@
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>ChickSense</title>
7
- <meta name="description" content=" Sistem Pemantauan Otomatis Kesehatan dan Kesejahteraan Ayam" />
8
 
9
  <script src="https://cdn.tailwindcss.com"></script>
10
  <link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
@@ -15,24 +15,20 @@
15
  <header class="flex flex-col md:flex-row justify-between items-start md:items-center mb-4 gap-3">
16
  <div class="flex items-center gap-3">
17
 
18
- <!-- Logo -->
19
  <div class="w-12 h-12 bg-amber-100 rounded-lg flex items-center justify-center border border-amber-200" aria-hidden="true">
20
  <img src="/static/assets/logo-.jpeg" alt="ChickSense Logo" class="rounded-lg">
21
  </div>
22
 
23
- <!-- Judul dan Waktu -->
24
- <div>
25
  <h1 class="text-xl md:text-2xl font-bold text-slate-800">ChickSense Dashboard</h1>
26
- <p id="datetime" class="text-xs md:text-sm text-slate-500" aria-live="polite">Tunggu memuat Waktu...</p>
27
  </div>
28
  </div>
29
  </header>
30
 
31
  <main class="grid grid-cols-1 lg:grid-cols-12 gap-4">
32
  <section class="lg:col-span-9 flex flex-col gap-4" aria-label="Video streams and controls">
33
- <!-- Grid Kamera 2x2 -->
34
  <div class="grid grid-cols-1 md:grid-cols-2 gap-4" role="region">
35
- <!-- Kamera 1 -->
36
  <div class="card relative">
37
  <div class="p-2">
38
  <div class="aspect-video bg-slate-800 rounded-md">
@@ -41,7 +37,6 @@
41
  <div class="cam-badge">CAM 1</div>
42
  </div>
43
  </div>
44
- <!-- Kamera 2 -->
45
  <div class="card relative">
46
  <div class="p-2">
47
  <div class="aspect-video bg-slate-800 rounded-md">
@@ -50,7 +45,6 @@
50
  <div class="cam-badge">CAM 2</div>
51
  </div>
52
  </div>
53
- <!-- Kamera 3 -->
54
  <div class="card relative">
55
  <div class="p-2">
56
  <div class="aspect-video bg-slate-800 rounded-md">
@@ -59,7 +53,6 @@
59
  <div class="cam-badge">CAM 3</div>
60
  </div>
61
  </div>
62
- <!-- Kamera 4 -->
63
  <div class="card relative">
64
  <div class="p-2">
65
  <div class="aspect-video bg-slate-800 rounded-md">
@@ -70,19 +63,16 @@
70
  </div>
71
  </div>
72
 
73
- <!-- Grid Kontrol Tampilan dan Log Sistem -->
74
  <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
75
- <!-- Kontrol Tampilan -->
76
  <div class="card" role="region">
77
  <div class="card-header flex items-center justify-between">
78
  <div class="flex items-center gap-2">
79
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-slate-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
80
  <path stroke-linecap="round" stroke-linejoin="round" d="M6 13.5V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 9.75V10.5" />
81
  </svg>
82
- <h3 class="font-semibold text-slate-700 text-sm">Kontrol Tampilan</h3>
83
  </div>
84
 
85
- <!-- Button Setting Kamera -->
86
  <button id="settings-button" title="Double-click to change camera URLs" class="p-1 text-slate-500 hover:text-blue-600 hover:bg-slate-300 rounded-md transition-colors">
87
  <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
88
  <circle cx="12" cy="12" r="3"></circle>
@@ -91,7 +81,6 @@
91
  </button>
92
  </div>
93
 
94
- <!-- Button Toggle -->
95
  <div id="toggle-controls" class="p-3 grid grid-cols-3 gap-3">
96
  <button id="toggle-detected" data-control="show_detected" class="control-button flex items-center justify-center gap-2 p-2.5 rounded-lg text-xs md:text-sm font-medium" aria-pressed="true">
97
  <svg class="w-6 h-6 icon-outline" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
@@ -100,7 +89,7 @@
100
  <svg class="w-6 h-6 icon-solid" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
101
  <path fill-rule="evenodd" d="M10.5 3.75a6.75 6.75 0 100 13.5 6.75 6.75 0 000-13.5zM2.25 10.5a8.25 8.25 0 1114.59 5.28l4.69 4.69a.75.75 0 11-1.06 1.06l-4.69-4.69A8.25 8.25 0 012.25 10.5z" clip-rule="evenodd"/>
102
  </svg>
103
- <span>Deteksi</span>
104
  </button>
105
 
106
  </button>
@@ -119,7 +108,7 @@
119
  <circle cx="272" cy="460" r="28"/> <circle cx="88" cy="288" r="20"/>
120
  </svg>
121
 
122
- <span>Kepadatan</span>
123
  </button>
124
 
125
  <button id="toggle-inactive" data-control="show_inactive" class="control-button flex items-center justify-center gap-2 p-2.5 rounded-lg text-xs md:text-sm font-medium" aria-pressed="false">
@@ -129,18 +118,17 @@
129
  <svg class="w-6 h-6 icon-solid" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
130
  <path fill-rule="evenodd" d="M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25zM12.75 6a.75.75 0 00-1.5 0v6c0 .414.336.75.75.75h4.5a.75.75 0 000-1.5h-3.75V6z" clip-rule="evenodd"/>
131
  </svg>
132
- <span>Inaktivitas</span>
133
  </button>
134
  </div>
135
  </div>
136
 
137
- <!-- Sistem Log Chart -->
138
  <div class="card" role="region">
139
  <div class="card-header flex items-center gap-2">
140
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-slate-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
141
  <path stroke-linecap="round" stroke-linejoin="round" d="M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z" />
142
  </svg>
143
- <h3 class="font-semibold text-slate-700 text-sm">Log Sistem</h3>
144
  </div>
145
  <div id="system-log" class="p-4 text-xs text-slate-500 space-y-2 h-28 overflow-y-auto" role="log" aria-live="polite"></div>
146
  </div>
@@ -148,16 +136,14 @@
148
  </section>
149
 
150
  <aside class="lg:col-span-3 flex flex-col gap-4" aria-label="Analysis and export panels">
151
- <!-- Card Ringkasan Analisis -->
152
- <div class="card" role="region">
153
  <div class="card-header flex items-center gap-2">
154
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-blue-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
155
  <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 010 3.75H5.625a1.875 1.875 0 010-3.75z" />
156
  </svg>
157
- <h3 class="font-semibold text-slate-700 text-sm">Ringkasan Analisis</h3>
158
  </div>
159
  <div class="p-4 space-y-3 text-sm">
160
- <!-- Jumlah Terdeteksi -->
161
  <div class="flex items-center gap-3 p-2.5 bg-slate-50 rounded-lg">
162
  <div class="w-9 h-9 bg-blue-100 text-blue-600 rounded-md flex items-center justify-center flex-shrink-0">
163
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor">
@@ -165,12 +151,11 @@
165
  </svg>
166
  </div>
167
  <div>
168
- <p class="text-slate-500 text-xs font-medium">Jumlah Terdeteksi</p>
169
  <p id="detected-count" class="text-lg font-bold text-slate-800">0</p>
170
  </div>
171
  </div>
172
- <!-- Kluster Kepadatan -->
173
- <div class="flex items-center gap-3 p-2.5 bg-slate-50 rounded-lg">
174
  <div class="w-9 h-9 bg-amber-100 text-amber-600 rounded-md flex items-center justify-center flex-shrink-0">
175
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="none" stroke="currentColor" stroke-width="24">
176
  <circle cx="256" cy="256" r="240"/> <circle cx="220" cy="120" r="64"/> <circle cx="356" cy="92" r="34"/> <circle cx="420" cy="160" r="26"/> <circle cx="120" cy="100" r="28"/> <circle cx="104" cy="196" r="44"/>
@@ -179,11 +164,10 @@
179
  </svg>
180
  </div>
181
  <div>
182
- <p class="text-slate-500 text-xs font-medium">Kluster Kepadatan</p>
183
  <p id="density-count" class="text-lg font-bold text-slate-800">0</p>
184
  </div>
185
  </div>
186
- <!-- Ayam Tidak Aktif -->
187
  <div class="flex items-center gap-3 p-2.5 bg-slate-50 rounded-lg">
188
  <div class="w-9 h-9 bg-red-100 text-red-600 rounded-md flex items-center justify-center flex-shrink-0">
189
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor">
@@ -191,79 +175,75 @@
191
  </svg>
192
  </div>
193
  <div>
194
- <p class="text-slate-500 text-xs font-medium">Ayam Tidak Aktif</p>
195
  <p id="inactive-count" class="text-lg font-bold text-slate-800">0</p>
196
  </div>
197
  </div>
198
  </div>
199
  </div>
200
- <!-- Card Analisis Vokalisasi -->
201
  <div class="card" role="region">
202
  <div class="card-header flex items-center gap-2">
203
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-green-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
204
  <path stroke-linecap="round" stroke-linejoin="round" d="M19.114 5.636a9 9 0 010 12.728M16.463 8.288a5.25 5.25 0 010 7.424M6.75 8.25l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75z" />
205
  </svg>
206
- <h3 class="font-semibold text-slate-700 text-sm">Analisis Vokalisasi</h3>
207
  </div>
208
 
209
  <div id="vocalization-content" class="p-4">
210
- <!-- Populated by app.js -->
211
- </div>
212
  </div>
213
 
214
- <!-- Card Ekspor Data Metrik -->
215
- <div class="card" role="region">
216
  <div class="card-header flex items-center gap-2">
217
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-slate-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
218
  <path stroke-linecap="round" stroke-linejoin="round" d="M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3" />
219
  </svg>
220
- <h3 class="font-semibold text-slate-700 text-sm">Ekspor Data Metrik (CSV)</h3>
221
  </div>
222
  <div class="p-4">
223
  <button id="open-export-modal-btn" class="btn btn-primary w-full text-sm">
224
- Ekspor CSV
225
  </button>
226
- <p class="text-[11px] text-slate-500 mt-2 text-center">Ekspor data dengan double-klik tombol diatas.</p>
227
  </div>
228
  </div>
229
  </aside>
230
  </main>
231
  </div>
232
 
233
- <!-- Modal Section -->
234
  <div id="settings-modal" class="modal z-50" role="dialog" aria-labelledby="settings-modal-title" aria-hidden="true">
235
  <div class="modal-backdrop"></div>
236
  <div class="modal-container">
237
  <div class="card w-full max-w-lg">
238
  <div class="card-header flex items-center justify-between">
239
- <h3 id="settings-modal-title" class="font-semibold text-slate-700 text-sm">Pengaturan URL</h3>
240
  <button class="modal-close-btn" aria-label="Close">✕</button>
241
  </div>
242
  <div class="p-4 space-y-4 text-sm">
243
  <div>
244
- <label for="cam1-url" class="block text-xs font-medium text-slate-600 mb-1">URL Kamera 1</label>
245
- <input type="text" id="cam1-url" class="modal-input" placeholder="Masukkan URL untuk Kamera 1">
246
  </div>
247
  <div>
248
- <label for="cam2-url" class="block text-xs font-medium text-slate-600 mb-1">URL Kamera 2</label>
249
- <input type="text" id="cam2-url" class="modal-input" placeholder="Masukkan URL untuk Kamera 2">
250
  </div>
251
  <div>
252
- <label for="cam3-url" class="block text-xs font-medium text-slate-600 mb-1">URL Kamera 3</label>
253
- <input type="text" id="cam3-url" class="modal-input" placeholder="Masukkan URL untuk Kamera 3">
254
  </div>
255
  <div>
256
- <label for="cam4-url" class="block text-xs font-medium text-slate-600 mb-1">URL Kamera 4</label>
257
- <input type="text" id="cam4-url" class="modal-input" placeholder="Masukkan URL untuk Kamera 4">
258
  </div>
259
  <hr class="border-slate-200">
260
  <div>
261
- <label for="audio-url" class="block text-xs font-medium text-slate-600 mb-1">URL Audio</label>
262
- <input type="text" id="audio-url" class="modal-input" placeholder="Masukkan URL untuk Audio Source">
263
  </div>
264
  <div class="flex justify-end gap-2 pt-2">
265
- <button id="stop-all-streams-btn" class="btn bg-red-600 hover:bg-red-700 text-white text-sm">Stop Semua Stream</button>
266
- <button id="save-settings-btn" class="btn btn-primary text-sm">Simpan & Mulai Ulang</button>
267
  </div>
268
  </div>
269
  </div>
@@ -275,29 +255,29 @@
275
  <div class="modal-container">
276
  <div class="card w-full max-w-md">
277
  <div class="card-header flex items-center justify-between">
278
- <h3 id="export-modal-title" class="font-semibold text-slate-700 text-sm">Ekspor Data Metrik</h3>
279
  <button class="modal-close-btn" aria-label="Close">✕</button>
280
  </div>
281
  <div class="p-4 space-y-3 text-sm">
282
  <div>
283
- <label for="start-date" class="block text-xs font-medium text-slate-600 mb-1">Tanggal Mulai</label>
284
  <input type="date" id="start-date" class="modal-input">
285
  </div>
286
  <div>
287
- <label for="end-date" class="block text-xs font-medium text-slate-600 mb-1">Tanggal Akhir</label>
288
  <input type="date" id="end-date" class="modal-input">
289
  </div>
290
  <div>
291
- <label for="camera-select" class="block text-xs font-medium text-slate-600 mb-1">Pilih Kamera</label>
292
  <select id="camera-select" class="modal-input bg-white">
293
- <option value="">Semua Kamera</option>
294
- <option value="1">Kamera 1</option>
295
- <option value="2">Kamera 2</option>
296
- <option value="3">Kamera 3</option>
297
- <option value="4">Kamera 4</option>
298
  </select>
299
  </div>
300
- <button id="download-csv-btn" class="btn btn-primary w-full">Unduh CSV</button>
301
  </div>
302
  </div>
303
  </div>
 
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>ChickSense</title>
7
+ <meta name="description" content="Automatic Health and Welfare Monitoring System for Chickens" />
8
 
9
  <script src="https://cdn.tailwindcss.com"></script>
10
  <link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
 
15
  <header class="flex flex-col md:flex-row justify-between items-start md:items-center mb-4 gap-3">
16
  <div class="flex items-center gap-3">
17
 
 
18
  <div class="w-12 h-12 bg-amber-100 rounded-lg flex items-center justify-center border border-amber-200" aria-hidden="true">
19
  <img src="/static/assets/logo-.jpeg" alt="ChickSense Logo" class="rounded-lg">
20
  </div>
21
 
22
+ <div>
 
23
  <h1 class="text-xl md:text-2xl font-bold text-slate-800">ChickSense Dashboard</h1>
24
+ <p id="datetime" class="text-xs md:text-sm text-slate-500" aria-live="polite">Loading Time...</p>
25
  </div>
26
  </div>
27
  </header>
28
 
29
  <main class="grid grid-cols-1 lg:grid-cols-12 gap-4">
30
  <section class="lg:col-span-9 flex flex-col gap-4" aria-label="Video streams and controls">
 
31
  <div class="grid grid-cols-1 md:grid-cols-2 gap-4" role="region">
 
32
  <div class="card relative">
33
  <div class="p-2">
34
  <div class="aspect-video bg-slate-800 rounded-md">
 
37
  <div class="cam-badge">CAM 1</div>
38
  </div>
39
  </div>
 
40
  <div class="card relative">
41
  <div class="p-2">
42
  <div class="aspect-video bg-slate-800 rounded-md">
 
45
  <div class="cam-badge">CAM 2</div>
46
  </div>
47
  </div>
 
48
  <div class="card relative">
49
  <div class="p-2">
50
  <div class="aspect-video bg-slate-800 rounded-md">
 
53
  <div class="cam-badge">CAM 3</div>
54
  </div>
55
  </div>
 
56
  <div class="card relative">
57
  <div class="p-2">
58
  <div class="aspect-video bg-slate-800 rounded-md">
 
63
  </div>
64
  </div>
65
 
 
66
  <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
 
67
  <div class="card" role="region">
68
  <div class="card-header flex items-center justify-between">
69
  <div class="flex items-center gap-2">
70
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-slate-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
71
  <path stroke-linecap="round" stroke-linejoin="round" d="M6 13.5V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 9.75V10.5" />
72
  </svg>
73
+ <h3 class="font-semibold text-slate-700 text-sm">View Controls</h3>
74
  </div>
75
 
 
76
  <button id="settings-button" title="Double-click to change camera URLs" class="p-1 text-slate-500 hover:text-blue-600 hover:bg-slate-300 rounded-md transition-colors">
77
  <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
78
  <circle cx="12" cy="12" r="3"></circle>
 
81
  </button>
82
  </div>
83
 
 
84
  <div id="toggle-controls" class="p-3 grid grid-cols-3 gap-3">
85
  <button id="toggle-detected" data-control="show_detected" class="control-button flex items-center justify-center gap-2 p-2.5 rounded-lg text-xs md:text-sm font-medium" aria-pressed="true">
86
  <svg class="w-6 h-6 icon-outline" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
 
89
  <svg class="w-6 h-6 icon-solid" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
90
  <path fill-rule="evenodd" d="M10.5 3.75a6.75 6.75 0 100 13.5 6.75 6.75 0 000-13.5zM2.25 10.5a8.25 8.25 0 1114.59 5.28l4.69 4.69a.75.75 0 11-1.06 1.06l-4.69-4.69A8.25 8.25 0 012.25 10.5z" clip-rule="evenodd"/>
91
  </svg>
92
+ <span>Detection</span>
93
  </button>
94
 
95
  </button>
 
108
  <circle cx="272" cy="460" r="28"/> <circle cx="88" cy="288" r="20"/>
109
  </svg>
110
 
111
+ <span>Density</span>
112
  </button>
113
 
114
  <button id="toggle-inactive" data-control="show_inactive" class="control-button flex items-center justify-center gap-2 p-2.5 rounded-lg text-xs md:text-sm font-medium" aria-pressed="false">
 
118
  <svg class="w-6 h-6 icon-solid" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
119
  <path fill-rule="evenodd" d="M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25zM12.75 6a.75.75 0 00-1.5 0v6c0 .414.336.75.75.75h4.5a.75.75 0 000-1.5h-3.75V6z" clip-rule="evenodd"/>
120
  </svg>
121
+ <span>Inactivity</span>
122
  </button>
123
  </div>
124
  </div>
125
 
 
126
  <div class="card" role="region">
127
  <div class="card-header flex items-center gap-2">
128
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-slate-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
129
  <path stroke-linecap="round" stroke-linejoin="round" d="M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z" />
130
  </svg>
131
+ <h3 class="font-semibold text-slate-700 text-sm">System Log</h3>
132
  </div>
133
  <div id="system-log" class="p-4 text-xs text-slate-500 space-y-2 h-28 overflow-y-auto" role="log" aria-live="polite"></div>
134
  </div>
 
136
  </section>
137
 
138
  <aside class="lg:col-span-3 flex flex-col gap-4" aria-label="Analysis and export panels">
139
+ <div class="card" role="region">
 
140
  <div class="card-header flex items-center gap-2">
141
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-blue-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
142
  <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 010 3.75H5.625a1.875 1.875 0 010-3.75z" />
143
  </svg>
144
+ <h3 class="font-semibold text-slate-700 text-sm">Analysis Summary</h3>
145
  </div>
146
  <div class="p-4 space-y-3 text-sm">
 
147
  <div class="flex items-center gap-3 p-2.5 bg-slate-50 rounded-lg">
148
  <div class="w-9 h-9 bg-blue-100 text-blue-600 rounded-md flex items-center justify-center flex-shrink-0">
149
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor">
 
151
  </svg>
152
  </div>
153
  <div>
154
+ <p class="text-slate-500 text-xs font-medium">Total Detected</p>
155
  <p id="detected-count" class="text-lg font-bold text-slate-800">0</p>
156
  </div>
157
  </div>
158
+ <div class="flex items-center gap-3 p-2.5 bg-slate-50 rounded-lg">
 
159
  <div class="w-9 h-9 bg-amber-100 text-amber-600 rounded-md flex items-center justify-center flex-shrink-0">
160
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="none" stroke="currentColor" stroke-width="24">
161
  <circle cx="256" cy="256" r="240"/> <circle cx="220" cy="120" r="64"/> <circle cx="356" cy="92" r="34"/> <circle cx="420" cy="160" r="26"/> <circle cx="120" cy="100" r="28"/> <circle cx="104" cy="196" r="44"/>
 
164
  </svg>
165
  </div>
166
  <div>
167
+ <p class="text-slate-500 text-xs font-medium">Density Clusters</p>
168
  <p id="density-count" class="text-lg font-bold text-slate-800">0</p>
169
  </div>
170
  </div>
 
171
  <div class="flex items-center gap-3 p-2.5 bg-slate-50 rounded-lg">
172
  <div class="w-9 h-9 bg-red-100 text-red-600 rounded-md flex items-center justify-center flex-shrink-0">
173
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor">
 
175
  </svg>
176
  </div>
177
  <div>
178
+ <p class="text-slate-500 text-xs font-medium">Inactive Chickens</p>
179
  <p id="inactive-count" class="text-lg font-bold text-slate-800">0</p>
180
  </div>
181
  </div>
182
  </div>
183
  </div>
 
184
  <div class="card" role="region">
185
  <div class="card-header flex items-center gap-2">
186
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-green-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
187
  <path stroke-linecap="round" stroke-linejoin="round" d="M19.114 5.636a9 9 0 010 12.728M16.463 8.288a5.25 5.25 0 010 7.424M6.75 8.25l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75z" />
188
  </svg>
189
+ <h3 class="font-semibold text-slate-700 text-sm">Vocalization Analysis</h3>
190
  </div>
191
 
192
  <div id="vocalization-content" class="p-4">
193
+ </div>
 
194
  </div>
195
 
196
+ <div class="card" role="region">
 
197
  <div class="card-header flex items-center gap-2">
198
  <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-slate-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
199
  <path stroke-linecap="round" stroke-linejoin="round" d="M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3" />
200
  </svg>
201
+ <h3 class="font-semibold text-slate-700 text-sm">Export Metric Data (CSV)</h3>
202
  </div>
203
  <div class="p-4">
204
  <button id="open-export-modal-btn" class="btn btn-primary w-full text-sm">
205
+ Export CSV
206
  </button>
207
+ <p class="text-[11px] text-slate-500 mt-2 text-center">Export data by double-clicking the button above.</p>
208
  </div>
209
  </div>
210
  </aside>
211
  </main>
212
  </div>
213
 
 
214
  <div id="settings-modal" class="modal z-50" role="dialog" aria-labelledby="settings-modal-title" aria-hidden="true">
215
  <div class="modal-backdrop"></div>
216
  <div class="modal-container">
217
  <div class="card w-full max-w-lg">
218
  <div class="card-header flex items-center justify-between">
219
+ <h3 id="settings-modal-title" class="font-semibold text-slate-700 text-sm">URL Settings</h3>
220
  <button class="modal-close-btn" aria-label="Close">✕</button>
221
  </div>
222
  <div class="p-4 space-y-4 text-sm">
223
  <div>
224
+ <label for="cam1-url" class="block text-xs font-medium text-slate-600 mb-1">Camera 1 URL</label>
225
+ <input type="text" id="cam1-url" class="modal-input" placeholder="Enter URL for Camera 1">
226
  </div>
227
  <div>
228
+ <label for="cam2-url" class="block text-xs font-medium text-slate-600 mb-1">Camera 2 URL</label>
229
+ <input type="text" id="cam2-url" class="modal-input" placeholder="Enter URL for Camera 2">
230
  </div>
231
  <div>
232
+ <label for="cam3-url" class="block text-xs font-medium text-slate-600 mb-1">Camera 3 URL</label>
233
+ <input type="text" id="cam3-url" class="modal-input" placeholder="Enter URL for Camera 3">
234
  </div>
235
  <div>
236
+ <label for="cam4-url" class="block text-xs font-medium text-slate-600 mb-1">Camera 4 URL</label>
237
+ <input type="text" id="cam4-url" class="modal-input" placeholder="Enter URL for Camera 4">
238
  </div>
239
  <hr class="border-slate-200">
240
  <div>
241
+ <label for="audio-url" class="block text-xs font-medium text-slate-600 mb-1">Audio URL</label>
242
+ <input type="text" id="audio-url" class="modal-input" placeholder="Enter URL for Audio Source">
243
  </div>
244
  <div class="flex justify-end gap-2 pt-2">
245
+ <button id="stop-all-streams-btn" class="btn bg-red-600 hover:bg-red-700 text-white text-sm">Stop All Streams</button>
246
+ <button id="save-settings-btn" class="btn btn-primary text-sm">Save & Restart</button>
247
  </div>
248
  </div>
249
  </div>
 
255
  <div class="modal-container">
256
  <div class="card w-full max-w-md">
257
  <div class="card-header flex items-center justify-between">
258
+ <h3 id="export-modal-title" class="font-semibold text-slate-700 text-sm">Export Metric Data</h3>
259
  <button class="modal-close-btn" aria-label="Close">✕</button>
260
  </div>
261
  <div class="p-4 space-y-3 text-sm">
262
  <div>
263
+ <label for="start-date" class="block text-xs font-medium text-slate-600 mb-1">Start Date</label>
264
  <input type="date" id="start-date" class="modal-input">
265
  </div>
266
  <div>
267
+ <label for="end-date" class="block text-xs font-medium text-slate-600 mb-1">End Date</label>
268
  <input type="date" id="end-date" class="modal-input">
269
  </div>
270
  <div>
271
+ <label for="camera-select" class="block text-xs font-medium text-slate-600 mb-1">Select Camera</label>
272
  <select id="camera-select" class="modal-input bg-white">
273
+ <option value="">All Cameras</option>
274
+ <option value="1">Camera 1</option>
275
+ <option value="2">Camera 2</option>
276
+ <option value="3">Camera 3</option>
277
+ <option value="4">Camera 4</option>
278
  </select>
279
  </div>
280
+ <button id="download-csv-btn" class="btn btn-primary w-full">Download CSV</button>
281
  </div>
282
  </div>
283
  </div>