
@font-face{font-family:Satoshi;src:url(/fonts/satoshi-400.woff2)format("woff2");
font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Satoshi;src:url(/fonts/satoshi-500.woff2)format("woff2");
font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:Satoshi;src:url(/fonts/satoshi-700.woff2)format("woff2");
font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:Satoshi;src:url(/fonts/satoshi-900.woff2)format("woff2");
font-weight:900;font-style:normal;font-display:swap}
@font-face{font-family:"Instrument Serif";src:url(/fonts/instrument-serif-400.5eb09b5a.woff2)format("woff2");
font-weight:400;font-style:normal;font-display:swap}
:root{--background:#f4f6f2;--foreground:#1f2329;--card:#fcfdfb;--muted:#e7ebe4;
--muted-foreground:#59616b;--primary:#b6ff2e;--primary-ink:#1f2329;--secondary:#1f2329;
--secondary-foreground:#f4f6f2;--destructive:#c92a3a;--border:#cfd5cd;--ring:#6e9b12;
--ok:#18794e;--warn:#7a5d00;--status-ok:var(--ok);--status-ok-ink:#fff;--input:#fff;--hover:#1f23290a;
--radius:.5rem;--sidebar:16rem;--topbar:3.5rem;
--shadow:0 1px 2px #1f23291f;--shadow2:0 6px 20px #1f232924;
--font-sans:"Satoshi",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;
--font-serif:"Instrument Serif",Georgia,"Times New Roman",serif;
--font-mono:ui-monospace,"JetBrains Mono",SFMono-Regular,Menlo,Consolas,monospace;
--duration:.18s;--ease:cubic-bezier(.22,1,.36,1);--logo-ink:#b6ff2e}
@media(prefers-color-scheme:dark){:root{--logo-ink:#14171b;--background:#14171b;--foreground:#f4f7f1;
--card:#1f2329;--muted:#2a2f36;--muted-foreground:#9aa3ad;--border:#3b434c;
--primary:#b6ff2e;--primary-ink:#14171b;--secondary:#f4f7f1;--secondary-foreground:#14171b;
--ring:#b6ff2e;--ok:#4ade80;--warn:#facc15;--destructive:#ff9a9a;--status-ok-ink:#14171b;--input:#191d22;--hover:#f4f7f10d;
--shadow:0 1px 2px #0006;--shadow2:0 8px 26px #00000059}}
*{box-sizing:border-box}
html,body{margin:0}
/* Transisi antar halaman: View Transitions API (native, nol lib). Konten
   cross-fade + sedikit naik; sidebar/topbar diam (di-root, bukan di .wrap). */
@view-transition{navigation:auto}
::view-transition-old(root),::view-transition-new(root){animation-duration:.22s;
animation-timing-function:cubic-bezier(.22,1,.36,1)}
@media(prefers-reduced-motion:reduce){
  ::view-transition-old(root),::view-transition-new(root){animation:none}
}
body{background:var(--background) url("/img/textures/grain.png?v=2") 0 0 / 128px 128px repeat;
color:var(--foreground);font-family:var(--font-sans);
font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
a{color:inherit;text-decoration:none}
h1,h2,h3{margin:0;letter-spacing:-.015em}
h1{font-size:1.45rem;font-weight:680}h2{font-size:1.02rem;font-weight:620}
:focus-visible{outline:2px solid var(--ring);outline-offset:2px;border-radius:4px}
.muted{color:var(--muted-foreground)}
.mono{font-family:var(--font-mono);font-size:.85em}
.row{display:flex;align-items:center;gap:.6rem}
.between{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
box-shadow:var(--shadow)}
.pad{padding:1rem 1.1rem}
.stack{display:flex;flex-direction:column;gap:1rem}
.grid{display:grid;gap:1rem}
@media(min-width:640px){.g2{grid-template-columns:1fr 1fr}.g4{grid-template-columns:repeat(4,1fr)}}
label{display:block;font-size:.8rem;font-weight:600;margin-bottom:.3rem;color:var(--muted-foreground)}
input,textarea,select{width:100%;padding:.55rem .7rem;border:1px solid var(--border);
border-radius:var(--radius);background:var(--input);font:inherit;color:inherit;
transition:border-color var(--duration),box-shadow var(--duration)}
input:focus,textarea:focus{outline:none;border-color:var(--ring);box-shadow:0 0 0 3px #6e9b1233}
textarea{min-height:7rem;resize:vertical;font-family:var(--font-mono);font-size:.85rem}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;
padding:.55rem .9rem;border-radius:var(--radius);border:1px solid var(--border);
background:var(--card);font:inherit;font-weight:600;cursor:pointer;white-space:nowrap;
transition:transform var(--duration) var(--ease),background var(--duration),
border-color var(--duration),color var(--duration)}
.btn:hover{border-color:var(--ring)}
.btn:active{transform:translateY(1px) scale(.985)}
.btn-primary{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}
.btn-primary:hover{border-color:var(--primary);filter:brightness(1.06)}
.btn-dark{background:var(--secondary);border-color:var(--secondary);color:var(--secondary-foreground)}
.btn-danger{color:var(--destructive);border-color:#c92a3a55}
.btn-danger:hover{border-color:var(--destructive);background:#c92a3a12}
.btn-sm{padding:.35rem .6rem;font-size:.82rem}
.pill{display:inline-flex;align-self:flex-start;align-items:center;gap:.35rem;padding:.15rem .55rem;
border-radius:999px;font-size:.75rem;font-weight:600;background:var(--muted);color:var(--muted-foreground)}
.pill.ok{background:#18794e1f;color:var(--ok)}.pill.warn{background:#7a5d001f;color:var(--warn)}
.pill.bad{background:#c92a3a1f;color:var(--destructive)}
@media(prefers-color-scheme:dark){
.pill.ok{background:#4ade8024;color:var(--ok)}
.pill.warn{background:#facc1524;color:var(--warn)}
.pill.bad{background:#ff6b6b24;color:#ff9a9a}}
.actions{display:flex;gap:.4rem;flex-wrap:wrap;white-space:nowrap}
table{width:100%;border-collapse:collapse;font-size:.9rem}
th,td{text-align:left;padding:.62rem .5rem;border-bottom:1px solid var(--border);vertical-align:middle}
th{font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted-foreground)}
tbody tr{transition:background var(--duration)}
tbody tr:hover{background:var(--hover)}
tr:last-child td{border-bottom:none}
.scroll{overflow-x:auto}
.empty{padding:2.5rem 1rem;text-align:center;color:var(--muted-foreground)}
/* ---- kedalaman (tidak flat): kartu bertingkat ---- */
.card{box-shadow:0 1px 2px rgb(31 35 41 / .05)}
.raised{box-shadow:0 10px 24px -8px rgb(31 35 41 / .16),0 2px 6px rgb(31 35 41 / .07)}
.dark .raised{box-shadow:0 10px 30px -10px rgb(0 0 0 / .6)}
/* ---- langkah / onboarding ---- */
.steps{display:grid;gap:.85rem}
.step{display:flex;gap:.9rem;align-items:flex-start;padding:.9rem 1rem;
border:1px solid var(--border);border-radius:var(--radius);background:var(--card);
box-shadow:0 1px 2px rgb(31 35 41 / .05)}
.step.done{border-color:color-mix(in oklab,var(--status-ok) 40%,var(--border));
background:color-mix(in oklab,var(--status-ok) 6%,var(--card))}
.step .n{flex:0 0 1.9rem;height:1.9rem;display:grid;place-items:center;border-radius:999px;
background:var(--primary);color:var(--primary-ink);font-weight:800;font-size:.85rem}
.step.done .n{background:var(--status-ok);color:var(--status-ok-ink)}
.step .tx{flex:1;min-width:0}
.step .tx b{display:block;font-size:.95rem}
.step .tx span{color:var(--muted-foreground);font-size:.86rem}
.step .go{align-self:center}
.progress{height:.5rem;border-radius:999px;background:var(--muted);overflow:hidden;margin:.2rem 0 .9rem}
.progress>i{display:block;height:100%;background:var(--primary);border-radius:999px}
.tut{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;
background:var(--card);margin-bottom:1rem}
.tut img{display:block;width:100%;height:auto}
.tut .cap{padding:.7rem .9rem;font-size:.86rem;color:var(--muted-foreground);
border-top:1px solid var(--border)}
.toast{position:fixed;left:50%;bottom:1.2rem;transform:translateX(-50%) translateY(1rem);
background:var(--secondary);color:var(--secondary-foreground);padding:.6rem 1rem;
border-radius:var(--radius);box-shadow:var(--shadow2);opacity:0;pointer-events:none;
transition:opacity var(--duration) var(--ease),transform var(--duration) var(--ease);z-index:60}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
dialog{border:none;border-radius:.6rem;padding:0;box-shadow:var(--shadow2);
background:var(--card);color:var(--foreground);max-width:34rem;width:92%}
dialog::backdrop{background:#1f2329aa;backdrop-filter:blur(2px)}
dialog[open]{animation:pop var(--duration) var(--ease)}
@keyframes pop{from{opacity:0;transform:translateY(6px) scale(.98)}}
/* ---- shell: sidebar + topbar (ala panel Mortera) ---- */
.top{position:sticky;top:0;z-index:30;background:var(--card);border-bottom:1px solid var(--border);
height:var(--topbar);display:flex;align-items:center;padding:0 1rem;gap:.75rem}
.top .brand{display:flex;align-items:center;gap:.5rem;font-weight:700;letter-spacing:-.01em}
.top .logo{width:26px;height:26px;border-radius:7px;background:var(--secondary);
color:var(--logo-ink);display:grid;place-items:center;font-weight:800;font-size:.78rem}
.top .nav-links{display:none;align-items:center;gap:.25rem;margin-left:.5rem}
.top .spacer{margin-left:auto;display:flex;align-items:center;gap:.5rem}
.wrap{max-width:1120px;margin:0 auto;padding:1.5rem 1rem 3.5rem}
@media(min-width:900px){
  .top{padding-left:calc(var(--sidebar) + 1rem)}
  .wrap{margin:0 0 0 var(--sidebar);max-width:1040px}
}
/* transisi halus saat sidebar collapse/expand (bukan View Transition) */
.sidebar{transition:width var(--duration) var(--ease)}
@media(prefers-reduced-motion:reduce){.sidebar{transition:none}}
.sidebar{position:fixed;top:0;left:0;bottom:0;width:var(--sidebar);z-index:40;
background:var(--card);border-right:1px solid var(--border);flex-direction:column;
padding:1rem .75rem;gap:.25rem;display:none}
@media(min-width:900px){.sidebar{display:flex}}
.sidebar .brand{display:flex;align-items:center;gap:.5rem;font-weight:700;
padding:.25rem .5rem 1rem;letter-spacing:-.01em}
.sidebar .logo{width:28px;height:28px;border-radius:8px;background:var(--secondary);
color:var(--logo-ink);display:grid;place-items:center;font-weight:800;font-size:.8rem}
.sidebar .navlink{display:flex;align-items:center;gap:.6rem;padding:.55rem .7rem;
border-radius:var(--radius);font-size:.92rem;font-weight:550;color:var(--muted-foreground);
transition:background var(--duration),color var(--duration)}
.sidebar .navlink:hover{background:var(--hover);color:var(--foreground)}
.sidebar .navlink.on{background:color-mix(in srgb,var(--primary) 18%,transparent);
color:var(--foreground);font-weight:650}
.sidebar .ico{width:18px;height:18px;flex:0 0 auto;stroke:currentColor;fill:none;
stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:.75}
.sidebar .navlink.on .ico{opacity:1}
/* collapse: ikon saja, label disembunyikan. Lebar via --sidebar. */
.sidebar .navlink .lbl{white-space:nowrap;overflow:hidden}
html.nav-collapsed{--sidebar:4.25rem}
html.nav-collapsed .sidebar .lbl,
html.nav-collapsed .sidebar .brand-txt,
html.nav-collapsed .sidebar .side-foot{display:none}
html.nav-collapsed .sidebar{padding:1rem .55rem;align-items:stretch}
html.nav-collapsed .sidebar .navlink{justify-content:center;padding:.6rem 0}
html.nav-collapsed .sidebar .brand{justify-content:center;padding:.25rem 0 1rem}
html.nav-collapsed .sidebar .footrow{justify-content:center}
.collapse-btn{display:none;align-items:center;justify-content:center;gap:.5rem;
margin-top:.5rem;padding:.45rem;border-radius:var(--radius);border:1px solid var(--border);
background:transparent;color:var(--muted-foreground);cursor:pointer;font:inherit;font-size:.8rem}
.collapse-btn:hover{background:var(--hover);color:var(--foreground)}
@media(min-width:900px){.collapse-btn{display:flex}}
html.nav-collapsed .collapse-btn svg{transform:rotate(180deg)}
.collapse-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;
stroke-linecap:round;stroke-linejoin:round;transition:transform var(--duration)}
.sidebar .side-foot{margin-top:auto;padding-top:.75rem;border-top:1px solid var(--border);
font-size:.78rem;color:var(--muted-foreground)}
.menu-btn{position:fixed;bottom:1rem;right:1rem;z-index:45;width:3rem;height:3rem;
border-radius:999px;border:1px solid var(--border);background:var(--card);
color:var(--foreground);display:grid;place-items:center;cursor:pointer;
box-shadow:var(--shadow2)}
@media(min-width:900px){.menu-btn{display:none}}
.sidebar.open{display:flex}
.veil{position:fixed;inset:0;background:#0007;z-index:35;backdrop-filter:blur(1px)}
/* ---- auth pages ---- */
.auth-wrap{max-width:25rem;margin:2.5rem auto;padding:0 1rem}
/* Tanpa sidebar (belum login), .wrap tak boleh digeser var(--sidebar). */
body:not(:has(.sidebar)) .wrap{margin:0 auto;max-width:1120px}
@media(min-width:900px){body:not(:has(.sidebar)) .top{padding-left:1rem}}
.hero{display:grid;grid-template-columns:minmax(0,1fr);gap:1.6rem;padding:2.2rem 1.5rem;border-radius:calc(var(--radius) + .25rem);
background:linear-gradient(180deg,color-mix(in srgb,var(--primary) 12%,var(--card)),var(--card));
overflow:hidden}
.hero-copy{min-width:0}.hero .row{flex-wrap:wrap}
@media(max-width:480px){.hero .row .btn{white-space:normal;text-align:center}}
@media(min-width:860px){.hero{grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);align-items:center;
padding:2.4rem 1.8rem}}
.hero h1{font-size:2rem;line-height:1.15;max-width:22ch;font-family:var(--font-serif);
font-weight:400;letter-spacing:-.01em}
.hero-art{width:100%;height:auto;display:block;border-radius:calc(var(--radius) + .1rem);
box-shadow:var(--shadow2)}
.steps{display:grid;gap:1rem}
@media(min-width:640px){.steps{grid-template-columns:1fr 1fr}}
.steps .card h2{font-size:.98rem}
.steps .num{display:inline-grid;place-items:center;width:1.6rem;height:1.6rem;
border-radius:999px;background:var(--primary);color:var(--primary-ink);font-size:.8rem;
font-weight:800;margin-bottom:.5rem}
/* Titik denyut kecil: satu-satunya elemen SVG/lingkaran yang boleh beranimasi
   (anak elemen SVG besar tidak di-composite -> repaint tiap frame). */
.dot{display:inline-block;width:.5rem;height:.5rem;border-radius:50%;
background:var(--primary);box-shadow:0 0 0 3px #b6ff2e2e;vertical-align:middle}
/* Motion halaman publik, nol JS. Hanya transform+opacity. LONGHAND eksplisit:
   minifier menggabung animation-timeline ke shorthand dan Chrome menolaknya. */
@media(prefers-reduced-motion:no-preference){
  @supports(animation-timeline:view()){
    .reveal{animation-name:reveal-in;animation-duration:auto;animation-fill-mode:both;
      animation-timing-function:linear;animation-timeline:view();
      animation-range:entry 0% entry 100%}
    .steps .card:nth-child(2){animation-range:entry 6% entry 100%}
    .steps .card:nth-child(3){animation-range:entry 12% entry 100%}
    .steps .card:nth-child(4){animation-range:entry 18% entry 100%}
  }
  @keyframes reveal-in{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
  .dot{animation:pulse 2.6s var(--ease) infinite}
  @keyframes pulse{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
  /* Entrance tombol login Telegram. fill-mode BACKWARDS (bukan both) supaya
     :active tetap bekerja setelah animasi selesai. */
  .btn[data-tg-login]{animation:btn-in .5s var(--ease) .12s backwards}
  @keyframes btn-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
}
/* ---- Pengaturan ---- */
.set-head{margin-bottom:1rem}.set-head p{margin:.25rem 0 0}
.set-chips{display:grid;gap:.6rem;grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:1rem}
@media(min-width:900px){.set-chips{grid-template-columns:repeat(4,minmax(0,1fr))}}
.set-chip{display:flex;align-items:center;gap:.7rem;padding:.7rem .8rem;min-width:0;border:1px solid var(--border);
border-radius:var(--radius);background:var(--card);box-shadow:0 1px 2px rgb(31 35 41 / .05);
transition:transform var(--duration) var(--ease),border-color var(--duration)}
.set-chip:hover{transform:translateY(-2px);border-color:var(--ring)}
.set-chip .stat-ico{flex-basis:2.2rem;height:2.2rem;border-radius:.6rem}
.set-chip span:last-child{min-width:0;display:flex;flex-direction:column}
.set-chip b{font-size:.88rem}.set-chip small{font-size:.78rem;color:var(--sc);font-weight:600;
overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.set-grid{display:grid;gap:1rem;grid-template-columns:minmax(0,1fr)}
.set-col{display:contents}
#set-toko{order:1}#set-bot{order:2}#set-notif{order:3}#set-bayar{order:4}
@media(min-width:1100px){.set-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start}
.set-col{display:flex;flex-direction:column;gap:1rem;min-width:0}}
.set-card{scroll-margin-top:calc(var(--topbar) + 1rem)}
.set-card:target{border-color:var(--ring);box-shadow:0 0 0 3px #6e9b1226}
.set-card form{gap:.85rem}
.lead{margin:-.35rem 0 0;font-size:.9rem}
.hint{font-size:.82rem;margin:.3rem 0 0}
.row.rw{flex-wrap:wrap}
.field-count,.field-btn{position:relative;display:flex;align-items:center;gap:.4rem}
.field-count input{padding-right:3.6rem}
.field-count .count{position:absolute;right:.65rem;font-size:.75rem;pointer-events:none}
.count{font-variant-numeric:tabular-nums;font-size:.75rem}
.count.near{color:var(--warn);font-weight:700}
.btn.ghost{border-color:transparent;background:transparent;color:var(--muted-foreground)}
.btn.ghost:hover{border-color:var(--border);color:var(--foreground)}
.btn:disabled,.btn[disabled]{opacity:.5;cursor:not-allowed;transform:none;filter:none}
.bot-id{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;padding:.75rem .85rem;
border:1px solid color-mix(in oklab,var(--ok) 35%,var(--border));border-radius:var(--radius);
background:color-mix(in oklab,var(--ok) 6%,var(--card))}
.bot-id.warn{border-color:color-mix(in oklab,var(--warn) 40%,var(--border));
background:color-mix(in oklab,var(--warn) 7%,var(--card))}
.bot-id>div:nth-child(2){flex:1 1 12rem;min-width:0;display:flex;flex-direction:column}
.bot-id>div:nth-child(2) b{overflow-wrap:anywhere}
.bot-id .muted{font-size:.84rem}
.bot-id .actions{flex-wrap:wrap}
.mini-steps,.flow{margin:0;padding:0;list-style:none;display:grid;gap:.45rem;counter-reset:ms}
.mini-steps li{position:relative;padding-left:1.9rem;font-size:.9rem;counter-increment:ms}
.mini-steps li::before{content:counter(ms);position:absolute;left:0;top:.05rem;width:1.35rem;height:1.35rem;
border-radius:999px;display:grid;place-items:center;font-size:.75rem;font-weight:800;
background:var(--primary);color:var(--primary-ink)}
.flow li{display:flex;align-items:flex-start;gap:.6rem;font-size:.9rem}
.flow-n{flex:0 0 1.35rem;height:1.35rem;border-radius:999px;display:grid;place-items:center;
font-size:.75rem;font-weight:800;background:var(--muted);color:var(--foreground)}
label.check{display:flex;align-items:center;gap:.45rem;font-weight:550;color:inherit;font-size:.88rem}
label.check input{width:auto;margin:0}
.sub{padding-top:.85rem;border-top:1px dashed var(--border)}
.segbtn{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border);border-radius:999px;background:var(--muted)}
.segbtn button{border:0;background:transparent;font:inherit;font-size:.82rem;font-weight:650;
padding:.32rem .85rem;border-radius:999px;color:var(--muted-foreground);cursor:pointer;
transition:background var(--duration),color var(--duration)}
.segbtn button.on{background:var(--card);color:var(--foreground);box-shadow:var(--shadow)}
.callout{padding:.85rem .9rem;border:1px dashed var(--ring);border-radius:var(--radius);
background:color-mix(in oklab,var(--primary) 8%,var(--card))}
.callout p{margin:.2rem 0 0}
details.more{border-top:1px solid var(--border);padding-top:.75rem}
details.more summary{cursor:pointer;font-weight:600;font-size:.9rem;color:var(--muted-foreground);
list-style:none;display:flex;align-items:center;gap:.4rem}
details.more summary::-webkit-details-marker{display:none}
details.more summary::before{content:"";width:.45rem;height:.45rem;border-right:2px solid currentColor;
border-bottom:2px solid currentColor;transform:rotate(-45deg);transition:transform var(--duration) var(--ease)}
details.more[open] summary::before{transform:rotate(45deg)}
details.more[open] summary{margin-bottom:.75rem;color:var(--foreground)}
.tg-bubble{max-width:22rem;padding:.65rem .8rem;border-radius:.9rem .9rem .9rem .25rem;
background:var(--muted);font-size:.86rem;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere}
a.u{text-decoration:underline;text-underline-offset:2px}
.spin{width:.9rem;height:.9rem;border-radius:999px;border:2px solid var(--border);border-top-color:var(--ring);
flex:0 0 auto;animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(1turn)}}
.notify-ok{color:var(--ok);font-weight:600}.notify-bad{color:var(--destructive);font-weight:600}
/* ---- Produk ---- */
.pgrid{display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(min(100%,22rem),1fr));margin-top:1rem}
.pcard{display:flex;gap:.9rem;padding:.9rem;align-items:flex-start;
transition:transform var(--duration) var(--ease),box-shadow var(--duration) var(--ease)}
.pcard:hover{transform:translateY(-2px);box-shadow:0 10px 22px -12px rgb(31 35 41 / .28)}
.pcard.off{opacity:.62}
.pthumb{flex:0 0 5.2rem;height:5.2rem;border-radius:.6rem;overflow:hidden;background:var(--muted);
display:grid;place-items:center;border:1px solid var(--border)}
.pthumb img{width:100%;height:100%;object-fit:cover;display:block}
.ph{color:var(--muted-foreground);display:grid;place-items:center}.ph .ico{width:26px;height:26px}
.pbody{flex:1;min-width:0;display:flex;flex-direction:column;gap:.45rem}
.ptop{display:flex;gap:.5rem;justify-content:space-between;align-items:flex-start}
.pname{min-width:0;display:flex;flex-direction:column}.pname b{overflow-wrap:anywhere}
.pname .mono{font-size:.78rem}
.pmeta{display:flex;flex-wrap:wrap;gap:.4rem .6rem;align-items:center;font-size:.86rem}
.pmeta b{font-size:1rem}
.pill.kind{flex:0 0 auto;background:color-mix(in oklab,var(--primary) 22%,var(--card));color:var(--foreground)}
.pbody>.muted{font-size:.82rem;overflow-wrap:anywhere}
.pbody .actions{margin-top:.15rem;flex-wrap:wrap}
[hidden]{display:none!important}
dialog.wide{width:min(46rem,calc(100vw - 1.5rem));max-width:46rem;max-height:calc(100dvh - 2rem)}
dialog.wide>form,dialog.wide>div{max-height:calc(100dvh - 2rem);overflow:auto}
fieldset.kinds{border:0;margin:0;padding:0;display:grid;gap:.5rem;grid-template-columns:repeat(auto-fit,minmax(7.4rem,1fr))}
.kdesc{margin:-.35rem 0 0;padding:.6rem .75rem;border-radius:var(--radius);background:var(--muted);font-size:.86rem}
textarea.prose{font-family:var(--font-sans);font-size:.95rem}
fieldset.kinds legend{font-size:.8rem;font-weight:600;color:var(--muted-foreground);margin-bottom:.35rem;padding:0}
.kopt{margin:0;cursor:pointer;display:block;color:inherit;font-weight:inherit}
.kopt input{position:absolute;opacity:0;width:1px;height:1px}
.kbox{display:flex;flex-direction:column;align-items:flex-start;gap:.35rem;height:100%;padding:.65rem .7rem;border:1px solid var(--border);
border-radius:var(--radius);background:var(--card);transition:border-color var(--duration),background var(--duration)}
.kbox .stat-ico{flex:0 0 auto;width:2rem;height:2rem;border-radius:.5rem}
.kbox b{font-size:.9rem}.kbox small{font-size:.78rem;color:var(--muted-foreground);line-height:1.35}
.kbox em{font-style:normal;font-size:.74rem;color:var(--muted-foreground);border-top:1px dashed var(--border);padding-top:.3rem;margin-top:auto}
.kopt:hover .kbox{border-color:var(--ring)}
.kopt.on .kbox,.kopt input:checked+.kbox{border-color:var(--ring);background:color-mix(in oklab,var(--primary) 12%,var(--card));
box-shadow:0 0 0 2px #6e9b1233}
.kopt input:focus-visible+.kbox{outline:2px solid var(--ring);outline-offset:2px}
.vbox{padding:.75rem;border:1px dashed var(--border);border-radius:var(--radius)}
.vhead,.vrow{display:grid;gap:.4rem;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) auto;align-items:center}
.vhead{font-size:.75rem;font-weight:600}
.vrow:has(input[data-f=content]:not([hidden])),.vhead:has(span[data-kinds="content"]:not([hidden])){grid-template-columns:minmax(0,1.2fr) minmax(0,.9fr) minmax(0,1.4fr) minmax(0,.8fr) auto}
.vrow:has(input[data-f=quota]:not([hidden])):not(:has(input[data-f=content]:not([hidden]))),
.vhead:has(span[data-kinds~="file"]:not([hidden])):not(:has(span[data-kinds="content"]:not([hidden]))){grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) minmax(0,.8fr) auto}
.imgbox{display:flex;gap:.9rem;align-items:center}
.imgprev{flex:0 0 5.5rem;height:5.5rem;border-radius:.6rem;overflow:hidden;background:var(--muted);display:grid;place-items:center;border:1px solid var(--border)}
.imgprev img{width:100%;height:100%;object-fit:cover}
.stock-sum{display:flex;gap:.8rem;flex-wrap:wrap;font-size:.88rem}
.stock-prev,.stock-list{margin:0;padding-left:1.3rem;display:grid;gap:.3rem;font-size:.84rem}
.stock-prev li{white-space:pre-wrap;overflow-wrap:anywhere;font-family:var(--font-mono);font-size:.8rem}
.stock-list li{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
.stock-list li .mono{flex:1 1 12rem;white-space:pre-wrap;overflow-wrap:anywhere}
.binput{display:inline-flex;gap:.3rem;align-items:center;font-size:.8rem;color:var(--muted-foreground);margin-top:.2rem}
.binput .ico{width:13px;height:13px}
.chan{display:inline-flex;align-items:center;gap:.3rem;white-space:nowrap}
.chan .ico{width:1em;height:1em}
.chanrow{margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;font-size:.9rem;font-weight:600}
.chanrow .sep{color:var(--muted-foreground)}
.soon{font-size:.7rem;font-weight:700;padding:.05rem .4rem;border-radius:999px;background:var(--muted);color:var(--muted-foreground)}
/* ---- ikon, kartu ringkasan, chart (Fase 1: tidak flat) ---- */
.ico{width:18px;height:18px;flex:0 0 auto;stroke:currentColor;fill:none;stroke-width:1.8;
stroke-linecap:round;stroke-linejoin:round}
.t-ok,.s-ok{--sc:var(--ok)}.t-warn,.s-warn{--sc:var(--warn)}
.t-bad,.s-bad{--sc:var(--destructive)}.t-mute,.s-mute{--sc:var(--muted-foreground)}
.num{font-variant-numeric:tabular-nums}
.hd{display:flex;align-items:center;gap:.5rem}
.hd .ico{color:var(--muted-foreground)}
.pill .ico{width:12px;height:12px;stroke-width:2.2}
.g-stats{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr))}
.g-main{display:grid;gap:1rem;grid-template-columns:minmax(0,1fr)}
.g-main>.g-stats{align-content:start}
@media(min-width:1180px){.g-main{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}}
.stat{display:flex;align-items:center;gap:.85rem;
transition:transform var(--duration) var(--ease),box-shadow var(--duration) var(--ease)}
.stat:hover{transform:translateY(-2px);box-shadow:0 10px 22px -12px rgb(31 35 41 / .28)}
.stat-ico{flex:0 0 2.6rem;height:2.6rem;border-radius:.75rem;display:grid;place-items:center;
color:var(--sc,var(--muted-foreground));
background:color-mix(in srgb,var(--sc,var(--muted-foreground)) 15%,transparent)}
.stat-ico.t-brand{background:var(--primary);color:var(--primary-ink)}
.stat-ico .ico{width:20px;height:20px}
.stat-tx{min-width:0}.stat .lbl2{font-size:.8rem}
.stat h2{font-size:1.28rem;margin-top:.1rem;overflow-wrap:anywhere}
.segctl{position:relative;display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border);
border-radius:999px;background:var(--muted)}
.segctl input{position:absolute;opacity:0;width:1px;height:1px;margin:0;padding:0;border:0;
pointer-events:none}
.segctl label{display:inline-block;margin:0;padding:.28rem .8rem;border-radius:999px;
font-size:.8rem;font-weight:650;color:var(--muted-foreground);cursor:pointer;
transition:background var(--duration),color var(--duration)}
.segctl input:checked+label{background:var(--card);color:var(--foreground);box-shadow:var(--shadow)}
.segctl input:focus-visible+label{outline:2px solid var(--ring);outline-offset:2px}
.chartcard:has(#rng30:checked) .rng7,.chartcard:not(:has(#rng30:checked)) .rng30{display:none}
.chart{margin:0;color:var(--ring)}
.chart .chart-plot{display:grid;grid-template-columns:3.1rem minmax(0,1fr);gap:.45rem}
.chart .yax{position:relative;height:11rem;font-size:.7rem;color:var(--muted-foreground);
text-align:right}
.chart .yax span{position:absolute;right:0;transform:translateY(-50%);white-space:nowrap}
.chart .plot{position:relative;height:11rem}
.chart .plot svg{display:block;width:100%;height:100%;overflow:visible}
.chart .grid line{stroke:var(--border);stroke-width:1;vector-effect:non-scaling-stroke}
.chart .line{stroke:currentColor;stroke-width:2.5;vector-effect:non-scaling-stroke;
stroke-linejoin:round;stroke-linecap:round}
.chart .mk{position:absolute;width:.8rem;height:.8rem;border-radius:50%;background:var(--card);
border:2.5px solid currentColor;transform:translate(-50%,-50%);
box-shadow:0 0 0 3px color-mix(in srgb,currentColor 20%,transparent)}
.chart .xax{position:relative;height:1.3rem;margin:.35rem 0 0 3.55rem;font-size:.7rem;
color:var(--muted-foreground)}
.chart .xax span{position:absolute;transform:translateX(-50%);white-space:nowrap}
.chart .xax span:first-child{transform:none}
.chart .xax span:last-child{transform:translateX(-100%)}
.chart-cap{margin-top:.6rem;font-size:.86rem;color:var(--muted-foreground)}
.chart-cap b{color:var(--foreground)}
.chart-sm .yax,.chart-sm .plot{height:6.5rem}
.chart-empty-msg{padding:2.2rem 1rem;text-align:center;color:var(--muted-foreground);
border:1px dashed var(--border);border-radius:var(--radius)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);
clip-path:inset(50%);white-space:nowrap}
.donut-wrap{display:flex;align-items:center;gap:1.3rem;flex-wrap:wrap;margin:0}
.donut{position:relative;width:9rem;height:9rem;flex:0 0 auto}
.donut svg{display:block;width:100%;height:100%}
.donut .trk{fill:none;stroke:var(--muted);stroke-width:5}
.donut .seg{fill:none;stroke:var(--sc);stroke-width:5}
.donut .dc{position:absolute;inset:0;display:grid;place-content:center;text-align:center}
.donut .dc b{font-size:1.6rem;line-height:1.1;font-variant-numeric:tabular-nums}
.donut .dc span{font-size:.75rem;color:var(--muted-foreground)}
.donut-note{margin:.6rem 0 0;font-size:.85rem}
.legend{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}
.legend li{display:flex;align-items:center;gap:.5rem;font-size:.88rem}
.legend .sw{width:.7rem;height:.7rem;border-radius:3px;background:var(--sc);flex:0 0 auto}
.legend .lb{flex:1 1 auto;min-width:5.5rem}
.legend .pc{min-width:2.6rem;text-align:right;font-size:.8rem}
.row-legend{display:flex;flex-wrap:wrap;gap:.4rem 1.2rem;margin-top:.8rem}
.row-legend .lb{flex:0 1 auto;min-width:0}
.hbars{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:.95rem}
.hb-top{display:flex;justify-content:space-between;align-items:baseline;gap:.75rem;
font-size:.9rem}
.hb-top .nm{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hb-top .rk{display:inline-grid;place-items:center;width:1.25rem;height:1.25rem;
margin-right:.45rem;border-radius:999px;background:var(--muted);
color:var(--muted-foreground);font-size:.7rem;font-weight:700}
.hb-top .val{font-size:.82rem;color:var(--muted-foreground);white-space:nowrap}
.bar{display:block;height:.5rem;margin-top:.4rem;border-radius:999px;background:var(--muted);
overflow:hidden}
.bar i{display:block;height:100%;width:var(--w);border-radius:999px;
background:linear-gradient(90deg,var(--ring),color-mix(in srgb,var(--ring) 55%,var(--primary)))}
.stackbar{margin:0}
.sb-bar{display:flex;gap:2px;height:.85rem;border-radius:999px;overflow:hidden;
background:var(--muted)}
.sb-bar i{display:block;min-width:6px;background:var(--sc)}
.meter{display:block;height:.4rem;min-width:5rem;margin-top:.4rem;border-radius:999px;
background:var(--muted);overflow:hidden}
.meter i{display:block;height:100%;border-radius:inherit;background:var(--sc)}
.chips{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;margin:.2rem 0 0;padding:0}
.chips li{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .7rem;
border:1px solid var(--border);border-radius:999px;background:var(--card);font-size:.82rem;
font-weight:600}
.chips .ico{width:15px;height:15px;color:var(--ring)}
.step-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}
.step-top .num{margin:0}
.step-ico{display:grid;place-items:center;width:2.2rem;height:2.2rem;border-radius:.65rem;
background:color-mix(in srgb,var(--primary) 24%,transparent);color:var(--foreground)}
.lift{transition:box-shadow var(--duration) var(--ease),border-color var(--duration)}
.lift:hover{box-shadow:0 12px 26px -14px rgb(31 35 41 / .32);border-color:var(--ring)}
@media(prefers-reduced-motion:no-preference){
  .rise{animation:rise .55s var(--ease) calc(var(--i,0)*70ms) backwards}
  @keyframes rise{from{opacity:0;transform:translateY(10px)}}
  .chart .plot svg{animation:wipe 1s var(--ease) .15s backwards}
  @keyframes wipe{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
  .chart .mk{animation:mk-in .45s var(--ease) 1s backwards}
  @keyframes mk-in{from{opacity:0;transform:translate(-50%,-50%) scale(.2)}}
  .donut .seg{animation:seg-in .9s var(--ease) calc(var(--i,0)*.14s + .1s) backwards}
  @keyframes seg-in{from{stroke-dasharray:0 100}}
  .bar i,.sb-bar i,.meter i{transform-origin:left center;
    animation:grow .85s var(--ease) calc(var(--i,0)*.09s + .15s) backwards}
  @keyframes grow{from{transform:scaleX(0)}}
  .step-ico{animation:ico-in .5s var(--ease) .1s backwards}
  @keyframes ico-in{from{opacity:0;transform:scale(.6) rotate(-8deg)}}
}
/* Animasi masuk hanya pada kunjungan pertama tiap halaman dalam satu sesi tab: pindah halaman
   berikutnya langsung tampil final (html.seen dipasang skrip kecil di <head>). */
html.seen .rise,html.seen .chart .plot svg,html.seen .chart .mk,html.seen .donut .seg,
html.seen .bar i,html.seen .sb-bar i,html.seen .meter i,html.seen .step-ico,
html.seen .btn[data-tg-login]{animation:none!important}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
