/* Mading Digital: gaya bersama (publik, admin, installer). Arah desain ada di DESIGN.md. */
:root{
  --ink:#1b1a22; --paper:#fffaf0; --white:#fff; --grey:#55515f; --red-text:#b3261e;
  --teal:#0e8f84; --sun:#ffd23f; --mint:#cdf3ea; --coral:#ff6159;
  --r1:8px; --r2:14px; --tap:44px;
  --lift:4px 4px 0 var(--ink);
  --gut:clamp(16px,4vw,56px);
  --font-d:"Bricolage Grotesque",system-ui,"Segoe UI",sans-serif;
  --font-b:"Figtree",system-ui,-apple-system,"Segoe UI",sans-serif;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{margin:0;min-height:100vh;min-height:100dvh;background:var(--paper);color:var(--ink);font:500 16px/1.5 var(--font-b);
  padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);overflow-wrap:break-word}
[hidden]{display:none!important}
a{color:inherit}
img{max-width:100%}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--ink);outline-offset:3px}
code{padding:1px 5px;background:var(--mint);border-radius:4px;font-size:.92em}
svg.ico{width:1.25em;height:1.25em;flex:none;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.skip{position:absolute;left:12px;top:-60px;z-index:5000;padding:10px 16px;background:var(--ink);color:var(--white);border-radius:var(--r1);font-weight:700;text-decoration:none}
.skip:focus{top:12px}

/* ---------- tombol ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--tap);padding:0 16px;border:2px solid var(--ink);border-radius:var(--r1);
  background:var(--white);color:var(--ink);font:700 15px/1.1 var(--font-b);cursor:pointer;text-decoration:none;white-space:nowrap;transition:background-color .12s}
.btn:hover{background:var(--mint)}
.btn:active{background:var(--sun)}
.btn.icon{width:var(--tap);padding:0}
.btn.sun{background:var(--sun)} .btn.sun:hover{background:#f2c22b}
.btn.coral{background:var(--coral)} .btn.coral:hover{background:#f04c44}
.btn.mint{background:var(--mint)} .btn.mint:hover{background:#b6ebdf}
.btn.ink{background:var(--ink);color:var(--white)}
.btn.block{width:100%}
.btn.sm{min-height:36px;padding:0 12px;font-size:14px}
.btn.sm.icon{width:36px;padding:0}
.btn[disabled]{opacity:.45;cursor:not-allowed}
.btn[disabled]:hover{background:var(--white)}
@media (pointer:coarse){.btn.sm{min-height:var(--tap)} .btn.sm.icon{width:var(--tap)}}

/* ---------- nama produk: teks biasa, bukan logo buatan ---------- */
.wordmark{margin:0;font:800 clamp(26px,3.4vw,38px)/1 var(--font-d);letter-spacing:-.02em}
.wordmark a{text-decoration:none}
.wordmark a:hover{text-decoration:underline;text-decoration-thickness:3px;text-underline-offset:5px}

/* ---------- kursor: elemen yang bisa ditekan terlihat bisa ditekan ---------- */
button,[role=button],a[href],select,summary,label[for],input[type=checkbox],input[type=radio],input[type=file],input[type=date],input[type=month]{cursor:pointer}
button:disabled,[aria-disabled=true]{cursor:not-allowed}

/* ---------- kaki halaman ---------- */
.foot{display:flex;flex-wrap:wrap;gap:8px 24px;justify-content:space-between;padding:20px var(--gut) max(28px,env(safe-area-inset-bottom));color:var(--grey);font-size:15px}
.foot p{margin:0}
.foot a{font-weight:700;color:var(--ink);padding:8px 0}

/* ---------- header publik ---------- */
.top{display:flex;flex-wrap:wrap;align-items:center;gap:12px 24px;padding:16px var(--gut) 12px}
.datebar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px;margin-left:auto}
.nav-date,.nav-tools{display:flex;align-items:center;gap:8px}
.datepill{position:relative;display:grid;align-content:center;min-width:220px;min-height:52px;padding:4px 16px;border:2px solid var(--ink);border-radius:var(--r1);background:var(--white);text-align:center;cursor:pointer}
.datepill:focus-within{outline:3px solid var(--ink);outline-offset:3px}
.datepill .dow{display:block;font:700 13px/1.2 var(--font-b);color:var(--grey)}
.datepill .dmy{display:block;font:800 19px/1.15 var(--font-d)}
.datepill input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;font-size:16px}
.seg{display:inline-flex;border:2px solid var(--ink);border-radius:var(--r1);overflow:hidden;background:var(--white)}
.seg button{min-height:calc(var(--tap) - 4px);padding:0 14px;border:0;background:transparent;font:700 14px var(--font-b);cursor:pointer;display:inline-flex;align-items:center;gap:7px}
.seg button+button{border-left:2px solid var(--ink)}
.seg button[aria-pressed=true]{background:var(--sun)}
.seg button:focus-visible{outline-offset:-3px}

