/* ============================================================
   Sahabat Developer Portal — tema gelap shared (admin/tool)
   Dipakai halaman: login, docs, category, media-manager, sync,
   wishlist, check-*. Konsisten dgn dashboard/system pages.
   ============================================================ */
:root{
  --pbg:#0b1120; --pbg2:#0f172a; --pcard:#1e293b; --pline:#283548;
  --ptxt:#e2e8f0; --pmut:#7d8ba1; --pacc:#38bdf8; --pgood:#34d399;
  --pwarn:#fbbf24; --pbad:#f87171; --pchip:#0ea5e9;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body.p-body{background:var(--pbg);color:var(--ptxt);font-family:system-ui,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;min-height:100vh}
body.p-flex{display:flex;min-height:100vh;background:var(--pbg);color:var(--ptxt);font-family:system-ui,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased}
a{color:var(--pacc);text-decoration:none}

/* ---------- Sidebar (Developer Control Center) ---------- */
.p-sidebar{width:256px;flex:0 0 256px;background:linear-gradient(180deg,#101b30 0%,#0d1526 100%);border-right:1px solid var(--pline);padding:16px 12px;display:flex;flex-direction:column;gap:6px;position:sticky;top:0;height:100vh;overflow-y:auto;scrollbar-width:thin}
.p-sidebar-toggle,.p-sidebar-close{display:none}
.p-brand{display:flex;flex-direction:column;gap:2px;padding:6px 8px 16px;border-bottom:1px solid var(--pline);margin-bottom:10px}
.p-brand-ic{font-size:22px;line-height:1}
.p-brand-txt{font-size:15px;font-weight:700;color:var(--ptxt)}
.p-brand-txt b{color:var(--pacc)}
.p-brand-sub{font-size:10px;color:var(--pmut);text-transform:uppercase;letter-spacing:.16em;margin-top:2px}
.p-brand-img{height:38px;max-width:100%;width:auto;object-fit:contain;margin-bottom:2px}
/* Settings: preview logo/favicon */
.p-logo-row{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}
.p-logo-preview{width:88px;height:88px;flex:0 0 88px;display:flex;align-items:center;justify-content:center;background:var(--pbg2);border:1px solid var(--pline);border-radius:12px;font-size:34px;overflow:hidden}
.p-logo-preview img{max-width:80%;max-height:80%;object-fit:contain}
.p-divider{border:0;border-top:1px solid var(--pline);margin:18px 0}
.p-nav{display:flex;flex-direction:column;gap:2px;flex:1}
.p-group{display:flex;flex-direction:column}
.p-group-head{width:100%;background:none;border:none;color:var(--pmut);font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;padding:15px 10px 5px;display:flex;align-items:center;gap:7px;cursor:pointer;text-align:left;transition:color .15s}
.p-group-head:hover{color:var(--ptxt)}
.p-group-head .p-ic{font-size:13px;opacity:.85}
.p-gt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p-caret{margin-left:auto;font-size:10px;opacity:.7;transition:transform .18s}
.p-group.open .p-caret{transform:rotate(180deg)}
.p-group-body{display:flex;flex-direction:column;gap:1px;padding-left:4px;margin-top:2px}
.p-group:not(.open) .p-group-body{display:none}
.p-item{display:flex;align-items:center;gap:9px;color:var(--ptxt);text-decoration:none;font-size:13px;padding:7px 10px;border-radius:8px;border-left:3px solid transparent;transition:background .12s,color .12s,border-color .12s}
.p-item .p-item-ic{font-size:15px;width:18px;text-align:center;opacity:.7;flex:0 0 18px;transition:opacity .12s}
.p-item .p-item-txt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p-item:hover{background:var(--pcard);color:#fff}
.p-item:hover .p-item-ic{opacity:1}
.p-item.on{background:linear-gradient(90deg,rgba(56,189,248,.16),rgba(56,189,248,.04));border-left-color:var(--pacc);color:#7dd3fc;font-weight:600}
.p-item.on .p-item-ic{opacity:1;color:var(--pacc)}
.p-item-badge{margin-left:auto;background:var(--pacc);color:#06283d;font-size:10.5px;font-weight:800;min-width:18px;height:18px;padding:0 6px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums}
.p-foot{border-top:1px solid var(--pline);padding-top:12px;display:flex;flex-direction:column;gap:8px}
.p-user{font-size:12px;color:var(--pmut);display:flex;align-items:center;gap:6px;padding:0 6px}
.p-logout{color:var(--pbad);text-decoration:none;font-size:13px;font-weight:600;padding:6px 8px;border-radius:8px;transition:background .12s}
.p-logout:hover{background:rgba(248,113,113,.08)}

/* ---------- Topbar (renderBar) ---------- */
.psb-wrap{position:sticky;top:0;z-index:9999}
.psb{display:flex;align-items:center;gap:14px;background:var(--pbg2);border-bottom:1px solid var(--pline);padding:9px 18px;color:var(--ptxt);flex-wrap:wrap}
.psb a{color:var(--ptxt);text-decoration:none;font-size:13px}
.psb .psb-brand{font-size:14px;font-weight:700;color:var(--pacc);white-space:nowrap}
.psb .psb-dash{font-weight:600}
.psb .psb-more{position:relative}
.psb .psb-btn{background:none;border:1px solid var(--pline);color:var(--ptxt);border-radius:8px;padding:6px 12px;font-size:13px;cursor:pointer}
.psb .psb-menu{display:none;position:absolute;top:calc(100% + 6px);left:0;background:var(--pbg2);border:1px solid var(--pline);border-radius:10px;min-width:230px;padding:8px;box-shadow:0 10px 30px rgba(0,0,0,.5);max-height:70vh;overflow-y:auto}
.psb .psb-menu.open{display:block}
.psb .psb-mtitle{color:var(--pmut);font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;padding:8px 10px 4px}
.psb .psb-mitem{display:block;padding:7px 10px;border-radius:7px;font-size:13px}
.psb .psb-mitem:hover{background:var(--pcard)}
.psb .psb-mitem.on{background:var(--pcard);color:var(--pacc)}
.psb .psb-spacer{flex:1}
.psb .psb-user{color:var(--pmut);font-size:12px;white-space:nowrap}
.psb .psb-logout{color:var(--pbad);font-weight:600}

/* ---------- Layout utama ---------- */
.p-main{flex:1;padding:22px 26px 60px;max-width:1320px;min-width:0}
body.p-wide .p-main{max-width:1600px}
.p-wrap{max-width:1100px;margin:0 auto;padding:24px 28px 60px}
h1.p-title{font-size:22px;margin:0 0 4px}
.p-sub{color:var(--pmut);font-size:13px;margin:0 0 20px}

/* ---------- Content card (container utama semua halaman) ---------- */
.p-content{background:var(--pcard);border:1px solid var(--pline);border-radius:16px;box-shadow:0 12px 32px rgba(0,0,0,.22);min-width:0}
.p-content-head{padding:18px 22px 14px;border-bottom:1px solid var(--pline)}
.p-content-head .p-title{font-size:19px;margin:0 0 2px;color:var(--ptxt)}
.p-content-head .p-sub{margin:0;color:var(--pmut);font-size:12.5px;line-height:1.5}
.p-content-body{padding:20px 22px 26px;min-width:0}
.p-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:0 0 16px}
.p-actions .spacer{flex:1}

/* ---------- Card & panel ---------- */
.p-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px}
.p-card{background:var(--pcard);border:1px solid var(--pline);border-radius:14px;padding:18px;text-decoration:none;color:var(--ptxt);transition:transform .12s,border-color .12s;display:flex;flex-direction:column;gap:8px}
.p-card:hover{transform:translateY(-2px);border-color:var(--pacc)}
.p-card .p-ic{font-size:24px}
.p-card .p-t{font-weight:700;font-size:15px}
.p-card .p-d{font-size:12px;color:var(--pmut);line-height:1.45}
.p-panel{background:var(--pcard);border:1px solid var(--pline);border-radius:12px;padding:18px;margin-bottom:18px}
.p-panel h2{font-size:15px;margin:0 0 12px}
.p-panel h3{font-size:13.5px;margin:14px 0 8px;color:var(--ptxt)}
.p-section-title{font-size:13px;color:var(--pmut);text-transform:uppercase;letter-spacing:.05em;margin:24px 0 10px}

/* ---------- Form ---------- */
.p-label{display:block;font-size:12px;color:var(--pmut);margin:12px 0 4px;font-weight:600}
.p-input,.p-select,.p-textarea{width:100%;padding:9px 11px;border:1px solid var(--pline);border-radius:8px;background:var(--pbg2);color:var(--ptxt);font-size:13.5px}
.p-textarea{font-family:ui-monospace,Consolas,monospace;font-size:12.5px;min-height:80px;resize:vertical}
.p-check{display:flex;align-items:center;gap:8px;margin:10px 0;font-size:13px}
.p-check input{width:auto}
.p-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}

/* ---------- Button ---------- */
.p-btn{display:inline-flex;align-items:center;gap:6px;background:var(--pacc);color:#06283d;border:none;border-radius:8px;padding:9px 16px;font-size:13px;font-weight:700;cursor:pointer;text-decoration:none}
.p-btn:hover{filter:brightness(1.1)}
.p-btn.ghost{background:var(--pcard);color:var(--ptxt);border:1px solid var(--pline)}
.p-btn.danger{background:#2b0d0d;color:var(--pbad);border:1px solid #5b1f1f}
.p-btn.sm{padding:5px 10px;font-size:12px}

/* ---------- Table ---------- */
.p-table{width:100%;border-collapse:collapse;font-size:13px}
.p-table th,.p-table td{text-align:left;padding:9px 8px;border-bottom:1px solid var(--pline)}
.p-table th{color:var(--pmut);font-size:11px;text-transform:uppercase;letter-spacing:.04em}
.p-table tr:hover td{background:var(--pbg2)}
.p-mono{font-family:ui-monospace,Consolas,monospace;font-size:12.5px}

/* ---------- Badge / status ---------- */
.p-badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600}
.p-badge.on{background:#0d2b1f;color:var(--pgood)}
.p-badge.off{background:#2b0d0d;color:var(--pbad)}
.p-badge.dev{background:#0d2b45;color:#7dd3fc}
.p-badge.admin{background:#2b1f0d;color:var(--pwarn)}
.p-good{color:var(--pgood)}.p-warn{color:var(--pwarn)}.p-bad{color:var(--pbad)}.p-muted{color:var(--pmut)}

/* ---------- Message ---------- */
.p-msg{padding:10px 14px;border-radius:8px;margin-bottom:14px;font-size:13px}
.p-msg.ok{background:#0d2b1f;color:var(--pgood)}
.p-msg.err{background:#2b0d0d;color:var(--pbad)}

/* ---------- Stat ---------- */
.p-stats{display:flex;gap:12px;flex-wrap:wrap}
.p-stat{flex:1;min-width:130px;background:var(--pbg2);border:1px solid var(--pline);border-radius:10px;padding:12px}
.p-stat .n{font-size:24px;font-weight:800;color:var(--pacc)}
.p-stat .l{font-size:11px;color:var(--pmut);text-transform:uppercase;letter-spacing:.05em}

/* ---------- Misc ---------- */
.p-grid2{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start}
@media(max-width:900px){.p-grid2{grid-template-columns:1fr}}
@media(max-width:980px){
  body.p-flex{flex-direction:column}
  .p-sidebar-toggle{display:inline-flex;position:fixed;top:12px;left:12px;z-index:1200;background:var(--pbg2);border:1px solid var(--pline);color:var(--ptxt);font-size:18px;width:40px;height:40px;align-items:center;justify-content:center;border-radius:10px;cursor:pointer;box-shadow:0 6px 18px rgba(0,0,0,.35)}
  .p-sidebar{position:fixed;top:0;left:0;bottom:0;width:280px;max-width:86vw;z-index:1100;height:100vh;transform:translateX(-105%);transition:transform .22s ease}
  body.p-sidebar-open .p-sidebar{transform:translateX(0)}
  body.p-sidebar-open::after{content:'';position:fixed;inset:0;background:rgba(2,6,18,.6);z-index:1050}
  .p-sidebar-close{display:inline-flex;position:absolute;top:10px;right:10px;background:none;border:none;color:var(--pmut);font-size:22px;cursor:pointer;z-index:5;line-height:1}
  .p-main{padding:64px 16px 50px}
  .p-nav{flex-direction:column}
}

/* ---------- Embed mode (?embed=1) — dipakai Mobile Preview hub ----------
   Halaman preview (sahabat-ai, greeting-inspiration, favorite-cities,
   wishlist, woo-documentations) dirender tanpa sidebar/header portal,
   hanya mockup HP yang terlihat. Panel developer disembunyikan. */
body.p-embed{display:block;background:var(--pbg)}
body.p-embed .p-embed-main{padding:0;max-width:none;min-height:100vh}
body.p-embed .p-embed-body{padding:0;min-height:100vh}
/* sembunyikan panel/aksi developer pada mode embed */
body.p-embed .sai-dev-toggle,
body.p-embed .sai-dev,
body.p-embed .greeting-dev-panel,
body.p-embed .fav-city-dev,
body.p-embed .wishlist-dev,
body.p-embed .preview-toolbar,
body.p-embed .wishlist-actions,
body.p-embed .wishlist-form,
body.p-embed .wishlist-empty-actions{display:none !important}
/* mockup HP jadi satu kolom, di tengah, tanpa panel samping */
body.p-embed .greeting-shell,
body.p-embed .fav-city-shell,
body.p-embed .wishlist-page,
body.p-embed .preview-shell{grid-template-columns:minmax(340px,430px);justify-content:center;padding:0;gap:0;max-width:none}
/* Mockup HP harus SETINGGI HP (fixed height + scroll internal), bukan mengikuti
   konten — kalau height:auto, overlay/modal (mis. filter) membentang ke bawah
   layar. Scroll internal memakai wheel/touch; scrollbar disembunyikan di bawah. */
body.p-embed .greeting-phone,
body.p-embed .fav-city-phone,
body.p-embed .wishlist-phone{height:calc(100vh - 40px);min-height:640px;max-height:none;margin:0 auto}
body.p-embed .phone-frame{height:calc(100vh - 40px);min-height:640px;max-height:none;margin:0 auto}
/* Embed untuk Mobile Preview: sembunyikan panel dokumentasi "Preview Penerapan API"
   — dokumentasi screen ditampilkan di panel KANAN hub, bukan di dalam mockup. */
body.p-embed .preview-copy,
body.p-embed .active-endpoint-panel{display:none !important}
body.p-embed .preview-section{padding:0;border:0;background:transparent;box-shadow:none}
/* Embed untuk Mobile Preview: sembunyikan SCROLLBAR visual di dalam mockup
   (konten mockup lebih tinggi dari frame → scrollbar iframe menimpa tampilan HP).
   Scroll tetap berfungsi (wheel/touch), hanya scrollbar-nya yang tak terlihat
   — seperti layar HP asli. Berlaku di root (html), body & semua kontainer scroll. */
html:has(body.p-embed){-ms-overflow-style:none;scrollbar-width:none}
html:has(body.p-embed)::-webkit-scrollbar{display:none;width:0;height:0}
body.p-embed,
body.p-embed *{-ms-overflow-style:none;scrollbar-width:none}
body.p-embed::-webkit-scrollbar,
body.p-embed *::-webkit-scrollbar{display:none;width:0;height:0}
.p-log-box{background:#0a0f1c;border:1px solid var(--pline);border-radius:8px;padding:12px;font-family:ui-monospace,Consolas,monospace;font-size:12px;line-height:1.55;max-height:55vh;overflow-y:auto;white-space:pre-wrap;word-break:break-word}
.p-log-line.err{color:var(--pbad)}
.p-log-line.warn{color:var(--pwarn)}
.p-log-line.ok{color:var(--pgood)}
