/* GAEA Engine — kulit aplikasi. Kaca ala iOS: skala jarak 4/8/12/16/20/24,
 * pil untuk kendali, kartu 18 px, panel 24 px, huruf sistem. Token warna dan
 * radius ada di core/ui.css. */

:root{
  --f:-apple-system,"SF Pro Text","Segoe UI Variable Text","Segoe UI",Inter,system-ui,sans-serif;
  --tepi-halus:rgba(255,255,255,.08);
  --tepi:rgba(255,255,255,.12);
  --isi-1:rgba(255,255,255,.045);
  --isi-2:rgba(255,255,255,.08);
  --isi-3:rgba(255,255,255,.13);
  --aksen:127,191,147;
  --merah:224,96,72;
  --kuning:232,163,61;
  --cincin:0 0 0 3px rgba(127,191,147,.32);
  --gerak:.16s cubic-bezier(.2,.7,.2,1);
}
*,*::before,*::after{box-sizing:border-box}
html,body{height:100%;margin:0;overflow:hidden;color:var(--gaea-tinta);
  font:14px/1.5 var(--f);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
body{display:flex;flex-direction:column;
  background:
    radial-gradient(1100px 700px at 8% -10%,#15342A 0%,transparent 58%),
    radial-gradient(900px 600px at 95% 0%,#142C3A 0%,transparent 55%),
    #0B110F}
b,strong,h1,h2,h3,h4{letter-spacing:-.01em}
button,input,select,textarea{font-family:var(--f)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:rgba(255,255,255,.12);border-radius:999px;border:3px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.22);background-clip:padding-box;border:3px solid transparent}
::-webkit-scrollbar-track{background:transparent}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* Ikon dipakai sebagai TOPENG, bukan gambar: SVG di dalam img adalah dokumen
   terpisah yang tidak mewarisi color, jadi currentColor di dalamnya jatuh ke
   hitam - tak terlihat di papan gelap, tanpa satu galat pun. */
.ik{width:var(--u,18px);height:var(--u,18px);flex:0 0 auto;display:inline-block;
  background-color:currentColor;
  -webkit-mask:var(--ikon) center/contain no-repeat;
  mask:var(--ikon) center/contain no-repeat}

/* ─────────────── bilah atas */
#bilah{display:flex;align-items:center;gap:12px;padding:12px 16px;flex:0 0 auto}
.merek{display:flex;align-items:center;gap:10px;height:40px;padding:0 18px;flex:0 0 auto;
  border-radius:var(--gaea-r-penuh);font-weight:700;font-size:14px;letter-spacing:-.01em;
  background:var(--gaea-kaca-2);border:1px solid var(--gaea-kaca-tepi);
  -webkit-backdrop-filter:blur(var(--gaea-kabur)) saturate(1.35);
  backdrop-filter:blur(var(--gaea-kabur)) saturate(1.35);
  box-shadow:var(--gaea-naung-1),inset 0 1px 0 var(--gaea-kaca-kilau)}
.merek i{width:8px;height:8px;border-radius:var(--gaea-r-penuh);
  background:var(--gaea-aman);box-shadow:0 0 10px var(--gaea-aman)}

#tabs{display:flex;gap:2px;padding:4px;height:40px;align-items:center;border-radius:var(--gaea-r-penuh);
  background:var(--gaea-kaca-2);border:1px solid var(--gaea-kaca-tepi);
  -webkit-backdrop-filter:blur(var(--gaea-kabur)) saturate(1.35);
  backdrop-filter:blur(var(--gaea-kabur)) saturate(1.35);
  box-shadow:var(--gaea-naung-1),inset 0 1px 0 var(--gaea-kaca-kilau);
  overflow-x:auto;min-width:0;scrollbar-width:none}
#tabs::-webkit-scrollbar{display:none}
#tabs button{border:0;background:transparent;color:var(--gaea-redup);cursor:pointer;
  height:30px;padding:0 16px;border-radius:var(--gaea-r-penuh);white-space:nowrap;
  font:600 13px var(--f);transition:background var(--gerak),color var(--gerak)}
#tabs button:hover{color:var(--gaea-tinta);background:var(--isi-2)}
#tabs button[aria-selected="true"]{background:rgba(var(--aksen),.20);color:#CFEBD9;
  box-shadow:inset 0 0 0 1px rgba(var(--aksen),.38)}
#tabs button:focus-visible{outline:0;box-shadow:var(--cincin)}
#tabs button:disabled{opacity:.6;cursor:default}
#tabs .tambah{color:var(--gaea-aman);font-size:17px;font-weight:600;padding:0 13px}
#tabs .pemisah{width:1px;height:18px;background:var(--tepi);margin:0 4px;flex:0 0 auto}
.renggang{flex:1;min-width:8px}

/* Apa pun yang membawa keadaan TIDAK berkaca. Kaca menurunkan kontras, dan
   peringatan yang bersaing dengan latarnya adalah peringatan yang tidak sampai. */
#sambung{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 16px;
  flex:0 0 auto;border-radius:var(--gaea-r-penuh);font-size:12.5px;font-weight:600;
  background:var(--gaea-pekat);border:1px solid var(--gaea-pekat-tepi);
  box-shadow:var(--gaea-naung-1);max-width:min(34vw,520px)}
.kv-judul{margin-top:10px;font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--gaea-redup)}
.kv-daftar{display:flex;flex-direction:column;gap:4px}
.kv-baris{display:flex;gap:6px;align-items:center}
.kv-baris .gaea-masukan{flex:1}
.sumber-koneksi{display:flex;flex-direction:column;gap:6px;padding:8px 10px;margin:4px 0;
  border-left:2px solid rgba(var(--aksen),.45);background:rgba(255,255,255,.02);border-radius:0 8px 8px 0}
.uji-hasil{max-height:220px;overflow:auto;padding:8px 10px;border-radius:var(--gaea-r-1);
  background:rgba(0,0,0,.35);font:11.5px/1.45 ui-monospace,monospace;white-space:pre-wrap;color:var(--gaea-tinta)}

/* Dialog pendaftaran sumber: tab di atas, ⓘ di ujung tiap baris.
 *
 * Kolom labelnya TETAP selebar 132px supaya isian di semua tab berbaris di
 * garis yang sama; tanpa itu, tiap tab tampak seperti formulir yang berbeda.
 * Baris tanpa keterangan tetap menyisakan tempat ikonnya (.sf-kosong) agar
 * ujung kanan isian tidak melompat-lompat antar baris. */
.sumber-modal{width:min(720px,94vw);max-height:86vh;gap:0;padding:4px}
.sumber-modal .dok-kepala{margin:0 0 10px;border-radius:var(--gaea-r-2) var(--gaea-r-2) 0 0}
.sumber-modal .dok-kepala b{font-weight:600}
.sumber-modal .dok-kepala .ikon-aksi{margin-left:auto}
.sumber-modal .subtab{margin:0 8px 12px}
.sumber-modal-isi{flex:1;min-height:0;overflow:auto;padding:0 10px 4px}
.sumber-modal-kaki{margin:10px 10px 6px;padding-top:12px;border-top:1px solid var(--tepi-halus)}
.sf-baris{display:flex;align-items:center;gap:10px;margin:0 0 10px}
.sf-baris>span{flex:0 0 132px;font-size:12.5px;color:var(--gaea-redup);line-height:1.3}
.sf-baris>.gaea-masukan,.sf-baris>.kv-daftar{flex:1;min-width:0}
.sf-baris>textarea.gaea-masukan{resize:vertical}
.sf-baris>.tombol{flex:0 0 auto}
.sf-baris>.info-ik{flex:0 0 auto}
.sf-kosong{flex:0 0 22px}
.sf-kotak{display:flex;flex-direction:column;margin:0 0 10px;padding:12px 12px 2px;
  border-left:2px solid rgba(var(--aksen),.45);background:rgba(255,255,255,.025);
  border-radius:0 var(--gaea-r-2) var(--gaea-r-2) 0}
.sf-kotak>p.redup{margin:0 0 10px}
.sumber-modal .uji-hasil{margin:0 0 10px}

/* Pesan: tumpukan di sudut kanan bawah, bukan bilah selebar layar. */
/* Lebarnya DITENTUKAN, bukan diserahkan pada isi.
 *
 * Wadah yang menyusut mengikuti isinya, dengan anak yang lebarnya persen dari
 * wadah itu, adalah lingkaran yang diselesaikan peramban dengan lebar nol —
 * tumpukan pesan yang tingginya benar tetapi tidak selebar satu piksel pun,
 * dan mendarat di luar layar. */
#pesan{position:fixed;right:16px;bottom:16px;left:auto;top:auto;z-index:120;
  display:flex;flex-direction:column;align-items:flex-end;gap:6px;height:auto;padding:0;
  background:none;border:0;pointer-events:none;
  width:max-content;max-width:min(420px,60vw)}
#pesan .pesan-butir{pointer-events:auto;cursor:pointer;max-width:100%;
  display:block;padding:9px 13px;border-radius:var(--gaea-r-2);font-size:12.5px;line-height:1.35;
  background:var(--gaea-kaca-3);border:1px solid var(--gaea-kaca-tepi);color:var(--gaea-tinta);
  box-shadow:var(--gaea-naung-2);
  -webkit-backdrop-filter:blur(var(--gaea-kabur)) saturate(1.3);backdrop-filter:blur(var(--gaea-kabur)) saturate(1.3);
  animation:pesanMasuk .18s ease-out}
#pesan .pesan-butir.pergi{opacity:0;transform:translateY(4px);transition:opacity .2s,transform .2s}
#pesan .pesan-butir[data-jenis="aman"]{color:var(--gaea-aman);border-color:#2F4A38}
#pesan .pesan-butir[data-jenis="kerja"]{color:var(--gaea-redup)}
#pesan .pesan-butir[data-jenis="waspada"]{color:#1B1206;background:var(--gaea-waspada);border-color:var(--gaea-waspada)}
#pesan .pesan-butir[data-jenis="awas"]{color:#fff;background:var(--gaea-awas);border-color:var(--gaea-awas)}
@keyframes pesanMasuk{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
#sambung i{width:8px;height:8px;border-radius:var(--gaea-r-penuh);
  background:var(--gaea-redup);flex:none}
#sambung[data-keadaan="hidup"]{color:var(--gaea-aman);border-color:#2F4A38}
#sambung[data-keadaan="hidup"] i{background:var(--gaea-aman)}
#sambung[data-keadaan="mati"]{color:#fff;background:var(--gaea-awas);border-color:var(--gaea-awas)}
#sambung[data-keadaan="mati"] i{background:#fff}

/* Aliran putus: seluruh badan diredupkan DAN diarsir DAN dibingkai merah.
   Meredupkan saja tidak cukup - pada papan gelap, isi gelap yang diredupkan
   terlihat hampir sama persis dengan sebelumnya. */
body[data-putus="1"] #badan{opacity:.72;filter:saturate(.3)}
body[data-putus="1"] #badan::after{content:"";position:absolute;inset:0;
  pointer-events:none;z-index:50;border-radius:var(--gaea-r-4);
  border:4px solid var(--gaea-awas);
  background:repeating-linear-gradient(135deg,
    rgba(180,67,43,.14) 0 14px, rgba(180,67,43,0) 14px 34px)}

/* ─────────────── panel */
#badan{flex:1;min-height:0;position:relative;margin:0 16px 16px}
.panel{position:absolute;inset:0;display:none;flex-direction:column;min-height:0;
  background:var(--gaea-kaca-1);border:1px solid var(--gaea-kaca-tepi);
  border-radius:var(--gaea-r-4);overflow:hidden;
  -webkit-backdrop-filter:blur(var(--gaea-kabur)) saturate(1.3);
  backdrop-filter:blur(var(--gaea-kabur)) saturate(1.3);
  box-shadow:var(--gaea-naung-2),inset 0 1px 0 var(--gaea-kaca-kilau)}
