:root{--radius:10px;--bg:#cfd4da;--card:#e1e4e8;--field:#ecf0f3;--ink:#1f2937;--muted:#4b5563;--line:#b6bdc6;--line2:#98a1ad;--soft:#d8dce1;--hover:#d3d8de;--soft2:#d0d5db;--stage:#c3c9d1;--brand:#0f766e;--brand-2:#115e59;--link:#0b5f58;--tint:#cfe6e2;--tint-line:#8fbdb6;--focus:#2aa89b;--faint:#6b7482;--ph:#b3bac4;--gray-ink:#374151;--danger:#a61b1b;--danger-bg:#efc9c9;--danger-line:#d99a9a;--danger-ink:#7f1d1d;--ok:#116b32;--ok-bg:#bfe5c9;--ok-ink:#14532d;--ok-line:#8cc79f;--warn:#9a4a07;--warn-bg:#efdb9c;--warn-ink:#5f3507;--warn-line:#d3b868;--info-bg:#c6d9f0;--info-ink:#15336a;--info-line:#8fb0dc;--sa-bg:#d9d1f0;--sa-ink:#4a1d96;--wa:#15803d;--wa-2:#116b32;--chart:#0f766e;--chart-fill:rgba(15,118,110,.12);--gm:#1c5cab;--gf:#c2410c;--gn:#6b7280;--on-warn:#ffffff;color-scheme:light}
@media (prefers-color-scheme:dark){:root:not([data-theme]){--bg:#171c24;--card:#212833;--field:#2a3340;--ink:#e7ebf0;--muted:#a6b0be;--line:#37414f;--line2:#4d596b;--soft:#1b212a;--hover:#2a3441;--soft2:#2c3542;--stage:#2d3644;--brand:#0f766e;--brand-2:#0d625b;--link:#5eead4;--tint:#173a38;--tint-line:#2a6b66;--focus:#2dd4bf;--faint:#7a8697;--ph:#5d697b;--gray-ink:#cbd5e1;--danger:#f87171;--danger-bg:#3b1d1f;--danger-line:#7f3a3d;--danger-ink:#fca5a5;--ok:#4ade80;--ok-bg:#16351f;--ok-ink:#86efac;--ok-line:#2f6b43;--warn:#fbbf24;--warn-bg:#3a2e12;--warn-ink:#fcd34d;--warn-line:#6b5420;--info-bg:#172b4a;--info-ink:#bfdbfe;--info-line:#2d4f85;--sa-bg:#2d2350;--sa-ink:#ddd6fe;--wa:#15803d;--wa-2:#116b32;--chart:#2dd4bf;--chart-fill:rgba(45,212,191,.15);--gm:#6aa4ff;--gf:#f08a5d;--gn:#8b95a5;--on-warn:#2b1a00;color-scheme:dark}}
:root[data-theme=dark]{--bg:#171c24;--card:#212833;--field:#2a3340;--ink:#e7ebf0;--muted:#a6b0be;--line:#37414f;--line2:#4d596b;--soft:#1b212a;--hover:#2a3441;--soft2:#2c3542;--stage:#2d3644;--brand:#0f766e;--brand-2:#0d625b;--link:#5eead4;--tint:#173a38;--tint-line:#2a6b66;--focus:#2dd4bf;--faint:#7a8697;--ph:#5d697b;--gray-ink:#cbd5e1;--danger:#f87171;--danger-bg:#3b1d1f;--danger-line:#7f3a3d;--danger-ink:#fca5a5;--ok:#4ade80;--ok-bg:#16351f;--ok-ink:#86efac;--ok-line:#2f6b43;--warn:#fbbf24;--warn-bg:#3a2e12;--warn-ink:#fcd34d;--warn-line:#6b5420;--info-bg:#172b4a;--info-ink:#bfdbfe;--info-line:#2d4f85;--sa-bg:#2d2350;--sa-ink:#ddd6fe;--wa:#15803d;--wa-2:#116b32;--chart:#2dd4bf;--chart-fill:rgba(45,212,191,.15);--gm:#6aa4ff;--gf:#f08a5d;--gn:#8b95a5;--on-warn:#2b1a00;color-scheme:dark}
:root[data-theme=light]{--bg:#cfd4da;--card:#e1e4e8;--field:#ecf0f3;--ink:#1f2937;--muted:#4b5563;--line:#b6bdc6;--line2:#98a1ad;--soft:#d8dce1;--hover:#d3d8de;--soft2:#d0d5db;--stage:#c3c9d1;--brand:#0f766e;--brand-2:#115e59;--link:#0b5f58;--tint:#cfe6e2;--tint-line:#8fbdb6;--focus:#2aa89b;--faint:#6b7482;--ph:#b3bac4;--gray-ink:#374151;--danger:#a61b1b;--danger-bg:#efc9c9;--danger-line:#d99a9a;--danger-ink:#7f1d1d;--ok:#116b32;--ok-bg:#bfe5c9;--ok-ink:#14532d;--ok-line:#8cc79f;--warn:#9a4a07;--warn-bg:#efdb9c;--warn-ink:#5f3507;--warn-line:#d3b868;--info-bg:#c6d9f0;--info-ink:#15336a;--info-line:#8fb0dc;--sa-bg:#d9d1f0;--sa-ink:#4a1d96;--wa:#15803d;--wa-2:#116b32;--chart:#0f766e;--chart-fill:rgba(15,118,110,.12);--gm:#1c5cab;--gf:#c2410c;--gn:#6b7280;--on-warn:#ffffff;color-scheme:light}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;padding:0}
body{font:15px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;background:var(--bg);color:var(--ink)}
a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}
h1,h2,h3{line-height:1.25;margin:0 0 .5rem}
h1{font-size:1.5rem}h2{font-size:1.2rem}h3{font-size:1.05rem}
.muted{color:var(--muted)}.small{font-size:.85rem}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.nav{background:var(--card);border-bottom:1px solid var(--line)}
.nav .in{max-width:1100px;margin:0 auto;padding:.6rem 16px;display:flex;align-items:center;gap:1rem;flex-wrap:wrap}
.nav .brand{font-weight:700;color:var(--link);font-size:1.1rem}
.nav .sp{flex:1}
.wrap{max-width:1100px;margin:0 auto;padding:1.25rem 16px}
.narrow{max-width:640px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1.25rem;margin-bottom:1rem}
.grid{display:grid;gap:1rem}
.g2{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.g4{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}
.btn{display:inline-block;padding:.5rem .95rem;border-radius:8px;border:1px solid var(--brand);background:var(--brand);color:var(--on-brand,#fff);font:inherit;cursor:pointer;line-height:1.2}
.btn:hover{background:var(--brand-2);text-decoration:none}
.btn.sec{background:var(--card);color:var(--ink);border-color:var(--line2)}.btn.sec:hover{background:var(--hover)}
.btn.danger{background:var(--card);color:var(--danger);border-color:var(--danger-line)}.btn.danger:hover{background:var(--danger-bg)}
.btn.sm{padding:.3rem .65rem;font-size:.85rem}
.btn.big{padding:.8rem 1.4rem;font-size:1.05rem}
label{display:block;font-weight:600;margin:.75rem 0 .25rem;font-size:.92rem}
label.inline{display:inline-flex;align-items:center;gap:.45rem;font-weight:500;margin:.35rem 1rem .35rem 0}
input[type=text],input[type=search],input[type=email],input[type=tel],input[type=password],input[type=date],input[type=number],input[type=file],select,.mc-sel,textarea{width:100%;padding:.55rem .7rem;border:1px solid var(--line2);border-radius:8px;font:inherit;background:var(--field)}
textarea{min-height:110px}
input:focus,select:focus,.mc-sel:focus-visible,textarea:focus{outline:2px solid var(--focus);border-color:var(--brand)}
.help{font-size:.82rem;color:var(--muted);margin-top:.2rem}
.err{color:var(--danger);font-size:.85rem;margin-top:.2rem}
.flash{padding:.7rem 1rem;border-radius:8px;margin-bottom:1rem;border:1px solid}
.flash.ok{background:var(--ok-bg);border-color:var(--ok-line);color:var(--ok-ink)}
.flash.bad{background:var(--danger-bg);border-color:var(--danger-line);color:var(--danger-ink)}
.pill{display:inline-block;padding:.12rem .55rem;border-radius:99px;font-size:.78rem;font-weight:600}
.pill.open{background:var(--ok-bg);color:var(--ok-ink)}.pill.closed{background:var(--soft2);color:var(--gray-ink)}.pill.warn{background:var(--warn-bg);color:var(--warn-ink)}
table{width:100%;border-collapse:collapse;font-size:.92rem}
th,td{text-align:left;padding:.5rem .6rem;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:.8rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}
tr:hover td{background:var(--soft)}
.tbl{overflow-x:auto}
.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1rem}
.stat .n{font-size:1.9rem;font-weight:700;color:var(--link)}
.stat .l{font-size:.82rem;color:var(--muted)}
.row{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}
.right{margin-left:auto}
.tabs{display:flex;gap:.25rem;border-bottom:1px solid var(--line);margin-bottom:1rem;flex-wrap:wrap}
.tabs a{padding:.5rem .9rem;border-bottom:2px solid transparent;color:var(--muted);font-weight:600}
.tabs a.on{color:var(--link);border-color:var(--brand)}
.qrbox{text-align:center}
.qrbox img{max-width:260px;width:100%;border:1px solid var(--line);border-radius:8px;background:var(--card)}
.url{word-break:break-all;background:var(--soft);border:1px dashed var(--line2);padding:.5rem .7rem;border-radius:8px;font-family:ui-monospace,monospace;font-size:.9rem}
/* certificate editor */
.sj{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:1rem;align-items:start}
@media (max-width:900px){.sj{grid-template-columns:minmax(0,1fr)}}
.sj>*{min-width:0}
.side{min-width:0;max-width:100%}
.stage{background:var(--stage);border-radius:8px;padding:12px;text-align:center}
.editor{position:relative;display:inline-block;max-width:100%;user-select:none;-webkit-user-select:none;box-shadow:0 2px 12px rgba(0,0,0,.18);background:var(--card);touch-action:manipulation}
.editor img{display:block;max-width:100%;height:auto;pointer-events:none}
.editor.portrait img{max-height:78vh;width:auto}
.fld{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;cursor:grab;outline:1px dashed rgba(15,118,110,.7);padding:.1em .25em;line-height:1.1;touch-action:none}
.fld:active{cursor:grabbing}
.fld.off{display:none}.fld.sel{outline:2px solid var(--brand);background:rgba(153,246,228,.25)}
.fld.l{transform:translate(0,-50%)}.fld.r{transform:translate(-100%,-50%)}
.guide{position:absolute;top:0;bottom:0;left:50%;border-left:1px dashed #e11d48;display:none;pointer-events:none}
.guide.h{top:50%;bottom:auto;left:0;right:0;border-left:0;border-top:1px dashed #e11d48}
.guide.on{display:block}
.centre{display:flex;gap:.4rem;flex-wrap:wrap;margin-top:.7rem}
.centre button{display:inline-flex;align-items:center;gap:.4rem;border:1px solid var(--line2);background:var(--card);border-radius:8px;padding:.45rem .7rem;font:inherit;font-size:.85rem;cursor:pointer}
.centre button:hover{border-color:var(--brand);color:var(--link)}
.ci{position:relative;width:18px;height:18px;border:1.5px solid currentColor;border-radius:3px;flex:none}
.ci-h::before{content:"";position:absolute;left:50%;top:2px;bottom:2px;border-left:1.5px solid currentColor}
.ci-v::after{content:"";position:absolute;top:50%;left:2px;right:2px;border-top:1.5px solid currentColor}
.seg{display:inline-flex;border:1px solid var(--line2);border-radius:8px;overflow:hidden}
.seg button,.seg a{border:0;background:var(--card);padding:.5rem .9rem;font:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:.45rem;color:var(--ink)}
.seg button+button{border-left:1px solid var(--line2)}
.seg .on{background:var(--brand);color:var(--on-brand,#fff)}
.ico{display:inline-block;border:2px solid currentColor;border-radius:2px}
.ico.land{width:20px;height:14px}.ico.port{width:14px;height:20px}
.chips{display:flex;gap:.4rem;flex-wrap:wrap}
.chip{border:1px solid var(--line2);background:var(--card);border-radius:99px;padding:.35rem .8rem;font:inherit;cursor:pointer}
.chip:not(.printed):not(.on){color:var(--muted);border-style:dashed}
.chip.on{background:var(--brand);border-color:var(--brand);color:var(--on-brand,#fff)}
.fcard{display:none}.fcard.on{display:block}
.nudge{display:grid;grid-template-columns:repeat(3,38px);gap:4px;justify-content:start}
.nudge button{height:34px;border:1px solid var(--line2);background:var(--card);border-radius:6px;cursor:pointer;font-size:1rem}
.dirty{color:var(--warn);font-weight:600}
.pager{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.6rem}
.pager-info{font-size:.85rem;color:var(--muted)}
.pager-links{display:flex;flex-wrap:wrap;gap:.3rem}
.pg{display:inline-flex;align-items:center;justify-content:center;min-width:38px;min-height:38px;padding:0 .7rem;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink);font-size:.9rem}
a.pg:hover{border-color:var(--brand);color:var(--link);text-decoration:none}
.pg.cur{background:var(--brand);border-color:var(--brand);color:var(--on-brand,#fff);font-weight:700}
.pg.off{color:var(--faint);background:var(--soft)}
.pg.gap{border:0;background:transparent;min-width:auto}
.save-err{color:var(--danger-ink);background:var(--danger-bg);border:1px solid var(--danger-line);border-radius:8px;padding:.55rem .75rem;margin-top:.5rem}
.save-err ul{margin:.3rem 0 0;padding-left:1.1rem}
.bad-field{outline:2px solid var(--danger);outline-offset:2px;border-radius:6px}
.ctl{display:grid;grid-template-columns:1fr 1fr;gap:.4rem .8rem;align-items:center}
.ctl label{margin:0;font-size:.85rem}
.ctl input,.ctl select,.ctl .mc-sel{padding:.35rem .5rem}
.ctl input[type=color]{width:100%;height:34px;padding:2px}
.ctl input[type=range]{width:100%}
.pw-wrap{position:relative;display:block}
.pw-wrap input{padding-right:3rem}
.pw-eye{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:40px;height:40px;display:grid;place-items:center;border:0;background:transparent;color:var(--muted);border-radius:8px;cursor:pointer}
.pw-eye:hover{color:var(--ink);background:var(--hover)}
.pw-eye:focus-visible{outline:2px solid var(--brand)}
.pw-eye[aria-pressed="true"]{color:var(--link)}
.pwr{margin-top:.35rem;font-size:.85rem}
.pwr-list{list-style:none;margin:0;padding:0}
.pwr li,.pwr-match{display:flex;gap:.45rem;align-items:baseline;color:var(--muted);line-height:1.5}
.pwr-match{margin-top:.35rem;font-size:.85rem}
.pwr-i{flex:none;width:1.1em;text-align:center;font-weight:700}
.pwr [data-state=met],.pwr [data-state=met] .pwr-i{color:var(--ok)}
.pwr [data-state=bad],.pwr [data-state=bad] .pwr-i{color:var(--danger)}
.pwr [hidden]{display:none}
.nav a.cur{font-weight:700;text-decoration:underline;text-underline-offset:6px;text-decoration-thickness:2px}
.imp-bar{background:#7c2d12;color:#fff;padding:.5rem 16px;display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;justify-content:center;font-size:.9rem}
.imp-bar .btn{background:#fff;color:#7c2d12;border-color:#fff}
.announce{background:var(--warn-bg);border-bottom:1px solid var(--warn-line);color:var(--warn-ink)}
.announce .in{max-width:1100px;margin:0 auto;padding:.55rem 16px;font-size:.9rem;white-space:pre-line}
.flash.secret{background:var(--info-bg);border-color:var(--info-line);color:var(--info-ink)}
.secret-val{font:600 1.05rem ui-monospace,monospace;background:var(--card);border:1px dashed var(--info-line);border-radius:6px;padding:.3rem .6rem;user-select:all}
/* superadmin */
.sa-head{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:.4rem}
.sa-head h1{margin:0}
.sa-tabs{display:flex;gap:.25rem;border-bottom:1px solid var(--line);margin-bottom:1rem;overflow-x:auto}
.sa-tabs a{padding:.55rem .9rem;border-bottom:2px solid transparent;color:var(--muted);font-weight:600;white-space:nowrap}
.sa-tabs a.on{color:var(--link);border-color:var(--brand)}
.sa-tabs a:hover{text-decoration:none;color:var(--ink)}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1rem 1.1rem}
.kpi .n{font-size:1.9rem;font-weight:700;line-height:1.1}
.kpi .l{font-size:.82rem;color:var(--muted);margin-top:.15rem}
.kpi .s{font-size:.8rem;margin-top:.35rem;color:var(--muted)}
.kpi .up{color:var(--ok);font-weight:600}
.health{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.5rem}
.health div{display:flex;justify-content:space-between;gap:.5rem;padding:.45rem .6rem;border-radius:8px;background:var(--soft);font-size:.88rem}
.badge{display:inline-flex;align-items:center;gap:.3rem;font-size:.78rem;font-weight:600;border-radius:99px;padding:.12rem .55rem}
.badge.ok{background:var(--ok-bg);color:var(--ok-ink)}.badge.off{background:var(--danger-bg);color:var(--danger-ink)}.badge.sa{background:var(--sa-bg);color:var(--sa-ink)}.badge.mid{background:var(--soft2);color:var(--gray-ink)}
.feed{list-style:none;margin:0;padding:0}
.feed li{display:flex;gap:.6rem;padding:.5rem 0;border-bottom:1px solid var(--line);font-size:.88rem}
.feed li:last-child{border-bottom:0}
.feed .t{color:var(--muted);white-space:nowrap;font-size:.8rem;min-width:88px}
.inline-form{display:inline}
.toolbar{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-bottom:.75rem}
.toolbar input,.toolbar select,.toolbar .mc-sel{width:auto;min-width:160px}
.danger-zone{border-color:var(--danger-line)}
.danger-zone h2,.danger-zone h3{color:var(--danger)}
/* report filter */
.fgroup{border:1px solid var(--line);border-radius:10px;padding:.75rem .9rem;margin-top:.6rem;background:var(--soft)}
.fgroup-head{display:flex;align-items:flex-start;gap:.5rem;margin-bottom:.6rem}
.fgroup-head .fgroup-del{margin-left:auto;flex:none}
.fgroup-foot{display:flex;justify-content:flex-end;gap:.4rem;margin-top:.7rem;padding-top:.6rem;border-top:1px dashed var(--line)}
.fgroup-title{font-weight:700;font-size:.9rem}
.flabel{font-size:.82rem;font-weight:600;margin-bottom:.25rem}
.fgroup-row{display:grid;grid-template-columns:minmax(200px,1.3fr) minmax(210px,1fr) minmax(160px,.8fr);gap:.9rem 1.1rem;align-items:end}
@media (max-width:720px){.fgroup-row{grid-template-columns:1fr}}
.ffield select,.ffield .mc-sel{width:100%}
/* one-badge summary: "Statistik 1: Melayu, 7–18 tahun" */
.fsum{display:inline-block;flex:0 1 auto;min-width:0;max-width:100%;padding:.3rem .8rem;border-radius:16px;background:var(--tint);border:1px solid var(--tint-line);color:var(--link);font-size:.88rem;line-height:1.35}
.fsum .fgroup-title{font-size:inherit}
.fsum.empty{background:var(--soft2);border-color:var(--line);color:var(--gray-ink)}
/* multi-select dropdown (bangsa) */
.msel{position:relative}
.msel summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-height:42px;padding:.5rem .7rem;border:1px solid var(--line2);border-radius:8px;background:var(--card);cursor:pointer;user-select:none}
.msel summary::-webkit-details-marker{display:none}
.msel summary:focus-visible{outline:2px solid var(--focus);border-color:var(--brand)}
.msel[open] summary{border-color:var(--brand)}
.msel[open] summary svg{transform:rotate(180deg)}
.msel-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.msel-panel{position:absolute;z-index:20;left:0;right:0;min-width:230px;margin-top:4px;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 28px rgba(15,23,42,.14);padding:.35rem}
.msel-opt{display:flex;align-items:center;gap:.6rem;margin:0;padding:.5rem .6rem;border-radius:7px;font-weight:500;cursor:pointer;min-height:40px}
.msel-opt:hover{background:var(--hover)}
.msel-opt input{width:18px;height:18px;accent-color:var(--brand);flex:none}
.msel-opt:has(input:checked){background:var(--tint);font-weight:600}
.msel-foot{display:flex;justify-content:space-between;gap:.4rem;border-top:1px solid var(--line);margin-top:.3rem;padding:.45rem .2rem .15rem}
.pub{max-width:560px;margin:0 auto;padding:1.5rem 16px}
.pub .card{padding:1.5rem}
@media (max-width:420px){.pub .card{padding:1.1rem}}
.pub h1{font-size:1.4rem}
.center{text-align:center}
.print-only{display:none}
/* participant code */
.codebox{margin:1.25rem 0;padding:1rem;border:2px dashed var(--brand);border-radius:var(--radius);background:var(--tint)}
.codebox .code{font-size:2.2rem;font-weight:700;letter-spacing:.25em;margin:.3rem 0 .5rem;padding-left:.25em;user-select:all}
.tabs .cnt{display:inline-block;min-width:1.3rem;margin-left:.3rem;padding:0 .4rem;border-radius:99px;background:var(--warn);color:var(--on-warn);font-size:.75rem;line-height:1.3rem;text-align:center}
.tabs .cnt{vertical-align:middle}
.codeinput::placeholder{color:var(--ph);opacity:1;font-weight:400;font-size:1.15rem;letter-spacing:.04em;text-transform:none}
.codeinput{font:700 1.6rem ui-monospace,monospace!important;letter-spacing:.2em;text-align:center;text-transform:uppercase}
.vcard{border:2px solid var(--ok-line);background:var(--ok-bg);border-radius:var(--radius);padding:1rem;margin-top:1rem}
.vcard .ok{font-size:1.3rem;font-weight:700;color:var(--ok)}
.vcard dl{display:grid;grid-template-columns:auto 1fr;gap:.3rem .8rem;margin:.6rem 0 0;text-align:left}
.vcard dt{color:var(--muted);font-size:.85rem}.vcard dd{margin:0;font-weight:600}
.pubnav{display:flex;flex-wrap:wrap;gap:0 1rem;justify-content:center;margin-top:.6rem;font-size:.9rem}
.pubnav a{display:inline-flex;align-items:center;min-height:40px;padding:0 .2rem}
.corr-names{display:grid;grid-template-columns:5.5rem 1fr;gap:.2rem .7rem;margin:.6rem 0;word-break:break-word}
.corr-act{display:grid;grid-template-columns:1fr;gap:.6rem;margin-top:.7rem}
@media (min-width:640px){.corr-act{grid-template-columns:160px 1fr;align-items:start}}
@media print{.nav,.no-print{display:none!important}body{background:var(--card)}.print-only{display:block}.wrap{max-width:none;padding:0}.card{border:0}}
@media (max-width:640px){.hide-sm{display:none}}
/* certificate editor v2 */
.etool{display:flex;flex-wrap:wrap;gap:.6rem 1.2rem;align-items:flex-start;margin-bottom:.9rem;padding-bottom:.8rem;border-bottom:1px solid var(--line)}
.etool-act{display:flex;gap:.5rem;flex-wrap:wrap}
.etool-grp{display:flex;flex-direction:column;gap:.25rem}
#toolMsg{flex-basis:100%}
.chip{min-height:40px}
.eimg{position:absolute;transform:translate(-50%,-50%);cursor:grab;outline:1px dashed rgba(15,118,110,.7);touch-action:none;line-height:0}
.eimg img{width:100%;height:auto;display:block;pointer-events:none}
.eimg.off{display:none}.eimg.sel{outline:2px solid var(--brand)}
.eimg.missing{min-height:30px;background:var(--danger-bg)}
.rh{position:absolute;right:-13px;bottom:-13px;width:26px;height:26px;border-radius:50%;background:var(--brand);border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.4);cursor:nwse-resize;touch-action:none;display:none}
.rh::after{content:"";position:absolute;inset:-9px}
.eimg.sel .rh{display:block}
.fld{white-space:pre}
.layers{list-style:none;margin:0 0 .8rem;padding:0;border:1px solid var(--line);border-radius:10px;overflow:hidden;max-height:260px;overflow-y:auto}
.lyr{min-width:0;display:flex;align-items:stretch;border-bottom:1px solid var(--line);background:var(--card)}
.lyr:last-child{border-bottom:0}
.lyr.on{background:var(--tint)}
.lyr.hid .lyr-name{color:var(--muted);font-style:italic}
.lyr button{border:0;background:transparent;font:inherit;cursor:pointer;min-height:44px}
.lyr-eye,.lyr-del{width:44px;flex:none}
.lyr-name{min-width:0;flex:1;text-align:left;padding:0 .4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lyr-eye:hover,.lyr-del:hover{background:var(--hover)}
.props{border-top:1px dashed var(--line);padding-top:.7rem}
.props textarea{width:100%}
.nudge{grid-template-columns:repeat(3,44px)}
.nudge button{height:44px}
.centre button{min-height:44px}
.save-err.small{display:block}
.imglib{flex-basis:100%;border:1px solid var(--line);border-radius:10px;padding:.6rem .7rem;background:var(--soft)}
.imglib-list{list-style:none;margin:.5rem 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:.6rem}
.imglib-item{display:flex;gap:.6rem;align-items:flex-start;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:.45rem}
.imglib-item img{width:64px;height:64px;object-fit:contain;background:repeating-conic-gradient(var(--line) 0 25%,var(--card) 0 50%) 50%/12px 12px;border-radius:6px;flex:none}
.imglib-meta{min-width:0;display:flex;flex-direction:column;gap:.15rem;align-items:flex-start}
/* template gallery dialog */
.gal{border:0;border-radius:14px;padding:1rem;width:min(900px,calc(100vw - 24px));max-height:calc(100vh - 24px);box-shadow:0 10px 40px rgba(0,0,0,.35)}
.gal::backdrop{background:rgba(15,23,42,.55)}
.gal-head{display:flex;justify-content:space-between;align-items:center;gap:.6rem}
.gal select{width:auto;min-width:160px}
.gal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.7rem;max-height:52vh;overflow-y:auto;padding:2px}
.gal-item{display:flex;flex-direction:column;gap:.2rem;text-align:left;border:2px solid var(--line);border-radius:10px;background:var(--card);padding:.4rem;font:inherit;cursor:pointer}
.gal-item img{width:100%;aspect-ratio:1.414/1;object-fit:contain;background:var(--stage);border-radius:6px}
.gal-item.on{border-color:var(--brand);background:var(--tint)}
.gal-name{font-weight:600;font-size:.9rem}
.gal-bar{display:flex;justify-content:space-between;align-items:center;gap:.8rem;flex-wrap:wrap;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--line)}
/* superadmin template library */
.uplist{list-style:none;margin:.7rem 0 0;padding:0;font-size:.9rem}
.uplist li{padding:.3rem 0;border-bottom:1px solid var(--line)}
.uplist .good,.pmsg.good{color:var(--ok)}.uplist .bad,.pmsg.bad{color:var(--danger)}
.pgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:1rem}
.pcard{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:.8rem}
.pcard.inactive{opacity:.65;background:var(--soft)}
.pthumb{width:100%;aspect-ratio:1.414/1;object-fit:contain;background:var(--stage);border-radius:6px;display:block}
.pthumb.port{aspect-ratio:1/1.414;max-height:240px;margin:0 auto;width:auto;max-width:100%}
@media (max-width:900px){.nudge{grid-template-columns:repeat(3,44px)}}
@media (max-width:900px){.seg button,.seg a{min-height:40px}.stage{position:sticky;top:0;z-index:5;box-shadow:0 4px 10px rgba(0,0,0,.12)}.editor.portrait img{max-height:46vh}}
.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.themebtn{width:40px;height:40px;flex:none;display:inline-grid;place-items:center;border:1px solid var(--line2);border-radius:8px;background:var(--card);color:var(--ink);cursor:pointer;padding:0}
.themebtn:hover{background:var(--hover)}
.pubtop{max-width:560px;margin:0 auto;padding:.7rem 16px 0;display:flex;justify-content:flex-end;align-items:center;gap:.5rem}
.langsw{display:inline-flex;border:1px solid var(--line2);border-radius:8px;overflow:hidden;flex:none}
.langsw a,.nav .langsw a{min-height:40px;min-width:44px;display:inline-grid;place-items:center;padding:0 .6rem;font-weight:700;font-size:.85rem;color:var(--ink);background:var(--card);text-decoration:none}
.langsw a+a{border-left:1px solid var(--line2)}
.langsw a:hover{background:var(--hover)}
.langsw a[aria-current]{background:var(--brand);color:var(--on-brand,#fff)}
/* keluarkan sijil + WhatsApp */
.relset{border:0;margin:0 0 .6rem;padding:0;min-width:0}
.relset legend{font-weight:600;padding:0;margin-bottom:.2rem}
.opt{display:flex;gap:.7rem;align-items:flex-start;padding:.7rem .8rem;border:1px solid var(--line);border-radius:10px;margin:.45rem 0;cursor:pointer;min-height:56px}
.opt:has(input:checked){border-color:var(--brand);background:var(--tint)}
.opt input{margin-top:.2rem;width:22px;height:22px;flex:none;accent-color:var(--brand)}
.rel-row{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}
.rel-row .right{margin-left:auto}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.wa{background:var(--wa);border-color:var(--wa);color:#fff}
.btn.wa:hover{background:var(--wa-2)}
.btn.wa svg{vertical-align:-4px}
.relbox{background:var(--warn-bg);border:1px solid var(--warn-line);text-align:left;color:var(--warn-ink);margin-top:1rem}
.dlg{border:0;border-radius:14px;padding:1.1rem;width:min(440px,calc(100vw - 24px));max-height:calc(100vh - 24px);overflow:auto;box-shadow:0 10px 40px rgba(0,0,0,.35)}
.dlg::backdrop{background:rgba(15,23,42,.55)}
.dlg h2{margin-top:0}
.dlg-act{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;margin-top:1rem}
.dlg-act .btn{flex:1 1 140px}
/* privacy notice */
.privbox{margin-top:1rem;padding:.9rem 1rem;border:1px solid var(--line2);border-radius:var(--radius);background:var(--soft);font-size:.92rem}
.privchk{display:flex;align-items:flex-start;gap:.7rem;margin:0;padding:.4rem .2rem;min-height:44px;font-weight:500;cursor:pointer;border-radius:8px}
.privchk input{width:26px;height:26px;flex:none;margin:.1rem 0 0;accent-color:var(--brand)}
.privchk.bad{outline:2px solid var(--danger);outline-offset:2px;background:var(--danger-bg)}
#privacyErr:empty{display:none}
.legal h2{margin:1.4rem 0 .4rem;font-size:1.1rem}
.legal ul{margin:.3rem 0 .6rem;padding-left:1.2rem}
.legal li{margin:.25rem 0}
/* masked personal data: the server sends only masked text; "Papar" fetches the full values for one row */
tr.reveal .mnote{display:none}
i.sep{font-style:normal;color:var(--muted);margin:0 .3rem}
/* phones/tablets: touch targets >= 40px for everything you tap */
@media (max-width:900px){
  .btn,.btn.sm{min-height:40px;display:inline-flex;align-items:center;justify-content:center}
  input[type=text],input[type=search],input[type=email],input[type=tel],input[type=password],input[type=date],input[type=number],select{min-height:40px}
  .tabs a{min-height:40px;display:inline-flex;align-items:center}
  a.tap,td.act a,.nav a{display:inline-flex;align-items:center;min-height:40px;padding:0 .35rem}
}
/* phones: tables marked .stack become one card per row (no sideways scroll) */
@media (max-width:640px){
  .card.tbl{padding:.75rem}
  table.stack,table.stack tbody{display:block}
  table.stack thead{display:none}
  table.stack tr{display:block;border:1px solid var(--line);border-radius:10px;padding:.55rem .8rem;margin:0 0 .6rem;background:var(--card)}
  table.stack tr:hover td{background:transparent}
  table.stack td{display:block;border:0;padding:.2rem 0;text-align:left!important}
  table.stack td[data-l]{display:flex;justify-content:space-between;gap:.8rem;text-align:right!important}
  table.stack td[data-l]::before{content:attr(data-l);flex:none;font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;font-weight:600;font-size:.8rem;color:var(--muted);text-align:left}
  table.stack td.seq{display:none}
  table.stack td:first-child strong,table.stack td:first-child>a>strong{font-size:1.02rem}
  table.stack .sep{display:none}
  table.stack td.hide-sm{display:block}
  table.stack td.hide-sm[data-l]{display:flex}
  table.stack td.act{display:flex;flex-wrap:wrap;align-items:center;gap:.2rem .6rem;margin-top:.35rem;padding-top:.4rem;border-top:1px solid var(--line)}
  table.stack td.act .row{flex-wrap:wrap!important}
  table.stack td[colspan]{display:block;text-align:center!important}
}


/* themed popups (select list + dialog); colours follow the theme tokens */
.mc-native{position:absolute!important;opacity:0;pointer-events:none;width:1px!important;height:1px!important;min-width:0!important;padding:0!important;border:0!important;margin:0!important;overflow:hidden}
.mc-sel{display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-height:42px;text-align:left;color:var(--ink);cursor:pointer;line-height:1.3}
.mc-sel:disabled{opacity:.6;cursor:not-allowed}
.mc-sel .mc-val{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.mc-sel .mc-val.ph{color:var(--muted)}
.mc-sel .mc-chev{flex:none;color:var(--muted)}
.mc-sel[aria-expanded=true]{border-color:var(--brand)}
.mc-sel[aria-expanded=true] .mc-chev{transform:rotate(180deg)}
.mc-sel.bad{border-color:var(--danger)}
html.mc-lock{overflow:hidden}
.mc-back{position:fixed;inset:0;z-index:1000}
.mc-back.mc-pop{background:transparent}
.mc-back.mc-sheet,.mc-back.mc-dlg{background:rgba(8,12,20,.55);display:flex}
.mc-back.mc-sheet{align-items:flex-end}
.mc-back.mc-dlg{align-items:center;justify-content:center;padding:16px}
.mc-panel{background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 48px rgba(0,0,0,.3);display:flex;flex-direction:column;overflow:hidden}
.mc-back.mc-pop .mc-panel{position:fixed}
.mc-back.mc-sheet .mc-panel{width:100%;max-height:min(78vh,560px);border-radius:18px 18px 0 0;border-bottom:0;padding-bottom:env(safe-area-inset-bottom,0)}
.mc-hd{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.35rem .5rem .35rem 1rem;border-bottom:1px solid var(--line)}
.mc-x{min-width:44px;min-height:44px;border:0;background:transparent;color:var(--muted);font-size:1.6rem;line-height:1;cursor:pointer;border-radius:8px}
.mc-x:hover{background:var(--hover)}
.mc-search{margin:.5rem .5rem .25rem;width:auto!important;min-height:42px}
.mc-list{list-style:none;margin:0;padding:.3rem;overflow-y:auto;overscroll-behavior:contain;outline:0}
.mc-opt{display:flex;align-items:center;justify-content:space-between;gap:.75rem;min-height:46px;padding:.55rem .8rem;border-radius:8px;cursor:pointer}
.mc-opt .mc-check{flex:none;visibility:hidden;color:var(--link)}
.mc-opt.mc-chosen{font-weight:700;color:var(--link)}.mc-opt.mc-chosen .mc-check{visibility:visible}
.mc-opt:hover,.mc-opt.mc-cur{background:var(--hover)}
.mc-opt.mc-cur{outline:2px solid var(--focus);outline-offset:-2px}
.mc-opt.mc-off{opacity:.5;cursor:not-allowed}
.mc-grp{padding:.5rem .8rem .2rem;font-size:.75rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.mc-none{padding:.9rem 1rem;color:var(--muted)}
.mc-modal{background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:16px;width:min(440px,100%);padding:1.25rem;box-shadow:0 24px 64px rgba(0,0,0,.4)}
.mc-modal.danger{border-top:4px solid var(--danger)}
.mc-modal h2{margin:0 0 .5rem;font-size:1.15rem}
.mc-modal p{margin:0;color:var(--muted);white-space:pre-line;overflow-wrap:anywhere}
.mc-act{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.6rem;margin-top:1.1rem}
.mc-act .btn{min-height:44px;min-width:96px;text-align:center}
.mc-modal.danger .btn.ok{background:var(--danger);border-color:var(--danger);color:var(--card)}
@media (max-width:480px){.mc-act{flex-direction:column-reverse}.mc-act .btn{width:100%}}
@media (prefers-reduced-motion:no-preference){
  .mc-back{animation:mcfade .15s ease-out}.mc-back.mc-out{animation:mcfadeout .14s ease-in forwards}
  .mc-back.mc-sheet .mc-panel{animation:mcup .22s cubic-bezier(.2,.9,.3,1)}.mc-back.mc-sheet.mc-out .mc-panel{animation:mcdown .14s ease-in forwards}
  .mc-back.mc-dlg .mc-modal{animation:mcpop .2s cubic-bezier(.2,.9,.3,1.1)}
  .mc-back.mc-pop .mc-panel{animation:mcpop2 .12s ease-out}
}
@keyframes mcfade{from{opacity:0}}@keyframes mcfadeout{to{opacity:0}}
@keyframes mcup{from{transform:translateY(40px)}}@keyframes mcdown{to{transform:translateY(40px)}}
@keyframes mcpop{from{opacity:0;transform:translateY(10px) scale(.97)}}@keyframes mcpop2{from{opacity:0;transform:translateY(-4px)}}


:root{--bms-loader-accent:var(--brand);--bms-loader-accent-dark:var(--brand)}
.eqr{background:#fff;box-shadow:0 0 0 .5rem #fff;line-height:0}.eqr svg{width:100%;height:100%;display:block;pointer-events:none}
