
  /* SATU sumber kebenaran palet (dulu ADA DUA blok :root -- basis biru di
     sini + override hijau-emas ~700 baris di bawah; yang aktif selalu yang
     kedua, tapi keberadaan dua blok bikin nilai "meleset" gampang lolos.
     Sudah di-merge: nilai final = tema hijau-emas). */
  :root{
    --bg:#06110F; --panel:#0B1714; --panel2:#101F1B; --elev:#142721;
    --line:#213832; --line-soft:#172924;
    --gold:#C79A2A; --gold-soft:rgba(199,154,42,.12); --gold-dim:rgba(199,154,42,.48);
    --text:#F2EFE7; --muted:#9AA69F; --faint:#66736C;
    --bull:#2FB57E; --bear:#D65A4A; --neutral:#6E8178; --radius:8px;
    --accent:var(--gold); --green:var(--bull); --red:var(--bear);
    --fg:var(--text); --text2:var(--muted);
    /* sistem shadow berlapis (ambient jauh + contact dekat) supaya elemen
       terasa "terangkat" dari background, bukan cuma garis 1px flat */
    --shadow-inset-top:0 1px 0 rgba(255,255,255,.035) inset;
    --shadow-xs:0 1px 2px rgba(0,0,0,.3);
    --shadow-sm:0 2px 8px -2px rgba(0,0,0,.4), 0 1px 2px rgba(0,0,0,.3);
    --shadow-md:0 10px 24px -8px rgba(0,0,0,.5), 0 3px 8px -3px rgba(0,0,0,.35);
    --shadow-lg:0 22px 46px -14px rgba(0,0,0,.6), 0 8px 18px -8px rgba(0,0,0,.4);
    --ease-premium:cubic-bezier(.2,.7,.2,1);
  }
  :root[data-theme="light"]{
    --bg:#F4F8F5; --panel:#FFFFFF; --panel2:#EEF4F0; --elev:#F8FBF9;
    --line:#D6E1DA; --line-soft:#E6EEE9;
    --text:#17241D; --muted:#506259; --faint:#78877E;
    --gold:#A87812; --gold-soft:rgba(168,120,18,.11); --gold-dim:rgba(168,120,18,.43);
    --bull:#168454; --bear:#C5473C; --neutral:#6F8177;
    --shadow-inset-top:0 1px 0 rgba(255,255,255,.8) inset;
    --shadow-xs:0 1px 2px rgba(23,36,29,.08);
    --shadow-sm:0 3px 10px -4px rgba(23,36,29,.14),0 1px 2px rgba(23,36,29,.08);
    --shadow-md:0 12px 28px -12px rgba(23,36,29,.18),0 3px 8px -4px rgba(23,36,29,.1);
    --shadow-lg:0 22px 46px -18px rgba(23,36,29,.23),0 8px 18px -10px rgba(23,36,29,.13);
  }
  :root[data-theme="light"] header{background:rgba(248,252,249,.88);box-shadow:0 8px 24px -12px rgba(23,36,29,.18)}
  :root[data-theme="light"] .nav-dd,:root[data-theme="light"] .notif-panel{background:rgba(255,255,255,.94)}
  :root[data-theme="light"] .ticker-marquee,:root[data-theme="light"] .news-marquee{background:#EAF2ED}
  :root[data-theme="light"] .rs-research-hero,:root[data-theme="light"] .analysis-score-card,:root[data-theme="light"] .decision-card,:root[data-theme="light"] .chart-panel #chart,:root[data-theme="light"] .risk-item,:root[data-theme="light"] .audit-note,:root[data-theme="light"] .home-search input,:root[data-theme="light"] .home-quick button{background:#FFFFFF}
  :root[data-theme="light"] p.insight,:root[data-theme="light"] .case-card ul,:root[data-theme="light"] .audit-note,:root[data-theme="light"] .risk-item{color:var(--text)}
  :root[data-theme="light"] .site-footer{background:linear-gradient(to bottom,#EEF4F0,#E4EEE8);box-shadow:0 -20px 40px -20px rgba(23,36,29,.16)}
  :root[data-theme="light"] .site-footer .footer-disclaimer{background:#E4EEE8;border-top-color:rgba(23,36,29,.08)}
  :root[data-theme="light"] #landingHero{background:#F4F8F5}
  :root[data-theme="light"] .landing-bg::after{background:linear-gradient(to top,#F4F8F5 0%,transparent 100%)}
  :root[data-theme="light"] .landing-nav{background:rgba(248,252,249,.82)}
  :root[data-theme="light"] .landing-preview-frame,:root[data-theme="light"] .landing-mock-card{background:rgba(255,255,255,.72);border-color:rgba(23,36,29,.1)}
  *{box-sizing:border-box}
  html{scroll-behavior:smooth}
  body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,system-ui,sans-serif;
    line-height:1.55;overflow-x:hidden;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
    font-feature-settings:"tnum" 1;}
    /* CATATAN safe-area: body SENGAJA TIDAK memberi padding-top safe-area lagi.
       Dulu body DAN header sama-sama pakai env(safe-area-inset-top) -> di
       iPhone ber-notch offset dihitung DUA KALI (gap kosong besar di atas
       header, laporan user). Sekarang HANYA header (sticky, top:0) yang
       memegang safe-area; landing hero & drawer punya penanganannya sendiri. */
  a{color:var(--gold);text-decoration:none}
  .wrap{max-width:1120px;margin:0 auto;padding:0 22px}
  ::selection{background:rgba(199,154,42,.32);color:#fff}

  /* nav */
  header{position:sticky;top:0;z-index:30;border-bottom:1px solid var(--line);
    background:rgba(6,17,15,.72);backdrop-filter:blur(16px) saturate(140%);
    box-shadow:0 8px 24px -12px rgba(0,0,0,.6);
    /* iOS PWA: geser header turun supaya tidak ketimpa status bar */
    padding-top:env(safe-area-inset-top,0)}
  .nav{display:flex;align-items:center;gap:8px;padding:13px 0}
  .brand{font-family:"Space Grotesk";font-weight:700;letter-spacing:.04em;font-size:16px;
    color:var(--text);margin-right:18px;white-space:nowrap;display:inline-flex;align-items:center}
  .brand i{display:inline-block;width:5px;height:5px;background:var(--gold);border-radius:1px;margin:0 6px;transform:translateY(-1px)}
  .brand sup{font-family:"JetBrains Mono";font-size:9px;font-weight:700;letter-spacing:.12em;color:var(--gold);
    border:1px solid var(--gold-dim);border-radius:3px;padding:1px 4px;margin-left:9px;top:-1px}
  /* ===== AKSES AKUN GRATIS ===== */
  /* Konten terminal tidak ditampilkan sebelum sesi server tervalidasi.
     Ini pelengkap middleware server (yang benar-benar mengunci API), bukan
     satu-satunya pengaman di browser. */
  body.access-locked{overflow:hidden}
  body.access-locked > *:not(#accessGate):not(#accessAdminPanel):not(script){display:none!important}
  #accessGate{display:none;position:fixed;inset:0;z-index:100001;overflow-y:auto;box-sizing:border-box;background:
    radial-gradient(circle at 18% 18%,rgba(199,154,42,.17),transparent 32%),
    radial-gradient(circle at 82% 88%,rgba(47,181,126,.12),transparent 34%),var(--bg);padding:28px 20px}
  body.access-locked #accessGate{display:flex;align-items:flex-start;justify-content:center}
  .access-card{width:min(100%,460px);margin:auto 0;background:color-mix(in srgb,var(--panel) 92%,transparent);border:1px solid var(--line);border-radius:18px;padding:30px;box-shadow:var(--shadow-lg);position:relative;overflow:hidden}
  .access-card:before{content:"";position:absolute;inset:0 0 auto;height:3px;background:linear-gradient(90deg,var(--gold),var(--bull));opacity:.9}
  .access-brand{display:flex;align-items:center;gap:10px;font:700 18px "Space Grotesk",sans-serif;letter-spacing:.04em}
  .access-brand img{width:35px;height:35px;object-fit:contain}.access-kicker{font:700 10px "JetBrains Mono",monospace;color:var(--gold);letter-spacing:1.5px;text-transform:uppercase;margin:24px 0 7px}
  .access-card h1{font:700 clamp(27px,5vw,35px) "Space Grotesk",sans-serif;line-height:1.08;margin:0 0 10px}.access-card p{margin:0;color:var(--muted);font-size:13px;line-height:1.65}
  .access-tabs{display:flex;gap:6px;padding:5px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;margin:24px 0 16px}.access-tabs button{flex:1;border:0;background:transparent;color:var(--muted);padding:9px;border-radius:7px;font:600 13px Inter,sans-serif;cursor:pointer}.access-tabs button.active{color:var(--text);background:var(--elev);box-shadow:var(--shadow-xs)}
  .access-form{display:grid;gap:14px}.access-form[hidden]{display:none}.access-form label{display:grid;gap:6px;color:var(--muted);font-size:12px;font-weight:600;line-height:1.45}.access-form input,.access-form textarea{box-sizing:border-box;width:100%;background:var(--elev);border:1px solid var(--line);border-radius:9px;padding:12px 13px;color:var(--text);font:14px Inter,sans-serif;outline:none}.access-form input:-webkit-autofill,.access-form input:-webkit-autofill:hover,.access-form input:-webkit-autofill:focus{-webkit-text-fill-color:var(--text);-webkit-box-shadow:0 0 0 1000px var(--elev) inset;caret-color:var(--text)}.access-form textarea{min-height:76px;resize:vertical;line-height:1.45}.access-form input:focus,.access-form textarea:focus{border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-soft)}.access-form input[type=file]{padding:9px;background:transparent;font-size:12px}.access-submit{border:0;border-radius:9px;padding:13px 14px;background:linear-gradient(135deg,var(--gold),#9f7314);color:#fff;font:700 13px Inter,sans-serif;cursor:pointer;margin-top:3px}.access-submit:disabled{opacity:.6;cursor:wait}.access-note{margin-top:18px!important;font-size:11px!important}.access-msg{min-height:19px;margin-top:14px!important;font-size:12px!important}.access-msg.err{color:var(--bear)}.access-msg.ok{color:var(--bull)}
  /* Langkah bergabung di formulir daftar. Dibuat MENONJOL karena inilah yang
     sebelumnya hilang: formulirnya menuntut bukti anggota tanpa memberi jalan
     untuk menjadi anggota, jadi orang yang belum masuk grup menemui jalan
     buntu dan tidak jadi mendaftar sama sekali. */
  .access-step{display:flex;gap:10px;align-items:flex-start;padding:12px 13px;
    border:1px solid var(--gold);border-radius:9px;background:var(--gold-soft)}
  .access-step b{display:block;color:var(--text);font-size:12.5px;margin-bottom:3px}
  .access-step a{color:var(--gold);font-weight:700;font-size:13px;text-decoration:none}
  .access-step a:hover{text-decoration:underline}
  .access-step p{margin:5px 0 0;color:var(--muted);font-size:11px;line-height:1.45}
  .access-step-no{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
    width:18px;height:18px;border-radius:50%;background:var(--gold);color:#fff;
    font:700 10.5px Inter,sans-serif}
  .access-account-btn{border:1px solid var(--line);background:var(--panel2);color:var(--text);border-radius:7px;padding:7px 9px;font:600 11px Inter,sans-serif;cursor:pointer;white-space:nowrap}.access-account-btn[hidden]{display:none}.access-admin-badge{display:inline-grid;place-items:center;min-width:16px;height:16px;margin-left:5px;padding:0 4px;border-radius:999px;background:var(--bear);color:#fff;font-size:9px;line-height:1}.access-account-btn.access-has-new .access-admin-badge{animation:access-pending-pulse 1s ease-in-out 2}@keyframes access-pending-pulse{50%{transform:scale(1.35);box-shadow:0 0 0 6px rgba(214,90,74,.2)}}.profile-avatar-row{display:flex;align-items:center;gap:13px;padding:10px 0 2px}.profile-avatar-preview{width:58px;height:58px;border-radius:50%;border:1px solid var(--line);object-fit:cover;background:var(--elev)}.profile-avatar-empty{display:grid;place-items:center;font:700 19px "Space Grotesk",sans-serif;color:var(--gold)}.profile-file-note{font-size:11px;color:var(--muted);margin:0}.access-history-title{margin:18px 0 4px;font-size:12px;color:var(--muted)}.access-status{display:inline-block;margin-top:4px;font-size:10px}.access-status.approved{color:var(--bull)}.access-status.rejected{color:var(--bear)}.access-proof-link{display:block;width:max-content;margin-top:4px;font-size:10px;color:var(--gold);text-decoration:underline}
  #accessAdminPanel{display:none;position:fixed;inset:0;z-index:100002;background:rgba(0,0,0,.52);padding:24px 20px;box-sizing:border-box;overflow:auto;align-items:flex-start;justify-content:center}.access-admin-card{width:min(100%,620px);max-height:calc(100dvh - 48px);box-sizing:border-box;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;flex:0 0 auto;background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-lg);padding:22px}.access-admin-head{display:flex;align-items:start;justify-content:space-between;gap:14px;margin-bottom:16px}.access-admin-head h2{margin:0;font:700 21px "Space Grotesk",sans-serif}.access-admin-head p{margin:4px 0 0;color:var(--muted);font-size:12px}.access-close{border:0;background:transparent;color:var(--muted);font-size:25px;line-height:1;cursor:pointer}.access-user-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-top:1px solid var(--line)}.access-user-row b{display:block;font-size:13px}.access-user-row span{color:var(--muted);font-size:11px}.access-user-actions{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}.access-user-actions button,.access-logout{border:1px solid var(--line);border-radius:7px;padding:7px 9px;background:var(--panel2);color:var(--text);font:600 11px Inter,sans-serif;cursor:pointer}.access-user-actions .approve{border-color:rgba(47,181,126,.55);color:var(--bull)}.access-user-actions .reject,.access-user-actions .delete-history{border-color:rgba(214,90,74,.45);color:var(--bear)}.access-logout{margin-top:16px;color:var(--bear)}
  .access-admin-tabs{display:flex;gap:6px;padding:5px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;margin:0 0 18px}.access-admin-tabs button{flex:1;border:0;border-radius:7px;padding:10px 9px;background:transparent;color:var(--muted);font:600 12px Inter,sans-serif;cursor:pointer}.access-admin-tabs button.active{color:var(--text);background:var(--elev);box-shadow:var(--shadow-xs)}.access-admin-section[hidden]{display:none}.access-admin-section-title{margin:0 0 12px;font:700 14px "Space Grotesk",sans-serif}.access-history-info{margin:16px 0 0;padding:10px 12px;border:1px solid var(--line);border-radius:8px;color:var(--muted);font-size:11px;line-height:1.5;background:var(--panel2)}
  @media(max-width:520px){#accessGate{padding:20px 14px 30px}.access-card{padding:24px 20px;border-radius:16px}.access-kicker{margin-top:20px}.access-tabs{margin:20px 0 18px}.access-form{gap:16px}.access-form input,.access-form textarea{padding:13px}.access-submit{padding:14px}.access-account-btn{font-size:0;padding:8px}.access-account-btn:after{content:"Akun";font-size:11px}#accessAdminPanel{padding:10px}.access-admin-card{max-height:calc(100dvh - 20px);padding:18px 16px;border-radius:12px}.access-user-row{align-items:flex-start;flex-direction:column;gap:9px}.access-user-actions{justify-content:flex-start}}
  /* Nav digrup jadi ~6 menu dropdown (dulu 18 tab flat sebaris yang meluber
     & kepotong di layar biasa). overflow HARUS visible -- panel dropdown
     absolute di dalam .tabs, overflow-x:auto lama akan MEMOTONGNYA. */
  .tabs{display:flex;gap:2px;flex:1;align-items:center;min-width:0;overflow:visible}
  .tab{background:transparent;border:0;color:var(--muted);padding:8px 13px;border-radius:7px;
    cursor:pointer;font-size:13.5px;font-weight:500;font-family:inherit;transition:color .15s,background .15s;position:relative;white-space:nowrap}
  .tab:hover{color:var(--text)}
  .tab.active{color:var(--text)}
  header .tab.active::after{content:"";position:absolute;left:13px;right:13px;bottom:0;height:2px;background:var(--gold)}
  .nav-group{position:relative}
  .nav-group-btn{display:inline-flex;align-items:center;gap:5px}
  .nav-caret{transition:transform .18s var(--ease-premium);opacity:.55}
  .nav-group:hover .nav-caret,.nav-group:focus-within .nav-caret{transform:rotate(180deg);opacity:1}
  .nav-dd{position:absolute;top:calc(100% + 9px);left:0;min-width:216px;z-index:40;
    background:rgba(13,25,21,.92);backdrop-filter:blur(18px) saturate(1.4);
    border:1px solid var(--line);border-radius:12px;padding:6px;
    box-shadow:var(--shadow-inset-top),var(--shadow-lg);
    display:flex;flex-direction:column;gap:1px;
    opacity:0;visibility:hidden;transform:translateY(6px) scale(.985);transform-origin:top left;
    transition:opacity .16s var(--ease-premium),transform .16s var(--ease-premium),visibility .16s}
  /* jembatan hover tak kasat mata menutup celah 9px antara tombol & panel,
     supaya kursor yang turun pelan tidak bikin dropdown kedip tutup */
  .nav-dd::before{content:"";position:absolute;top:-10px;left:0;right:0;height:10px}
  .nav-group:hover .nav-dd,.nav-group:focus-within .nav-dd{opacity:1;visibility:visible;transform:none}
  .nav-dd .tab{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:9px 12px;border-radius:8px;font-size:13px}
  .nav-dd .tab .icon{color:var(--faint);flex-shrink:0;transition:color .15s}
  .nav-dd .tab:hover{background:var(--gold-soft)}
  .nav-dd .tab:hover .icon{color:var(--gold)}
  .nav-dd .tab.active{color:var(--gold);background:rgba(199,154,42,.09)}
  .nav-dd .tab.active .icon{color:var(--gold)}
  .nav-dd .tab.active::after{display:none}
  /* pemisah grup terakhir sedikit ke kanan supaya tidak mepet tombol Cari */
  .nav-group:last-child .nav-dd{left:auto;right:0;transform-origin:top right}
  .kbd{display:flex;align-items:center;gap:7px;background:var(--panel);border:1px solid var(--line);
    color:var(--muted);padding:8px 12px;border-radius:8px;cursor:pointer;font-size:13px;transition:.15s;white-space:nowrap}
  .kbd:hover{border-color:var(--gold-dim);color:var(--text)}
  .kbd kbd{font-family:"JetBrains Mono";background:var(--panel2);border-radius:4px;padding:1px 6px;
    font-size:11px;border:1px solid var(--line)}

  /* Tombol back mengambang (mobile) -- lihat penjelasan lengkap di media
     query @768px (display:flex!important di situ yang benar2 menampilkannya
     di mobile; default di sini display:none supaya tak pernah nongol di
     desktop). Posisi bottom-left, TIDAK bentrok dgn .toast-stack yang di
     bottom-RIGHT. TANPA backdrop-filter (pelajaran lag kartu notif) --
     background solid pekat langsung. */
  .mob-back-btn{display:none;position:fixed;left:14px;
    bottom:calc(16px + env(safe-area-inset-bottom,0));z-index:32;
    width:44px;height:44px;border-radius:50%;align-items:center;justify-content:center;
    background:var(--panel);border:1px solid var(--line);color:var(--text);
    cursor:pointer;box-shadow:0 4px 16px -4px rgba(0,0,0,.5);transition:transform .12s,border-color .15s}
  .mob-back-btn:active{transform:scale(.92)}
  .mob-back-btn:hover{border-color:var(--gold-dim)}

  /* hamburger */
  .hbg{display:none;flex-direction:column;justify-content:center;align-items:center;gap:5px;
    width:40px;height:40px;background:var(--panel);border:1px solid var(--line);border-radius:9px;
    cursor:pointer;flex-shrink:0;transition:.15s}
  .hbg span{display:block;width:18px;height:2px;background:var(--text);border-radius:2px;transition:.2s}
  .hbg.on span:nth-child(1){transform:translateY(7px) rotate(45deg)}
  .hbg.on span:nth-child(2){opacity:0;transform:scaleX(0)}
  .hbg.on span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

  /* mobile drawer */
  .mob-drawer{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:29;
    background:rgba(5,8,15,.72);backdrop-filter:blur(4px)}
  .mob-drawer.on{display:block}
  .mob-menu{position:fixed;top:0;right:0;bottom:0;width:260px;
    background:var(--panel);border-left:1px solid var(--line);
    overflow-y:auto;padding:calc(64px + env(safe-area-inset-top,0)) 10px 20px;display:flex;flex-direction:column;gap:1px;
    transform:translateX(100%);transition:transform .25s cubic-bezier(.16,1,.3,1);z-index:31}
  .mob-drawer.on .mob-menu{transform:none}
  .mob-menu .tab{text-align:left;padding:11px 14px;border-radius:8px;font-size:14px;width:100%;
    color:var(--text);border:none;background:transparent;cursor:pointer;transition:.12s;
    display:flex;align-items:center;gap:11px}
  .mob-menu .tab .icon{color:var(--faint);flex-shrink:0}
  .mob-menu .tab:hover{background:var(--panel2)}
  .mob-menu .tab.active{background:rgba(199,154,42,.13);color:var(--gold)}
  .mob-menu .tab.active .icon{color:var(--gold)}
  .mob-divider{height:1px;background:var(--line);margin:6px 4px;flex-shrink:0}
  /* header seksi grup di drawer (ikut struktur NAV_GROUPS yang sama dgn desktop) */
  .mob-sec{font-size:10px;font-weight:700;letter-spacing:.14em;color:var(--faint);
    text-transform:uppercase;padding:14px 14px 5px;flex-shrink:0}
  .mob-theme{margin:4px 4px 6px!important;border:1px solid var(--gold-dim)!important;background:var(--gold-soft)!important;color:var(--text)!important}
  .mob-theme .icon{color:var(--gold)!important}

  @media(max-width:768px){
    .tabs,.kbd,.tour-btn{display:none!important}
    .hbg{display:flex}
    .nav{padding:10px 0;gap:6px}
    /* notif bell tetap tampil di sebelah hamburger di mobile */
    .notif-btn{
      display:inline-flex!important;
      flex-shrink:0;
      position:relative;
      z-index:35;
      pointer-events:auto;
      margin-left:auto; /* dorong ke sisi kanan */
    }
    .hbg{order:100;flex-shrink:0;margin-left:0}
    /* brand di mobile: shrink supaya tidak mendorong tombol keluar */
    .brand{font-size:13px;margin-right:0;flex-shrink:0}
    /* PERF mobile (laporan user "masih ngelag ngelag" -- ronde 1 cuma
       nangkep <header>, MASIH ada backdrop-filter lain yang sama-sama
       GPU-blur tiap frame/animasi di HP: panel notifikasi (persis yang
       kefoto user saat lapor lag ini), search Ctrl+K, tour onboarding,
       header landing page. Semua diganti bg solid pekat -- tampilan nyaris
       sama, jauh lebih ringan). !important WAJIB -- rule aslinya (mis.
       .notif-panel didefinisikan ratusan baris di BAWAH blok ini, spesifisitas
       SAMA) menang di cascade kalau tidak dipaksa, TERBUKTI lewat verifikasi
       browser (backdrop-filter masih 'blur(18px)' walau media query ini
       sudah match sebelum !important ditambahkan). */
    header,.landing-nav{backdrop-filter:none!important;-webkit-backdrop-filter:none!important;background:rgba(6,17,15,.95)!important}
    .mob-drawer{backdrop-filter:none!important;-webkit-backdrop-filter:none!important;background:rgba(5,8,15,.88)!important}
    .notif-panel{backdrop-filter:none!important;-webkit-backdrop-filter:none!important;background:#0e1a16!important}
    .cmdk,.tourk{backdrop-filter:none!important;-webkit-backdrop-filter:none!important;background:rgba(5,9,16,.92)!important}
    /* Tombol back mengambang -- permintaan user langsung: "tambahkan klik
       balik ke halaman sebelumnya di mobile". SPA ini SUDAH terhubung ke
       browser history (pushState/popstate, lihat route()), jadi hardware
       back Android seharusnya sudah jalan -- TAPI begitu app di-Add to
       Home Screen sbg PWA (dibutuhkan utk Web Push), Safari iOS di mode
       standalone KEHILANGAN gesture swipe-back sepenuhnya (chrome browser
       tidak ada) -- affordance klik di layar jadi wajib, bukan sekadar
       nice-to-have. Muncul HANYA di mobile (desktop punya tab nav yang
       jelas + tombol back browser asli) & HANYA saat bukan di Beranda
       (lihat _applyRoute -- toggle hidden di situ).*/
    .mob-back-btn{display:flex!important}
  }

  @media(max-width:768px){
    :root[data-theme="light"] header,:root[data-theme="light"] .landing-nav{background:rgba(248,252,249,.97)!important}
    :root[data-theme="light"] .mob-drawer,:root[data-theme="light"] .cmdk,:root[data-theme="light"] .tourk{background:rgba(23,36,29,.24)!important}
    :root[data-theme="light"] .notif-panel{background:#FFFFFF!important}
  }

  main{padding:26px 0 60px;animation:fadeUp .4s ease}
  @keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
  /* Cross-fade antar tab (lihat _applyRoute): view LAMA fade-out sebentar
     di tempat (masih dlm flow dokumen, bukan overlap posisi absolute --
     dianggap cukup utk kesan "halus", tidak perlu kerumitan overlay),
     BARU display-nya ditukar, lalu view BARU fade-in. Sebelumnya cuma
     instant swap (view lama hilang & baru muncul di tick yang sama). */
  .view{display:none}
  .view.on{display:block}
  .view.on.view-enter{animation:fadeUp .32s var(--ease-premium)}
  .view.view-exit{animation:viewOut .12s var(--ease-premium) forwards}
  @keyframes viewOut{to{opacity:0;transform:translateY(-4px)}}

  .panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px 22px;
    box-shadow:var(--shadow-inset-top), var(--shadow-sm)}
  section{margin:14px 0}
  .eyebrow{display:flex;align-items:center;gap:9px;font-size:11px;letter-spacing:.16em;text-transform:uppercase;
    color:var(--muted);margin:0 0 15px;font-weight:600}
  .eyebrow::before{content:"";width:14px;height:2px;background:var(--gold);border-radius:1px;flex:none}
  .muted{color:var(--muted)}

  /* hero */
  .hero{display:grid;grid-template-columns:auto 1fr;gap:26px;align-items:center}
  .scorewrap{text-align:center;min-width:130px}
  .score{font-family:"Space Grotesk";font-weight:700;font-size:74px;line-height:.92;color:var(--text);letter-spacing:-.03em;font-feature-settings:"tnum" 1}
  .score small{font-size:20px;color:var(--faint);letter-spacing:0}
  .gaugetrack{height:4px;background:var(--panel2);border-radius:2px;margin-top:12px;overflow:hidden}
  .gaugefill{height:100%;width:0;background:linear-gradient(90deg,var(--bear),var(--gold),var(--bull));
    transition:width 1s cubic-bezier(.2,.7,.2,1);position:relative;overflow:hidden}
  /* Shimmer: kilau halus lewat berkala di atas gauge/confluence "hero" (skor
     Analisis, confluence bull/bear/netral) -- SENGAJA cuma di elemen tunggal
     yang menonjol per halaman, BUKAN di setiap minibar tabel (bisa 20+
     instance sekaligus di satu tabel -> ramai/norak, bukan "hidup"). */
  .gaugefill::after,.cbar i::after{content:"";position:absolute;inset:0;
    background:linear-gradient(100deg,transparent 35%,rgba(255,255,255,.45) 50%,transparent 65%);
    transform:translateX(-120%);animation:shimmerSweep 3.2s ease-in-out infinite}
  @keyframes shimmerSweep{0%,40%{transform:translateX(-120%)}70%,100%{transform:translateX(120%)}}
  .ticker{font-family:"Space Grotesk";font-weight:700;font-size:34px;letter-spacing:-.02em}
  .rating{display:inline-block;margin-top:6px;font-weight:600;font-size:13px;padding:5px 12px;
    border-radius:999px;border:1px solid var(--line)}
  .pricerow{font-family:"JetBrains Mono";font-size:14px;margin-top:9px;color:var(--muted)}
  .up{color:var(--bull)}.down{color:var(--bear)}
  .confluence{margin-top:16px;max-width:520px}
  .cbar{display:flex;height:13px;border-radius:7px;overflow:hidden;border:1px solid var(--line);background:var(--panel2)}
  .cbar i{display:block;height:100%;width:0;transition:width .8s cubic-bezier(.2,.7,.2,1);position:relative;overflow:hidden}
  .clabels{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);
    margin-top:7px;font-family:"JetBrains Mono"}

  .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1px;
    background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden}
  .cell{background:var(--panel);padding:14px 16px}
  .cell .k{font-size:12px;color:var(--muted);margin-bottom:4px}
  .cell .v{font-family:"JetBrains Mono";font-weight:500;font-size:16px}

  p.insight{color:#d2dbeb;margin:0}
  .empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:11px;padding:34px 20px;text-align:center;color:var(--muted)}
  .empty-state .icon{opacity:.45}
  .empty-state p{margin:0;font-size:13px;line-height:1.6;max-width:360px}
  .chips{display:flex;flex-wrap:wrap;gap:9px;margin-top:14px}
  .chip{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:5px 11px;
    font-size:12px;font-family:"JetBrains Mono"}

  #chart,#ihsgChart{width:100%;height:380px;border-radius:12px;overflow:hidden;
    border:1px solid var(--line);background:var(--panel);box-shadow:var(--shadow-inset-top), var(--shadow-md)}

  .btn{background:linear-gradient(180deg,#DCB14A,var(--gold) 60%,#B58A20);color:#15100A;border:0;padding:11px 18px;border-radius:8px;
    font-weight:600;cursor:pointer;font-size:14px;font-family:inherit;transition:transform .18s var(--ease-premium),box-shadow .18s var(--ease-premium),filter .15s;display:inline-block;letter-spacing:.01em;
    box-shadow:0 1px 0 rgba(255,255,255,.22) inset,0 1px 2px rgba(0,0,0,.3)}
  .btn:hover{filter:brightness(1.07);transform:translateY(-2px);box-shadow:0 10px 22px -8px rgba(199,154,42,.4), 0 2px 6px rgba(0,0,0,.3)}
  .btn:active{transform:translateY(0) scale(.98);box-shadow:0 1px 2px rgba(0,0,0,.3)}
  .btn.ghost{background:transparent;color:var(--text);border:1px solid var(--line);font-weight:500;box-shadow:none}
  .btn.ghost:hover{border-color:var(--gold-dim);background:var(--panel2);box-shadow:var(--shadow-sm)}
  .btn.ghost:active{transform:translateY(0) scale(.98)}

  /* news (legacy, kept for stock-specific inline news) */
  .news a.item{display:block;padding:14px 0;border-bottom:1px solid var(--line);color:var(--text)}
  .news a.item:last-child{border-bottom:0}.news a.item:hover{padding-left:6px;transition:.15s}
  .news .src{color:var(--muted);font-size:12px}
  .sig{font-family:"JetBrains Mono";font-size:12px;color:var(--gold);margin-top:3px}

  /* ---- TERMINAL BERITA ---- */
  .news-bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;
    padding:11px 16px;background:var(--panel);border:1px solid var(--line);border-radius:12px;margin-bottom:12px}
  .news-src-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px;padding:2px 0}
  .news-src-chip{background:var(--panel2);border:1px solid var(--line);color:var(--muted);border-radius:20px;
    padding:5px 12px;font-size:11.5px;cursor:pointer;transition:.15s;font-family:inherit;font-weight:600;white-space:nowrap}
  .news-src-chip:hover{color:var(--text);border-color:var(--gold-dim)}
  .news-src-chip.on{background:rgba(199,154,42,.13);border-color:var(--gold);color:var(--gold)}
  .news-headline-card{display:block;background:var(--panel);border:1px solid var(--line);border-radius:14px;
    padding:22px 24px;margin-bottom:12px;color:var(--text);text-decoration:none;transition:.18s;position:relative;overflow:hidden}
  .news-headline-card:hover{border-color:var(--gold);box-shadow:0 6px 30px rgba(0,0,0,.35)}
  .news-headline-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--news-src-color,var(--gold))}
  .news-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:10px;margin-bottom:12px}
  .news-card{display:block;background:var(--panel);border:1px solid var(--line);border-radius:12px;
    padding:15px 16px;color:var(--text);text-decoration:none;transition:.18s;position:relative;overflow:hidden}
  .news-card:hover{border-color:rgba(199,154,42,.45);box-shadow:0 4px 20px rgba(0,0,0,.28);transform:translateY(-1px)}
  .news-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--news-src-color,var(--gold))}
  .news-list-wrap{background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-bottom:12px}
  .news-list-item{display:flex;align-items:flex-start;gap:12px;padding:11px 16px;
    border-bottom:1px solid var(--line);color:var(--text);text-decoration:none;transition:.12s}
  .news-list-item:last-child{border-bottom:none}
  .news-list-item:hover{background:var(--panel2)}
  .news-src-badge{display:inline-block;font-size:9.5px;font-weight:700;padding:2px 7px;border-radius:4px;
    letter-spacing:.04em;white-space:nowrap;flex-shrink:0;font-family:Inter,sans-serif}
  .news-time{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted);white-space:nowrap}
  .news-emiten-tag{display:inline-block;background:rgba(199,154,42,.1);border:1px solid rgba(199,154,42,.25);
    color:var(--gold);font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:4px;font-family:'JetBrains Mono',monospace;cursor:pointer}
  .news-emiten-tag:hover{background:rgba(199,154,42,.22)}
  .news-src-search{background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:9px;
    padding:7px 12px;font-size:13px;font-family:inherit;outline:none;transition:.15s;min-width:0;width:180px}
  .news-src-search:focus{border-color:var(--gold)}
  @media(max-width:640px){.news-grid{grid-template-columns:1fr}.news-headline-card{padding:16px 18px}
    .news-bar{gap:8px}.news-src-search{width:130px}}

  /* compare */
  .ctable{width:100%;border-collapse:collapse;font-size:14px}
  .ctable th{text-align:left;color:var(--faint);font-weight:600;font-size:10.5px;
    text-transform:uppercase;letter-spacing:.09em;
    padding:10px 12px;border-bottom:1px solid var(--line)}
  .ctable td{padding:10px 12px;border-bottom:1px solid var(--line);font-family:"JetBrains Mono";transition:background .15s var(--ease-premium), box-shadow .15s var(--ease-premium)}
  .ctable tbody tr:nth-child(even) td{background:rgba(255,255,255,.018)}
  .ctable tr:hover td{background:var(--panel2)}
  .ctable .tk{font-family:"Space Grotesk";font-weight:700;font-size:16px}
  .tk-row{display:inline-flex;align-items:center;gap:7px}
  .minibar{height:6px;width:90px;background:var(--panel2);border-radius:4px;overflow:hidden;display:inline-block;vertical-align:middle;margin-right:8px}
  .minibar i{display:block;height:100%}

  /* ihsg */
  .ihsg-head{display:flex;flex-wrap:wrap;gap:16px;align-items:baseline;margin-bottom:6px}
  .ihsg-head .big{font-family:"Space Grotesk";font-weight:700;font-size:24px}
  .edge-good{color:var(--bull)}.edge-warn{color:var(--bear)}

  /* states */
  .hint{color:var(--muted);font-size:14px;padding:70px 0;text-align:center}
  .hint b{color:var(--text)} .hint .big{font-family:"Space Grotesk";font-size:26px;color:var(--text);display:block;margin-bottom:10px}
  .err{background:rgba(224,86,107,.1);border:1px solid rgba(224,86,107,.4);color:#ffd9df;
    padding:15px 17px;border-radius:11px;margin:18px 0}
  .skel{position:relative;overflow:hidden;background:var(--panel)}
  .skel::after{content:"";position:absolute;inset:0;transform:translateX(-100%);
    background:linear-gradient(90deg,transparent,rgba(255,255,255,.05),transparent);animation:sh 1.2s infinite}
  @keyframes sh{100%{transform:translateX(100%)}}
  .loadbar{height:64px;border-radius:12px;margin:8px 0}

  /* command palette */
  .cmdk{position:fixed;inset:0;z-index:50;display:none;align-items:flex-start;justify-content:center;
    background:rgba(5,10,18,.6);backdrop-filter:blur(4px);padding-top:14vh}
  .cmdk.on{display:flex;animation:fadeUp .2s ease}
  .cmdbox{width:min(560px,92vw);background:var(--panel);border:1px solid var(--gold-dim);
    border-radius:16px;overflow:hidden;box-shadow:var(--shadow-lg), 0 30px 80px rgba(0,0,0,.5)}
  .cmdbox input{width:100%;background:transparent;border:0;color:var(--text);padding:20px 22px;
    font-size:18px;font-family:"JetBrains Mono";text-transform:uppercase;letter-spacing:.06em;outline:none}
  .cmdhint{padding:10px 22px 16px;color:var(--muted);font-size:12px;border-top:1px solid var(--line)}
  .cmdhint b{color:var(--gold)}
  .quick{display:flex;flex-wrap:wrap;gap:8px;padding:0 22px 18px}
  .quick button{background:var(--panel2);border:1px solid var(--line);color:var(--text);
    border-radius:8px;padding:7px 12px;cursor:pointer;font-family:"JetBrains Mono";font-size:13px;
    transition:transform .15s var(--ease-premium),box-shadow .15s var(--ease-premium),border-color .15s}
  .quick button:hover{border-color:var(--gold);transform:translateY(-1px);box-shadow:var(--shadow-sm)}
  .quick button:active{transform:translateY(0)}

  footer{border-top:1px solid var(--line);color:var(--muted);font-size:12px;padding:24px 0}
  @media(max-width:560px){.hero{grid-template-columns:1fr}.score{font-size:54px}#chart,#ihsgChart{height:300px}}
  .usel{background:var(--panel2);border:1px solid var(--line);color:var(--text);padding:10px 13px;border-radius:9px;font-family:inherit;font-size:13px}
  .fld{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--muted)}
  .fld input{background:var(--panel2);border:1px solid var(--line);color:var(--text);padding:10px 13px;border-radius:9px;font-family:"JetBrains Mono";font-size:14px;width:140px}
  .fld input:focus{outline:2px solid var(--gold);outline-offset:0}
  .fld textarea{background:var(--panel2);border:1px solid var(--line);color:var(--text);padding:10px 13px;border-radius:9px;font-family:inherit;font-size:14px;width:100%;box-sizing:border-box;resize:vertical;min-height:90px}
  .fld textarea:focus{outline:2px solid var(--gold);outline-offset:0}
  .tkr-link{color:var(--gold);font-weight:700;cursor:pointer;text-decoration:underline;text-decoration-color:rgba(199,154,42,.4)}
  .tkr-link:hover{text-decoration-color:var(--gold)}
  .forum-vote-btn{background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:7px;padding:4px 10px;font-size:11.5px;cursor:pointer;display:inline-flex;align-items:center;gap:5px;font-family:inherit}
  .forum-vote-btn:hover{border-color:var(--gold)}
  .forum-vote-btn[disabled]{color:var(--gold);border-color:var(--gold)66;cursor:default;opacity:.85}
  .forum-best{border-color:var(--gold)66!important;box-shadow:0 0 0 1px rgba(199,154,42,.3)}
  /* Forum — denyut komunitas + kartu thread yang lebih hidup */
  .forum-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:12px}
  .forum-stat{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:12px 14px;display:flex;align-items:center;gap:11px;transition:border-color .15s}
  .forum-stat:hover{border-color:var(--gold-dim)}
  .forum-stat .fs-ic{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;background:var(--gold-soft);color:var(--gold);flex-shrink:0}
  .forum-stat .fs-val{font-family:"Space Grotesk";font-weight:700;font-size:21px;line-height:1;color:var(--text)}
  .forum-stat .fs-lbl{font-size:11px;color:var(--muted);margin-top:3px}
  .forum-card{position:relative;overflow:hidden;transition:transform .15s var(--ease-premium),border-color .15s,box-shadow .15s}
  .forum-card:hover{transform:translateY(-2px);border-color:var(--gold-dim);box-shadow:var(--shadow-sm)}
  .forum-card .fc-accent{position:absolute;left:0;top:0;bottom:0;width:3px}
  .forum-snippet{color:var(--muted);font-size:12.5px;line-height:1.5;margin-top:5px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .forum-status{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:20px;white-space:nowrap}
  .forum-status.answered{color:var(--bull);background:rgba(47,181,126,.12);border:1px solid rgba(47,181,126,.28)}
  .forum-status.pending{color:var(--muted);background:var(--panel);border:1px solid var(--line)}
  .forum-metric{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--muted)}
  /* Entry mode badges (audit sinyal) */
  .entry-mode{display:inline-flex;align-items:center;gap:3px;font-size:9.5px;font-weight:700;padding:2px 7px;border-radius:4px;white-space:nowrap;letter-spacing:.02em}
  .entry-mode.agresif{color:#2FB57E;background:rgba(47,181,126,.12);border:1px solid rgba(47,181,126,.25)}
  .entry-mode.aman{color:var(--gold);background:rgba(199,154,42,.10);border:1px solid rgba(199,154,42,.22)}
  .bigval{font-family:"JetBrains Mono";font-weight:700;font-size:34px;line-height:1}
  /* sector tags (warna per sektor, gaya pill) */
  .sectag{display:inline-block;padding:3px 9px;border-radius:6px;font-size:11px;font-weight:600;
    font-family:Inter;white-space:nowrap;border:1px solid rgba(255,255,255,.08)}

  /* market status strip */
  .mstrip{display:flex;align-items:center;gap:18px;padding:8px 0;flex-wrap:wrap;font-size:12.5px;
    border-bottom:1px solid var(--line);background:var(--panel)}
  .mstrip .dot{width:6px;height:6px;border-radius:50%;display:inline-block;margin-right:7px}
  .mstrip .mi{display:flex;align-items:center;gap:7px;font-family:"JetBrains Mono";color:var(--faint);
    text-transform:uppercase;letter-spacing:.04em;font-size:11px}
  .mstrip .mi b{color:var(--muted);font-weight:500}
  .mstrip .mv{font-family:"JetBrains Mono";font-weight:700;letter-spacing:0;color:var(--text);font-size:13px}

  /* ticker marquee -- strip harga saham auto-scroll di bawah mstrip */
  .ticker-marquee{overflow:hidden;white-space:nowrap;border-bottom:1px solid var(--line);background:#07110D}
  .ticker-track{display:inline-flex;align-items:center;width:max-content;animation:tickerScroll 60s linear infinite}
  .ticker-marquee:hover .ticker-track{animation-play-state:paused}
  @media(prefers-reduced-motion:reduce){.ticker-track{animation:none!important;overflow-x:auto}}
  @keyframes tickerScroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}
  /* Saat aplikasi tidak terlihat, SELURUH animasi dihentikan. Pita
     berjalan tanpa henti membangunkan compositor terus-menerus tanpa
     ada yang menontonnya; di aplikasi layar-utama yang jarang benar-
     benar ditutup, itu berjalan berjam-jam. */
  html.anim-berhenti *,html.anim-berhenti *::before,html.anim-berhenti *::after{
    animation-play-state:paused!important}
  .ticker-item{display:inline-flex;align-items:center;gap:7px;padding:8px 20px;font-family:'JetBrains Mono',monospace;
    font-size:12px;color:var(--faint);cursor:pointer;flex-shrink:0}
  .ticker-item b{color:var(--text);font-family:'Space Grotesk',sans-serif;font-weight:700;letter-spacing:.02em}
  .news-marquee{background:#050c0b;border-bottom:1px solid var(--line)}
  .news-ticker-item{display:inline-flex;align-items:center;gap:12px;padding:8px 24px;font-size:12px;color:var(--muted);cursor:pointer;flex-shrink:0;transition:color .2s}
  .news-ticker-item span.source{font-family:'Space Grotesk',sans-serif;font-size:11px;font-weight:700;color:var(--gold);text-transform:uppercase;letter-spacing:1px}
  .news-ticker-item:hover{color:var(--text)}

  /* ===== ANIMASI ===== */

  /* 1. Panel: hover lift + shadow glow */
  .panel{transition:border-color .18s, box-shadow .18s, transform .18s}
  .panel:hover{border-color:rgba(199,154,42,.32);box-shadow:0 4px 24px rgba(0,0,0,.35),0 0 0 1px rgba(199,154,42,.08) inset}
  .ctable tbody tr{transition:background .12s}

  /* 2. Cell: subtle lift on hover */
  .cell{transition:transform .18s ease, box-shadow .18s ease, border-color .18s}
  .cell:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,.28)}

  /* 3. Chip: pop + glow on hover */
  .chip{transition:background .15s, border-color .15s, transform .15s, box-shadow .15s}
  .chip:hover{transform:translateY(-1px);box-shadow:0 3px 10px rgba(0,0,0,.2)}
  .chip.active{box-shadow:0 0 0 1px var(--gold)}

  /* 4. Fade-in stagger untuk dynamic panels */
  @keyframes panelIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
  .panel-anim{animation:panelIn .32s ease backwards}

  /* 5. Number counter flash saat selesai */
  @keyframes numPop{0%{transform:scale(1)}50%{transform:scale(1.08)}100%{transform:scale(1)}}
  .num-pop{animation:numPop .25s ease}

  /* 6. SVG equity curve draw */
  @keyframes btDrawLine{to{stroke-dashoffset:0}}

  /* 7. Tab active indicator slide */
  .tab{transition:color .15s, background .15s}
  header .tab.active::after{transition:left .2s ease, right .2s ease}

  /* 8. Btn: shimmer pulse saat loading */
  @keyframes btnPulse{0%,100%{box-shadow:0 0 0 0 rgba(199,154,42,.5)}50%{box-shadow:0 0 0 6px rgba(199,154,42,0)}}
  .btn-loading{animation:btnPulse .9s ease infinite}
  @keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}

  /* 9. Tabel row fade-in stagger */
  @keyframes rowIn{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:none}}
  .row-anim{animation:rowIn .22s ease backwards}

  /* 10. Ripple pada klik btn */
  .btn{position:relative;overflow:hidden}
  @keyframes ripple{from{transform:scale(0);opacity:.5}to{transform:scale(4);opacity:0}}
  .ripple-el{position:absolute;border-radius:50%;background:rgba(255,255,255,.35);pointer-events:none;animation:ripple .5s ease-out forwards}

  /* 11. Ikon SVG (lihat fungsi icon()) -- ikut warna teks pemanggil */
  .icon{display:inline-block;vertical-align:-3px;flex:none}
  /* Micro-interaction per JENIS ikon (nama ikon jadi class via icon-${name},
     lihat fungsi icon()) -- gerakan kecil pas hover TOMBOL/KARTU induknya,
     bukan animasi sendiri terus-menerus (idle) supaya tidak ramai. */
  .icon-refresh{transition:transform .5s var(--ease-premium)}
  .btn:hover .icon-refresh{transform:rotate(180deg)}
  .icon-trending-up,.icon-trending-down{transition:transform .25s var(--ease-premium)}
  .decision-card:hover .icon-trending-up,.chip:hover .icon-trending-up{transform:translateY(-2px)}
  .decision-card:hover .icon-trending-down,.chip:hover .icon-trending-down{transform:translateY(2px)}
  .icon-flame{transition:transform .3s var(--ease-premium)}
  .chip:hover .icon-flame,.edu-chip:hover .icon-flame{transform:scale(1.15)}
  .icon-target{transition:transform .3s var(--ease-premium)}
  .decision-card:hover .icon-target{transform:rotate(90deg)}
  .icon-bell{transition:transform .35s var(--ease-premium)}
  .watch-btn:hover .icon-bell{transform:rotate(-15deg)}

  /* phase ribbon */
  .ribbon{display:flex;height:26px;border-radius:7px;overflow:hidden;margin-top:12px;border:1px solid var(--line)}
  .ribbon i{display:flex;align-items:center;justify-content:center;font-size:10px;font-family:"JetBrains Mono";
    color:#0a1322;font-weight:700;min-width:0;overflow:hidden;white-space:nowrap;cursor:default}
  .rlegend{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;font-size:11px;color:var(--muted);font-family:"JetBrains Mono"}
  .rlegend span{display:flex;align-items:center;gap:5px}.rlegend b{width:10px;height:10px;border-radius:2px;display:inline-block}

  /* heatmap */
  .hmsector{margin-bottom:18px}
  .hmhead{font-size:12px;letter-spacing:.08em;color:var(--muted);text-transform:uppercase;margin:0 0 8px;
    display:flex;justify-content:space-between;font-family:"JetBrains Mono"}
  .hmgrid{display:flex;flex-wrap:wrap;gap:4px}
  .tile{border-radius:6px;padding:8px 10px;min-width:74px;flex:1 1 auto;cursor:pointer;
    border:1px solid rgba(255,255,255,.05);transition:transform .12s var(--ease-premium),box-shadow .12s var(--ease-premium),border-color .12s}
  /* transform di-hover TIDAK diset di sini -- elemen .tile ikut dikelola oleh
     modul tilt-3d (lihat script di bawah) yang menulis transform lengkap
     (tilt+scale) langsung lewat inline style; kalau transform juga diset di
     sini, keduanya akan rebutan/flicker karena sama-sama menimpa 1 properti */
  .tile:hover{border-color:var(--gold);box-shadow:var(--shadow-md)}
  .tile .tk{font-family:"Space Grotesk";font-weight:700;font-size:14px;color:#fff;display:flex;align-items:center;gap:5px}
  .tile .tk img{box-shadow:0 0 0 1.5px rgba(255,255,255,.5)}
  .tile .ch{font-family:"JetBrains Mono";font-size:12px;color:rgba(255,255,255,.85)}
  .hmscale{display:flex;align-items:center;gap:2px;margin:6px 0 18px;font-family:"JetBrains Mono";font-size:11px;color:var(--muted)}
  .hmscale i{height:8px;width:34px;display:inline-block}

/* ---- BERANDA / HOME ---- */
.home-hero{padding:38px 0 22px;text-align:center}
.home-title{font-family:'Space Grotesk',sans-serif;font-size:clamp(26px,4vw,42px);font-weight:700;line-height:1.12;margin:6px auto 10px;max-width:760px;letter-spacing:-.5px}
.home-sub{color:var(--muted);max-width:600px;margin:0 auto 22px;font-size:15px;line-height:1.6}
.home-search{display:flex;gap:10px;max-width:520px;margin:0 auto;flex-wrap:wrap}
.home-search input{flex:1;min-width:220px;background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:12px;padding:14px 16px;font-size:15px;font-family:'JetBrains Mono',monospace;text-transform:uppercase}
.home-search input:focus{border-color:var(--gold)}
.home-search input:focus:not(:focus-visible){outline:none}
.home-search .btn{padding:14px 22px;font-size:15px}
.home-quick{display:flex;gap:7px;flex-wrap:wrap;justify-content:center;margin-top:14px}
.home-quick button{background:var(--panel2);border:1px solid var(--line);color:var(--muted);border-radius:20px;padding:5px 13px;font-size:12px;font-family:'JetBrains Mono',monospace;cursor:pointer;transition:.15s}
.home-quick button:hover{color:var(--gold);border-color:var(--gold)}
.home-pulse{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:18px}
.pulse-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:18px;min-height:120px;
  transition:transform .2s var(--ease-premium), box-shadow .2s var(--ease-premium), border-color .15s;box-shadow:var(--shadow-xs)}
/* transform di-hover dikelola modul tilt-3d (JS), bukan di sini -- lihat .tile utk alasan sama */
.pulse-card:hover{border-color:var(--gold-dim);box-shadow:var(--shadow-md)}
.pc-label{font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.pc-big{font-family:'Space Grotesk',sans-serif;font-size:24px;font-weight:700;line-height:1.1}
.pc-tag{display:inline-block;margin-top:10px;font-size:11px;border:1px solid;border-radius:20px;padding:2px 10px;font-weight:600}
.pc-bar{display:flex;height:6px;border-radius:3px;overflow:hidden;margin-top:10px}.pc-bar i{display:block}
.home-cols{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.movers-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.mv-h{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:13px;margin-bottom:6px}
.ctable.mini td{padding:6px 4px;font-size:13px;border-bottom:1px solid var(--line);cursor:pointer}
.ctable.mini tr:hover td{background:var(--panel2)}
.home-foot{text-align:center;color:var(--muted);font-size:12px;margin:22px auto 8px;max-width:640px;line-height:1.6}
/* ---- Kepemilikan / Pemegang Saham ---- */
.holder-bar-wrap{height:8px;background:var(--line);border-radius:4px;overflow:hidden;flex:1;min-width:60px}
.holder-bar-fill{height:100%;border-radius:4px;transition:width .4s ease}
.holder-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}
.holder-row:last-child{border-bottom:none}
.holder-name{flex:1;min-width:0;font-size:12.5px;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:480px){.holder-chg{display:none}.holder-row{gap:6px}.holder-name{font-size:11.5px}}
.holder-pct{font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:700;min-width:42px;text-align:right}
.holder-chg{font-size:11px;min-width:48px;text-align:right;font-family:'JetBrains Mono',monospace}
.holder-badge{font-size:10px;padding:2px 7px;border-radius:4px;font-weight:700;white-space:nowrap;text-transform:uppercase;letter-spacing:.04em}
.holder-chip{padding:5px 13px;background:var(--panel2);border:1px solid var(--line);border-radius:20px;font-size:12px;font-weight:700;cursor:pointer;color:var(--gold);font-family:'Space Grotesk',sans-serif}
.holder-chip:hover{border-color:var(--gold);background:rgba(234,179,8,.08)}
.pct-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}
.pct-row:last-child{border-bottom:none}
.pct-label{font-size:12.5px;color:var(--muted);flex:1}
.pct-val{font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;min-width:52px;text-align:right}
/* Tabel mobile — sembunyikan kolom non-esensial di layar sempit */
@media(max-width:600px){.hide-xs{display:none!important}}
/* Screener row: di mobile tampilkan ticker lebih besar */
@media(max-width:600px){.ctable .tk{font-size:14px}.ctable td{padding:9px 8px;font-size:12px}.ctable th{padding:8px;font-size:11px}}
/* Smart Money mobile */
.sm-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
@media(max-width:640px){.sm-grid{grid-template-columns:1fr}}
/* Makro card grid — 1 kolom di layar sangat sempit */
@media(max-width:400px){.macro-grid{grid-template-columns:1fr 1fr!important}}
@media(max-width:480px){.sm-home-grid{grid-template-columns:1fr!important}}
.sm-row{display:flex;align-items:center;padding:10px 2px;border-bottom:1px solid var(--line);gap:8px;cursor:pointer;transition:background .12s var(--ease-premium)}
.sm-row:last-child{border-bottom:none}
.sm-row:hover,.sm-row:active{background:var(--panel2);border-radius:8px}
.sm-ticker{font-weight:700;font-family:'Space Grotesk',sans-serif;font-size:14px;width:80px;flex:none;color:var(--text)}
.sm-grup{font-size:9px;font-weight:500;color:var(--muted);font-family:'Inter',sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:78px;margin-top:1px}
.sm-chg{font-family:'JetBrains Mono',monospace;font-size:12px;width:54px;text-align:right;flex:none}
.sm-bar-wrap{flex:1;min-width:0}
.sm-bar-bg{height:5px;background:var(--line);border-radius:3px}
.sm-bar-fill{height:100%;border-radius:3px}
.sm-vol-lbl{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);margin-top:3px}
.sm-badge{font-size:10.5px;border-radius:6px;padding:3px 8px;white-space:nowrap;flex:none;font-weight:600}
.sm-stale{font-size:9px;color:var(--muted);white-space:nowrap;flex:none;margin-left:4px;font-family:'JetBrains Mono',monospace}
.sm-panel-head{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;margin-bottom:10px}
.sm-empty{font-size:13px;color:var(--muted);padding:10px 0}
/* ---- X-15 Dashboard (IDXRadar-style) ---- */
.x15-live-tag{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;color:var(--bull);background:rgba(47,181,126,.08);padding:4px 10px;border-radius:20px;border:1px solid rgba(47,181,126,.15);white-space:nowrap}
.x15-live-dot{width:7px;height:7px;border-radius:50%;background:var(--bull);animation:liveRing 2s infinite;flex-shrink:0}
/* Ring hijau yang melebar & memudar (efek "ping" radar) -- lebih hidup drpd
   sekadar opacity pulse, dot-nya sendiri tetap solid/jelas terbaca "LIVE". */
