ALAMDIENG commited on
Commit
c65518d
·
1 Parent(s): 2569a09

feat(ui): expand homepage with ML stacking architecture diagrams, data pipeline visualizer, and feature importance breakdown

Browse files
Files changed (2) hide show
  1. frontend/index.html +161 -16
  2. frontend/style.css +264 -0
frontend/index.html CHANGED
@@ -214,31 +214,176 @@
214
 
215
  <!-- Sumber Data & Akuntabilitas -->
216
  <section class="container data-sources-section">
217
- <h2 class="section-title">TRANSPARANSI SUMBER DATA</h2>
218
- <div class="panel sources-panel">
219
- <div class="sources-grid" style="display:grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap:1.5rem;">
220
- <div class="source-item">
221
- <h4 style="color:var(--cyan); margin-bottom:0.5rem; font-family:var(--font-display);">1. Timbulan Sampah</h4>
222
- <p style="font-size:0.85rem; color:var(--text-muted); line-height:1.5;">Data baseline disesuaikan dengan volume total ~8.020 Ton/hari dari <strong>Dinas Lingkungan Hidup (DLH) DKI Jakarta</strong> dan SIPSN Kementerian LHK.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
223
  </div>
224
- <div class="source-item">
225
- <h4 style="color:var(--cyan); margin-bottom:0.5rem; font-family:var(--font-display);">2. Prediksi Cuaca</h4>
226
- <p style="font-size:0.85rem; color:var(--text-muted); line-height:1.5;">Data curah hujan ditarik live menggunakan <strong>Open-Meteo API</strong> berdasarkan koordinat geografis presisi masing-masing kecamatan.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  </div>
228
- <div class="source-item">
229
- <h4 style="color:var(--cyan); margin-bottom:0.5rem; font-family:var(--font-display);">3. Kalender Event & Transit</h4>
230
- <p style="font-size:0.85rem; color:var(--text-muted); line-height:1.5;">Pola mobilitas disimulasikan dari ridership harian <strong>MRT Jakarta</strong> (~85.000) dan kalender acara Jakarta untuk mengukur lonjakan kerumunan.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  </div>
232
- <div class="source-item">
233
- <h4 style="color:var(--cyan); margin-bottom:0.5rem; font-family:var(--font-display);">4. Jarak Pengangkutan</h4>
234
- <p style="font-size:0.85rem; color:var(--text-muted); line-height:1.5;">Jarak tempuh dihitung menggunakan <strong>Haversine Formula</strong> dari koordinat kecamatan ke TPST Bantargebang dengan faktor jalan winding 1.35x.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  </div>
236
  </div>
237
  </div>
238
  </section>
239
 
240
  <!-- Development Author Section -->
241
- <section class="container developers-section">
242
  <h2 class="section-title">AETERNA AI LEAD DEVELOPER</h2>
243
  <div class="developers-grid" style="display: flex; justify-content: center;">
244
  <div class="panel developer-card" style="max-width: 600px; width: 100%;">
 
214
 
215
  <!-- Sumber Data & Akuntabilitas -->
216
  <section class="container data-sources-section">