.archive-banner{margin:4px var(--gut) 16px;display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;padding:12px 16px;border:2px solid var(--ink);border-radius:var(--r2);background:var(--sun);font-weight:700}
.archive-banner span{flex:1;min-width:200px}

/* ---------- papan ---------- */
.stage{padding:12px var(--gut) 64px}
.frame{border:8px solid var(--sun);outline:2px solid var(--ink);border-radius:var(--r2);background:var(--teal)}
.board{position:relative;container-type:inline-size;box-sizing:content-box;width:auto;aspect-ratio:1600/var(--bh,1000);background:var(--teal);border:8px solid var(--sun);outline:2px solid var(--ink);border-radius:var(--r2)}
.empty{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);max-width:84%;padding:20px 26px;background:var(--white);border:2px solid var(--ink);border-radius:var(--r2);text-align:center}
.empty b{display:block;font:800 clamp(18px,3cqw,28px)/1.2 var(--font-d)}
.empty span{display:block;margin-top:4px;color:var(--grey)}
.empty .btn{margin-top:12px}
.empty.flow{position:static;transform:none;margin:24px auto;max-width:560px}
.loading{display:flex;align-items:center;gap:14px}
.loading::before{content:"";width:22px;height:22px;flex:none;border:3px solid var(--mint);border-top-color:var(--ink);border-radius:50%;animation:spin .8s linear infinite}

.card{position:absolute;left:calc(var(--x)/1600*100%);top:calc(var(--y)/var(--bh)*100%);width:calc(var(--w)/1600*100%);
  z-index:var(--z,1);transform:rotate(var(--rot,0deg));transform-origin:50% 6%;container-type:inline-size;cursor:zoom-in;
  transition:transform .2s ease-out;outline:none;-webkit-tap-highlight-color:transparent}
@media (hover:hover){.board .card:hover{transform:rotate(0deg) translateY(-6px);z-index:999}}
.board .card:has(.hit:focus-visible){transform:rotate(0deg) translateY(-6px);z-index:999}
.card:has(.hit:focus-visible) .paper{outline:3px solid var(--ink);outline-offset:4px}
.hit{position:absolute;inset:0;z-index:5;width:100%;padding:0;border:0;border-radius:inherit;background:transparent;cursor:zoom-in}
.hit:focus-visible{outline:none}
.paper{display:flex;flex-direction:column;overflow:hidden;background:var(--white);border:max(2px,.7cqw) solid var(--ink);border-radius:max(3px,1.4cqw);
  box-shadow:max(3px,1.6cqw) max(3px,1.6cqw) 0 var(--ink)}