@keyframes liveRing{0%{box-shadow:0 0 0 0 rgba(47,181,126,.55)}70%{box-shadow:0 0 0 7px rgba(47,181,126,0)}100%{box-shadow:0 0 0 0 rgba(47,181,126,0)}}
/* ---- Live price badge (dipakai di mstrip, Analisis, IHSG, Makro) ---- */
.live-badge{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:600;color:var(--bull);background:rgba(47,181,126,.08);padding:2px 8px;border-radius:20px;border:1px solid rgba(47,181,126,.15);white-space:nowrap;vertical-align:middle}
.live-badge .x15-live-dot{width:6px;height:6px}
.ma-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:3px;vertical-align:middle}
.x15-date-tabs-wrap{display:flex;gap:6px;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:3px;scrollbar-width:none}
.x15-date-tabs-wrap::-webkit-scrollbar{display:none}
.x15-date-tab{padding:5px 13px;border-radius:8px;border:1px solid var(--line);background:transparent;color:var(--muted);font-size:11px;font-weight:700;cursor:pointer;font-family:'JetBrains Mono',monospace;transition:all .15s;letter-spacing:.02em;white-space:nowrap;flex-shrink:0}
.x15-date-tab:hover{border-color:rgba(199,154,42,.45);color:var(--text)}
.x15-date-tab.active{background:var(--gold);color:#06110F;border-color:var(--gold)}
/* Akhir pekan: bursa libur, tidak mungkin ada filing -- diredupkan supaya
   user tidak mengira tanggal itu "kosong data" karena error. */
.x15-date-tab.wknd{opacity:.45;border-style:dashed}
.x15-date-tab.wknd.active{opacity:.8}
.x15-dash-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.x15-panel{padding:14px 16px;min-width:0}
.x15-top-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.x15-top-row{display:flex;align-items:center;gap:6px;padding:8px 6px;margin:0 -6px;border-radius:7px;border-bottom:1px solid var(--line-soft);transition:background .13s}
.x15-top-row:hover{background:rgba(255,255,255,.025)}
.x15-top-row:last-child{border-bottom:none}
.x15-top-ticker{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:13.5px;cursor:pointer;color:var(--text);min-width:44px;flex-shrink:0;transition:color .13s}
.x15-top-ticker:hover{color:var(--gold)}
/* aksen tepi kiri tipis warna sentimen di panel Top Akumulasi/Distribusi */
#pnl-top-aku{border-left:2px solid rgba(47,181,126,.4)}
#pnl-top-dis{border-left:2px solid rgba(214,90,74,.4)}
.x15-top-name{flex:1;font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.x15-top-chg{font-size:12.5px;font-weight:700;font-family:'JetBrains Mono',monospace;white-space:nowrap;min-width:50px;text-align:right}
.x15-top-kep{font-size:11px;color:var(--muted);font-family:'JetBrains Mono',monospace;white-space:nowrap;min-width:42px;text-align:right}
/* Audit Sinyal di layar kecil: anjuran & level masuk-lagi gampang bikin sel
   berdesakan, jadi diberi ruang sendiri dan tidak dipaksa satu baris. */
@media(max-width:600px){
  .ctable td{padding-top:9px;padding-bottom:9px;vertical-align:top}
  .ctable td>div{white-space:normal;line-height:1.35}
}
/* Kartu pola harmonic -- menggantikan tabel 7 kolom yang tidak muat di HP */
.harm-list{display:flex;flex-direction:column;gap:10px}
.harm-card{border:1px solid var(--line);border-radius:12px;padding:12px 14px;cursor:pointer;transition:border-color .15s}
.harm-card:hover{border-color:var(--gold)}
.harm-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.harm-tk{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:15px}
.harm-pola{font-size:10.5px;font-weight:700;border:1px solid;border-radius:5px;padding:2px 7px;white-space:nowrap}
.harm-potensi{margin-left:auto;font-weight:800;font-size:16px;text-align:right;line-height:1.1;white-space:nowrap}
.harm-potensi small{display:block;font-size:9px;font-weight:500;color:var(--muted)}
.harm-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px}
.harm-grid>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.harm-grid b{font-family:'JetBrains Mono',monospace;font-size:12.5px;overflow:hidden;text-overflow:ellipsis}
.harm-lbl{font-size:9.5px;color:var(--muted);letter-spacing:.02em}
.harm-kaki{margin-top:9px;padding-top:8px;border-top:1px solid var(--line-soft);font-size:10px;color:var(--faint)}
.harm-rasio{font-family:'JetBrains Mono',monospace}
/* Penanda versi di footer: cukup terbaca untuk dipotret, cukup redup
   untuk tidak mengganggu. */
.footer-ver{font-size:10.5px;color:var(--faint);letter-spacing:.04em;margin-top:6px}
/* Anjuran di tabel/kartu Audit Sinyal. Lencana satu kata supaya keputusannya
   terbaca dari sudut mata saat memindai daftar; rinciannya kecil di bawahnya.
   Ukuran baris sengaja tidak mengecil lagi dari 10px -- di bawah itu angka
   rupiah jadi tidak terbaca di layar HP, dan angka itulah yang dicari. */
.sig-aksi{margin-top:5px}
.sig-badge{display:inline-block;font:700 9.5px Inter,sans-serif;letter-spacing:.06em;
  border:1px solid;border-radius:4px;padding:2px 6px;white-space:nowrap}
.sig-aksi-baris{margin-top:4px;font-size:10px;line-height:1.5;color:var(--muted);
  font-family:'JetBrains Mono',monospace}
.sig-aksi-baris div{overflow-wrap:anywhere}
/* Badge irisan dua saringan: lolos Minervini DAN punya pola harmonic. */
.harm-conf{font-size:10px;font-weight:700;color:var(--gold);border:1px solid var(--gold);
  border-radius:5px;padding:2px 6px;white-space:nowrap}
/* Rencana entry dari geometri pola. Dipisah dari .harm-grid (yang berisi
   FAKTA pola) supaya batas antara "apa yang terbaca di chart" dan "apa yang
   disarankan" tetap kelihatan -- keduanya tidak boleh terbaca setara. */
.harm-plan{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px;
  padding-top:9px;border-top:1px dashed var(--line-soft)}
.harm-plan>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.harm-plan b{font-family:'JetBrains Mono',monospace;font-size:12px;overflow:hidden;text-overflow:ellipsis}
.harm-plan small{font-weight:500;color:var(--muted)}
@media(max-width:520px){
  .harm-grid{grid-template-columns:repeat(2,1fr);gap:9px 12px}
  /* Target berisi tiga harga sekaligus; dua kolom membuatnya terpotong,
     jadi rencananya menumpuk satu kolom di layar sempit. */
  .harm-plan{grid-template-columns:1fr;gap:7px}
  .harm-plan>div{flex-direction:row;justify-content:space-between;align-items:baseline;gap:10px}
  .harm-plan .harm-lbl{flex:0 0 auto}
  .harm-plan b{text-align:right}
  .harm-potensi{font-size:15px}
  .harm-rasio{display:block;margin-top:3px}
}
/* Akumulasi Berulang dot-line */
.berulang-card{padding:10px 0;border-bottom:1px solid var(--line-soft)}
.berulang-card:last-child{border-bottom:none;padding-bottom:0}
.berulang-hdr{display:flex;align-items:center;gap:7px;margin-bottom:3px;overflow:hidden}
.berulang-ticker{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:14px;cursor:pointer;color:var(--text);flex-shrink:0}
.berulang-ticker:hover{color:var(--gold)}
.berulang-days{font-size:9px;font-weight:700;padding:2px 7px;border-radius:5px;background:rgba(47,181,126,.15);color:var(--bull);white-space:nowrap;flex-shrink:0}
.berulang-holder{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
.berulang-tl{display:flex;align-items:center;margin:7px 0 3px}
.b-dot{width:10px;height:10px;border-radius:50%;background:var(--panel2);border:2px solid var(--line);flex-shrink:0;z-index:1}
.b-dot.on{background:var(--bull);border-color:var(--bull)}
.b-line{flex:1;height:2px;background:var(--line)}
.b-line.on{background:rgba(47,181,126,.4)}
.berulang-range{display:flex;justify-content:space-between;font-size:10px;color:var(--faint);font-family:'JetBrains Mono',monospace}
.berulang-range .end{color:var(--bull);font-weight:700}
/* Satu baris per pemegang -- persentase milik orang berbeda tidak boleh
   disandingkan jadi satu rentang (dulu "12,00% → 5,05%" untuk dua orang
   berbeda, terbaca seolah kepemilikannya anjlok). */
.berulang-holder-row{display:flex;align-items:center;gap:8px;margin-top:5px;font-size:11px;min-width:0}
.bh-nama{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
.bh-days{font-size:9px;color:var(--faint);white-space:nowrap;flex-shrink:0}
.bh-pct{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--faint);white-space:nowrap;flex-shrink:0}
.bh-pct b{color:var(--bull)}
.bh-arrow{color:var(--line);padding:0 1px}
@media(max-width:420px){.berulang-holder-row{flex-wrap:wrap;gap:4px}.bh-nama{flex:1 0 100%}}
/* ── Mobile overrides (selaras dengan breakpoint utama 768px) ── */
@media(max-width:768px){.x15-dash-grid{grid-template-columns:1fr;gap:8px}.x15-panel{padding:12px 13px}}
@media(max-width:768px){.x15-top-kep{display:none}.x15-col-kep{display:none}}
@media(max-width:420px){.b-dot{width:8px;height:8px}.berulang-ticker{font-size:13px}}
/* compat: old classes still used in loadHolders */
.x15-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:768px){.x15-grid{grid-template-columns:1fr}}
.x15-row{display:flex;align-items:center;padding:10px 0;border-bottom:1px solid var(--line);gap:8px}
.x15-row:last-child{border-bottom:none}
.x15-kode{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:14px;min-width:52px;color:var(--gold);cursor:pointer}
.x15-kode:hover{text-decoration:underline}
.x15-nama{flex:1;min-width:0;font-size:12px;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.x15-pct{font-family:'JetBrains Mono',monospace;font-size:11.5px;min-width:44px;text-align:right;color:var(--text2)}
.x15-chg{font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:700;min-width:54px;text-align:right}
.inner-tabs{display:flex;gap:4px;margin-bottom:14px;border-bottom:2px solid var(--line);padding-bottom:0}
.inner-tab{background:transparent;border:none;padding:9px 16px;font-size:13px;font-weight:600;color:var(--muted);cursor:pointer;font-family:inherit;border-bottom:2px solid transparent;margin-bottom:-2px;transition:.15s}
.inner-tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.date-nav{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.date-nav span{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:14px;color:var(--text);flex:1;text-align:center;min-width:120px}
.nav-btn{background:var(--panel2);border:1px solid var(--line);color:var(--text);padding:5px 12px;border-radius:8px;font-size:13px;cursor:pointer;font-family:inherit;transition:.12s}
.nav-btn:hover{border-color:var(--accent)}
/* ---- autocomplete (cmd palette + home) ---- */
.cmdresults{margin-top:10px;max-height:320px;overflow-y:auto;text-align:left}
.home-search{position:relative}
.home-sug{position:absolute;top:calc(100% + 6px);left:0;right:0;background:var(--panel);border:1px solid var(--line);border-radius:12px;max-height:340px;overflow-y:auto;z-index:40;text-align:left;box-shadow:0 12px 40px rgba(0,0,0,.4)}
.home-sug:empty{display:none}
.sugrow{display:flex;align-items:baseline;gap:10px;padding:10px 14px;cursor:pointer;border-bottom:1px solid var(--line);
  transition:background .12s var(--ease-premium),box-shadow .12s var(--ease-premium)}
.sugrow img{align-self:center}
.sugrow:last-child{border-bottom:none}
.sugrow:hover,.sugrow.sel{background:var(--panel2);box-shadow:inset 3px 0 0 var(--gold)}
.sugrow b{font-family:'JetBrains Mono',monospace;color:var(--gold);font-size:14px;min-width:62px}
.sugrow span{color:var(--muted);font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sugnone{padding:12px 14px;color:var(--muted);font-size:13px}
/* ---- edukasi / glosarium ---- */
.edu-cats{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:16px}
.edu-chip{background:var(--panel2);border:1px solid var(--line);color:var(--muted);border-radius:20px;padding:6px 14px;font-size:12px;cursor:pointer;transition:.15s;font-family:inherit}
.edu-chip:hover{color:var(--text)}
.edu-chip.on{background:var(--gold);color:#1a1205;border-color:var(--gold);font-weight:600}
.edu-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.edu-card{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:15px 16px;
  box-shadow:var(--shadow-xs);transition:transform .18s var(--ease-premium),box-shadow .18s var(--ease-premium),border-color .15s}
.edu-card:hover{border-color:var(--gold-dim);box-shadow:var(--shadow-sm);transform:translateY(-2px)}
.edu-term{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:15px;margin-bottom:7px}
.edu-abbr{font-family:'Inter',sans-serif;font-weight:400;font-size:12px;color:var(--muted)}
.edu-def{font-size:13.5px;line-height:1.6;color:var(--text)}
.edu-note{margin-top:9px;font-size:12px;line-height:1.55;color:var(--gold);background:rgba(199,154,42,.08);border-left:2px solid var(--gold);padding:7px 10px;border-radius:0 6px 6px 0;display:flex;align-items:flex-start;gap:6px}
.edu-note .icon{margin-top:2px;flex-shrink:0}
.watch-btn{display:inline-block;margin:6px 0;background:var(--panel2);border:1px solid var(--line);color:var(--muted);border-radius:20px;padding:6px 14px;font-size:12.5px;cursor:pointer;font-family:inherit;transition:transform .15s var(--ease-premium),box-shadow .15s var(--ease-premium),border-color .15s,color .15s}
.watch-btn:hover{border-color:var(--gold);color:var(--text);transform:translateY(-1px);box-shadow:var(--shadow-sm)}
.watch-btn:active{transform:translateY(0)}
.watch-btn.on{background:rgba(199,154,42,.14);border-color:var(--gold);color:var(--gold);font-weight:600}
/* ---- bandingkan side-by-side ---- */
.cmp-wrap{overflow-x:auto}
.cmp-table{min-width:100%}
.cmp-table th,.cmp-table td{text-align:center;padding:10px 12px;white-space:nowrap}
.cmp-table .cmp-label{text-align:left;color:var(--muted);font-size:13px;font-weight:500}
.cmp-table .cmp-h{cursor:pointer;font-family:'JetBrains Mono',monospace;color:var(--gold);font-size:15px}
.cmp-table .cmp-h:hover{text-decoration:underline}
.cmp-table tbody tr{border-top:1px solid var(--line)}
.cmp-best{background:rgba(199,154,42,.12);border-radius:6px;font-weight:700}
/* ---- tur singkat (onboarding) ---- */
.tour-btn{width:32px;height:32px;border-radius:50%;background:var(--panel2);border:1px solid var(--line);color:var(--muted);font-size:15px;font-weight:700;cursor:pointer;transition:.15s;flex-shrink:0}
.tour-btn:hover{border-color:var(--gold);color:var(--gold)}
.theme-btn{width:32px;height:32px;border-radius:50%;background:var(--panel2);border:1px solid var(--line);color:var(--muted);cursor:pointer;transition:.15s;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;padding:0}
.theme-btn:hover{border-color:var(--gold);color:var(--gold);transform:rotate(12deg)}
.theme-btn svg{width:16px;height:16px}
.tourk{position:fixed;inset:0;background:rgba(5,9,16,.75);backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;z-index:95;padding:20px}
.tourk.on{display:flex}
.tourbox{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:20px;width:min(430px,94vw);padding:34px 30px 26px;text-align:center;box-shadow:0 24px 70px rgba(0,0,0,.55)}
.tour-x{position:absolute;top:14px;right:16px;background:none;border:none;color:var(--muted);font-size:16px;cursor:pointer}
.tour-x:hover{color:var(--text)}
.tour-emoji{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:40px;line-height:1;letter-spacing:-.02em;color:var(--gold);margin-bottom:6px}
.tour-emoji::after{content:" / 04";font-size:18px;color:var(--faint);font-weight:500}
.tour-title{font-family:'Space Grotesk',sans-serif;font-size:23px;font-weight:700;margin:0 0 12px}
.tour-text{color:var(--muted);font-size:14.5px;line-height:1.65;margin:0 0 22px}
.tour-quick{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin:-10px 0 22px}
.tour-quick .chip{cursor:pointer;font-family:'Space Grotesk',sans-serif;font-weight:700}
.tour-dots{display:flex;gap:7px;justify-content:center;margin-bottom:22px}
.tour-dots span{width:8px;height:8px;border-radius:50%;background:var(--line);transition:.2s}
.tour-dots span.on{background:var(--gold);width:22px;border-radius:4px}
.tour-nav{display:flex;align-items:center;justify-content:space-between;gap:12px}
.tour-skip{background:none;border:none;color:var(--muted);font-size:14px;cursor:pointer;font-family:inherit}
.tour-skip:hover{color:var(--text)}
.tour-nav .btn{padding:11px 22px}
/* ---- POLES PROFESIONAL (additive, aman) ---- */
/* tab sub-mode (di dalam panel: Screener/Pasar/Sektor) lebih jelas saat aktif */
.panel .tab.active{background:rgba(199,154,42,.14);color:var(--gold);box-shadow:inset 0 0 0 1px rgba(199,154,42,.35)}
.panel .tab:hover:not(.active){background:var(--panel2);color:var(--text)}
/* umpan balik tekan tombol */
.btn:active{transform:translateY(0) scale(.98)}
.tab:active{transform:scale(.97)}
/* fokus keyboard yang jelas (aksesibilitas) */
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
/* seleksi teks bernuansa brand */
::selection{background:rgba(199,154,42,.32);color:#fff}
/* scrollbar gelap */
*{scrollbar-width:thin;scrollbar-color:#26344b transparent}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#2A423A;border-radius:8px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:#3B5A4E;background-clip:content-box}
/* kedalaman halus pada panel */
.panel{box-shadow:var(--shadow-inset-top), var(--shadow-sm)}
/* baris tabel yang bisa diklik: kursor + sorot konsisten + aksen kiri emas
   supaya baris terasa "terangkat" saat hover, bukan cuma ganti background flat.
   Pakai inset box-shadow (bukan transform) karena transform pada <tr> di tabel
   dengan border-collapse:collapse rawan bikin baris tumpang tindih. */
.ctable tbody tr[data-k],.ctable tbody tr[data-kode]{cursor:pointer;transition:background .15s var(--ease-premium)}
.ctable tbody tr[data-k]:hover td,.ctable tbody tr[data-kode]:hover td{background:var(--panel2);box-shadow:0 1px 8px -2px rgba(0,0,0,.4)}
.ctable tbody tr[data-k]:hover td:first-child,.ctable tbody tr[data-kode]:hover td:first-child{box-shadow:inset 3px 0 0 var(--gold), 0 1px 8px -2px rgba(0,0,0,.4)}
/* select konsisten saat fokus */
.usel:focus{border-color:var(--gold)}
.usel:focus:not(:focus-visible){outline:none}
html{scroll-behavior:smooth}
/* SATU-SATUNYA aturan prefers-reduced-motion di file ini (dulu ada 3,
   redundan & 2 di antaranya pakai animation:none!important -- itu
   MEMATIKAN event animationend sepenuhnya, padahal ripple cleanup (lihat
   .ripple-el) dan cross-fade tab (_applyRoute) SAMA-SAMA bergantung pada
   animationend utk beres-beres. Teknik .01ms di sini TETAP menjalankan
   animasinya (nyaris instan) jadi animationend tetap tertembak -- jangan
   diganti balik ke animation:none). */
@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto}}

/* ===== TOAST ===== */
.toast-stack{position:fixed;bottom:24px;right:24px;z-index:999;display:flex;flex-direction:column-reverse;gap:8px;pointer-events:none;max-width:320px}
.toast{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 16px;
  font-size:13.5px;opacity:0;transform:translateY(10px);transition:.25s cubic-bezier(.16,1,.3,1);
  pointer-events:all;box-shadow:0 8px 32px rgba(0,0,0,.55);display:flex;align-items:center;gap:10px;line-height:1.4}
.toast.show{opacity:1;transform:none}
.toast.ok{border-color:rgba(74,222,128,.35);background:rgba(14,30,20,.9)}
.toast.err{border-color:rgba(248,113,113,.35);background:rgba(30,14,14,.9)}
.toast.info{border-color:rgba(199,154,42,.35);background:rgba(28,22,10,.9)}
.toast-icon{font-size:16px;flex:none}
.toast.ok .toast-icon{color:var(--bull)}
.toast.err .toast-icon{color:var(--bear)}
.toast.info .toast-icon{color:var(--gold)}

@media(max-width:768px){
  .toast-stack{left:12px;right:12px;bottom:12px;max-width:100%}
}

/* ===== MOBILE RESPONSIVE (max 768px) ===== */
@media(max-width:768px){
  /* layout dasar */
  .wrap{padding:0 14px}
  main{padding:16px 0 70px}
  .panel{padding:14px 14px}


  /* Header: jangan paksa semua kontrol melewati tepi layar. Di HP, IDX dan
     toggle tema pindah ke menu; yang tersisa selalu muat dengan lega. */
  .nav{justify-content:space-between;gap:8px;min-width:0;flex-wrap:nowrap}
  .brand{margin-right:0;gap:7px;letter-spacing:.065em;font-size:12px;min-width:0}
  .brand-mark{width:30px;height:30px}
  .brand sup,.theme-btn{display:none!important}
  .access-account-btn{font-size:0;padding:8px 9px;min-width:0;flex-shrink:0}
  .access-account-btn:after{content:"Akun";font-size:11px}
  .hbg{width:38px;height:38px}

  /* Market strip satu baris yang bisa digeser. Inline style markup lama
     memakai flex-wrap, jadi !important mencegah status LIVE turun baris. */
  .mstrip{overflow-x:auto!important;-webkit-overflow-scrolling:touch}
  .mstrip .wrap{width:max-content!important;min-width:100%;padding:8px 14px!important;gap:12px!important;flex-wrap:nowrap!important;white-space:nowrap;scrollbar-width:none}
  .mstrip .wrap::-webkit-scrollbar{display:none}
  .mstrip .mi{font-size:10px}
  .mstrip .mv{font-size:12px}

  /* hero analisis */
  .hero{grid-template-columns:1fr;gap:14px;text-align:center}
  .scorewrap{min-width:unset}
  .score{font-size:56px}
  #chart,#ihsgChart{height:260px}
  .confluence{max-width:100%}

  /* grid sel data */
  .grid{grid-template-columns:repeat(2,1fr)}

  /* market strip — scroll horizontal */
  .mstrip .wrap{flex-wrap:nowrap;overflow-x:auto;gap:14px;padding-bottom:4px;scrollbar-width:none}
  .mstrip .wrap::-webkit-scrollbar{display:none}

  /* tabel — semua tabel bisa scroll */
  .ctable,.cmp-table,.ctable.mini{display:block;overflow-x:auto;white-space:nowrap}
  .ctable th,.ctable td{font-size:12px;padding:8px 10px}

  /* screener controls — stack vertical */
  #multiControls>div{flex-direction:column;align-items:stretch}
  #multiControls .usel,#multiControls input,#multiControls .btn{width:100%;box-sizing:border-box}
  #uSearch{max-width:100%!important}
  #customControls>div[style*="grid"]{grid-template-columns:1fr!important}

  /* backtest kondisi grid */
  #btCondGrid{grid-template-columns:1fr!important}

  /* holding period chips wrap */
  #btHoldChips{flex-wrap:wrap}

  /* risk / pivot */
  .fld input{width:100%;box-sizing:border-box}

  /* home */
  .home-hero{padding:22px 0 14px}
  .home-pulse{grid-template-columns:1fr}
  .home-cols{grid-template-columns:1fr}
  .movers-grid{grid-template-columns:1fr}
  .home-title{font-size:22px;letter-spacing:-.3px}
  .home-sub{font-size:14px}
  .home-search{flex-direction:column;gap:8px}
  .home-search input,.home-search .btn{width:100%;box-sizing:border-box}
  .home-search input{font-size:14px;padding:13px 14px}
  .home-quick button{font-size:11px;padding:4px 11px}

  /* heatmap tile lebih kecil */
  .tile{min-width:62px;padding:6px 7px}
  .tile .tk{font-size:12px}
  .tile .ch{font-size:11px}

  /* edu */
  .edu-grid{grid-template-columns:1fr}

  /* compare */
  .cmp-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}

  /* panel news */
  .news a.item{font-size:13px}


  /* button row — wrap & full width kalau sendirian */
  .chips{gap:6px}
  .btn{font-size:13px;padding:10px 14px}

  /* watchlist */
  .watch-btn{font-size:12px;padding:5px 11px}

  /* IHSG head stack */
  .ihsg-head{flex-direction:column;gap:6px}

  /* mstrip */
  .mstrip{overflow:hidden}

  /* === FITUR BARU: mobile overrides === */

  /* Preset chips */
  #presetChips{gap:5px!important}
  #presetChips .edu-chip{font-size:11px!important;padding:5px 9px!important}

  /* Sinyal Hari Ini */
  #homeSignals .home-cols{grid-template-columns:1fr!important}
  #homeSignals .pulse-card{min-width:unset!important}

  /* Technical Summary cards — sudah auto-fill, min 155px, aman di mobile */

  /* Valuasi: konsensus kartu 2 per baris, metode kartu 2 per baris */
  #fundBox div[style*="grid-template-columns:1fr 1fr"]{grid-template-columns:1fr 1fr!important}
  #fundBox div[style*="grid-template-columns:repeat(auto-fill,minmax(160px"]{grid-template-columns:1fr 1fr!important}
  #fundBox [style*="font-size:22px"]{font-size:16px!important}
  #fundBox [style*="font-size:24px"]{font-size:17px!important}

  /* Market Breadth cards */
  #v-pasar [style*="minmax(130px"]{grid-template-columns:1fr 1fr!important}
}

/* ===== RANAH SAHAM UI REFRESH: disciplined, not decorative =====
   (blok :root override yang dulu di sini sudah di-MERGE ke :root utama di
   atas file -- jangan tambah :root kedua lagi, satu sumber kebenaran.) */
body{
  background:
    linear-gradient(180deg,rgba(199,154,42,.035),transparent 260px),
    linear-gradient(90deg,rgba(255,255,255,.018) 1px,transparent 1px),
    linear-gradient(180deg,rgba(255,255,255,.014) 1px,transparent 1px),
    var(--bg);
  background-size:auto,48px 48px,48px 48px,auto;
}
header{background:rgba(6,17,15,.88);border-bottom-color:rgba(199,154,42,.18)}
.brand{gap:10px;letter-spacing:.12em}
.brand i{display:none}
.brand-mark{
  width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;
  flex:none;
}
.brand-mark img{width:100%;height:100%;object-fit:contain;display:block}
.panel,.pulse-card,.news-headline-card,.news-card,.news-list-wrap,.port-sum-card,.alert-row{
  border-radius:8px;
}
.panel:hover{border-color:rgba(199,154,42,.22);box-shadow:var(--shadow-inset-top), var(--shadow-md);transform:translateY(-2px)}
.tab{border-radius:6px}
.btn{border-radius:7px}
.btn:hover{filter:none;background:linear-gradient(180deg,#E5BC55,#D7A83A 60%,#BD9226)}
.btn.ghost:hover{background:rgba(199,154,42,.08);border-color:var(--gold-dim)}
.eyebrow{letter-spacing:.18em;color:#B8B0A0}
.eyebrow::before{background:var(--gold);width:18px}

.rs-research-hero{
  text-align:left;
  display:grid;
  grid-template-columns:minmax(0,1.2fr) minmax(280px,.8fr);
  gap:28px;
  align-items:end;
  padding:34px 0 24px;
  position:relative;
  overflow:hidden;
}
/* Watermark logo raksasa di background hero (permintaan user: "background
   kaya agak sepi" -- ditambah biar terisi + kesan "hidup") -- SENGAJA
   opacity SANGAT rendah & gerakan LAMBAT (siklus 24 detik) supaya jadi
   tekstur ambient, bukan elemen yang minta perhatian/norak. pointer-
   events:none supaya tidak mengganggu klik ke konten di atasnya. */
.rs-research-hero::before{
  content:"";
  position:absolute;
  top:50%; right:-6%;
  width:min(560px,60vw); height:min(560px,60vw);
  background:url('logo-mark.png') no-repeat center/contain;
  opacity:.07;
  transform:translateY(-50%) rotate(0deg);
  animation:heroLogoDrift 24s ease-in-out infinite;
  pointer-events:none;
  z-index:0;
}
.rs-research-hero>*{position:relative;z-index:1}
/* Aurora: dua glow radial (emas + hijau tipis) yang bergeser SANGAT pelan
   (26 detik, bolak-balik) -- kedalaman ambient yang hidup, bukan spotlight
   yang minta perhatian. Dimatikan total di prefers-reduced-motion. */
.rs-research-hero::after{
  content:"";position:absolute;top:-140px;left:-180px;width:720px;height:560px;
  background:
    radial-gradient(closest-side at 35% 40%,rgba(199,154,42,.10),transparent 70%),
    radial-gradient(closest-side at 75% 75%,rgba(47,181,126,.05),transparent 70%);
  pointer-events:none;z-index:0;
  animation:auroraDrift 26s ease-in-out infinite alternate;
}
@keyframes auroraDrift{
  from{transform:translate(0,0) scale(1);opacity:.9}
  to{transform:translate(70px,26px) scale(1.14);opacity:1}
}
@media(prefers-reduced-motion:reduce){.rs-research-hero::after{animation:none}}
@keyframes heroLogoDrift{
  0%,100%{transform:translateY(-50%) rotate(0deg) scale(1)}
  50%{transform:translateY(-54%) rotate(8deg) scale(1.06)}
}
@media(prefers-reduced-motion:reduce){.rs-research-hero::before{animation:none}}
.home-brandline{display:flex;align-items:center;gap:12px;margin-bottom:18px;color:var(--text);font-family:"Space Grotesk";font-weight:700;letter-spacing:.16em}
.home-brandline .rs-mark{width:46px;height:46px;display:inline-flex;align-items:center;justify-content:center;flex:none}
.home-brandline .rs-mark img{width:100%;height:100%;object-fit:contain;display:block}
.home-kicker{font-size:12px;color:var(--gold);letter-spacing:.22em;text-transform:uppercase;margin:0 0 8px;font-family:"JetBrains Mono";display:flex;align-items:center;gap:10px}
.home-kicker::before{content:"";width:26px;height:1px;background:linear-gradient(90deg,var(--gold),transparent);flex:none}
.rs-research-hero .home-title{margin:0 0 12px;max-width:760px;font-size:clamp(30px,5vw,58px);line-height:1.02;letter-spacing:-1px}
/* aksen gradient-text emas utk kata kunci judul -- satu titik "mahal",
   bukan seluruh judul (seluruh judul gradient = norak) */
.grad-gold{background:linear-gradient(105deg,#EFD083 0%,var(--gold) 48%,#8A6B14 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.rs-research-hero .home-sub{margin:0;max-width:690px;font-size:15px;color:#B9C3BD}
.home-search-card{
  background:linear-gradient(180deg,rgba(199,154,42,.055),transparent 55%),rgba(11,23,20,.82);
  border:1px solid rgba(199,154,42,.24);border-radius:12px;
  padding:18px;box-shadow:var(--shadow-inset-top),0 20px 48px -12px rgba(0,0,0,.5);
}
.home-search-title{font-family:"Space Grotesk";font-weight:700;font-size:16px;margin:0 0 10px;color:var(--text)}
.home-search{max-width:none;margin:0}
.home-search input{background:#07120F;border-color:rgba(199,154,42,.22);border-radius:7px}
.home-search input:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(199,154,42,.11)}
.home-quick{justify-content:flex-start}
.home-quick button{border-radius:6px;background:#0A1713;border-color:rgba(199,154,42,.18);color:#C7CEC8}
.home-section-label{display:flex;justify-content:space-between;align-items:center;margin:4px 0 10px;color:var(--muted);font-size:12px}
.home-section-label b{font-family:"Space Grotesk";font-size:15px;color:var(--text)}
.home-pulse,.home-cols{gap:12px}
.pulse-card{background:linear-gradient(180deg,rgba(255,255,255,.018),transparent),var(--panel);min-height:110px}
.pc-label{letter-spacing:.14em;color:#AEB8B1}
.pc-code{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:20px;border:1px solid rgba(199,154,42,.26);border-radius:5px;margin-right:7px;color:var(--gold);font-family:"JetBrains Mono";font-size:10px;letter-spacing:.06em}
.pc-tag{border-radius:6px}

.analysis-shell{
  background:linear-gradient(180deg,rgba(199,154,42,.06),rgba(199,154,42,.015)),var(--panel);
  border:1px solid rgba(199,154,42,.23);
  border-radius:8px;
  padding:22px;
  margin:0 0 14px;
}
.analysis-head{display:grid;grid-template-columns:minmax(0,1fr) 190px;gap:18px;align-items:start}
.analysis-title{font-family:"Space Grotesk";font-size:40px;line-height:1;font-weight:700;letter-spacing:0;margin:4px 0 8px}
.analysis-sub{color:#B9C3BD;font-size:14px;max-width:720px}
.analysis-score-card{border:1px solid var(--line);background:#07120F;border-radius:8px;padding:16px;text-align:center;
  box-shadow:var(--shadow-sm);transition:box-shadow .2s var(--ease-premium)}
.analysis-score-card .score{font-size:54px;color:var(--text)}
.analysis-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.analysis-actions .watch-btn{border-radius:7px;margin:0}
.decision-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:18px}
.decision-card{background:#07120F;border:1px solid var(--line);border-radius:8px;padding:13px 14px;min-width:0}
.decision-card .label{font-size:10px;text-transform:uppercase;letter-spacing:.13em;color:var(--muted);margin-bottom:6px}
.decision-card .value{font-family:"Space Grotesk";font-weight:700;font-size:20px;line-height:1.1;color:var(--text)}
.decision-card .sub{font-size:11px;color:var(--muted);margin-top:5px;line-height:1.35}
.level-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:8px;overflow:hidden;margin-top:14px}
.level-cell{background:var(--panel);padding:13px 14px}
.level-cell .k{font-size:10px;text-transform:uppercase;letter-spacing:.13em;color:var(--muted)}
.level-cell .v{font-family:"JetBrains Mono";font-weight:700;margin-top:4px}
.analysis-layout{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:14px;align-items:start}
.analysis-main,.analysis-side{min-width:0}
.analysis-side{display:flex;flex-direction:column;gap:14px}
.chart-panel #chart{height:430px;background:#07120F}
.chart-meta{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:10px;color:var(--muted);font-size:12px}
.thesis-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.case-card{border:1px solid var(--line);border-radius:8px;padding:15px;background:var(--panel2)}
.case-card h3{font-family:"Space Grotesk";font-size:17px;margin:0 0 10px}
.case-card ul{margin:0;padding-left:18px;color:#DCE4DE;font-size:13px;line-height:1.65}
.case-card li{margin:4px 0}
.case-bull h3{color:var(--bull)}.case-bear h3{color:var(--bear)}
.risk-list{display:flex;flex-direction:column;gap:8px}
.risk-item{border:1px solid var(--line);background:#07120F;border-radius:8px;padding:10px 12px;font-size:13px;color:#DCE4DE}
.audit-note{font-size:13px;color:#DCE4DE;line-height:1.6}
.audit-note b{color:var(--gold)}
.side-tool-stack{display:flex;flex-direction:column;gap:8px}
.side-tool-stack .btn{width:100%;text-align:center;justify-content:center;gap:7px}
.side-tool-stack .btn .icon,.analysis-main .btn.ghost .icon{flex:none}
.quickbadges .chip{border-radius:6px}
/* Hierarki visual Analisis (feedback user: halaman ini "flat", semua
   section berat visual yang sama). Tesis Cepat = kesimpulan inti (thesis),
   dikasih aksen gold tipis biar kebaca sebagai bagian paling penting utk
   diputuskan. Panel "quiet" = tools/deep-dive opsional (Tools Lanjutan,
   Fundamental, Insight Naratif, VWAP, SMC) -- dikecilkan bobotnya (tanpa
   shadow, background rata) supaya mata user default ke konten utama dulu. */
.panel-primary{background:linear-gradient(180deg,rgba(199,154,42,.045),transparent),var(--panel);border-color:rgba(199,154,42,.18)}
.panel-quiet{background:transparent;box-shadow:none;border-color:rgba(255,255,255,.055);padding:16px 18px}
.panel-quiet>.eyebrow{font-size:10px;margin-bottom:12px;opacity:.82}
.ma-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:13px}
.ma-chips .chip{font-family:'JetBrains Mono',monospace;font-size:11.5px}

/* Accordion utk sidebar Analisis (feedback: 5 panel "quiet" bertumpuk
   masih kerasa capek mata walau udah diredupkan -- digabung jadi satu
   panel, tiap section jadi baris yang di-klik utk expand, cuma 1 yang
   kebuka di satu waktu). max-height dibikin jauh lebih besar drpd
   konten riil (bukan diukur pas scrollHeight) SENGAJA -- supaya kalau
   isinya nambah belakangan (mis. tombol di dalam Tools Lanjutan
   menampilkan hasil fetch baru), body-nya tidak ke-clip; trade-off-nya
   animasi buka jadi terasa "cepat" drpd terukur presisi, itu wajar utk
   pola accordion max-height, bukan bug. */
.acc-item{border-bottom:1px solid var(--line)}
.acc-item:last-child{border-bottom:none}
.acc-header{display:flex;align-items:center;gap:10px;width:100%;background:none;border:0;
  padding:14px 0;cursor:pointer;color:inherit;font-family:inherit;text-align:left}
.acc-header .eyebrow{flex:1;margin:0}
.acc-chev{color:var(--muted);flex:none;transition:transform .25s var(--ease-premium)}
.acc-header.active .acc-chev{transform:rotate(180deg);color:var(--gold)}
.acc-body{max-height:0;overflow:hidden;transition:max-height .35s var(--ease-premium)}
.acc-body.open{max-height:2000px}
.acc-body-inner{padding-bottom:16px}

@media(max-width:900px){
  .rs-research-hero,.analysis-head,.analysis-layout{grid-template-columns:1fr}
  .analysis-score-card{text-align:left}
  .decision-grid,.level-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .analysis-title{font-size:34px}
}
@media(max-width:640px){
  /* Hero mobile dipadatkan (feedback: data pasar hidup ketutup, orang
     harus scroll lewatin hampir 1 layar penuh dulu sebelum lihat Market
     Pulse) -- sembunyikan paragraf deskripsi (murni copy, bukan fungsi)
     & separuh chip ticker contoh (8 -> 4), biar Market Pulse lebih cepat
     kelihatan tanpa buang search box atau fungsi apa pun. */
  .rs-research-hero{padding:18px 0 12px;gap:12px}
  .home-brandline{margin-bottom:10px}
  .rs-research-hero .home-title{font-size:27px;margin-bottom:8px}
  .rs-research-hero .home-sub{display:none}
  .rs-research-hero #homeQuick button:nth-child(n+5){display:none!important}
  .home-search-card{padding:13px}
  .analysis-shell{padding:16px}
  .analysis-title{font-size:30px}
  .decision-grid,.level-grid,.thesis-grid{grid-template-columns:1fr}
  .chart-panel #chart{height:320px}
  .rs-research-hero .home-brandline,
  .rs-research-hero .home-kicker { display: none; }
}

/* ---------- FOOTER ---------- */
.site-footer{border-top:1px solid rgba(199,154,42,0.15);margin-top:40px;background:linear-gradient(to bottom, var(--panel), #050c0b);box-shadow:0 -20px 40px -20px rgba(0,0,0,.6)}
.site-footer .footer-grid{display:grid;grid-template-columns:2fr 1fr 1fr 1.5fr;gap:40px;padding:48px 24px 40px}
.footer-brand .footer-logo{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.footer-brand .footer-logo img{width:32px;height:32px}
.footer-brand .footer-logo span{font-family:"Space Grotesk";font-weight:700;font-size:18px;letter-spacing:1px;color:var(--text)}
.footer-brand p{color:var(--muted);font-size:13.5px;line-height:1.7;max-width:320px}
.footer-social{display:flex;gap:12px;margin-top:20px}
.footer-social a{display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:8px;
  background:rgba(255,255,255,0.03);border:1px solid var(--line);color:var(--muted);
  transition:transform .2s var(--ease-premium),box-shadow .2s var(--ease-premium),color .2s,border-color .2s,background .2s}
.footer-social a:hover{color:var(--gold);border-color:var(--gold-dim);background:rgba(199,154,42,0.08);transform:translateY(-3px);box-shadow:0 6px 16px rgba(0,0,0,0.3)}
.footer-col b{display:block;font-size:12px;font-family:"Space Grotesk";letter-spacing:1.5px;text-transform:uppercase;color:var(--text);margin-bottom:18px}
.footer-col a,.footer-col .footer-note{display:flex;align-items:center;color:var(--muted);font-size:14px;text-decoration:none;margin-bottom:12px;cursor:pointer;transition:all .2s ease}
.footer-col a::before{content:"\2192";display:inline-block;opacity:0;transform:translateX(-10px);transition:all .2s ease;font-size:12px;margin-right:0;width:0;overflow:hidden;color:var(--gold)}
.footer-col a:hover{color:var(--text);transform:translateX(4px)}
.footer-col a:hover::before{opacity:1;transform:translateX(0);margin-right:8px;width:12px}
.footer-col .footer-divider{border-top:1px solid rgba(255,255,255,0.06);margin:18px 0}
.footer-col .footer-sub{font-size:11px;letter-spacing:1px;text-transform:uppercase;color:var(--faint);margin-bottom:10px}
.site-footer .footer-disclaimer{border-top:1px solid rgba(255,255,255,0.06);padding:24px;color:var(--faint);font-size:12px;line-height:1.6;text-align:center;background:#050c0b}
@media(max-width:640px){
  .site-footer .footer-grid{grid-template-columns:1fr;gap:32px;padding:32px 20px}
}

/* ===== ANIMASI: kartu tambahan yang belum kebagian hover (lihat "polish
   pass 1" di atas, ===== ANIMASI ===== dekat awal <style>) -- ditaruh di
   SINI (setelah blok override "RANAH SAHAM UI REFRESH" di atas) supaya
   TIDAK ke-override cascade-nya. */
.decision-card,.case-card,.berulang-card,.port-sum-card,.alert-row,.home-search-card{
  transition:transform .18s var(--ease-premium), box-shadow .18s var(--ease-premium), border-color .18s;
}
.decision-card:hover,.case-card:hover,.berulang-card:hover,.port-sum-card:hover,.alert-row:hover,.home-search-card:hover{
  transform:translateY(-2px);
  box-shadow:0 6px 20px rgba(0,0,0,.28);
  border-color:rgba(199,154,42,.32);
}
/* .analysis-score-card DIKECUALIKAN dari transform di atas -- kartu ini
   sudah dikelola efek tilt-3d berbasis JS (lihat listener pointermove
   ~line 1780-an) yang menulis style.transform inline; kalau CSS transform
   JUGA diset di sini, keduanya rebutan (sama persis catatan yang sudah
   ada utk .tile soal ini). */
.analysis-score-card{transition:box-shadow .18s var(--ease-premium), border-color .18s}
.analysis-score-card:hover{box-shadow:0 6px 20px rgba(0,0,0,.28);border-color:rgba(199,154,42,.32)}
/* Glow warna KONTEKSTUAL (permintaan user: "lebih colorful tapi ga norak")
   -- kartu yang jelas mewakili untung/rugi (Menang/Kalah, Naik/Turun) dapat
   glow HIJAU/MERAH saat hover, bukan selalu emas generik -- warnanya jadi
   informasi tambahan (nuansa hasilnya), bukan dekorasi acak. */
.decision-card.glow-bull:hover{box-shadow:0 6px 22px rgba(47,181,126,.22);border-color:rgba(47,181,126,.45)}
.decision-card.glow-bear:hover{box-shadow:0 6px 22px rgba(214,90,74,.22);border-color:rgba(214,90,74,.45)}
.breadth-card{transition:transform .18s var(--ease-premium), box-shadow .18s var(--ease-premium)}
.breadth-card:hover{transform:translateY(-2px)}
.breadth-card.glow-bull:hover{box-shadow:0 6px 22px rgba(47,181,126,.22)}
.breadth-card.glow-bear:hover{box-shadow:0 6px 22px rgba(214,90,74,.22)}

/* ===== GERAK PREMIUM (lanjutan makeover): spotlight kursor, kilau, stagger ===== */
/* Spotlight: sorotan emas SANGAT halus yang mengikuti posisi kursor di
   dalam panel yang sedang di-hover (koordinat --mx/--my di-set JS, lihat
   "SPOTLIGHT KURSOR PANEL") -- kesan kedalaman ala produk premium, bukan
   animasi liar. HANYA utk pointer halus (mouse); layar sentuh tidak kena. */
@media(pointer:fine){
  /* varian panel dgn background khusus dikecualikan/diberi versi sendiri --
     tanpa ini background gradient .panel-primary & transparansi .panel-quiet
     "melompat" ke var(--panel) polos tiap hover */
  .panel:hover:not(.panel-quiet):not(.panel-primary){background:radial-gradient(560px circle at var(--mx,50%) var(--my,50%),rgba(199,154,42,.055),transparent 42%),var(--panel)}
  .panel-primary:hover{background:radial-gradient(560px circle at var(--mx,50%) var(--my,50%),rgba(199,154,42,.06),transparent 42%),linear-gradient(180deg,rgba(199,154,42,.045),transparent),var(--panel)}
}
/* Kilau menyapu tombol emas SEKALI tiap hover (bukan loop) -- .btn sudah
   position:relative+overflow:hidden dari efek ripple, aman utk ::before. */
.btn::before{content:"";position:absolute;top:0;bottom:0;width:38%;left:0;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.32),transparent);
  transform:translateX(-150%) skewX(-18deg);transition:transform .55s ease;pointer-events:none}
.btn:hover::before{transform:translateX(340%) skewX(-18deg)}
.btn.ghost::before{display:none}
/* Item dropdown nav masuk berurutan (fade+slide 30ms per item) saat menu
   terbuka -- transition-delay per nth-child, murni CSS. */
.nav-dd .tab{opacity:0;transform:translateY(-5px);
  transition:opacity .18s var(--ease-premium),transform .18s var(--ease-premium),background .15s,color .15s}
.nav-group:hover .nav-dd .tab,.nav-group:focus-within .nav-dd .tab{opacity:1;transform:none}
.nav-group:hover .nav-dd .tab:nth-child(2),.nav-group:focus-within .nav-dd .tab:nth-child(2){transition-delay:.03s}
.nav-group:hover .nav-dd .tab:nth-child(3),.nav-group:focus-within .nav-dd .tab:nth-child(3){transition-delay:.06s}
.nav-group:hover .nav-dd .tab:nth-child(4),.nav-group:focus-within .nav-dd .tab:nth-child(4){transition-delay:.09s}
.nav-group:hover .nav-dd .tab:nth-child(5),.nav-group:focus-within .nav-dd .tab:nth-child(5){transition-delay:.12s}
/* Logo brand mengangguk kecil saat hover */
.brand-mark img{transition:transform .3s var(--ease-premium)}
.brand:hover .brand-mark img{transform:rotate(-7deg) scale(1.07)}
/* Ikon empty-state mengambang pelan (tanda "hidup", bukan rusak) */
.empty-state .icon{animation:emptyFloat 3.4s ease-in-out infinite alternate}
@keyframes emptyFloat{from{transform:translateY(-2px)}to{transform:translateY(3px)}}
/* Flash emas sekejap di strip IHSG saat angkanya BERUBAH (di-set JS) */
.ms-flash{animation:msFlash .9s ease-out}
@keyframes msFlash{0%{background:rgba(199,154,42,.22);border-radius:5px}100%{background:transparent}}
@media(prefers-reduced-motion:reduce){
  .empty-state .icon{animation:none}
  .btn::before{display:none}
  .ms-flash{animation:none}
}

/* ===== INFO NOTE (toggle ⓘ "Cara baca") =====
   Feedback user nyata: "ruwet, kebanyakan tulisan" -- teks metodologi/
   disclaimer TETAP ADA (kejujuran = identitas proyek) tapi default
   TERSEMBUNYI di balik toggle kecil; 1 klik buka. Data jadi fokus. */
.note-wrap{margin-top:8px}
.note-toggle{display:inline-flex;align-items:center;gap:5px;background:none;border:0;color:var(--faint);
  font-size:11px;cursor:pointer;padding:2px 0;font-family:inherit;transition:color .15s}
.note-toggle:hover{color:var(--gold)}
.note-toggle .icon{width:12px;height:12px;flex:none}
.note-body{display:none;margin-top:6px;font-size:11.5px;line-height:1.65;color:var(--muted);
  border-left:2px solid var(--line);padding-left:10px}
.note-wrap.open .note-body{display:block;animation:noteIn .18s var(--ease-premium)}
.note-wrap.open .note-toggle{color:var(--gold)}
@keyframes noteIn{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.note-wrap.open .note-body{animation:none}}

/* ===== LONCENG NOTIFIKASI ===== */
.notif-btn{position:relative;width:32px;height:32px;border-radius:50%;background:var(--panel2);
  border:1px solid var(--line);color:var(--muted);cursor:pointer;transition:.15s;flex-shrink:0;
  display:inline-flex;align-items:center;justify-content:center;padding:0}
.notif-btn:hover{border-color:var(--gold);color:var(--gold)}
.notif-btn .icon{width:16px;height:16px}
.notif-btn.has-new .icon{animation:bellRing 1s var(--ease-premium)}
@keyframes bellRing{0%,100%{transform:rotate(0)}15%{transform:rotate(14deg)}30%{transform:rotate(-11deg)}45%{transform:rotate(7deg)}60%{transform:rotate(-4deg)}}
.notif-badge{position:absolute;top:-3px;right:-3px;min-width:16px;height:16px;padding:0 4px;
  background:var(--bear);color:#fff;border-radius:9px;font-size:10px;font-weight:700;
  font-family:'JetBrains Mono',monospace;display:flex;align-items:center;justify-content:center;
  border:2px solid var(--bg);line-height:1}
.notif-panel{position:absolute;top:calc(100% + 10px);right:0;width:min(340px,calc(100vw - 32px));z-index:45;
  background:rgba(13,25,21,.94);backdrop-filter:blur(18px) saturate(1.4);
  border:1px solid var(--line);border-radius:12px;overflow:hidden;
  box-shadow:var(--shadow-inset-top),var(--shadow-lg);
  opacity:0;visibility:hidden;transform:translateY(6px) scale(.985);transform-origin:top right;
  transition:opacity .16s var(--ease-premium),transform .16s var(--ease-premium),visibility .16s}
.notif-panel.on{opacity:1;visibility:visible;transform:none}
.notif-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--line)}
.notif-head b{font-size:13px;font-family:'Space Grotesk',sans-serif}
.notif-head button{background:none;border:0;color:var(--muted);font-size:11px;cursor:pointer;padding:2px 4px}
.notif-head button:hover{color:var(--gold)}
.notif-list{max-height:min(400px,60vh);overflow-y:auto}
.notif-item{display:flex;gap:11px;padding:11px 14px;border-bottom:1px solid var(--line-soft);
  cursor:pointer;transition:background .12s;text-align:left;width:100%;background:none;border-left:0;border-right:0;border-top:0;color:var(--text);font-family:inherit}
.notif-item:hover{background:var(--panel2)}
.notif-item:last-child{border-bottom:0}
.notif-item .ni-icon{flex-shrink:0;width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center}
.notif-item .ni-icon.sig{background:rgba(199,154,42,.13);color:var(--gold)}
.notif-item .ni-icon.reply{background:rgba(47,181,126,.13);color:var(--bull)}
.notif-item .ni-body{min-width:0;flex:1;display:flex;flex-direction:column}
.notif-item .ni-title{display:block;font-size:13px;font-weight:600;line-height:1.35}
.notif-item .ni-sub{display:block;font-size:11px;color:var(--muted);margin-top:2px;font-family:'JetBrains Mono',monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.notif-empty{padding:30px 20px;text-align:center;color:var(--muted);font-size:12.5px}
.notif-perm{padding:11px 14px;border-top:1px solid var(--line);font-size:11.5px;color:var(--muted);line-height:1.5}
.notif-perm button{margin-top:7px;font-size:11px;padding:6px 11px}
@media(max-width:768px){.notif-btn{display:none}}

/* Zeta Dashboard */
.zeta-board{display:flex;flex-direction:column;gap:16px;background:var(--panel);padding:20px;border-radius:var(--radius);border:1px solid var(--line-soft);box-shadow:var(--shadow-sm)}
.zeta-grid-4{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}
.zeta-card{background:var(--elev);border:1px solid var(--line);border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;justify-content:center;transition:border-color .2s, transform .2s}
.zeta-card:hover{border-color:var(--accent);transform:translateY(-2px);box-shadow:var(--shadow-xs)}
.zeta-signal-card{background:var(--elev);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;transition:transform .2s,box-shadow .2s;position:relative;}
.zeta-signal-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.3);border-color:var(--line-soft);}
.zeta-signal-card.bull:hover{border-color:rgba(47,181,126,.3);box-shadow:0 8px 24px rgba(47,181,126,.15);}
.zeta-signal-card.bear:hover{border-color:rgba(214,90,74,.3);box-shadow:0 8px 24px rgba(214,90,74,.15);}
.zeta-mini-chart{width:100%;height:140px;border-bottom:1px solid var(--line);background:rgba(0,0,0,0.2);position:relative}
.zeta-mini-chart .loader{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:11px;font-family:'JetBrains Mono',monospace}
.zeta-sig-body{padding:14px;display:flex;flex-direction:column;gap:10px;}
.zeta-sig-header{display:flex;justify-content:space-between;align-items:center;}
.zeta-sig-tk{font-size:18px;font-weight:700;color:var(--text);font-family:'Space Grotesk',sans-serif;line-height:1}
.zeta-sig-src{font-size:9.5px;color:var(--muted);text-transform:uppercase;letter-spacing:1px;background:rgba(255,255,255,0.04);padding:3px 6px;border-radius:4px;border:1px solid var(--line)}
.zeta-sig-row{display:flex;justify-content:space-between;font-size:11.5px;align-items:center}
.zeta-sig-lbl{color:var(--muted);}
.zeta-sig-val{color:var(--text);font-family:'JetBrains Mono',monospace;}
.zeta-label{font-size:10.5px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}
.zeta-value{font-size:28px;font-weight:700;line-height:1;margin-bottom:6px;font-family:'Space Grotesk',sans-serif;letter-spacing:-0.5px;text-shadow:0 2px 12px rgba(0,0,0,0.4)}
.zeta-value.green{color:var(--bull);text-shadow:0 2px 14px rgba(47,181,126,0.3)}
.zeta-value.red{color:var(--bear);text-shadow:0 2px 14px rgba(214,90,74,0.3)}
.zeta-value.white{color:var(--text);text-shadow:0 2px 14px rgba(242,239,231,0.2)}
.zeta-sub{font-size:11.5px;color:var(--muted)}
.zeta-sub b{color:var(--text)}
.zeta-chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin-top:8px}
.zeta-chart-wrapper{background:var(--elev);border:1px solid var(--line);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow-xs)}
.zeta-chart-header{font-size:13px;font-weight:600;color:var(--text);margin-bottom:12px;display:flex;align-items:center;gap:6px}
.zeta-chart-container{width:100%;height:220px}
/* Filter status tabel audit: .chip aslinya utk <span> -- sbg <button>
   perlu cursor + warna teks eksplisit (default UA button nyaris hitam,
   tak terbaca di panel gelap) */
#auditFilter .chip{cursor:pointer;color:var(--text)}
#auditFilter .chip.active{border-color:var(--gold);color:var(--gold)}
/* Audit — tab lensa (segmented underline, bukan tumpukan panel). Cuma 1 pane
   tampil sekaligus: memangkas scroll & jumlah chart yang dirender bersamaan. */
.audit-tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:0 0 16px;overflow-x:auto;-webkit-overflow-scrolling:touch}
.audit-tab{background:none;border:0;border-bottom:2px solid transparent;color:var(--muted);padding:10px 15px;margin-bottom:-1px;font-family:inherit;font-size:13px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:6px;white-space:nowrap;transition:color .15s,border-color .15s}
.audit-tab .icon{width:13px;height:13px;flex:none}
.audit-tab:hover{color:var(--text)}
.audit-tab.active{color:var(--gold);border-bottom-color:var(--gold)}
.audit-pane[hidden]{display:none}
/* Forum Images */
.forum-img-grid{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.forum-img{max-width:100%;max-height:300px;border-radius:8px;object-fit:cover;border:1px solid var(--line);transition:transform 0.2s}
.forum-img:hover{transform:scale(1.02)}
.forum-img-preview-grid{display:grid;gap:8px;margin-top:10px;grid-template-columns:repeat(auto-fill,minmax(60px,1fr))}
.forum-img-preview{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px;border:1px solid var(--line)}
/* ===== SPLASH SCREEN (loading dulu -> landing hero) =====
   z-index 100000 sengaja LEBIH tinggi dari #landingHero (99999) supaya
   splash menutup landing hero saat load, lalu fade-out membuka hero di
   baliknya. Kode asli commit 9708d5a, dihidupkan kembali. */
#splashScreen{position:fixed;inset:0;z-index:100000;background:var(--bg);display:flex;flex-direction:column;align-items:center;justify-content:center;transition:opacity .6s ease-out, visibility .6s;overflow:hidden}
#splashScreen::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at center, rgba(199,154,42,0.08) 0%, transparent 60%);pointer-events:none}
.splash-content{text-align:center;position:relative;z-index:2;animation:splashContentIn 1s cubic-bezier(0.16,1,0.3,1) forwards;opacity:0}
.splash-logo{margin-bottom:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--text);font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:32px;letter-spacing:1.5px}
.splash-logo img{width:56px;height:56px;animation:splashPulse 2s ease-in-out infinite}
.splash-tagline{color:var(--faint);font-size:11px;letter-spacing:4px;text-transform:uppercase;margin-bottom:50px;opacity:0.7}
.splash-loader{display:flex;flex-direction:column;align-items:center;gap:16px}
.splash-loader-line{width:160px;height:1px;background:var(--line);position:relative;overflow:hidden}
.splash-loader-line::after{content:"";position:absolute;left:-50%;top:0;width:50%;height:100%;background:var(--gold);animation:splashLoadAnim 1.5s ease-in-out infinite}
.splash-loader-text{font-family:"JetBrains Mono",monospace;font-size:10px;color:var(--gold);letter-spacing:2px;text-transform:uppercase;animation:splashTextPulse 1.5s ease-in-out infinite}
@keyframes splashContentIn{0%{opacity:0;transform:translateY(20px) scale(0.98)}100%{opacity:1;transform:translateY(0) scale(1)}}
@keyframes splashPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
@keyframes splashLoadAnim{0%{left:-50%}100%{left:100%}}
@keyframes splashTextPulse{0%,100%{opacity:1}50%{opacity:0.4}}
@media(prefers-reduced-motion:reduce){.splash-content{animation:none;opacity:1}.splash-logo img,.splash-loader-line::after,.splash-loader-text{animation:none}}
/* ===== LANDING PAGE HERO ===== */
#landingHero{position:fixed;inset:0;z-index:20;background:var(--bg);display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden;transition:opacity .7s cubic-bezier(.4,0,.2,1),visibility .7s;padding-top:env(safe-area-inset-top,0)}
#landingHero.hide{opacity:0;visibility:hidden;pointer-events:none}
.landing-bg{position:fixed;inset:0;z-index:0;overflow:hidden}
.landing-bg::before{content:"";position:absolute;top:-30%;left:50%;transform:translateX(-50%);width:140%;height:100%;background:radial-gradient(ellipse at 50% 0%, rgba(199,154,42,0.10) 0%, rgba(18,60,50,0.12) 30%, transparent 65%);pointer-events:none}
.landing-bg::after{content:"";position:absolute;bottom:0;left:0;right:0;height:40%;background:linear-gradient(to top, var(--bg) 0%, transparent 100%);pointer-events:none}
.landing-glow{position:absolute;border-radius:50%;filter:blur(100px);opacity:.15;pointer-events:none}
.landing-glow-1{width:500px;height:500px;background:var(--gold);top:-10%;left:30%;animation:landGlow1 8s ease-in-out infinite alternate}
.landing-glow-2{width:400px;height:400px;background:rgba(0,180,120,0.5);top:20%;right:-5%;animation:landGlow2 10s ease-in-out infinite alternate}
.landing-glow-3{width:300px;height:300px;background:rgba(199,154,42,0.4);bottom:10%;left:10%;animation:landGlow3 7s ease-in-out infinite alternate}
@keyframes landGlow1{0%{transform:translate(0,0) scale(1)}100%{transform:translate(30px,20px) scale(1.1)}}
@keyframes landGlow2{0%{transform:translate(0,0) scale(1)}100%{transform:translate(-20px,30px) scale(1.15)}}
@keyframes landGlow3{0%{transform:translate(0,0) scale(1)}100%{transform:translate(20px,-20px) scale(1.05)}}
/* PERF mobile (lanjutan anti-lag backdrop-filter): menganimasikan
   filter:blur(100px) + scale = GPU meraster ulang area blur BESAR tiap
   frame -- jank berat di HP, dan ini di halaman PERTAMA yang dilihat user.
   Di layar kecil animasinya dimatikan (blur statis tetap tampil, cuma tak
   bergerak -- visual nyaris sama, jauh lebih ringan). Sama utk aurora +
   logo-drift hero dashboard (::after gradien besar, ::before logo). Hanya
   ANIMASI yang dimatikan, bukan elemennya, jadi tampilan tetap. */
@media(max-width:768px){
  .landing-glow,.landing-glow-1,.landing-glow-2,.landing-glow-3{animation:none!important}
  .rs-research-hero::after,.rs-research-hero::before{animation:none!important}
}
.landing-content{position:relative;z-index:2;max-width:900px;margin:0 auto;padding:120px 24px 60px;text-align:center;display:flex;flex-direction:column;align-items:center;min-height:100vh;justify-content:center;flex-shrink:0}
.landing-badge{display:inline-flex;align-items:center;gap:10px;background:rgba(199,154,42,0.08);border:1px solid rgba(199,154,42,0.2);border-radius:100px;padding:8px 20px;font-family:"JetBrains Mono",monospace;font-size:10px;letter-spacing:2.5px;text-transform:uppercase;color:var(--gold);margin-bottom:36px;animation:landFadeUp .8s cubic-bezier(.16,1,.3,1) both;animation-delay:.1s;opacity:0}
.landing-badge .dot{width:5px;height:5px;border-radius:50%;background:var(--gold);animation:landDotPulse 2s ease-in-out infinite}
.landing-h1{font-family:"Space Grotesk",sans-serif;font-weight:800;font-size:clamp(38px,7vw,72px);line-height:1.05;letter-spacing:-1px;color:var(--text);margin-bottom:8px;animation:landFadeUp .8s cubic-bezier(.16,1,.3,1) both;animation-delay:.25s;opacity:0}
.landing-h1 em{font-style:normal;background:linear-gradient(135deg, var(--gold) 0%, #d4a843 40%, #7ecfb3 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.landing-sub{font-size:clamp(15px,2.2vw,18px);color:var(--muted);line-height:1.7;max-width:600px;margin:0 auto 44px;animation:landFadeUp .8s cubic-bezier(.16,1,.3,1) both;animation-delay:.4s;opacity:0}
.landing-support{display:flex;align-items:center;gap:12px;max-width:600px;margin:-20px auto 38px;padding:12px 14px 12px 16px;border:1px solid rgba(199,154,42,.28);border-radius:12px;background:linear-gradient(135deg,rgba(199,154,42,.12),rgba(47,181,126,.06));color:var(--muted);font-size:13px;line-height:1.45;text-align:left;animation:landFadeUp .8s cubic-bezier(.16,1,.3,1) both;animation-delay:.48s;opacity:0}
.landing-support-icon{flex:0 0 auto;width:28px;height:28px;display:grid;place-items:center;border-radius:8px;background:var(--gold-soft);color:var(--gold);font-size:16px}
.landing-support a{margin-left:auto;flex:0 0 auto;padding:8px 12px;border-radius:8px;background:var(--gold);color:#0a1612;text-decoration:none;font-family:"Space Grotesk",sans-serif;font-size:12px;font-weight:700;white-space:nowrap;transition:transform .2s,box-shadow .2s}
.landing-support a:hover{transform:translateY(-1px);box-shadow:0 5px 16px rgba(199,154,42,.28)}
.landing-cta-row{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-bottom:48px;animation:landFadeUp .8s cubic-bezier(.16,1,.3,1) both;animation-delay:.55s;opacity:0}
.landing-btn-primary{display:inline-flex;align-items:center;gap:8px;padding:14px 32px;border-radius:10px;font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:15px;letter-spacing:.5px;color:#0a1612;background:linear-gradient(135deg,var(--gold),#d4a843);border:none;cursor:pointer;transition:transform .2s,box-shadow .2s}
.landing-btn-primary:hover{transform:translateY(-2px);box-shadow:0 8px 30px rgba(199,154,42,0.35)}
.landing-btn-primary svg{width:16px;height:16px}
.landing-btn-secondary{display:inline-flex;align-items:center;gap:8px;padding:14px 28px;border-radius:10px;font-family:"Space Grotesk",sans-serif;font-weight:600;font-size:15px;color:var(--text);background:rgba(255,255,255,0.04);border:1px solid var(--line);cursor:pointer;transition:all .2s}
.landing-btn-secondary:hover{border-color:var(--gold-dim);background:rgba(199,154,42,0.06);color:var(--gold)}
.landing-search{display:flex;align-items:center;width:100%;max-width:520px;background:rgba(255,255,255,0.03);border:1px solid var(--line);border-radius:12px;padding:4px 6px 4px 18px;margin-bottom:44px;animation:landFadeUp .8s cubic-bezier(.16,1,.3,1) both;animation-delay:.65s;opacity:0;transition:border-color .2s}
.landing-search:focus-within{border-color:var(--gold-dim)}
.landing-search input{flex:1;background:none;border:none;outline:none;color:var(--text);font-size:14px;font-family:"Space Grotesk",sans-serif;padding:12px 0}
.landing-search input::placeholder{color:var(--faint)}
.landing-search button{padding:10px 22px;border-radius:8px;background:var(--gold);color:#0a1612;font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:13px;border:none;cursor:pointer;transition:opacity .2s;white-space:nowrap}
.landing-search button:hover{opacity:.85}
.landing-stats{display:flex;gap:48px;justify-content:center;animation:landFadeUp .8s cubic-bezier(.16,1,.3,1) both;animation-delay:.8s;opacity:0;margin-bottom:60px}
.landing-stat .num{font-family:"JetBrains Mono",monospace;font-weight:800;font-size:clamp(28px,4vw,40px);color:var(--text);letter-spacing:-1px}
.landing-stat .num em{font-style:normal;color:var(--gold)}
.landing-stat .label{font-size:12px;color:var(--faint);letter-spacing:1px;text-transform:uppercase;margin-top:4px}
.landing-preview{position:relative;width:100%;max-width:800px;margin:0 auto;animation:landFadeUp 1s cubic-bezier(.16,1,.3,1) both;animation-delay:1s;opacity:0}
.landing-preview-glow{position:absolute;top:-20px;bottom:-20px;left:0;right:0;background:linear-gradient(135deg,rgba(199,154,42,0.08),rgba(0,180,120,0.06));border-radius:20px;filter:blur(40px);z-index:0}
.landing-preview-frame{position:relative;z-index:1;border-radius:14px;border:1px solid rgba(255,255,255,0.08);background:rgba(255,255,255,0.02);padding:16px;box-shadow:0 20px 60px rgba(0,0,0,0.5)}
.landing-preview-mockup{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
.landing-mock-card{border-radius:10px;background:rgba(255,255,255,0.03);border:1px solid rgba(255,255,255,0.06);padding:16px;text-align:left}
.landing-mock-card .mk-label{font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--faint);margin-bottom:8px}
.landing-mock-card .mk-val{font-family:"JetBrains Mono",monospace;font-weight:700;font-size:22px;color:var(--text)}
.landing-mock-card .mk-sub{font-size:12px;color:var(--muted);margin-top:4px}
.landing-mock-card .mk-tag{display:inline-block;padding:3px 10px;border-radius:6px;font-size:11px;font-weight:700;margin-top:8px}
.landing-scroll-hint{margin-top:40px;animation:landFadeUp .8s cubic-bezier(.16,1,.3,1) both;animation-delay:1.3s;opacity:0;display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--faint);font-size:11px;letter-spacing:2px;text-transform:uppercase}
.landing-scroll-hint .chevron{width:20px;height:20px;border-right:2px solid var(--faint);border-bottom:2px solid var(--faint);transform:rotate(45deg);animation:landBounce 2s ease-in-out infinite;opacity:.5}
@keyframes landFadeUp{0%{opacity:0;transform:translateY(30px)}100%{opacity:1;transform:translateY(0)}}
@keyframes landDotPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}}
@keyframes landBounce{0%,100%{transform:rotate(45deg) translateY(0)}50%{transform:rotate(45deg) translateY(6px)}}
@media(max-width:600px){
  .landing-content{padding:80px 18px 40px}
  .landing-stats{gap:28px}
  .landing-preview-mockup{grid-template-columns:1fr}
  .landing-cta-row{flex-direction:column;align-items:center}
}
@media(prefers-reduced-motion:reduce){.landing-badge,.landing-h1,.landing-sub,.landing-cta-row,.landing-search,.landing-stats,.landing-preview,.landing-scroll-hint{animation:none!important;opacity:1!important}.landing-glow,.landing-glow-1,.landing-glow-2,.landing-glow-3{animation:none!important}.chevron{animation:none!important}}
/* ============================================================
   LANDING PAGE PENUH (multi-seksi, di bawah hero) — tema Ranah
   Saham (hijau gelap + emas). Tulang punggung = kejujuran & audit
   rekam jejak, BUKAN pricing/social-proof karangan ala situs lain. */
#landingHero .landing-content{min-height:calc(100dvh - 64px)}
/* --- mini nav sticky --- */
.landing-nav{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px clamp(16px,4vw,32px);background:rgba(6,17,15,.72);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--line-soft)}
.landing-nav .ln-brand{display:flex;align-items:center;gap:10px;font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:15px;letter-spacing:.5px;color:var(--text);cursor:pointer}
.landing-nav .ln-brand img{width:26px;height:26px}
.landing-nav .ln-brand sup{color:var(--gold);font-size:9px;font-family:"JetBrains Mono",monospace;letter-spacing:1px;margin-left:1px;top:-.6em}
.landing-nav .ln-links{display:flex;align-items:center;gap:clamp(14px,2.4vw,28px)}
.landing-nav .ln-links a{color:var(--muted);font-size:13.5px;text-decoration:none;cursor:pointer;transition:color .18s}
.landing-nav .ln-links a:hover{color:var(--text)}
.landing-nav .ln-cta{display:inline-flex;align-items:center;gap:7px;padding:9px 18px;border-radius:9px;background:var(--gold);color:#0a1612;font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:13px;border:none;cursor:pointer;transition:transform .18s var(--ease-premium),box-shadow .18s}
.landing-nav .ln-cta:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(199,154,42,.32)}
/* --- kerangka seksi --- */
.landing-section{position:relative;z-index:2;padding:clamp(64px,9vw,120px) clamp(18px,5vw,32px);max-width:1120px;margin:0 auto;flex-shrink:0}
.lp-eyebrow{display:inline-flex;align-items:center;gap:8px;font-family:"JetBrains Mono",monospace;font-size:11px;letter-spacing:2.5px;text-transform:uppercase;color:var(--gold);margin-bottom:18px}
.lp-eyebrow::before{content:"";width:22px;height:1px;background:var(--gold-dim)}
.lp-title{font-family:"Space Grotesk",sans-serif;font-weight:800;font-size:clamp(28px,4.4vw,46px);line-height:1.08;letter-spacing:-.5px;color:var(--text);text-wrap:balance;margin-bottom:14px}
.lp-title em{font-style:normal;color:var(--gold)}
.lp-sub{font-size:clamp(14.5px,1.8vw,17px);color:var(--muted);line-height:1.7;max-width:620px}
.landing-section.center{text-align:center}
.landing-section.center .lp-eyebrow{justify-content:center}
.landing-section.center .lp-sub{margin-left:auto;margin-right:auto}
.section-head{margin-bottom:clamp(36px,5vw,56px)}
/* --- bento fitur --- */
.landing-bento{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.bento-card{position:relative;border-radius:16px;border:1px solid var(--line);background:linear-gradient(160deg,var(--panel) 0%,var(--panel2) 100%);padding:26px;overflow:hidden;transition:transform .28s var(--ease-premium),border-color .28s,box-shadow .28s}
.bento-card::after{content:"";position:absolute;inset:0;background:radial-gradient(600px circle at var(--mx,50%) var(--my,0%),rgba(199,154,42,.06),transparent 40%);opacity:0;transition:opacity .3s;pointer-events:none}
.bento-card:hover{transform:translateY(-4px);border-color:var(--gold-dim);box-shadow:var(--shadow-md)}
.bento-card:hover::after{opacity:1}
.bento-card.wide{grid-column:span 2}
.bento-ico{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:var(--gold-soft);border:1px solid var(--gold-dim);color:var(--gold);margin-bottom:16px}
.bento-ico svg{width:19px;height:19px}
.bento-card h3{font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:18px;color:var(--text);margin-bottom:8px;letter-spacing:.2px}
.bento-card p{font-size:13.5px;color:var(--muted);line-height:1.65}
.bento-tag{position:absolute;top:20px;right:20px;font-family:"JetBrains Mono",monospace;font-size:9.5px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gold);background:var(--gold-soft);border:1px solid var(--gold-dim);padding:4px 9px;border-radius:6px}
/* visual mini di kartu wide (audit) */
.bento-audit-viz{display:flex;gap:20px;align-items:flex-end;margin-top:20px;flex-wrap:wrap}
.audit-bars{display:flex;align-items:flex-end;gap:6px;height:64px}
.audit-bars span{width:12px;border-radius:3px 3px 0 0;background:var(--bull);opacity:.85}
.audit-bars span.loss{background:var(--bear);opacity:.7}
.audit-wr{display:flex;flex-direction:column;gap:2px}
.audit-wr b{font-family:"JetBrains Mono",monospace;font-size:26px;color:var(--text);line-height:1}
.audit-wr small{font-size:11px;color:var(--faint);letter-spacing:.5px}
/* --- strip chip fitur kecil --- */
.landing-chips{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}
.lp-chip{display:inline-flex;align-items:center;gap:8px;padding:9px 15px;border-radius:100px;border:1px solid var(--line);background:var(--panel);font-size:13px;color:var(--muted);transition:border-color .2s,color .2s}
.lp-chip:hover{border-color:var(--gold-dim);color:var(--text)}
.lp-chip svg{width:14px;height:14px;color:var(--gold)}
/* --- seksi pembeda: audit rekam jejak --- */
.landing-audit-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(32px,5vw,64px);align-items:center}
.audit-points{margin-top:26px;display:flex;flex-direction:column;gap:16px}
.audit-point{display:flex;gap:13px;align-items:flex-start}
.audit-point .ap-ico{flex-shrink:0;width:26px;height:26px;border-radius:7px;display:flex;align-items:center;justify-content:center;background:rgba(47,181,126,.1);border:1px solid rgba(47,181,126,.32);color:var(--bull)}
.audit-point .ap-ico svg{width:14px;height:14px}
.audit-point div b{display:block;font-family:"Space Grotesk",sans-serif;font-weight:600;font-size:14.5px;color:var(--text);margin-bottom:2px}
.audit-point div span{font-size:13px;color:var(--muted);line-height:1.55}
/* kartu visual timeline sinyal (mock, memakai warna nyata bull/bear) */
.audit-card{border-radius:16px;border:1px solid var(--line);background:linear-gradient(160deg,var(--panel),var(--panel2));padding:22px;box-shadow:var(--shadow-lg)}
.audit-card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.audit-card-head .ach-title{font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:14px;color:var(--text)}
.audit-card-head .ach-live{display:inline-flex;align-items:center;gap:6px;font-family:"JetBrains Mono",monospace;font-size:10px;letter-spacing:1px;text-transform:uppercase;color:var(--bull)}
.audit-card-head .ach-live .d{width:6px;height:6px;border-radius:50%;background:var(--bull);animation:landDotPulse 2s ease-in-out infinite}
.audit-card-sub{font-size:11.5px;color:var(--faint);margin-bottom:16px}
.sig-row{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;padding:11px 0;border-top:1px solid var(--line-soft)}
.sig-row .sig-tk{font-family:"JetBrains Mono",monospace;font-weight:700;font-size:13px;color:var(--text);width:52px}
.sig-row .sig-meta{font-size:11.5px;color:var(--muted)}
.sig-row .sig-meta b{color:var(--text);font-weight:600}
.sig-pill{font-family:"JetBrains Mono",monospace;font-size:10px;font-weight:700;letter-spacing:.8px;padding:4px 9px;border-radius:6px;white-space:nowrap}
.sig-pill.win{color:var(--bull);background:rgba(47,181,126,.12);border:1px solid rgba(47,181,126,.35)}
.sig-pill.loss{color:var(--bear);background:rgba(214,90,74,.12);border:1px solid rgba(214,90,74,.32)}
.sig-pill.open{color:var(--gold);background:var(--gold-soft);border:1px solid var(--gold-dim)}
.sig-pill.exp{color:var(--muted);background:var(--line-soft);border:1px solid var(--line)}
.sig-skel{opacity:.4;animation:landDotPulse 1.4s ease-in-out infinite}
.sig-skel .sig-pill{color:var(--faint);background:var(--line-soft);border:1px solid var(--line)}
.lp-audit-empty{grid-column:1/-1;text-align:center;color:var(--faint);font-size:12px;padding:8px 0}
.audit-card-foot{display:flex;align-items:center;justify-content:space-between;margin-top:16px;padding-top:16px;border-top:1px solid var(--line)}
.audit-card-foot .acf-wr{font-family:"JetBrains Mono",monospace;font-size:22px;font-weight:700;color:var(--text)}
.audit-card-foot .acf-wr em{font-style:normal;color:var(--bull)}
.audit-card-foot .acf-note{font-size:10.5px;color:var(--faint);text-align:right;max-width:180px;line-height:1.4}
/* --- CTA final --- */
.landing-final{position:relative;z-index:2;text-align:center;padding:clamp(72px,10vw,130px) 24px;max-width:760px;margin:0 auto}
.landing-final .lf-glow{position:absolute;left:50%;top:40%;transform:translate(-50%,-50%);width:min(560px,90%);height:280px;background:radial-gradient(ellipse,rgba(199,154,42,.14),transparent 70%);filter:blur(30px);pointer-events:none;z-index:-1}
.landing-final h2{font-family:"Space Grotesk",sans-serif;font-weight:800;font-size:clamp(30px,5.2vw,54px);line-height:1.06;letter-spacing:-.8px;color:var(--text);text-wrap:balance;margin-bottom:18px}
.landing-final h2 em{font-style:normal;background:linear-gradient(135deg,var(--gold),#e0bd63 45%,var(--bull));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.landing-final p{font-size:clamp(14.5px,1.9vw,17px);color:var(--muted);line-height:1.65;max-width:520px;margin:0 auto 34px}
.landing-final .lf-fine{margin-top:22px;font-family:"JetBrains Mono",monospace;font-size:11px;letter-spacing:1px;color:var(--faint);text-transform:uppercase}
/* --- footer mini landing --- */
.landing-foot{position:relative;z-index:2;border-top:1px solid var(--line-soft);padding:26px clamp(18px,5vw,32px);max-width:1120px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}
.landing-foot .lfoot-brand{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:13px;font-family:"Space Grotesk",sans-serif}
.landing-foot .lfoot-brand img{width:20px;height:20px;opacity:.85}
.landing-foot .lfoot-note{font-size:11.5px;color:var(--faint);max-width:420px;line-height:1.5}
/* --- reveal on scroll --- */
.reveal{opacity:0;transform:translateY(30px);transition:opacity .75s var(--ease-premium),transform .75s var(--ease-premium)}
.reveal.in{opacity:1;transform:none}
/* --- responsif --- */
@media(max-width:860px){
  .landing-bento{grid-template-columns:repeat(2,1fr)}
  .bento-card.wide{grid-column:span 2}
  .landing-audit-grid{grid-template-columns:1fr}
}
@media(max-width:600px){
  .landing-bento{grid-template-columns:1fr}
  .bento-card.wide{grid-column:span 1}
  .landing-nav .ln-links a{display:none}
  .landing-support{margin:-18px auto 30px;align-items:flex-start;font-size:12px}
  .landing-support a{padding:8px 10px;font-size:11px}
  .landing-foot{flex-direction:column;align-items:flex-start}
}
@media(prefers-reduced-motion:reduce){.reveal,.landing-support{opacity:1;transform:none;transition:none}.bento-card:hover{transform:none}}

/* ===== LIGHT MODE — PALET TERANG KHUSUS, BUKAN DARK MODE YANG DIBALIK =====
   Diletakkan paling akhir supaya modul lama yang masih memakai warna gelap
   literal tidak menimpa keterbacaan tema terang. */
:root[data-theme="light"]{
  --bg:#F4F7F3;--panel:#FFFFFF;--panel2:#ECF2ED;--elev:#F8FAF8;
  --line:#D6E1D9;--line-soft:#E5ECE7;
  --text:#14251E;--muted:#5C7066;--faint:#7A8B81;
  --gold:#A87512;--gold-soft:rgba(168,117,18,.10);--gold-dim:rgba(168,117,18,.42);
  --bull:#078957;--bear:#C7473E;--neutral:#708177;
  --shadow-xs:0 1px 2px rgba(20,37,30,.06);
  --shadow-sm:0 4px 12px -6px rgba(20,37,30,.13),0 1px 2px rgba(20,37,30,.06);
  --shadow-md:0 14px 30px -16px rgba(20,37,30,.18),0 3px 8px -5px rgba(20,37,30,.09);
  --shadow-lg:0 26px 54px -24px rgba(20,37,30,.24),0 8px 20px -12px rgba(20,37,30,.12);
}
:root[data-theme="light"] body{
  background:radial-gradient(900px 500px at 4% -12%,rgba(168,117,18,.11),transparent 62%),radial-gradient(760px 440px at 100% 12%,rgba(7,137,87,.075),transparent 65%),#F4F7F3;
}
:root[data-theme="light"] header{background:rgba(252,253,251,.93);border-bottom-color:rgba(20,37,30,.10);box-shadow:0 9px 25px -16px rgba(20,37,30,.22)}
:root[data-theme="light"] .ticker-marquee{background:#EAF2ED;border-bottom-color:#D7E3DB}
:root[data-theme="light"] .news-marquee{background:#F9F7F0;border-bottom-color:#E5E2D6}
:root[data-theme="light"] .rs-research-hero{
  margin:8px 0 22px;padding:36px;background:linear-gradient(125deg,#FFFDF8 0%,#FFFFFF 54%,#F0F6F1 100%);
  border:1px solid #DCE6DF;border-radius:16px;box-shadow:var(--shadow-sm);
}
:root[data-theme="light"] .rs-research-hero::before{opacity:.055}
:root[data-theme="light"] .rs-research-hero::after{background:radial-gradient(closest-side at 35% 40%,rgba(168,117,18,.12),transparent 70%),radial-gradient(closest-side at 75% 75%,rgba(7,137,87,.065),transparent 70%)}
:root[data-theme="light"] .home-sub,:root[data-theme="light"] .analysis-sub{color:#52685D}
:root[data-theme="light"] .home-search-card{
  background:linear-gradient(160deg,#FDFBF5,#F4F8F4);border-color:rgba(168,117,18,.32);box-shadow:0 18px 36px -24px rgba(20,37,30,.30);
}
:root[data-theme="light"] .home-search input{background:#FFFFFF;color:var(--text);border-color:#D2DED6}
:root[data-theme="light"] .home-quick button{background:#FFFFFF;color:#385146;border-color:#D8E2DB}
:root[data-theme="light"] .home-quick button:hover{background:#F7F1DF;border-color:var(--gold-dim);color:#6B4B0B}
:root[data-theme="light"] .pulse-card{background:linear-gradient(180deg,#FFFFFF,#FBFCFA);border-color:#DDE6E0}
:root[data-theme="light"] .pc-label{color:#718278}
:root[data-theme="light"] .analysis-shell{background:linear-gradient(180deg,rgba(168,117,18,.07),rgba(168,117,18,.015)),#FFFFFF;border-color:rgba(168,117,18,.25)}
:root[data-theme="light"] .analysis-score-card,:root[data-theme="light"] .decision-card,:root[data-theme="light"] .chart-panel #chart,:root[data-theme="light"] .risk-item{background:#FBFCFA;border-color:#DCE6DF}
:root[data-theme="light"] .case-card{background:#F3F7F4;border-color:#DCE6DF}
:root[data-theme="light"] .case-card ul,:root[data-theme="light"] .risk-item,:root[data-theme="light"] .audit-note{color:#30463B}
:root[data-theme="light"] .panel-quiet{border-color:#DCE6DF}
:root[data-theme="light"] .site-footer{background:linear-gradient(to bottom,#EDF3EE,#E3ECE5);box-shadow:0 -20px 42px -28px rgba(20,37,30,.25)}
:root[data-theme="light"] .site-footer .footer-disclaimer{background:#E3ECE5;border-top-color:#D1DED5}
:root[data-theme="light"] .footer-social a{background:#F8FAF8;border-color:#D4E0D8}
:root[data-theme="light"] .footer-col .footer-divider{border-top-color:#D4E0D8}
:root[data-theme="light"] .decision-card:hover,:root[data-theme="light"] .case-card:hover,:root[data-theme="light"] .berulang-card:hover,:root[data-theme="light"] .port-sum-card:hover,:root[data-theme="light"] .alert-row:hover,:root[data-theme="light"] .home-search-card:hover{box-shadow:0 10px 24px -14px rgba(20,37,30,.25)}
@media(max-width:640px){:root[data-theme="light"] .rs-research-hero{margin:0 0 14px;padding:20px 18px;border-radius:12px}}
