/* Tambahan khusus Python Lab. Semua warna dan komponen dasar datang dari style.css. */
.rt{font-size:var(--t-xs);color:var(--muted);white-space:nowrap;display:inline-flex;align-items:center;gap:6px}
.rt::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--warm)}
.rt.ready::before{background:var(--good)}
.rt.error::before{background:var(--bad)}
.rt.busy::before{animation:rtpulse 1.1s ease-in-out infinite}
.rt button{border:0;background:none;padding:0;color:var(--accent-ink);font-weight:600;cursor:pointer;text-decoration:underline}
@keyframes rtpulse{50%{opacity:.3}}
@media (prefers-reduced-motion:reduce){.rt.busy::before{animation:none}}
.lablink{font-size:var(--t-xs);font-weight:600;color:var(--muted);text-decoration:none;white-space:nowrap;padding:5px 8px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg)}
.lablink:hover{color:var(--ink);border-color:var(--accent)}

.edhead .chars{margin-right:auto}
.edhead select{margin-left:0}
#ind{max-width:150px}

.pyout,.pyval,.pyerr{font-family:var(--f-mono);font-size:var(--t-xs);line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere;margin:0 0 8px}
.pyerr{color:var(--bad-ink)}
.pyerr code{display:block;color:var(--ink);margin-bottom:4px;font-family:inherit}
.pyfig{display:block;max-width:100%;height:auto;margin:0 0 8px;border-radius:var(--r-sm);background:#FFFFFF}
.pywarn{font-size:var(--t-xs);color:var(--warm-ink);margin:0 0 6px}
.gridt th.pyidx,.gridt td.pyidx{color:var(--muted);border-right:1px solid var(--line)}
.gridt tr.types th{text-transform:none;letter-spacing:0;font-family:var(--f-mono)}
.firstload{font-size:var(--t-xs);color:var(--muted);margin:0}
.page>.soon{max-width:560px;margin:40px auto;padding:0 16px;text-align:center}
.page>.soon h2{font-family:var(--f-display);font-size:var(--t-2xl);margin:0 0 8px}
.page>.soon p{color:var(--muted);margin:0 0 14px}
.notes textarea{width:100%;box-sizing:border-box;min-height:90px;font:inherit;font-size:var(--t-xs);padding:8px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg);color:var(--ink);resize:vertical}

@media (max-width:900px){.rt{font-size:0;gap:0}.lablink{display:none}}
@media (max-width:700px){
  .top{flex-wrap:wrap}
  .modes{order:3;flex:1 0 100%}
  #ind{max-width:118px}
  .edhead{flex-wrap:wrap}
  .edhead select{max-width:130px}
  #b-theme{display:none}
}

/* ---- Belajar: kode, memori, layar ---- */
.learn pre.sql.py{white-space:pre;tab-size:4}
.learn pre.sql.py .ln{display:block;padding:0 8px;margin:0 -8px;border-left:3px solid transparent;min-height:1.55em}
.learn pre.sql.py .ln.on{background:var(--code-line);border-left-color:var(--code-acc)}
.learn pre.sql .b{color:var(--code-kw)}
.pyvis{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:12px;align-items:start}
.pyvis .vside{display:grid;gap:10px}
.pyvis h4{margin:0 0 6px;font-size:var(--t-xs);color:var(--muted);font-family:var(--f-body)}
.vmem,.vout{background:var(--bg);border:1px solid var(--line);border-radius:var(--r-ctl);padding:10px 12px}
.vout pre{margin:0;font-family:var(--f-mono);font-size:var(--t-xs);white-space:pre-wrap;min-height:1.4em}
.var{display:flex;align-items:baseline;gap:8px;padding:5px 8px;margin:0 0 5px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);font-family:var(--f-mono);font-size:var(--t-xs)}
.var .vn{font-weight:600;color:var(--accent-ink)}
.var .vv{flex:1;min-width:0;overflow-wrap:anywhere}
.var .vt{font-size:var(--t-xs);color:var(--muted)}
.var.new{border-color:var(--accent);background:var(--accent-soft)}
.learn .runbox{margin:6px 0 10px}
.pyres{margin-top:8px}
.pyres:empty{display:none}
.learn .pyout,.learn .pyval,.learn .pyerr{background:var(--bg);border:1px solid var(--line);border-radius:var(--r-ctl);padding:8px 12px;margin:6px 0}
.learn .expect{margin:6px 0 0;font-size:var(--t-xs)}
.learn .expect summary{cursor:pointer;color:var(--muted)}
.bridge{margin-top:18px;background:var(--accent-soft);border:1px solid var(--line);border-radius:var(--r-ctl);padding:12px 16px}
.bridge h3{margin:0 0 4px;font-size:var(--t-md)}
textarea.pyed{tab-size:4;white-space:pre;overflow:auto}
code.exp{white-space:pre-wrap;background:var(--bg);padding:1px 6px;border-radius:var(--r-sm)}
@media (max-width:760px){.pyvis{grid-template-columns:1fr}}
.learn table.pt{border-collapse:collapse;width:100%;font-size:var(--t-sm);margin:10px 0}
.learn table.pt th{text-align:left;padding:7px 10px;border-bottom:2px solid var(--line);background:var(--bg)}
.learn table.pt td{padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:top;line-height:1.5}
.learn table.pt td:first-child{white-space:nowrap;font-weight:600}

