/* ═══════════════════════════ CSS VARIABLES (diturunkan dari SPD v17) ═══════════════════════════ */
:root{
  --bg0:#f0f4f8;--bg1:#ffffff;--bg2:#ffffff;--bg3:#f7f9fc;
  --bd:rgba(0,0,0,0.08);--bd2:rgba(0,0,68,0.14);
  --t1:#0d1b2a;--t2:#4a5568;--t3:#8a9bb0;

  --blue:#004883;--blue-lt:#e8f0f8;--blue-md:#1a6fa8;
  --red:#E42934;--red-lt:#fde8e9;

  --green:#0ea96b;--green-lt:#e3f9ef;
  --orange:#e97626;--orange-lt:#fdf0e4;
  --purple:#6c5ce7;--purple-lt:#eeebfd;
  --pink:#d63384;
  --yellow:#d4960a;--yellow-lt:#fdf4e0;
  --teal:#0891b2;--teal-lt:#e3f5f8;

  --r4:4px;--r6:6px;--r8:8px;--r12:12px;--r16:16px;
  --sw:240px;--sw-collapsed:60px;--th:54px;
  --tr:0.2s ease;
  --sh:0 1px 4px rgba(0,68,131,0.08),0 4px 16px rgba(0,68,131,0.06);
  --sh-md:0 4px 24px rgba(0,68,131,0.12);
}
[data-theme=dark]{
  --bg0:#0a0e17;--bg1:#0f1520;--bg2:#151d2e;--bg3:#1a2438;
  --bd:rgba(255,255,255,0.07);--bd2:rgba(255,255,255,0.12);
  --t1:#e8edf5;--t2:#7a8ba3;--t3:#3d4f66;
  --blue:#2d7dd2;--blue-lt:rgba(45,125,210,0.12);--blue-md:#1a6fa8;
  --red:#E42934;--red-lt:rgba(228,41,52,0.12);
  --green:#10b981;--green-lt:rgba(16,185,129,0.12);
  --orange:#f59e0b;--orange-lt:rgba(245,158,11,0.12);
  --purple:#8b5cf6;--purple-lt:rgba(139,92,246,0.12);
  --pink:#ec4899;
  --yellow:#f59e0b;--yellow-lt:rgba(245,158,11,0.12);
  --teal:#06b6d4;--teal-lt:rgba(6,182,212,0.12);
  --sh:0 2px 12px rgba(0,0,0,0.4);
  --sh-md:0 8px 32px rgba(0,0,0,0.5);
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{font-size:14px;-webkit-text-size-adjust:100%}
body{font-family:'Inter',sans-serif;background:var(--bg0);color:var(--t1);display:flex;min-height:100vh;overflow-x:hidden;transition:background var(--tr),color var(--tr)}
::-webkit-scrollbar{width:4px;height:4px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--bd2);border-radius:4px}
input,select,button{font-family:'Inter',sans-serif;font-size:13px}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}
button{cursor:pointer}

/* ═══════════════════════════ SIDEBAR ═══════════════════════════ */
#sb{
  width:var(--sw);background:var(--bg1);border-right:1px solid var(--bd);
  position:fixed;top:0;left:0;bottom:0;
  display:flex;flex-direction:column;z-index:200;
  transition:width 0.25s cubic-bezier(0.4,0,0.2,1),transform 0.22s cubic-bezier(0.4,0,0.2,1),background var(--tr);
  overflow-y:auto;overflow-x:hidden;
}
#sb.sb-collapsed{width:var(--sw-collapsed)}
#sb.sb-collapsed .sb-logo-txt,
#sb.sb-collapsed .sb-logo-sub,
#sb.sb-collapsed .nav-a-label,
#sb.sb-collapsed .sb-grp{opacity:0;pointer-events:none;width:0;overflow:hidden;white-space:nowrap}
#sb.sb-collapsed .sb-logo{justify-content:center;padding:12px 8px}
#sb.sb-collapsed .sb-logo-icon{width:40px;height:40px;border-radius:12px}
#sb.sb-collapsed .nav-a{justify-content:center;padding:8px;gap:0}
#sb.sb-collapsed .nav-a .ni{width:auto;font-size:15px}
#sb.sb-collapsed .sb-grp{height:2px;padding:0 8px;margin:6px 0;border-top:1px solid var(--bd)}
#sb.sb-collapsed .sb-collapse-btn .cb-icon-open{display:none}
#sb.sb-collapsed .sb-collapse-btn .cb-icon-closed{display:block}
.sb-collapse-btn .cb-icon-closed{display:none}

.sb-logo{padding:14px 16px 12px;border-bottom:1px solid var(--bd);display:flex;align-items:center;gap:9px;flex-shrink:0;overflow:hidden;transition:all 0.25s ease;position:relative}
.sb-logo-icon{width:34px;height:34px;border-radius:10px;background:linear-gradient(135deg,var(--blue),var(--blue-md));display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:width 0.25s ease,height 0.25s ease,border-radius 0.25s ease;font-size:16px}
.sb-logo-txt{font-size:13.5px;font-weight:800;color:var(--t1);white-space:nowrap;line-height:1.2}
.sb-logo-sub{font-size:10px;color:var(--t3);white-space:nowrap;margin-top:1px}
.sb-nav{flex:1;padding:8px}
.sb-grp{font-size:9px;font-weight:700;color:var(--t3);text-transform:uppercase;letter-spacing:0.8px;padding:10px 8px 4px;transition:opacity 0.2s ease,width 0.25s ease;white-space:nowrap}
.nav-a{
  display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:var(--r6);
  cursor:pointer;font-size:12.5px;font-weight:500;color:var(--t2);
  transition:all var(--tr);margin-bottom:1px;white-space:nowrap;overflow:hidden;
}
.nav-a-label{transition:opacity 0.2s ease,width 0.25s ease;white-space:nowrap}
.nav-a:hover{background:var(--blue-lt);color:var(--blue)}
.nav-a.active{background:var(--blue-lt);color:var(--blue)}
[data-theme=dark] .nav-a:hover{background:rgba(45,125,210,0.12)}
[data-theme=dark] .nav-a.active{background:rgba(45,125,210,0.12)}
.nav-a .ni{font-size:13px;width:18px;text-align:center;flex-shrink:0;transition:font-size 0.2s ease}

#sb.sb-collapsed .nav-a{position:relative}
#sb.sb-collapsed .nav-a:hover::after{
  content:attr(data-tooltip);position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);
  background:var(--bg3);color:var(--t1);font-size:12px;font-weight:500;
  padding:5px 10px;border-radius:var(--r6);white-space:nowrap;border:1px solid var(--bd2);
  box-shadow:var(--sh-md);z-index:9999;pointer-events:none;
}

.sb-collapse-btn{
  display:flex;align-items:center;justify-content:center;
  padding:10px 8px;border-top:1px solid var(--bd);
  cursor:pointer;color:var(--t3);font-size:16px;
  transition:all var(--tr);flex-shrink:0;
}
.sb-collapse-btn:hover{color:var(--blue);background:var(--blue-lt)}

/* Theme toggle in sidebar footer */
.sb-theme-row{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-top:1px solid var(--bd);flex-shrink:0;gap:8px}
#sb.sb-collapsed .sb-theme-row{flex-direction:column;justify-content:center;padding:10px 6px;gap:6px}
#sb.sb-collapsed .sb-theme-label{display:none}
.sb-theme-label{font-size:11.5px;color:var(--t2);font-weight:500;display:flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden}
.sb-theme-icon-collapsed{display:none;font-size:14px;line-height:1}
#sb.sb-collapsed .sb-theme-icon-collapsed{display:block}
.theme-switch{width:36px;height:20px;border-radius:20px;background:var(--bd2);position:relative;cursor:pointer;transition:background var(--tr);flex-shrink:0}
#sb.sb-collapsed .theme-switch{width:28px;height:16px}
#sb.sb-collapsed .theme-switch::after{width:12px;height:12px}
.theme-switch::after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform var(--tr);box-shadow:0 1px 3px rgba(0,0,0,.2)}
[data-theme=dark] .theme-switch{background:var(--blue)}
[data-theme=dark] .theme-switch::after{transform:translateX(16px)}
#sb.sb-collapsed [data-theme=dark] .theme-switch::after{transform:translateX(12px)}
.theme-switch.on{background:var(--purple)}
.theme-switch.on::after{transform:translateX(16px)}

/* ═══════════════════════════ MODE SIMPEL / LENGKAP ═══════════════════════════ */
.nav-more-toggle{display:none}
.nav-more-toggle .ni{font-weight:800}
body.mode-simple .nav-more-toggle{display:flex}
body.mode-simple:not(.nav-more-open) .nav-advanced{display:none}
body.mode-simple.nav-more-open .nav-advanced{display:flex}
body.mode-simple.nav-more-open .nav-more-toggle{background:var(--blue-lt);color:var(--blue)}

#mode-switch{background:var(--bd2)}
body.mode-simple #mode-switch{background:var(--orange)}
body.mode-simple #mode-switch::after{transform:translateX(16px)}

body.mode-simple .dash-advanced-charts{display:none}
body.mode-simple .simple-mode-note{display:block!important}

/* ═══════════════════════════ MAIN ═══════════════════════════ */
#main{margin-left:var(--sw);flex:1;display:flex;flex-direction:column;min-height:100vh;min-width:0;transition:margin-left 0.25s cubic-bezier(0.4,0,0.2,1)}
body.sb-is-collapsed #main{margin-left:var(--sw-collapsed)}

