/* STC XXI Technical Report - sistem desain "Ruang Proyeksi" (frontend saja) */
:root{
 color-scheme:light;
 --moss-950:#04170f;--moss-900:#082418;--moss-800:#0d3626;--moss-700:#14503a;--moss-600:#1b6a4d;--moss-500:#2a8a65;
 --gold:#b8913f;--gold-hi:#e1c476;--gold-lo:#7c6024;--gold-50:#fbf5e4;--gold-100:#efdfae;
 --bg:#eef1ee;--card:#fff;--card2:#f6f8f6;--bd:#dce3de;--bd2:#c5d0c9;
 --ink:#0b1c14;--txt:#1b2d24;--mut:#5b6d63;--ph:#93a39a;--lbl:#2c4137;
 --g50:#edf3ef;--g100:#dde9e2;--g200:#bfd5c8;--row2:#f6f9f7;--dis:#f0f3f1;
 --gt:#0d3626;--gt2:#1b6a4d;
 --brass:var(--gold);--brass-l:var(--gold-100);--brass-d:var(--gold-lo);--brass-50:var(--gold-50);
 --red:#b3261e;--red-bg:#fdeceb;--ok:#17703f;--ok-bg:#e1f2e7;--warn:#8a5a00;--warn-bg:#fdf0cf;--info:#1a5aa5;--info-bg:#e3edfa;
 --r-s:8px;--r-m:14px;--r-l:22px;
 --sh1:0 1px 2px #08241812;--sh2:0 24px 60px #08241833;
 --font:"Hanken Grotesk",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
 --serif:"Bodoni Moda","Didot","Bodoni 72",Georgia,serif;
 --safe-b:env(safe-area-inset-bottom,0px);--tabh:calc(64px + var(--safe-b));
}
:root[data-theme=dark]{
 color-scheme:dark;
 --bg:#060c09;--card:#0d1612;--card2:#111d17;--bd:#1b2b22;--bd2:#2a3f33;
 --ink:#eef4f0;--txt:#cfdcd4;--mut:#8a9f94;--ph:#5f7569;--lbl:#b2c5ba;
 --g50:#101c16;--g100:#16261d;--g200:#2a4a39;--row2:#0f1a14;--dis:#121f18;
 --gt:#b5e0c9;--gt2:#6fd0a0;
 --gold-50:#221d0d;--gold-100:#5e4b1b;--gold-lo:#e1c476;
 --red:#ff8a80;--red-bg:#361512;--ok:#6fd0a0;--ok-bg:#10291c;--warn:#f0c15c;--warn-bg:#2f2406;--info:#8ab8f0;--info-bg:#10243c;
 --sh1:0 1px 2px #000a;--sh2:0 24px 60px #000c;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;font:14.5px/1.55 var(--font);color:var(--txt);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
:root[data-theme=dark] body{background:radial-gradient(1200px 520px at 80% -10%,#0f2a1d 0,transparent 60%),var(--bg);background-attachment:fixed}
.hidden{display:none!important}
:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
td,.n,.cd b,.cdl,#clock,.dsr strong{font-variant-numeric:tabular-nums}
@keyframes fade{from{opacity:0}}
@keyframes pop{from{opacity:0;transform:translateY(10px)}}
@keyframes sheet{from{transform:translateY(40px);opacity:.6}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes sh{to{background-position:-200% 0}}
@keyframes flick{0%{opacity:.85}8%{opacity:.6}10%{opacity:1}34%{opacity:.8}36%{opacity:1}64%{opacity:.7}66%{opacity:.95}100%{opacity:.85}}
@keyframes sceneIn{from{opacity:0}}
@keyframes lensOn{from{opacity:0;transform:translate(-50%,-50%) scale(.4)}}
@keyframes beamOn{from{opacity:0}}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes rise{from{opacity:0;transform:translateY(14px)}}
@keyframes sweep{from{opacity:0;transform:translateX(-30px)}}
@keyframes tpop{from{opacity:0;transform:translate(-50%,10px)}}
@keyframes lok{to{opacity:0;transform:translateY(-8px) scale(.98)}}
@keyframes appin{from{opacity:0}}
.rl{transform-box:fill-box;transform-origin:center;animation:spin 3s linear infinite}

/* ---------- tombol ---------- */
button{font:inherit;cursor:pointer;border:0;border-radius:11px;padding:10px 18px;min-height:42px;transition:background .16s,border-color .16s,box-shadow .16s,color .16s,transform .16s}
button:active{transform:scale(.98)}
.btn{background:linear-gradient(180deg,var(--moss-600),var(--moss-700));color:#fff;font-weight:700;box-shadow:0 1px 0 #ffffff26 inset,0 6px 16px -6px #0d362699}
.btn:hover{background:linear-gradient(180deg,#22805c,var(--moss-600));box-shadow:0 1px 0 #ffffff30 inset,0 10px 22px -8px #0d3626b0}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.sec{background:var(--card);color:var(--gt);border:1px solid var(--bd2);font-weight:600;box-shadow:none}
.btn.sec:hover{background:var(--g50);border-color:var(--gt2)}
.btn.sec:disabled{opacity:.45}
td button,.macts button{min-height:36px;padding:6px 14px;font-size:13px}
button.lnk{background:none;border:0;min-height:0;padding:4px 2px;color:var(--gt2);font-weight:700;font-size:13px;border-radius:6px}
button.lnk:hover{color:var(--gold-lo);text-decoration:underline}
:root[data-theme=dark] .btn{background:linear-gradient(180deg,#1f7a58,#175f45)}
:root[data-theme=dark] .btn:hover{background:linear-gradient(180deg,#27916a,#1f7a58)}
:root[data-theme=dark] .btn.sec{background:var(--card);box-shadow:none;color:var(--gt)}
:root[data-theme=dark] .btn.sec:hover{background:var(--g100);border-color:var(--gt2)}
:root[data-theme=dark] .sact .btn.sec{background:#ffffff0d}
:root[data-theme=dark] .sact .btn.sec:hover{background:#ffffff1c}
.btn.prog{background:linear-gradient(90deg,#2fa476 var(--p,0%),var(--moss-700) var(--p,0%));transition:background .25s}
.btn.prog:disabled{opacity:.9}

/* ---------- form ---------- */
input,select,textarea{font:inherit;width:100%;padding:10px 13px;border:1px solid var(--bd2);border-radius:11px;min-height:44px;background:var(--card);color:var(--txt);transition:border-color .16s,box-shadow .16s}
textarea{resize:vertical}
input::placeholder,textarea::placeholder{color:var(--ph)}
input:focus,select:focus,textarea:focus{outline:0;border-color:var(--gold);box-shadow:0 0 0 3px #b8913f33}
input:disabled{background:var(--dis)}
input[type=file]{padding:9px;background:var(--g50);border:1.5px dashed var(--g200);color:var(--mut)}
input[type=file]::file-selector-button{font:inherit;font-weight:700;border:0;background:var(--moss-700);color:#fff;border-radius:8px;padding:8px 14px;margin-right:12px;cursor:pointer}
input[type=checkbox]{accent-color:var(--moss-600)}
label{display:block;font-weight:600;margin:14px 0 6px;color:var(--lbl);font-size:13px}
h2{margin:0 0 12px;font-size:15px;font-weight:700;color:var(--ink);letter-spacing:0}
#view>h2:first-child{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);margin:-1px;padding:0;border:0;white-space:nowrap}
small{color:var(--mut)}

/* ---------- login ---------- */
#login{position:relative;min-height:100vh;min-height:100dvh;display:grid;grid-template-columns:1.1fr 1fr}
.lhero{position:relative;overflow:hidden;background:radial-gradient(ellipse at 28% 18%,#14583f 0,#0a2d20 40%,#040f0a 100%);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;text-align:center}
.lhero::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(135deg,#ffffff05 0 2px,transparent 2px 24px);z-index:0}
.lhero>*{position:relative;z-index:2}
.lhero>.lscene{z-index:auto}
.lhero .llogo{width:min(220px,52%);margin:0 0 6px}
.lscene{position:relative;width:min(600px,94%);margin:8px 0 14px;background:radial-gradient(closest-side at 56% 52%,#2f8f69 0,#17684b 48%,transparent 100%)}
.lhero .lphoto{display:block;width:100%;height:auto;margin:0;mix-blend-mode:multiply;filter:brightness(1.4) contrast(1.06);animation:sceneIn 1.3s .1s both}
.lbeam{position:absolute;z-index:2;left:78%;top:45%;width:78%;height:105%;transform:translateY(-50%);clip-path:polygon(0 48%,100% 8%,100% 92%,0 52%);background:linear-gradient(90deg,rgba(255,236,190,.42),rgba(255,236,190,.04) 85%,transparent);pointer-events:none;animation:beamOn 1s 1s both,flick 3.4s 2s infinite steps(1)}
.lglow{position:absolute;z-index:2;left:78%;top:45%;width:96px;height:96px;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,rgba(255,246,220,.95),rgba(255,236,190,.34) 42%,transparent 70%);pointer-events:none;animation:lensOn 1.5s .7s both}
.lscene.x{min-height:120px}.lscene.x .lbeam,.lscene.x .lglow{display:none}
.lhero h1{margin:2px 0 0;font-family:var(--serif);font-size:38px;font-weight:500;letter-spacing:.01em;line-height:1.1}
.lhero .sub{margin:12px 0 0;color:var(--gold-hi);font-size:13px;font-weight:600;letter-spacing:.16em;text-transform:uppercase}
.lhero .tag{margin-top:22px;color:#a9c7ba;font-size:14px;max-width:340px}
.lpane{display:flex;align-items:center;justify-content:center;padding:32px;background:var(--card)}
:root[data-theme=dark] .lpane{background:var(--bg)}
.lbox{width:100%;max-width:390px;animation:pop .6s .9s both}
.lbox .hello{color:var(--gold-lo);font-size:13.5px;font-weight:700;margin-bottom:6px}
.lbox h2{font-family:var(--serif);font-size:34px;font-weight:500;margin-bottom:8px;line-height:1.1;letter-spacing:0}
.lbox p{color:var(--mut);margin:0 0 12px}
.pw{display:flex;gap:8px}.pw button{white-space:nowrap}
#lerr{color:var(--red);min-height:22px;margin:10px 0 0;font-size:13.5px}
.lfoot{margin-top:26px;color:var(--ph);font-size:12px;text-align:center}
#login.ok .lbox{animation:lok .55s ease both}
#login.ok #lbtn{background:var(--ok)!important;color:#fff}
.thm{min-height:38px;min-width:38px;width:38px;padding:0;border-radius:11px;background:var(--card);color:var(--gt);border:1px solid var(--bd2);font-size:17px;line-height:1;display:inline-flex;align-items:center;justify-content:center}
.thm:hover{border-color:var(--gold)}
.lthm{position:absolute;top:14px;right:14px;z-index:5}

/* ---------- rangka aplikasi ---------- */
#app{display:flex;min-height:100vh}
#app.enter{animation:appin .5s ease both}
#side{width:260px;flex:none;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;color:#fff;background:linear-gradient(180deg,#0a2a1e 0,#05140e 50%,#020806 100%);box-shadow:inset -1px 0 0 #b8913f40}
.brand{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:24px 22px 18px;border-bottom:1px solid #ffffff12}
.brand img{width:92px;display:block}
.brand b{display:block;color:#fff;font-size:14px;font-weight:700;line-height:1.2}
.brand small{display:block;color:#8fb3a2;font-size:11.5px;line-height:1.3;margin-top:2px}
#nav{flex:1;padding:6px 12px 12px;overflow:auto;scrollbar-width:thin;scrollbar-color:#ffffff22 transparent}
.ng{margin:20px 12px 6px;font-size:12px;font-weight:700;color:var(--gold-hi);opacity:.8}
#nav a{display:flex;align-items:center;gap:12px;padding:9px 12px;border-radius:11px;color:#bdd4c8;cursor:pointer;min-height:42px;margin-bottom:2px;position:relative;font-size:14px;font-weight:500;transition:background .16s,color .16s,padding .16s}
#nav a i{display:flex;opacity:.85}
#nav a:hover{background:#ffffff10;color:#fff;padding-left:15px}
#nav a.on{background:linear-gradient(90deg,#b8913f33,#ffffff0d);color:#fff;font-weight:700}
#nav a.on i{color:var(--gold-hi);opacity:1}
#nav a.on::before{content:"";position:absolute;left:-12px;top:8px;bottom:8px;width:4px;border-radius:0 4px 4px 0;background:var(--gold)}
#nav a.soon{opacity:.7}
#nav a .sb{margin-left:auto;font-size:10px;font-weight:700;letter-spacing:.06em;color:var(--moss-950);background:var(--gold-100);border-radius:99px;padding:2px 8px}
svg.ic{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
.sfoot{padding:12px;border-top:1px solid #ffffff14}
.sme{display:flex;align-items:center;gap:10px;padding:4px 6px 12px}
.sme b{display:block;color:#fff;font-size:13.5px;line-height:1.25;word-break:break-word}
.av{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,#e1c476,#9a7b3f);color:#1b1405;display:flex;align-items:center;justify-content:center;font-weight:800;flex:none;overflow:hidden}
.av img{width:100%;height:100%;object-fit:cover;display:block}
.badge{display:inline-block;margin-top:3px;background:#ffffff18;color:var(--gold-hi);border-radius:99px;padding:1px 9px;font-size:11px;font-weight:700}
.sact{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.sact .btn.sec{background:#ffffff0d;color:#e6f1ea;border:1px solid #ffffff22;min-height:38px;padding:6px 10px;font-size:13px}
.sact .btn.sec:hover{background:#ffffff1c;border-color:#ffffff44}
#main{flex:1;min-width:0;display:flex;flex-direction:column}
header{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:16px;height:60px;padding:0 28px;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:blur(14px);border-bottom:1px solid var(--bd)}
.hlogo{display:none}
.hs{flex:1;min-width:0}
.hs b{display:block;font-size:13.5px;font-weight:700;color:var(--mut);line-height:1.25}
.hs small{display:none}
.clk{display:flex;align-items:center;gap:12px}
#clock{font-size:12.5px;color:var(--mut);font-weight:600}
#conn{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--ok);background:var(--ok-bg);border-radius:99px;padding:4px 11px}
#conn::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
#conn.bad{color:var(--red);background:var(--red-bg)}
#view{padding:22px 28px 28px;max-width:1280px;width:100%}
#view>*:not(.bar){animation:fade .3s both}
#cp{margin-top:auto;padding:18px 16px 22px;text-align:center;font-size:12px;color:var(--mut)}
#shade{display:none}#tabs{display:none}

/* ---------- tombol tutup/buka menu samping (desktop) ---------- */
.sbtn{flex:none}
@media(min-width:821px){
 #side{transition:margin-left .28s cubic-bezier(.2,.8,.2,1),visibility 0s}
 body.sb-off #side{margin-left:-260px;visibility:hidden;transition:margin-left .28s cubic-bezier(.2,.8,.2,1),visibility 0s .28s}
 body.sb-off #view{max-width:1500px}
 body.sb-off #phero{max-width:1444px}
}
/* ---------- banner halaman ---------- */
#phero{position:relative;overflow:hidden;margin:22px 28px 0;max-width:1224px;border-radius:var(--r-l);min-height:150px;color:#fff;display:flex;align-items:flex-end;isolation:isolate;animation:rise .45s both}
#phero.ph-a{background:radial-gradient(120% 160% at 100% 0,#1a6a4c 0,#0d3626 45%,#04140d 100%)}
#phero.ph-b{background:radial-gradient(120% 160% at 0 100%,#4a3a14 0,#0d3626 40%,#04140d 100%)}
#phero.ph-g{background:radial-gradient(120% 160% at 100% 100%,#6a5420 0,#123d2c 42%,#04140d 100%)}
#phero.ph-w{background:radial-gradient(120% 160% at 100% 0,#6a4a12 0,#14352a 45%,#04140d 100%)}
#phero::after{content:"";position:absolute;inset:0;z-index:-1;background:repeating-linear-gradient(135deg,#ffffff05 0 2px,transparent 2px 24px);pointer-events:none}
.ph-img{position:absolute;z-index:-1;right:0;top:0;bottom:0;width:52%;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 38%);mask-image:linear-gradient(90deg,transparent 0,#000 38%)}
.ph-img img{display:block;width:100%;height:100%;object-fit:cover;filter:drop-shadow(0 18px 24px #000a);animation:sceneIn 1s both}
.ph-t{display:flex;align-items:flex-end;gap:16px;padding:26px 30px}
.ph-t i{display:flex;align-items:center;justify-content:center;width:46px;height:46px;border-radius:14px;background:#ffffff14;border:1px solid #b8913f80;color:var(--gold-hi);flex:none;margin-bottom:4px}
.ph-t h1{margin:0;font-family:var(--serif);font-size:36px;font-weight:500;line-height:1.1;letter-spacing:.005em}
.ph-t p{margin:6px 0 0;color:#b9d2c6;font-size:14px;max-width:520px}

/* ---------- dashboard ---------- */
.dh{display:grid;grid-template-columns:minmax(0,1.9fr) minmax(0,1fr);gap:16px;margin-bottom:16px}
.dh-main{position:relative;overflow:hidden;isolation:isolate;border-radius:var(--r-l);min-height:350px;color:#fff;display:flex;align-items:flex-end;padding:36px;background:radial-gradient(90% 120% at 85% 10%,#1d7452 0,#0d3626 42%,#030d08 100%);animation:rise .5s both}
.dh-main::after{content:"";position:absolute;inset:0;z-index:-1;background:repeating-linear-gradient(135deg,#ffffff05 0 2px,transparent 2px 24px)}
.dh-img{position:absolute;z-index:-1;right:2%;top:50%;width:54%;transform:translateY(-54%);animation:rise .9s .1s both}
.dh-img img{display:block;width:100%;height:auto;filter:drop-shadow(0 34px 38px #000c) drop-shadow(0 0 60px #2a8a6540)}
.lens-glow{position:absolute;left:76.4%;top:62.1%;width:64%;aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,rgba(210,232,255,.6) 0,rgba(125,178,255,.3) 13%,rgba(60,120,220,.11) 34%,transparent 62%);mix-blend-mode:screen;pointer-events:none;animation:lensPulse 4.5s ease-in-out infinite}
.lens-flare{position:absolute;left:76.4%;top:62.1%;width:58%;height:2px;transform:translate(-50%,-50%);background:linear-gradient(90deg,transparent,rgba(195,222,255,.7) 50%,transparent);filter:blur(1px);mix-blend-mode:screen;pointer-events:none}
@keyframes lensPulse{0%,100%{opacity:.78;transform:translate(-50%,-50%) scale(.96)}50%{opacity:1;transform:translate(-50%,-50%) scale(1.05)}}
.dh-main::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(90deg,#03100a 0,#03100acc 34%,transparent 62%)}
.dh-t{max-width:56%;animation:rise .6s .2s both}
.dh-t small{display:block;color:var(--gold-hi);font-weight:600;font-size:13px;margin-bottom:10px}
.dh-t h1{margin:0;font-family:var(--serif);font-weight:500;font-size:48px;line-height:1.04;letter-spacing:0}
.dh-t p{margin:14px 0 0;color:#b9d2c6;font-size:15px}
.dq{background:var(--card);border:1px solid var(--bd);border-radius:var(--r-l);padding:18px 14px 14px;display:flex;flex-direction:column;gap:2px;animation:rise .5s .08s both}
.dq h2{font-family:var(--serif);font-size:20px;font-weight:500;margin:2px 8px 10px}
.qrow{display:flex;align-items:center;gap:12px;width:100%;text-align:left;background:transparent;color:var(--txt);padding:10px 10px;border-radius:13px;min-height:0}
.qrow i{display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:11px;background:var(--g50);color:var(--gt);flex:none;transition:background .16s,color .16s}
.qrow span{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.3}
.qrow b{font-size:14px;color:var(--ink)}
.qrow small{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qrow em{font-style:normal;font-size:20px;color:var(--ph);font-weight:300;transition:transform .16s,color .16s}
.qrow:hover{background:var(--g50)}
.qrow:hover i{background:var(--moss-700);color:var(--gold-hi)}
.qrow:hover em{color:var(--gold);transform:rotate(90deg)}
.ds{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.5fr) minmax(0,1fr);gap:16px;margin-bottom:26px}
.ds>*{animation:rise .5s .16s both}
.ds-big{position:relative;overflow:hidden;border-radius:var(--r-l);padding:22px 24px;background:var(--card);border:1px solid var(--bd);display:flex;flex-direction:column;justify-content:space-between;min-height:176px}
.ds-big::before{content:"";position:absolute;right:-30px;top:-30px;width:120px;height:120px;border-radius:50%;border:1px solid var(--gold-100);box-shadow:0 0 0 14px transparent,0 0 0 15px var(--gold-100);opacity:.7}
.ds .l{font-size:13px;font-weight:700;color:var(--mut)}
.ds .n{font-family:var(--serif);font-size:84px;line-height:1;font-weight:500;color:var(--ink)}
.ds-list{border-radius:var(--r-l);padding:20px 22px;background:var(--card);border:1px solid var(--bd)}
.ds-list h2{font-size:13px;color:var(--mut);margin:0 0 6px}
.dsr{display:grid;grid-template-columns:96px 1fr 44px;align-items:center;gap:14px;width:100%;text-align:left;background:transparent;color:var(--txt);padding:12px 0;min-height:0;border-radius:0;border-bottom:1px solid var(--bd);font-weight:600}
.dsr:last-child{border-bottom:0}
.dsr i{display:block;height:8px;border-radius:99px;background:var(--g100);overflow:hidden}
.dsr i b{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--moss-600),var(--gold));transform-origin:left;animation:grow .9s .3s both cubic-bezier(.2,.8,.2,1)}
@keyframes grow{from{transform:scaleX(0)}}
.dsr strong{font-family:var(--serif);font-size:24px;font-weight:500;text-align:right;color:var(--ink)}
.dsr:hover span{color:var(--gt2)}
.ds-st{position:relative;overflow:hidden;text-align:left;border-radius:var(--r-l);padding:22px 24px;min-height:176px;display:flex;flex-direction:column;justify-content:space-between;color:#fff;font-weight:400}
.ds-st.good{background:linear-gradient(150deg,var(--moss-600),var(--moss-900))}
.ds-st.warn{background:linear-gradient(150deg,#9a6a10,#3d2a05)}
.ds-st .l{color:#ffffffcc}.ds-st .n{color:#fff}.ds-st small{color:#ffffffb8;font-size:13px}
.ds-st:hover{transform:translateY(-3px);box-shadow:var(--sh2)}
.dm{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:28px;margin:0 0 26px}
.dm>div{min-width:0}
.sh{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 12px}
.sh h2{margin:0;font-family:var(--serif);font-size:22px;font-weight:500}
.dact{background:var(--card);border:1px solid var(--bd);border-radius:var(--r-l);overflow:hidden}
.ai{display:flex;align-items:center;gap:16px;padding:14px 20px;border-bottom:1px solid var(--bd);transition:background .16s}
.ai:last-child{border-bottom:0}.ai:hover{background:var(--row2)}
.ai .kat{flex:none;min-width:122px;text-align:center}
.ai-m{flex:1;min-width:0;display:flex;flex-direction:column}
.ai-m b{color:var(--ink);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ai-m small{font-size:12.5px}
.card{background:var(--card);border:1px solid var(--bd);border-radius:var(--r-m);padding:18px}
.empty{background:var(--card);border:1.5px dashed var(--bd2);border-radius:var(--r-m);padding:34px 22px;text-align:center;color:var(--mut)}
.empty b{display:block;color:var(--ink);font-size:15px;margin-bottom:4px}
.sk{border-radius:12px;background:linear-gradient(90deg,var(--g100) 25%,var(--row2) 50%,var(--g100) 75%);background-size:200% 100%;animation:sh 1.3s linear infinite}
.info{background:var(--gold-50);border:1px solid var(--gold-100);color:var(--gold-lo);border-radius:12px;padding:10px 14px;margin:0 0 12px;font-size:13.5px}
.ann{border-left:4px solid var(--info);border-radius:4px var(--r-m) var(--r-m) 4px}
.ann-Penting{border-left-color:var(--warn)}.ann-Mendesak{border-left-color:var(--red)}
.pri{display:inline-block;font-size:11.5px;font-weight:700;padding:2px 10px;border-radius:99px;background:var(--info-bg);color:var(--info)}
.pri.Penting{background:var(--warn-bg);color:var(--warn)}.pri.Mendesak{background:var(--red-bg);color:var(--red)}

.dchart{margin:0 0 26px}
.dc-b{background:var(--card);border:1px solid var(--bd);border-radius:var(--r-l);padding:18px 22px 6px;overflow:hidden}
.dc-k{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:4px}
.dc-k b{font-family:var(--serif);font-size:32px;font-weight:500;color:var(--ink)}
.dc-b svg{display:block;width:100%;height:150px;margin:0 0 6px}
.dc-b .ln{fill:none;stroke:var(--gold);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;stroke-dasharray:1;stroke-dashoffset:1;animation:draw 1.3s .2s ease-out forwards}
@media(prefers-reduced-motion:reduce){.dc-b .ln{stroke-dasharray:none;stroke-dashoffset:0}}
body>.fab,.fab{position:fixed!important;left:auto!important;top:auto!important;margin:0!important;right:max(14px,env(safe-area-inset-right,0px))!important;bottom:calc(var(--tabh) + 14px)!important;z-index:34!important;width:auto;flex:none;border-radius:99px;padding:10px 20px;min-height:48px;font-size:14.5px;box-shadow:0 10px 26px #0d3626a0,0 0 0 3px var(--bg);transform:translateZ(0);-webkit-transform:translateZ(0)}
.fab:active{transform:translateZ(0) scale(.97)}
/* ---------- peringatan logout otomatis ---------- */
#idle{position:fixed;inset:0;z-index:90;display:flex;align-items:center;justify-content:center;padding:18px;background:#030d08b0;backdrop-filter:blur(4px);animation:fade .2s both}
.idle-b{width:min(440px,100%);background:var(--card);border:1px solid var(--bd);border-top:3px solid var(--gold);border-radius:var(--r-l);padding:24px;box-shadow:var(--sh2);animation:pop .25s both}
.idle-b>b{display:block;font-family:var(--serif);font-size:24px;font-weight:500;color:var(--ink)}
.idle-b p{margin:8px 0 18px;color:var(--txt)}
.idle-b strong{font-family:var(--serif);font-size:24px;font-weight:500;color:var(--gold-lo)}
.idle-a{display:flex;gap:10px;flex-wrap:wrap}.idle-a .btn{flex:1 1 140px}
@media(max-width:820px){#idle{align-items:flex-end;padding:0}.idle-b{width:100%;border-radius:24px 24px 0 0;padding:22px 18px calc(22px + var(--safe-b))}}
/* ---------- tiket ATS ---------- */
.tk{--stub:212px;position:relative;display:flex;background:var(--card);border:1px solid var(--bd);border-radius:var(--r-m);margin-bottom:14px;transition:transform .2s,box-shadow .2s}
.tk:hover{transform:translateY(-2px);box-shadow:var(--sh2)}
.tk .tl{flex:1;min-width:0;padding:16px 18px;display:flex;flex-direction:column;gap:6px}
.tk .tl b{font-family:var(--serif);font-size:19px;font-weight:500;color:var(--ink);line-height:1.25}
.tk .tl .pri{align-self:flex-start}
.tk .tm{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:6px}
.tk .tm small{display:block;font-size:11.5px}
.tk .tm span{font-size:13px;font-weight:600;color:var(--txt)}
.tk .tr{width:var(--stub);flex:none;padding:14px;display:flex;flex-direction:column;justify-content:center;background:var(--gold-50);border-left:2px dashed var(--gold-100);border-radius:0 var(--r-m) var(--r-m) 0}
.tk::before,.tk::after{content:"";position:absolute;right:calc(var(--stub) - 9px);width:18px;height:18px;border-radius:50%;background:var(--bg);border:1px solid var(--bd)}
.tk::before{top:-10px;border-top-color:transparent}.tk::after{bottom:-10px;border-bottom-color:transparent}
.cdl{color:var(--ink);font-size:13px;text-align:center}
.cdl>small{display:block;margin-bottom:7px;font-size:11.5px;font-weight:700;color:var(--gold-lo)}
.cd{display:grid;grid-template-columns:repeat(4,1fr);gap:5px}
.cd span{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-width:0;min-height:50px;background:var(--card);border:1px solid var(--gold-100);border-radius:9px;padding:6px 2px;font-size:10.5px;color:var(--mut);line-height:1.2}
.cd b{display:block;width:100%;text-align:center;font-family:var(--serif);font-size:19px;line-height:1.15;color:var(--ink);font-style:normal}
.grid{display:grid;gap:16px;margin:0 0 24px}
.card.film{display:grid;grid-template-columns:104px minmax(0,1fr);gap:16px;align-items:start;padding:16px;transition:transform .2s,box-shadow .2s}
.card.film:hover{transform:translateY(-2px);box-shadow:var(--sh2)}
.film img,.film .noimg{width:104px;height:152px;object-fit:cover;border-radius:12px;background:var(--g100);border:1px solid var(--bd)}
.film>div{min-width:0}
.film>div>b{font-family:var(--serif);font-size:18px;font-weight:500;color:var(--ink);line-height:1.25}
.film .cdl{margin-top:10px;text-align:left}.film .cdl>small{text-align:left}
.film .cd span{min-height:44px}.film .cd b{font-size:17px}
.film .macts{margin-top:12px}

/* ---------- daftar & tabel ---------- */
.bar{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;margin-bottom:16px;padding:14px;background:var(--card);border:1px solid var(--bd);border-radius:var(--r-l)}
.bar input,.bar select{width:auto;min-width:0}
#rq,#uq{flex:2 1 200px}
.bar .fl{display:flex;flex-direction:column;gap:4px;margin:0;flex:1 1 128px;font-size:11.5px;font-weight:700;color:var(--mut)}
.bar .fl input,.bar .fl select{width:100%}
#rs{flex:1 1 140px}
.bar .btn{flex:none}
#rx{margin-left:auto}
.scroll{overflow-x:auto;background:var(--card);border:1px solid var(--bd);border-radius:var(--r-l)}
table{border-collapse:collapse;width:100%;font-size:13.5px}
th,td{padding:14px 18px;border-bottom:1px solid var(--bd);text-align:left;vertical-align:top}
th{background:var(--card2);color:var(--mut);white-space:nowrap;font-size:12.5px;font-weight:700;border-bottom:2px solid var(--gold-100)}
tr:last-child td{border-bottom:0}
tr:hover td{background:var(--row2)}
td[data-l="No. laporan"]{font-weight:700;color:var(--gt);white-space:nowrap}
.kat{display:inline-block;background:var(--g50);color:var(--gt);border:1px solid var(--g100);border-radius:7px;padding:2px 10px;font-size:12px;font-weight:700;white-space:nowrap}
.st{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;padding:3px 11px;border-radius:99px;background:var(--g100);color:#454f57;white-space:nowrap}
.st::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
:root[data-theme=dark] .st{color:#c9d4cd}
.st-Open{background:var(--info-bg);color:var(--info)}.st-In-Progress{background:var(--warn-bg);color:var(--warn)}.st-Completed{background:var(--ok-bg);color:var(--ok)}.st-Need-Follow-up{background:var(--red-bg);color:var(--red)}
.st-Perlu-Perhatian{background:var(--warn-bg);color:var(--warn)}.st-Rusak{background:var(--red-bg);color:var(--red)}.st-Normal{background:var(--ok-bg);color:var(--ok)}
.st.ts-ok{background:var(--ok-bg);color:var(--ok)}.st.ts-warm{background:var(--red-bg);color:var(--red)}.st.ts-cold{background:#fff1b8;color:#7a5b00}
:root[data-theme=dark] .st.ts-cold{background:#3a3008;color:#f5d76e}
.st.ts-na{background:#e5e7eb;color:#374151}
:root[data-theme=dark] .st.ts-na{background:#2b3138;color:#cfd6dd}
.pg{display:flex;gap:12px;align-items:center;justify-content:center;margin-top:16px;color:var(--mut);font-size:13px}

/* ---------- modal ---------- */
#modal{position:fixed;inset:0;background:#030d08c4;backdrop-filter:blur(6px);z-index:50;display:flex;align-items:flex-start;justify-content:center;overflow:auto;padding:24px 14px}
#modal:not(.hidden){animation:fade .2s both}
.mbox{position:relative;background:var(--card);border-radius:var(--r-l);padding:28px;width:100%;max-width:700px;margin:auto;box-shadow:var(--sh2);animation:pop .25s both;border:1px solid var(--bd);border-top:3px solid var(--gold)}
.mbox h3{margin:0 0 14px;font-family:var(--serif);font-size:25px;font-weight:500;color:var(--ink);padding:0 44px 12px 0;border-bottom:1px solid var(--bd);display:flex;flex-direction:column;gap:2px;line-height:1.2}
.mid{font-family:var(--font);font-size:12.5px;font-weight:600;color:var(--mut)}
.mx{position:absolute;top:16px;right:16px;width:36px;height:36px;min-height:0;padding:0;border-radius:50%;background:var(--g50);color:var(--txt);font-size:22px;line-height:1}
.mx:hover{background:var(--g100)}
.mbox .scroll{border-radius:12px;margin-top:12px}
.mbox>table{border:1px solid var(--bd);border-radius:12px;overflow:hidden;border-collapse:separate;border-spacing:0}
.mbox>table th{width:36%;font-size:13px;color:var(--mut);font-weight:600;white-space:normal;background:var(--card2);border-bottom:1px solid var(--bd)}
.macts,.fact{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0 0}
#gal{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));gap:14px;margin-top:18px;align-items:start}
.gg{min-width:0;background:var(--card2);border:1px solid var(--bd);border-radius:16px;padding:14px}
.gg-full{grid-column:1/-1}
#gal .gg>b{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 10px;font-size:13.5px;color:var(--ink)}
#gal .gg>b span{font-size:11.5px;font-weight:700;color:var(--gold-lo);background:var(--gold-50);border:1px solid var(--gold-100);border-radius:99px;padding:1px 9px}
.gg .ph:not(.acg){display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:10px;margin:0}
.gg .ph:not(.acg) img{width:100%;height:auto;aspect-ratio:1}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.row2>div.full{grid-column:1/-1}
.seg{display:flex;gap:4px;padding:4px;background:var(--g50);border:1px solid var(--bd2);border-radius:13px}
.seg button{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;min-height:42px;padding:6px 10px;background:transparent;color:var(--mut);font-weight:600;border-radius:10px}
.seg button i{display:flex}
.seg button.on{background:var(--card);color:var(--gt);box-shadow:var(--sh1)}
#tm{display:flex;flex-wrap:wrap;gap:8px}
#tm label{display:inline-flex;align-items:center;gap:8px;margin:0!important;padding:8px 14px;border:1px solid var(--bd2);border-radius:99px;font-weight:500!important;font-size:13.5px;background:var(--card);cursor:pointer}
#tm label:has(input:checked){background:var(--g50);border-color:var(--gold);color:var(--gt)}
#tm input{width:auto!important;min-height:0!important}
.irow{display:grid;grid-template-columns:2fr 1fr 74px 74px 1.1fr auto;gap:6px;margin-bottom:8px;align-items:center}
.irow input{padding:8px 10px;min-height:40px}
.irow b{font-size:12.5px;white-space:nowrap}
.ph{display:flex;flex-wrap:wrap;gap:10px;margin:8px 0}
.ph div{position:relative}
.ph img{width:108px;height:108px;object-fit:cover;border-radius:12px;border:1px solid var(--bd);cursor:zoom-in;background:var(--bg);font-size:11px;color:var(--red)}
.ph .x{position:absolute;top:4px;right:4px;padding:0 7px;min-height:26px;background:#000b;color:#fff;border-radius:6px}
.merr{color:var(--red);min-height:20px;margin-top:8px;font-size:13.5px}
.vh{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.pick{display:flex;gap:10px;flex-wrap:wrap;margin:2px 0 6px}
.pick .pk{display:inline-flex;align-items:center;justify-content:center;margin:0;min-height:44px;cursor:pointer;flex:1 1 160px;max-width:260px;text-align:center}
.iu{display:flex;flex-direction:column;gap:4px;min-width:0}
.iu select,.iu input{padding:8px 10px;min-height:40px}
.mbox,.mbox form{min-width:0}.mbox input,.mbox select,.mbox textarea{max-width:100%}
#toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:var(--moss-900);color:#fff;padding:13px 20px;border-radius:13px;z-index:99;display:none;max-width:90%;border-left:4px solid #4cc38a;box-shadow:var(--sh2);font-size:14px}
#toast.show{display:block;animation:tpop .3s both}
#toast.err{border-left-color:#f0605d}
.zipbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0 0;padding:10px 12px;border:1px solid var(--bd);border-radius:13px;background:var(--g50)}
.zipbar span{flex:1 1 140px;font-size:13px;color:var(--mut);font-weight:600}
.zipbar .btn{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;min-height:38px;padding:6px 14px;font-size:13px}

/* ---------- meteran & grafik ---------- */
.msec{display:flex;align-items:center;gap:8px;font-weight:700;color:var(--gt);margin:18px 0 2px;padding-bottom:6px;border-bottom:1px solid var(--gold-100)}
.msec i{display:flex}.msec .ic{width:18px;height:18px}
.mlive{background:var(--row2);border:1px solid var(--bd);border-radius:14px;padding:12px;margin:14px 0 4px;font-size:13.5px}
.mlive .scroll{border-radius:10px}
.mt{width:100%;border-collapse:collapse;font-size:13.5px}
.mt th,.mt td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--bd);white-space:nowrap}
.mt th{color:var(--mut);font-size:12px;font-weight:700;background:none}
.mt td.neg,.neg{color:var(--red);font-weight:700}
.mh{font-weight:700;color:var(--ink);margin:16px 0 8px}.mh small{font-weight:500;color:var(--mut)}
.mnote{display:block;color:var(--mut);margin:6px 0 0;line-height:1.45}
.macc{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin:8px 0}
.macc>div{background:var(--row2);border:1px solid var(--bd);border-radius:14px;padding:10px 12px;display:flex;flex-direction:column;gap:2px}
.macc small{color:var(--mut);font-weight:600}.macc b{font-family:var(--serif);font-size:22px;font-weight:500;color:var(--ink)}.macc span{font-size:12px;color:var(--mut)}
.mp{margin-bottom:16px}.mp h3{margin:0 0 10px}
.mbar{margin:0 0 12px;padding:0;border:0;background:none}
.mlts{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.mlt{border:1px solid var(--gold-100);background:var(--gold-50);color:#4f3f14;border-radius:14px;padding:10px 12px;display:flex;flex-direction:column;gap:2px;font-size:13px}
.mlt small{color:var(--gold-lo)}
:root[data-theme=dark] .mlt{color:#ecdca8}
.mch{overflow-x:auto;margin:4px 0}.mch svg{display:block;height:auto}
.cax{stroke:var(--bd2);stroke-width:1}.cgr{stroke:var(--bd);stroke-width:1}.ctx{fill:var(--mut);font-size:11px;font-family:inherit}
.mlg{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--mut)}
.mlg i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:6px;vertical-align:-1px}
.mdet summary{cursor:pointer;color:var(--gt);font-weight:600;margin:8px 0}
.mcc{display:flex;gap:8px 14px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin:6px 0}
.mct{display:flex;gap:6px;flex-wrap:wrap}.mct .btn{min-height:34px;min-width:36px;padding:0 10px;font-size:14px;line-height:1;white-space:nowrap}
.mlb{background:none;border:1px solid var(--bd2);border-radius:999px;padding:4px 11px;color:var(--txt);cursor:pointer;font:inherit;font-size:12.5px;display:inline-flex;align-items:center;min-height:30px}
.mmode{display:inline-flex;gap:4px;padding:4px;margin:2px 0 8px;border:1px solid var(--bd2);border-radius:999px;background:var(--card)}
.mmb{background:none;border:0;border-radius:999px;padding:7px 18px;min-height:36px;color:var(--mut);cursor:pointer;font:inherit;font-size:13.5px;font-weight:600;transition:background .16s,color .16s}
.mmb.on{background:var(--g100);color:var(--gt)}
.mmb:focus-visible{outline:2px solid var(--gt);outline-offset:2px}
.mlb.off{opacity:.45;text-decoration:line-through}.mlb i{margin-right:6px}
#mchart{touch-action:pan-y;cursor:grab;user-select:none;-webkit-user-select:none;overflow:hidden;border:1px solid var(--bd);border-radius:16px;background:var(--card);padding:6px 4px 0}
#mchart:active{cursor:grabbing}#mchart svg{width:100%;height:auto;max-height:240px}
#mchart svg.anim path[pathLength]{stroke-dasharray:1;stroke-dashoffset:1;animation:draw 1.1s .1s ease-out forwards}
.ctl{stroke:var(--mut);stroke-width:1;stroke-dasharray:3 3}.ctb{fill:var(--card);stroke:var(--bd2)}
.ctt{fill:var(--ink);font-size:11px;font-weight:700;font-family:inherit}.cts{fill:var(--txt);font-size:11px;font-family:inherit}

/* ---------- notifikasi ---------- */
.bell{position:relative}
.bcnt{position:absolute;top:-7px;right:-7px;box-sizing:border-box;min-width:20px;height:20px;padding:0 5px;border-radius:99px;background:#b3261e;color:#fff;font-size:11px;font-weight:700;line-height:16px;text-align:center;border:2px solid var(--bg)}
#npanel{position:fixed;top:68px;right:28px;width:380px;max-width:calc(100vw - 16px);max-height:min(560px,calc(100dvh - 90px));display:flex;flex-direction:column;background:var(--card);border:1px solid var(--bd);border-radius:var(--r-m);box-shadow:var(--sh2);z-index:45;overflow:hidden;animation:pop .2s both}
.nh{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px;border-bottom:1px solid var(--bd)}
.nh b{font-family:var(--serif);color:var(--ink);font-size:18px;font-weight:500}
.nh button.lnk:disabled{opacity:.45;cursor:default}
.nl{overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.ni{display:flex;gap:10px;align-items:flex-start;padding:12px 16px;border-bottom:1px solid var(--bd);cursor:pointer}
.ni:last-child{border-bottom:0}
.ni:hover,.ni:focus-visible{background:var(--row2)}
.ni.un{background:var(--g50)}
.nd{flex:none;width:9px;height:9px;border-radius:50%;margin-top:6px;background:transparent}
.ni.un .nd{background:var(--gold)}
.nb{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.nb b{color:var(--ink);font-size:13.5px}
.nb span{color:var(--txt);font-size:13px;overflow-wrap:anywhere}
.nb small{color:var(--mut);font-size:12px}
.ni .nr{flex:none;min-height:32px;padding:4px 10px;font-size:12px}
.nl .empty{margin:12px;padding:26px 16px}

/* ---------- AC, profil, foto ---------- */
.pfoto{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin:0 0 4px}.pfoto>div{flex:1 1 200px;min-width:0}.pfoto .av{width:56px;height:56px;font-size:22px}
.acs{margin:10px 0 8px}.acs .st{margin-right:4px}
.ph.acg{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:8px 0}
.ph.acg figure{margin:0;display:flex;flex-direction:column;gap:6px;min-width:0}
.ph.acg img{width:100%;height:auto;aspect-ratio:4/3;object-fit:contain;display:block;background:var(--bg);border:1px solid var(--bd);border-radius:12px;cursor:zoom-in}
.ph.acg figcaption{font-size:12px;font-weight:700;text-align:center;line-height:1.3;overflow-wrap:anywhere}
.crp{margin:10px 0 4px;text-align:center}
.crp canvas{width:100%;max-width:260px;aspect-ratio:1;border-radius:14px;touch-action:none;cursor:grab;background:#111;display:block;margin:0 auto}
.crp input[type=range]{width:100%;max-width:260px;margin:10px auto 2px;display:block}
.crp small{display:block;color:var(--mut)}
.acsum{display:flex;flex-wrap:wrap;gap:4px 6px;align-items:center;max-width:520px}
.acsum small{flex:1 0 100%;line-height:1.35;color:var(--mut);overflow-wrap:anywhere}

/* ---------- responsif ---------- */
@media(max-width:1100px){
 .dh{grid-template-columns:1fr}
 .dh-main{min-height:300px}
 .dq{display:grid;grid-template-columns:repeat(2,1fr);gap:4px 10px}.dq h2{grid-column:1/-1}
 .ds{grid-template-columns:1fr 1fr}.ds-list{grid-column:1/-1;order:3}
 .dm{grid-template-columns:1fr}
 .ph.acg{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media(max-width:1000px) and (min-width:821px){#view{padding:20px}.clk #clock{display:none}#phero{margin:20px 20px 0}}
@media(min-width:900px){
 .mbox{max-width:920px}
 .row2{grid-template-columns:repeat(3,1fr);gap:0 18px}
 .irow{grid-template-columns:minmax(0,2.2fr) minmax(0,1.2fr) 80px minmax(0,1fr) minmax(0,1.3fr) minmax(90px,auto) auto;gap:8px}
}
@media(min-width:600px) and (max-width:899px){.irow{grid-template-columns:minmax(0,2fr) minmax(0,1fr) 70px minmax(0,1fr)}.irow .ip{grid-column:span 2}}
@media(max-width:700px){.ph.acg{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}}
@media(max-width:600px){
 .irow{grid-template-columns:1fr 1fr;gap:8px}
 .irow .in,.irow .ic{grid-column:1/-1}
 .irow .iq{grid-column:1}.irow .iu{grid-column:2}
 .irow .ip{grid-column:1;grid-row:auto}.irow .it{grid-column:2;text-align:right;align-self:center}
 .irow .rm{grid-column:1/-1;min-height:36px}
 .pick .pk{max-width:none}
}
@media(max-width:300px){.ph.acg{grid-template-columns:1fr}}
@media(max-width:820px){
 body{font-size:15px}
 input,select,textarea{font-size:16px}
 #login{grid-template-columns:1fr}
 .lhero{padding:24px 16px}.lhero .llogo{width:120px;margin:0}.lhero h1{font-size:26px}.lhero .tag{display:none}
 .lscene{width:min(320px,90%);margin:4px 0 8px}.lglow{width:60px;height:60px}
 .lpane{padding:24px 18px 40px;align-items:flex-start}
 #app{display:block}
 #main{padding-bottom:calc(var(--tabh) + 14px);min-height:100vh;min-height:100dvh}
 #side{position:fixed;inset:0 auto 0 0;z-index:40;width:min(300px,86vw);transform:translateX(-100%);transition:transform .22s;height:100%}
 #side.open{transform:none;box-shadow:var(--sh2)}
 #shade.open{display:block;position:fixed;inset:0;background:#030d0899;z-index:35}
 header{height:56px;padding:0 14px;gap:10px}
 .hlogo{display:block;height:22px;width:auto;flex:none}
 .sbtn{display:none}
 .hs b{font-size:16px;color:var(--ink)}
 .clk #clock{display:none}
 #conn{font-size:0;padding:0;width:12px;height:12px;gap:0;background:none}
 #conn::before{width:10px;height:10px}
 #view{padding:14px 14px 20px}
 #phero{margin:14px 14px 0;min-height:112px;border-radius:18px}
 .ph-img{width:70%;opacity:.6}
 .ph-t{padding:18px 18px}.ph-t i{width:38px;height:38px;border-radius:12px}.ph-t h1{font-size:26px}.ph-t p{font-size:13px;margin-top:3px}
 .dh-main{min-height:250px;padding:22px 18px;border-radius:20px}
 .dh-img{width:86%;right:-18%;top:34%;opacity:.45} .dh-t{max-width:none}.dh-t h1{font-size:34px}.dh-t p{font-size:14px}
 .dq{grid-template-columns:1fr}
 .ds{grid-template-columns:1fr 1fr;gap:12px}
 .ds-big,.ds-st{min-height:136px;padding:18px}
 .ds .n{font-size:58px}
 .ds-list{padding:16px 18px}
 .dsr{grid-template-columns:78px 1fr 36px;gap:10px}
 .ai{flex-wrap:wrap;gap:8px 12px;padding:14px 16px}.ai .kat{min-width:0}.ai-m{flex:1 1 100%;order:3}.ai-m b{white-space:normal}.ai .btn{margin-left:auto}
 .sh h2{font-size:20px}
 .row2{grid-template-columns:1fr}
 .bar{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px;align-items:end;padding:12px;border-radius:18px}
 .bar>*{min-width:0}.bar input,.bar select{width:100%}
 .mbar{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
 #rq,#uq{grid-column:1/-1}.bar .fl{flex:none}#rs{grid-column:1/-1}#rg{grid-column:1/2}#rx{grid-column:2/3;margin-left:0}#rpdf{grid-column:1/-1}#ua{grid-column:1/-1}
 #rl{padding-bottom:calc(var(--tabh) + 84px)}#view,#rl{position:relative;z-index:0}
 .scroll.cards{overflow:visible;background:none;border:0}
 .rt,.rt tbody{display:block;width:100%}
 .rt tr:first-child{display:none}
 .rt tr{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--bd);border-radius:var(--r-m);padding:12px 14px;margin-bottom:10px}
 .rt tr:hover td{background:none}
 .rt td{display:flex;justify-content:space-between;align-items:baseline;gap:14px;border:0;padding:4px 0;text-align:right;min-width:0}
 .rt td::before{content:attr(data-l);color:var(--mut);font-size:12.5px;font-weight:500;text-align:left;flex:none}
 .rt td.sm{order:-1;display:block;text-align:left;padding:0 0 8px;margin-bottom:6px;border-bottom:1px solid var(--bd);font-size:14.5px}
 .rt td.sm::before{display:none}
 .rt td.act{justify-content:flex-end;padding-top:10px;gap:8px}
 .rt td.act::before{display:none}
 .rt td.act button{flex:1;min-height:40px}
 .tk{flex-direction:column;--stub:100%}
 .tk .tr{width:auto;border-left:0;border-top:2px dashed var(--gold-100);border-radius:0 0 var(--r-m) var(--r-m);min-height:84px}
 .tk::before,.tk::after{top:auto;bottom:75px;border-color:var(--bd)}
 .tk::before{left:-10px;right:auto;border-left-color:transparent}.tk::after{right:-10px;border-right-color:transparent}
 .film img,.film .noimg{width:78px;height:112px}
 #modal{align-items:flex-end;padding:0;overflow:hidden}
 .mbox{max-width:none;margin:0;border-radius:24px 24px 0 0;max-height:94vh;overflow:auto;padding:22px 16px 0;animation:sheet .26s both;-webkit-overflow-scrolling:touch}
 .mbox h3{font-size:22px}
 .mbox .macts,.mbox .fact{position:sticky;bottom:0;margin:16px -16px 0;padding:12px 16px calc(12px + var(--safe-b));background:var(--card);border-top:1px solid var(--bd);z-index:2}
 .mbox .fact .btn,.mbox .macts .btn{flex:1 1 0}
 .film .macts{display:grid;grid-template-columns:1fr 1fr}
 .irow{grid-template-columns:1fr 1fr 1fr;padding:10px;border:1px solid var(--bd);border-radius:14px;background:var(--row2)}
 .irow .in,.irow .ic{grid-column:1/-1}.irow .it{grid-column:1/3}.irow .rm{grid-column:3/4}
 .ph img{width:92px;height:92px}
 #toast{bottom:calc(var(--tabh) + 14px)}
 #npanel{top:62px;left:8px;right:8px;width:auto}
 #cp{padding:6px 16px 14px}
 #tabs{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);position:fixed;left:0;right:0;bottom:0;z-index:30;height:var(--tabh);overflow:hidden;background:color-mix(in srgb,var(--card) 92%,transparent);backdrop-filter:blur(14px);border-top:1px solid var(--bd);padding:6px 6px calc(6px + var(--safe-b))}
 #tabs a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:52px;min-width:0;padding:0 2px;margin:0;font-size:11.5px;font-weight:600;color:var(--mut);border-radius:12px;cursor:pointer;-webkit-tap-highlight-color:transparent}
 #tabs a i{display:flex;padding:4px 18px;border-radius:99px;transition:background .16s}
 #tabs a.on{color:var(--gt)}
 #tabs a.on i{background:var(--g100)}
 .mmode{display:flex}.mmb{flex:1 1 0;padding:7px 8px}
 .mct{width:100%}.mct .btn{flex:1 1 0;padding:0 6px}.mct [data-a=rs]{flex:2.2 1 0}
 .zipbar .btn{flex:1 1 100%}
}
@media(max-width:380px){.dh-t h1{font-size:30px}.ds .n{font-size:50px}}
@media(prefers-reduced-motion:reduce){
 *,*::before,*::after{animation:none!important;transition:none!important}
 #mchart svg.anim path[pathLength]{stroke-dasharray:none!important;stroke-dashoffset:0!important}
}

/* STC XXI focused refinements */
.dh-main{min-width:0}.dh-t{position:relative;z-index:3}.dh-img{pointer-events:none}.lens-glow,.lens-flare{left:76.4%;top:62.1%}
.ds-big .l{position:relative;z-index:2;display:block;max-width:100%;overflow-wrap:anywhere}.ds-big{isolation:isolate}.ds-big::before{pointer-events:none}
.tk-poster{width:76px;height:112px;object-fit:cover;border-radius:9px;flex:none;box-shadow:0 5px 16px #0002}.tk{align-items:stretch}.tk .tl{min-width:0;flex:1}.tk .tr{flex:none}
.filmbar{display:grid;grid-template-columns:minmax(240px,2fr) minmax(150px,1fr) minmax(220px,1.5fr) auto auto;align-items:end;gap:10px}.filmbar>*{min-width:0}.film-status{display:inline-flex;border-radius:999px;padding:4px 9px;font-size:11px;font-weight:800;white-space:nowrap}.fs-belum-tayang{background:#e8ece9;color:#17251d}.fs-sedang-tayang{background:#d9f3e3;color:#12663b}.fs-sudah-tayang{background:#fde3e1;color:#a2211b}.film-capacity{margin-top:16px;padding:14px 16px;border:1px solid var(--bd);border-radius:14px;background:var(--card)}.film-capacity p{margin:4px 0 0;color:var(--mut)}.film-table td{vertical-align:middle}.muted{color:var(--mut);margin:4px 0 0;font-size:13px}
@media(min-width:1200px){#view{max-width:none;padding:24px 30px 32px}.dh{grid-template-columns:minmax(0,1.45fr) minmax(300px,.8fr)}.dm{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr)}.ds{grid-template-columns:minmax(180px,.8fr) minmax(260px,1.1fr) minmax(180px,.8fr)}}
@media(max-width:760px){.filmbar{grid-template-columns:1fr 1fr}.filmbar #filmq,.filmbar #froutlet{grid-column:1/-1}.filmbar button{width:100%;padding:9px 10px}.tk-poster{width:68px;height:100px}.ds-big .l{font-size:12px;line-height:1.35;overflow-wrap:anywhere;white-space:normal}.ds-big{overflow:hidden}.film-capacity{font-size:13px}}

.role-tag{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:11px;font-weight:800;white-space:nowrap}.role-admin{background:#e8dfc5;color:#604512}.role-user{background:#d9f3e3;color:#12663b}.role-reporter{background:#e3edfa;color:#194b8a}

/* STC XXI polish pass: login composition, projector beam alignment, motion and bulk film entry */
.lbeam{left:76%;top:47%;width:82%;height:72%;transform:translateY(-50%);clip-path:polygon(0 43%,100% 18%,100% 82%,0 57%);background:linear-gradient(90deg,rgba(255,241,199,.32) 0%,rgba(255,236,190,.13) 48%,rgba(255,236,190,.015) 100%);filter:blur(1.5px);transform-origin:left center}
.lglow{left:76%;top:47%;width:76px;height:76px;background:radial-gradient(circle,rgba(255,250,225,.95),rgba(255,236,190,.25) 45%,transparent 72%)}
#login{background:var(--card)}
.lhero{padding:clamp(24px,4vw,56px);isolation:isolate}
.lhero:before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 50% 55%,rgba(20,113,78,.25),transparent 58%);pointer-events:none;z-index:1}
.lhero .llogo{width:min(190px,42%);max-height:100px;object-fit:contain}
.lscene{width:min(560px,90%);margin:12px 0 20px}
.lhero .lphoto{filter:brightness(1.25) contrast(1.08) saturate(.92)}
.lhero h1{font-size:clamp(30px,3vw,42px);letter-spacing:-.02em}
.lhero .tag{max-width:310px;line-height:1.65}
.lpane{position:relative;padding:clamp(24px,5vw,72px);background:linear-gradient(145deg,var(--card),var(--bg))}
.lbox{max-width:430px;animation:loginRise .65s cubic-bezier(.2,.75,.25,1) both}
.lbox h2{font-size:clamp(30px,3vw,38px);letter-spacing:-.025em}
.lbox input{min-height:48px}
#lbtn{min-height:48px;transition:transform .2s ease,box-shadow .2s ease,filter .2s ease}
#lbtn:hover{transform:translateY(-2px);filter:brightness(1.06);box-shadow:0 12px 26px #0c4c3430}
.btn,button,.card,.rt tr{transition:background-color .18s ease,border-color .18s ease,box-shadow .2s ease,transform .2s ease}
.btn:not(:disabled):hover{transform:translateY(-1px)}
.card:hover{box-shadow:0 8px 24px #092f1b0d}
#modal .modal-box,.modal-box{animation:modalRise .24s cubic-bezier(.2,.75,.25,1) both}
.film-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}
#film-bulk-lines{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;line-height:1.65;min-height:190px}
#film-bulk-save:disabled{opacity:.65;cursor:wait;transform:none}
@keyframes loginRise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
@keyframes modalRise{from{opacity:0;transform:translateY(10px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:760px){
 #login{grid-template-columns:1fr;min-height:100dvh}
 .lhero{min-height:36vh;padding:20px 18px 14px}
 .lhero .llogo{width:100px;max-height:55px;margin-bottom:0}
 .lscene{width:min(300px,70%);margin:2px 0 5px}
 .lhero h1{font-size:27px}
 .lhero .sub{font-size:10px;margin-top:6px}
 .lhero .tag{font-size:12px;margin-top:8px;max-width:290px}
 .lbeam{width:80%;height:75%;left:76%;top:47%}
 .lpane{padding:28px 22px 34px;align-items:flex-start}
 .lbox{max-width:460px;margin:0 auto}
 .lbox h2{font-size:30px}
 .lfoot{margin-top:18px}
 .film-actions{justify-content:flex-start}
 .film-actions .btn{flex:1}
}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}

/* V3: laporan film otomatis dikelompokkan menurut status */
.film-groups{display:grid;gap:16px}.film-group{min-width:0;border:1px solid var(--bd);border-radius:16px;overflow:hidden;background:var(--card)}.film-group-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 16px;border-bottom:1px solid var(--bd);background:var(--soft,rgba(120,130,120,.06))}.film-group-head>b{font-size:12px;color:var(--mut)}.film-group .scroll{border:0;border-radius:0}.film-group .film-table{margin:0}.fg-sedang .film-group-head{border-left:4px solid #16834b}.fg-sudah .film-group-head{border-left:4px solid #c33a35}.fg-belum .film-group-head{border-left:4px solid #737b76}

/* Import film preview */
.film-import-summary{margin:14px 0;padding:12px 14px;border:1px solid var(--line,#d9e2dc);border-radius:12px;background:var(--surface2,#f6f8f6)}.film-import-summary p{margin:5px 0}.checkline{display:flex;align-items:center;gap:9px;margin:14px 0;font-weight:600}.checkline input{width:auto}.film-import-summary+.scroll{max-height:300px;overflow:auto}

/* V6: tabel pemakaian meteran selalu terlihat dan dapat digulir pada layar kecil */
.meter-data-table{margin-top:8px;border:1px solid var(--bd);border-radius:12px;max-width:100%;overflow:auto}
.meter-data-table table{min-width:620px;width:100%}
.meter-data-table th,.meter-data-table td{white-space:nowrap}
#meter-refresh-time{display:inline-block;font-size:11px;font-weight:500;margin-left:8px}

/* ===== Tabel Laporan Film: garis hitam tegas, teks gelap, rata tengah (tidak mengubah tema lain) ===== */
.film-table{border-collapse:collapse;border-spacing:0;width:100%;background:#fff;color:#000}
.film-table th,.film-table td{border:1.5px solid #000;color:#000;text-align:center;vertical-align:middle;padding:9px 10px;background:#fff;font-size:13.5px;line-height:1.35}
.film-table th{background:#e4e4e4;font-weight:800;letter-spacing:.2px;white-space:nowrap}
.film-table td b{font-weight:800}
.film-table tbody tr:hover td{background:#f3f3f3}
.film-table .film-status{background:none;border-radius:0;padding:0;font-size:13px;font-weight:800;justify-content:center}
.film-table .fs-sedang-tayang{color:#0b6b2e}.film-table .fs-sudah-tayang{color:#b00000}.film-table .fs-belum-tayang{color:#000}
.film-table td.act{white-space:nowrap}
.film-group .scroll{background:#fff}
@media (max-width:820px){
 .film-table tr{background:#fff;border:1.5px solid #000;color:#000}
 .film-table td{border:0;color:#000;text-align:center;justify-content:space-between;background:none}
 .film-table td::before{color:#000;font-weight:700}
 .film-table td.sm{text-align:center;border-bottom:1.5px solid #000}
}

/* ===== Pemeriksaan data meteran ===== */
.mdiag{margin-top:12px}.mdiag p{margin:6px 0 0;font-size:13.5px}.mdiag .mwarn{color:#b45309}.mdiag .mok{color:#0b6b2e;font-weight:600}

/* ===== Perbaikan visual: cahaya proyektor (login) & hero dashboard ===== */

/* --- Login: posisi lensa Barco dihitung dari foto (80,6% x 43,4%) --- */
.lscene{--lx:80.6%;--ly:43.4%}
.lbeam{position:absolute;z-index:2;left:var(--lx);top:var(--ly);width:64%;height:62%;clip-path:none;background:none;transform:translateY(-50%) rotate(2.5deg);transform-origin:0 50%;filter:blur(7px);mix-blend-mode:screen;-webkit-mask-image:linear-gradient(90deg,#000 0,#000 28%,transparent 100%);mask-image:linear-gradient(90deg,#000 0,#000 28%,transparent 100%);pointer-events:none;animation:beamOn 1.2s .9s both,beamShimmer 6s 2.2s ease-in-out infinite}
.lbeam::before,.lbeam::after{content:"";position:absolute;inset:0}
.lbeam::before{clip-path:polygon(0 47%,100% 6%,100% 94%,0 53%);background:linear-gradient(90deg,rgba(255,243,214,.5) 0,rgba(255,236,190,.2) 38%,rgba(255,236,190,.05) 78%,transparent 100%)}
.lbeam::after{clip-path:polygon(0 49%,100% 28%,100% 72%,0 51%);background:linear-gradient(90deg,rgba(255,250,235,.6) 0,rgba(255,240,205,.15) 55%,transparent 100%);filter:blur(5px)}
.lglow{left:var(--lx);top:var(--ly);width:clamp(70px,17%,110px);height:auto;aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,rgba(255,252,240,.95) 0,rgba(255,241,205,.55) 14%,rgba(255,228,170,.2) 38%,transparent 70%);mix-blend-mode:screen;animation:lensOn 1.4s .6s both,lampPulse 4.5s 2s ease-in-out infinite}
.lglow::after{content:"";position:absolute;left:50%;top:50%;width:230%;height:2px;transform:translate(-50%,-50%);background:linear-gradient(90deg,transparent,rgba(255,244,215,.7) 50%,transparent);filter:blur(1px)}
@keyframes beamShimmer{0%,100%{opacity:.92}50%{opacity:1}}
@keyframes lampPulse{0%,100%{opacity:.86}50%{opacity:1}}
@media(max-width:760px){.lbeam{width:38%;height:56%}.lglow{width:clamp(44px,17%,70px)}}

/* --- Dashboard: proyektor utuh, tajam, tidak terpotong --- */
.dh-main::before{background:linear-gradient(90deg,#03100a 0,#03100acc 30%,#03100a45 52%,transparent 70%)}
.dh-img{right:4%;top:50%;bottom:auto;width:auto;max-width:none;height:76%;aspect-ratio:1240/968;transform:translateY(-50%);animation:dhIn .9s .1s both}
.dh-img img{display:block;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 14px 18px rgba(0,0,0,.5))}
.dh-img::before{content:"";position:absolute;left:10%;right:8%;bottom:-3%;height:9%;border-radius:50%;background:radial-gradient(ellipse at center,rgba(0,0,0,.7),transparent 70%);filter:blur(6px);z-index:-1}
.dh-img::after{content:"";position:absolute;left:50%;top:48%;width:92%;aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(214,177,92,.22);background:radial-gradient(circle,rgba(46,148,104,.34) 0,rgba(28,110,78,.16) 42%,transparent 68%);z-index:-1}
.dh-img .lens-glow{left:76%;top:62%;width:34%;background:radial-gradient(circle,rgba(220,238,255,.75) 0,rgba(130,185,255,.32) 16%,rgba(70,130,225,.1) 38%,transparent 62%)}
.dh-img .lens-flare{left:76%;top:62%;width:72%;opacity:.55}
@keyframes dhIn{from{opacity:0;transform:translateY(-46%) scale(.98)}}
@media(max-width:700px){.dh-img{height:62%;right:-4%;top:36%;opacity:.5}}
/* ===== v10: Glossarium, Penyimpanan Data, countdown auto-hapus ATS ===== */
.card.gl{display:flex;gap:14px;justify-content:space-between;align-items:flex-start;padding:14px 16px;margin:0 0 10px}
.card.gl p{margin:6px 0 4px;color:var(--txt)}
.card.gl .macts,.card.sf .macts{margin:0;flex:none}
.gcount{margin:0 0 10px;font-size:13px;color:var(--mut)}
.card.sf{display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:14px;align-items:center;padding:14px 16px;margin:0 0 10px}
.card.sf p{margin:6px 0 0;color:var(--txt)}
.sx{width:52px;height:52px;border-radius:12px;background:var(--gold-50);border:1px solid var(--gold-100);color:var(--gold-lo);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;text-transform:uppercase}
.cdx{margin-top:10px;padding:10px;border:1px dashed var(--red);border-radius:10px;background:var(--red-bg);color:var(--red);font-size:12px}
.cdx .cd{margin-top:6px}
.cdx .cd.warn b{color:var(--red)}
.hint{display:block;margin-top:4px;color:var(--mut);font-size:12px}
@media(max-width:640px){.card.gl{flex-direction:column}.card.sf{grid-template-columns:44px minmax(0,1fr)}.card.sf .sx{width:44px;height:44px}.card.sf .macts{grid-column:1/-1}}

/* Inspeksi & Patroli Studio: dokumentasi foto per studio */
.studio-photo-block{border:1px solid var(--line,#d9dfdc);border-radius:12px;padding:12px;margin:10px 0;background:var(--card,#fff)}.studio-photo-block>label{display:block;font-weight:700;margin-bottom:8px}.studio-photo-block .pick{display:flex;flex-wrap:wrap;gap:8px}.studio-photo-block .ph{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}


/* Layout patroli studio: foto dan kamera berada di kartu studio masing-masing. */
.patrol-studio-card{border:1px solid var(--line,#d9dfdc);border-radius:12px;padding:12px;background:var(--card,rgba(128,128,128,.04));margin:0}
.patrol-studio-card .row2{margin:0}
.patrol-photo-inline{margin:10px 0 0;background:transparent}
.patrol-photo-inline .pick .pk{flex:0 1 190px;justify-content:center}
.patrol-photo-inline .ph img{width:84px;height:84px;object-fit:cover;border-radius:8px}
@media(max-width:600px){.patrol-studio-card{padding:10px}.patrol-photo-inline .pick .pk{flex:1 1 140px}}


/* Detail report: larger, readable documentation gallery without cropping source images. */
#gal .gg .ph:not(.acg){grid-template-columns:repeat(auto-fill,minmax(min(100%,220px),1fr));gap:14px}
#gal .gg .ph:not(.acg) figure{min-width:0;margin:0;display:flex;flex-direction:column;gap:7px}
#gal .gg .ph:not(.acg) figure img{display:block;width:100%;height:auto;aspect-ratio:4/3;object-fit:contain;background:var(--bg);border:1px solid var(--bd);border-radius:12px;cursor:zoom-in}
#gal .gg .ph:not(.acg) figcaption{font-size:12px;line-height:1.45;color:var(--muted);overflow-wrap:anywhere}
@media(max-width:700px){#gal .gg .ph:not(.acg){grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}}
@media(max-width:420px){#gal .gg .ph:not(.acg){grid-template-columns:1fr}}
