:root{--bg:#f8f3eb;--ink:#332b27;--muted:#746862;--accent:#c4a283;--accent-soft:#eadbc9;--card:#fffdf9;--line:rgba(51,43,39,.14);--deep:#2d2521;--danger:#a83d30;--ok:#4f6b47;box-sizing:border-box}
*,*:before,*:after{box-sizing:inherit}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:'Karla',sans-serif;line-height:1.55}
h1,h2,h3{font-family:'Cormorant Garamond',serif;font-weight:500;margin:0;line-height:1.05}
a{color:inherit}button,input{font:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
[hidden]{display:none!important}

/* header — zelfde opbouw als de hoofdsite */
.hdr{position:sticky;top:0;z-index:10;background:rgba(248,243,235,.94);border-bottom:1px solid var(--line);backdrop-filter:blur(14px)}
.hdr-in{width:min(100% - 40px,1280px);height:72px;margin:auto;display:grid;grid-template-columns:1fr 88px 1fr;align-items:center;gap:24px}
.hdr-side{display:flex;align-items:center;gap:28px;font-size:12px;font-weight:700;text-transform:uppercase;color:var(--muted)}
.hdr-side.left{justify-content:flex-end}
.hdr-side a,.hdr-side button{color:inherit;text-decoration:none;background:none;border:0;padding:0;cursor:pointer;text-transform:inherit;font-weight:inherit;font-size:inherit}
.hdr-side a:hover,.hdr-side button:hover,.hdr-side a.active{color:var(--ink)}
.hdr-side a.active{border-bottom:2px solid var(--accent);padding-block:4px}
.hdr-logo img{width:88px;height:88px;display:block;margin-top:14px;filter:drop-shadow(0 6px 10px rgba(51,43,39,.18))}
main{width:min(100% - 40px,1100px);margin:0 auto;padding:72px 0 110px;min-height:calc(100vh - 72px - 96px)}
footer{background:var(--deep);color:#f8f3eb;padding:28px 20px;text-align:center;font-size:13px}
footer span{opacity:.65}

/* koppen en tekst */
.page-head{margin-bottom:44px;max-width:640px}
.page-head h1{font-size:clamp(44px,6vw,68px);margin-bottom:12px}
.page-head p,.lead{color:var(--muted);margin:0;font-size:17px}
.muted{color:var(--muted)}small{color:var(--muted)}

/* knoppen en velden */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:0 22px;border-radius:6px;border:1px solid var(--ink);background:var(--ink);color:var(--bg);font-weight:700;font-size:14px;text-decoration:none;cursor:pointer;transition:opacity .2s}
.btn:hover{opacity:.88}.btn:disabled{opacity:.4;cursor:not-allowed}
.btn.ghost{background:transparent;color:var(--ink);border-color:var(--line)}
.btn.small{min-height:36px;padding:0 14px;font-size:13px}
.btn.wide{width:100%}
.btn.danger{background:transparent;color:var(--danger);border-color:rgba(168,61,48,.35)}
label{display:block;font-size:13px;font-weight:700;margin-bottom:6px}
.input{width:100%;min-height:48px;padding:0 14px;border:1px solid #b9a99d;border-radius:6px;background:#fff;color:var(--ink)}
.input:focus{border-color:var(--accent);outline:2px solid var(--accent-soft)}
.code-input{font-family:'Cormorant Garamond',serif;font-size:34px;letter-spacing:.32em;text-align:center;text-transform:uppercase;min-height:66px;padding-left:.32em}
.msg{margin:14px 0 0;padding:12px 14px;border-radius:6px;font-size:14px}
.msg.error{background:#f7e4e0;color:var(--danger)}.msg.success{background:#e6eddf;color:var(--ok)}

/* inloggen */
.login{max-width:460px;margin:0 auto;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:40px 36px}
.login h1{font-size:44px;margin-bottom:8px}
.login .lead{font-size:15px;margin-bottom:28px}
#google-btn{min-height:44px;display:flex;justify-content:center}
.notice{padding:12px 14px;border:1px dashed var(--accent);border-radius:6px;font-size:13px;color:var(--muted);text-align:center}
.divider{display:flex;align-items:center;gap:14px;margin:24px 0;color:var(--muted);font-size:13px}
.divider:before,.divider:after{content:"";flex:1;height:1px;background:var(--line)}
.login form .btn{margin-top:12px}

/* DE KLANTENKAART */
@keyframes press{from{transform:scale(1.6) rotate(-14deg);opacity:0}to{transform:scale(1) rotate(var(--tilt,0deg));opacity:1}}
@media(prefers-reduced-motion:reduce){.spot.new{animation:none}}

/* kaartpagina */
.card-layout{display:grid;grid-template-columns:minmax(0,560px) 1fr;gap:56px;align-items:start}
.side h3{font-size:30px;margin-bottom:6px}
.side p{margin:0 0 20px;color:var(--muted)}
.reward-code{display:inline-block;padding:14px 20px;border:1px dashed var(--accent);border-radius:8px;background:var(--card);margin-bottom:22px}
.reward-code strong{display:block;font:600 30px 'Cormorant Garamond',serif;letter-spacing:.08em}
.list{margin-top:48px}
.list h3{font-size:30px;margin-bottom:14px}
.row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 0;border-bottom:1px solid var(--line);font-size:15px}
.row small{display:block}

/* stempelpagina */
.stamp-panel{max-width:460px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:36px}
.stamp-panel .input{margin-bottom:14px}

/* beheer */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:40px}
.stats div{padding:20px;border:1px solid var(--line);border-radius:10px;background:var(--card)}
.stats strong{display:block;font:500 46px/1 'Cormorant Garamond',serif}
.stats span{font-size:13px;color:var(--muted)}
.admin-grid{display:grid;grid-template-columns:360px 1fr;gap:48px;align-items:start}
.admin-grid h2{font-size:32px;margin-bottom:14px}
.panel{padding:22px;border:1px solid var(--line);border-radius:12px;background:var(--card);margin-top:22px}
.panel h3{font-size:26px;margin-bottom:12px}
.cust{display:flex;align-items:center;gap:12px;width:100%;padding:12px;border:1px solid var(--line);border-radius:8px;background:var(--card);cursor:pointer;text-align:left;margin-bottom:8px;color:var(--ink)}
.cust.sel{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
.cust .av{width:40px;height:40px;border-radius:50%;background:var(--accent-soft);display:grid;place-items:center;font-weight:700;flex:none}
.cust small{display:block}
.newcode{font:600 44px 'Cormorant Garamond',serif;letter-spacing:.24em;text-align:center;padding:14px 0 14px .24em;background:var(--bg);border-radius:8px;margin:0 0 12px}
.form-stack{display:grid;gap:10px}
.actions{display:flex;flex-wrap:wrap;gap:10px;margin:20px 0}

@media(max-width:900px){
 .hdr-in{display:flex;flex-wrap:wrap;height:auto;justify-content:center;gap:4px 22px;padding:8px 0 12px}
 .hdr-logo{order:-1;width:100%;display:flex;justify-content:center}.hdr-logo img{width:64px;height:64px;margin-top:6px}
 .hdr-side{gap:18px}
 main{padding-top:44px}
 .card-layout,.admin-grid{grid-template-columns:1fr;gap:36px}
 .stats{grid-template-columns:1fr 1fr}
}

/* ===== samengevoegde beheerpagina ===== */
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
body[data-page="beheer"] main{padding-top:44px}

/* overzichtbalk (nummer 1) helemaal bovenaan */
.stats{margin-bottom:26px}
.stats div{border-radius:16px}

/* panelen (look nummer 2 in de kleuren van nummer 1) */
.panel{margin:0 0 24px;padding:28px;border-radius:22px;box-shadow:0 20px 50px -34px rgba(60,40,20,.35)}
.panel h2{font-size:34px;margin:0}
.panel-head{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}
.panel-head p{margin:6px 0 0;color:var(--muted);font-size:15px}
.scroll{overflow-x:auto;margin-top:18px}
table{width:100%;border-collapse:collapse;font-size:15px}
th{text-align:left;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);padding:10px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:13px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
tbody tr:last-child td{border-bottom:0}
.mono{font-family:'Courier New',monospace;font-weight:700;letter-spacing:.15em}
.empty{color:var(--muted);text-align:center;padding:22px 10px}
.tag{display:inline-block;font-size:12px;padding:3px 11px;border-radius:99px;white-space:nowrap}
.tag.live{background:#e6eddf;color:var(--ok)}
.tag.dead{background:#eee9e3;color:#8a7f78}
.tag.ready{background:var(--accent-soft);color:var(--deep);font-weight:700}

/* verse code (nummer 2) */
.fresh{margin-top:18px;text-align:center}
.fresh small{display:block;color:var(--accent);letter-spacing:.2em;font-size:12px;font-weight:700}
.fresh strong{display:block;font:600 clamp(34px,7vw,52px)/1.1 'Cormorant Garamond',serif;letter-spacing:.3em;padding-left:.3em}

/* klantentabel: klikbare rijen */
.crow{cursor:pointer;transition:background .15s}
.crow:hover,.crow:focus-visible{background:var(--bg)}
.crow:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.who{display:flex;align-items:center;gap:12px;min-width:200px}
.who .av{width:40px;height:40px;border-radius:50%;background:var(--accent-soft);display:grid;place-items:center;font-weight:700;flex:none}
.who small{display:block;word-break:break-all}
.bar{height:6px;width:110px;background:var(--accent-soft);border-radius:9px;overflow:hidden;margin-bottom:4px}
.bar i{display:block;height:100%;background:var(--accent)}
.go{color:var(--accent);font-size:22px;text-align:right;width:28px}
.hint{margin:14px 0 0;font-size:13px;color:var(--muted)}

/* klantenkaart: schaalt mee met de breedte (container queries) */

/* klantenkaart-venster */
.modal{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:16px}
.modal-back{position:absolute;inset:0;background:rgba(45,37,33,.58);backdrop-filter:blur(3px)}
.modal-box{position:relative;width:min(100%,640px);max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);overflow:auto;background:var(--bg);border:1px solid var(--line);border-radius:22px;padding:30px 28px 28px;box-shadow:0 40px 80px -30px rgba(45,37,33,.6)}
.modal-box:focus{outline:none}
.modal-x{position:absolute;top:14px;right:14px;width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:var(--card);color:var(--ink);font-size:24px;line-height:1;cursor:pointer}
.modal-x:hover{background:var(--accent-soft)}
.modal-box h2{font-size:38px;padding-right:44px}
.modal-box .who-mail{margin:4px 0 20px;color:var(--muted);word-break:break-all}
.modal-box .actions{margin:22px 0 16px}
.modal-box .reward-code{margin-bottom:16px}
.modal-box h3{font-size:26px;margin:22px 0 6px}
body.modal-open{overflow:hidden}
.add-form{display:grid;grid-template-columns:1fr 1fr auto;gap:10px;margin-top:16px;align-items:start}

@media(max-width:900px){body[data-page="beheer"] main{padding-top:30px}}
@media(max-width:640px){
 .panel{padding:20px 16px;border-radius:18px}
 .panel h2{font-size:28px}
 .modal-box{padding:24px 16px 20px}
 .modal-box h2{font-size:30px}
 .col-login{display:none}
 .add-form{grid-template-columns:1fr}
 .stats strong{font-size:38px}
 .stats div{padding:16px}
}

/* ===== beveiligde versie: extra onderdelen ===== */
/* lokvogel tegen bots: onzichtbaar voor mensen */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.login form{display:grid;gap:4px}
.login .field{margin-bottom:10px}
.login .links{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;margin-top:20px;font-size:13px}
.login .links a,.linkbtn{color:var(--muted);background:none;border:0;padding:0;cursor:pointer;text-decoration:underline;font:inherit;font-size:13px}
.login .links a:hover,.linkbtn:hover{color:var(--ink)}
.hintline{margin:2px 0 6px;font-size:12.5px;color:var(--muted)}
.captcha{min-height:0;margin:6px 0}
.account{max-width:460px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:32px 30px}
.account h2{font-size:32px;margin-bottom:14px}
.account .field{margin-bottom:12px}
.tag.wait{background:#f7ecd6;color:#8a5a12}
.warn{margin:12px 0 0;padding:12px 14px;border-radius:6px;font-size:14px;background:#f7ecd6;color:#7a4e0f}
details.logbox{margin:0 0 24px}
details.logbox>summary{cursor:pointer;font:500 28px 'Cormorant Garamond',serif;padding:6px 0}
.logtable td{font-size:13px;padding:8px 10px;white-space:nowrap}
.logtable td.d{white-space:normal;word-break:break-word}
.logtype{font:700 11px 'Karla',sans-serif;letter-spacing:.06em;padding:2px 8px;border-radius:99px;background:var(--accent-soft)}
.logtype.bad{background:#f7e4e0;color:var(--danger)}
/* testpostvak (enkel in testmodus) */
.pwmeter{height:5px;border-radius:9px;background:var(--accent-soft);overflow:hidden;margin:2px 0 4px}
.pwmeter i{display:block;height:100%;width:0;background:var(--danger);transition:width .2s,background .2s}


/* ===== klantenkaart in bankkaartformaat (85,6 x 54 mm), schaalt mee met elk scherm ===== */
.lc-wrap{container-type:inline-size;width:100%;max-width:560px}
.loyalty-card{position:relative;width:100%;aspect-ratio:85.6/53.98;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:3cqw;padding:5cqw 5.4cqw 4.4cqw;border-radius:4.2cqw;background:var(--deep);color:#f8f3eb;box-shadow:0 3cqw 6cqw -3cqw rgba(45,37,33,.55);overflow:hidden}
.loyalty-card:before{content:"";position:absolute;inset:1.4cqw;border:1px solid rgba(196,162,131,.3);border-radius:3cqw;pointer-events:none}
.lc-top{display:flex;align-items:center;gap:2.4cqw;min-width:0}
.lc-top img{width:8cqw;height:8cqw;flex:none;border-radius:50%;background:#f8f3eb;padding:.35cqw}
.lc-brand{font:500 max(12px,4.2cqw)/1 'Cormorant Garamond',serif;min-width:0}
.lc-brand small{display:block;font:400 max(8px,2.1cqw) 'Karla',sans-serif;color:var(--accent);margin-top:.6cqw}
.lc-nr{margin-left:auto;white-space:nowrap;font:500 max(11px,3.6cqw) 'Cormorant Garamond',serif;color:var(--accent)}
.spots-box{container-type:size;min-height:0;min-width:0}
.spots{--cols:3;--rows:2;--g:1.6cqw;--s:min(calc((100cqw - (var(--cols) - 1) * var(--g)) / var(--cols)),calc((100cqh - (var(--rows) - 1) * var(--g)) / var(--rows)));list-style:none;margin:0;padding:0;display:grid;gap:var(--g);grid-template-columns:repeat(var(--cols),var(--s));grid-auto-rows:var(--s);justify-content:center;align-content:center;width:100%;height:100%}
.spot{border-radius:50%;display:grid;place-items:center;min-width:0;min-height:0;border:max(1px,.25cqw) dashed rgba(196,162,131,.5)}
.spot.filled{border:0;background:#f8f3eb;box-shadow:inset 0 0 0 calc(var(--s) * .05) #f8f3eb,inset 0 0 0 calc(var(--s) * .065) rgba(51,43,39,.18);transform:rotate(var(--tilt,0deg))}
.spot.filled img{width:74%;height:74%;object-fit:contain}
.spot.new{animation:press .6s cubic-bezier(.2,1.3,.4,1) both}
.spot.reward{border:max(1px,.3cqw) solid var(--accent);color:var(--accent);text-align:center;line-height:1}
.spot.reward b{display:block;font:600 calc(var(--s) * .34) 'Cormorant Garamond',serif}
.spot.reward span{display:block;font-size:max(7px,calc(var(--s) * .16));margin-top:.25em}
.spot.reward.open{background:var(--accent);color:var(--deep);border-color:var(--accent)}
.lc-foot{display:flex;align-items:baseline;justify-content:space-between;gap:2cqw;min-width:0;padding-top:2.2cqw;border-top:1px solid rgba(196,162,131,.25);font-size:max(9px,2.7cqw);color:rgba(248,243,235,.78)}
.lc-foot h2{margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:500 max(13px,4cqw)/1.1 'Cormorant Garamond',serif;color:#f8f3eb}
.lc-foot span{white-space:nowrap;flex:none}
.card-layout>div{min-width:0}
