FajarHidaa commited on
Commit
f6961c3
·
verified ·
1 Parent(s): 45dd93a

Upload styles.css

Browse files
Files changed (1) hide show
  1. assets/styles.css +486 -0
assets/styles.css ADDED
@@ -0,0 +1,486 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&display=swap');
2
+
3
+ :root {
4
+ --bg: #0B1B22;
5
+ --bg-raised: #122631;
6
+ --bg-inset: #0F2229;
7
+ --border: #23414F;
8
+ --border-soft: #1B3540;
9
+ --text: #E7F1F0;
10
+ --text-muted: #7E9CA3;
11
+ --text-faint: #4C6870;
12
+ --accent: #E8A33D;
13
+ --accent-dim: rgba(232, 163, 61, 0.14);
14
+ --good: #4FAE7C;
15
+ --good-dim: rgba(79, 174, 124, 0.14);
16
+ --warn: #E8A33D;
17
+ --warn-dim: rgba(232, 163, 61, 0.14);
18
+ --bad: #E2604F;
19
+ --bad-dim: rgba(226, 96, 79, 0.14);
20
+ --info: #5FA8D3;
21
+ --info-dim: rgba(95, 168, 211, 0.14);
22
+ --font-display: 'Space Grotesk', 'IBM Plex Sans', sans-serif;
23
+ }
24
+
25
+ @media (prefers-reduced-motion: reduce) {
26
+ * { animation: none !important; transition: none !important; }
27
+ }
28
+
29
+ body, .gradio-container {
30
+ background: var(--bg) !important;
31
+ font-family: 'IBM Plex Sans', sans-serif;
32
+ }
33
+
34
+ .gradio-container { max-width: 1180px !important; }
35
+
36
+ /* ---------- Header ---------- */
37
+ .app-header {
38
+ padding: 8px 4px 10px;
39
+ border-bottom: 1px solid var(--border-soft);
40
+ margin-bottom: 10px;
41
+ }
42
+ .app-header .eyebrow {
43
+ font-family: 'IBM Plex Mono', monospace;
44
+ font-size: 11px;
45
+ letter-spacing: 0.16em;
46
+ color: var(--accent);
47
+ text-transform: uppercase;
48
+ margin-bottom: 10px;
49
+ }
50
+ .app-header h1 {
51
+ font-family: var(--font-display);
52
+ font-weight: 700;
53
+ font-size: 34px;
54
+ letter-spacing: -0.01em;
55
+ color: var(--text);
56
+ margin: 0 0 8px;
57
+ }
58
+ .app-header .subtitle {
59
+ font-size: 14px;
60
+ color: var(--text-muted);
61
+ max-width: 640px;
62
+ line-height: 1.55;
63
+ margin: 0;
64
+ }
65
+
66
+ /* ---------- Panels ---------- */
67
+ .console-panel {
68
+ background: var(--bg-raised) !important;
69
+ border: 1px solid var(--border) !important;
70
+ border-radius: 14px !important;
71
+ padding: 4px !important;
72
+ }
73
+ .panel-eyebrow {
74
+ font-family: 'IBM Plex Mono', monospace;
75
+ font-size: 11px;
76
+ letter-spacing: 0.12em;
77
+ text-transform: uppercase;
78
+ color: var(--text-faint);
79
+ padding: 14px 14px 6px;
80
+ }
81
+ .panel-divider {
82
+ height: 1px;
83
+ background: var(--border-soft);
84
+ margin: 6px 14px 14px;
85
+ }
86
+
87
+ /* ---------- Status pill ---------- */
88
+ .status-pill {
89
+ display: inline-flex;
90
+ align-items: center;
91
+ gap: 8px;
92
+ padding: 7px 12px;
93
+ border-radius: 999px;
94
+ font-size: 13px;
95
+ font-weight: 500;
96
+ background: var(--bg-inset);
97
+ border: 1px solid var(--border);
98
+ color: var(--text);
99
+ width: fit-content;
100
+ }
101
+ .status-dot {
102
+ width: 7px;
103
+ height: 7px;
104
+ border-radius: 50%;
105
+ background: var(--text-faint);
106
+ flex-shrink: 0;
107
+ }
108
+ .status-pill--neutral .status-dot { background: var(--text-faint); }
109
+ .status-pill--info .status-dot { background: var(--info); }
110
+ .status-pill--success .status-dot { background: var(--good); }
111
+ .status-pill--error .status-dot { background: var(--bad); }
112
+ .status-pill--active .status-dot {
113
+ background: var(--accent);
114
+ animation: pulse 1.4s ease-in-out infinite;
115
+ }
116
+ .status-pill--info { border-color: rgba(95,168,211,0.35); }
117
+ .status-pill--success { border-color: rgba(79,174,124,0.35); }
118
+ .status-pill--error { border-color: rgba(226,96,79,0.35); }
119
+ .status-pill--active { border-color: rgba(232,163,61,0.35); }
120
+ .status-detail {
121
+ color: var(--text-muted);
122
+ font-family: 'IBM Plex Mono', monospace;
123
+ font-size: 11px;
124
+ }
125
+ @keyframes pulse {
126
+ 0%, 100% { opacity: 1; transform: scale(1); }
127
+ 50% { opacity: 0.4; transform: scale(0.8); }
128
+ }
129
+
130
+ /* ---------- Step tracker ---------- */
131
+ .step-tracker {
132
+ display: flex;
133
+ align-items: center;
134
+ padding: 4px 2px;
135
+ margin-top: 4px;
136
+ }
137
+ .step {
138
+ display: flex;
139
+ flex-direction: column;
140
+ align-items: center;
141
+ gap: 6px;
142
+ flex-shrink: 0;
143
+ }
144
+ .step-marker {
145
+ width: 26px;
146
+ height: 26px;
147
+ border-radius: 50%;
148
+ display: flex;
149
+ align-items: center;
150
+ justify-content: center;
151
+ font-family: 'IBM Plex Mono', monospace;
152
+ font-size: 10px;
153
+ font-weight: 600;
154
+ background: var(--bg-inset);
155
+ border: 1px solid var(--border);
156
+ color: var(--text-faint);
157
+ }
158
+ .step-label {
159
+ font-size: 10px;
160
+ color: var(--text-faint);
161
+ text-align: center;
162
+ max-width: 62px;
163
+ line-height: 1.2;
164
+ }
165
+ .step.is-active .step-marker { background: var(--accent-dim); border-color: var(--accent); color: var(--accent); }
166
+ .step.is-active .step-label { color: var(--accent); }
167
+ .step.is-done .step-marker { background: var(--good-dim); border-color: var(--good); color: var(--good); }
168
+ .step.is-done .step-label { color: var(--text-muted); }
169
+ .step.is-error .step-marker { background: var(--bad-dim); border-color: var(--bad); color: var(--bad); }
170
+ .step.is-error .step-label { color: var(--bad); }
171
+ .step-connector {
172
+ flex: 1;
173
+ height: 1px;
174
+ background: var(--border-soft);
175
+ margin: 0 4px;
176
+ margin-bottom: 18px;
177
+ }
178
+ .step-connector.filled { background: var(--good); }
179
+
180
+ /* ---------- Cache card ---------- */
181
+ .cache-card {
182
+ display: flex;
183
+ gap: 12px;
184
+ background: var(--good-dim);
185
+ border: 1px solid rgba(79,174,124,0.35);
186
+ border-radius: 12px;
187
+ padding: 14px;
188
+ align-items: flex-start;
189
+ }
190
+ .cache-card-icon {
191
+ width: 22px;
192
+ height: 22px;
193
+ border-radius: 50%;
194
+ background: var(--good);
195
+ color: var(--bg);
196
+ display: flex;
197
+ align-items: center;
198
+ justify-content: center;
199
+ font-size: 13px;
200
+ font-weight: 700;
201
+ flex-shrink: 0;
202
+ }
203
+ .cache-card-title {
204
+ font-weight: 600;
205
+ font-size: 13px;
206
+ color: var(--text);
207
+ }
208
+ .cache-card-meta {
209
+ font-size: 12px;
210
+ color: var(--text-muted);
211
+ margin-top: 2px;
212
+ font-family: 'IBM Plex Mono', monospace;
213
+ }
214
+ .cache-card-meta--faint { color: var(--text-faint); }
215
+ .dot-sep { margin: 0 6px; }
216
+
217
+ /* ---------- Placeholder card ---------- */
218
+ .placeholder-card {
219
+ border: 1px dashed var(--border);
220
+ border-radius: 14px;
221
+ padding: 48px 32px;
222
+ text-align: center;
223
+ background: var(--bg-inset);
224
+ }
225
+ .placeholder-mark {
226
+ width: 34px;
227
+ height: 34px;
228
+ margin: 0 auto 16px;
229
+ border-radius: 50%;
230
+ border: 2px solid var(--border);
231
+ position: relative;
232
+ }
233
+ .placeholder-card--active .placeholder-mark {
234
+ border-color: var(--accent);
235
+ animation: pulse 1.4s ease-in-out infinite;
236
+ }
237
+ .placeholder-card--error .placeholder-mark { border-color: var(--bad); }
238
+ .placeholder-title {
239
+ font-family: var(--font-display);
240
+ font-weight: 600;
241
+ font-size: 17px;
242
+ color: var(--text);
243
+ margin-bottom: 6px;
244
+ }
245
+ .placeholder-message {
246
+ font-size: 13px;
247
+ color: var(--text-muted);
248
+ max-width: 380px;
249
+ margin: 0 auto;
250
+ line-height: 1.5;
251
+ }
252
+
253
+ /* ---------- Insight card ---------- */
254
+ .insight-card {
255
+ background: var(--bg-raised);
256
+ border: 1px solid var(--border);
257
+ border-radius: 14px;
258
+ padding: 28px 30px;
259
+ }
260
+ .insight-summary {
261
+ font-family: var(--font-display);
262
+ font-size: 18px;
263
+ font-weight: 500;
264
+ line-height: 1.5;
265
+ color: var(--text);
266
+ margin: 0 0 22px;
267
+ padding-bottom: 22px;
268
+ border-bottom: 1px solid var(--border-soft);
269
+ }
270
+ .insight-section { margin-bottom: 22px; }
271
+ .insight-section--recommendation {
272
+ background: var(--accent-dim);
273
+ border: 1px solid rgba(232,163,61,0.3);
274
+ border-radius: 10px;
275
+ padding: 16px 18px;
276
+ margin-bottom: 12px;
277
+ }
278
+ .section-eyebrow {
279
+ font-family: 'IBM Plex Mono', monospace;
280
+ font-size: 11px;
281
+ letter-spacing: 0.1em;
282
+ text-transform: uppercase;
283
+ color: var(--text-faint);
284
+ margin-bottom: 8px;
285
+ }
286
+ .section-text {
287
+ font-size: 14px;
288
+ line-height: 1.6;
289
+ color: var(--text);
290
+ margin: 0 0 8px;
291
+ }
292
+ .condition-list, .recommendation-list {
293
+ margin: 0;
294
+ padding-left: 18px;
295
+ font-size: 13px;
296
+ color: var(--text-muted);
297
+ line-height: 1.7;
298
+ }
299
+ .recommendation-list { color: var(--text); }
300
+ .risk-list { display: flex; flex-direction: column; gap: 10px; }
301
+ .risk-item {
302
+ background: var(--bg-inset);
303
+ border: 1px solid var(--border-soft);
304
+ border-radius: 10px;
305
+ padding: 12px 14px;
306
+ }
307
+ .risk-item-head {
308
+ display: flex;
309
+ align-items: center;
310
+ justify-content: space-between;
311
+ gap: 10px;
312
+ flex-wrap: wrap;
313
+ }
314
+ .risk-item-title {
315
+ font-weight: 600;
316
+ font-size: 13px;
317
+ color: var(--text);
318
+ }
319
+ .risk-item-badges { display: flex; gap: 6px; }
320
+ .risk-item-evidence {
321
+ font-size: 12.5px;
322
+ color: var(--text-muted);
323
+ margin: 8px 0 0;
324
+ line-height: 1.55;
325
+ }
326
+ .badge {
327
+ font-family: 'IBM Plex Mono', monospace;
328
+ font-size: 10px;
329
+ font-weight: 600;
330
+ letter-spacing: 0.04em;
331
+ padding: 3px 8px;
332
+ border-radius: 5px;
333
+ }
334
+ .badge--good { background: var(--good-dim); color: var(--good); }
335
+ .badge--warn { background: var(--warn-dim); color: var(--warn); }
336
+ .badge--bad { background: var(--bad-dim); color: var(--bad); }
337
+ .badge--neutral { background: var(--bg-inset); color: var(--text-muted); border: 1px solid var(--border); }
338
+ .badge--outline { background: transparent; border: 1px solid currentColor; }
339
+ .insight-footer {
340
+ display: flex;
341
+ align-items: center;
342
+ gap: 6px;
343
+ font-size: 12px;
344
+ color: var(--text-muted);
345
+ padding-top: 16px;
346
+ border-top: 1px solid var(--border-soft);
347
+ }
348
+
349
+ /* ---------- Footer ---------- */
350
+ .app-footer {
351
+ text-align: center;
352
+ font-family: 'IBM Plex Mono', monospace;
353
+ font-size: 11px;
354
+ color: var(--text-faint);
355
+ padding: 28px 0 8px;
356
+ letter-spacing: 0.04em;
357
+ }
358
+
359
+ /* ---------- Focus ---------- */
360
+ :focus-visible { outline: 2px solid var(--accent) !important; outline-offset: 2px; }
361
+
362
+
363
+ /* ---------- Sponsor grid ---------- */
364
+ .sponsor-grid {
365
+ display: grid;
366
+ grid-template-columns: repeat(2, 1fr);
367
+ gap: 12px;
368
+ padding: 10px 14px 16px;
369
+ }
370
+ .sponsor-item {
371
+ display: flex;
372
+ align-items: center;
373
+ justify-content: center;
374
+ background: var(--bg-inset);
375
+ border: 1px solid var(--border-soft);
376
+ border-radius: 10px;
377
+ padding: 14px;
378
+ width: 100%;
379
+ height: 88px; /* tinggi tetap & seragam untuk semua kotak */
380
+ overflow: hidden;
381
+ box-sizing: border-box;
382
+ transition: border-color 0.15s ease, transform 0.15s ease;
383
+ }
384
+ .sponsor-item:hover {
385
+ border-color: var(--accent);
386
+ transform: translateY(-1px);
387
+ }
388
+ .sponsor-img {
389
+ max-width: 100%;
390
+ max-height: 100%;
391
+ width: auto;
392
+ height: auto;
393
+ object-fit: contain; /* kunci utama: gambar diskalakan proporsional, tidak stretched */
394
+ display: block;
395
+ }
396
+ .sponsor-empty {
397
+ padding: 16px;
398
+ color: var(--text-faint);
399
+ font-size: 13px;
400
+ text-align: center;
401
+ }
402
+
403
+ /* ---------- Farmer Counter ---------- */
404
+ .farmer-counter {
405
+ text-align: center;
406
+ padding: 2px 12px 4px;
407
+ margin-bottom: 0px;
408
+ }
409
+
410
+ .farmer-counter-badge {
411
+ display: inline-flex;
412
+ align-items: center;
413
+ gap: 9px;
414
+ padding: 8px 16px;
415
+ border-radius: 999px;
416
+ background: var(--good-dim);
417
+ border: 1px solid rgba(79,174,124,0.35);
418
+ font-size: 11px !important;
419
+ color: var(--text);
420
+ letter-spacing: 0.01em;
421
+ }
422
+
423
+ .farmer-counter-dot {
424
+ width: 7px;
425
+ height: 7px;
426
+ border-radius: 50%;
427
+ background: var(--good);
428
+ flex-shrink: 0;
429
+ animation: pulse 1.4s ease-in-out infinite;
430
+ }
431
+
432
+ .farmer-counter-badge #farmer-count {
433
+ color: var(--accent);
434
+ font-weight: 700;
435
+ font-family: 'IBM Plex Mono', monospace;
436
+ font-size: 14.5px !important;
437
+ }
438
+
439
+
440
+
441
+ .hero-banner {
442
+ position: relative;
443
+ padding: 40px 32px;
444
+ border-radius: 14px;
445
+ background-color: var(--bg-raised); /* fallback kalau gambar gagal load */
446
+ background-image: linear-gradient(rgba(11, 27, 34, 0.45), rgba(11, 27, 34, 0.45)), url('https://agfundernews.com/wp-content/uploads/2024/07/Precision-agriculture-istock-ChatkarenStudio-e1720729648402.jpg');
447
+ background-size: cover;
448
+ background-position: center;
449
+ background-repeat: no-repeat;
450
+ margin-bottom: 16px;
451
+ overflow: hidden;
452
+ border: 1px solid var(--border);
453
+ }
454
+
455
+ .hero-banner .app-header {
456
+ border-bottom: none;
457
+ padding: 0;
458
+ margin-bottom: 20px;
459
+ }
460
+
461
+ .hero-banner .farmer-counter {
462
+ text-align: left;
463
+ padding: 0;
464
+ margin: 0;
465
+ }
466
+
467
+ .hero-banner .farmer-counter-badge {
468
+ background: rgba(79, 174, 124, 0.2);
469
+ -webkit-backdrop-filter: blur(4px);
470
+ backdrop-filter: blur(4px);
471
+ }
472
+
473
+ @media (max-width: 768px) {
474
+ .hero-banner {
475
+ padding: 24px 18px;
476
+ }
477
+ .hero-banner .app-header h1 {
478
+ font-size: 26px;
479
+ }
480
+ .hero-banner .app-header .subtitle {
481
+ font-size: 13px;
482
+ }
483
+ .hero-banner .farmer-counter {
484
+ text-align: center;
485
+ }
486
+ }