/* nomor bab lebih terbaca di daftar kiri dan di atas judul */
.learn-side a .no{display:inline-flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;border-radius:var(--r-sm);background:var(--sunk);color:var(--ink);font-family:var(--f-mono,monospace);font-size:var(--t-xs);font-weight:700}
.learn-side a.on .no{background:var(--accent);color:var(--surface)}
.learn-side a.ok .no{background:var(--good-soft);color:var(--good-ink)}
.learn-side a{align-items:center}

.learn-side a .meta{display:block;margin-top:1px;font-size:var(--t-xs);font-weight:400;color:var(--muted)}
.learn-side a .meta .lv{font-style:normal;font-weight:600;color:var(--accent-ink)}
.learn-side a .meta .lv.pendalaman{color:var(--warm-ink)}
.learn-side a.skiplink{margin:2px 0 6px;color:var(--accent-ink);font-weight:600}

/* ---- Latihan / Daftar Soal ---- */
@keyframes hintpulse{0%,100%{box-shadow:0 0 0 0 transparent}50%{box-shadow:0 0 0 5px color-mix(in srgb,var(--warm) 35%,transparent)}}
.cm.lv1{color:var(--good-ink);background:color-mix(in srgb,var(--good) 12%,transparent)}
.cm.lv2{color:var(--warm-ink);background:var(--warm-soft)}
.cm.lv3{color:var(--bad-ink);background:color-mix(in srgb,var(--bad) 10%,transparent)}
.cm.st-ok{color:var(--good-ink);background:color-mix(in srgb,var(--good) 14%,transparent)}
.em.nudge,.nudge{font-style:normal;color:var(--warm-ink);font-weight:600}
.gl{margin:6px 0 0;font-size:var(--t-xs)}
.plist{padding:18px 22px;max-width:980px}
.plist h2{margin:0 0 12px;font-size:var(--t-xl)}

/* ---- Case Study, Interview, Progres ---- */
#prompt .banner{padding:8px 12px;border-radius:var(--r-ctl);margin:8px 0;font-size:var(--t-xs);border:1px solid var(--line);background:var(--bg)}
#prompt .banner.err{background:color-mix(in srgb,var(--bad) 14%,var(--surface))}
#prompt .banner.ok{background:color-mix(in srgb,var(--good) 16%,var(--surface))}
#prompt .insight{padding:0;margin:8px 0}
#prompt .insight textarea{min-height:64px;resize:vertical}
ul.rubric{list-style:none;margin:6px 0 10px;padding:0;font-size:var(--t-xs)}
ul.rubric li{padding:2px 0}
#prompt .pnav{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
#prompt details.ctx{margin:6px 0 4px;font-size:var(--t-xs)}
#prompt details.ctx summary{cursor:pointer;color:var(--muted)}
.page .tw{overflow-x:auto}