217
+ <h2 class="section-title">TRANSPARANSI DATA & METODE PENGUMPULAN</h2>
218
+ <div class="panel sources-panel" style="margin-bottom: 2rem;">
219
+ <p style="color:var(--text-muted); font-size:0.95rem; margin-bottom: 1.5rem; font-family:var(--font-body); line-height: 1.6;">
220
+ Aeterna AI mengintegrasikan berbagai macam data sekunder dan primer untuk menghasilkan prediksi pembuangan sampah yang presisi secara harian bagi wilayah administrasi DKI Jakarta.
221
+ </p>
222
+ <div class="sources-grid" style="display:grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap:1.5rem;">
223
+ <div class="source-item panel" style="background:var(--soft-surface); border: 2px solid var(--border-color); padding: 1.2rem; border-radius: 12px;">
224
+ <span style="font-size: 1.8rem; display:block; margin-bottom: 8px;">🏛️</span>
225
+ <h4 style="color:var(--primary); margin-bottom:0.5rem; font-family:var(--font-display); font-weight: 800;">1. SIPSN & DLH DKI Jakarta</h4>
226
+ <p style="font-size:0.85rem; color:var(--text-muted); line-height:1.5;">Data baseline disesuaikan dengan volume total **9.059 Ton/hari** dari Dinas Lingkungan Hidup DKI Jakarta tahun 2026.</p>
227
+ </div>
228
+ <div class="source-item panel" style="background:var(--soft-surface); border: 2px solid var(--border-color); padding: 1.2rem; border-radius: 12px;">
229
+ <span style="font-size: 1.8rem; display:block; margin-bottom: 8px;">🌧️</span>
230
+ <h4 style="color:var(--primary); margin-bottom:0.5rem; font-family:var(--font-display); font-weight: 800;">2. BMKG & Open-Meteo API</h4>
231
+ <p style="font-size:0.85rem; color:var(--text-muted); line-height:1.5;">Data curah hujan ditarik live menggunakan koordinat geografis presisi masing-masing kecamatan (resolusi 11 km).</p>
232
+ </div>
233
+ <div class="source-item panel" style="background:var(--soft-surface); border: 2px solid var(--border-color); padding: 1.2rem; border-radius: 12px;">
234
+ <span style="font-size: 1.8rem; display:block; margin-bottom: 8px;">👥</span>
235
+ <h4 style="color:var(--primary); margin-bottom:0.5rem; font-family:var(--font-display); font-weight: 800;">3. Proyeksi BPS & MRT Jakarta</h4>
236
+ <p style="font-size:0.85rem; color:var(--text-muted); line-height:1.5;">Simulasi volume mobilitas disesuaikan dengan populasi registrasi BPS dan ridership transit harian.</p>
237
+ </div>
238
+ <div class="source-item panel" style="background:var(--soft-surface); border: 2px solid var(--border-color); padding: 1.2rem; border-radius: 12px;">
239
+ <span style="font-size: 1.8rem; display:block; margin-bottom: 8px;">🛣️</span>
240
+ <h4 style="color:var(--primary); margin-bottom:0.5rem; font-family:var(--font-display); font-weight: 800;">4. Haversine & Winding Routing</h4>
241
+ <p style="font-size:0.85rem; color:var(--text-muted); line-height:1.5;">Jarak logistik dihitung dari koordinat pusat kecamatan ke TPST Bantargebang dengan faktor winding jalan raya sebesar 1.35x.</p>
242
+ </div>
243
+ </div>
244
+ </div>
245
+
246
+ <!-- Ingestion Pipeline Flow Visual -->
247
+ <div class="panel flow-visual-panel" style="margin-bottom: 2rem;">
248
+ <h3 class="panel-subtitle" style="margin-bottom: 1.5rem;">ALIRAN PENGOLAHAN DATA (DATA PIPELINE FLOW)</h3>
249
+ <div class="pipeline-flow-container">
250
+ <div class="flow-step">
251
+ <div class="flow-icon">📥 Ingest</div>
252
+ <div class="flow-title">Data Ingestion</div>
253
+ <div class="flow-desc">Ditarik dari API Cuaca, BPS Jumlah Jiwa, & Kalender Acara Jakarta</div>
254
+ </div>
255
+ <div class="flow-arrow">➡️</div>
256
+ <div class="flow-step">
257
+ <div class="flow-icon">⚙️ Process</div>
258
+ <div class="flow-title">Feature Engineering</div>
259
+ <div class="flow-desc">Ekstraksi Lag Hujan, Is_Weekend, Is_Mudik, & Skala Crowd Event</div>
260
  </div>