.media{position:relative;aspect-ratio:var(--ar,.707);background:#efe8d5;overflow:hidden}
.media:not(.loaded):not(.nopdf){background:linear-gradient(100deg,#efe8d5 30%,#fbf5e4 50%,#efe8d5 70%) 0 0/220% 100%;animation:shimmer 1.4s linear infinite}
.media canvas,.media img{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:cover}
.media.nopdf{display:grid;place-items:center;background:var(--mint)}
.media.nopdf::before{content:"PDF";font:800 16cqw/1 var(--font-d)}
.cap{background:var(--c,var(--sun));border-top:max(2px,.7cqw) solid var(--ink);padding:3cqw 4cqw 3.4cqw}
.ttl{margin:0;font:800 clamp(14px,6.2cqw,24px)/1.18 var(--font-d);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.rng{margin:3px 0 0;font:600 clamp(12px,4.6cqw,16px)/1.3 var(--font-b)}
.flag{position:absolute;top:2.4cqw;z-index:2;padding:.3em .6em;border-radius:4px;font:800 clamp(11px,3.8cqw,14px)/1.2 var(--font-b);background:var(--coral);color:var(--ink)}
.flag.pdf{left:2.4cqw;background:var(--ink);color:var(--sun)}
.flag.pdf+.flag{right:2.4cqw}
.flag:not(.pdf){right:2.4cqw}
.fix{position:absolute;left:50%;top:0;z-index:3;width:30%;height:max(12px,5.6cqw);transform:translate(-50%,-55%) rotate(var(--tr,-3deg));
  background:rgba(255,210,63,.92);border:max(1.5px,.4cqw) solid rgba(27,26,34,.55)}
.t0{--tr:-4deg} .t1{--tr:3deg} .t2{--tr:-2deg} .t3{--tr:4deg}
.c-sun{--c:var(--sun)} .c-coral{--c:var(--coral)} .c-mint{--c:var(--mint)} .c-white{--c:var(--white)}

.card.enter{animation:stick .45s ease-out both;animation-delay:calc(var(--i,0)*60ms)}
@keyframes stick{from{opacity:0;translate:0 -32px}to{opacity:1;translate:0 0}}
@keyframes shimmer{to{background-position:-220% 0}}
@keyframes spin{to{rotate:360deg}}
@keyframes fade{from{opacity:0}}

/* ---------- tampilan daftar ---------- */
.list-wrap{background:var(--teal);border:8px solid var(--sun);outline:2px solid var(--ink);border-radius:var(--r2);padding:34px clamp(14px,3vw,32px) 32px}
.list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,250px),1fr));gap:38px 26px;align-items:start}
.list .card{position:relative;left:auto;top:auto;width:auto;transform:rotate(calc(var(--rot,0deg)*.4))}
.list .empty{position:static;transform:none;grid-column:1/-1;justify-self:center}

/* ---------- Employee of the Month ---------- */
.eom{margin:8px var(--gut) 36px;display:grid;grid-template-columns:minmax(200px,280px) 1fr;gap:18px clamp(18px,3vw,36px);align-items:center;
  padding:clamp(18px,2.6vw,30px);border:2px solid var(--ink);border-radius:var(--r2);background:var(--sun)}
.eom h2{margin:0;font:800 clamp(30px,4vw,46px)/1 var(--font-d);letter-spacing:-.02em;text-wrap:balance}
.eom .month{margin:8px 0 0;font:700 18px/1.3 var(--font-b)}
.winners{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr));gap:14px}
.winner{display:flex;gap:14px;align-items:flex-start;padding:14px;background:var(--white);border:2px solid var(--ink);border-radius:var(--r2)}
.ph{display:grid;place-items:center;flex:none;width:76px;aspect-ratio:1;overflow:hidden;background:var(--mint);border:2px solid var(--ink);border-radius:50%;font:800 26px/1 var(--font-d)}
.ph img{width:100%;height:100%;object-fit:cover;display:block}
.winner .who{min-width:0}
.winner h3{margin:0;font:800 21px/1.15 var(--font-d)}
.winner .role{margin:2px 0 0;color:var(--grey);font-weight:700;font-size:15px}
.winner blockquote{margin:8px 0 0;font-size:16px;line-height:1.4;text-wrap:pretty}
.eom.quiet{grid-template-columns:1fr;background:var(--white)}
.eom.quiet p{margin:0;color:var(--grey);font-weight:700}