/* ═══════════════════════════ TOPBAR ═══════════════════════════ */
#tb{
  height:var(--th);background:var(--bg1);border-bottom:1px solid var(--bd);
  display:flex;align-items:center;justify-content:space-between;
  padding:0 20px;position:sticky;top:0;z-index:100;flex-shrink:0;gap:12px;
}
.tb-hamburger{display:none;font-size:18px;color:var(--t2);cursor:pointer;background:none;border:none;padding:4px}
.tb-left{display:flex;align-items:center;gap:12px;min-width:0}
.tb-title{font-size:14.5px;font-weight:700;color:var(--t1);white-space:nowrap;letter-spacing:-0.01em}
.tb-meta{display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden}
.tb-date{font-size:11.5px;color:var(--t2);font-weight:500;white-space:nowrap;flex-shrink:0}
.tb-sep{color:var(--t3);font-size:11px;flex-shrink:0}
/* Status pill (Live/Demo/Off) — pengganti tb-live+live-dot lama, lebih ringkas & informatif
   lewat title (native tooltip) buat detail (jumlah baris, jam sync persis). */
.tb-status-pill{display:flex;align-items:center;gap:6px;padding:4px 8px 4px 10px;border-radius:999px;font-size:11px;font-weight:700;white-space:nowrap;flex-shrink:0;cursor:pointer;transition:filter var(--tr)}
.tb-status-pill:hover{filter:brightness(0.94)}
.tb-status-pill:active{filter:brightness(0.88)}
.tb-status-pill.off{background:var(--bg2);color:var(--t3);border:1px solid var(--bd)}
.tb-status-pill.demo{background:var(--orange-lt);color:var(--orange)}
.tb-status-pill.live{background:var(--green-lt);color:var(--green)}
.tb-status-dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}
.tb-status-dot.pulse{animation:pulse 2s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(14,169,107,.5)}70%{box-shadow:0 0 0 5px rgba(14,169,107,0)}100%{box-shadow:0 0 0 0 rgba(14,169,107,0)}}
@media (prefers-reduced-motion: reduce){
  .tb-status-dot.pulse{animation:none}
}
.tb-status-refresh{font-size:11px;opacity:.7;flex-shrink:0;line-height:1}
.tb-status-refresh.spinning{animation:tb-spin .8s linear infinite}
.tb-right{display:flex;align-items:center;gap:10px;flex-shrink:0}
.tb-divider{width:1px;height:22px;background:var(--bd);flex-shrink:0}
.tb-btn{display:flex;align-items:center;gap:6px;padding:7px 12px;border-radius:var(--r6);border:1px solid var(--bd);background:var(--bg2);color:var(--t2);font-size:12px;font-weight:600;transition:all var(--tr)}
.tb-btn:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-lt)}
.tb-btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}
.tb-btn.primary:hover{background:var(--blue-md);border-color:var(--blue-md);color:#fff}
.tb-btn:disabled{opacity:0.6;cursor:default}
@keyframes tb-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
.tb-avatar{width:34px;height:34px;border-radius:50%;background:linear-gradient(135deg,var(--blue),var(--blue-md));color:#fff;border:none;display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0;cursor:pointer;transition:filter var(--tr)}
.tb-avatar:hover{filter:brightness(1.08)}

/* Floating Action Button — tombol Input Data, ngambang kanan bawah, ikut kelihatan di semua halaman */
.fab-input{position:fixed;right:28px;bottom:28px;width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg,var(--blue),var(--blue-md));color:#fff;border:none;font-size:24px;line-height:1;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px rgba(0,72,131,.4);cursor:pointer;z-index:150;transition:transform var(--tr),box-shadow var(--tr)}
.fab-input:hover{transform:translateY(-2px) scale(1.05);box-shadow:0 12px 30px rgba(0,72,131,.48)}
.fab-input:active{transform:translateY(0) scale(0.96)}
@media(max-width:640px){.fab-input{right:18px;bottom:18px;width:50px;height:50px;font-size:20px}}
.tb-user-wrap{position:relative}
.tb-user-menu{position:absolute;top:calc(100% + 10px);right:0;width:236px;background:var(--bg1);border:1px solid var(--bd);border-radius:var(--r12);box-shadow:0 14px 34px rgba(0,0,0,.18);z-index:500;overflow:hidden;display:none}
.tb-user-menu.open{display:block}
.tb-user-menu-head{padding:14px 16px;border-bottom:1px solid var(--bd);display:flex;align-items:center;gap:10px}
.tb-user-menu-avatar{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,var(--blue),var(--blue-md));color:#fff;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0}
.tb-user-menu-name{font-size:13px;font-weight:700;color:var(--t1)}
.tb-user-menu-sub{font-size:10.5px;color:var(--t3)}
.tb-user-menu-item{display:flex;align-items:center;gap:10px;padding:10px 16px;font-size:12.5px;font-weight:500;color:var(--t2);cursor:pointer;transition:background var(--tr)}
.tb-user-menu-item:hover{background:var(--bg2)}
.tb-user-menu-divider{height:1px;background:var(--bd);margin:4px 0}
#global-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%) translateY(16px);background:var(--t1);color:var(--bg1);padding:10px 18px;border-radius:999px;font-size:12.5px;font-weight:600;box-shadow:0 10px 28px rgba(0,0,0,.25);z-index:2000;opacity:0;pointer-events:none;transition:all .25s ease;max-width:80vw;text-align:center}
#global-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ═══════════════════════════ PAGE CONTAINER ═══════════════════════════ */
#pc{padding:20px 24px 40px;flex:1}
.ph{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:18px;gap:12px;flex-wrap:wrap}
.ph-title{font-size:19px;font-weight:800;letter-spacing:-0.3px}
.ph-sub{font-size:12.5px;color:var(--t3);margin-top:3px}
.sec{display:none}
.sec.active{display:block}

/* ═══════════════════════════ KPI CARDS ═══════════════════════════ */
.kg{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:18px}
.kg.kg-4{grid-template-columns:repeat(4,1fr)}
/* Kartu Kondisi Sakit (Insight) — kotak KPI dibatasi lebarnya di desktop biar gak keregangan
   penuh 1 baris, beda dari .kg-4 biasa yang sengaja stretch full width. Di-scope min-width:901px
   biar gak nabrak breakpoint mobile/tablet (.kg.kg-4) yang di bawahnya di file ini. */
@media(min-width:901px){.kg.kg-4.kg-sick{grid-template-columns:repeat(4,minmax(0,116px));justify-content:start}}
.kc{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:14px;transition:all var(--tr);position:relative;overflow:hidden}
.kc:hover{box-shadow:var(--sh);transform:translateY(-1px)}
.kc-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.kc-ico{width:32px;height:32px;border-radius:var(--r8);display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}
.kc-tr{font-size:10px;font-weight:700;padding:2px 7px;border-radius:20px;white-space:nowrap}
.kc-tr.up{background:var(--green-lt);color:var(--green)}
.kc-tr.down{background:var(--red-lt);color:var(--red)}
.kc-tr.flat{background:var(--bg3);color:var(--t3)}
.kc-val{font-size:20px;font-weight:800;line-height:1.1;margin-bottom:3px;letter-spacing:-0.4px}
.kc-lbl{font-size:11px;color:var(--t3);font-weight:500}

/* ═══════════════════════════ CHART CARDS ═══════════════════════════ */
.cg2{display:grid;grid-template-columns:1.4fr 1fr;gap:14px;margin-bottom:14px}
.cg3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-bottom:14px}
.cc{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:16px;transition:background var(--tr);min-width:0;overflow:hidden}
.cg2,.cg3{min-width:0}
.cg2>*,.cg3>*{min-width:0}
.cc-hd{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:14px;gap:8px}
.cc-title{font-size:13px;font-weight:700}
.cc-sub{font-size:11px;color:var(--t3);margin-top:2px}
.cc-body{position:relative;height:230px;width:100%;min-width:0}
.cc-body canvas{max-height:230px!important;max-width:100%!important}
.period-tabs{display:flex;gap:2px;background:var(--bg3);border-radius:var(--r6);padding:2px;flex-shrink:0}
.period-tab{padding:5px 10px;font-size:11px;font-weight:600;color:var(--t3);border-radius:5px;cursor:pointer;transition:all var(--tr);border:none;background:none}
.period-tab.active{background:var(--bg1);color:var(--blue);box-shadow:0 1px 3px rgba(0,0,0,.08)}

/* ═══════════════════════════ INSIGHT / ALERT CARDS ═══════════════════════════ */
/* ═══════════════════════════ INSIGHT REDESIGN ═══════════════════════════ */

/* Area 1 - Health Score Header */
.hs-header{border-radius:var(--r16);padding:20px 24px;margin-bottom:16px;background:linear-gradient(135deg,#0d2438 0%,#1a4a6e 100%);color:#fff;display:flex;align-items:center;gap:20px;flex-wrap:wrap}
[data-theme=dark] .hs-header{background:linear-gradient(135deg,#0a1422 0%,#112236 100%)}
.hs-score-ring{width:80px;height:80px;flex-shrink:0;position:relative}
.hs-score-ring svg{width:80px;height:80px;transform:rotate(-90deg)}
.hs-score-ring circle{fill:none;stroke-width:7;stroke-linecap:round}
.hs-score-ring .ring-bg{stroke:rgba(255,255,255,.15)}
.hs-score-ring .ring-val{stroke:url(#scoreGrad);transition:stroke-dashoffset .6s ease}
.hs-score-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.hs-score-num{font-size:22px;font-weight:800;line-height:1;color:#fff}
.hs-score-label{font-size:9px;opacity:.75;font-weight:700;text-transform:uppercase;letter-spacing:.3px}
.hs-info{flex:1;min-width:0}
.hs-title{font-size:18px;font-weight:800;margin-bottom:3px}
.hs-summary{font-size:12px;opacity:.8;line-height:1.55;margin-bottom:12px}
.hs-cats{display:flex;gap:10px;flex-wrap:wrap}
.hs-cat{background:rgba(255,255,255,.1);border-radius:var(--r8);padding:7px 11px;min-width:100px}
.hs-cat-lbl{font-size:10px;opacity:.75;font-weight:600;text-transform:uppercase;letter-spacing:.3px;margin-bottom:4px}
.hs-cat-bar{height:4px;border-radius:2px;background:rgba(255,255,255,.2);overflow:hidden;margin-bottom:3px}
.hs-cat-fill{height:100%;border-radius:2px}
.hs-cat-val{font-size:12px;font-weight:800}

/* Area 2 - Critical Alerts */
.alert-strip{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
.alert-card{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:var(--r12);border-left:4px solid;cursor:pointer;transition:all var(--tr);position:relative}
.alert-card.critical{background:var(--red-lt);border-color:var(--red)}
.alert-card.warn{background:var(--orange-lt);border-color:var(--orange)}
.alert-card:hover{transform:translateX(2px);box-shadow:var(--sh)}
.alert-ico{width:32px;height:32px;border-radius:var(--r8);display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0;background:rgba(255,255,255,.7)}
.alert-body{flex:1;min-width:0}
.alert-badge{display:inline-flex;align-items:center;gap:4px;font-size:9.5px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px;padding:2px 7px;border-radius:10px}
.alert-badge.critical{background:var(--red);color:#fff}
.alert-badge.warn{background:var(--orange);color:#fff}
.alert-title{font-size:12.5px;font-weight:800;margin-bottom:3px;line-height:1.4}
.alert-desc{font-size:11.5px;color:var(--t2);line-height:1.55}
.alert-actions{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}
.alert-btn{padding:5px 11px;border-radius:var(--r6);font-size:11px;font-weight:700;border:1px solid;cursor:pointer;transition:all var(--tr)}
.alert-btn.primary{background:var(--blue);color:#fff;border-color:var(--blue)}
.alert-btn.ghost{background:transparent;color:var(--t2);border-color:var(--bd)}
.alert-btn:hover{opacity:.85}
.alert-dismiss{position:absolute;top:10px;right:10px;width:20px;height:20px;border-radius:50%;border:1px solid var(--bd);background:rgba(255,255,255,.7);font-size:11px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--t3)}
.alert-context-tag{font-size:10px;color:var(--t3);margin-top:4px;font-weight:500}

/* Area 3 - Grouped Panel (3 cols) */
.ig-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}
.ig-col{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);overflow:hidden}
.ig-col-hd{padding:12px 14px;border-bottom:1px solid var(--bd);display:flex;align-items:center;justify-content:space-between}
.ig-col-title{font-size:12px;font-weight:800;display:flex;align-items:center;gap:6px}
.ig-col-grade{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:10.5px;font-weight:700}
.ig-col-grade.good{background:var(--green-lt);color:var(--green)}
.ig-col-grade.warn{background:var(--orange-lt);color:var(--orange)}
.ig-col-grade.bad{background:var(--red-lt);color:var(--red)}
.ig-col-grade.neutral{background:var(--bg3);color:var(--t3)}
.ig-metrics{padding:12px 14px;display:flex;flex-direction:column;gap:10px}
.ig-metric{display:flex;flex-direction:column;gap:3px}
.ig-metric-row{display:flex;align-items:baseline;justify-content:space-between}
.ig-metric-lbl{font-size:11px;color:var(--t3);font-weight:600}
.ig-metric-val{font-size:13px;font-weight:800}
.ig-metric-delta{font-size:10px;font-weight:700;display:flex;align-items:center;gap:3px}
.ig-metric-delta.up{color:var(--green)}
.ig-metric-delta.down{color:var(--red)}
.ig-metric-delta.flat{color:var(--t3)}
.ig-sparkline{height:32px;margin-top:2px}
.ig-insight-text{padding:0 14px 12px;font-size:11.5px;color:var(--t2);line-height:1.55;border-top:1px solid var(--bd);padding-top:10px;margin-top:0}
.ig-insight-text strong{color:var(--t1)}

/* Area 4 - Smart Recommendations */
.rec-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.rec-card{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:14px;transition:all var(--tr)}
.rec-card:hover{box-shadow:var(--sh);border-color:var(--bd2)}
.rec-card-ico{width:36px;height:36px;border-radius:var(--r8);display:flex;align-items:center;justify-content:center;font-size:17px;margin-bottom:10px}
.rec-card-type{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--t3);margin-bottom:5px}
.rec-card-title{font-size:13px;font-weight:800;margin-bottom:5px;line-height:1.35}
.rec-card-desc{font-size:11.5px;color:var(--t2);line-height:1.6}
.rec-card-action{margin-top:10px;font-size:11.5px;font-weight:700;color:var(--blue);cursor:pointer;display:flex;align-items:center;gap:4px}
.rec-priority-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}

/* Predictive banner */
.predict-banner{background:linear-gradient(90deg,var(--purple-lt),rgba(108,92,231,.05));border:1px solid rgba(108,92,231,.2);border-radius:var(--r12);padding:13px 16px;display:flex;align-items:center;gap:12px;margin-bottom:16px}
.predict-ico{font-size:20px;flex-shrink:0}
.predict-text{font-size:12.5px;color:var(--t1);line-height:1.55}
.predict-text strong{color:var(--purple)}

/* Period filter */
.ig-period-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;flex-wrap:wrap;gap:8px}
.ig-filter-tabs{display:flex;gap:4px;background:var(--bg3);padding:3px;border-radius:var(--r6)}
.ig-filter-tab{padding:5px 12px;font-size:11.5px;font-weight:600;color:var(--t3);border-radius:5px;cursor:pointer;border:none;background:none;transition:all var(--tr)}
.ig-filter-tab.active{background:var(--bg1);color:var(--blue);box-shadow:0 1px 3px rgba(0,0,0,.08)}

@media(max-width:900px){
  .ig-grid{grid-template-columns:1fr}
  .rec-grid{grid-template-columns:1fr}
  .hs-cats{gap:7px}
  .hs-cat{min-width:80px}
}
@media(max-width:640px){
  .hs-header{padding:14px 16px;gap:14px}
  .hs-score-ring{width:64px;height:64px}
  .hs-score-ring svg{width:64px;height:64px}
  .hs-score-num{font-size:17px}
  .hs-title{font-size:15px}
  .ig-grid,.rec-grid{grid-template-columns:1fr}
}

/* Keep old insight classes for other pages */
.insight-list{display:flex;flex-direction:column;gap:10px}
.insight-card{display:flex;gap:12px;padding:13px 14px;border-radius:var(--r12);border:1px solid var(--bd);background:var(--bg2)}
.insight-card.warn{border-color:rgba(233,118,38,.3);background:var(--orange-lt)}
.insight-card.bad{border-color:rgba(228,41,52,.25);background:var(--red-lt)}
.insight-card.good{border-color:rgba(14,169,107,.25);background:var(--green-lt)}
.insight-ico{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0;background:var(--bg1)}
.insight-body{flex:1;min-width:0}
.insight-title{font-size:12.5px;font-weight:700;margin-bottom:2px}
.insight-desc{font-size:12px;color:var(--t2);line-height:1.55}
.insight-tag{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--t3);margin-bottom:5px;display:block}

/* ═══════════════════════════ FORM (INPUT PAGE) ═══════════════════════════ */
.input-mode-tabs{display:flex;gap:8px;margin-bottom:16px}
.mode-tab{flex:1;max-width:220px;padding:10px 16px;border-radius:var(--r8);border:1.5px solid var(--bd);background:var(--bg2);color:var(--t2);font-size:12.5px;font-weight:700;text-align:center;cursor:pointer;transition:all var(--tr);display:flex;align-items:center;justify-content:center;gap:7px}
.mode-tab.active{border-color:var(--blue);background:var(--blue-lt);color:var(--blue)}
.input-form-card{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r16);padding:20px}
.form-section-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--t3);margin:18px 0 10px;padding-top:14px;border-top:1px solid var(--bd)}
.form-section-title:first-child{margin-top:0;padding-top:0;border-top:none}
.fgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.fg{display:flex;flex-direction:column;gap:5px}
.fl{font-size:11.5px;font-weight:600;color:var(--t2);display:flex;align-items:center;gap:5px}
.fl .unit{color:var(--t3);font-weight:500;font-size:10.5px}
.fi{width:100%;background:var(--bg1);border:1px solid var(--bd);border-radius:var(--r6);padding:8px 11px;font-size:13px;color:var(--t1);transition:all var(--tr)}
.fi:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 2px rgba(0,72,131,0.1)}
.mmss-pair{display:flex;align-items:center;gap:5px}
.mmss-pair input{width:100%;text-align:center;-moz-appearance:textfield}
.mmss-pair input::-webkit-outer-spin-button,.mmss-pair input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.mmss-pair .mmss-sep{font-weight:700;color:var(--t3);flex-shrink:0}
.fl-desc{font-size:10px;color:var(--t3);font-weight:500;margin-top:-3px}
.lap-table{width:100%;border-collapse:collapse;font-size:12px;margin-top:8px}
.lap-table th{background:var(--bg1);padding:7px 8px;text-align:left;font-size:10px;font-weight:700;color:var(--t3);text-transform:uppercase;letter-spacing:.3px;border-bottom:1px solid var(--bd)}
.lap-table td{padding:6px 8px;border-bottom:1px solid var(--bd)}
.lap-table .lap-km-lbl{font-weight:700;color:var(--t2);white-space:nowrap}
.hv-good{color:var(--green);font-weight:700}
.hv-warn{color:var(--orange);font-weight:700}
.hv-bad{color:var(--red);font-weight:700}
.form-actions{display:flex;gap:10px;margin-top:20px;padding-top:16px;border-top:1px solid var(--bd)}
.btn-primary{padding:10px 22px;background:var(--blue);color:#fff;border:none;border-radius:var(--r8);font-size:13px;font-weight:700;display:flex;align-items:center;gap:7px;transition:all var(--tr)}
.btn-primary:hover{background:var(--blue-md);box-shadow:var(--sh)}
.btn-ghost{padding:10px 18px;background:var(--bg1);color:var(--t2);border:1px solid var(--bd);border-radius:var(--r8);font-size:13px;font-weight:600}
.btn-ghost:hover{border-color:var(--bd2)}

/* Upload zone */
.upz{border:2px dashed var(--bd2);border-radius:var(--r16);padding:36px 24px;text-align:center;cursor:pointer;transition:all var(--tr);background:var(--bg2);position:relative}
.upz:hover{border-color:var(--blue);background:var(--blue-lt)}
.upz-ico{font-size:30px;margin-bottom:8px}
.upz-title{font-size:13.5px;font-weight:700;margin-bottom:4px}
.upz-sub{font-size:11.5px;color:var(--t3)}
.thumb-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.thumb{width:78px;height:78px;border-radius:var(--r8);background:var(--bg3);border:1px solid var(--bd);display:flex;align-items:center;justify-content:center;font-size:22px;color:var(--t3);position:relative}
.thumb .rm{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;background:var(--red);color:#fff;font-size:10px;display:flex;align-items:center;justify-content:center;border:2px solid var(--bg1)}

/* ═══════════════════════════ TABLE ═══════════════════════════ */
.tc{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);overflow:hidden;margin-bottom:14px}
.tc-hd{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--bd);flex-wrap:wrap;gap:10px}
table{width:100%;border-collapse:collapse;font-size:12px}
thead th{background:var(--bg1);padding:9px 12px;text-align:left;font-size:10.5px;font-weight:700;color:var(--t3);text-transform:uppercase;letter-spacing:.4px;border-bottom:1px solid var(--bd);white-space:nowrap}
thead th[data-sort-field]{user-select:none;transition:color var(--tr)}
thead th[data-sort-field]:hover{color:var(--blue)}
.sort-arrow{font-size:8px;color:var(--blue);display:inline-block;width:8px}
.th-info{cursor:help;margin-left:2px;font-size:10px;opacity:0.75}
tbody td{padding:9px 12px;border-bottom:1px solid var(--bd);white-space:nowrap;color:var(--t1)}
tbody tr:hover{background:var(--bg3)}
.badge{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:20px;font-size:10.5px;font-weight:700}
.badge-good{background:var(--green-lt);color:var(--green)}
.badge-warn{background:var(--orange-lt);color:var(--orange)}
.badge-bad{background:var(--red-lt);color:var(--red)}
.badge-neutral{background:var(--bg3);color:var(--t3)}
.fs,.fi-search{background:var(--bg1);border:1px solid var(--bd);border-radius:var(--r6);padding:7px 11px;font-size:12px;color:var(--t1)}
.fi:disabled,.btn-test-conn:disabled,.btn-save-settings:disabled{opacity:.5;cursor:not-allowed}

/* Wrapper tabel "Komparasi Mingguan" — REUSABLE (dipakai Training Plan Round 76-77 & Daily
   History Round 81, jangan di-ID-scope) — SENGAJA bikin class sendiri, bukan reuse .cc-body,
   karena .cc-body punya height:230px fixed (didesain buat canvas chart), yang kalau dipakai
   buat tabel bikin isinya kepotong jadi cuma ~6 baris kelihatan sebelum scroll internal.
   max-height di sini disetel buat muat ~10 baris data + 1 header sebelum scroll-y kepakai. */
.wk-compare-scroll{max-height:370px;overflow:auto}
/* table-layout:fixed + <colgroup> (diisi dinamis via JS sesuai jumlah kolom aktif) — biar lebar
   tiap kolom minggu SAMA RATA gak peduli isinya panjang/pendek (default browser auto-layout bikin
   lebar kolom ngikut konten terpanjang di kolom itu, jadi keliatan gak rata antar kolom). */
.wk-compare-table{table-layout:fixed}
/* Header nempel (sticky) relatif ke .wk-compare-scroll yang scroll — biar nama kolom minggu
   tetap keliatan pas scroll ke baris bawah. Butuh background solid (bukan transparan) biar
   baris di baliknya gak keliatan numpuk pas ke-scroll di bawahnya. */
.wk-compare-scroll thead th{position:sticky;top:0;background:var(--bg1);z-index:1}

/* ═══════════════════════════ SETTINGS ═══════════════════════════ */
.settings-card{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:18px;margin-bottom:14px}
.settings-card-title{font-size:13.5px;font-weight:700;display:flex;align-items:center;gap:8px;margin-bottom:4px}
.settings-card-sub{font-size:12px;color:var(--t3);margin-bottom:2px}
.gs-status-bar{display:flex;align-items:center;gap:12px;background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:12px 16px;margin-bottom:14px;flex-wrap:wrap}
.gs-status-icon{font-size:16px;flex-shrink:0}
.gs-badge{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:20px;font-size:11px;font-weight:600}
.gs-badge-ok{background:var(--green-lt);border:1px solid rgba(14,169,107,.25);color:var(--green)}
.gs-badge-off{background:var(--red-lt);border:1px solid rgba(228,41,52,.2);color:var(--red)}
.conn-result{margin-top:12px;padding:10px 14px;border-radius:var(--r8);font-size:12px;font-weight:600;display:none}
.conn-result.ok{display:block;background:var(--green-lt);color:var(--green);border:1px solid rgba(14,169,107,.25)}
.conn-result.err{display:block;background:var(--red-lt);color:var(--red);border:1px solid rgba(228,41,52,.25)}
.btn-test-conn{padding:8px 18px;background:var(--blue);color:#fff;border:none;border-radius:var(--r6);font-size:12.5px;font-weight:700}
.btn-save-settings{padding:8px 18px;background:var(--bg1);color:var(--t2);border:1px solid var(--bd);border-radius:var(--r6);font-size:12.5px;font-weight:600}
.setup-steps{display:flex;flex-direction:column;gap:14px;margin-top:8px}
.step{display:flex;gap:12px}
.step-num{width:24px;height:24px;border-radius:50%;background:var(--blue-lt);color:var(--blue);font-size:11.5px;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.step-title{font-size:12.5px;font-weight:700;margin-bottom:2px}
.step-desc{font-size:12px;color:var(--t2);line-height:1.6}
.step-desc code{background:var(--bg1);padding:1px 5px;border-radius:var(--r4);font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--blue)}
.code-block{background:var(--bg0);border:1px solid var(--bd);border-radius:var(--r8);padding:14px;font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--t2);overflow-x:auto;white-space:pre;line-height:1.6;margin-top:12px;max-height:340px;overflow-y:auto}
.btn-copy-code{padding:6px 13px;background:var(--blue-lt);color:var(--blue);border:1px solid rgba(0,72,131,.15);border-radius:var(--r6);font-size:11.5px;font-weight:700}

/* ═══════════════════════════ WORKOUT ═══════════════════════════ */
.wo-tabs{display:flex;gap:8px;margin-bottom:16px;border-bottom:1px solid var(--bd);padding-bottom:0}
.wo-tab{padding:10px 18px;font-size:13px;font-weight:700;color:var(--t3);cursor:pointer;border-bottom:2px solid transparent;transition:all var(--tr);display:flex;align-items:center;gap:7px}
.wo-tab:hover{color:var(--t2)}
.wo-tab.active{color:var(--blue);border-bottom-color:var(--blue)}
.wo-panel{display:none}
.wo-panel.active{display:block}

/* Settings tabs — dipisah dari .wo-tab/.wo-panel karena setWoTab() query-nya
   global (tidak discope ke section), pakai class sendiri biar tidak bentrok. */
.settings-tabs{display:flex;gap:8px;margin-bottom:16px;border-bottom:1px solid var(--bd);padding-bottom:0}
.settings-tab{padding:10px 18px;font-size:13px;font-weight:700;color:var(--t3);cursor:pointer;border-bottom:2px solid transparent;transition:all var(--tr);display:flex;align-items:center;gap:7px}
.settings-tab:hover{color:var(--t2)}
.settings-tab.active{color:var(--blue);border-bottom-color:var(--blue)}
.settings-panel{display:none}
.settings-panel.active{display:block}

.wo-summary-row{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:14px}
.wo-stat{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:13px;text-align:center}
.wo-stat-val{font-size:17px;font-weight:800;line-height:1.2}
.wo-stat-lbl{font-size:10.5px;color:var(--t3);margin-top:3px;font-weight:500}

.hrz-row{margin-bottom:12px}
.hrz-top{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:4px}
.hrz-name{font-size:12.5px;font-weight:700}
.hrz-range{font-size:10.5px;color:var(--t3);margin-left:6px;font-weight:500}
.hrz-meta{font-size:11.5px;color:var(--t2);font-weight:600}
.hrz-bar-bg{height:7px;border-radius:4px;background:var(--bg3);overflow:hidden}
.hrz-bar-fill{height:100%;border-radius:4px}

.te-gauges{display:flex;gap:24px;justify-content:center;padding:10px 0}
.te-gauge{text-align:center}
.te-gauge-val{font-size:24px;font-weight:800;margin-top:6px}
.te-gauge-lbl{font-size:11px;font-weight:700;margin-top:2px}
.te-gauge-name{font-size:11px;color:var(--t3);margin-bottom:4px;font-weight:600}

.exercise-table-wrap{overflow-x:auto}
.exercise-row-form{display:grid;grid-template-columns:2fr 1fr 1fr 1.6fr 36px;gap:8px;margin-bottom:8px;align-items:center}
.exercise-row-form input,.exercise-row-form select{margin:0}
.exercise-row-rm{width:30px;height:30px;border-radius:var(--r6);border:1px solid var(--bd);background:var(--bg1);color:var(--red);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:14px}
.exercise-row-rm:hover{background:var(--red-lt);border-color:rgba(228,41,52,.3)}
.add-exercise-btn{padding:9px 16px;background:var(--blue-lt);color:var(--blue);border:1px dashed rgba(0,72,131,.3);border-radius:var(--r8);font-size:12.5px;font-weight:700;width:100%;margin-top:4px}
.add-exercise-btn:hover{background:rgba(0,72,131,.12)}
/* Baris obat (Sakit & Obat, Round 82) — reuse pola .exercise-row-form (Gym) tapi 3 kolom
   (Nama Obat, Dosis, Jumlah/hari) bukan 4, dan reuse .exercise-row-rm/.add-exercise-btn apa adanya. */
.med-row-form{display:grid;grid-template-columns:2fr 1.4fr 1fr 36px;gap:8px;margin-bottom:8px;align-items:center}
.med-row-form input{margin:0}
@media(max-width:640px){.med-row-form{grid-template-columns:1fr;gap:6px;padding:10px;background:var(--bg1);border-radius:var(--r8);margin-bottom:10px}}

.muscle-tag{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:14px;font-size:10.5px;font-weight:700;background:var(--purple-lt);color:var(--purple)}

.wo-type-badge{display:inline-flex;align-items:center;gap:5px;padding:4px 11px;border-radius:20px;font-size:11px;font-weight:700}
.wo-type-badminton{background:var(--orange-lt);color:var(--orange)}
.wo-type-lari{background:var(--teal-lt);color:var(--teal)}
.wo-type-gym{background:var(--purple-lt);color:var(--purple)}

.wo-recent-card{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--r12);border:1px solid var(--bd);background:var(--bg2);margin-bottom:8px}
.wo-recent-ico{width:36px;height:36px;border-radius:var(--r8);display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0}
.wo-recent-body{flex:1;min-width:0}
.wo-recent-title{font-size:12.5px;font-weight:700}
.wo-recent-meta{font-size:11px;color:var(--t3);margin-top:1px}
.wo-recent-stat{text-align:right;flex-shrink:0}
.wo-recent-stat-val{font-size:14px;font-weight:800}
.wo-recent-stat-lbl{font-size:10px;color:var(--t3)}