261
+ <div class="flow-arrow">➡️</div>
262
+ <div class="flow-step">
263
+ <div class="flow-icon">🧠 Predict</div>
264
+ <div class="flow-title">Stacking Inference</div>
265
+ <div class="flow-desc">Evaluasi prediksi spasial ensembles harian 44 Kecamatan</div>
266
+ </div>
267
+ <div class="flow-arrow">➡️</div>
268
+ <div class="flow-step">
269
+ <div class="flow-icon">🚛 Dispatch</div>
270
+ <div class="flow-title">Logistics Planning</div>
271
+ <div class="flow-desc">Hasil tonase & rekomendasi armada truk dikirim ke dashboard</div>
272
+ </div>
273
+ </div>
274
+ </div>
275
+ </section>
276
+
277
+ <!-- Metodologi & Arsitektur ML -->
278
+ <section class="container ml-architecture-section" style="margin-bottom: 2.5rem;">
279
+ <h2 class="section-title">METODOLOGI & ARSITEKTUR MACHINE LEARNING</h2>
280
+ <div class="ml-grid-layout">
281
+ <!-- Stack diagram panel -->
282
+ <div class="panel diagram-panel">
283
+ <h3 class="panel-subtitle" style="margin-bottom: 1.5rem;">STRUKTUR MODEL ENSEMBLE STACKING REGRESSOR</h3>
284
+ <div class="stacking-diagram">
285
+ <div class="diagram-layer input-layer">
286
+ <span class="layer-title">Input Features</span>
287
+ <div class="layer-nodes">
288
+ <span class="node-tag">Population</span>
289
+ <span class="node-tag">Rainfall</span>
290
+ <span class="node-tag">Rain Lag 1</span>
291
+ <span class="node-tag">Is_Weekend</span>
292
+ <span class="node-tag">Normal_Avg</span>
293
+ <span class="node-tag">Is_Mudik</span>
294
+ </div>
295
+ </div>
296
+
297
+ <div class="diagram-connector">⬇️</div>
298
+
299
+ <div class="diagram-layer base-layer">
300
+ <span class="layer-title">Base Estimators (Ensemble)</span>
301
+ <div class="layer-estimators">
302
+ <div class="estimator-card">
303
+ <span class="est-name">Decision Tree</span>
304
+ <span class="est-desc">Deteksi relasi non-linear & percabangan fitur cuaca</span>
305
+ </div>
306
+ <div class="estimator-card">
307
+ <span class="est-name">Random Forest</span>
308
+ <span class="est-desc">Ensemble bagging mengurangi varians prediksi outlier</span>
309
+ </div>
310
+ <div class="estimator-card">
311
+ <span class="est-name">Gradient Boosting (GBR)</span>
312
+ <span class="est-desc">Optimasi boosting linier memperbaiki residu eror</span>
313
+ </div>
314
+ </div>
315
+ </div>
316
+
317
+ <div class="diagram-connector">⬇️</div>
318
+
319
+ <div class="diagram-layer meta-layer">
320
+ <span class="layer-title">Meta-Estimator</span>
321
+ <div class="estimator-card meta-card">
322
+ <span class="est-name">Ridge Regressor (L2 Penalty)</span>
323
+ <span class="est-desc">Menggabungkan tebakan base model untuk mencegah overfitting</span>
324
+ </div>
325
+ </div>
326
  </div>
327
+ </div>
328
+
329
+ <!-- Model Performance Panel -->
330
+ <div class="panel metrics-panel">
331
+ <h3 class="panel-subtitle" style="margin-bottom: 1.5rem;">METRIK PERFORMA MODEL (EVALUASI KRONOLOGIS)</h3>
332
+ <div class="metrics-dashboard-grid">
333
+ <div class="metric-score-card">
334
+ <span class="score-num" style="color:var(--primary);">96.41%</span>
335
+ <span class="score-label">R² Score (Akurasi Varian)</span>
336
+ </div>
337
+ <div class="metric-score-card">
338
+ <span class="score-num" style="color:var(--secondary);">6.01%</span>
339
+ <span class="score-label">MAPE (Error Persentase)</span>
340
+ </div>
341
+ <div class="metric-score-card">
342
+ <span class="score-num" style="color:var(--red);">12.63 T</span>
343
+ <span class="score-label">MAE (Absolute Error harian)</span>
344
+ </div>
345
+ <div class="metric-score-card">
346
+ <span class="score-num" style="color:var(--text-main);">16.97 T</span>
347
+ <span class="score-label">RMSE (Penalti Deviasi)</span>
348
+ </div>
349
  </div>