/* ---------- viewer ---------- */
.viewer{position:fixed;inset:0;z-index:2000;display:flex;flex-direction:column;background:rgba(27,26,34,.94);animation:fade .15s}
.v-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;padding:8px 14px;padding-top:max(8px,env(safe-area-inset-top));background:var(--sun);border-bottom:2px solid var(--ink)}
.v-title{min-width:0;flex:1 1 200px;display:flex;flex-direction:column}
.v-title strong{font:800 clamp(17px,2.4vw,22px)/1.2 var(--font-d);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.v-title span{font:600 14px/1.3 var(--font-b)}
.v-tools{display:flex;gap:6px;align-items:center;margin-left:auto}
.v-zoom{min-width:52px;text-align:center;font:800 14px var(--font-d)}
.v-body{position:relative;flex:1;overflow:auto;display:flex;padding:18px 12px 96px;touch-action:pan-x pan-y pinch-zoom;overscroll-behavior:contain}
.v-stage{margin:auto;display:flex;flex-direction:column;align-items:center;gap:18px}
.v-stage img{display:block;background:var(--white);border:2px solid var(--ink);border-radius:4px}
.v-stage img.fit{max-width:min(100vw - 24px,1400px);max-height:calc(100dvh - 190px);width:auto;height:auto}
.pg{position:relative;background:var(--white);border:2px solid var(--ink)}
.pg canvas{display:block;width:100%;height:100%}
.v-frame{width:min(100vw - 24px,1000px);height:calc(100dvh - 170px);border:2px solid var(--ink);background:var(--white)}
.v-msg{max-width:520px;padding:18px 22px;background:var(--white);border:2px solid var(--ink);border-radius:var(--r2);font-weight:700;text-align:center}
.v-nav{position:fixed;top:50%;z-index:3;transform:translateY(-50%);width:48px;height:56px;border-radius:var(--r1);border:2px solid var(--ink);background:var(--sun);display:grid;place-items:center;cursor:pointer}
.v-nav:hover{background:var(--white)}
.v-nav.prev{left:max(8px,env(safe-area-inset-left))} .v-nav.next{right:max(8px,env(safe-area-inset-right))}
.v-nav svg{width:26px;height:26px}
.v-pager{position:fixed;left:50%;bottom:max(16px,env(safe-area-inset-bottom));transform:translateX(-50%);z-index:3;padding:10px 16px;background:var(--sun);border:2px solid var(--ink);border-radius:var(--r1);font:800 15px var(--font-d)}
.viewer :focus-visible{outline-color:var(--white)}
.viewer .v-bar :focus-visible,.viewer .v-nav:focus-visible,.viewer .v-pager:focus-visible{outline-color:var(--ink)}
.spin{width:44px;height:44px;border:5px solid rgba(255,255,255,.3);border-top-color:var(--sun);border-radius:50%;animation:spin .8s linear infinite;margin:auto}

/* ---------- kalender arsip ---------- */
.calpop{position:fixed;z-index:1500;width:min(340px,calc(100vw - 24px));padding:12px;background:var(--white);border:2px solid var(--ink);border-radius:var(--r2);box-shadow:var(--lift);animation:fade .12s}
.cal-h{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.cal-h strong{font:800 18px var(--font-d)}
.cal-g{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cal-g .wd{padding:4px 0;text-align:center;font:700 13px var(--font-b);color:var(--grey)}
.day{position:relative;min-height:var(--tap);display:grid;place-items:center;border:2px solid transparent;border-radius:var(--r1);background:transparent;font:700 15px var(--font-b);cursor:pointer}
.day:hover{background:var(--mint)}
.day.has{background:var(--mint)}
.day.has::after{content:"";position:absolute;bottom:5px;width:6px;height:6px;border-radius:50%;background:var(--ink)}
.day.today{border-color:var(--ink)}
.day.sel{background:var(--ink);color:var(--white)}
.day.sel::after{background:var(--white)}
.day.dis{opacity:.35;pointer-events:none}
.day.out{visibility:hidden}
.cal-f{margin-top:8px;font-size:14px;color:var(--grey)}

/* ---------- dialog, formulir, toast ---------- */
.modal-back{position:fixed;inset:0;z-index:3000;display:grid;place-items:center;padding:16px;background:rgba(27,26,34,.6);animation:fade .12s}
.modal{display:flex;flex-direction:column;width:min(var(--mw,560px),100%);max-height:calc(100dvh - 32px);background:var(--paper);border:2px solid var(--ink);border-radius:var(--r2);box-shadow:var(--lift)}
.modal>header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px 10px 18px;background:var(--sun);border-bottom:2px solid var(--ink);border-radius:12px 12px 0 0}
.modal>header h3{margin:0;font:800 20px/1.2 var(--font-d)}
.modal .mbody{padding:18px;overflow:auto}
.modal>footer{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;padding:12px 18px;padding-bottom:max(12px,env(safe-area-inset-bottom));border-top:2px solid var(--ink);background:var(--white);border-radius:0 0 12px 12px}
.fld{display:flex;flex-direction:column;gap:5px;margin-bottom:14px;min-width:0}
.fld>span{font:700 14px var(--font-b)}
.fld input,.fld select,.fld textarea,.in{width:100%;min-height:var(--tap);padding:9px 12px;background:var(--white);border:2px solid var(--ink);border-radius:var(--r1);font:500 16px/1.4 var(--font-b);min-width:0}
.fld input[type=checkbox]{width:auto;min-height:0}
.fld input:focus-visible,.fld select:focus-visible,.fld textarea:focus-visible,.in:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
.fld textarea{resize:vertical;min-height:84px}
.fld small{color:var(--grey);font-size:14px}
.err{margin:0 0 14px;padding:10px 14px;background:var(--coral);border:2px solid var(--ink);border-radius:var(--r1);font-weight:700;font-size:15px}
.note{margin:0 0 12px;color:var(--grey);font-size:15px}
#toasts{position:fixed;left:50%;bottom:max(20px,env(safe-area-inset-bottom));z-index:4000;display:flex;flex-direction:column;gap:8px;align-items:center;width:min(92vw,460px);transform:translateX(-50%);pointer-events:none}
.toast{padding:12px 16px;background:var(--ink);color:var(--white);border-radius:var(--r1);font-weight:700;animation:fade .15s}
.toast.err{background:var(--coral);color:var(--ink)}
.toast.ok{background:var(--mint);color:var(--ink);border:2px solid var(--ink)}
.toast.out{opacity:0;transition:opacity .3s}

/* ---------- ponsel dan tablet ---------- */
@media (max-width:860px){
  .eom{grid-template-columns:1fr}
  .datebar{margin-left:0;width:100%}
  .frame,.board,.list-wrap{border-width:6px}
}
@media (max-width:560px){
  .top{gap:10px}
  .datebar{flex-direction:column;align-items:stretch;gap:8px}
  .nav-date .datepill{flex:1;min-width:0}
  .nav-tools{flex-wrap:wrap}
  .nav-tools .btn.sun,.nav-tools .btn.mint{flex:1}
  .nav-tools .seg{flex:1 1 100%}
  #btnFull{display:none}
  .nav-tools .seg button{flex:1;justify-content:center}
  .list{grid-template-columns:1fr;gap:34px}
  .list .card{max-width:420px;width:100%;justify-self:center}
  .modal-back{align-items:end;padding:0}
  .modal{width:100%;max-height:92dvh;border-radius:var(--r2) var(--r2) 0 0;border-bottom-width:0}
  .calpop{left:12px!important;right:12px!important;top:auto!important;bottom:max(12px,env(safe-area-inset-bottom));width:auto}
  .v-tools{width:100%;justify-content:space-between}
  .v-tools .btn span{display:none}
}
/* Panah geser pindah ke bawah di layar sempit supaya tidak menutupi dokumen. */
@media (max-width:860px){
  .v-nav{top:auto;bottom:max(14px,env(safe-area-inset-bottom));transform:none;width:var(--tap);height:var(--tap)}
  .v-nav.prev{left:max(12px,env(safe-area-inset-left))} .v-nav.next{right:max(12px,env(safe-area-inset-right))}
  .v-pager{bottom:max(14px,env(safe-area-inset-bottom))}
  .btn.hide-s span{display:none}
}
@media (max-height:480px) and (orientation:landscape){
  .v-body{padding-bottom:70px}
  .v-stage img.fit{max-height:calc(100dvh - 130px)}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
}