.lap-table-mini{font-size:11px}
.lap-table-mini th{font-size:9.5px}

/* ═══════════════════════════ BODY RECOMPOSITION ═══════════════════════════ */
.brc-header{background:linear-gradient(135deg,var(--blue),var(--blue-md));border-radius:var(--r16);padding:18px 22px;color:#fff;margin-bottom:16px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}
.brc-header-title{font-size:16px;font-weight:800}
.brc-header-meta{font-size:11.5px;opacity:.85;margin-top:3px}
.brc-header-meta span{margin-right:14px}
.brc-score-badge{background:rgba(255,255,255,.15);border-radius:var(--r12);padding:10px 18px;text-align:center}
.brc-score-val{font-size:26px;font-weight:800;line-height:1}
.brc-score-lbl{font-size:10px;opacity:.85;margin-top:2px}

.brc-table{width:100%;border-collapse:collapse;font-size:12px}
.brc-table th{text-align:left;padding:8px 10px;font-size:10.5px;color:var(--t3);font-weight:700;text-transform:uppercase;letter-spacing:.3px;border-bottom:1px solid var(--bd)}
.brc-table td{padding:8px 10px;border-bottom:1px solid var(--bd)}
.brc-table td:first-child{font-weight:600}
.brc-val-badge{display:inline-flex;padding:2px 9px;border-radius:20px;font-size:10.5px;font-weight:700}
.brc-val-normal{background:var(--green-lt);color:var(--green)}
.brc-val-high{background:var(--orange-lt);color:var(--orange)}
.brc-val-low{background:var(--teal-lt);color:var(--teal)}

/* Tri-zone range bar (Low / Standard / High) used in Muscle Fat & Obesity Analysis */
.trizone-row{margin-bottom:16px}
.trizone-label{font-size:12px;font-weight:700;margin-bottom:5px;display:flex;justify-content:space-between;align-items:baseline}
.trizone-label .result{font-size:11px;color:var(--t2);font-weight:600}
.trizone-track{position:relative;height:22px;border-radius:6px;overflow:hidden;display:flex;font-size:9px;color:#fff;font-weight:700}
.trizone-seg{display:flex;align-items:center;justify-content:center;position:relative}
.trizone-seg.low{background:#5bb8e8}
.trizone-seg.standard{background:var(--green)}
.trizone-seg.high{background:var(--orange)}
.trizone-marker{position:absolute;top:-3px;width:3px;height:28px;background:var(--t1);border-radius:2px}
.trizone-marker::after{content:attr(data-val);position:absolute;top:-18px;left:50%;transform:translateX(-50%);font-size:10.5px;font-weight:800;color:var(--t1);white-space:nowrap}
.trizone-scale{display:flex;justify-content:space-between;font-size:9px;color:var(--t3);margin-top:3px}

/* Body type 3x3 grid */
.bodytype-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.bodytype-cell{padding:14px 8px;text-align:center;border-radius:var(--r8);background:var(--bg3);font-size:11.5px;font-weight:600;color:var(--t2)}
.bodytype-cell.active{background:var(--blue);color:#fff;font-weight:800}

/* Segmental fat / muscle balance body diagram (simplified) */
.seg-body-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.seg-side-stats{display:flex;flex-direction:column;gap:10px;justify-content:center}
.seg-stat-pair{display:flex;justify-content:space-between;align-items:center;font-size:11.5px}
.seg-stat-pair .v{font-weight:800;font-size:13px}
.seg-figure{display:flex;align-items:center;justify-content:center;font-size:56px;color:var(--t3)}
.seg-status-chip{font-size:9.5px;font-weight:700;padding:1px 7px;border-radius:10px}

/* ═══════════════════════════ PROGRAM / ROADMAP ═══════════════════════════ */
.prog-card{background:linear-gradient(135deg,#1a3a5c,#0d2438);border-radius:var(--r16);padding:18px 22px;color:#fff;margin-bottom:16px}
[data-theme=dark] .prog-card{background:linear-gradient(135deg,#15233a,#0a1422)}
.prog-card-hd{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:14px}
.prog-name{font-size:15px;font-weight:800}
.prog-dates{font-size:11px;opacity:.75;margin-top:3px}
.prog-days-left{background:rgba(255,255,255,.12);border-radius:20px;padding:5px 13px;font-size:11.5px;font-weight:700;white-space:nowrap}
.prog-metrics-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
.prog-metric{background:rgba(255,255,255,.07);border-radius:var(--r8);padding:11px 10px}
.prog-metric-name{font-size:10px;opacity:.75;font-weight:600;margin-bottom:6px;text-transform:uppercase;letter-spacing:.3px}
.prog-metric-nums{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:6px}
.prog-metric-cur{font-size:15px;font-weight:800}
.prog-metric-target{font-size:10.5px;opacity:.8}
.prog-bar-track{height:6px;border-radius:4px;background:rgba(255,255,255,.15);overflow:hidden}
.prog-bar-fill{height:100%;border-radius:4px;background:#4ade80}
.prog-bar-fill.behind{background:#f59e0b}
.prog-toggle-history{margin-top:14px;padding-top:12px;border-top:1px solid rgba(255,255,255,.12);font-size:11.5px;font-weight:600;opacity:.85;cursor:pointer;display:flex;align-items:center;gap:6px}
.prog-toggle-history:hover{opacity:1}
.prog-history-panel{display:none;margin-top:10px}
.prog-history-panel.open{display:block}
.prog-history-item{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.08);font-size:11.5px}
.prog-history-item:last-child{border-bottom:none}
.prog-new-btn{background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.2);color:#fff;padding:7px 15px;border-radius:var(--r6);font-size:11.5px;font-weight:700}
.prog-new-btn:hover{background:rgba(255,255,255,.22)}
.prog-empty{text-align:center;padding:24px;opacity:.85}

/* ═══════════════════════════ BODY MEASUREMENT (MONTHLY) ═══════════════════════════ */
.bm-freq-tag{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:700;padding:3px 10px;border-radius:20px;background:var(--purple-lt);color:var(--purple)}
.bm-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}
.bm-stat{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:13px;text-align:center}
.bm-stat-val{font-size:16px;font-weight:800}
.bm-stat-lbl{font-size:10px;color:var(--t3);margin-top:3px;font-weight:500}
.bm-stat-delta{font-size:10px;font-weight:700;margin-top:2px}
.bm-stat-delta.pos{color:var(--green)}
.bm-stat-delta.neg{color:var(--red)}

.hist-row-monday td{background:var(--green-lt)}
.hist-row:hover td{background:var(--blue-lt)!important}
.hist-row:hover td:nth-child(2){color:var(--blue)}
.hist-complete-dot{display:inline-block;width:8px;height:8px;border-radius:50%;cursor:default}
.hist-complete-dot.good{background:var(--green)}
.hist-complete-dot.bad{background:var(--red)}
.hist-analyze-ico{cursor:pointer;font-size:11px;opacity:.65;transition:opacity var(--tr)}
.hist-analyze-ico:hover{opacity:1}
.hist-date-short{display:none}
.hist-sick-badge{font-size:11px;cursor:help}
/* table-layout:auto (Round 82) nyamain lebar kolom sesuai konten TERLEBAR di kolom itu SENDIRI-
   SENDIRI — jadi PAI (label pendek, "PAI") kolomnya lebih SEMPIT dari Fatigue/Fitness (label lebih
   panjang) walau isinya sama-sama cuma angka 2-3 digit, keliatan gak rata. min-width sama buat
   ketiganya biar konsisten, tanpa balik ke table-layout:fixed (yang bakal ngerusak balik fleksibilitas
   kolom lain yang udah bener kepakai lebar sesuai kebutuhan masing-masing). */
.hist-data-table [data-col="pai"],.hist-data-table [data-col="fatigue"],.hist-data-table [data-col="fitness"]{min-width:85px}

/* Kontrol kolom Riwayat Harian (Round 82) — chip "close-able" buat kolom yang lagi keliatan
   + dropdown checklist "🔧 Kolom" buat nampilin balik kolom yang disembunyiin. Visibility beneran
   dikontrol via <style> dinamis (applyHistColumnVisibility(), shared.js) yang nyasar attribute
   data-col di tiap <th>/<td> — bukan CSS statis, karena user bisa ubah pilihan kapan aja. */
.hist-col-toolbar{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:10px 16px;border-bottom:1px solid var(--bd)}
.hist-col-chips{display:flex;flex-wrap:wrap;gap:6px;flex:1}
.hist-col-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 6px 4px 10px;background:var(--blue-lt);color:var(--blue);border-radius:20px;font-size:11px;font-weight:600;white-space:nowrap}
.hist-col-chip.locked{background:var(--bg3);color:var(--t3)}
.hist-col-chip-x{cursor:pointer;width:15px;height:15px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;opacity:.7;flex-shrink:0}
.hist-col-chip-x:hover{background:rgba(0,72,131,.18);opacity:1}
.hist-col-picker{position:relative;flex-shrink:0}
.hist-col-menu{display:none;position:absolute;right:0;top:calc(100% + 6px);width:210px;max-height:320px;overflow-y:auto;background:var(--bg1);border:1px solid var(--bd);border-radius:var(--r12);box-shadow:var(--sh-md);padding:8px;z-index:50}
.hist-col-menu.open{display:block}
.hist-col-menu-item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:var(--r6);font-size:12.5px;cursor:pointer;color:var(--t1)}
.hist-col-menu-item:hover{background:var(--bg3)}
.hist-col-menu-item input{cursor:pointer;margin:0}
.hist-col-menu-item.locked{opacity:.5;cursor:not-allowed}
.da-text{font-size:12.5px;color:var(--t2);line-height:1.6;background:var(--bg2);border-radius:var(--r8);padding:10px 12px}
.da-list{margin:0;padding-left:18px;font-size:12px;color:var(--t2);line-height:1.8}
.da-list li{margin-bottom:4px}
#hist-modal-overlay.open{display:flex!important}
@media(max-width:640px){
  #hist-modal{max-height:95vh;border-radius:var(--r12) var(--r12) 0 0;position:fixed;bottom:0;left:0;right:0;max-width:100%}
  #hist-modal-overlay{align-items:flex-end;padding:0}
}

/* ═══ Modal generik buat Input Data Harian & Input Sesi Workout ═══ */
.input-modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.55);z-index:9000;align-items:center;justify-content:center;padding:16px}
.input-modal-overlay.open{display:flex}
.input-modal-box{background:var(--bg1);border-radius:var(--r16);width:100%;max-width:680px;max-height:90vh;overflow-y:auto;box-shadow:var(--sh-md);position:relative;padding:20px}
.input-modal-close{position:absolute;top:16px;right:16px;width:30px;height:30px;border-radius:50%;border:1px solid var(--bd);background:var(--bg2);color:var(--t2);font-size:16px;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:2}
.input-modal-box .ph{padding-right:38px}
@media(max-width:640px){
  .input-modal-box{max-height:95vh;border-radius:var(--r12) var(--r12) 0 0;position:fixed;bottom:0;left:0;right:0;max-width:100%}
  .input-modal-overlay{align-items:flex-end;padding:0}
}

/* ═══════════════════════════ WORKOUT TARGET CARDS ═══════════════════════════ */
.wt-card{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:16px;margin-bottom:14px}
.wt-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;flex-wrap:wrap;gap:8px}
.wt-title{font-size:13px;font-weight:700;display:flex;align-items:center;gap:7px}
.wt-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.wt-item{background:var(--bg3);border-radius:var(--r8);padding:13px}
.wt-item-name{font-size:11px;font-weight:700;color:var(--t2);margin-bottom:8px;text-transform:uppercase;letter-spacing:.3px}
.wt-item-nums{display:flex;align-items:baseline;gap:8px;margin-bottom:7px}
.wt-item-cur{font-size:19px;font-weight:800}
.wt-item-arrow{color:var(--t3);font-size:13px}
.wt-item-target{font-size:13px;font-weight:700;color:var(--blue)}
.wt-progress-track{height:6px;border-radius:4px;background:var(--bd2);overflow:hidden}
.wt-progress-fill{height:100%;border-radius:4px;background:var(--blue)}
.wt-edit-btn{font-size:11px;color:var(--blue);font-weight:700;cursor:pointer}

/* ═══════════════════════════ MORNING HUB ═══════════════════════════ */
.morning-greeting{background:linear-gradient(135deg,#0d2438,#1a4a6e);border-radius:var(--r16);padding:20px 22px;color:#fff;margin-bottom:14px;position:relative;overflow:hidden}
.morning-greeting::before{content:'🌅';position:absolute;right:16px;top:12px;font-size:42px;opacity:.18}
.morning-date{font-size:11.5px;opacity:.7;font-weight:600;margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px}
.morning-title{font-size:20px;font-weight:800;line-height:1.2;margin-bottom:2px}
.morning-sub{font-size:12px;opacity:.75;margin-bottom:14px}
.morning-status-strip{display:flex;gap:10px;flex-wrap:wrap}
.morning-chip{background:rgba(255,255,255,.12);border-radius:20px;padding:5px 12px;font-size:12px;font-weight:700;display:flex;align-items:center;gap:5px}
.morning-chip.warn{background:rgba(249,115,22,.25)}
.morning-chip.bad{background:rgba(228,41,52,.25)}
.morning-chip.good{background:rgba(16,185,129,.2)}

.morning-motivasi{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:15px;margin-bottom:12px;position:relative}
.morning-quote{font-size:13.5px;font-weight:600;color:var(--t1);line-height:1.6;font-style:italic;margin-bottom:10px}
.morning-quote-author{font-size:11px;color:var(--t3);font-weight:600}
.morning-gen-btn{margin-top:10px;padding:8px 14px;background:var(--blue-lt);color:var(--blue);border:1px solid rgba(0,72,131,.15);border-radius:var(--r6);font-size:12px;font-weight:700;width:100%;display:flex;align-items:center;justify-content:center;gap:6px}
.morning-gen-btn:hover{background:rgba(0,72,131,.12)}

.reminder-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:12px}
.reminder-card{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:13px}
.reminder-card.done{border-color:rgba(16,185,129,.3);background:var(--green-lt)}
.reminder-card.warn{border-color:rgba(249,115,22,.3);background:var(--orange-lt)}
.reminder-card-ico{font-size:18px;margin-bottom:6px}
.reminder-card-lbl{font-size:10.5px;color:var(--t3);font-weight:700;text-transform:uppercase;letter-spacing:.3px;margin-bottom:3px}
.reminder-card-val{font-size:16px;font-weight:800;line-height:1.2}
.reminder-card-target{font-size:11px;color:var(--t3);margin-top:2px}
.reminder-card-bar{height:5px;border-radius:3px;background:var(--bd2);overflow:hidden;margin-top:6px}
.reminder-card-bar-fill{height:100%;border-radius:3px;background:var(--blue)}
.reminder-card-bar-fill.done{background:var(--green)}
.reminder-card-bar-fill.warn{background:var(--orange)}

.workout-today-card{border-radius:var(--r12);padding:14px;margin-bottom:12px;display:flex;align-items:center;gap:12px}
.workout-today-card.badminton{background:var(--orange-lt);border:1px solid rgba(233,118,38,.25)}
.workout-today-card.lari{background:var(--teal-lt);border:1px solid rgba(8,145,178,.25)}
.workout-today-card.gym{background:var(--purple-lt);border:1px solid rgba(108,92,231,.25)}
.workout-today-card.rest{background:var(--bg2);border:1px solid var(--bd)}
.workout-today-ico{font-size:28px;flex-shrink:0}
.workout-today-body{flex:1;min-width:0}
.workout-today-lbl{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--t3);margin-bottom:2px}
.workout-today-name{font-size:15px;font-weight:800}
.workout-today-sub{font-size:11.5px;color:var(--t2);margin-top:1px}
.morning-quick-btn{display:flex;gap:8px;flex-wrap:wrap}
.mq-btn{flex:1;min-width:120px;padding:11px;border-radius:var(--r10,var(--r8));border:1.5px solid var(--bd);background:var(--bg2);font-size:12.5px;font-weight:700;color:var(--t2);display:flex;align-items:center;justify-content:center;gap:6px;transition:all var(--tr)}
.mq-btn:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-lt)}
.mq-btn.primary{background:var(--blue);color:#fff;border-color:var(--blue)}
.mq-btn.primary:hover{background:var(--blue-md)}

/* Quick Input Widget */
.qi-card{background:var(--bg2);border:1.5px solid var(--blue);border-radius:var(--r12);padding:14px 16px;margin-bottom:12px}
.qi-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.qi-title{font-size:12.5px;font-weight:800;display:flex;align-items:center;gap:6px}
.qi-toggle{font-size:11px;font-weight:700;color:var(--blue);cursor:pointer;padding:4px 10px;border-radius:20px;border:1px solid rgba(0,72,131,.2);background:var(--blue-lt)}
.qi-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}
.qi-field{display:flex;flex-direction:column;gap:4px}
.qi-label{font-size:10px;font-weight:700;color:var(--t3);text-transform:uppercase;letter-spacing:.3px;display:flex;align-items:center;gap:4px}
.qi-input{background:var(--bg1);border:1.5px solid var(--bd);border-radius:var(--r6);padding:8px 10px;font-size:16px;font-weight:800;color:var(--t1);text-align:center;width:100%;transition:border-color var(--tr)}
.qi-input:focus{outline:none;border-color:var(--blue)}
.qi-input::placeholder{font-size:12px;font-weight:400;color:var(--t3)}
.qi-unit{font-size:9.5px;color:var(--t3);text-align:center;margin-top:2px;font-weight:500}
.qi-extra-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px;padding-top:10px;border-top:1px solid var(--bd)}
.qi-save-row{display:flex;gap:8px;align-items:center}
.qi-save-btn{flex:1;padding:10px;background:var(--blue);color:#fff;border:none;border-radius:var(--r8);font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center;gap:6px;transition:all var(--tr)}
.qi-save-btn:hover{background:var(--blue-md)}
.qi-save-btn.success{background:var(--green)}
.qi-expand-btn{padding:10px 14px;background:var(--bg1);border:1px solid var(--bd);border-radius:var(--r8);font-size:12px;font-weight:600;color:var(--t2)}
.qi-expand-btn:hover{border-color:var(--bd2)}
.qi-toast{font-size:11.5px;font-weight:700;color:var(--green);display:none;align-items:center;gap:5px}

/* ═══════════════════════════ TRAINING PLAN ═══════════════════════════ */
/* Kolom kiri (This Week strip + Kalender Bulanan, 70%) + Progress (30%) sebaris —
   align-items:stretch (default grid) biar card Progress otomatis setinggi kolom kiri
   (atasnya sejajar This Week strip, bawahnya sejajar ujung kalender bulanan). */
.tp-main-row{display:grid;grid-template-columns:7fr 3fr;gap:14px;margin-bottom:14px;align-items:stretch}
.tp-main-left{display:flex;flex-direction:column;gap:12px;min-width:0}
.tp-progress-card{display:flex;flex-direction:column}
.tp-progress-insight{margin-top:12px;padding:12px 14px;background:var(--bg3);border-radius:var(--r8);font-size:12px;color:var(--t2);line-height:1.7}
@media(max-width:900px){.tp-main-row{grid-template-columns:1fr}}

.tp-month-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;flex-wrap:wrap;gap:8px}
.tp-month-nav{display:flex;align-items:center;gap:8px}
.tp-month-btn{width:28px;height:28px;border-radius:50%;border:1px solid var(--bd);background:var(--bg2);color:var(--t2);font-size:13px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--tr)}
.tp-month-btn:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-lt)}
.tp-month-label{font-size:18px;font-weight:800;letter-spacing:-0.02em}
.tp-legend{display:flex;gap:6px;flex-wrap:wrap}
.tp-legend-item{display:flex;align-items:center;gap:5px;font-size:10.5px;font-weight:700;padding:4px 10px;border-radius:999px;color:var(--t2);background:var(--bg3)}
.tp-legend-item.leg-done{background:var(--green-lt);color:var(--green)}
.tp-legend-item.leg-planned{background:var(--blue-lt);color:var(--blue-md)}
.tp-legend-item.leg-missed{background:var(--red-lt);color:var(--red)}
.tp-legend-dot{width:10px;height:10px;border-radius:50%}