350
+
351
+ <div class="divider" style="margin:1rem 0;"></div>
352
+
353
+ <h4 style="color:var(--primary); margin-bottom:0.8rem; font-family:var(--font-display); font-size:0.9rem; text-transform:uppercase;">Feature Importance Breakdown:</h4>
354
+ <div class="features-importance-list">
355
+ <div class="feat-importance-item">
356
+ <span class="feat-name">Normal Average</span>
357
+ <div class="bar-container"><div class="bar" style="width: 92.2%; background: var(--primary);"></div></div>
358
+ <span class="feat-percent">92.24%</span>
359
+ </div>
360
+ <div class="feat-importance-item">
361
+ <span class="feat-name">Zona Wilayah</span>
362
+ <div class="bar-container"><div class="bar" style="width: 15%; background: var(--secondary-container);"></div></div>
363
+ <span class="feat-percent">2.32%</span>
364
+ </div>
365
+ <div class="feat-importance-item">
366
+ <span class="feat-name">Populasi Jiwa</span>
367
+ <div class="bar-container"><div class="bar" style="width: 13%; background: var(--sky-blue);"></div></div>
368
+ <span class="feat-percent">2.19%</span>
369
+ </div>
370
+ <div class="feat-importance-item">
371
+ <span class="feat-name">Lebaran (Is_Mudik)</span>
372
+ <div class="bar-container"><div class="bar" style="width: 11%; background: var(--red);"></div></div>
373
+ <span class="feat-percent">1.92%</span>
374
+ </div>
375
+ <div class="feat-importance-item">
376
+ <span class="feat-name">Curah Hujan</span>
377
+ <div class="bar-container"><div class="bar" style="width: 6%; background: var(--leaf-green);"></div></div>
378
+ <span class="feat-percent">0.66%</span>
379
+ </div>
380
  </div>
381
  </div>
382
  </div>
383
  </section>
384
 
385
  <!-- Development Author Section -->
386
+ <section class="container developers-section" style="margin-bottom: 2.5rem;">
387
  <h2 class="section-title">AETERNA AI LEAD DEVELOPER</h2>
388
  <div class="developers-grid" style="display: flex; justify-content: center;">
389
  <div class="panel developer-card" style="max-width: 600px; width: 100%;">
frontend/style.css CHANGED
@@ -1527,3 +1527,267 @@ footer {
1527
  45% { transform: rotate(-15deg) scale(1.1); }
1528
  }
1529
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1527
  45% { transform: rotate(-15deg) scale(1.1); }
1528
  }
1529
 