.panel[data-aktif="1"]{display:flex}
.panel>h2{margin:0;padding:18px 24px 4px;font-size:11.5px;font-weight:600;
  text-transform:uppercase;letter-spacing:.1em;color:var(--gaea-redup);flex:0 0 auto}
.panel>.isi{flex:1;min-height:0;overflow:auto;padding:10px 24px 24px}
/* Dasbor berisi satu widget tampil PENUH: widget peta yang dipenjara 20 piksel
   dari tepi membuang bidang pandang, dan di layar dinding itu yang paling mahal. */
.panel.penuh>.isi{padding:0}
.panel.penuh>h2{display:none}
#mesin{position:absolute;inset:0}
#mesin .leaflet-container{background:#0D1512}

/* ─────────────── teks, kartu, kendali */
.redup{color:var(--gaea-redup);font-size:13px;max-width:72ch;line-height:1.5}
p.redup{margin:0}
h3.golongan{margin:24px 0 12px;font-size:13px;font-weight:600;color:var(--gaea-redup);text-transform:uppercase;letter-spacing:.08em}
.petak{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.kartu{padding:16px 18px;border-radius:var(--gaea-r-3);
  background:var(--isi-1);border:1px solid var(--tepi-halus);
  transition:background var(--gerak),border-color var(--gerak),box-shadow var(--gerak)}
.kartu[data-mati="1"]{opacity:.55}
.kartu-atas{display:flex;gap:12px;align-items:flex-start}
.kartu-atas>.ik{margin-top:1px;color:var(--gaea-aman);opacity:.9}
.kartu-teks{min-width:0;flex:1}
.kartu-teks b{display:block;font-size:14.5px;font-weight:600}
.kartu-teks span{display:block;color:var(--gaea-redup);font-size:12.5px;margin-top:3px;line-height:1.45}
.syarat{margin-top:10px;display:flex;gap:6px;flex-wrap:wrap}
.kartu-teks .syarat{margin-top:10px}
.kartu-teks .syarat span{display:inline-flex;margin-top:0}
.lencana{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 10px;
  border-radius:var(--gaea-r-penuh);font-size:11.5px;font-weight:600;letter-spacing:.01em;
  background:var(--isi-2);color:var(--gaea-redup);white-space:nowrap}
.lencana.perlu{background:rgba(var(--kuning),.16);color:#E8A33D}
.lencana.aktif{background:rgba(var(--aksen),.18);color:#CFEBD9}
.lencana.kerja{background:rgba(var(--kuning),.18);color:#F2C572}
.lencana.gagal{background:rgba(var(--merah),.2);color:#FFB3A3;cursor:help}
.kartu-aksi{margin-top:12px;display:flex;gap:8px;flex-wrap:wrap}
.baris{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:14px}

.tombol{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:38px;padding:0 18px;
  border-radius:var(--gaea-r-penuh);border:1px solid var(--tepi);
  background:var(--isi-2);color:var(--gaea-tinta);white-space:nowrap;
  font:600 13.5px var(--f);cursor:pointer;
  transition:background var(--gerak),border-color var(--gerak),transform var(--gerak),box-shadow var(--gerak)}
.tombol:hover{background:var(--isi-3)}
.tombol:active{transform:scale(.98)}
.tombol.utama{background:rgba(var(--aksen),.24);border-color:rgba(var(--aksen),.45);color:#DDF3E6}
.tombol.utama:hover{background:rgba(var(--aksen),.32)}
.tombol.mati{background:rgba(var(--merah),.14);border-color:rgba(var(--merah),.35);color:#FFC2B4}
.tombol.mati:hover{background:rgba(var(--merah),.22)}
.tombol:disabled{opacity:.45;cursor:not-allowed;transform:none}
.tombol:focus-visible{outline:0;box-shadow:var(--cincin)}
.tombol.apung{position:absolute;right:16px;bottom:16px;z-index:30}
.x{border:0;background:var(--isi-2);color:var(--gaea-redup);width:26px;height:26px;flex:none;
  border-radius:var(--gaea-r-penuh);cursor:pointer;display:grid;place-items:center;font-size:15px;line-height:1;
  transition:background var(--gerak),color var(--gerak)}
.x:hover{background:var(--gaea-awas);color:#fff}
.gaea-masukan{height:40px;padding:0 14px;border-radius:12px;width:100%;
  border:1px solid var(--tepi);background:rgba(0,0,0,.28);
  color:var(--gaea-tinta);font:14px var(--f);transition:border-color var(--gerak),box-shadow var(--gerak)}
.gaea-masukan::placeholder{color:rgba(230,237,233,.38)}
.gaea-masukan:focus{outline:0;border-color:rgba(var(--aksen),.6);box-shadow:var(--cincin)}
.gaea-masukan[type=file]{padding:8px 12px;line-height:22px}
.gaea-masukan[type=file]::file-selector-button{font:600 12.5px var(--f);color:var(--gaea-tinta);
  background:var(--isi-2);border:1px solid var(--tepi);border-radius:var(--gaea-r-penuh);padding:3px 12px;margin-right:10px;cursor:pointer}
textarea.gaea-masukan{height:auto;padding:10px 14px}
select.gaea-masukan{appearance:none;-webkit-appearance:none;padding-right:34px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' fill='none' stroke='%238C9A8E' stroke-width='1.8' stroke-linecap='round'/></svg>");
  background-repeat:no-repeat;background-position:right 14px center}

/* Keadaan kosong: satu nama dan satu tindakan. */
/* Keadaan kosong DUDUK DI ATAS, bukan melayang di tengah.
   Di layar 1100 piksel, teks yang dipusatkan tegak berada 400 piksel di bawah
   hal terakhir yang dibaca orang — terbaca sebagai halaman yang gagal memuat,
   bukan sebagai keterangan. */
.kosong{display:flex;flex-direction:column;align-items:flex-start;
  gap:10px;min-height:0;text-align:left;padding:22px 24px;color:var(--gaea-redup);
  max-width:64ch;background:var(--isi-1);border:1px solid var(--tepi-halus);
  border-radius:var(--gaea-r-3)}
.kosong b{color:var(--gaea-tinta);font-size:15px;font-weight:600}
.kosong p{margin:0;max-width:54ch;font-size:13.5px;line-height:1.6}
.kosong p:empty{display:none}
.kosong.buruk b{color:var(--gaea-awas)}
.kosong .tombol.utama{margin-top:6px;height:38px;padding:0 20px;font-size:13.5px}
.kosong .baris,.kosong .kartu-aksi{margin-top:4px}

table{border-collapse:collapse;width:100%;font-size:13.5px}
th{text-align:left;white-space:nowrap;width:1%;padding-right:28px;font-weight:600;color:var(--gaea-redup);font-size:11.5px;
  text-transform:uppercase;letter-spacing:.07em;padding:8px 16px 8px 0}
td{padding:10px 16px 10px 0;border-top:1px solid var(--tepi-halus);vertical-align:top}
code{font:12.5px ui-monospace,Consolas,monospace;background:rgba(0,0,0,.3);
  padding:2px 7px;border-radius:var(--gaea-r-1)}

/* ─────────────── kisi dasbor */
/* Bingkai luar kisi DIBEDAKAN dari jarak antarwidget. Ketika keduanya sama,
   susunan kehilangan tepinya: jarak widget ke pinggir layar terbaca sama
   dengan jarak antarwidget, sehingga baris terluar tampak terpotong dinding
   alih-alih berdiri di dalam bingkai. */
.kisi{display:grid;gap:var(--gaea-dasbor-jarak,12px);height:100%;
  padding:var(--gaea-dasbor-bingkai,22px)}
.kisi.satu{padding:0;gap:0}
.wdg{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;
  container:gaea-wdg / inline-size;
  background:var(--gaea-kaca-2);border:1px solid var(--gaea-kaca-tepi);
  border-radius:var(--gaea-r-3);
  -webkit-backdrop-filter:blur(var(--gaea-kabur)) saturate(1.3);
  backdrop-filter:blur(var(--gaea-kabur)) saturate(1.3);
  box-shadow:var(--gaea-naung-1),inset 0 1px 0 var(--gaea-kaca-kilau)}
.wdg.seret{opacity:.45;outline:2px dashed var(--gaea-aman)}
.kisi.satu .wdg{border:0;border-radius:var(--gaea-r-4);box-shadow:none;
  background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;
  position:relative}
.wdg>header{display:flex;align-items:center;gap:10px;height:42px;padding:0 14px;flex:0 0 auto;
  border-bottom:1px solid var(--tepi-halus);font-size:13px;font-weight:600;
  cursor:grab}
.wdg>header span{flex:1 1 auto;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Widget satu petak: perkakas mengalah, judul bertahan.
 *
 * Kepala widget membawa ikon, judul, dan DUA tombol tetap (ubah ukuran dan
 * buang). Pada kisi 12 kolom di layar 1440, satu petak hanya selebar 107px,
 * sedangkan perkakas itu saja sudah menghabiskan ~100px — judulnya tersisa
 * NOL piksel. Yang terbaca di layar tinggal dua tombol, tanpa keterangan ini
 * widget apa. Di dasbor pantau itu kebalikan dari yang diperlukan.
 *
 * Tidak ada tombol yang dihapus; semuanya hanya mengecil. */

/* Keadaan kosong di DALAM widget: ringkas, dan tanpa judul kembar.
 *
 * Kotak .kosong dirancang untuk halaman penuh — padding 22px dan judul 15px
 * membuatnya setinggi ~100px, sedangkan badan widget dua baris hanya 55px.
 * Sisanya terpotong diam-diam karena .badan memotong luberan. Judul tebalnya
 * pun mengulang judul yang sudah tertulis di kepala widget tepat di atasnya.
 * Judul galat (.buruk) TIDAK ikut disembunyikan — yang itu bukan pengulangan. */
/* Penampung keadaan kosong tetap TERLIHAT sebagai penampung.
   Kotaknya dibuat ringkas (padding penuh membuatnya terpotong di widget dua
   baris) tetapi latar dan tepinya dikembalikan: pada widget yang isinya HANYA
   penampung ini -- Tanya GAEA AI, misalnya -- menghilangkan keduanya membuat
   panel setinggi 686 px terbaca sebagai panel rusak, bukan panel menunggu.
   Satu baris kelabu 12 px di pojok kiri-atas tidak terbaca siapa pun.
   Isinya dipusatkan supaya ia ditemukan di tempat mata mencari. */
.wdg>.badan>.kosong{padding:14px 16px;gap:6px;max-width:none;
  align-self:center;margin:auto;align-items:center;text-align:center}
.wdg>.badan>.kosong:not(.buruk)>b{display:none}
.wdg>.badan>.kosong p{font-size:12px;line-height:1.45}
.wdg>.badan:has(>.kosong){overflow:auto}
.wdg>header .x{width:24px;height:24px}

/* Widget satu petak: perkakas mengalah, judul bertahan.
 *
 * Kepala widget membawa ikon, judul, dan DUA tombol tetap. Pada kisi 12 kolom
 * di layar 1440, satu petak hanya selebar ~103px sedangkan ikon dan kedua
 * tombol saja sudah menghabiskan ~102px — judulnya tersisa NOL piksel dan
 * yang terbaca di layar tinggal dua tombol, tanpa keterangan ini widget apa.
 *
 * Ikon disembunyikan lebih dulu karena ia yang paling sedikit menerangkan
 * ketika judulnya sudah ada; tidak ada tombol yang dihapus, hanya mengecil.
 *
 * Blok ini HARUS berada sesudah aturan .x di atas: pertanyaan container tidak
 * menambah kekhususan, jadi yang memutuskan adalah urutan sumber. */
@container gaea-wdg (max-width: 210px){
  .wdg>header{padding:0 7px;gap:5px}
  .wdg>header .ik{display:none}
  .wdg>header .x{width:18px;height:18px}
}
.kisi.satu .wdg>header{position:absolute;z-index:10;border:0;margin:12px;height:38px;
  background:var(--gaea-kaca-3);border:1px solid var(--gaea-kaca-tepi);border-radius:var(--gaea-r-penuh);padding:0 8px 0 16px;
  -webkit-backdrop-filter:blur(var(--gaea-kabur));backdrop-filter:blur(var(--gaea-kabur))}
.wdg>.badan{flex:1;min-height:0;position:relative;overflow:hidden}
.nilai{display:grid;place-items:center;height:100%;font:700 34px/1 var(--f);
  font-variant-numeric:tabular-nums}
.nilai[data-basi="1"]{color:var(--gaea-basi)}

/* ─────────────── palet & dialog */
.tirai-palet{position:fixed;inset:0;z-index:200;display:grid;place-items:center;
  background:rgba(4,8,6,.6);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.palet{width:min(760px,92vw);max-height:84vh;display:flex;flex-direction:column;
  gap:12px;padding:24px;border-radius:var(--gaea-r-4);
  background:var(--gaea-kaca-3);border:1px solid var(--gaea-kaca-tepi);
  -webkit-backdrop-filter:blur(var(--gaea-kabur)) saturate(1.35);
  backdrop-filter:blur(var(--gaea-kabur)) saturate(1.35);
  box-shadow:var(--gaea-naung-2),inset 0 1px 0 var(--gaea-kaca-kilau)}
.palet h3{margin:0;font-size:17px;font-weight:600}
.palet h4{margin:12px 0 8px;font-size:11.5px;font-weight:600;color:var(--gaea-redup);
  text-transform:uppercase;letter-spacing:.08em}
.palet-daftar{overflow:auto;flex:1;min-height:0}
.palet-petak{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.palet-item{display:flex;align-items:flex-start;gap:12px;text-align:left;
  padding:12px 14px;border-radius:var(--gaea-r-2);cursor:pointer;
  border:1px solid var(--tepi-halus);background:var(--isi-1);
  color:var(--gaea-tinta);font:13.5px var(--f);transition:background var(--gerak),border-color var(--gerak)}
.palet-item:hover{background:rgba(var(--aksen),.14);border-color:rgba(var(--aksen),.4)}
.palet-item:focus-visible{outline:0;box-shadow:var(--cincin)}
.palet-item b{display:block;font-size:13.5px;font-weight:600}
.palet-item small{display:block;color:var(--gaea-redup);font-size:12px;margin-top:2px}
.palet-item.aktif{border-color:rgba(var(--aksen),.6);background:rgba(var(--aksen),.12)}
.form-param{display:flex;flex-direction:column;gap:10px;overflow:auto;max-height:46vh}
.param{display:flex;flex-direction:column;gap:5px}
.param .jalur{font:12px ui-monospace,Consolas,monospace;color:var(--gaea-redup)}

.palet.dialog-kaca{max-width:560px!important;width:min(560px,92vw)!important;gap:8px}
.dialog-kaca .dialog-teks{white-space:pre-wrap;overflow-wrap:anywhere;font:13.5px/1.55 var(--f)!important;margin:0 0 4px;color:var(--gaea-redup);max-width:100%}
.dialog-label{display:flex;flex-direction:column;gap:6px;font-size:12.5px;font-weight:600;color:var(--gaea-redup);margin:6px 0 0}
.dialog-label .gaea-masukan{width:100%}
.dialog-tombol{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}

/* ─────────────── sub-tab Sumber Data */
.subtab{display:flex;gap:2px;padding:4px;margin-bottom:16px;width:max-content;max-width:100%;overflow-x:auto;
  border-radius:var(--gaea-r-penuh);background:rgba(0,0,0,.24);
  border:1px solid var(--tepi-halus)}
.subtab button{display:inline-flex;align-items:center;gap:8px;border:0;height:30px;
  background:transparent;color:var(--gaea-redup);cursor:pointer;padding:0 16px;
  border-radius:var(--gaea-r-penuh);font:600 13px var(--f);transition:background var(--gerak),color var(--gerak)}
.subtab button:hover{color:var(--gaea-tinta);background:var(--isi-2)}
.subtab button[aria-selected="true"]{background:rgba(var(--aksen),.20);color:#CFEBD9;
  box-shadow:inset 0 0 0 1px rgba(var(--aksen),.38)}
.subisi{min-height:260px}

/* ─────────────── terrain */
.kartu.petak{margin-bottom:12px}
.deret{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}
.epoch{display:flex;flex-direction:column;gap:2px;text-align:left;padding:9px 14px;
  border-radius:var(--gaea-r-2);cursor:pointer;color:var(--gaea-tinta);
  border:1px solid var(--tepi-halus);background:var(--isi-1);
  font:13px var(--f);transition:background var(--gerak),border-color var(--gerak)}
.epoch:hover{background:var(--isi-2)}
.epoch.tampil,.epoch.aktif{background:rgba(var(--aksen),.18);border-color:rgba(var(--aksen),.45)}
.epoch small{color:var(--gaea-redup);font-size:11px}
.kartu.pilih{cursor:pointer}
.kartu.pilih:hover{background:var(--isi-2);border-color:var(--tepi)}
.kartu.aktif{border-color:rgba(var(--aksen),.55);background:rgba(var(--aksen),.08);box-shadow:0 0 0 1px rgba(var(--aksen),.25)}
.seksi{margin-top:16px;padding:18px 20px;background:var(--isi-1);border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-3)}
.seksi:first-child{margin-top:0}
.seksi>h4{margin:0 0 12px;font-size:15px;font-weight:600}
.seksi>h4+h4{margin-top:16px}
.seksi>.redup{margin:-6px 0 12px}
.seksi .petak{margin-top:0}
.seksi>.petak+.tombol{margin-top:12px}
.daftar-perekaman{list-style:none;margin:0;padding:0;font-size:13px}
.daftar-perekaman li{display:flex;align-items:center;gap:10px;padding:6px 0}
.daftar-perekaman li+li{border-top:1px solid var(--tepi-halus)}
.daftar-perekaman li span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.daftar-perekaman .epoch{flex:1;min-width:0;flex-direction:row;align-items:center;padding:8px 14px}
.daftar-perekaman .epoch.dasar,.panel-area .epoch.dasar{border-style:dashed;opacity:.9}
.gaea-masukan.tanggal{width:150px;height:32px;padding:0 10px;font-size:12.5px;border-radius:10px}
.status-batch div{font-size:13px;padding:3px 0}
.status-batch .ok{color:var(--gaea-aman)}.status-batch .gagal{color:#FFB3A3}.status-batch .ragu{color:#F2C572}
.kartu-aksi .baris{margin-top:8px}
.form-area{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:12px;padding:14px;
  background:rgba(0,0,0,.18);border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-3)}
.form-area[hidden]{display:none}
.form-area .redup{flex-basis:100%}
.form-area .gaea-masukan{width:auto;flex:1 1 220px}
.form-area input[type=file]{max-width:360px}

/* status upload di tab Terrain */
.seksi.unggahan{padding:8px 20px}
.unggah{padding:12px 0}
.unggah+.unggah{border-top:1px solid var(--tepi-halus)}
.unggah-kepala{display:flex;align-items:center;gap:12px}
.unggah-kepala b{font-size:14px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.unggah-kepala .redup{margin-left:auto;font-size:12.5px;font-variant-numeric:tabular-nums;white-space:nowrap}
.unggah.gagal .unggah-kepala .redup{color:#FFB3A3;font-weight:600}
.unggah-bar{height:6px;margin-top:10px;border-radius:999px;background:var(--isi-2);overflow:hidden}
.unggah-bar i{display:block;height:100%;border-radius:999px;background:var(--gaea-aman);transition:width .4s linear}
.unggah-bar i.denyut{background:linear-gradient(90deg,rgba(var(--aksen),.35),var(--gaea-aman),rgba(var(--aksen),.35));background-size:200% 100%;animation:denyut 1.6s linear infinite}
@keyframes denyut{from{background-position:200% 0}to{background-position:-200% 0}}
.unggah-galat{margin:8px 0 0;font-size:13px;line-height:1.5;color:#FFB3A3}

.setel-panel[hidden]{display:none}
.setel-baris{display:flex;align-items:center;gap:14px;margin:4px 0 14px}
.setel-baris>span{flex:0 0 96px;font-size:12.5px;color:var(--gaea-redup)}
.setel-panel .seksi-otak{margin-top:0}

.seksi-aset{margin:0 0 18px}
.seksi-aset .seksi-kepala{display:flex;align-items:center;gap:14px;margin-bottom:10px}
.seksi-aset .seksi-kepala h4{margin:0;font-size:13.5px;font-weight:600}
.seksi-aset .seksi-kepala .tombol{margin-left:auto;height:30px;padding:0 14px;font-size:12.5px}
.seksi-aset .petak{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.bar-lokasi{padding:0 24px}
.bar-lokasi[hidden]{display:none}
.bar-lokasi .lokasi-tab{margin-bottom:4px}

/* tab Report */
.rep-panel[hidden]{display:none}
.rep-tabel{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:12px}
.rep-tabel th{text-align:left;font-weight:600;font-size:11.5px;color:var(--gaea-redup);
  padding:6px 8px;border-bottom:1px solid var(--tepi)}
.rep-tabel td{padding:8px;border-bottom:1px solid var(--tepi-halus);vertical-align:top}
.rep-jam{white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--gaea-redup)}
.rep-judul{font-weight:600}
.rep-ringkas{color:var(--gaea-redup)}
.rep-aksi{text-align:right;white-space:nowrap}
.rep-aksi .tombol{height:26px;padding:0 12px;font-size:12px}
.rep-kanal-kepala{display:flex;align-items:center;gap:10px;margin:12px 0 10px;font-size:14px}
.rep-saklar{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin:4px 0 14px;
  padding:10px 14px;border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-2);
  background:var(--isi-1)}
.saklar-kecil{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;cursor:pointer}
.saklar-kecil input{accent-color:rgb(var(--aksen));width:15px;height:15px;margin:0}
.rep-saklar .otak-keadaan{margin-left:auto}
.rep-kisi-kanal{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));
  gap:12px;align-items:start}
.seksi.siaga{margin-top:18px}
.seksi.siaga .seksi-kepala{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.seksi.siaga .seksi-kepala h4{margin:0;font-size:14px;font-weight:600}
.siaga-baris{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;padding:10px 12px;margin-bottom:8px;
  border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-2);background:var(--isi-1)}
.siaga-kolom{display:flex;flex-direction:column;gap:4px;flex:1 1 160px;min-width:0}
.siaga-kolom>span{font-size:11.5px;color:var(--gaea-redup)}
.siaga-kolom .gaea-masukan{width:100%;height:32px;font-size:12.5px}
.siaga-koor{display:flex;align-items:center;gap:8px;flex:1 1 100%}
.siaga-koor .redup{font-size:11.5px;font-variant-numeric:tabular-nums}
.siaga-koor .tombol{height:28px;padding:0 12px;font-size:12px}
.siaga-koor .tombol:last-child{margin-left:auto}
.kanal-dua{display:grid;grid-template-columns:minmax(180px,220px) 1fr;gap:16px;align-items:start}
.kanal-daftar{display:flex;flex-direction:column;gap:4px}
.kanal-pilih{display:flex;align-items:center;gap:9px;width:100%;padding:9px 12px;border:1px solid transparent;
  border-radius:var(--gaea-r-2);background:transparent;color:var(--gaea-redup);
  font:600 12.5px var(--f);text-align:left;cursor:pointer;transition:background var(--gerak)}
.kanal-pilih:hover{background:var(--isi-1)}
.kanal-pilih.on{background:rgba(var(--aksen),.18);border-color:rgba(var(--aksen),.4);color:var(--gaea-tinta)}
.kanal-pilih input{accent-color:rgb(var(--aksen));width:15px;height:15px;margin:0}
.kanal-pilih span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kanal-tanda{width:7px;height:7px;border-radius:999px;background:var(--tepi);flex:0 0 auto}
.kanal-tanda.aktif{background:var(--gaea-aman)}
.kanal-isi{padding:14px 16px;border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-3);
  background:var(--isi-1);min-height:220px}
.kanal-judul{display:flex;align-items:center;gap:12px;margin:0 0 10px}
.kanal-judul b{font-size:13.5px}
.kanal-judul .rep-min{margin-left:auto}
.kanal-isi .subtab{margin:10px 0}
.kanal-templat{width:100%;resize:vertical;min-height:76px;padding:10px 12px;font:12.5px var(--f);line-height:1.5}
.kanal-isian{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.kanal-isian .keping{height:24px;padding:0 9px;font-size:11px;font-family:ui-monospace,Consolas,monospace}
.lap-tab.kecil button{height:28px;padding:0 12px;font-size:12px}
.rep-kanal{margin:0;padding:12px 14px;border:1px solid var(--tepi-halus);
  border-radius:var(--gaea-r-2);background:var(--isi-1)}
.rep-kanal-atas{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.rep-kanal-atas b{font-size:13px}
.rep-min{margin-left:auto;height:26px;padding:0 8px;font-size:11.5px;width:auto;flex:0 0 auto}
.rep-kanal .gaea-masukan{width:100%;height:32px;font-size:12.5px}
.rep-kanal-ket{margin:0 0 10px;font-size:11.5px;line-height:1.5;color:var(--gaea-redup)}
.rep-kanal-kisi{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px 12px}
.rep-kanal-isi{display:flex;flex-direction:column;gap:4px}
.rep-kanal-isi>span{font-size:11.5px;color:var(--gaea-redup)}
.rep-kanal-status{margin:10px 0 0;font-size:11.5px;color:#F2C572}
.wa-simpul{margin-top:12px;padding-top:12px;border-top:1px solid var(--tepi-halus)}
.wa-atas{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.wa-atas b{font-size:12.5px}
.wa-atas .tombol{margin-left:auto;height:28px;padding:0 12px;font-size:12px}
.wa-baris{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--tepi-halus)}
.wa-baris:last-of-type{border-bottom:0}
.wa-kiri{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.wa-kiri small{color:var(--gaea-redup);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wa-baris .tombol{height:26px;padding:0 10px;font-size:11.5px}
.wa-qr{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px;
  background:#fff;border-radius:var(--gaea-r-2);margin:8px 0}
.wa-qr img{width:200px;height:200px;image-rendering:pixelated}
.wa-qr p{margin:0;color:#333;font-size:11.5px}

/* setelan GAEA AI */
.seksi-otak{margin-top:18px;padding:16px 18px;border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-3);
  background:var(--gaea-kaca-1);max-width:560px}
.seksi-otak h4{display:flex;align-items:center;gap:9px;margin:0 0 14px;font-size:15px;font-weight:600}
.otak-keadaan{margin-left:auto;font-size:11.5px;font-weight:600;padding:3px 10px;border-radius:var(--gaea-r-penuh);
  background:var(--isi-1);color:var(--gaea-redup)}
.otak-keadaan.aman{background:rgba(var(--aksen),.22);color:#DDF3E6}
.otak-keadaan.awas{background:rgba(242,197,114,.18);color:#F2C572}
.otak-baris{display:flex;align-items:center;gap:12px;margin:10px 0}
.otak-baris>span{flex:0 0 96px;font-size:12.5px;color:var(--gaea-redup)}
.otak-baris .gaea-masukan{flex:1;min-width:0;height:34px}
.otak-baris[hidden]{display:none}
.otak-baris-lain:has(.otak-lain[hidden]){display:none}
.otak-lain[hidden]{display:none}
.otak-tombol{display:flex;gap:8px;margin-top:14px}
.otak-pesan{margin:12px 0 0;font-size:12.5px;line-height:1.5;color:var(--gaea-redup)}
.otak-pesan.aman{color:#9FE3BE}
.otak-pesan.awas{color:#FFB3A3}
.otak-pesan[hidden]{display:none}

/* panel area: tetap di tepi peta, tidak berpindah mengikuti klik */
.panel-area{position:absolute;right:14px;top:60px;bottom:58px;z-index:26;width:334px;display:flex;flex-direction:column;
  background:var(--gaea-kaca-3);border:1px solid var(--gaea-kaca-tepi);border-radius:var(--gaea-r-3);
  -webkit-backdrop-filter:blur(var(--gaea-kabur)) saturate(1.3);backdrop-filter:blur(var(--gaea-kabur)) saturate(1.3);
  box-shadow:var(--gaea-naung-2);overflow:hidden}
.panel-area.lebar{width:min(1040px,calc(100% - 28px))}
.dok-lapor .jd-isi{display:flex;flex-direction:column;gap:10px;padding:12px 14px 14px;overflow:hidden}
.lap-tab{display:flex;gap:3px;padding:4px;border-radius:var(--gaea-r-penuh);background:rgba(0,0,0,.26);
  border:1px solid var(--tepi-halus);width:max-content;max-width:100%;overflow-x:auto}
.lap-tab button{display:inline-flex;align-items:center;gap:7px;border:0;height:30px;padding:0 14px;
  border-radius:var(--gaea-r-penuh);background:transparent;color:var(--gaea-redup);
  font:600 12.5px var(--f);cursor:pointer;white-space:nowrap;
  transition:background var(--gerak),color var(--gerak)}
.lap-tab button:hover{background:var(--isi-2);color:var(--gaea-tinta)}
.lap-tab button[aria-selected="true"]{background:rgba(var(--aksen),.20);color:#CFEBD9;
  box-shadow:inset 0 0 0 1px rgba(var(--aksen),.38)}
.lap-tab .ik{opacity:.85}
.lap-alat{display:flex;gap:8px;flex-wrap:wrap}
.lap-badan{flex:1;min-height:0;overflow:auto}
.lap-badan .an-kv{max-width:520px}
.gagang-seret{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}
.palet.dialog-kaca{position:relative}
.palet h3.gagang-seret{margin-right:0}
.sedang-diseret{cursor:grabbing}
.sedang-diseret .gagang-seret{cursor:grabbing}
.an-karto{margin:4px 0 8px;padding:6px;border-radius:var(--gaea-r-2);background:#fff;overflow-x:auto}
.an-karto canvas{display:block;border-radius:4px}
.pa-kepala{display:flex;align-items:center;gap:8px;padding:14px 14px 10px;font-size:15px;font-weight:600}
.pa-kepala b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pa-pilih{display:flex;align-items:center;gap:8px;min-width:0;flex:1;padding:4px 8px 4px 4px;border:0;
  border-radius:var(--gaea-r-2);background:transparent;color:inherit;font:600 15px var(--f);cursor:pointer;
  transition:background var(--gerak)}
.pa-pilih:hover{background:var(--isi-1)}
.pa-pilih .ik:last-child{opacity:.55}
.pa-fokus{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:0;
  border-radius:var(--gaea-r-2);background:var(--isi-1);color:var(--gaea-tinta);cursor:pointer;
  transition:background var(--gerak)}
.pa-fokus:hover{background:rgba(var(--aksen),.26)}
.pa-menu{margin:0 14px 10px;padding:4px;border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-2);
  background:rgba(0,0,0,.3);max-height:34%;overflow:auto}
.pa-menu[hidden]{display:none}
.pa-menu-item{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;border:0;
  border-radius:var(--gaea-r-2);background:transparent;color:inherit;font:13px var(--f);text-align:left;cursor:pointer}
.pa-menu-item:hover{background:var(--isi-2)}
.pa-menu-item.on{background:rgba(var(--aksen),.22);font-weight:600}
.pa-menu-item span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pa-menu-item small{margin-left:auto;opacity:.65;font-variant-numeric:tabular-nums;white-space:nowrap}
.pa-saklar{display:flex;align-items:center;gap:9px;margin:0 14px 10px;padding:9px 12px;font-size:12.5px;
  border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-2);background:var(--isi-1);cursor:pointer}
.pa-saklar input{accent-color:rgb(var(--aksen));width:15px;height:15px;margin:0}
.pa-saklar-t{white-space:nowrap}
.pa-legenda{display:flex;align-items:center;gap:7px;margin-left:auto;font-size:11.5px;
  font-variant-numeric:tabular-nums;color:var(--gaea-redup);white-space:nowrap}
.pa-legenda[hidden]{display:none}
.pa-selang{margin-left:auto;height:26px;padding:0 8px;font:600 11.5px var(--f);flex:0 0 auto;width:auto}
.pa-kontur-daftar{display:flex;flex-wrap:wrap;gap:6px;margin:0 14px 10px}
.pa-kontur-daftar:empty{display:none}
.keping.kontur{gap:7px;opacity:.55}
.keping.kontur.aktif{opacity:1}
.keping .titik{width:8px;height:8px;border-radius:999px;display:inline-block}
.pa-bar{width:54px;height:7px;border-radius:999px;
  background:linear-gradient(90deg,#2e5c8a,#3a8a76,#7eb060,#d6c76c,#c48852,#f2f0ec)}
.pa-tab{display:flex;gap:4px;margin:0 14px;padding:3px;border-radius:var(--gaea-r-penuh);background:rgba(0,0,0,.24)}
.pa-tab button{flex:1;height:30px;border:0;border-radius:var(--gaea-r-penuh);background:transparent;
  color:var(--gaea-redup);font:600 12.5px var(--f);cursor:pointer;transition:background var(--gerak),color var(--gerak)}
.pa-tab button.on{background:var(--gaea-kaca-1);color:var(--gaea-tinta);box-shadow:var(--gaea-naung-1)}
.pa-isi{flex:1;min-height:0;overflow:auto;padding:12px 14px 14px}
.pa-isi[hidden]{display:none}
.panel-area .epoch{display:flex;flex-direction:row;align-items:center;gap:8px;width:100%;text-align:left;padding:9px 12px;margin:4px 0;
  border-radius:var(--gaea-r-2);color:inherit;font:13px var(--f)}
.panel-area .epoch>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.panel-area .epoch small{margin-left:auto;opacity:.7;white-space:nowrap}
.panel-area .redup{font-size:12.5px}

/* alat analisa */
.an-alat{display:flex;flex-wrap:nowrap;gap:3px;margin-bottom:12px;width:100%}
/* Tombol tak terpilih tampil IKON SAJA -- panel ini sempit dan enam nama
   tidak muat berjajar. Yang disembunyikan HANYA labelnya.

   Sebelum ini pemilihnya `span` polos, padahal ikonnya sendiri juga sebuah
   <span class="ik">. Jadi ikonnya ikut hilang dan tombol yang tidak terpilih
   menjadi pil kosong: tidak ada ikon, tidak ada teks, hanya tooltip yang
   muncul kalau kursor kebetulan singgah. */
.an-alat button>span:not(.ik){display:none}
.an-alat button[aria-selected="true"]>span:not(.ik){display:inline}
.an-alat button{flex:0 0 auto;padding:0 10px}
.an-alat button{height:28px;padding:0 12px;border-radius:var(--gaea-r-penuh);border:1px solid var(--tepi-halus);
  background:var(--isi-1);color:var(--gaea-redup);font:600 12px var(--f);cursor:pointer;
  transition:background var(--gerak),color var(--gerak),border-color var(--gerak)}
.an-alat button:hover{background:var(--isi-2)}
.an-alat button.on{background:rgba(var(--aksen),.24);border-color:rgba(var(--aksen),.5);color:#DDF3E6}
.an-baris{display:flex;align-items:center;gap:8px;margin:8px 0}
.an-baris .gaea-masukan{flex:1;min-width:0;height:32px;font-size:12.5px}
.an-lb{font-size:12px;color:var(--gaea-redup);white-space:nowrap}
.an-angka{flex:0 0 auto!important;width:84px;font-variant-numeric:tabular-nums}
.an-geser{flex:1;accent-color:rgb(var(--aksen))}
.an-seg{display:flex;flex:1;gap:3px;padding:3px;border-radius:var(--gaea-r-penuh);background:rgba(0,0,0,.24)}
.an-seg button{flex:1;height:26px;border:0;border-radius:var(--gaea-r-penuh);background:transparent;
  color:var(--gaea-redup);font:600 11.5px var(--f);cursor:pointer}
.an-seg button.on{background:var(--gaea-kaca-1);color:var(--gaea-tinta)}
.an-daftar{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
.an-lapis{display:flex;flex-direction:column;gap:6px;margin:10px 0}
.an-lapis-baris{display:flex;align-items:center;gap:6px}
.an-lapis-baris .keping{flex:1;min-width:0;justify-content:flex-start;gap:7px}
.an-lapis-baris .keping span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.an-warna{flex:0 0 26px;width:26px;height:26px;padding:0;border:1px solid var(--tepi-halus);
  border-radius:var(--gaea-r-2);background:transparent;cursor:pointer}
.an-geser.kecil{flex:0 0 58px;width:58px}
.an-judul{margin:12px 0 6px;font-size:12.5px;font-weight:600}
.an-keluar{margin-top:4px}
.an-galat{margin:10px 0 0;font-size:12.5px;line-height:1.5;color:#FFB3A3}
.an-kv{width:100%;border-collapse:collapse;font-size:12.5px;font-variant-numeric:tabular-nums}
.an-kv td{padding:5px 0;border-bottom:1px solid var(--tepi-halus)}
.an-kv td:last-child{text-align:right;font-weight:600;white-space:nowrap}
.an-kv tr:last-child td{border-bottom:0}
.an-kv .gali td:last-child{color:#FF9A86}
.an-kv .timbun td:last-child{color:#7AB8FF}
.an-kv .netto td{font-size:13.5px}

/* jendela grafik plugin */
.dok-grafik{position:fixed;right:24px;bottom:24px;z-index:60;display:flex;flex-direction:column;
  min-width:320px;min-height:200px;background:var(--gaea-kaca-3);border:1px solid var(--gaea-kaca-tepi);
  border-radius:var(--gaea-r-3);box-shadow:var(--gaea-naung-2);overflow:hidden;
  -webkit-backdrop-filter:blur(var(--gaea-kabur)) saturate(1.3);backdrop-filter:blur(var(--gaea-kabur)) saturate(1.3)}
.dok-kepala{display:flex;align-items:center;gap:8px;padding:10px 12px;font:600 13px var(--f);cursor:move;
  border-bottom:1px solid var(--tepi-halus);touch-action:none}
.dok-kepala .x{margin-left:auto}
.jd-isi{flex:1;min-height:0;padding:3px;overflow:hidden}
.dk-cv{display:block}

/* Jendela peta universal — dipakai tiap fungsi yang menuntut "tunjukkan di
   mana". Ukurannya boleh diubah orang: peta selebar 300 piksel cukup untuk
   menegaskan titik yang sudah ada, tetapi tidak untuk mencarinya. */
/* DI ATAS TIRAI DIALOG, BUKAN DI BAWAHNYA.
 *
 * Peta hampir selalu dibuka dari dalam sebuah dialog — "Pick on map" di
 * formulir sensor, kamera, GCP, titik kumpul. Pada z-index bawaan .dok-grafik
 * (60) ia terbit di belakang tirai dialog (200) yang memanggilnya: tombolnya
 * ditekan, petanya memang terbuka, dan tidak ada yang terlihat.
 *
 * 260 menaruhnya di atas tirai, tetapi tetap di bawah kotak keterangan ⓘ
 * (300) — yang memang harus bisa dibuka di atas apa pun, peta termasuk. */
.dok-peta{width:640px;height:520px;resize:both;z-index:260}
/* Pemilih alat: ikon saja, nama muncul saat hover — sama seperti tombol aksi
 * lain di seluruh perangkat ini. */
.peta-alat{display:flex;gap:2px;padding:3px;border-radius:999px;background:var(--isi-1);
  border:1px solid var(--tepi-halus);flex:0 0 auto}
.peta-alat .ikon-aksi{width:28px;height:28px;border-radius:999px}
.peta-alat .ikon-aksi.aktif{background:rgba(var(--aksen),.22);color:#CFEBD9}
.dok-peta .jd-isi{display:flex;flex-direction:column;padding:0}
.peta-wadah{flex:1;min-height:0;background:#0d1620}
.peta-wadah .leaflet-container{width:100%;height:100%;background:#0d1620;
  font:500 12px var(--f)}
.peta-kaki{display:flex;align-items:center;gap:8px;padding:8px 10px;flex-wrap:wrap;
  border-top:1px solid var(--tepi-halus);background:var(--gaea-kaca-2)}
.peta-ket{font-size:12px;color:var(--gaea-redup);flex:1 1 140px;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.peta-ket.gagal{color:#E8A0A0}

/* warna batas per area */
.kartu-judul{display:flex;align-items:center;gap:8px}
/* ─────────────── TIRAI PETA (kaca beku)
   Sekaca dengan panel lain, hanya lebih tebal: yang di belakangnya harus
   TERASA ada tetapi tidak terbaca — kalau masih terbaca, orang membacanya,
   dan yang dibacanya peta yang belum lengkap. */
.tirai-peta{position:absolute;inset:0;z-index:40;display:flex;align-items:center;
  justify-content:center;padding:24px;
  background:
    radial-gradient(120% 90% at 22% 12%,rgba(255,255,255,.10),transparent 60%),
    radial-gradient(100% 80% at 82% 88%,rgba(var(--aksen),.12),transparent 62%),
    rgba(10,18,15,.34);
  -webkit-backdrop-filter:blur(26px) saturate(1.25) brightness(1.04);
  backdrop-filter:blur(26px) saturate(1.25) brightness(1.04);
  transition:opacity .38s ease,backdrop-filter .38s ease}
.tirai-peta.tutup{opacity:0;pointer-events:none;
  -webkit-backdrop-filter:blur(0) saturate(1);backdrop-filter:blur(0) saturate(1)}
.tirai-kotak{min-width:min(420px,84vw);max-width:520px;padding:22px 24px 20px;
  border-radius:var(--gaea-r-3);background:var(--gaea-kaca-2);
  border:1px solid var(--gaea-kaca-tepi);
  -webkit-backdrop-filter:blur(var(--gaea-kabur)) saturate(1.35);
  backdrop-filter:blur(var(--gaea-kabur)) saturate(1.35);
  box-shadow:var(--gaea-naung-2),inset 0 1px 0 var(--gaea-kaca-kilau)}
.tirai-kepala{display:flex;align-items:center;gap:12px}
.tirai-kepala .ik{opacity:.85}
.tirai-teks{display:flex;flex-direction:column;gap:2px;min-width:0}
.tirai-teks b{font-size:15px;font-weight:600;color:var(--gaea-tinta)}
.tirai-teks span{font-size:12.5px;color:var(--gaea-redup)}
/* Garis yang berjalan: menunggu tanpa tanda hidup terasa seperti macet. */
.tirai-garis{position:relative;height:3px;margin:16px 0 14px;border-radius:999px;
  background:rgba(255,255,255,.10);overflow:hidden}
.tirai-garis i{position:absolute;inset:0 auto 0 0;width:38%;border-radius:999px;
  background:linear-gradient(90deg,transparent,rgba(var(--aksen),.95),transparent);
  animation:tirai-jalan 1.5s ease-in-out infinite}
@keyframes tirai-jalan{0%{transform:translateX(-100%)}100%{transform:translateX(320%)}}
.tirai-langkah{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
.tirai-baris{display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--gaea-redup)}
.tirai-baris em{margin-left:auto;font-style:normal;font-size:11.5px;opacity:.8;
  font-variant-numeric:tabular-nums}
.tirai-tanda{width:14px;height:14px;border-radius:50%;flex:none;
  border:1.5px solid rgba(255,255,255,.28);background:transparent}
.tirai-baris.kerja{color:var(--gaea-tinta)}
.tirai-baris.kerja .tirai-tanda{border-color:rgba(var(--aksen),.9);
  border-right-color:transparent;animation:tirai-putar .8s linear infinite}
@keyframes tirai-putar{to{transform:rotate(360deg)}}
.tirai-baris.selesai .tirai-tanda{border-color:rgba(var(--aksen),.65);
  background:rgba(var(--aksen),.55)}
.tirai-baris.gagal{color:#E8A0A0}
.tirai-baris.gagal .tirai-tanda{border-color:#E8A0A0;background:rgba(232,160,160,.35)}
.tirai-peta.gagal .tirai-garis i{animation:none;width:100%;background:rgba(232,160,160,.5)}
.tirai-aksi{display:flex;justify-content:flex-end;margin-top:16px}
@media (prefers-reduced-motion:reduce){
  .tirai-garis i,.tirai-baris.kerja .tirai-tanda{animation:none}
}

.rampa-contoh{display:inline-block;width:120px;height:14px;border-radius:7px;
  border:1px solid var(--tepi-halus);margin-left:10px;vertical-align:middle}
.pa-ortho-ket{font-size:11.5px;margin-left:6px}
.warna-area{width:22px;height:22px;padding:0;border:1px solid var(--tepi);border-radius:6px;
  background:transparent;cursor:pointer;flex:none}
.warna-area::-webkit-color-swatch-wrapper{padding:2px}
.warna-area::-webkit-color-swatch{border:0;border-radius:4px}

/* Setting → Peta dasar */
.peta-daftar{display:flex;flex-direction:column;gap:8px;margin:4px 0 18px}
.peta-baris{display:flex;align-items:center;gap:10px;padding:8px 12px;
  border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-2);background:var(--isi-1)}
.peta-baris.aktif{border-color:rgba(var(--aksen),.55);background:rgba(var(--aksen),.08)}
.peta-nama{display:flex;flex-direction:column;gap:2px;width:190px;flex:none}
.peta-nama b{font-size:13px}
.peta-nama .redup{font-size:11.5px}
.peta-url{flex:1;min-width:0;height:30px;font:500 11.5px var(--f);padding:0 10px}
.peta-baris .tombol{height:30px;padding:0 14px;font-size:12.5px;flex:none}
.peta-sendiri{margin:0 0 16px}
.peta-sendiri h4{margin:0 0 8px;font-size:13px}
.peta-sendiri .peta-baris{border:0;background:transparent;padding:0}
.peta-sendiri .gaea-masukan{height:32px}
.peta-koor{width:190px;height:30px;font:500 12px var(--f);
  font-variant-numeric:tabular-nums;padding:0 10px}
.peta-kaki .tombol{height:30px;padding:0 14px;font-size:12.5px}
.peta-nomor{display:flex;align-items:center;justify-content:center;
  font:700 10.5px var(--f);color:#0b1410;background:#7fbf93;border-radius:999px;
  box-shadow:0 0 0 2px rgba(11,20,16,.6)}
.leaflet-tooltip{font:600 11.5px var(--f)}
.lencana-keadaan{display:inline-flex;align-items:center;height:22px;background:rgba(var(--kuning),.18);color:#F2C572;font-weight:600;font-size:11.5px;padding:0 10px;border-radius:999px}

/* pemilih tekstur di widget peta */
.pemilih-tekstur{position:absolute;right:14px;top:12px;z-index:25;display:flex;align-items:center;gap:8px;height:38px;
  padding:0 8px 0 16px;font-size:12.5px;font-weight:600;color:var(--gaea-redup);
  background:var(--gaea-kaca-3);border:1px solid var(--gaea-kaca-tepi);border-radius:var(--gaea-r-penuh);
  -webkit-backdrop-filter:blur(var(--gaea-kabur));backdrop-filter:blur(var(--gaea-kabur))}
.pemilih-tekstur select{font:600 12.5px var(--f);color:var(--gaea-tinta);background:rgba(0,0,0,.35);border:1px solid var(--tepi);
  border-radius:var(--gaea-r-penuh);height:26px;padding:0 10px}

/* ─────────────── GAEA AI */
.ai{display:flex;flex-direction:column;height:100%;gap:12px;padding:12px;overflow:hidden}
.kisi.satu .ai{padding-top:64px}
.ai-kepala{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ai-kepala .redup{font-size:12.5px}
.ai-tanya{display:flex;gap:10px;align-items:flex-end}
.ai-tanya textarea{flex:1;min-height:56px;max-height:160px;resize:vertical;font:inherit;color:inherit;
  background:var(--gaea-kaca-2);border:1px solid var(--tepi);
  border-radius:var(--gaea-r-2);padding:10px 14px;backdrop-filter:blur(var(--gaea-kabur))}
.ai-tanya textarea:focus{outline:0;border-color:rgba(var(--aksen),.6);box-shadow:var(--cincin)}
.ai-hasil{flex:1;overflow:auto;display:flex;flex-direction:column;gap:12px;padding-right:4px}
.ai-kartu{background:var(--gaea-kaca-1);border:1px solid var(--tepi);
  border-radius:var(--gaea-r-3);padding:14px 16px;backdrop-filter:blur(var(--gaea-kabur))}
.ai-kartu h4{margin:0 0 10px;display:flex;align-items:center;gap:8px;font-size:14.5px;font-weight:600}
.ai-kartu h4 .bentuk{font-size:11px;opacity:.7;text-transform:uppercase;letter-spacing:.06em}
/* Lencana keadaan SELALU opak: warna penilaian tidak boleh tercampur latar. */
.ai-lencana{margin-left:auto;background:#f2b84b;color:#1a1200;font-size:11px;font-weight:700;
  letter-spacing:.05em;padding:3px 10px;border-radius:var(--gaea-r-penuh);cursor:help}
.ai-lencana.galat{background:#ff6b6b;color:#2a0000}
.ai-lencana.padam{background:#7b8794;color:#0b1020}
.ai-kartu table{border-collapse:collapse;width:100%;font-size:13px}
.ai-kartu th,.ai-kartu td{padding:6px 8px;text-align:left;border-bottom:1px solid var(--tepi-halus)}
.ai-kartu th{font-weight:600;opacity:.85;text-transform:none;letter-spacing:0;font-size:12.5px}
.ai-kartu td.angka,.ai-kartu th.angka{text-align:right;font-variant-numeric:tabular-nums}
.ai-kartu canvas{width:100%;height:220px;display:block;border-radius:var(--gaea-r-2)}
.ai-angka{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.ai-angka span{background:var(--gaea-kaca-2);border-radius:var(--gaea-r-2);padding:8px 12px;font-size:13px}
.ai-angka b{font-size:16px;font-variant-numeric:tabular-nums}
.ai-kode{font:12.5px/1.45 ui-monospace,monospace;white-space:pre-wrap;background:rgba(0,0,0,.35);
  border-radius:var(--gaea-r-2);padding:12px;max-height:240px;overflow:auto}
.ai-kode-sunting{width:100%;min-height:140px;font:12.5px/1.45 ui-monospace,monospace;color:inherit;
  background:rgba(0,0,0,.35);border:1px solid var(--tepi);border-radius:var(--gaea-r-2);padding:12px}
.ai-catatan{margin:8px 0 0;padding-left:18px;font-size:12.5px;opacity:.85}
.ai details summary{cursor:pointer;font-size:12.5px;opacity:.8}

/* ─────────────── VR */
#vr-tombol{height:40px;padding:0 16px;white-space:nowrap}
#vr-tombol[data-keadaan="siap"]{color:var(--gaea-aman);border-color:#2F4A38}
#vr-tombol[data-keadaan="aktif"]{background:var(--gaea-aman);color:#04210f;border-color:var(--gaea-aman)}
#vr-tombol[data-keadaan="tidak"]{opacity:.6}
.vr-galeri{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;margin-top:12px}
.vr-galeri figure{margin:0;background:var(--gaea-kaca-1);border:1px solid var(--gaea-kaca-tepi);border-radius:var(--gaea-r-3);padding:8px}
.vr-galeri img{width:100%;display:block;border-radius:var(--gaea-r-2)}
.vr-galeri figcaption{font-size:12.5px;opacity:.75;margin-top:6px}

/* tabel Setting: kolom label secukupnya, nilai mulai dekat label */
table:has(#st-peladen) td:first-child{width:1%;white-space:nowrap;padding-right:40px;font-weight:600;color:var(--gaea-redup)}
table:has(#st-peladen) td{padding-top:12px;padding-bottom:12px}
.dialog-petunjuk{font-size:12.5px;color:var(--gaea-aman);font-weight:500}
.dialog-petunjuk:empty{display:none}

/* lokasi sebagai tab */
.lokasi-tab{margin-bottom:16px;max-width:100%}
.lokasi-tab button{gap:8px;max-width:22ch;overflow:hidden;text-overflow:ellipsis}
.subtab .tambah{color:var(--gaea-aman);font-size:17px;font-weight:600;padding:0 15px}
.subtab i.titik{width:7px;height:7px;border-radius:999px;flex:none;display:inline-block}
.subtab i.titik.kerja{background:var(--gaea-waspada);box-shadow:0 0 8px rgba(232,163,61,.65)}
.subtab i.titik.gagal{background:#E06048;box-shadow:0 0 8px rgba(224,96,72,.65)}
.seksi-kepala{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px}
.seksi-kepala h4{margin:0}

/* deret waktu sebagai keping */
.deret-epoch{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.keping{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:var(--gaea-r-penuh);
  border:1px solid var(--tepi-halus);background:var(--isi-1);color:var(--gaea-tinta);
  font:600 12.5px var(--f);font-variant-numeric:tabular-nums;cursor:pointer;white-space:nowrap;
  transition:background var(--gerak),border-color var(--gerak)}
.keping:hover{background:var(--isi-2)}
.keping.aktif{background:rgba(var(--aksen),.24);border-color:rgba(var(--aksen),.5);color:#DDF3E6}
.keping.dasar{border-style:dashed;color:var(--gaea-redup)}
.keping.ortho::after{content:"";width:5px;height:5px;border-radius:999px;background:#7AB8FF;margin-left:7px}
.keping.ortho.aktif::after{background:#CFEBD9}
.epoch-detail{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:10px;
  border-top:1px solid var(--tepi-halus);font-size:12.5px;color:var(--gaea-redup)}
.epoch-detail>span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* koordinat & elevasi di bawah kursor */
.hud-koordinat{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);z-index:24;
  display:inline-flex;align-items:center;height:32px;padding:0 16px;border-radius:var(--gaea-r-penuh);
  font:600 12.5px var(--f);font-variant-numeric:tabular-nums;letter-spacing:.01em;white-space:nowrap;
  color:var(--gaea-tinta);background:var(--gaea-kaca-3);border:1px solid var(--gaea-kaca-tepi);
  -webkit-backdrop-filter:blur(var(--gaea-kabur));backdrop-filter:blur(var(--gaea-kabur));
  box-shadow:var(--gaea-naung-1);pointer-events:none}
.hud-koordinat[hidden]{display:none}


/* penyimpanan berkas */
.simpan-daftar{display:flex;flex-direction:column;gap:10px;margin:8px 0 12px}
.simpan-kartu{padding:12px 14px;border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-2);
  background:var(--isi-1);display:flex;flex-direction:column;gap:8px}
.simpan-kepala{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.simpan-kepala b{min-width:110px}
.simpan-kepala .gaea-masukan{width:180px;height:30px}
.simpan-kartu .dunia-angka{flex-direction:row;align-items:center;gap:10px}
.simpan-kartu .dunia-angka > span:first-child{width:150px;flex:none;font-size:12px}

.dunia-kepala{display:flex;align-items:center;gap:6px;margin:2px 0 10px;font-size:13px}

.air-daftar{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.air-baris{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:var(--gaea-r-1);
  border:1px solid var(--tepi-halus);background:var(--isi-1);cursor:pointer;font-size:12.5px}
.air-baris.aktif{border-color:rgba(var(--aksen),.5);background:rgba(var(--aksen),.12)}
.air-baris .titik{width:10px;height:10px;border-radius:50%;flex:none}
.air-baris .redup{margin-left:auto}
.air-bentuk{display:flex;align-items:center;gap:8px;padding:5px 9px 5px 26px;font-size:12px;
  color:var(--gaea-redup);cursor:pointer;border-radius:var(--gaea-r-1)}
.air-bentuk.aktif{background:rgba(var(--aksen),.10);color:var(--gaea-tinta)}
.air-bentuk .kurang{color:#E8A0A0;margin-left:auto}
.air-bentuk .redup{margin-left:auto}

.dok-grafik.dok-gcp{width:560px;max-width:92vw;max-height:72vh}
.dok-gcp .jd-isi{overflow:auto}
/* Kepala kolom angka ikut rata kanan: angka yang rata kanan di bawah judul
 * yang rata kiri terbaca seperti kolom yang bergeser. */
.gcp-tabel th:nth-child(n+2){text-align:right}
.gcp-tabel th:last-child{width:28px}
.gcp-tabel{width:100%;border-collapse:collapse;margin:8px 0;font-size:12px}
.gcp-tabel th{text-align:left;font-weight:600;color:var(--gaea-redup);padding:4px 6px;
  border-bottom:1px solid var(--tepi-halus);font-size:11px;letter-spacing:.03em;text-transform:uppercase}
.gcp-tabel td{padding:4px 6px;border-bottom:1px solid var(--tepi-halus)}
.gcp-tabel td.angka{text-align:right;font-variant-numeric:tabular-nums}
.gcp-tabel td.awas{color:#E8A0A0}
.gcp-hasil h4{margin:12px 0 2px;font-size:12px;color:var(--gaea-redup)}

/* Menu utama: ikon dan kata sebaris, dengan jarak yang sama di mana pun. */
nav[role="tablist"] button, .tabs button, #tabs button{display:inline-flex;align-items:center;gap:7px}
nav[role="tablist"] button svg, .tabs button svg, #tabs button svg{flex:none;opacity:.85}

/* Mode kios: dasbor di layar ruang pantau, tanpa perkakas penyusun.
 *
 * Yang dilihat orang di dinding adalah isinya — bilah tab dan tombol tata di
 * layar yang tidak pernah disentuh siapa pun hanya memakan tempat. */
body.kios #tabs, body.kios .tombol.apung, body.kios .bilah-atas{display:none!important}
#kios-ajak{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:200;
  padding:14px 22px;font-size:15px}
body.kios #badan{inset:0!important;padding:0!important}
.tombol.apung.apung-layar{right:178px}

/* Penataan widget: pegangan ubah ukuran dan bayangan tujuan. */
.wdg{position:relative}
.wdg.menata{opacity:.75}
.wdg-ubah{position:absolute;right:2px;bottom:2px;width:16px;height:16px;cursor:nwse-resize;
  border-right:2px solid var(--gaea-redup);border-bottom:2px solid var(--gaea-redup);
  border-bottom-right-radius:4px;opacity:.5;touch-action:none}
.wdg-ubah:hover{opacity:1;border-color:rgba(var(--aksen),.9)}
.wdg-bayang{pointer-events:none;border:1.5px dashed rgba(var(--aksen),.75);border-radius:var(--gaea-r-2);
  background:rgba(var(--aksen),.10);z-index:5}
.wdg-bayang.tolak{border-color:rgba(232,160,160,.85);background:rgba(232,160,160,.12)}
.tombol.apung.apung-kisi{right:117px}

/* Isi widget dasbor: grafik, tabel, siaran. */
.w-kanvas{display:block;width:100%;height:100%}
.w-legenda{display:flex;flex-wrap:wrap;gap:8px;padding:4px 6px;font-size:11px;color:var(--gaea-redup)}
.w-legenda-item{display:inline-flex;align-items:center;gap:5px}
.w-legenda-item i{width:9px;height:9px;border-radius:2px;display:inline-block}
.w-tabel{width:100%;border-collapse:collapse;font-size:12px}
.w-tabel th{text-align:left;font-weight:600;color:var(--gaea-redup);padding:4px 6px;
  border-bottom:1px solid var(--tepi-halus);font-size:11px;text-transform:uppercase;letter-spacing:.03em}
.w-tabel td{padding:4px 6px;border-bottom:1px solid var(--tepi-halus);font-variant-numeric:tabular-nums}
.w-siaran{width:100%;height:100%;object-fit:cover;border-radius:var(--gaea-r-1);background:#000}
.w-dinding{display:grid;gap:4px;width:100%;height:100%;
  grid-template-columns:repeat(auto-fit,minmax(120px,1fr));grid-auto-rows:1fr}
.w-dinding-sel{position:relative;min-height:0;overflow:hidden;border-radius:var(--gaea-r-1)}
.w-dinding-nama{position:absolute;left:6px;bottom:5px;font-size:11px;color:#fff;
  text-shadow:0 1px 3px rgba(0,0,0,.8);pointer-events:none}
.w-kosong{display:flex;flex-direction:column;gap:3px;align-items:center;justify-content:center;
  height:100%;text-align:center;color:var(--gaea-redup);font-size:12px;padding:8px}

.deret-pilih{margin:6px 0}
.deret-pilih .deret-sel{width:100%;font-size:12.5px}
.baris-ikon{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.ikon-aksi{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;
  border-radius:var(--gaea-r-1);border:1px solid var(--tepi-halus);background:var(--isi-1);
  color:var(--gaea-tinta);cursor:pointer;transition:background .12s,border-color .12s}
.ikon-aksi:hover{background:rgba(var(--aksen),.14);border-color:rgba(var(--aksen),.45)}
.ikon-aksi.utama{border-color:rgba(var(--aksen),.5);background:rgba(var(--aksen),.16)}
.ikon-aksi.mati{color:#E8A0A0}
.ikon-aksi.mati:hover{background:rgba(232,160,160,.14);border-color:rgba(232,160,160,.45)}

/* keterangan di balik ikon — bukan paragraf yang menetap di panel */
.info-ik{display:inline-flex;align-items:center;justify-content:center;
  width:22px;height:22px;padding:0;flex:none;border-radius:50%;
  border:1px solid var(--tepi-halus);background:var(--isi-1);
  color:var(--gaea-redup);cursor:pointer;vertical-align:middle;margin-left:6px}
.info-ik:hover{background:var(--isi-2);color:var(--gaea-tinta)}
.info-ik:focus-visible{outline:0;box-shadow:var(--cincin)}
.info-kotak{position:fixed;z-index:300;padding:12px 14px;border-radius:var(--gaea-r-2);
  background:var(--beku-isi-tebal,rgba(15,23,19,.72));border:1px solid var(--beku-tepi,var(--gaea-kaca-tepi));
  -webkit-backdrop-filter:blur(26px) saturate(1.45);backdrop-filter:blur(26px) saturate(1.45);
  box-shadow:var(--gaea-naung-2),inset 0 1px 0 var(--beku-kilau,rgba(255,255,255,.2));
  font-size:12.5px;line-height:1.55;color:var(--gaea-redup);max-height:60vh;overflow:auto}
.info-kotak b{display:block;color:var(--gaea-tinta);font-size:13px;margin-bottom:6px}
.info-kotak p{margin:0 0 8px}
.info-kotak p:last-child{margin-bottom:0}

/* editor peta kelas PBR — ortho kiri, kelas kanan, alat di atas */
.pbr-editor{border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-3);
  overflow:hidden;background:var(--isi-1);margin:6px 0 12px}
.pbr-alat{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:10px 12px;
  border-bottom:1px solid var(--tepi-halus)}
.pbr-mode{display:flex;gap:4px;padding:3px;border-radius:var(--gaea-r-penuh);
  background:rgba(0,0,0,.26);border:1px solid var(--tepi-halus)}
.pbr-alat-kanan{margin-left:auto;display:flex;gap:8px}
.pbr-alat .tombol{height:30px;padding:0 14px;font-size:12.5px}
.pbr-geser{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--gaea-redup)}
.pbr-geser input[type=range]{width:110px}
.pbr-geser small{width:44px;font-variant-numeric:tabular-nums}
.pbr-baris{display:flex;flex-wrap:wrap;min-height:60vh}
.pbr-wadah{flex:1 1 340px;min-width:300px;position:relative;background:#0b1a17;
  overflow:hidden;cursor:crosshair;min-height:60vh}
.pbr-kanvas{display:block;position:absolute;inset:0}
.pbr-sisi{flex:0 0 290px;max-width:290px;border-left:1px solid var(--tepi-halus);
  padding:12px;overflow:auto}
.pbr-sisi-judul{font-size:11.5px;font-weight:600;letter-spacing:.08em;
  text-transform:uppercase;color:var(--gaea-redup);margin:10px 0 6px}
.pbr-sisi-judul:first-child{margin-top:0}
.pbr-kelas-baris.aktif{outline:2px solid rgba(var(--aksen),.55);border-radius:var(--gaea-r-1)}
.pbr-kelas-baris{padding:2px;cursor:pointer}
.pbr-liputan{display:flex;flex-direction:column;gap:4px}
.pbr-liput-baris{display:flex;align-items:center;gap:8px;font-size:12px}
.pbr-liput-baris .titik{width:10px;height:10px;border-radius:50%;flex:none}
.pbr-liput-baris b{margin-left:auto;font-variant-numeric:tabular-nums}

/* peta kelas PBR */
.pbr-peta{margin:8px 0;border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-2);
  overflow:hidden;background:#0d1620;width:max-content;max-width:100%}
.pbr-kanvas{display:block;max-width:100%}

/* tab dunia: PBR, dedaunan, air */
.subtab.kecil{margin:2px 0 12px}
.subtab.kecil button{height:30px;font-size:12.5px;padding:0 12px}
.pbr-kelas{display:flex;flex-direction:column;gap:6px;margin:8px 0 12px}
.pbr-kelas-baris{display:flex;align-items:center;gap:8px}
.pbr-kelas-baris .gaea-masukan{flex:1;min-width:0;height:32px}
.pbr-bahan{padding:12px 14px;margin:8px 0;border:1px solid var(--tepi-halus);
  border-radius:var(--gaea-r-2);background:var(--isi-1);display:flex;flex-direction:column;gap:8px}
.pbr-bahan-kepala{display:flex;align-items:center;gap:8px}
.pbr-bahan-kepala .titik{width:12px;height:12px;border-radius:50%;display:inline-block}
.pbr-bahan .dunia-angka{flex-direction:row;align-items:center;gap:10px}
.pbr-bahan .dunia-angka > span:first-child{width:110px;flex:none}
.dunia-air.tegak{flex-direction:column;align-items:stretch;gap:10px}
.dunia-kisi{display:flex;gap:18px;flex-wrap:wrap;margin:4px 0 12px}
.dunia-angka{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--gaea-redup)}
.dunia-angka .gaea-masukan{width:120px;height:32px}
.dunia-air{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 12px;margin:6px 0;
  border:1px solid var(--tepi-halus);border-radius:var(--gaea-r-2);background:var(--isi-1)}
.dunia-air b{font-size:13px}

/* deret waktu: baris + ikon */
.deret-alat{display:flex;align-items:center;gap:6px;margin:2px 0 8px}
.deret-cacah{font-size:11.5px;color:var(--gaea-redup);margin-right:auto;
  font-variant-numeric:tabular-nums}
.deret-hal{font-size:11.5px;color:var(--gaea-redup);min-width:34px;text-align:center;
  font-variant-numeric:tabular-nums}
.deret-saring{display:flex;flex-direction:column;gap:6px;margin:0 0 10px}
.deret-saring .gaea-masukan{height:30px;font-size:12.5px}
.deret-rentang{display:flex;align-items:center;gap:6px}
.deret-rentang .gaea-masukan{flex:1;min-width:0}
.epoch-baris{display:flex;align-items:stretch;gap:6px;margin:4px 0}
.epoch-baris .epoch{flex:1;min-width:0;margin:0}
.ep-ikon{display:flex;align-items:center;gap:4px;flex:none}
.ep-ik{display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;padding:0;flex:none;border-radius:var(--gaea-r-1);
  border:1px solid var(--tepi-halus);background:var(--isi-1);
  color:var(--gaea-redup);cursor:pointer;transition:var(--gerak)}
.ep-ik:hover{background:var(--isi-2);color:var(--gaea-tinta)}
.ep-ik.nyala{background:rgba(var(--aksen),.22);border-color:rgba(var(--aksen),.45);
  color:#DDF3E6}
.ep-ik:disabled{opacity:.35;cursor:default}
.ep-ik:focus-visible{outline:0;box-shadow:var(--cincin)}
.baris-legenda{display:flex;align-items:center;padding:2px 2px 6px}
.baris-legenda .pa-legenda{font-size:11.5px}
.pa-saklar.sunyi{cursor:default}

/* ═══════════════ KACA BEKU — satu material untuk semua jendela
 *
 * Sebelumnya tiap jenis jendela memakai racikannya sendiri: panel area lebih
 * pekat, jendela grafik lebih gelap, dialog lebih tebal kaburnya. Bedanya
 * kecil satu per satu, tetapi begitu tiga jendela terbuka bersamaan di atas
 * peta yang sama, ketiganya terbaca sebagai tiga bahan yang berbeda — dan yang
 * sebenarnya berbeda (mana yang sedang dipakai) justru tidak terbaca.
 *
 * Racikannya: kaburkan yang di belakang cukup dalam sampai tidak terbaca lagi,
 * naikkan warnanya sedikit supaya peta di baliknya tetap terasa, lalu satu
 * garis cahaya di tepi atas — itu yang membuat mata membacanya sebagai
 * lembaran kaca, bukan sebagai kotak gelap yang kebetulan tembus pandang.
 */
:root{
  --beku-kabur:26px;
  --beku-isi:rgba(17,26,22,.60);
  --beku-isi-tebal:rgba(15,23,19,.72);
  --beku-tepi:rgba(255,255,255,.15);
  --beku-kilau:rgba(255,255,255,.20);
  --beku-sinar:
    linear-gradient(158deg,rgba(255,255,255,.10),rgba(255,255,255,.028) 38%,rgba(255,255,255,0) 62%),
    radial-gradient(120% 86% at 6% -6%,rgba(255,255,255,.09),transparent 58%);
}
.palet,
.panel-area,
.dok-grafik,
.tirai-kotak,
.wdg,
.pemilih-tekstur,
.gaea-kaca{
  background-color:var(--beku-isi);
  background-image:var(--beku-sinar);
  border-color:var(--beku-tepi);
  -webkit-backdrop-filter:blur(var(--beku-kabur)) saturate(1.45) brightness(1.05);
  backdrop-filter:blur(var(--beku-kabur)) saturate(1.45) brightness(1.05);
  box-shadow:var(--gaea-naung-2),
    inset 0 1px 0 var(--beku-kilau),
    inset 0 0 0 1px rgba(255,255,255,.04);
}
/* Yang memuat teks padat (laporan, tabel angka) sedikit lebih pekat: kaca yang
   sama tidak boleh membuat deretan angka harus dibaca dua kali. */
.dok-lapor,
.panel-area.lebar,
.palet.dialog-kaca{
  background-color:var(--beku-isi-tebal);
}
/* Kepala jendela: sedikit lebih terang daripada badannya, seperti tepi kaca
   yang menangkap cahaya — sekaligus memisahkan gagang seret dari isinya. */
.dok-kepala,
.pa-kepala,
.wdg>header{
  background-image:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,0));
  border-bottom:1px solid rgba(255,255,255,.10);
}
.dok-grafik .jd-isi,
.panel-area .isi{background:transparent}
/* Tirai pemuatan memakai bahan yang sama, hanya lebih tebal kaburnya —
   di baliknya peta yang BELUM boleh dibaca. */
.tirai-peta{backdrop-filter:blur(30px) saturate(1.35) brightness(1.05);
  -webkit-backdrop-filter:blur(30px) saturate(1.35) brightness(1.05)}

/* Kaca bisa dimatikan (Setting → Tampilan): mesin lawas menggambar backdrop
   blur dengan mahal, dan peta yang tersendat lebih buruk daripada panel yang
   datar. Semua jendela ikut, bukan sebagiannya. */
[data-kaca="mati"] .palet,
[data-kaca="mati"] .panel-area,
[data-kaca="mati"] .dok-grafik,
[data-kaca="mati"] .tirai-kotak,
[data-kaca="mati"] .wdg,
[data-kaca="mati"] .pemilih-tekstur,
[data-kaca="mati"] .tirai-peta{
  background-image:none;
  background-color:rgba(12,18,15,.96);
  -webkit-backdrop-filter:none;backdrop-filter:none;
}

/* Titik di sebelah GAEA membawa keadaan simpan.
 *
 * Hijau diam = tersimpan, dan itu keadaan biasa, jadi ia tidak menarik
 * perhatian. Kuning berdenyut saat sedang menyimpan, merah saat yang terakhir
 * gagal — satu-satunya yang benar-benar menuntut dibaca, dan satu-satunya yang
 * juga memunculkan pesan. */
.merek[data-simpan="kerja"]>i{background:#E9C46A;animation:merekDenyut 1s ease-in-out infinite}
.merek[data-simpan="gagal"]>i{background:#E5484D;box-shadow:0 0 0 3px rgba(229,72,77,.22)}
@keyframes merekDenyut{0%,100%{opacity:1}50%{opacity:.35}}
@media (prefers-reduced-motion:reduce){
  .merek[data-simpan="kerja"]>i{animation:none;opacity:.6}
}

/* display:flex mengalahkan atribut hidden — kotak parameter analitik tetap
 * terlihat walau saklarnya mati, dan yang terlihat di sana terbaca sebagai
 * sesuatu yang sedang berlaku. */
.sf-kotak[hidden]{display:none!important}

/* ── DINDING KENDALI CCTV ─────────────────────────────────────────────
 *
 * Kartu selebar minimal 280px: lebih sempit dari itu, plat nomor dan orang
 * di gambar berhenti terbaca dan dindingnya berubah jadi hiasan bergerak.
 * Rasio 16:9 dipaksakan supaya tinggi barisnya sama — dinding yang tiap
 * kartunya setinggi sendiri menyulitkan mata membandingkan dua kamera. */
.cctv-dinding{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;margin-top:12px}
.cctv-kartu{position:relative;border-radius:var(--gaea-r-3);overflow:hidden;cursor:pointer;
  border:1px solid var(--tepi-halus);background:#000;transition:border-color .12s,transform .12s}
.cctv-kartu:hover{border-color:rgba(var(--aksen),.55)}
.cctv-kartu.seret{opacity:.4}
.cctv-kartu.sasaran{border-color:rgba(var(--aksen),.9);transform:scale(1.02)}
.cctv-layar{position:relative;aspect-ratio:16/9;background:#050a07;display:grid;place-items:center}
/* Di modal, bingkai ditampilkan UTUH — bukan dipotong.
 *
 * Kartu di dinding boleh memotong: di situ yang dicari kesan, dan tepi kiri
 * yang hilang tidak menyesatkan siapa pun. Di modal lain: lapisan deteksi
 * memetakan koordinatnya ke bingkai PENUH, jadi gambar yang dipotong akan
 * menaruh kotak deteksi di tempat yang bukan tempatnya — dan yang melihat
 * tidak punya cara menduga bahwa yang salah adalah tata letaknya, bukan
 * detektornya.
 *
 * Tingginya dibatasi 62vh supaya kaki modal — nama analitik dan keadaan
 * detektornya — tidak terdorong ke luar layar pada layar laptop. */
/* Kepala jendela dan kaki analitik dihitung keluar dari tinggi yang tersedia:
 * pada layar laptop pendek, panggung yang hanya dibatasi vh akan mendorong
 * keadaan detektornya ke luar layar — dan itu justru baris yang paling
 * perlu dibaca di jendela ini. */
/* TINGGI yang menentukan, lebar mengikuti — bukan sebaliknya.
 *
 * Dengan width + aspect-ratio, max-height hanya MEMOTONG: lebarnya tetap
 * 1100px, tingginya tetap 619px, dan yang lebih dari itu tumpah keluar kotak
 * modal. Yang terlihat orang: video menembus tepi jendelanya sendiri.
 *
 * Tinggi ditetapkan lebih dulu, aspect-ratio menurunkan lebarnya dari situ,
 * jadi tidak ada ukuran yang bisa melampaui wadahnya. 220px yang dikurangkan
 * adalah kepala jendela, kaki analitik, dan napas di atas-bawahnya. */
.cctv-layar.besar{
  /* Mutlak mengisi panggung: inset:0 tidak bisa dilampaui isinya, dan
   * itulah satu-satunya jaminan yang tidak bergantung pada apakah tinggi
   * induknya "tentu" menurut browser. */
  position:absolute;inset:0;width:auto;height:auto;aspect-ratio:auto;
  display:grid;place-items:center}
.cctv-layar.besar .cctv-video{
  /* contain, bukan cover: lapisan deteksi memetakan koordinatnya ke bingkai
   * PENUH, dan gambar yang terpotong menaruh kotak di tempat yang bukan
   * tempatnya — meleset rapi yang terbaca sebagai kalibrasi kamera salah. */
  /* MUTLAK, bukan 100%.
   *
   * height:100% pada elemen video kalah oleh rasio intrinsiknya: pada panggung
   * 1050x305 ia tetap menggambar dirinya 1050x788 mengikuti 4:3 bawaan
   * alirannya, lalu menimpa kepala dan kaki jendela. Dengan inset:0 ukurannya
   * datang dari jarak ke tepi wadahnya — tidak ada rasio yang bisa
   * membantahnya, dan object-fit yang mengurus surat-menyuratnya. */
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:contain;background:#000}
/* TIDAK overflow:hidden — lihat catatan di .cctv-layar.besar.
 *
 * Yang dipotongnya bukan video yang tumpah melainkan kaki modal, dan
 * kaki itulah yang menyebutkan apakah ada detektor yang melihat. */
.cctv-video{width:100%;height:100%;object-fit:cover;display:block}
.cctv-gagal{display:flex;flex-direction:column;align-items:center;gap:8px;padding:14px;
  color:var(--gaea-redup);font-size:12px;text-align:center}
/* Silang hanya saat kartunya disentuh: dinding penuh silang terbaca sebagai
 * dinding yang menunggu dihapus. */
.cctv-silang{position:absolute;top:8px;right:8px;width:26px;height:26px;border-radius:999px;
  display:grid;place-items:center;border:0;cursor:pointer;opacity:0;transition:opacity .12s;
  background:rgba(0,0,0,.62);color:#fff}
.cctv-kartu:hover .cctv-silang,.cctv-silang:focus-visible{opacity:1}
.cctv-silang:hover{background:rgba(229,72,77,.85)}
.cctv-kaki{display:flex;align-items:center;gap:10px;padding:8px 10px;background:var(--isi-1)}
.cctv-nama{min-width:0;flex:1}
.cctv-nama b{display:block;font-size:12.5px;font-weight:600}
.cctv-nama span{display:block;font-size:11.5px;color:var(--gaea-redup);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cctv-ai{display:flex;gap:3px;flex:0 0 auto}
.cctv-ai .ikon-aksi{width:26px;height:26px;border-radius:999px}
.cctv-ai .ikon-aksi.aktif{background:rgba(var(--aksen),.24);color:#CFEBD9}
/* Modal CCTV: kolom flex yang benar-benar membatasi isinya.
 *
 * Tanpa min-height:0 pada panggungnya, butir flex menolak mengecil di bawah
 * tinggi isinya — videonya tetap sebesar aslinya dan seluruh susunan ini tidak
 * mengubah apa pun. Itu satu baris yang paling mudah terlewat di sini. */
.cctv-modal{width:min(92vw,1100px);max-width:94vw;
  /* TINGGI, bukan max-height: panggung hanya bisa mengambil "sisa"
   * kalau ada yang tentu untuk disisakan. Dengan max-height saja,
   * tingginya kembali diturunkan dari isinya — dan isinya itulah yang
   * sedang dibatasi. */
  height:min(88vh,760px);display:flex;flex-direction:column}
.cctv-panggung{position:relative;flex:1 1 auto;min-height:0}
/* Lapisan deteksi menumpang di atas gambar tanpa pernah menangkap klik:
 * yang diklik orang di sini tetap pemutarnya. */
.cctv-lapis{position:absolute;inset:0;pointer-events:none}
.cctv-modal-kaki{margin-top:10px;gap:8px;flex-wrap:wrap;align-items:center;
  flex:0 0 auto;padding:0 2px 2px}

/* Kanvas kotak deteksi ditaruh mutlak di dalam lapisan, lalu digeser lewat
 * JS supaya duduk tepat di atas piksel videonya — bukan di atas elemennya.
 * object-fit: contain menyisakan bilah hitam, dan kotak yang mengabaikan
 * bilah itu meleset serapi kalibrasi yang salah. */
.cctv-kanvas{position:absolute;pointer-events:none}

/* ── PENYUNTING GEOMETRI DI ATAS BINGKAI ─────────────────────────── */
.bingkai-sunting{width:auto;max-width:94vw}
.bingkai-panggung{display:grid;place-items:center;background:#000;border-radius:var(--gaea-r-2);
  overflow:hidden}
/* crosshair, bukan panah: yang dilakukan orang di sini menaruh TITIK, dan
 * panah menyembunyikan ujungnya sendiri di bawah gambar panahnya. */
.bingkai-kanvas{display:block;max-width:100%;cursor:crosshair}
.bingkai-petunjuk{margin:8px 2px 0;font-size:12px}
.bingkai-nilai{display:flex;gap:8px;margin-top:8px}
.bingkai-nilai .gaea-masukan{flex:1}
.bingkai-kaki{margin-top:10px;gap:8px;align-items:center;flex-wrap:wrap}
.tombol.kecil{height:26px;padding:0 10px;font-size:11.5px}