.tp-week-row{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}
.tp-day-header{text-align:center;font-size:9.5px;font-weight:800;color:var(--t3);text-transform:uppercase;letter-spacing:.3px;padding:3px 0}
.tp-day{border-radius:var(--r8);padding:7px 4px;text-align:center;cursor:pointer;border:1.5px solid var(--bd);background:var(--bg2);transition:transform .15s ease,box-shadow .15s ease,border-color var(--tr);position:relative;min-height:72px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:4px;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.tp-day:not(.empty):hover{transform:translateY(-2px);box-shadow:0 8px 16px rgba(0,0,0,.12);border-color:var(--blue-md)}
.tp-day.past{opacity:.7}
.tp-day.empty{background:var(--bg0);border-color:transparent;cursor:default;box-shadow:none}
.tp-day-num{font-size:11.5px;font-weight:800;color:var(--t2)}
.tp-day.today .tp-day-num{color:var(--blue);font-weight:800}
.tp-day-ico{font-size:20px;line-height:1}
.tp-day-ico-multi{font-size:14px;letter-spacing:-1px}
.tp-day-ico-extra{font-size:8px;font-weight:800;color:var(--t2);margin-left:1px;vertical-align:super}
.tp-day-status{font-size:8.5px;font-weight:800;margin-top:auto;padding:2px 7px;border-radius:999px;white-space:nowrap}
.tp-day-status.done{background:var(--green-lt);color:var(--green)}
.tp-day-status.planned{background:var(--blue-lt);color:var(--blue-md)}
.tp-day-status.missed{background:var(--red-lt);color:var(--red)}
.tp-day-status.rest{background:var(--bg1);color:var(--t3)}

/* Warna kalender bulanan: fill = jenis olahraga (konsisten sama warna aksen di halaman lain),
   border = status (selesai/terjadwal/terlewat) — biar 2 dimensi info kebaca sekali lihat,
   gak cuma kotak putih + emoji kecil kayak sebelumnya. */
.tp-day.sport-badminton{background:var(--orange-lt)}
.tp-day.sport-lari{background:var(--teal-lt)}
.tp-day.sport-gym{background:var(--purple-lt)}
.tp-day.status-done{border-color:var(--green)}
.tp-day.status-missed{border-color:var(--red)}
.tp-day.status-planned{border-color:var(--blue-md)}
.tp-day.status-rest{background:var(--bg3)}
.tp-day.today{border-width:2.5px;border-color:var(--blue)!important;box-shadow:0 0 0 4px var(--blue-lt)}

.tp-edit-modal{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:16px;margin-top:10px}
.tp-activity-options{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:10px 0}
.tp-act-opt{padding:10px 6px;border-radius:var(--r8);border:1.5px solid var(--bd);text-align:center;cursor:pointer;font-size:12px;font-weight:700;transition:all var(--tr)}
.tp-act-opt:hover,.tp-act-opt.selected{border-color:var(--blue);background:var(--blue-lt);color:var(--blue)}
.tp-act-opt.selected-rest{border-color:var(--t3);background:var(--bg3);color:var(--t3)}

/* Modal Edit Template Mingguan — 7 baris hari, tiap baris 4 kartu icon (reuse .tp-act-opt) */
.wt-modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:9100;align-items:center;justify-content:center;padding:16px}
.wt-modal-overlay.open{display:flex}
.wt-day-row{margin-bottom:14px}
.wt-day-row:last-of-type{margin-bottom:18px}
.wt-day-lbl{font-size:11.5px;font-weight:700;color:var(--t2);margin-bottom:6px}
.wt-day-opts{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}