1530
+ /* ==========================================
1531
+ HOMEPAGE EXPANDED PIPELINE & ARCHITECTURE
1532
+ ========================================== */
1533
+ .pipeline-flow-container {
1534
+ display: flex;
1535
+ justify-content: space-between;
1536
+ align-items: center;
1537
+ gap: 12px;
1538
+ margin-top: 1rem;
1539
+ flex-wrap: wrap;
1540
+ }
1541
+
1542
+ .flow-step {
1543
+ background: #ffffff;
1544
+ border: 2px solid var(--border-color);
1545
+ border-radius: 12px;
1546
+ padding: 1.2rem;
1547
+ flex: 1;
1548
+ min-width: 200px;
1549
+ display: flex;
1550
+ flex-direction: column;
1551
+ align-items: center;
1552
+ text-align: center;
1553
+ box-shadow: 0 4px 12px rgba(0, 107, 95, 0.01);
1554
+ transition: transform 0.25s cubic-bezier(0.25, 0.8, 0.25, 1), border-color 0.25s;
1555
+ }
1556
+
1557
+ .flow-step:hover {
1558
+ transform: translateY(-4px);
1559
+ border-color: var(--primary);
1560
+ box-shadow: 0 8px 20px rgba(0, 107, 95, 0.05);
1561
+ }
1562
+
1563
+ .flow-icon {
1564
+ font-size: 1.6rem;
1565
+ margin-bottom: 8px;
1566
+ }
1567
+
1568
+ .flow-title {
1569
+ font-family: var(--font-display);
1570
+ font-weight: 800;
1571
+ color: var(--primary);
1572
+ font-size: 0.95rem;
1573
+ margin-bottom: 6px;
1574
+ }
1575
+
1576
+ .flow-desc {
1577
+ font-size: 0.8rem;
1578
+ color: var(--text-muted);
1579
+ line-height: 1.4;
1580
+ }
1581
+
1582
+ .flow-arrow {
1583
+ font-size: 1.5rem;
1584
+ color: var(--border-color);
1585
+ user-select: none;
1586
+ }
1587
+
1588
+ @media (max-width: 768px) {
1589
+ .pipeline-flow-container {
1590
+ flex-direction: column;
1591
+ align-items: stretch;
1592
+ }
1593
+ .flow-arrow {
1594
+ text-align: center;
1595
+ transform: rotate(90deg);
1596
+ margin: 6px 0;
1597
+ }
1598
+ }
1599
+
1600
+ /* Stacking Architecture Grid */
1601
+ .ml-grid-layout {
1602
+ display: grid;
1603
+ grid-template-columns: 1.25fr 0.75fr;
1604
+ gap: 24px;
1605
+ margin-top: 1.5rem;
1606
+ }
1607
+
1608
+ @media (max-width: 992px) {
1609
+ .ml-grid-layout {
1610
+ grid-template-columns: 1fr;
1611
+ }
1612
+ }
1613
+
1614
+ .stacking-diagram {
1615
+ display: flex;
1616
+ flex-direction: column;
1617
+ align-items: center;
1618
+ gap: 8px;
1619
+ width: 100%;
1620
+ }
1621
+
1622
+ .diagram-layer {
1623
+ width: 100%;
1624
+ background: var(--soft-surface);
1625
+ border: 2px solid var(--border-color);
1626
+ border-radius: 12px;
1627
+ padding: 1.2rem;
1628
+ text-align: center;
1629
+ }
1630
+
1631
+ .layer-title {
1632
+ display: block;
1633
+ font-family: var(--font-display);
1634
+ font-size: 0.8rem;
1635
+ font-weight: 800;
1636
+ text-transform: uppercase;
1637
+ color: var(--text-muted);
1638
+ margin-bottom: 10px;
1639
+ letter-spacing: 0.05em;
1640
+ }
1641
+
1642
+ .layer-nodes {
1643
+ display: flex;
1644
+ justify-content: center;
1645
+ gap: 8px;
1646
+ flex-wrap: wrap;
1647
+ }
1648
+
1649
+ .node-tag {
1650
+ background: #ffffff;
1651
+ border: 2px solid var(--border-color);
1652
+ border-radius: 20px;
1653
+ padding: 4px 12px;
1654
+ font-size: 0.75rem;
1655
+ font-weight: 700;
1656
+ color: var(--text-main);
1657
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.02);
1658
+ }
1659
+
1660
+ .diagram-connector {
1661
+ font-size: 1.2rem;
1662
+ color: var(--border-color);
1663
+ user-select: none;
1664
+ }
1665
+
1666
+ .layer-estimators {
1667
+ display: grid;
1668
+ grid-template-columns: repeat(3, 1fr);
1669
+ gap: 12px;
1670
+ width: 100%;
1671
+ }
1672
+
1673
+ @media (max-width: 576px) {
1674
+ .layer-estimators {
1675
+ grid-template-columns: 1fr;
1676
+ }
1677
+ }
1678
+
1679
+ .estimator-card {
1680
+ background: #ffffff;
1681
+ border: 2px solid var(--border-color);
1682
+ border-radius: 8px;
1683
+ padding: 10px;
1684
+ display: flex;
1685
+ flex-direction: column;
1686
+ gap: 4px;
1687
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.02);
1688
+ }
1689
+
1690
+ .estimator-card .est-name {
1691
+ font-family: var(--font-display);
1692
+ font-weight: 800;
1693
+ color: var(--primary);
1694
+ font-size: 0.85rem;
1695
+ }
1696
+
1697
+ .estimator-card .est-desc {
1698
+ font-size: 0.7rem;
1699
+ color: var(--text-muted);
1700
+ line-height: 1.3;
1701
+ }
1702
+
1703
+ .meta-card {
1704
+ max-width: 320px;
1705
+ margin: 0 auto;
1706
+ background: var(--bg-panel);
1707
+ border-color: var(--primary);
1708
+ box-shadow: 0 4px 10px rgba(0, 107, 95, 0.08);
1709
+ }
1710
+
1711
+ /* Metrics Dashboard Cards */
1712
+ .metrics-dashboard-grid {
1713
+ display: grid;
1714
+ grid-template-columns: 1fr 1fr;
1715
+ gap: 12px;
1716
+ }
1717
+
1718
+ .metric-score-card {
1719
+ background: var(--soft-surface);
1720
+ border: 2px solid var(--border-color);
1721
+ border-radius: 12px;
1722
+ padding: 1.2rem;
1723
+ text-align: center;
1724
+ display: flex;
1725
+ flex-direction: column;
1726
+ justify-content: center;
1727
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.01);
1728
+ }
1729
+
1730
+ .metric-score-card .score-num {
1731
+ font-family: var(--font-display);
1732
+ font-size: 1.8rem;
1733
+ font-weight: 800;
1734
+ line-height: 1.1;
1735
+ margin-bottom: 4px;
1736
+ }
1737
+
1738
+ .metric-score-card .score-label {
1739
+ font-size: 0.75rem;
1740
+ color: var(--text-muted);
1741
+ font-weight: 700;
1742
+ text-transform: uppercase;
1743
+ }
1744
+
1745
+ /* Feature Importance Horizontal Chart */
1746
+ .features-importance-list {
1747
+ display: flex;
1748
+ flex-direction: column;
1749
+ gap: 10px;
1750
+ margin-top: 0.5rem;
1751
+ }
1752
+
1753
+ .feat-importance-item {
1754
+ display: flex;
1755
+ align-items: center;
1756
+ justify-content: space-between;
1757
+ gap: 12px;
1758
+ font-size: 0.8rem;
1759
+ }
1760
+
1761
+ .feat-importance-item .feat-name {
1762
+ flex: 1.8;
1763
+ font-weight: 700;
1764
+ color: var(--text-main);
1765
+ white-space: nowrap;
1766
+ overflow: hidden;
1767
+ text-overflow: ellipsis;
1768
+ }
1769
+
1770
+ .feat-importance-item .bar-container {
1771
+ flex: 3;
1772
+ background: var(--border-color);
1773
+ height: 8px;
1774
+ border-radius: 4px;
1775
+ overflow: hidden;
1776
+ opacity: 0.85;
1777
+ }
1778
+
1779
+ .feat-importance-item .bar {
1780
+ height: 100%;
1781
+ border-radius: 4px;
1782
+ transition: width 1s ease-out;
1783
+ }
1784
+
1785
+ .feat-importance-item .feat-percent {
1786
+ flex: 0.8;
1787
+ font-family: var(--font-mono);
1788
+ font-weight: 700;
1789
+ color: var(--text-main);
1790
+ text-align: right;
1791
+ }
1792
+
1793
+