@media(max-width:640px){
  .reminder-grid{grid-template-columns:repeat(2,1fr)}
  .tp-week-row{gap:3px}
  .tp-day{padding:6px 2px;min-height:56px}
  .tp-day-ico{font-size:13px}
  .tp-activity-options{grid-template-columns:repeat(2,1fr)}
}

/* ═══════════════════════════ WORKOUT RANKING ═══════════════════════════ */
/* table-layout:fixed + colgroup (di HTML) biar kolom 1-6 (# s/d Training Load) persis
   sama lebarnya di ketiga tabel (Badminton/Lari/Gym). width:auto WAJIB ditulis eksplisit
   di sini buat nimpa rule global "table{width:100%}" (elemen selector) — kalau enggak,
   tiap tabel ikut diregangkan ke 100% lebar card yang SAMA padahal total kolomnya beda
   (Badminton 6 kolom, Gym 7, Lari 8), jadi rasio stretch-nya beda, kolom 1-6 ikut geser
   ukurannya walau colgroup px-nya udah ditulis identik. */
.wr-table{border-collapse:collapse;font-size:11.5px;table-layout:fixed;width:auto}
.wr-table th{padding:7px 8px;text-align:left;font-size:9.5px;font-weight:700;color:var(--t3);text-transform:uppercase;letter-spacing:.4px;border-bottom:1px solid var(--bd)}
.wr-table td{padding:8px 8px;border-bottom:1px solid var(--bd);vertical-align:middle}
.wr-table tr:last-child td{border-bottom:none}
.wr-table tr:hover td{background:var(--bg3)}
.wr-rank{width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;flex-shrink:0}
.wr-rank-1{background:linear-gradient(135deg,#f6c90e,#e5a800);color:#7a5200}
.wr-rank-2{background:linear-gradient(135deg,#d1d5db,#9ca3af);color:#374151}
.wr-rank-3{background:linear-gradient(135deg,#cd7c3e,#b86a2a);color:#fff}
.wr-rank-n{background:var(--bg3);color:var(--t3)}
.wr-bar-mini{height:4px;border-radius:2px;background:var(--bd2);overflow:hidden;margin-top:4px;min-width:40px}
.wr-bar-fill{height:100%;border-radius:2px}
.wr-zone-bar{display:flex;height:10px;border-radius:3px;overflow:hidden;background:var(--bd2);min-width:44px;cursor:default}
.wr-zone-bar > div{height:100%}

/* Tooltip hover HR Zone — position:fixed, di-JS-posisiin (lihat showZoneTooltip, shared.js).
   Sengaja bukan position:absolute biasa karena card Workout Ranking (.cc) punya overflow:hidden. */
.wr-zone-tt{display:none;position:fixed;background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r8);padding:8px 10px;box-shadow:0 6px 20px rgba(0,0,0,.2);z-index:9999;font-size:10.5px;pointer-events:none}
.wr-zone-tt-row{display:flex;align-items:center;gap:7px;padding:2px 0;white-space:nowrap}
.wr-zone-tt-swatch{width:8px;height:8px;border-radius:2px;flex-shrink:0}
.wr-zone-tt-label{color:var(--t2)}
.wr-zone-tt-val{font-weight:700;color:var(--t1);margin-left:auto;padding-left:12px}

/* ═══════════════════════════ THIS WEEK STRIP ═══════════════════════════ */
/* Dimensi disamain persis sama .tp-day (kalender bulanan) — padding, radius, ukuran
   icon/font semua sama, cuma nambah 1 baris nama hari di atas (Sen/Sel/dst). */
.tw-strip{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r12);padding:18px;margin-bottom:0}
.tw-strip-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.tw-strip-title{font-size:12px;font-weight:800;display:flex;align-items:center;gap:6px}
.tw-strip-sub{font-size:11px;color:var(--t3)}
.tw-days{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.tw-day{border-radius:var(--r8);padding:7px 4px;text-align:center;cursor:pointer;border:1.5px solid var(--bd);background:var(--bg1);transition:transform .15s ease,box-shadow .15s ease,border-color var(--tr);position:relative;min-height:72px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:2px;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.tw-day:hover{transform:translateY(-2px);box-shadow:0 8px 16px rgba(0,0,0,.12);border-color:var(--blue-md)}
.tw-day.tw-today{border-color:var(--blue);background:var(--blue-lt)}
.tw-day.tw-done{border-color:rgba(14,169,107,.3);background:var(--green-lt)}
.tw-day.tw-missed{border-color:rgba(228,41,52,.25);background:var(--red-lt)}
.tw-day.tw-rest{opacity:.6}
.tw-day-name{font-size:8.5px;font-weight:800;color:var(--t3);text-transform:uppercase;letter-spacing:.3px}
.tw-day.tw-today .tw-day-name{color:var(--blue)}
.tw-day-ico{font-size:20px;line-height:1}
.tw-day-status{font-size:11px;line-height:1}
.tw-day-num{font-size:9.5px;color:var(--t3);font-weight:700;margin-top:auto}

/* Training Plan click modal */
.tp-modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:9100;align-items:center;justify-content:center;padding:16px}
.tp-modal-overlay.open{display:flex!important}
.tp-modal{background:var(--bg1);border-radius:var(--r16);width:100%;max-width:520px;max-height:88vh;overflow-y:auto;box-shadow:var(--sh-md)}
.tp-modal-hd{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--bd);position:sticky;top:0;background:var(--bg1);z-index:1;border-radius:var(--r16) var(--r16) 0 0}
.tp-modal-hd-left{display:flex;align-items:center;gap:10px}
.tp-modal-hd-ico{width:36px;height:36px;border-radius:var(--r8);display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0}
.tp-modal-title{font-size:14px;font-weight:800}
.tp-modal-date{font-size:11.5px;color:var(--t3);margin-top:1px}
.tp-modal-body{padding:16px 18px}
.tp-stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.tp-stat-card{background:var(--bg3);border-radius:var(--r8);padding:11px;text-align:center}
.tp-stat-val{font-size:16px;font-weight:800;line-height:1.2}
.tp-stat-lbl{font-size:10px;color:var(--t3);margin-top:3px;font-weight:500}
.tp-hz-row{margin-bottom:8px}
.tp-hz-label{display:flex;justify-content:space-between;font-size:11px;font-weight:600;margin-bottom:3px}
.tp-hz-bar{height:6px;border-radius:3px;background:var(--bd2);overflow:hidden}
.tp-hz-fill{height:100%;border-radius:3px}
.tp-no-data{text-align:center;padding:24px;color:var(--t3);font-size:13px}
.tp-status-pill{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;font-size:12px;font-weight:700}
.tp-status-done{background:var(--green-lt);color:var(--green)}
.tp-status-missed{background:var(--red-lt);color:var(--red)}
.tp-status-planned{background:var(--blue-lt);color:var(--blue)}
.tp-status-rest{background:var(--bg3);color:var(--t3)}
.tp-status-today{background:var(--blue-lt);color:var(--blue)}

@media(max-width:640px){
  .tp-modal{max-height:95vh;border-radius:var(--r12) var(--r12) 0 0;position:fixed;bottom:0;left:0;right:0;max-width:100%}
  .tp-modal-overlay{align-items:flex-end;padding:0}
}

/* ═══════════════════════════ EMPTY STATE ═══════════════════════════ */
.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center;gap:12px}
.empty-state-ico{font-size:48px;line-height:1;filter:grayscale(.3)}
.empty-state-title{font-size:15px;font-weight:800;color:var(--t1)}
.empty-state-desc{font-size:12.5px;color:var(--t3);line-height:1.65;max-width:320px}
.empty-state-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:4px}
.empty-state-btn{padding:9px 18px;border-radius:var(--r8);font-size:13px;font-weight:700;cursor:pointer;transition:all var(--tr)}
.empty-state-btn.primary{background:var(--blue);color:#fff;border:none}
.empty-state-btn.primary:hover{background:var(--blue-md)}
.empty-state-btn.ghost{background:var(--bg2);color:var(--t2);border:1px solid var(--bd)}
.empty-state-btn.ghost:hover{border-color:var(--bd2)}

/* ═══════════════════════════ PAGINATION ═══════════════════════════ */
.hist-footer{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-top:1px solid var(--bd);flex-wrap:wrap;gap:8px}
.hist-info{font-size:11.5px;color:var(--t3)}
.hist-info strong{color:var(--t2)}
.hist-pagination{display:flex;gap:4px}
.hist-page-btn{width:30px;height:30px;border-radius:var(--r6);border:1px solid var(--bd);background:var(--bg2);color:var(--t2);font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--tr)}
.hist-page-btn:hover{border-color:var(--blue);color:var(--blue)}
.hist-page-btn.active{background:var(--blue);color:#fff;border-color:var(--blue)}
.hist-page-btn:disabled{opacity:.4;cursor:default}

/* ═══════════════════════════ MOBILE OVERLAY ═══════════════════════════ */
#sb-ov{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:199;display:none}
#sb-ov.on{display:block}

/* ═══════════════════════════ MOCKUP BANNER ═══════════════════════════ */
.mockup-banner{background:linear-gradient(90deg,var(--yellow),#e6a020);color:#1a1200;font-size:11.5px;font-weight:700;text-align:center;padding:6px 12px;letter-spacing:.2px}

/* ═══════════════════════════ RESPONSIVE ═══════════════════════════ */
@media(min-width:1280px){:root{--sw:224px}}
@media(min-width:1024px) and (max-width:1279px){:root{--sw:200px}html{font-size:13px}.kg{grid-template-columns:repeat(5,1fr)}.kg.kg-4{grid-template-columns:repeat(4,1fr)}}
@media(min-width:900px) and (max-width:1023px){
  :root{--sw:186px}html{font-size:12.5px}
  .kg{grid-template-columns:repeat(3,1fr)}.kg.kg-4{grid-template-columns:repeat(3,1fr)}.cg2,.cg3{grid-template-columns:1fr}
  .fgrid{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:900px){
  .kg{grid-template-columns:repeat(2,1fr)}
  .kg.kg-4{grid-template-columns:repeat(2,1fr)}
  .cg2,.cg3{grid-template-columns:1fr}
  .fgrid{grid-template-columns:repeat(2,1fr)}
  .wo-summary-row{grid-template-columns:repeat(3,1fr)}
  .exercise-row-form{grid-template-columns:1fr;gap:6px;padding:10px;background:var(--bg1);border-radius:var(--r8);margin-bottom:10px}
  .exercise-row-rm{width:100%;height:32px}
  .seg-body-row{grid-template-columns:1fr}
  .bodytype-grid{gap:6px}
  .bodytype-cell{padding:10px 6px;font-size:10.5px}
  .prog-metrics-grid{grid-template-columns:repeat(3,1fr)}
  .bm-grid{grid-template-columns:repeat(3,1fr)}
  .wt-grid{grid-template-columns:1fr}
  #sb{transform:translateX(-100%);transition:transform 0.22s cubic-bezier(0.4,0,0.2,1),width 0.25s ease;width:var(--sw)!important}
  #sb.open{transform:translateX(0)}
  #main{margin-left:0!important}
  body.sb-is-collapsed #main{margin-left:0!important}
  .tb-hamburger{display:block}
  .sb-collapse-btn{display:none}
}
@media(max-width:640px){
  html{font-size:13px}
  :root{--r12:10px;--r16:12px;--th:48px}
  #pc{padding:14px 14px 32px}
  .ph-title{font-size:15px}
  .ph-sub{font-size:11px}
  .kg{grid-template-columns:1fr 1fr;gap:8px}
  .kg.kg-4{grid-template-columns:1fr 1fr}
  .kc{padding:11px}
  .kc-val{font-size:16px}
  .cc{padding:12px}
  .cc-body canvas{max-height:180px}
  .fgrid{grid-template-columns:1fr 1fr;gap:10px}
  .input-mode-tabs{flex-direction:column}
  .mode-tab{max-width:none}
  .tb-title{font-size:13px}
  .tb-meta{display:none}
  table{font-size:11px}
  .wo-summary-row{grid-template-columns:repeat(2,1fr)}
  .wo-tabs,.settings-tabs{overflow-x:auto;flex-wrap:nowrap}
  .wo-tab,.settings-tab{white-space:nowrap;padding:9px 12px;font-size:12px}
  .te-gauges{gap:14px}
  .te-gauge svg{width:90px}
  .brc-header{padding:14px 16px}
  .brc-header-title{font-size:14px}
  .bodytype-grid{grid-template-columns:repeat(3,1fr)}
  .qi-fields,.qi-extra-fields{grid-template-columns:repeat(3,1fr)}
  .qi-input{font-size:18px;padding:10px 8px}
  .prog-metrics-grid{grid-template-columns:repeat(2,1fr)}
  .prog-card{padding:14px 16px}
  .bm-grid{grid-template-columns:repeat(2,1fr)}
  .wt-grid{grid-template-columns:1fr}

  /* Riwayat Harian di layar sempit — kolom mana yang keliatan sekarang dikontrol USER lewat
     tombol "🔧 Kolom" (Round 82, lihat .hist-col-* di bawah + applyHistColumnVisibility() di
     shared.js), bukan hardcode nth-child kayak sebelumnya. Default barunya (HIST_DEFAULT_VISIBLE_COLS)
     udah dipilih supaya muat di layar sempit tanpa scroll kanan-kanan — sisanya cuma penyesuaian
     ukuran teks/padding biar makin lega di layar kecil, gak ngatur visibility kolom lagi di sini. */
  .hist-data-table th,.hist-data-table td{padding:8px 2px;font-size:11px}
  .hist-data-table [data-col="dot"]{padding-left:6px;padding-right:0}
  #sec-history .badge{padding:3px 5px;font-size:11px}
  #sec-history .hist-status-label{display:none}
  #sec-history .hist-date-full{display:none}
  #sec-history .hist-date-short{display:inline}
  #sec-history .hist-analyze-ico{font-size:10px}
}
