/* ==========================================================================
   Lettertypen — bewust zelf gehost in plaats van via Google Fonts.
   Een <link> naar fonts.googleapis.com stuurt het IP-adres van elke bezoeker naar
   Google vóór er iets geladen is; ons eigen cookiebeleid belooft juist dat er geen
   derde partij meekijkt. Lokaal is bovendien sneller (geen extra DNS + verbinding)
   en het werkt door als de keuken even geen internet naar buiten heeft.
   Bestanden komen uit de officiële @fontsource-pakketten (SIL Open Font License).
   ========================================================================== */
@font-face{
  font-family:'Anton'; font-style:normal; font-weight:400; font-display:swap;
  src:url('../fonts/anton-latin-400-normal.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Anton'; font-style:normal; font-weight:400; font-display:swap;
  src:url('../fonts/anton-latin-ext-400-normal.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:400; font-display:swap;
  src:url('../fonts/archivo-latin-400-normal.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:400; font-display:swap;
  src:url('../fonts/archivo-latin-ext-400-normal.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:500; font-display:swap;
  src:url('../fonts/archivo-latin-500-normal.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:500; font-display:swap;
  src:url('../fonts/archivo-latin-ext-500-normal.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:600; font-display:swap;
  src:url('../fonts/archivo-latin-600-normal.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:600; font-display:swap;
  src:url('../fonts/archivo-latin-ext-600-normal.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:700; font-display:swap;
  src:url('../fonts/archivo-latin-700-normal.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:700; font-display:swap;
  src:url('../fonts/archivo-latin-ext-700-normal.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:800; font-display:swap;
  src:url('../fonts/archivo-latin-800-normal.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:800; font-display:swap;
  src:url('../fonts/archivo-latin-ext-800-normal.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* ==========================================================================
   Snackhouse & Catering LOBO — Oudorp
   Huisstijl: Lobo-blauw #00B0F0 · ink · warm papierwit
   Typografie: Anton (display) + Archivo (tekst)
   ========================================================================== */

:root{
  --brand:      #00B0F0;
  --brand-deep: #0090CE;
  --brand-ink:  #007AB0;   /* leesbaar blauw op licht */
  --sky:        #55CFFF;   /* fel blauw op donker */
  --ink:        #0B151A;
  --ink-2:      #10222B;
  --ink-3:      #16303C;
  --paper:      #F7F5F0;
  --card:       #FFFFFF;
  --amber:      #F5A73B;
  --green:      #23BD6C;
  --red:        #E4573D;
  --text:       #22333C;
  --muted:      #5C6E77;
  --line:       rgba(11,21,26,.12);
  --line-dark:  rgba(255,255,255,.14);

  --font-display:'Anton','Arial Narrow',Impact,'Helvetica Neue',sans-serif;
  --font-body:'Archivo','Helvetica Neue',Arial,system-ui,sans-serif;

  --fs-hero: clamp(2.45rem, 8.2vw, 6.4rem);
  --fs-h2:   clamp(2rem, 4.6vw, 3.4rem);
  --fs-h3:   clamp(1.35rem, 2.6vw, 1.9rem);
  --fs-lead: clamp(1.06rem, 1.6vw, 1.25rem);

  --r-lg: 22px;
  --r-md: 16px;
  --r-sm: 10px;

  --shadow-lg: 0 24px 60px -18px rgba(11,21,26,.28);
  --shadow-md: 0 14px 34px -14px rgba(11,21,26,.22);
  --shadow-brand: 0 14px 34px -12px rgba(0,176,240,.45);

  --container: 1180px;
  --header-h: 78px;
}

/* ---------- basis ---------- */
*,*::before,*::after{ box-sizing:border-box; }
html{ scroll-behavior:smooth; -webkit-text-size-adjust:100%; }
@media (prefers-reduced-motion:reduce){ html{ scroll-behavior:auto; } }
body{
  margin:0; font-family:var(--font-body); color:var(--text);
  background:var(--paper); font-size:16.5px; line-height:1.65;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
}
img,video{ max-width:100%; display:block; }
a{ color:var(--brand-ink); text-decoration:none; }
a:hover{ text-decoration:none; }
button{ font-family:inherit; cursor:pointer; }
input,select,textarea{ font-family:inherit; font-size:1rem; }
::selection{ background:var(--brand); color:#04222E; }
:focus-visible{ outline:3px solid var(--brand); outline-offset:2px; border-radius:4px; }

h1,h2,h3,h4{ margin:0 0 .5em; line-height:1.06; color:var(--ink); }
.display{
  font-family:var(--font-display); font-weight:400; text-transform:uppercase;
  letter-spacing:.015em;
}
h2.display{ font-size:var(--fs-h2); }
h3.display{ font-size:var(--fs-h3); letter-spacing:.02em; }
p{ margin:0 0 1em; }
.lead{ font-size:var(--fs-lead); color:var(--muted); max-width:46em; }

.container{ width:min(var(--container), 100% - 2.6rem); margin-inline:auto; }
.section{ padding-block: clamp(4rem, 9vw, 7.5rem); }
.section--tight{ padding-block: clamp(2.6rem, 6vw, 4.6rem); }

.overline{
  display:inline-flex; align-items:center; gap:.6rem;
  font-weight:800; font-size:.78rem; letter-spacing:.22em; text-transform:uppercase;
  color:var(--brand-ink); margin-bottom:1rem;
}
.overline::before{ content:""; width:26px; height:3px; background:var(--brand); border-radius:2px; }
.dark .overline{ color:var(--sky); }

.section-head{ max-width:720px; margin-bottom: clamp(1.8rem, 4vw, 3rem); }
.section-head--row{
  max-width:none; display:flex; align-items:flex-end; justify-content:space-between;
  gap:1.5rem; flex-wrap:wrap;
}

/* ---------- knoppen ---------- */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:.55rem;
  font-weight:800; font-size:1rem; letter-spacing:.01em;
  padding:.95rem 1.7rem; border-radius:999px; border:2px solid transparent;
  transition:transform .18s ease, box-shadow .18s ease, background .18s ease, color .18s ease;
  white-space:nowrap;
}
.btn:active{ transform:translateY(1px) scale(.99); }
.btn--primary{ background:var(--brand); color:#04222E; box-shadow:var(--shadow-brand); }
.btn--primary:hover{ background:var(--brand-deep); color:#03222E; transform:translateY(-2px); }
.btn--ghost{ border-color:rgba(255,255,255,.55); color:#fff; background:rgba(255,255,255,.06); backdrop-filter:blur(6px); }
.btn--ghost:hover{ border-color:#fff; background:rgba(255,255,255,.14); transform:translateY(-2px); }
.btn--dark{ background:var(--ink); color:#fff; }
.btn--dark:hover{ background:var(--ink-3); transform:translateY(-2px); }
.btn--outline{ border-color:var(--ink); color:var(--ink); background:transparent; }
.btn--outline:hover{ background:var(--ink); color:#fff; transform:translateY(-2px); }
.btn--sm{ padding:.6rem 1.15rem; font-size:.92rem; }
.btn--lg{ padding:1.1rem 2.2rem; font-size:1.08rem; }
.btn .arr{ transition:transform .18s ease; }
.btn:hover .arr{ transform:translateX(3px); }

/* ---------- header ---------- */
.site-header{
  position:fixed; inset:0 0 auto 0; z-index:60; height:var(--header-h);
  display:flex; align-items:center;
  transition:background .25s ease, box-shadow .25s ease, height .25s ease;
}
.site-header .container{ display:flex; align-items:center; gap:1.6rem;
  /* De balk mag de volle schermbreedte gebruiken. Binnen de normale paginabreedte
     (1180px) werd het op de bestelpagina te krap — daar staan het telefoonnummer én de
     inlogknoppen samen in de balk — en gingen onderdelen onder elkaar stapelen. */
  width:min(1760px, 100% - 2.6rem); flex-wrap:nowrap; }
@media (max-width:1250px){
  /* net onder de volle breedte: iets compactere tussenruimtes, zodat alles op één regel
     blijft tot het mobiele menu het overneemt */
  .nav-desktop{ gap:1.1rem; }
  .site-header .container{ gap:1rem; }
  .header-account{ margin-right:.2rem; }
}
.site-header.is-solid,
.site-header.is-open{
  background:rgba(9,18,23,.86); backdrop-filter:blur(14px);
  box-shadow:0 10px 30px -18px rgba(0,0,0,.55); height:68px;
}
body.page-light .site-header:not(.is-solid):not(.is-open){ background:transparent; }

.brand{ display:flex; flex-direction:column; line-height:1; gap:.18rem; margin-right:auto; }
.brand .brand-top{
  font-size:.6rem; font-weight:800; letter-spacing:.34em; text-transform:uppercase; color:#cfe9f4;
  white-space:nowrap;
}
.brand .brand-name{
  font-family:var(--font-display); font-size:1.9rem; color:#fff; letter-spacing:.05em; text-transform:uppercase;
}
.brand .brand-name span{ color:var(--brand); }

.nav-desktop{ display:flex; align-items:center; gap:1.9rem; }
.nav-desktop a{ white-space:nowrap; } /* "Over ons"/"Werken bij" mogen nooit intern omklappen */
.nav-desktop a{
  color:#E7F0F4; font-weight:700; font-size:.99rem; position:relative; padding:.4rem 0;
}
.nav-desktop a::after{
  content:""; position:absolute; left:0; right:100%; bottom:0; height:2.5px;
  background:var(--brand); border-radius:2px; transition:right .22s ease;
}
.nav-desktop a:hover::after, .nav-desktop a[aria-current="page"]::after{ right:0; }
.nav-desktop a[aria-current="page"]{ color:#fff; }
.header-cta{ margin-left:.4rem; }
/* inloggen / Mijn LOBO + Uitloggen rechtsboven — main.js zet ze op elke pagina neer */
.header-account{ display:flex; align-items:center; gap:.55rem; margin-left:auto; margin-right:.6rem; }
.header-cta{ margin-left:0; }
.header-account-link{ border-color:rgba(255,255,255,.45); color:#fff; white-space:nowrap; }
.header-account-link:hover{ border-color:var(--brand); color:var(--brand); }
.header-uitloggen{ background:none; border:0; color:#C9D9E0; font:inherit; font-size:.85rem;
  font-weight:700; cursor:pointer; padding:.3rem .2rem; white-space:nowrap; }
.header-uitloggen:hover{ color:#fff; text-decoration:underline; }
@media (max-width:760px){
  /* op een telefoon staat het in het uitklapmenu; rechtsboven wordt het te krap */
  .header-account{ display:none; }
}

.nav-toggle{
  display:none; background:none; border:0; width:46px; height:46px; border-radius:12px;
  flex-direction:column; align-items:center; justify-content:center; gap:5.5px;
}
.nav-toggle span{ width:24px; height:2.6px; background:#fff; border-radius:2px; transition:transform .25s ease, opacity .2s ease; }
.nav-toggle[aria-expanded="true"] span:nth-child(1){ transform:translateY(8.1px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] span:nth-child(2){ opacity:0; }
.nav-toggle[aria-expanded="true"] span:nth-child(3){ transform:translateY(-8.1px) rotate(-45deg); }

.nav-mobile{
  position:fixed; top:68px; left:0; right:0; z-index:59; padding:1rem 1.3rem 1.5rem;
  background:rgba(9,18,23,.97); backdrop-filter:blur(16px);
  display:none; flex-direction:column; gap:.2rem;
  border-bottom:1px solid var(--line-dark);
}
.nav-mobile.is-open{ display:flex; }
.nav-mobile a{
  color:#EAF3F7; font-weight:800; font-size:1.25rem; padding:.85rem .4rem;
  border-bottom:1px solid rgba(255,255,255,.08);
}
.nav-mobile a[aria-current="page"]{ color:var(--sky); }
.nav-mobile .btn{ margin-top:1rem; }

@media (max-width: 900px){
  .nav-desktop{ display:none; }
  .nav-toggle{ display:flex; }
  .brand .brand-name{ font-size:1.5rem; }
  .brand .brand-top{ font-size:.5rem; letter-spacing:.26em; }
  .site-header .container{ gap:.9rem; }
  /* Het merk is het rekbare deel van de balk: knop en menuknop houden hun maat, en als
     het ondanks alles tóch te smal wordt, kapt "Snackhouse & Catering" netjes af met …
     in plaats van hard onder de knop te verdwijnen (Safari) of de menuknop van het
     scherm te duwen (Chrome). */
  .brand, .brand-text{ min-width:0; }
  .brand .brand-top{ overflow:hidden; text-overflow:ellipsis; }
  .header-cta, .nav-toggle{ flex-shrink:0; }
}
@media (max-width: 600px){
  /* smalle telefoons: alles een maat kleiner zodat merk + knop + menuknop écht passen */
  .site-header .container{ gap:.6rem; }
  .brand{ gap:.55rem; }
  .brand-badge{ width:34px; height:34px; }
  .brand .brand-name{ font-size:1.3rem; }
  .brand .brand-top{ font-size:.44rem; letter-spacing:.15em; }
  .header-cta.btn--sm{ padding:.5rem .7rem; font-size:.8rem; }
}
@media (max-width: 400px){
  /* de smalste toestellen — óók met het telefoonnummer als knop (bestelpagina) moet
     "Snackhouse & Catering" er nog helemaal op passen */
  .brand .brand-top{ font-size:.42rem; letter-spacing:.1em; }
}
@media (max-width: 340px){
  /* stokoude minitelefoons: liever alleen een strak LOBO dan een half afgekapte regel */
  .brand .brand-top{ display:none; }
}

/* ---------- hero (home) ---------- */
.hero{
  position:relative; min-height:min(100vh, 900px); min-height:min(100svh, 900px);
  display:flex; align-items:flex-end; color:#fff; overflow:hidden; background:var(--ink);
}
.hero-media{ position:absolute; inset:0; }
.hero-media video, .hero-media .hero-fallback{
  position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
}
.hero.no-video video{ display:none; }
.hero-fallback{ display:none; }
.hero.no-video .hero-fallback{ display:block; animation:kenburns 26s ease-in-out infinite alternate; }
@keyframes kenburns{
  from{ transform:scale(1.02) translate(0,0); }
  to{ transform:scale(1.14) translate(-1.6%, -2.4%); }
}
@media (prefers-reduced-motion:reduce){ .hero.no-video .hero-fallback{ animation:none; } }
.hero-shade{ position:absolute; inset:0;
  background:linear-gradient(to bottom, rgba(6,14,18,.55) 0%, rgba(6,14,18,.18) 38%, rgba(6,14,18,.34) 62%, rgba(6,14,18,.93) 100%);
}
.hero-grain{ position:absolute; inset:0; opacity:.5; mix-blend-mode:overlay; pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .05 0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");
}
.hero-inner{ position:relative; z-index:2; width:min(var(--container),100% - 2.6rem); margin-inline:auto;
  padding:9.5rem 0 4.2rem; }
.hero-status{
  display:inline-flex; align-items:center; gap:.55rem; font-weight:700; font-size:.92rem;
  background:rgba(9,18,23,.55); border:1px solid rgba(255,255,255,.22); color:#EAF6FB;
  padding:.5rem 1.05rem; border-radius:999px; backdrop-filter:blur(8px); margin-bottom:1.4rem;
}
.hero-status .dot{ width:9px; height:9px; border-radius:50%; background:var(--green); box-shadow:0 0 0 4px rgba(35,189,108,.25); }
.hero-status.is-closed .dot{ background:var(--red); box-shadow:0 0 0 4px rgba(228,87,61,.22); }
/* v227: onder de bestelstatus — in de zaak kun je bestellen tot sluitingstijd */
.hero-locatie{ margin:-.75rem 0 1.4rem .35rem; font-size:.92rem; line-height:1.45; color:rgba(255,255,255,.8); max-width:62ch; }
.hero-locatie[hidden]{ display:none; }
.hero h1{
  font-family:var(--font-display); font-weight:400; text-transform:uppercase;
  font-size:var(--fs-hero); line-height:.96; letter-spacing:.012em; color:#fff;
  margin:0 0 1.1rem; max-width:11em; text-wrap:balance;
}
.hero h1 .accent{ color:var(--brand); }
.hero .hero-sub{ font-size:var(--fs-lead); color:#D6E4EA; max-width:34em; margin-bottom:2rem; }
.hero-actions{ display:flex; gap:.9rem; flex-wrap:wrap; align-items:center; }
.hero-foot{
  position:relative; z-index:2; border-top:1px solid rgba(255,255,255,.16);
  margin-top:3.2rem; padding-top:1.15rem; padding-bottom:1.3rem;
  display:flex; gap:2.4rem; flex-wrap:wrap; font-size:.95rem; color:#BFD3DB;
}
.hero-foot b{ color:#fff; font-weight:800; }
.hero-foot .sep{ opacity:.4; }
.scroll-cue{
  position:absolute; right:2rem; bottom:2rem; z-index:3; width:44px; height:70px;
  border:2px solid rgba(255,255,255,.4); border-radius:999px; display:flex; justify-content:center;
}
.scroll-cue::after{ content:""; width:5px; height:12px; border-radius:3px; background:#fff; margin-top:12px;
  animation:cue 1.8s ease-in-out infinite; }
@keyframes cue{ 0%{ transform:translateY(0); opacity:1;} 70%{ transform:translateY(22px); opacity:0;} 100%{opacity:0;} }
@media (max-width:700px){ .scroll-cue{ display:none; } .hero-inner{ padding-top:8rem; } }

/* ---------- marquee ---------- */
.marquee{ background:var(--ink); color:#fff; overflow:hidden; padding:.95rem 0;
  border-top:1px solid rgba(255,255,255,.07); }
.marquee-track{ display:flex; gap:3.2rem; width:max-content; animation:marquee 30s linear infinite; }
.marquee span{ display:flex; align-items:center; gap:3.2rem; white-space:nowrap;
  font-family:var(--font-display); text-transform:uppercase; letter-spacing:.09em; font-size:1.02rem; color:#DCEBF2; }
.marquee i{ font-style:normal; color:var(--brand); }
@keyframes marquee{ to{ transform:translateX(-50%); } }
@media (prefers-reduced-motion:reduce){ .marquee-track{ animation:none; } }

/* ---------- menu highlight cards ---------- */
.cards-grid{ display:grid; gap:1.4rem; grid-template-columns:repeat(12,1fr); }
.menu-card{
  grid-column:span 3; position:relative; border-radius:var(--r-lg); overflow:hidden;
  background:var(--ink-2); color:#fff; min-height:390px; display:flex; align-items:flex-end;
  box-shadow:var(--shadow-md); transform:translateZ(0);
}
.menu-card img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
  transition:transform .6s cubic-bezier(.2,.7,.2,1); }
.menu-card:hover img{ transform:scale(1.06); }
.menu-card::after{ content:""; position:absolute; inset:0;
  background:linear-gradient(to top, rgba(6,14,18,.92) 0%, rgba(6,14,18,.25) 55%, rgba(6,14,18,.08) 100%); }
.menu-card--tile{ background:linear-gradient(150deg, var(--ink-2), var(--ink-3)); }
.menu-card--tile::after{ background:none; }
.menu-card--tile .tile-mark{
  position:absolute; inset:auto -8% -14% auto; font-family:var(--font-display); font-size:11rem; line-height:1;
  color:rgba(0,176,240,.16); text-transform:uppercase; pointer-events:none; user-select:none;
}
.menu-card--brand{ background:linear-gradient(150deg, #00A5E2, #0083C8); }
.menu-card--brand .tile-mark{ color:rgba(255,255,255,.18); }
.menu-card--brand .card-body .card-note, .menu-card--brand .card-price{ color:#E8F8FF; }
.card-body{ position:relative; z-index:2; padding:1.5rem 1.5rem 1.4rem; width:100%; }
.card-note{ font-size:.85rem; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:#A9DFF5; margin-bottom:.35rem; }
.menu-card h3{ font-family:var(--font-display); font-weight:400; text-transform:uppercase; font-size:1.65rem; color:#fff; margin:0 0 .3rem; letter-spacing:.03em; }
.card-price{ font-weight:800; color:#CBE9F6; font-size:.98rem; }
.card-go{
  position:absolute; top:1.1rem; right:1.1rem; z-index:2; width:44px; height:44px; border-radius:50%;
  background:rgba(255,255,255,.14); backdrop-filter:blur(6px); border:1px solid rgba(255,255,255,.25);
  display:flex; align-items:center; justify-content:center; color:#fff; font-size:1.15rem;
  transition:background .2s ease, transform .2s ease;
}
.menu-card:hover .card-go{ background:var(--brand); color:#04222E; transform:rotate(-45deg); }
@media (max-width:1020px){ .menu-card{ grid-column:span 6; min-height:330px; } }
@media (max-width:560px){ .menu-card{ grid-column:span 12; min-height:300px; } }

/* ---------- split / story ---------- */
.split{ display:grid; grid-template-columns:1.05fr .95fr; gap:clamp(2rem,5vw,4.5rem); align-items:center; }
.split--rev{ direction:rtl; } .split--rev > *{ direction:ltr; }
@media (max-width:900px){ .split, .split--rev{ grid-template-columns:1fr; direction:ltr; } }
.photo-frame{ position:relative; border-radius:var(--r-lg); overflow:hidden; box-shadow:var(--shadow-lg); }
.photo-frame img{ width:100%; height:100%; object-fit:cover; }
.photo-frame .photo-tag{
  position:absolute; left:1.1rem; bottom:1.1rem; background:rgba(9,18,23,.82); color:#fff;
  backdrop-filter:blur(8px); padding:.55rem 1rem; border-radius:999px; font-weight:700; font-size:.88rem;
  display:flex; align-items:center; gap:.5rem; border:1px solid rgba(255,255,255,.18);
}
.photo-frame .photo-tag i{ font-style:normal; color:var(--brand); }
.badge-1987{
  position:absolute; top:1.1rem; right:1.1rem; background:var(--brand); color:#04222E;
  font-family:var(--font-display); font-size:1.05rem; letter-spacing:.06em; padding:.5rem .95rem;
  border-radius:12px; box-shadow:var(--shadow-brand); text-transform:uppercase;
}
.stat-row{ display:flex; gap:1.8rem 2.2rem; flex-wrap:wrap; margin-top:2rem; }
.stat b{ display:block; font-family:var(--font-display); font-size:2.1rem; color:var(--ink); letter-spacing:.02em; }
.stat span{ color:var(--muted); font-size:.95rem; font-weight:600; }

/* ---------- donkere banden ---------- */
.dark{ background:var(--ink); color:#C9D9E0; }
.dark h2,.dark h3{ color:#fff; }
.dark .lead{ color:#9FB4BD; }
.band-pattern{ position:relative; overflow:hidden; }
.band-pattern::before{
  content:""; position:absolute; inset:0; opacity:.55; pointer-events:none;
  background:
    radial-gradient(52rem 30rem at 110% -10%, rgba(0,176,240,.16), transparent 60%),
    radial-gradient(40rem 26rem at -12% 118%, rgba(0,176,240,.10), transparent 60%);
}
.band-pattern > .container{ position:relative; z-index:1; }

/* catering feature list */
.feature-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:1.3rem; margin-top:2.4rem; }
@media (max-width:900px){ .feature-grid{ grid-template-columns:1fr; } }
.feature{
  background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.11);
  border-radius:var(--r-md); padding:1.5rem 1.4rem; backdrop-filter:blur(4px);
}
.feature .f-ico{
  width:46px; height:46px; border-radius:13px; background:rgba(0,176,240,.16); color:var(--sky);
  display:flex; align-items:center; justify-content:center; font-size:1.25rem; margin-bottom:1rem;
}
.feature h3{ font-size:1.12rem; font-weight:800; font-family:var(--font-body); text-transform:none; letter-spacing:0; margin-bottom:.4rem; }
.feature p{ color:#9FB4BD; font-size:.97rem; margin:0; }

/* ---------- openingstijden / bezoek ---------- */
.visit-grid{ display:grid; grid-template-columns:1.1fr .9fr; gap:clamp(2rem,4vw,3.6rem); align-items:start; }
@media (max-width:900px){ .visit-grid{ grid-template-columns:1fr; } }
.hours-card{
  background:var(--card); border:1px solid var(--line); border-radius:var(--r-lg);
  padding:1.9rem 1.9rem 1.5rem; box-shadow:var(--shadow-md);
}
.hours-card table{ width:100%; border-collapse:collapse; font-size:1rem; }
.hours-card th{ font-size:.72rem; letter-spacing:.08em; text-transform:uppercase; color:var(--muted);
  text-align:right; font-weight:800; padding:0 0 .5rem; }
.hours-card th:first-child{ text-align:left; }
.hours-card td{ padding:.62rem 0; border-bottom:1px dashed var(--line); }
.hours-card tr:last-child td{ border-bottom:0; }
.hours-card td:nth-child(2){ text-align:right; font-weight:700; color:var(--ink); font-variant-numeric:tabular-nums; }
.hours-card td:last-child{ text-align:right; font-weight:700; color:var(--ink); font-variant-numeric:tabular-nums; padding-left:1.2rem; }
.hours-card td .geen{ color:var(--muted); font-weight:600; }
.hours-card tr.is-today td{ color:var(--brand-ink); font-weight:800; }
.hours-note{ font-size:.9rem; color:var(--muted); margin-top:.9rem; }
.status-chip{
  display:inline-flex; align-items:center; gap:.5rem; font-weight:800; font-size:.92rem;
  padding:.45rem 1rem; border-radius:999px; background:rgba(35,189,108,.12); color:#157A47; margin-bottom:1.1rem;
}
.status-chip .dot{ width:8px; height:8px; border-radius:50%; background:var(--green); }
.status-chip.is-closed{ background:rgba(228,87,61,.1); color:#A93A26; }
.status-chip.is-closed .dot{ background:var(--red); }

/* ---------- footer ---------- */
.site-footer{ background:#081015; color:#9FB4BD; padding:4.2rem 0 2rem; }
.footer-grid{ display:grid; grid-template-columns:2fr 1fr 1fr 1.4fr; gap:2.4rem; }
@media (max-width:950px){ .footer-grid{ grid-template-columns:1fr 1fr; } }
@media (max-width:560px){ .footer-grid{ grid-template-columns:1fr; } }
.site-footer .brand-name{ font-size:2.1rem; }
.footer-tag{ margin:.9rem 0 0; max-width:26em; font-size:.97rem; }
.footer-award{
  display:inline-flex; align-items:center; gap:.6rem; margin-top:1.2rem; padding:.55rem 1rem;
  border:1px solid rgba(255,255,255,.14); border-radius:999px; font-size:.85rem; color:#CFE2EA;
}
.footer-award i{ font-style:normal; color:var(--amber); }
.site-footer h4{ color:#fff; font-size:.85rem; letter-spacing:.18em; text-transform:uppercase; margin-bottom:1.1rem; }
.footer-links{ list-style:none; padding:0; margin:0; display:flex; flex-direction:column; gap:.55rem; }
.footer-links a{ color:#B9CCD5; font-weight:600; }
.footer-links a:hover{ color:var(--sky); }
.footer-contact{ font-style:normal; line-height:1.9; }
.footer-contact a{ color:#DAE9F0; font-weight:700; }
.footer-bottom{
  margin-top:3rem; padding-top:1.4rem; border-top:1px solid rgba(255,255,255,.09);
  display:flex; justify-content:space-between; gap:1rem; flex-wrap:wrap; font-size:.85rem; color:#6E838D;
}
.footer-bottom a{ color:#9FB4BD; }
.mascot-chip{ width:74px; height:74px; border-radius:50%; background:#fff; padding:8px; margin-bottom:1rem; }
.mascot-chip img{ width:100%; height:100%; object-fit:contain; }

/* ---------- pagina-hero (subpagina's) ---------- */
.page-hero{
  position:relative; background:var(--ink); color:#fff;
  padding: calc(var(--header-h) + clamp(3rem,7vw,5.5rem)) 0 clamp(2.6rem,5vw,4rem);
  overflow:hidden;
}
.page-hero::before{
  content:""; position:absolute; inset:0;
  background:
    radial-gradient(46rem 26rem at 108% -20%, rgba(0,176,240,.22), transparent 60%),
    radial-gradient(30rem 20rem at -8% 120%, rgba(0,176,240,.12), transparent 60%);
}
.page-hero .container{ position:relative; }
.page-hero h1{
  font-family:var(--font-display); font-weight:400; text-transform:uppercase; letter-spacing:.015em;
  font-size:clamp(2.6rem,6vw,4.6rem); color:#fff; margin:0 0 .35em; line-height:.98;
}
.page-hero .lead{ color:#AFC4CD; }

/* v126 — de kop van de bestelpagina.
   Op de andere pagina's mag de kop ruim zijn; daar kom je om te lezen. Hier kom je om
   te kiezen, en stond het eerste product 1034 px naar beneden — anderhalf scherm op
   een iPhone SE. Alles staat er nog, maar strakker, en de voorwaarden zitten op een
   telefoon achter één regel. */
/* ook op een breed scherm hoeft deze kop niet zo hoog als die van "Over ons" */
.page-hero--bestellen{ padding: calc(var(--header-h) + clamp(1.6rem,3.4vw,2.8rem)) 0 clamp(1.6rem,2.6vw,2.2rem); }
.page-hero--bestellen h1{ font-size:clamp(2.4rem,4.6vw,3.4rem); }
.hero-voorwaarden{ margin:.9rem 0 0; font-size:.92rem; color:#AFC4CD; }
.hero-voorwaarden > p{ margin:.5rem 0 0; }
.hero-voorwaarden > summary{
  cursor:pointer; font-weight:700; color:#fff; list-style:none;
  display:inline-flex; align-items:center; gap:.4rem; padding:.2rem 0;
}
.hero-voorwaarden > summary::-webkit-details-marker{ display:none; }
.hero-voorwaarden > summary::after{
  content:""; width:.5rem; height:.5rem; border-right:2px solid currentColor;
  border-bottom:2px solid currentColor; transform:rotate(45deg) translate(-2px,-2px);
  transition:transform .18s;
}
.hero-voorwaarden[open] > summary::after{ transform:rotate(-135deg) translate(-2px,-2px); }

@media (min-width:761px){
  /* breed genoeg: geen open/dicht-spelletje, gewoon tonen */
  .hero-voorwaarden > summary{ display:none; }
  .hero-voorwaarden > p{ margin-top:0; }
}
@media (max-width:760px){
  .page-hero--bestellen{
    padding: calc(var(--header-h) + 1.1rem) 0 1.4rem;
  }
  .page-hero--bestellen h1{ font-size:clamp(1.9rem,8.5vw,2.7rem); margin-bottom:.25em; }
  /* de tussenzin herhaalt wat de titel al zegt; op een klein scherm kost hij drie
     regels die je van de kaart afhouden. Hij blijft in de HTML staan voor zoekmachines
     en schermlezers. */
  .page-hero--bestellen .lead{
    position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap;
  }
  .page-hero--bestellen .hero-status{ margin-top:.9rem; }
  .page-hero--bestellen .pdf-links{ margin-top:.8rem; }
}
.crumbs{ font-size:.88rem; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:#7FD6F7; margin-bottom:1.2rem; }
.crumbs a{ color:#7FD6F7; opacity:.75; } .crumbs a:hover{ opacity:1; }

/* ---------- bestellen ---------- */
.order-layout{ display:grid; grid-template-columns:minmax(0,1fr) 384px; gap:clamp(1.6rem,3vw,2.6rem); align-items:start; }
/* minmax(0,1fr) i.p.v. 1fr: een kale 1fr mag nooit smaller dan zijn inhoud, waardoor
   één lange menuregel de hele kolom breder maakte dan het scherm (zijwaarts scrollen
   op telefoons). Met minmax(0,…) krimpt de kolom netjes mee. */
@media (max-width:1080px){ .order-layout{ grid-template-columns:minmax(0,1fr); } }

.cat-bar{
  position:sticky; top:68px; z-index:40; background:rgba(247,245,240,.92); backdrop-filter:blur(12px);
  padding:.8rem 0; border-bottom:1px solid var(--line); margin-bottom:1.6rem;
}
.cat-bar-inner{ display:flex; gap:.55rem; overflow-x:auto; scrollbar-width:none; padding-bottom:2px; }
.cat-bar-inner::-webkit-scrollbar{ display:none; }
/* v105: bladeren door de categorieën met een muis (zie bestellen.js). De pijltjes en de
   vervaging verschijnen alleen als er écht meer is dan er past, en alleen op een apparaat
   met een muis — op touch is vegen vanzelfsprekend. */
.cat-schuif{ position:relative; }
.cat-pijl{ display:none; }
@media (hover:hover) and (pointer:fine){
  .cat-schuif.kan-links::before,
  .cat-schuif.kan-rechts::after{
    content:""; position:absolute; top:0; bottom:0; width:52px; pointer-events:none; z-index:1;
  }
  .cat-schuif.kan-links::before{ left:0; background:linear-gradient(90deg, var(--paper, #F7F5F0), rgba(247,245,240,0)); }
  .cat-schuif.kan-rechts::after{ right:0; background:linear-gradient(270deg, var(--paper, #F7F5F0), rgba(247,245,240,0)); }
  .cat-schuif.kan-links .cat-pijl--links,
  .cat-schuif.kan-rechts .cat-pijl--rechts{ display:grid; }
  .cat-pijl{
    position:absolute; top:50%; transform:translateY(-50%); z-index:2;
    place-items:center; width:30px; height:30px; padding:0; border-radius:50%;
    border:1.5px solid var(--line); background:#fff; color:var(--ink);
    font-size:1.15rem; line-height:1; cursor:pointer; box-shadow:0 2px 10px rgba(11,21,26,.16);
  }
  .cat-pijl:hover{ background:var(--ink); color:#fff; border-color:var(--ink); }
  .cat-pijl:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; }
  .cat-pijl--links{ left:-2px; }
  .cat-pijl--rechts{ right:-2px; }
}
.cat-chip{
  flex:0 0 auto; border:1.5px solid var(--line); background:#fff; color:var(--ink);
  font-weight:700; font-size:.93rem; padding:.5rem 1.05rem; border-radius:999px;
  transition:all .15s ease;
}
.cat-chip:hover{ border-color:var(--brand); color:var(--brand-ink); }
.cat-chip.is-active{ background:var(--ink); border-color:var(--ink); color:#fff; }

.menu-cat{
  /* v126 — waar een categorie moet stoppen als je ernaartoe springt.
     Dit stond op een vaste 150 px, maar de plakkende balk is op een telefoon 222 px
     hoog en op een breed scherm 177 px: klikte je op "Broodjes", dan verdween de kop
     van die categorie voor een deel achter de balk. bestellen.js meet de balk en zet
     --plak-hoogte; de 150 px hieronder is alleen de terugval. */
  scroll-margin-top:calc(var(--plak-hoogte, 150px) + .6rem);
  padding-top:.4rem; margin-bottom:2.6rem;
}
.menu-cat-head{ display:flex; align-items:baseline; gap:1rem; flex-wrap:wrap; margin-bottom:.4rem; }
.menu-cat h2{
  font-family:var(--font-display); font-weight:400; text-transform:uppercase; letter-spacing:.03em;
  font-size:1.75rem; margin:0;
}
.menu-cat .cat-note{ color:var(--muted); font-size:.93rem; font-weight:600; }
.item-list{ display:grid; gap:.7rem; margin-top:1.1rem; }
/* rasterkinderen mogen nooit breder zijn dan de lijst zelf (min-width:auto-valkuil):
   zonder deze regel duwde een productkaart de pagina opzij op telefoons */
.item-list > .order-item{ min-width:0; }
.order-item{
  display:flex; align-items:center; gap:1.1rem; background:var(--card);
  border:1px solid var(--line); border-radius:var(--r-md); padding:1rem 1.15rem;
  transition:border-color .15s ease, box-shadow .15s ease, transform .15s ease;
}
.order-item:hover{ border-color:rgba(0,176,240,.55); box-shadow:0 10px 24px -16px rgba(11,21,26,.25); }
.oi-info{ flex:1; min-width:0; }
.oi-name{ font-weight:800; color:var(--ink); font-size:1.02rem; display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; }
.oi-desc{ color:var(--muted); font-size:.9rem; margin-top:.15rem; }
.oi-price{ font-weight:800; color:var(--ink); font-variant-numeric:tabular-nums; white-space:nowrap; }
.oi-select{ margin-top:.55rem; }
.oi-select select{
  width:100%; max-width:340px; border:1.5px solid var(--line); border-radius:10px; padding:.5rem .7rem;
  background:#fff; font-size:.92rem; font-weight:600; color:var(--ink);
}
.tag{ display:inline-flex; align-items:center; font-size:.68rem; font-weight:800; letter-spacing:.08em;
  text-transform:uppercase; padding:.22rem .55rem; border-radius:6px; }
.tag--pop{ background:rgba(245,167,59,.16); color:#9A6215; }
.tag--vega{ background:rgba(35,189,108,.14); color:#157A47; }
.tag--lobo{ background:rgba(0,176,240,.14); color:var(--brand-ink); }
/* leeftijdsgrens: bewust rood en niet te missen — legitimatie is wettelijk verplicht */
.tag--leeftijd{ background:rgba(200,42,42,.13); color:#A31515; border:1px solid rgba(200,42,42,.28); }
.oi-leeftijd{ font-size:.82rem; font-weight:700; color:#A31515; margin-top:.15rem; display:flex;
              align-items:center; gap:.35rem; }
.oi-leeftijd::before{ content:''; width:.4rem; height:.4rem; border-radius:50%; background:#A31515;
                      flex:0 0 auto; }
.add-btn{
  flex:0 0 auto; width:44px; height:44px; border-radius:50%; border:0; background:var(--ink); color:#fff;
  font-size:1.35rem; font-weight:600; display:flex; align-items:center; justify-content:center;
  transition:background .15s ease, transform .15s ease; line-height:1;
}
.add-btn:hover{ background:var(--brand); color:#04222E; transform:scale(1.07); }
.qty-stepper{ flex:0 0 auto; display:flex; align-items:center; gap:.15rem; background:var(--ink); border-radius:999px; color:#fff; }
.qty-stepper button{ width:38px; height:40px; background:none; border:0; color:#fff; font-size:1.2rem; }
.qty-stepper b{ min-width:22px; text-align:center; font-size:.98rem; }

/* winkelwagen */
/* --cart-top wordt door bestellen.js gemeten: de onderkant van de vaste balk met de
   categorieën, de zoekbalk en (als hij openstaat) het allergenenpaneel. Stond hier eerst
   als vaste 136px, maar die balk is hoger dan dat — daardoor schoof de kop van het
   bestelpaneel eronder. De waarde hieronder is alleen de terugval als het meten (nog)
   niet gebeurd is. */
.cart-panel{
  position:sticky; top:var(--cart-top, 196px); background:var(--card); border:1px solid var(--line);
  border-radius:var(--r-lg); box-shadow:var(--shadow-md); overflow:hidden;
}
.cart-head{ background:var(--ink); color:#fff; padding:1.15rem 1.4rem; display:flex; justify-content:space-between; align-items:center; }
.cart-head h2{ font-family:var(--font-display); font-weight:400; letter-spacing:.05em; text-transform:uppercase; font-size:1.3rem; color:#fff; margin:0; }
.cart-count-chip{ background:var(--brand); color:#04222E; font-weight:800; font-size:.85rem; border-radius:999px; padding:.2rem .7rem; white-space:nowrap; }
.cart-body{ padding:1.2rem 1.4rem; max-height:44vh; overflow:auto; min-height:70px; }
@media (min-width:1081px){ #cart-close{ display:none; } }
.cart-empty{ color:var(--muted); font-size:.95rem; text-align:center; padding:1.4rem 0; }
/* v223: wat bij "opnieuw bestellen" niet terug in de mand kon */
.cart-herhaal-mis{ display:flex; gap:.5rem; align-items:flex-start; margin:0 0 .6rem; padding:.65rem .75rem;
  border:1.5px solid rgba(245,167,59,.6); background:rgba(245,167,59,.12); border-radius:12px; font-size:.88rem; line-height:1.4; color:var(--text); }
.cart-herhaal-mis p{ margin:0; flex:1; min-width:0; }
.cart-herhaal-mis b{ color:var(--ink); }
.cart-herhaal-dicht{ border:0; background:none; color:var(--muted); padding:.3rem; margin:-.2rem -.25rem 0 0; border-radius:8px;
  display:inline-flex; flex:none; cursor:pointer; }
.cart-herhaal-dicht:hover{ color:var(--ink); background:rgba(11,21,26,.08); }
.cart-herhaal-dicht svg{ width:1.05rem; height:1.05rem; }
.cart-line{ display:flex; gap:.8rem; align-items:flex-start; padding:.55rem 0; border-bottom:1px dashed var(--line); font-size:.95rem; }
.cart-line:last-child{ border-bottom:0; }
.cl-qty{ font-weight:800; color:var(--brand-ink); white-space:nowrap; }
/* v230: het aantal in de mand is een knop — tik en typ het aantal */
.cl-qty-knop{ font:inherit; font-weight:800; color:var(--brand-ink); background:transparent;
  border:1px dashed color-mix(in srgb, var(--brand-ink) 35%, transparent); border-radius:.45rem;
  padding:.1rem .35rem; min-height:2rem; cursor:text; }
.cl-qty-knop:hover, .cl-qty-knop:focus-visible{ border-style:solid; }
.cl-qty-invoer{ width:4.6rem; font:inherit; font-weight:800; padding:.25rem .4rem; border-radius:.45rem;
  border:2px solid var(--brand-ink); background:var(--card, #fff); color:var(--text); }
.cl-name{ flex:1; font-weight:600; color:var(--ink); }
.cl-name small{ display:block; color:var(--muted); font-weight:500; }
.cl-price{ font-weight:700; white-space:nowrap; font-variant-numeric:tabular-nums; }
/* sluit- en verwijderkruisjes: klein om te zien, maar met een ruim tikvlak —
   op een telefoon mag een kruisje nooit een precisieklusje zijn */
.cl-x{ border:0; background:none; color:var(--muted); font-size:1rem; padding:.1rem .25rem; min-width:38px; min-height:38px; margin:-.4rem -.35rem; }
.cl-x:hover{ color:var(--red); }
.cart-totals{ padding:1rem 1.4rem; border-top:1px solid var(--line); display:flex; justify-content:space-between; font-weight:800; color:var(--ink); font-size:1.08rem; }
.cart-actions{ padding:0 1.4rem 1.4rem; display:flex; flex-direction:column; gap:.6rem; }
.cart-note{ font-size:.83rem; color:var(--muted); padding:0 1.4rem 1.2rem; margin:0; }

.cart-fab{
  display:none; position:fixed; z-index:55; left:1rem; right:1rem; bottom:1rem;
}
.cart-fab button{
  width:100%; display:flex; justify-content:space-between; align-items:center; gap:1rem;
  background:var(--ink); color:#fff; border:0; border-radius:999px; padding:1.05rem 1.5rem;
  font-size:1.02rem; font-weight:800; box-shadow:var(--shadow-lg);
}
.cart-fab .fab-total{ color:var(--sky); font-variant-numeric:tabular-nums; }
@media (max-width:1080px){
  .cart-panel{ position:fixed; inset:auto 0 0 0; top:auto; z-index:70; border-radius:22px 22px 0 0;
    transform:translateY(105%); transition:transform .3s cubic-bezier(.2,.8,.2,1);
    max-height:92vh; max-height:92dvh; overflow-y:auto; overscroll-behavior:contain; -webkit-overflow-scrolling:touch; }
  .cart-panel.is-open{ transform:translateY(0); }
  /* het hele paneel scrollt als één geheel (kop blijft plakken) — zo wordt de bestellijst
     niet meer platgedrukt door het formulier eronder */
  .cart-head{ position:sticky; top:0; z-index:3; }
  .cart-body{ max-height:none; overflow:visible; }
  .cart-fab.has-items{ display:block; }
  body.cart-open::after{ content:""; position:fixed; inset:0; background:rgba(6,14,18,.55); z-index:60; }
}

/* winkelwagen op desktop: los, eigen scrollbalkje binnen het paneel — nooit de hele
   pagina laten scrollen om bij "Bestelling plaatsen" te komen */
@media (min-width:1081px){
  .cart-panel{ max-height:calc(100vh - var(--cart-top, 196px) - 24px); overflow-y:auto; overflow-x:hidden; }
  .cart-body{ max-height:none; overflow:visible; }
}

/* checkout-velden */
.field{ display:flex; flex-direction:column; gap:.35rem; margin-bottom:.95rem; }
.field label{ font-weight:700; font-size:.88rem; color:var(--ink); }
.field input, .field select, .field textarea{
  border:1.5px solid var(--line); border-radius:12px; padding:.72rem .85rem; background:#fff;
  transition:border-color .15s ease;
}
/* v126 — geen outline als je klikt (rustig), wél als je met Tab langskomt: anders
   loop je een formulier door zonder te zien waar je bent. :not(:focus-visible) doet
   precies dat onderscheid, en staat hier bij de bron zodat geen latere regel het
   ongemerkt terugdraait. */
.field input:focus, .field select:focus, .field textarea:focus{ border-color:var(--brand); }
.field input:focus:not(:focus-visible), .field select:focus:not(:focus-visible),
.field textarea:focus:not(:focus-visible){ outline:none; }
/* selects zijn van nature nét hoger dan tekstvelden (native pijl-widget) — één vaste
   hoogte zodat alle velden in het formulier strak op elkaar uitlijnen */
.field input:not([type=checkbox]):not([type=radio]), .field select{ height:2.625rem; }
.field-row{ display:grid; grid-template-columns:1fr 1fr; gap:.8rem; }
@media (max-width:520px){ .field-row{ grid-template-columns:1fr; } }
/* v184 (Bas, 19 sep): klanten vroegen Maico of deze keuze duidelijker kon. Er stond
   alleen een donkere pil zonder vraag erboven, en dan lijkt het geen keuze maar een kopje.
   Nu: de vraag erbij, iconen erin, en de gekozen kant in hetzelfde merkblauw als de
   bestelknop eronder — dezelfde kleur betekent hier ook hetzelfde: dit is wat er gebeurt. */
.seg-vraag{
  margin:0 0 .45rem; font-weight:800; font-size:.96rem; color:var(--ink);
}
.seg{
  display:grid; grid-template-columns:1fr 1fr; background:#EDEAE2; border-radius:999px;
  padding:5px; margin-bottom:1rem; gap:4px;
}
.seg button{
  display:flex; align-items:center; justify-content:center; gap:.45rem;
  border:1px solid transparent; background:#fff; padding:.72rem .5rem; border-radius:999px;
  font-weight:800; color:var(--ink-2, #2A3A42); cursor:pointer;
  transition:background .18s ease, color .18s ease, box-shadow .18s ease, transform .18s ease;
}
.seg button svg{ width:1.25em; height:1.25em; flex:0 0 auto; }
.seg button:not(.is-active):not(:disabled):hover{
  border-color:var(--brand); color:var(--brand-ink); transform:translateY(-1px);
}
/* dezelfde blauwe vlakken als .btn--primary: blauw met donkere inkt leest veel beter dan
   blauw met wit, en het is de kleur die de klant verderop ook aanklikt */
.seg button.is-active{
  background:var(--brand); color:#04222E; border-color:var(--brand-deep);
  box-shadow:var(--shadow-brand, 0 6px 18px rgba(0,176,240,.35));
}
/* v184b (Bas, 19 sep): een regel eronder die zegt wat er gekozen is. Het woord "blauwe"
   krijgt letterlijk dezelfde behandeling als de knop — laten zien werkt beter dan
   uitleggen — en de gekozen kant staat er in woorden bij, zodat niemand op kleur alleen
   hoeft af te gaan. Die tekst loopt mee als de keuze verandert. */
.seg-uitleg{
  margin:-.55rem 0 1rem; font-size:.86rem; color:var(--muted); line-height:1.5;
}
.seg-uitleg b{ color:var(--ink); font-weight:800; }
.seg-swatch{
  display:inline-block; background:var(--brand); color:#04222E; font-weight:800;
  border-radius:999px; font-size:.82rem; vertical-align:baseline;
  /* "blauwe" heeft geen staartletters, dus de regelhoogte laat onder de letters ruimte
     over die je wél ziet: het woord hangt dan hoog in de pil. Vandaar boven niets en
     onder .15em — opgemeten, niet gegokt; zo staat de inkt precies in het midden. */
  padding:0 .45rem .15em;
}

/* ---------- v190: nog niets gekozen ------------------------------------------------
   Tot v189 stond "Afhalen" voorgedrukt. Wie snel doorklikte, bestelde daarmee afhalen
   terwijl hij bezorgen wilde — en dat merkte de zaak pas aan de balie. Voorgedrukt is
   dus weg; er wordt nu echt gekozen. Mensen lezen niet, dus doet de kleur het werk:
   een rode gearceerde band rondom de twee knoppen, en de rest van het formulier ligt
   er grijs achter tot er gekozen is. De tekst eronder is de uitleg, niet het signaal. */
.seg.is-onbeslist{
  padding:10px;
  background-color:#fff4f1;
  background-image:repeating-linear-gradient(45deg, #c0392b 0 5px, #f6cdc6 5px 10px);
  box-shadow:0 0 0 2px #c0392b;
  animation:seg-klop 1.5s ease-in-out 2;
}
@keyframes seg-klop{
  0%, 100%{ box-shadow:0 0 0 2px #c0392b; }
  50%     { box-shadow:0 0 0 2px #c0392b, 0 0 0 9px rgba(192,57,43,.20); }
}
/* de tik als iemand tóch probeert door te klikken: het oog gaat vanzelf naar wat beweegt */
.seg.is-tik{ animation:seg-tik .42s ease 2; }
@keyframes seg-tik{
  0%, 100%{ transform:translateX(0); }
  25%     { transform:translateX(-6px); }
  75%     { transform:translateX(6px); }
}
@media (prefers-reduced-motion: reduce){
  .seg.is-onbeslist, .seg.is-tik{ animation:none; }
}
.seg-vraag.is-nodig{ color:#9b2d20; }
/* v234: de bestekvraag — dezelfde vorm als afhalen/bezorgen, zodat hij herkenbaar een keuze is */
.bestek-vak{ margin-top:.2rem; }
.bestek-vak[hidden]{ display:none; }
.bestek-seg{
  display:grid; grid-template-columns:1fr 1fr; background:#EDEAE2; border-radius:999px;
  padding:5px; margin-bottom:1rem; gap:4px;
}
.bestek-seg button{
  display:flex; align-items:center; justify-content:center;
  border:1px solid transparent; background:#fff; padding:.62rem .5rem; border-radius:999px;
  font-weight:800; color:var(--ink-2, #2A3A42); cursor:pointer;
  transition:background .18s ease, color .18s ease, box-shadow .18s ease, transform .18s ease;
}
.bestek-seg button:not(.is-active):hover{ border-color:var(--brand); color:var(--brand-ink); transform:translateY(-1px); }
.bestek-seg button.is-active{
  background:var(--brand); color:#04222E; border-color:var(--brand-deep);
  box-shadow:var(--shadow-brand, 0 6px 18px rgba(0,176,240,.35));
}
.bestek-seg.is-onbeslist{
  padding:10px; background-color:#fff4f1;
  background-image:repeating-linear-gradient(45deg, #c0392b 0 5px, #f6cdc6 5px 10px);
  box-shadow:0 0 0 2px #c0392b;
}
@media (prefers-reduced-motion: no-preference){ .bestek-seg.is-onbeslist{ animation:seg-klop 1.5s ease-in-out 2; } }
.seg-let-op{
  display:flex; gap:.55rem; align-items:flex-start;
  margin:-.55rem 0 1rem; padding:.62rem .8rem;
  background:#fff4f1; border:1.5px solid #e0a89f; border-left:5px solid #c0392b;
  border-radius:var(--r-sm); color:#8d2418; font-weight:700; font-size:.9rem; line-height:1.45;
}
.seg-let-op svg{ width:1.15em; height:1.15em; flex:0 0 auto; margin-top:.12em; }
.seg-let-op b{ font-weight:800; }
/* v218: de rode stand komt pas als er niet gekozen wordt. Kan er vandaag maar één van de
   twee, dan staat die reden er vanaf het begin onder — rustig, zonder rood */
.seg-let-op.is-zacht{ background:transparent; border:0; padding:0; color:var(--muted); font-weight:600; }
.seg-let-op.is-zacht svg{ display:none; }
/* de rest van de gegevens wacht op de keuze — de velden staan er wel, maar grijs en op
   slot; zo is te zien dát ze komen, en waar je eerst moet zijn */
#order-form.keuze-nodig > *:not(.seg):not(.seg-vraag):not(.seg-let-op):not(.order-gesloten){
  opacity:.38;
}
#order-form.keuze-nodig input,
#order-form.keuze-nodig select,
#order-form.keuze-nodig textarea{ cursor:not-allowed; }

.notice{
  display:flex; gap:.7rem; align-items:flex-start; background:rgba(0,176,240,.09);
  border:1px solid rgba(0,176,240,.28); color:#0B4A61; border-radius:var(--r-sm);
  padding:.85rem 1rem; font-size:.9rem; margin:.6rem 0 1rem;
}
.notice i{ font-style:normal; }
.toast{
  position:fixed; z-index:90; left:50%; bottom:1.6rem; transform:translate(-50%, 20px);
  background:var(--ink); color:#fff; padding:.8rem 1.4rem; border-radius:999px; font-weight:700;
  opacity:0; pointer-events:none; transition:all .25s ease; box-shadow:var(--shadow-lg); font-size:.95rem;
}
.toast.is-show{ opacity:1; transform:translate(-50%,0); }
/* v126 — een melding hoort niet over de mandjesbalk heen te vallen.
   Die regel bestond wel, maar stond in een media query vóór .toast zelf; bij gelijke
   specificiteit wint de laatste, dus hij deed niets en de twee lagen over elkaar.
   Nu hangt de hoogte af van of de balk er staat, en dat weet de pagina zelf.
   Ook: één regel houden — afgebroken over twee regels werd het een blok. */
.toast{ max-width:min(30rem, calc(100vw - 2rem)); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
body.heeft-mandjebalk .toast{ bottom:6.2rem; }
@media (min-width:1081px){
  /* op een breed scherm staat het mandje naast de kaart, niet onderin */
  body.heeft-mandjebalk .toast{ bottom:1.6rem; }
}

/* ---------- video sectie ---------- */
.video-shell{
  position:relative; border-radius:var(--r-lg); overflow:hidden; background:var(--ink-2);
  box-shadow:var(--shadow-lg); aspect-ratio:16/9;
}
.video-shell video{ width:100%; height:100%; object-fit:cover; }
.video-placeholder{
  position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:1rem; color:#BFD3DB; text-align:center; padding:2rem;
  background:linear-gradient(150deg, rgba(16,34,43,.94), rgba(9,18,23,.96));
}
.video-placeholder .play-ring{
  width:84px; height:84px; border-radius:50%; background:var(--brand); color:#04222E;
  display:flex; align-items:center; justify-content:center; font-size:1.7rem; box-shadow:var(--shadow-brand);
}
.video-placeholder b{ color:#fff; font-size:1.15rem; }
.video-placeholder small{ max-width:34em; }
.video-placeholder code{ background:rgba(255,255,255,.1); padding:.1rem .45rem; border-radius:6px; }
.video-shell .video-placeholder{ display:none; }
.video-shell.no-video video{ display:none; }
.video-shell.no-video .video-placeholder{ display:flex; }

/* ---------- contact ---------- */
.contact-grid{ display:grid; grid-template-columns:1fr 1fr; gap:clamp(1.8rem,4vw,3rem); align-items:start; }
@media (max-width:950px){ .contact-grid{ grid-template-columns:1fr; } }
.info-cards{ display:grid; gap:1rem; margin-bottom:1.6rem; }
.info-card{
  display:flex; gap:1.1rem; align-items:flex-start; background:var(--card); border:1px solid var(--line);
  border-radius:var(--r-md); padding:1.25rem 1.3rem; box-shadow:0 8px 22px -16px rgba(11,21,26,.18);
}
.info-card .i-ico{
  flex:0 0 auto; width:46px; height:46px; border-radius:13px; background:rgba(0,176,240,.13);
  color:var(--brand-ink); display:flex; align-items:center; justify-content:center; font-size:1.2rem;
}
.info-card b{ display:block; color:var(--ink); margin-bottom:.15rem; }
.info-card a{ font-weight:700; }
.map-frame{ border-radius:var(--r-lg); overflow:hidden; box-shadow:var(--shadow-md); border:1px solid var(--line);
  aspect-ratio:4/3; background:#E6E2D8; position:relative; }
.map-frame iframe{ width:100%; height:100%; border:0; display:block; }
.map-fallback{ position:absolute; inset:auto 1rem 1rem auto; }
.contact-form{ background:var(--card); border:1px solid var(--line); border-radius:var(--r-lg);
  padding:1.9rem; box-shadow:var(--shadow-md); }

/* ---------- allergenen ---------- */
.allergen-tools{ display:flex; gap:.8rem; flex-wrap:wrap; margin-bottom:1.4rem; }
.allergen-tools input{
  flex:1; min-width:240px; border:1.5px solid var(--line); border-radius:999px; padding:.8rem 1.3rem; background:#fff;
}
.allergen-tools input:focus{ border-color:var(--brand); }
.allergen-tools input:focus:not(:focus-visible){ outline:none; }
.allergen-table{ width:100%; border-collapse:collapse; background:var(--card); border-radius:var(--r-md);
  overflow:hidden; box-shadow:var(--shadow-md); font-size:.96rem; }
.allergen-table th{ background:var(--ink); color:#fff; text-align:left; padding:.85rem 1.1rem; font-size:.82rem;
  letter-spacing:.12em; text-transform:uppercase; }
.allergen-table td{ padding:.7rem 1.1rem; border-bottom:1px solid var(--line); vertical-align:top; }
.allergen-table tr:nth-child(even) td{ background:rgba(11,21,26,.025); }
.allergen-table td:first-child, .allergen-table th:first-child{ font-weight:700; color:var(--ink); width:34%; }
.allergen-table .group-row td{ background:rgba(0,176,240,.1); color:var(--brand-ink); font-weight:800;
  text-transform:uppercase; letter-spacing:.1em; font-size:.8rem; }
/* v210 — de naam op de kaart als die anders is dan op de lijst ("Grootm. kalfsvleeskroket" is
   de Kalfskroket), zodat klanten en de zaak zien welke regel bij welk product hoort */
.allergen-table .al-alias{ display:block; margin-top:.12rem; font-size:.78rem; font-weight:600; color:var(--muted); }
.al-datum{ margin:.6rem 0 0; font-size:.9rem; color:#8FA6B0; }
.al-datum a{ color:var(--sky); font-weight:700; }
/* de kop "Product" stond in de donkere tabelkop in donkere letters (onzichtbaar) */
.allergen-table th:first-child{ color:#fff; }
.allergen-leeg{ margin:1rem 0 0; padding:.8rem 1rem; border-radius:var(--r-sm); background:var(--card);
  border:1px dashed var(--line); color:var(--text); }
.allergen-leeg[hidden]{ display:none; }

/* ---------- privacybeleid.html / algemene-voorwaarden.html / cookiebeleid.html ---------- */
.legal-text{ max-width:760px; }
.legal-text h2{ font-size:1.28rem; margin-top:2.1rem; padding-top:1.4rem; border-top:1px solid var(--line); }
.legal-text h2:first-of-type{ margin-top:0; padding-top:0; border-top:0; }
.legal-text p, .legal-text ul{ color:var(--muted); font-size:.98rem; }
.legal-text li{ margin-bottom:.3rem; }
.legal-text b{ color:var(--ink); }

/* ---------- cookiebanner ---------- */
.cookiebar{
  position:fixed; left:1rem; right:1rem; bottom:1rem; z-index:200;
  max-width:640px; margin-inline:auto; background:var(--ink); color:#fff;
  border-radius:var(--r-md); box-shadow:var(--shadow-lg); padding:1.2rem 1.3rem;
  display:flex; flex-direction:column; gap:.9rem; transform:translateY(140%); transition:transform .45s ease;
}
.cookiebar.is-show{ transform:translateY(0); }
.cookiebar p{ margin:0; font-size:.9rem; color:#C9D9E0; }
.cookiebar p a{ color:#fff; text-decoration:underline; }
.cookiebar-actions{ display:flex; gap:.7rem; flex-wrap:wrap; }
.cookiebar-actions .btn{ flex:1; min-width:140px; justify-content:center; }
@media (min-width:640px){ .cookiebar{ left:auto; right:1.6rem; bottom:1.6rem; } }

/* ---------- cta-band ---------- */
.cta-band{ background:linear-gradient(120deg, #00A5E2, #007FC4); color:#fff; }
.cta-band .container{ display:flex; align-items:center; justify-content:space-between; gap:2rem; flex-wrap:wrap;
  padding-block:clamp(2.6rem,5vw,3.8rem); }
.cta-band h2{ color:#fff; margin:0; font-size:clamp(1.7rem,3.4vw,2.6rem); }
.cta-band p{ margin:.45rem 0 0; color:#DFF4FF; }
.cta-band .btn--dark{ background:#06222E; }
.cta-band .btn--dark:hover{ background:#0B3140; }

/* ---------- reveal animaties ---------- */
.reveal{ opacity:0; transform:translateY(26px); transition:opacity .7s ease, transform .7s cubic-bezier(.2,.7,.2,1); }
.reveal.is-in{ opacity:1; transform:none; }
.reveal-d1{ transition-delay:.08s; } .reveal-d2{ transition-delay:.16s; } .reveal-d3{ transition-delay:.24s; }
@media (prefers-reduced-motion:reduce){ .reveal{ opacity:1; transform:none; transition:none; } }

/* ---------- diversen ---------- */
.pdf-links{ display:flex; gap:.7rem; flex-wrap:wrap; margin-top:1.2rem; }
.pdf-link{
  display:inline-flex; align-items:center; gap:.55rem; font-weight:700; font-size:.93rem;
  border:1.5px solid var(--line); border-radius:999px; padding:.55rem 1.1rem; color:var(--ink); background:#fff;
  transition:all .15s ease;
}
.pdf-link:hover{ border-color:var(--brand); color:var(--brand-ink); transform:translateY(-1px); }
.dark .pdf-link{ background:rgba(255,255,255,.06); border-color:rgba(255,255,255,.2); color:#E4F1F7; }
.dark .pdf-link:hover{ border-color:var(--sky); color:var(--sky); }
.skip-link{ position:absolute; left:-999px; top:0; z-index:100; background:var(--brand); color:#04222E;
  padding:.7rem 1.2rem; font-weight:800; border-radius:0 0 12px 0; }
.skip-link:focus{ left:0; }

/* ==========================================================================
   v2 — iconen, productfoto's, bezorging, beheer, vacatures, bon, bezorg-app
   ========================================================================== */

/* ---------- iconen ---------- */
.ic{ display:inline-flex; width:1.25em; height:1.25em; flex:0 0 auto; vertical-align:-.22em; }
.ic svg{ width:100%; height:100%; }
.btn .ic{ width:1.15em; height:1.15em; }
.i-ico .ic, .f-ico .ic{ width:1.35em; height:1.35em; vertical-align:0; }
.chip-ic{ display:inline-flex; width:1.05em; height:1.05em; margin-right:.45em; vertical-align:-.18em; }
.chip-ic svg{ width:100%; height:100%; }
.cat-chip{ display:inline-flex; align-items:center; }
.cat-head-ic{ display:inline-flex; width:1.5rem; height:1.5rem; color:var(--brand-ink); align-self:center; }
.cat-head-ic svg{ width:100%; height:100%; }
.add-btn svg{ width:20px; height:20px; }
.cl-x{ display:inline-flex; align-items:center; justify-content:center; }
.cl-x .ic, .cl-x svg{ width:15px; height:15px; }
.play-ring svg{ width:30px; height:30px; }

/* ---------- header: logo-badge ---------- */
.brand{ flex-direction:row; align-items:center; gap:.75rem; }
.brand-badge{ width:46px; height:46px; border-radius:50%; flex:0 0 auto;
  box-shadow:0 0 0 2px rgba(255,255,255,.18); }
.brand-text{ display:flex; flex-direction:column; gap:.18rem; line-height:1; }
@media (max-width:900px){ .brand-badge{ width:38px; height:38px; } }

/* ---------- productfoto's in de bestellijst ---------- */
.oi-thumb{ width:60px; height:60px; border-radius:12px; object-fit:cover; flex:0 0 auto;
  box-shadow:0 4px 12px -6px rgba(11,21,26,.35); }
@media (max-width:520px){ .oi-thumb{ width:52px; height:52px; } }

/* ---------- categorie-fotostrook (header met voorbeeldfoto) ---------- */
.cat-banner{
  position:relative; border-radius:var(--r-md); overflow:hidden; min-height:150px;
  display:flex; align-items:flex-end; background:var(--ink-2); box-shadow:var(--shadow-md);
  margin-bottom:.4rem;
}
.cat-banner img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.cat-banner::after{ content:""; position:absolute; inset:0;
  background:linear-gradient(to right, rgba(6,14,18,.82) 0%, rgba(6,14,18,.45) 45%, rgba(6,14,18,.08) 100%); }
.cat-banner-body{
  position:relative; z-index:2; display:flex; align-items:center; gap:.9rem;
  padding:1.1rem 1.35rem; width:100%; flex-wrap:wrap;
}
.cat-banner .cat-head-ic{
  width:44px; height:44px; border-radius:13px; background:rgba(255,255,255,.14);
  backdrop-filter:blur(6px); border:1px solid rgba(255,255,255,.22); color:#fff;
  display:flex; align-items:center; justify-content:center; padding:9px;
}
.cat-banner h2{
  font-family:var(--font-display); font-weight:400; text-transform:uppercase; letter-spacing:.03em;
  font-size:1.9rem; margin:0; color:#fff;
}
.cat-banner .cat-note{ color:#CFE4EE; font-size:.9rem; font-weight:600; width:100%; margin-top:-.3rem; padding-left:calc(44px + .9rem); }
@media (max-width:640px){
  .cat-banner{ min-height:120px; }
  .cat-banner h2{ font-size:1.5rem; }
  .cat-banner .cat-note{ padding-left:0; }
}
/* variant zonder foto: designstrook met groot categorie-icoon (via Beheer door foto te vervangen) */
.cat-banner--tile{
  background:
    radial-gradient(30rem 16rem at 108% -30%, rgba(0,176,240,.32), transparent 62%),
    radial-gradient(22rem 14rem at -10% 130%, rgba(0,176,240,.14), transparent 60%),
    linear-gradient(140deg, var(--ink-2), var(--ink-3));
}
.cat-banner--tile::after{ background:none; }
.banner-mark{
  position:absolute; right:-14px; top:50%; transform:translateY(-50%) rotate(-8deg);
  width:150px; height:150px; color:rgba(85,207,255,.16); pointer-events:none;
}
.banner-mark svg{ width:100%; height:100%; }
@media (max-width:640px){ .banner-mark{ width:110px; height:110px; } }

/* ---------- bezorging in de winkelwagen ---------- */
.cart-totals{ flex-direction:column; gap:.35rem; }
.cart-totals .t-row{ display:flex; justify-content:space-between; font-weight:600; color:var(--muted); font-size:.95rem; }
.cart-totals .t-row.t-main{ font-weight:800; color:var(--ink); font-size:1.12rem; padding-top:.35rem; border-top:1px solid var(--line); margin-top:.25rem; }
/* bezorgen = alleen contant — de waarschuwing die de klant niet mag missen */
.bezorg-cash-let-op{
  background:#FFF4E0; border:1.5px solid #E8A02A; border-left-width:5px; color:#6A4A08;
  border-radius:10px; padding:.65rem .8rem; margin:.2rem 0 .6rem; font-size:.92rem; line-height:1.45;
}
.bezorg-cash-let-op b{ color:#5A3D02; }
.bezorg-info{ display:none; background:rgba(0,176,240,.08); border:1px solid rgba(0,176,240,.25);
  border-radius:var(--r-sm); padding:.7rem .9rem; font-size:.85rem; color:#0B4A61; margin-bottom:1rem; line-height:1.55; }
.min-warning{ display:none; gap:.55rem; align-items:center; background:rgba(228,87,61,.09);
  border:1px solid rgba(228,87,61,.3); color:#A93A26; border-radius:var(--r-sm);
  padding:.65rem .9rem; font-size:.88rem; font-weight:600; margin-bottom:.9rem; }
.pc-feedback{ font-size:.84rem; font-weight:700; min-height:1.2em; margin-top:.3rem; }
.pc-feedback.is-ok{ color:#157A47; }
.pc-feedback.is-nok{ color:#A93A26; }
.btn:disabled{ opacity:.45; cursor:not-allowed; transform:none !important; box-shadow:none; }

/* ---------- kleine openingstijden-tabellen (bezorg/afhaal) ---------- */
.mini-hours{ width:100%; border-collapse:collapse; font-size:.92rem; }
.mini-hours td{ padding:.42rem 0; border-bottom:1px dashed var(--line); }
.mini-hours tr:last-child td{ border-bottom:0; }
.mini-hours td:last-child{ text-align:right; font-weight:700; color:var(--ink); font-variant-numeric:tabular-nums; }
.mini-hours tr.is-today td{ color:var(--brand-ink); font-weight:800; }

/* ---------- acties ---------- */
.actie-card{ background:var(--card); border:1px solid var(--line); border-radius:var(--r-lg);
  padding:1.9rem; box-shadow:var(--shadow-md); display:flex; gap:1.3rem; align-items:flex-start; }
.actie-card + .actie-card{ margin-top:1.1rem; }
/* de actiestrook op de beginpagina: kaarten naast elkaar i.p.v. onder elkaar */
.actie-strip-rij{ display:grid; grid-template-columns:repeat(auto-fit, minmax(min(320px, 100%), 1fr)); gap:1.1rem; }
.actie-strip-rij .actie-card{ margin-top:0; }
.actie-strip-rij .actie-titel{ font-size:1.35rem; margin-bottom:.35rem; }
.actie-card .a-ico{ flex:0 0 auto; width:54px; height:54px; border-radius:16px; background:rgba(0,176,240,.13);
  color:var(--brand-ink); display:flex; align-items:center; justify-content:center; }
.actie-card .a-ico .ic{ width:1.7em; height:1.7em; }
.actie-card h2{ font-size:1.35rem; margin-bottom:.35rem; }
.actie-geldig{ display:inline-flex; align-items:center; gap:.45rem; font-size:.85rem; font-weight:700;
  color:var(--brand-ink); background:rgba(0,176,240,.1); padding:.35rem .8rem; border-radius:999px; margin-top:.7rem; }

/* v125 — actie met een foto erbij. De foto gaat over de volle breedte bovenaan de
   kaart; het icoontje vervalt dan, want de foto zegt al waar het over gaat. Vaste
   16:9-verhouding met object-fit:cover, zodat een staande telefoonfoto en een liggende
   productfoto naast elkaar nog steeds een nette rij vormen. */
.actie-card--foto{ flex-direction:column; gap:0; padding:0; overflow:hidden; }
.actie-card--foto .a-ico{ display:none; }
.actie-card--foto .a-tekst{ padding:1.4rem 1.6rem 1.6rem; }
.actie-foto{ width:100%; aspect-ratio:16/9; object-fit:cover; display:block; background:#E6E2DA;
  /* op de actiepagina is een kaart zo breed als de pagina; zonder deze grens werd de
     foto daar bijna 500 px hoog en verdween de tekst onder de vouw */
  max-height:340px; }

/* het fotovak in beheer: voorbeeld + knoppen op één regel, op een telefoon eronder */
.actie-foto-vak{ display:flex; gap:.7rem; align-items:center; flex-wrap:wrap;
  border:1.5px dashed var(--line); border-radius:9px; padding:.55rem .7rem; }
.actie-foto-mini{ width:84px; height:52px; border-radius:7px; object-fit:cover; background:#E6E2DA;
  border:1px solid var(--line); flex:0 0 auto; }
.actie-foto-leeg{ width:84px; height:52px; border-radius:7px; background:#E6E2DA; border:1px solid var(--line);
  flex:0 0 auto; display:flex; align-items:center; justify-content:center; color:var(--muted); font-size:.72rem; }

/* ---------- vacatures ---------- */
.vac-grid{ display:grid; grid-template-columns:1fr 1fr; gap:1.5rem; }
@media (max-width:900px){ .vac-grid{ grid-template-columns:1fr; } }
.vac-card{ background:var(--card); border:1px solid var(--line); border-radius:var(--r-lg);
  overflow:hidden; box-shadow:var(--shadow-md); display:flex; flex-direction:column; }
.vac-card img{ width:100%; height:230px; object-fit:cover; }
.vac-body{ padding:1.6rem 1.6rem 1.8rem; display:flex; flex-direction:column; gap:.7rem; flex:1; }
.vac-body h2{ font-size:1.35rem; margin:0; }
.vac-dagen{ display:inline-flex; align-items:center; gap:.5rem; font-weight:700; font-size:.9rem; color:var(--brand-ink); }
.vac-punten{ list-style:none; padding:0; margin:.2rem 0 .6rem; display:flex; flex-direction:column; gap:.45rem; }
.vac-punten li{ display:flex; gap:.6rem; align-items:flex-start; font-size:.97rem; }
.vac-punten .ic{ color:var(--green); margin-top:.15em; }
.vac-body .btn{ align-self:flex-start; margin-top:auto; }

/* ---------- inloggen ---------- */
.auth-wrap{ max-width:440px; margin-inline:auto; }
.auth-card{ background:var(--card); border:1px solid var(--line); border-radius:var(--r-lg);
  padding:2.1rem; box-shadow:var(--shadow-md); }
.auth-tabs{ display:grid; grid-template-columns:1fr 1fr; background:#EDEAE2; border-radius:999px; padding:4px; margin-bottom:1.5rem; }
.auth-tabs button{ border:0; background:none; padding:.6rem; border-radius:999px; font-weight:800; color:var(--muted); }
.auth-tabs button.is-active{ background:var(--ink); color:#fff; }
.auth-note{ font-size:.86rem; color:var(--muted); }

/* ---------- e-mail bevestigd ---------- */
.eb-icon{ width:64px; height:64px; border-radius:50%; margin:0 auto 1.1rem; display:flex; align-items:center;
  justify-content:center; background:rgba(11,21,26,.06); color:var(--muted); font-size:1.7rem; }
.eb-icon--ok{ background:rgba(35,189,108,.14); color:var(--green); }
.eb-icon--fout{ background:rgba(228,87,61,.14); color:var(--red); }

/* ---------- beheer ---------- */
.admin-body{ background:#EFECE5; }
.admin-shell{ display:grid; grid-template-columns:250px minmax(0,1fr); gap:1.6rem;
  padding:1.6rem 0 3rem; align-items:start; }
/* minmax(0,…): anders kan de kolom niet smaller dan zijn breedste tabel en duwt
   een rapportagematrix of publiceerbalk de hele pagina breder dan het scherm */
@media (max-width:900px){ .admin-shell{ grid-template-columns:minmax(0,1fr); } }
/* de knoppenrij rechts in de kop van beheer/kassa/keuken: op een telefoon netjes
   doorwrappen in plaats van de pagina breder duwen */
.kop-acties{ margin-left:auto; display:flex; gap:.6rem; }
@media (max-width:760px){
  .site-header .container{ flex-wrap:wrap; row-gap:.5rem; }
  .kop-acties{ flex-wrap:wrap; justify-content:flex-end; row-gap:.4rem; }
}
.admin-nav{ background:var(--ink); border-radius:var(--r-lg); padding:1rem; position:sticky; top:90px;
  display:flex; flex-direction:column; gap:.25rem; }
.admin-nav button{ display:flex; align-items:center; gap:.7rem; background:none; border:0; color:#C9D9E0;
  font-weight:700; font-size:.97rem; padding:.7rem .9rem; border-radius:12px; text-align:left; }
.admin-nav button:hover{ background:rgba(255,255,255,.07); color:#fff; }
.admin-nav button.is-active{ background:var(--brand); color:#04222E; }
@media (max-width:900px){
  .admin-shell{ padding-top:.9rem; gap:.8rem; }
  /* v125 — beheer op een telefoon. Naast de inhoud past de menukolom niet meer, dus
     komt hij erboven: negen knoppen onder elkaar vullen dan het halve scherm en je
     moet bij elke stap eerst langs dat blok scrollen. Hier wordt het één regel die je
     opzij schuift; de gekozen knop schuift vanzelf in beeld (zie pagina-beheer.js).
     Bewust niet plakkend: hij moet juist wég zijn zodra je aan het werk bent. */
  .admin-nav{
    position:static; flex-direction:row; overflow-x:auto; overflow-y:hidden;
    gap:.4rem; padding:.5rem .6rem; border-radius:14px;
    scrollbar-width:none; -ms-overflow-style:none; -webkit-overflow-scrolling:touch;
    /* schaduw aan de rechterkant als teken dat er meer staat */
    -webkit-mask-image:linear-gradient(to right, #000 calc(100% - 26px), transparent);
    mask-image:linear-gradient(to right, #000 calc(100% - 26px), transparent);
  }
  .admin-nav.is-eind{ -webkit-mask-image:none; mask-image:none; }
  .admin-nav::-webkit-scrollbar{ display:none; }
  /* padding-right telt in een horizontaal schuivende flexbox niet mee aan het eind
     (bekende browserkwestie) — deze lege flexitem doet dat wél, zodat de laatste knop
     niet tegen de rand plakt */
  .admin-nav::after{ content:""; flex:0 0 .2rem; }
  .admin-nav button{
    flex:0 0 auto; white-space:nowrap; padding:.55rem .8rem; font-size:.9rem; gap:.4rem;
    scroll-margin-inline:.6rem;
  }
  /* de kop mag op een klein scherm niet de halve pagina beslaan */
  .admin-body .site-header{ position:static !important; }
}
.admin-panel{ background:var(--card); border:1px solid var(--line); border-radius:var(--r-lg);
  padding:1.9rem; box-shadow:var(--shadow-md); }
.admin-panel h2{ font-size:1.45rem; display:flex; align-items:center; gap:.6rem; }
.admin-panel h3{ font-size:1.05rem; margin-top:1.6rem; }
/* v125 — op een telefoon is 1,9 rem rondom bijna een vijfde van de schermbreedte */
@media (max-width:900px){
  .admin-panel{ padding:1.1rem; }
  .admin-panel h2{ font-size:1.2rem; }
}
.admin-list{ display:flex; flex-direction:column; gap:.6rem; margin-top:1rem; }
.admin-row{ display:flex; gap:.7rem; align-items:center; border:1px solid var(--line); border-radius:12px;
  padding:.6rem .8rem; background:#FCFBF8; flex-wrap:wrap; }
.admin-row .grow{ flex:1; min-width:140px; font-weight:600; color:var(--ink); font-size:.95rem; }
.admin-row input[type="number"]{ width:92px; }
.admin-row input, .admin-row select{ border:1.5px solid var(--line); border-radius:9px; padding:.42rem .6rem; background:#fff; font-size:.9rem; }
.admin-row input:focus{ border-color:var(--brand); }
/* v232: de productnaam is aan te passen */
.admin-row .admin-naam-vak{ display:flex; flex-direction:column; gap:.15rem; flex:2 1 240px; min-width:220px; }
.admin-row input.admin-naam{ width:100%; font-weight:600; color:var(--ink); }
.admin-naam-was{ color:var(--muted); font-size:.78rem; font-weight:500; }
.admin-naam-was[hidden]{ display:none; }
.admin-naam-terug{ background:none; border:0; padding:0; color:var(--brand-ink); font:inherit; font-weight:700; text-decoration:underline; cursor:pointer; }
/* v186 — Mijn LOBO: "Opnieuw bestellen" en "Factuur (PDF)" onder elkaar naast een bestelling */
.mp-knoppen{ display:flex; flex-direction:column; gap:.4rem; flex:0 0 auto; }
.mp-knoppen .btn{ justify-content:center; }
.mp-knoppen .btn svg{ width:1.05em; height:1.05em; flex:0 0 auto; }
@media (max-width: 520px){ .mp-knoppen{ flex-direction:row; flex-wrap:wrap; width:100%; } .mp-knoppen .btn{ flex:1 1 auto; } }
.admin-row input:focus:not(:focus-visible){ outline:none; }
.icon-btn{ border:0; background:none; color:var(--muted); display:inline-flex; padding:.35rem; border-radius:8px; }
.icon-btn:hover{ color:var(--red); background:rgba(228,87,61,.08); }
/* v139: het icoon in zo'n knop had geen maat en was daardoor onzichtbaar (0 px) — ook de
   bewerk-/verwijderknop bij een eigen product in Beheer */
.icon-btn svg{ width:18px; height:18px; flex:0 0 auto; }
.btn > svg{ width:1.1em; height:1.1em; flex:0 0 auto; } /* losse LOBO_ICONS-svg direct in een knop (Beheer) */
.switch{ position:relative; width:46px; height:26px; flex:0 0 auto; }
.switch input{ position:absolute; opacity:0; inset:0; margin:0; cursor:pointer; }
.switch .sl{ position:absolute; inset:0; background:#D8D3C8; border-radius:999px; transition:background .2s; pointer-events:none; }
.switch .sl::after{ content:""; position:absolute; top:3px; left:3px; width:20px; height:20px; border-radius:50%;
  background:#fff; transition:transform .2s; box-shadow:0 1px 3px rgba(0,0,0,.25); }
.switch input:checked + .sl{ background:var(--green); }
.switch input:checked + .sl::after{ transform:translateX(20px); }
/* v212 — Beheer → Stickers: per categorie uitklapbaar, per product een schakelaar, met zoeken */
.stk-balk{ display:flex; flex-wrap:wrap; gap:.6rem 1rem; align-items:center; margin:1rem 0 0; }
.stk-balk input[type="search"]{ flex:1 1 260px; max-width:420px; border:1.5px solid var(--line); border-radius:9px;
  padding:.5rem .7rem; font:inherit; background:#fff; }
.stk-balk input[type="search"]:focus{ border-color:var(--brand); outline:none; }
.stk-alleen{ display:inline-flex; align-items:center; gap:.4rem; font-size:.9rem; font-weight:600; color:var(--text); cursor:pointer; }
.stk-alleen input{ width:1.05rem; height:1.05rem; accent-color:var(--brand); }
.stk-stand{ margin:.6rem 0 0; padding:.45rem .7rem; border-radius:9px; font-size:.88rem; line-height:1.4;
  background:rgba(245,167,59,.14); border:1px solid rgba(245,167,59,.5); color:#7A4E0C; }
.stk-stand[hidden]{ display:none; }
.stk-lijst{ gap:.45rem; }
.stk-lijst .admin-row[hidden], .stk-items[hidden]{ display:none; }
.stk-cat{ background:#fff; }
.stk-open{ display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; text-align:left; background:none; border:0;
  padding:.1rem 0; font:inherit; cursor:pointer; color:var(--ink); }
.stk-open:focus-visible{ outline:2px solid var(--brand); outline-offset:3px; border-radius:6px; }
.stk-naam{ font-weight:800; }
.stk-tel{ color:var(--muted); font-weight:600; }
.stk-pijl{ width:.5rem; height:.5rem; flex:0 0 auto; border-right:2px solid var(--muted); border-bottom:2px solid var(--muted);
  transform:rotate(-45deg); transition:transform .15s ease; margin-right:.15rem; }
.stk-open[aria-expanded="true"] .stk-pijl{ transform:rotate(45deg); }
.stk-items{ display:flex; flex-direction:column; gap:.35rem; margin:-.1rem 0 .35rem 1.3rem; }
.stk-product{ padding:.4rem .7rem; }
.stk-product .grow{ display:flex; flex-direction:column; gap:.05rem; font-weight:600; }
.stk-waarom{ color:var(--muted); font-weight:600; font-size:.78rem; }
.stk-waarom:empty{ display:none; }
.stk-product.is-eigen .stk-waarom{ color:var(--brand-ink); }
.stk-leeg{ margin:.8rem 0 0; color:var(--muted); font-size:.92rem; }
.stk-leeg[hidden]{ display:none; }
@media (max-width:520px){ .stk-items{ margin-left:.5rem; } }
.admin-bar{ display:flex; gap:.7rem; flex-wrap:wrap; align-items:center; margin-top:1.6rem;
  padding-top:1.3rem; border-top:1px solid var(--line); }
@media (max-width:520px){
  /* telefoons: lange knopteksten ("Wijzigingen opslaan (voorvertoning)") mogen
     omklappen — nooit de pagina breder duwen dan het scherm */
  .admin-bar .btn, .admin-panel .btn--lg{ white-space:normal; }
}
.badge-demo{ display:inline-flex; align-items:center; gap:.5rem; background:rgba(245,167,59,.14); color:#8A5A12;
  font-weight:800; font-size:.8rem; letter-spacing:.06em; text-transform:uppercase; padding:.4rem .9rem; border-radius:999px; }
.pill-list{ display:flex; flex-wrap:wrap; gap:.45rem; margin-top:.8rem; }
.pc-pill{ display:inline-flex; align-items:center; gap:.4rem; background:#fff; border:1.5px solid var(--line);
  border-radius:999px; padding:.35rem .5rem .35rem .85rem; font-weight:700; font-size:.9rem; color:var(--ink);
  font-variant-numeric:tabular-nums; }
.pc-pill button{ border:0; background:none; display:inline-flex; align-items:center; justify-content:center;
  color:var(--muted); padding:0; width:26px; height:26px; border-radius:999px; cursor:pointer; }
/* v233: het kruisje had geen maat en viel weg (0 x 0 px) */
.pc-pill button svg{ width:15px; height:15px; flex:none; stroke-width:2.4; }
.pc-pill button:hover, .pc-pill button:focus-visible{ color:#fff; background:var(--red); }

/* ---------- rapportage (beheer) ---------- */
.rap-kaarten{ display:grid; grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); gap:.8rem; margin-top:.4rem; }
.rap-kaart{ background:#FCFBF8; border:1px solid var(--line); border-radius:12px; padding:.9rem 1.1rem; }
.rap-kaart b{ display:block; font-size:1.5rem; color:var(--ink); font-variant-numeric:tabular-nums; }
.rap-kaart span{ font-size:.82rem; color:var(--muted); }
.rap-tabel{ width:100%; border-collapse:collapse; font-size:.92rem; margin-top:.5rem; }
.rap-tabel th, .rap-tabel td{ text-align:left; padding:.5rem .6rem; border-bottom:1px solid var(--line); }
.rap-tabel th{ color:var(--muted); font-weight:700; font-size:.78rem; text-transform:uppercase; letter-spacing:.05em; }
.rap-tabel td:not(:first-child), .rap-tabel th:not(:first-child){ text-align:right; }
/* v198: Financieel → Kassakorting */
.rap-kk-sam{ margin:.3rem 0 0; font-size:.95rem; }
.rap-kk-sam b{ font-variant-numeric:tabular-nums; }
.rap-kk-nb{ color:var(--muted); font-size:.85rem; margin-top:.5rem; }
#rap-kk td{ font-variant-numeric:tabular-nums; }
#rap-kk td.rap-kk-bedrag{ color:#1C7A43; font-weight:700; white-space:nowrap; }
#rap-kk th:nth-child(2), #rap-kk td:nth-child(2), #rap-kk th:nth-child(3), #rap-kk td:nth-child(3){ text-align:left; }
/* v199: kassakorting per dag (bij een periode van meer dan één dag) */
.rap-kk-dagen{ margin:.9rem 0 1.3rem; max-width:520px; }
.rap-kk-dagen[hidden]{ display:none; }
.rap-kk-dagen h4{ margin:0; font-size:.95rem; }
#rap-kk-dag td{ font-variant-numeric:tabular-nums; }
#rap-kk-dag td.rap-kk-bedrag{ color:#1C7A43; font-weight:700; white-space:nowrap; }
#rap-kk-dag tr.rap-kk-dag-tot td{ font-weight:800; border-top:2px solid var(--ink); }

/* ---------- bezorger-app ---------- */
.driver-body{ background:#0C1418; color:#DCE8ED; min-height:100vh; }
.driver-shell{ max-width:520px; margin-inline:auto; padding:1.2rem 1.1rem 4rem; }
.driver-head{ display:flex; align-items:center; gap:.9rem; padding:.6rem 0 1.2rem; }
.driver-head img{ width:44px; height:44px; border-radius:50%; }
.driver-head b{ color:#fff; font-size:1.05rem; display:block; }
.driver-head small{ color:#8FA6AF; }
.driver-stats{ display:grid; grid-template-columns:repeat(3,1fr); gap:.7rem; margin-bottom:1.2rem; }
.dstat{ background:#111E24; border:1px solid rgba(255,255,255,.09); border-radius:14px; padding:.8rem; text-align:center; }
.dstat b{ display:block; font-family:var(--font-display); font-size:1.5rem; color:var(--sky); }
.dstat span{ font-size:.75rem; color:#8FA6AF; font-weight:700; letter-spacing:.06em; text-transform:uppercase; }
.stop-card{ background:#132129; border:1px solid rgba(255,255,255,.1); border-radius:18px;
  padding:1.2rem 1.2rem 1.1rem; margin-bottom:.9rem; }
.stop-card.is-done{ opacity:.45; }
.stop-top{ display:flex; align-items:center; gap:.8rem; margin-bottom:.6rem; }
.stop-nr{ width:34px; height:34px; border-radius:50%; background:var(--brand); color:#04222E;
  display:flex; align-items:center; justify-content:center; font-weight:800; flex:0 0 auto; }
.stop-card.is-active-stop{ border-color:var(--brand); box-shadow:0 0 0 3px rgba(0,176,240,.18); }
.stop-top b{ color:#fff; font-size:1.02rem; }
.stop-top small{ display:block; color:#8FA6AF; }
/* v165: de rijafstand van de zaak naar het bezorgadres, dikgedrukt achter het adres op
   het bonnenscherm — daarmee zie je meteen of dit een fietsrit is of niet */
.k-afstand{ font-weight:800; color:var(--ink, inherit); }
/* v167: waarmee je gaat — fiets onder de 2 km, scooter daarvanaf. Niet meer als
   emoji achter het adres (v166) maar als foto van de bezorgfiets of -scooter, heel licht
   rechts in de kaart. Reden (wens Bas, 11 sep): een emoji van 1,25em leest van de
   doorgeefplank niet, en naast de bezorgersnaam stond dezelfde scooter al — twee keer
   hetzelfde plaatje op één bon leest als twee verschillende dingen. De foto is groot,
   uniek per vervoermiddel en staat de tekst niet in de weg.

   Waarom een <span> met achtergrond en geen <img>: hij mag nooit meeschuiven met de
   tekst en nooit voorgelezen worden (het is versiering; de afstand in cijfers is de
   echte informatie). De uitvaging naar links houdt hem van het adres af — waar
   mask-image niet werkt, staat er simpelweg een foto met een rechte rand, ook prima. */
.k-vervoer-merk{ position:absolute; top:0; bottom:0; right:0; width:clamp(150px, 46%, 250px);
  padding:9px 9px 9px 0; box-sizing:border-box; pointer-events:none; user-select:none;
  opacity:.26; background-repeat:no-repeat; background-position:right center; background-size:contain;
  -webkit-mask-image:linear-gradient(to right, transparent 0%, #000 42%);
          mask-image:linear-gradient(to right, transparent 0%, #000 42%); }
.k-vervoer-merk.is-fiets{   background-image:url('../img/vervoer-fiets.png'); }
.k-vervoer-merk.is-scooter{ background-image:url('../img/vervoer-scooter.png'); }
/* v247: catering wordt met de bus bezorgd (ID. Buzz Cargo) */
.k-vervoer-merk.is-bus{     background-image:url('../img/vervoer-bus.png'); opacity:.22; }   /* breder en donkerder: iets lichter */
@media print{ .k-vervoer-merk{ display:none; } }

/* Het watermerk is absoluut geplaatst en zou daardoor ná de inhoud geschilderd worden —
   dus óver de klantnaam en het adres heen. Deze drie blokken krijgen daarom een eigen
   laag erboven. Zonder dit ligt er een grijze waas over de tekst. */
.k-card.k-compact > .k-tijdblok,
.k-card.k-compact > .k-kern,
.k-card.k-compact > .k-onder{ position:relative; z-index:1; }
.stop-status{ margin-left:auto; font-size:.72rem; font-weight:800; letter-spacing:.08em; text-transform:uppercase;
  padding:.3rem .7rem; border-radius:999px; background:rgba(255,255,255,.08); color:#B9CCD5; }
.stop-status.s-onderweg{ background:rgba(0,176,240,.18); color:var(--sky); }
.stop-status.s-klaar{ background:rgba(35,189,108,.16); color:#5FD79A; }
.stop-items{ color:#AFC3CC; font-size:.9rem; margin:.4rem 0 .9rem; line-height:1.55; }
.stop-actions{ display:flex; gap:.6rem; flex-wrap:wrap; }
.stop-actions .btn{ padding:.62rem 1.05rem; font-size:.9rem; }
.driver-note{ font-size:.82rem; color:#7E96A0; margin-top:1.6rem; line-height:1.6; }

/* ---------- v169: opmerking per product ----------
   Op de bestelpagina staat onder elk product een klein knopje; pas na een tik komt het
   invoerveld tevoorschijn. Reden: een veld onder elk van de ruim honderd producten maakt
   van de kaart een formulier, en negen van de tien klanten hebben niets door te geven. */
.oi-opm{ margin-top:.35rem; }
.oi-opm-knop{ font:inherit; font-size:.78rem; font-weight:600; color:var(--muted);
  background:none; border:0; padding:.15rem 0; cursor:pointer; text-align:left;
  max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.oi-opm-knop:hover{ color:var(--brand); }
.oi-opm-knop.heeft-opm{ color:var(--ink); font-weight:700; }
.oi-opm-veld{ display:block; width:100%; max-width:420px; margin-top:.3rem;
  border:1.5px solid var(--line); border-radius:9px; padding:.42rem .6rem;
  font:inherit; font-size:.88rem; background:#fff; }
.oi-opm-veld:focus{ border-color:var(--brand); outline:none; }
/* v187: bestelpagina — "Zakelijk? Factuur op bedrijfsnaam", zelfde stille knopstijl als de
   opmerking per product; pas na een tik verschijnt het veld */
.zakelijk{ margin:-.45rem 0 .95rem; }
.zakelijk-knop{ font:inherit; font-size:.86rem; font-weight:700; color:var(--brand-ink);
  background:none; border:0; padding:.2rem 0; cursor:pointer; text-align:left; }
.zakelijk-knop:hover{ color:var(--brand); }
.zakelijk-knop[hidden]{ display:none; }
.zakelijk-veld{ margin:.1rem 0 0; }
.zakelijk-veld[hidden]{ display:none; }
.zakelijk-hint{ font-weight:400; color:var(--muted); }
/* in het winkelwagentje onder de gekozen opties */
.cart-line .cl-opm{ display:block; color:var(--ink); font-weight:600; }

/* de opmerking bij de productregel op het keukenscherm en in de bezorgapp */
.kd-opm{ display:block; font-weight:700; color:#8A5A12; }
.stop-items .s-opm{ color:#F5C97B; font-weight:700; }

/* ---------- v168: een bestaande bon wijzigen ----------
   De kassa maakt normaal een NIEUWE bestelling. Staat er ?bon=… in het adres, dan
   verandert hij een bon die al bij de keuken ligt. Dat verschil moet je zien zonder te
   lezen, anders tikt iemand een tweede bon aan voor dezelfde klant. Vandaar de amberen
   balk bovenaan de bon en de gele rand om het hele kassavlak. */
.pos-wijzigbalk{ display:flex; flex-wrap:wrap; align-items:center; gap:.5rem .7rem;
  background:rgba(245,167,59,.16); border:2px solid var(--amber, #F5A73B); border-radius:12px;
  padding:.6rem .8rem; margin:0 0 .6rem; font-size:.88rem; color:var(--ink); }
.pos-wijzigbalk b{ font-size:.95rem; }
.pos-wijzigbalk span{ flex:1 1 160px; color:var(--text); line-height:1.4; }
.pos-wijzigbalk button{ font:inherit; font-size:.8rem; font-weight:700; border:1.5px solid var(--line);
  background:#fff; color:var(--text); border-radius:8px; padding:.3rem .6rem; cursor:pointer; }
.pos-wijzigbalk button:hover{ border-color:var(--red); color:var(--red); }
body.is-wijzigbon .pos-bon{ outline:3px solid var(--amber, #F5A73B); outline-offset:4px; border-radius:14px; }
/* de bestaande regels van de bon staan er al op: een streepje ervoor scheelt tellen */
.pb-regel.is-bestaand .pb-info b::before{ content:"\2022 "; color:var(--amber, #F5A73B); font-weight:900; }
.pb-regel.is-kwijt .pb-info b{ color:var(--red); }
.pb-regel.is-kwijt .pb-info small{ color:var(--red); }

/* v168: op het keukenscherm zien dat een bon ná het printen nog gewijzigd is */
.k-gewijzigd{ display:inline-block; margin-left:.4rem; font-size:.72rem; font-weight:800;
  letter-spacing:.04em; text-transform:uppercase; color:#8A5A12; background:rgba(245,167,59,.2);
  border-radius:6px; padding:.05rem .35rem; vertical-align:.08em; }

/* ---------- bon (80mm) ---------- */
.bon-stage{ display:flex; gap:2.5rem; align-items:flex-start; flex-wrap:wrap; }
.bon{ width:302px; background:#fff; color:#111; font-family:"Courier New",ui-monospace,monospace;
  font-size:12.5px; line-height:1.45; padding:16px 14px 22px; box-shadow:var(--shadow-lg);
  flex:0 0 auto; }
.bon *{ font-family:inherit; }
.bon .b-center{ text-align:center; }
.bon .b-logo{ width:74px; margin:0 auto 6px; display:block; filter:grayscale(1) contrast(1.2); }
.bon h2{ font-size:17px; margin:0; letter-spacing:.5px; color:#111; font-family:inherit; }
.bon .b-sub{ font-size:11px; }
.bon hr{ border:0; border-top:1.5px dashed #111; margin:9px 0; }
.bon .b-type{ font-size:19px; font-weight:800; text-align:center; letter-spacing:2px;
  border:2.5px solid #111; padding:5px 0; margin:8px 0; }
.bon table{ width:100%; border-collapse:collapse; }
.bon td{ padding:1.5px 0; vertical-align:top; }
.bon td:last-child{ text-align:right; white-space:nowrap; }
.bon .b-tot td{ font-weight:800; font-size:14.5px; padding-top:5px; }
.bon .b-opm{ border:1.5px dashed #111; padding:6px 8px; margin-top:8px; }
.bon .b-foot{ text-align:center; font-size:11px; margin-top:12px; }
/* ---------- bon op A4 ----------
   Lobo print alles op de A4-printer die ze ook voor Foodticket gebruiken. Dezelfde
   letter als de kassabon (Courier), maar op een vel dat een grote bestelling in één
   keer kwijt kan — dat was de reden om over te stappen. Eén bestelling per vel. */
/* v129 — krapper bovenaan. De kop kostte 314 px van een vel van 1123 px: ruim een
   kwart van het papier ging op aan briefhoofd voordat het eerste product kwam. De
   marges zijn terug naar wat een laserprinter aankan (10 mm is ruim binnen het
   niet-bedrukbare randje van 5 mm), en de regelafstand iets strakker. */
.bon--a4{ width:210mm; min-height:297mm; padding:10mm 12mm 12mm; font-size:14.5px; line-height:1.45; }
/* v107 — donkerder afdrukken (wens Maico). Courier New heeft dunne stokken; op papier
   leest dat als grijs, zeker naast de vette koppen. Drie dingen samen lossen het op:
   echt zwart in plaats van #111, een dunne omtrek om elke letter (dat verdikt de stokken
   zonder alles vet te maken, zodat TOTAAL en de klantnaam nog steeds opvallen), en
   print-color-adjust zodat de browser de tekst niet zelf lichter maakt om inkt te sparen. */
.bon--a4, .bon--a4 h2{ color:#000; }
.bon--a4{ font-weight:700; -webkit-text-stroke:.2px currentColor;
  -webkit-print-color-adjust:exact; print-color-adjust:exact; }
/* v109 — alles wat nog grijzig was is nu gewoon zwart: de streepjeslijnen, de kaders om
   BEZORGEN / de betaalregel / de opmerking, de stippellijn tussen de bestelregels, en het
   logo (dat stond op grijswaarden met een beetje contrast en drukte daardoor grijs af). */
.bon--a4 hr{ border-top-color:#000; }
.bon--a4 .b-type, .bon--a4 .b-leg{ border-color:#000; }
.bon--a4 .b-opm{ border-color:#000; }
.bon--a4 #kb-items td{ border-bottom-color:#000; }
.bon--a4 .b-kop img, .bon--a4 .b-logo{ filter:grayscale(1) contrast(2.6) brightness(.85); }
/* v109 — nog een stap donker (Maico wilde meer). Het zwaartepunt ligt nu bij ECHT vet
   in plaats van bij de omtrek: vet werkt in elke browser, `-webkit-text-stroke` alleen in
   Chrome/Edge/Safari. De omtrek staat er nog bij als extraatje bovenop. Dat alles vet is
   kost geen leesbaarheid, want de rangorde op de bon zit in de lettergrootte (TOTAAL 19px,
   klantnaam 17px, BEZORGEN 27px) en niet in het gewicht. */
/* v129 — één kopregel: zaaknaam links, AFHALEN/BEZORGEN in het midden, bonnummer
   rechts. Stonden eerst onder elkaar en kostten samen 137 px; nu 76 px.
   De drie dingen die de keuken als eerste zoekt staan zo ook naast elkaar. */
.bon--a4 .b-kop{ display:flex; justify-content:space-between; align-items:center; gap:5mm; }
/* de naam-en-adreskolom mag niet over het BEZORGEN-kader heen lopen. Bewust géén
   overflow:hidden erbij: dan kapt hij af en lees je een half adres, en dat is erger
   dan een regel die net past. De tekst is kort genoeg gehouden. */
.bon--a4 .b-kop .b-center{ text-align:left; display:flex; gap:9px; align-items:center;
  min-width:0; flex:0 1 auto; }
.bon--a4 .b-kop .b-logo{ width:44px; margin:0; display:block; }
.bon--a4 .b-kop img{ width:44px; height:44px; filter:grayscale(1) contrast(1.2); flex:0 0 auto; }
.bon--a4 h2{ font-size:18px; line-height:1.15; }
/* op één regel houden: door de kopregel is de linkerkolom smaller geworden en brak het
   adres af, wat de kop weer hoger maakte dan nodig */
.bon--a4 .b-sub{ font-size:10.5px; white-space:nowrap; line-height:1.3; }
.bon--a4 .b-nr{ text-align:right; font-weight:800; font-size:24px; letter-spacing:1px; white-space:nowrap; }
.bon--a4 .b-nr small{ display:block; font-size:11px; font-weight:400; letter-spacing:0; line-height:1.3; }
/* BEZORGEN/AFHALEN blijft het grootst van de drie: dat is waar de keuken op stuurt */
.bon--a4 .b-kop .b-type{
  flex:0 1 auto; margin:0; font-size:22px; letter-spacing:2px; padding:5px 10px;
  white-space:nowrap; text-align:center;
}
.bon--a4 hr{ margin:7px 0; }
.bon--a4 #kb-meta, .bon--a4 #kb-klant{ font-size:13.5px; }
.bon--a4 #kb-klant b{ font-size:17px; }
.bon--a4 table{ table-layout:fixed; }
/* v129 — de regelafstand tussen de producten. Stond op 5 px boven én onder met een
   regelhoogte van 1,45: samen bijna 30 px lucht per product. Op 3 px met een strakkere
   regelhoogte blijft het goed te scannen (Courier vet, 15 px) en passen er ruim een
   derde meer regels op één vel — precies waar het om gaat bij een grote bestelling. */
.bon--a4 #kb-items td{ padding:3px 0; border-bottom:1px dotted #000; line-height:1.32; }
.bon--a4 #kb-items tr{ break-inside:avoid; page-break-inside:avoid; }
.bon--a4 #kb-items td:first-child{ font-size:15px; }
/* de gekozen opties mogen dichter op hun product kruipen, ze horen erbij */
.bon--a4 #kb-items td i{ line-height:1.25; }
.bon--a4 #kb-items td:last-child{ width:28mm; }
/* v128 — kopje per categorie op de A4-bon. De keuken werkt de bon van boven naar
   beneden af (bestek, patat, kroketten, snacks, …), en dan helpt het als je in één
   oogopslag ziet waar de frituurwaar begint. Bewust zwart en vet: het is een
   zwart-witprinter met toner, dus grijstinten vervagen. */
/* de cel beslaat beide kolommen en is dus óók :last-child; zonder deze regel erft hij
   de rechtsuitlijning van de prijskolom en zweeft het kopje boven de bedragen */
.bon #kb-items tr.b-groep td, .bon--a4 #kb-items tr.b-groep td{ text-align:left; }
/* v178: de bereidingswijze van een glutenvrij product, zwart-op-wit omgekeerd zodat
   hij op een gedrukte bon van een meter afstand opvalt — net als op de sticker */
#kb-items .bon-gv{
  display:inline-block; background:#000; color:#fff; font-weight:900;
  padding:.5mm 1.4mm; letter-spacing:.02em; -webkit-print-color-adjust:exact; print-color-adjust:exact;
}
.bon--a4 #kb-items tr.b-groep td{
  border-bottom:1.5px solid #000; padding:10px 0 2px; font-size:12px; font-weight:800;
  text-transform:uppercase; letter-spacing:.09em; color:#000;
}
/* het eerste kopje hoeft geen extra lucht boven zich */
.bon--a4 #kb-items tr.b-groep:first-child td{ padding-top:0; }
/* op de smalle keukenbon (niet-A4) net zo, maar kleiner */
.bon #kb-items tr.b-groep td{ font-weight:800; text-transform:uppercase; font-size:11px;
  letter-spacing:.07em; padding:6px 0 1px; border-bottom:1px solid #000; }
.bon--a4 #kb-totalen td{ padding:2px 0; }
.bon--a4 #kb-totalen td:last-child{ width:32mm; }
.bon--a4 .b-tot td{ font-size:19px; padding-top:7px; }
.bon--a4 .b-leg{ font-size:17px; border:2.5px solid #111; padding:6px 0; margin-top:8px; }
.bon--a4 .b-opm{ padding:9px 11px; margin-top:11px; font-size:14px; }
.bon--a4 .b-foot{ font-size:12px; margin-top:16px; }

/* v186 — twee soorten vel uit één opmaak: de KEUKENBON (zonder btw) en de FACTUUR die
   met de klant meegaat. Zelfde letter, zelfde zwart-wit, zelfde indeling — de factuur
   heeft alleen het tarief per regel, een btw-specificatie en de gegevens van LOBO erbij.
   Buiten een vel met .is-klant/.is-keuken (de historie in Beheer, het bonvoorbeeld)
   staat geen van beide extra's. */
.b-alleen-klant, .b-alleen-keuken, .bon .b-tr{ display:none; }
.is-klant .b-alleen-klant, .is-keuken .b-alleen-keuken{ display:block; }
.is-klant .bon .b-tr{ display:inline-block; }
.bon--a4 .b-soort{
  margin-left:auto; flex:0 0 auto; align-self:center; border:2px solid #000; padding:3px 9px;
  font-size:15px; font-weight:800; letter-spacing:2px; line-height:1.15; text-align:center; white-space:nowrap;
}
.bon--a4 .b-soort small{ display:block; font-size:11.5px; letter-spacing:.5px; }
/* het tarief vóór het bedrag: "21%  € 3,50" — de kolom wordt er op de factuur iets breder voor */
.bon--a4 .b-tr{ min-width:4ch; margin-right:1.4ch; text-align:right; font-size:12.5px; }
.is-klant .bon--a4 #kb-items td:last-child{ width:40mm; }
.is-klant .bon--a4 #kb-totalen td:last-child{ width:42mm; }
.bon--a4 .b-btw{ margin-top:12px; padding-top:7px; border-top:1.5px dashed #000; font-size:12.5px; line-height:1.4; }
.bon--a4 .b-btw h3{ margin:0 0 4px; font-size:13px; font-weight:800; letter-spacing:.06em; color:#000; }
.bon--a4 .b-btw table{ width:auto; table-layout:auto; }
.bon--a4 .b-btw th, .bon--a4 .b-btw td{ padding:1px 0 1px 7mm; text-align:right; white-space:nowrap; font-weight:800; }
.bon--a4 .b-btw th{ font-size:11px; letter-spacing:.08em; }
.bon--a4 .b-btw th:first-child, .bon--a4 .b-btw td:first-child{ padding-left:0; text-align:left; }
.bon--a4 .b-btw tr.b-btw-tot td{ border-top:1.5px solid #000; padding-top:3px; }
.bon--a4 .b-btw p{ margin:5px 0 0; }

@media print{
  /* Lobo print op de A4-printer die ook de Foodticket-bonnen uitdraait; een aparte
     bonprinter van 80 mm is er niet. Eén bestelling per vel — bij een grote bestelling
     loopt hij door op een tweede vel in plaats van dat er regels wegvallen.

     Alles behalve de bon gaat op `display:none` en niet op `visibility:hidden`. Dat
     laatste maakt het onzichtbaar maar houdt de ruimte bezet: op een rol papier merk je
     dat niet, op A4 rolt er een half pak lege vellen uit. */
  @page{ size:A4 portrait; margin:14mm 15mm; }
  body.bon-body{ background:#fff; }
  body.bon-body > *{ display:none !important; }
  body.bon-body > main{ display:block !important; max-width:none; width:auto;
    padding:0 !important; margin:0 !important; }
  body.bon-body main > *{ display:none !important; }
  body.bon-body main > .bon-stage{ display:block !important; gap:0; }
  body.bon-body .bon-stage > *{ display:none !important; }
  body.bon-body .bon-stage > .bon{ display:block !important; box-shadow:none;
    width:auto; min-height:0; padding:0; }
}

/* ---------- flow-diagram (hoe komt de bon binnen) ---------- */
.flow{ display:flex; flex-direction:column; gap:.65rem; margin-top:1.2rem; max-width:520px; }
.flow-step{ display:flex; gap:.9rem; align-items:flex-start; background:var(--card); border:1px solid var(--line);
  border-radius:14px; padding:.9rem 1.05rem; }
.dark .flow-step{ background:rgba(255,255,255,.05); border-color:rgba(255,255,255,.12); }
.flow-step .f-nr{ width:28px; height:28px; border-radius:50%; background:var(--brand); color:#04222E;
  font-weight:800; font-size:.9rem; display:flex; align-items:center; justify-content:center; flex:0 0 auto; }
.flow-step b{ display:block; color:var(--ink); font-size:.97rem; }
.dark .flow-step b{ color:#fff; }
.flow-step span{ font-size:.9rem; color:var(--muted); }
.dark .flow-step span{ color:#9FB4BD; }

/* ---------- klantportaal: statustrack + live kaart ---------- */
.os-track{ display:flex; flex-wrap:wrap; gap:.5rem; margin-top:1rem; }
.os-step{ flex:1; min-width:100px; text-align:center; padding:.55rem .5rem; border-radius:10px;
  background:#F1EEE6; color:var(--muted); font-weight:700; font-size:.82rem; border:1.5px solid transparent; }
.os-step.is-done{ background:rgba(35,189,108,.14); color:#157A47; }
.os-step.is-active{ background:var(--brand); color:#04222E; border-color:var(--brand); box-shadow:0 0 0 3px rgba(0,176,240,.2); }
.os-map-wrap{ border-radius:var(--r-md); overflow:hidden; border:1px solid var(--line); margin-top:.8rem; height:300px;
  /* v126 — Leaflet geeft zijn eigen lagen z-index 400 tot 700. Zonder eigen stapellaag
     concurreren die rechtstreeks met de rest van de pagina, en dan schuift de kaart bij
     het scrollen dwars over de plakkende publiceerbalk (z-index 30) en de sitebalk
     (z-index 60) heen. Een eigen stapelcontext op z-index 0 houdt alles van de kaart
     binnen dit kader — de kaart blijft gewoon staan waar hij hoort. */
  position:relative; z-index:0; isolation:isolate; }
.os-map-wrap iframe, .os-map-wrap #actief-map{ width:100%; height:100%; border:0; display:block; background:#EAF2F5; }
/* v97: verwachte aankomst boven de kaart + eigen markers op de Leaflet-kaart */
.os-eta{ display:flex; align-items:baseline; gap:.7rem; margin:.2rem 0 .7rem; }
.os-eta-tijd{ font-family:var(--font-display, inherit); font-size:2.2rem; line-height:1; color:var(--ink); letter-spacing:.02em }
.os-eta-sub{ color:var(--muted); font-weight:700; font-size:.9rem }
.os-map-noot{ color:var(--muted); font-size:.8rem; margin:.5rem 0 0 }
.os-marker{ display:grid; place-items:center; width:34px; height:34px; border-radius:50%; background:#12242C; color:#fff;
  border:3px solid #fff; box-shadow:0 4px 14px rgba(11,21,26,.35) }
.os-marker svg{ width:18px; height:18px }
.os-marker--huis{ background:var(--brand); color:#04222E }
.os-marker--bezorger{ background:#C62828 }
.leaflet-container{ font:inherit }

/* ---------- keuken.html: live orderscherm ---------- */
/* Bonnenrail: vier bonnen naast elkaar (oudste links), en voor de volgende veeg je naar
   rechts — zoals een bonnenrail boven de bakwand. Bewust géén rijen onder elkaar: een
   lange bestelling maakt zijn eigen kolom langer, maar duwt de rest niet uit beeld.
   Op een smaller scherm worden de kolommen niet smaller dan 270px (anders wordt de bon
   te krap) — dan schuiven er gewoon minder tegelijk in beeld. */
/* Kolommen, zoals de zaak gewend is van het oude kassascherm: lezen van boven naar
   beneden en dan een kolom naar rechts. Vijf kaarten onder elkaar, allemaal even hoog,
   en alles schaalt mee met het scherm: op een lager scherm worden het er vanzelf vier
   of drie. Wat niet meer past schuift naar rechts en is met een veeg te bereiken. */
:root{ --k-rijen:5; --k-hoogte:calc(100vh - 200px); }
@media (max-height: 900px){ :root{ --k-rijen:4; } }
@media (max-height: 700px){ :root{ --k-rijen:3; } }
.kitchen-grid{ height:var(--k-hoogte); min-height:380px; margin-top:1.1rem;
  /* de helft breder dan de eerste opzet (was 272px): alles moet in één oogopslag
     leesbaar zijn, ook "Bezorger…" en een lang adres. Minder kolommen in beeld is
     prima — leesbaarheid wint van dichtheid (wens Maico). */
  columns:400px 5; column-gap:.9rem; column-fill:auto; overflow-x:auto; overflow-y:hidden;
  padding-bottom:.4rem; }
.kitchen-grid > *{ break-inside:avoid; -webkit-column-break-inside:avoid; margin-bottom:.8rem;
  /* vaste hoogte: precies --k-rijen kaarten per kolom, tot op de pixel */
  height:calc((var(--k-hoogte) - (var(--k-rijen) - 1) * .8rem - 2px) / var(--k-rijen));
  overflow:hidden; }
/* v143: de rand in de kleur van het type zit om de héle kaart (wens keuken/Bas):
   oranje = afhalen, blauw = bezorgen — niet meer alleen een streepje links. Bewust
   twee eigen tinten, dieper dan het amber en het hemelsblauw van het tijdblok, zodat
   de status (Bon geprint = amber, In de keuken = hemelsblauw) er los van te lezen blijft. */
:root{ --k-rand-afhalen:#F0701C; --k-rand-bezorgen:#2A7DE1; }
.k-card{ background:var(--card); border:4px solid var(--k-rand-afhalen); border-radius:var(--r-md); padding:1.1rem 1.2rem;
  box-shadow:var(--shadow-md); }
.k-card.k-bezorgen{ border-color:var(--k-rand-bezorgen); }
.k-card.k-nieuw{ border-color:var(--red); }
.k-card-top{ display:flex; justify-content:space-between; align-items:flex-start; gap:.6rem; margin-bottom:.5rem; }
.k-card-top b{ font-size:1.05rem; color:var(--ink); }
.k-card-top small{ display:block; color:var(--muted); font-size:.8rem; }
.k-pill{ font-size:.72rem; font-weight:800; text-transform:uppercase; letter-spacing:.04em; padding:.25rem .6rem;
  border-radius:999px; background:#F1EEE6; color:var(--muted); white-space:nowrap; }
.k-card ul{ list-style:none; margin:.6rem 0; padding:0; font-size:.92rem; color:var(--text); }
.k-card ul li{ padding:.15rem 0; }
.k-card-actions{ display:flex; gap:.5rem; margin-top:.8rem; flex-wrap:wrap; }
/* keuzegroepen op de bestelpagina: samenvattingsregel + uitklappaneel */
.oi-keuze-kop{ display:block; width:100%; text-align:left; background:rgba(0,176,240,.07);
  border:1px solid rgba(0,176,240,.28); border-radius:var(--r-sm); padding:.45rem .65rem;
  margin:.4rem 0 0; cursor:pointer; font:inherit; font-size:.84rem; line-height:1.35; color:var(--text); }
.oi-keuze-kop:hover{ border-color:var(--brand); }
/* v245: het potlood rechts — de regel is aanklikbaar */
.oi-keuze-kop{ position:relative; padding-right:2.1rem; }
.oi-keuze-pen{ position:absolute; right:.55rem; top:50%; transform:translateY(-50%); display:grid; place-items:center;
  width:1.35rem; height:1.35rem; color:var(--brand-ink); pointer-events:none; }
.oi-keuze-pen svg{ width:16px; height:16px; }
.oi-keuze-kop:hover .oi-keuze-pen{ color:var(--brand); }
.oi-keuze-kop.is-onaf .oi-keuze-pen{ color:#9A6410; }
.oi-keuze-kop b{ display:block; font-size:.72rem; text-transform:uppercase; letter-spacing:.06em;
  color:var(--brand-ink); }
.oi-keuze-kop span{ color:var(--muted); }
.oi-keuze-kop.is-onaf{ background:rgba(245,167,59,.14); border-color:rgba(245,167,59,.5); }
.oi-keuze-kop.is-onaf b{ color:#9A6410; }
/* v208 (Bas, 26 sep: "doorscrollen gaat weer RUK") — het keuzepaneel is geen eigen scrollvak
   meer. Tot v207 had het een eigen rolbalk (max. 420 px hoog) en stond het in de tekstkolom.
   Sinds v207 gaat het vaker open (een tik op + zonder keuze), en dan ving dat vak het scrollen
   van de pagina op — op een telefoon zat er 1.661 px aan sauzen en bakjes in een vak van 420 px —
   en schoof de + onder de hele lijst, buiten beeld. (v183 had het vak op overscroll-behavior:auto
   gezet; dat hielp alleen als het vak al helemaal onderaan was.)
   Nu hoort het paneel bij de kaart zelf: onder de regel met de prijs en de +, over de volle
   breedte, zo hoog als nodig. De pagina scrolt er gewoon doorheen, en de + blijft staan waar je
   tikte. Onderaan het paneel staat nog een knop "In de mand". */
.oi-keuzes{ margin:.1rem 0 .1rem; display:grid; gap:.7rem; min-width:0; }
.order-item > .oi-keuzes{ order:5; flex:1 1 100%; width:100%; }
.order-item:has(.oi-keuzes:not([hidden])){ flex-wrap:wrap; align-items:flex-start; }
.oi-keuzes-klaar{
  justify-self:start; display:inline-flex; align-items:center; gap:.4rem; margin-top:.1rem;
  border:0; border-radius:999px; background:var(--ink); color:#fff; font:inherit; font-weight:800;
  font-size:.9rem; padding:.6rem 1.15rem; cursor:pointer; transition:background .15s ease;
}
.oi-keuzes-klaar:hover{ background:var(--brand); color:#04222E; }
.oi-keuzes-klaar.is-wacht, .oi-keuzes-klaar.is-wacht:hover{ background:#C3CBCF; color:#fff; }
@media (max-width:640px){ .oi-keuzes-klaar{ justify-self:stretch; justify-content:center; } }
/* "+ 15 meer" bij een lange lijst vrije extra's (21 bakjes saus) */
.keuze-meer{
  display:inline-flex; align-items:center; padding:.34rem .7rem; border:1.5px dashed rgba(0,176,240,.55);
  border-radius:999px; background:none; font:inherit; font-size:.83rem; font-weight:700;
  color:var(--brand-ink); cursor:pointer;
}
.keuze-meer:hover{ border-style:solid; border-color:var(--brand); }

/* allergenenfilter in de filterbalk */
.allerg-tel{ margin-left:.35rem; min-width:1.15rem; height:1.15rem; display:inline-flex;
  align-items:center; justify-content:center; border-radius:999px; background:var(--brand);
  color:#fff; font-size:.68rem; font-weight:800; }
.allerg-paneel{ margin:.6rem 0 .2rem; padding:.8rem .9rem; border:1px solid var(--line);
  border-radius:var(--r-sm); background:var(--card); }
.allerg-uitleg{ margin:0 0 .6rem; font-size:.8rem; line-height:1.45; color:var(--muted); }
.allerg-uitleg b{ color:var(--ink); }
.allerg-paneel .allerg-ic{ display:inline-flex; width:14px; height:14px; }
.allerg-paneel .allerg-ic svg{ width:100%; height:100%; }

.keuze-groep{ border:0; padding:0; margin:0; }
.keuze-groep legend{ display:flex; align-items:center; gap:.4rem; font-size:.72rem; font-weight:800;
  text-transform:uppercase; letter-spacing:.06em; color:var(--muted); padding:0 0 .35rem; }
.keuze-verplicht{ font-style:normal; font-size:.62rem; letter-spacing:.08em; padding:.1rem .34rem;
  border-radius:999px; background:var(--amber); color:#3B2A08; }

/* chips: één tik = aan of uit. Gevuld betekent "zit erop". */
.keuze-chips{ display:flex; flex-wrap:wrap; gap:.34rem; }
.keuze-chip{ display:inline-flex; align-items:center; gap:.28rem; padding:.34rem .62rem;
  border:1.5px solid var(--line); border-radius:999px; background:var(--card);
  font-size:.83rem; line-height:1.2; cursor:pointer; user-select:none;
  transition:background .12s ease, border-color .12s ease, color .12s ease; }
.keuze-chip input{ position:absolute; opacity:0; width:1px; height:1px; margin:0; }
.keuze-chip:hover{ border-color:var(--brand); }
.keuze-chip.is-aan{ background:var(--brand); border-color:var(--brand); color:#fff; font-weight:700; }
/* ingrediënt dat op is: grijs, doorgestreept en onklikbaar — de pill in Beheer bepaalt dit */
.keuze-chip.is-op{ opacity:.45; pointer-events:none; background:#EFEDE7; border-style:dashed; }
.keuze-chip.is-op .chip-tekst{ text-decoration:line-through; }
.keuze-chip.is-op::after{ content:'op'; font-size:.68rem; font-weight:800; text-transform:uppercase;
  letter-spacing:.05em; color:#A31515; margin-left:.15rem; }
.keuze-chip.is-aan .chip-tekst::before{ content:'✓'; margin-right:.28rem; font-weight:800; }
.keuze-chip input:focus-visible + .chip-tekst{ outline:2px solid var(--ink); outline-offset:3px; border-radius:4px; }
.chip-plus{ font-style:normal; font-size:.74rem; font-weight:800; color:var(--brand-ink); }
.keuze-chip.is-aan .chip-plus{ color:#EAF8FF; }
.keuze-chip.heeft-prijs:not(.is-aan){ border-style:dashed; }
.keuze-herstel{ margin-top:.4rem; background:none; border:0; padding:.1rem 0; font:inherit;
  font-size:.76rem; font-weight:700; color:var(--brand-ink); cursor:pointer; text-decoration:underline; }

/* v207 — elke keuzevraag beantwoorden (wens Maico). Wie op + tikt zonder te kiezen, ziet de
   vraag in dezelfde rode gearceerde band als afhalen/bezorgen in stap 2, en de + grijs tot er
   gekozen is. De saus krijgt geen rood maar een blauwe wijzer (Bas: "wijs ze er wel op"). */
.keuze-groep.is-mist, .keuze-groep.is-wijs{ padding:.55rem .65rem .6rem; border-radius:12px; }
.keuze-groep.is-mist{
  border:4px solid transparent;
  background:linear-gradient(#fff4f1, #fff4f1) padding-box,
             repeating-linear-gradient(45deg, #c0392b 0 5px, #f6cdc6 5px 10px) border-box;
}
.keuze-groep.is-mist legend{ color:#9b2d20; background:#fff4f1; border-radius:6px; padding:.15rem .4rem; margin-left:-.2rem; }
.keuze-groep.is-mist .keuze-verplicht{ background:#c0392b; color:#fff; }
.keuze-groep.is-wijs{ border:2px solid var(--brand); background:rgba(0,176,240,.06); }
.keuze-groep.is-wijs legend{ color:var(--brand-ink); padding:0 .35rem .1rem; margin-left:-.15rem; }
.keuze-wijs{ margin:.5rem 0 0; font-size:.8rem; font-weight:700; color:var(--brand-ink); line-height:1.4; }
.keuze-wijs[hidden]{ display:none; }
.keuze-groep.is-tik{ animation:seg-tik .42s ease 2; }
@media (prefers-reduced-motion: reduce){ .keuze-groep.is-tik{ animation:none; } }
.add-btn.is-wacht{ background:#C3CBCF; color:#fff; box-shadow:none; }
.add-btn.is-wacht:hover{ background:#AEB8BD; color:#fff; transform:none; }
.oi-opm-tip{ margin:.35rem 0 0; max-width:420px; padding:.4rem .6rem; border-radius:var(--r-sm);
  background:rgba(0,176,240,.08); border:1px solid rgba(0,176,240,.3); font-size:.78rem; line-height:1.4; color:var(--text); }
.oi-opm-tip[hidden]{ display:none; }
.oi-opm-tip-knop{ font:inherit; font-weight:800; color:var(--brand-ink); background:none; border:0; padding:0;
  cursor:pointer; text-decoration:underline; }

.kitchen-empty{ text-align:center; color:var(--muted); padding:3rem 1rem; font-size:1.05rem; }

/* balietablet: de afgesproken betaalwijze (telefonisch) licht op */
.bz-af-wijze.is-afspraak{ outline:3px solid #2E6FA3; outline-offset:2px; }

/* klein rood 18+-kenmerk op de keukenkaart (afhalen met alcohol) */
.k-18{ display:inline-block; margin-left:.45rem; padding:.02rem .45rem; border-radius:999px;
  background:#B3261E; color:#fff; font-size:.7rem; font-weight:900; letter-spacing:.04em;
  vertical-align:.08em; }

/* 18+ — moet niet te missen zijn, want de bezorger staat straks aan de deur */
.k-legitimatie{ margin:.5rem 0 0; padding:.4rem .7rem; border-radius:8px; font-size:.82rem;
  font-weight:800; letter-spacing:.04em; background:var(--red); color:#fff; text-align:center; }
.b-leg{ margin-top:.4rem; text-align:center; font-weight:700; }
.stop-legitimatie{ margin:.35rem 0 0; padding:.35rem .6rem; border-radius:8px;
  background:rgba(228,87,61,.22); color:#FFD3C9; font-size:.82rem; font-weight:800; }

/* bestelregel op het keukenscherm: naam boven, samenstelling eronder */
.k-item-kop{ display:block; font-weight:700; color:var(--ink); }
.k-item-opties{ display:block; font-size:.84rem; color:var(--muted); line-height:1.35; padding-left:.9rem; }
.k-item-opties b{ color:var(--red); font-weight:800; }

/* annuleren vanuit de keuken */
.btn--gevaar{ background:var(--red); border-color:var(--red); color:#fff; }
.btn--gevaar:hover{ background:#C8452D; border-color:#C8452D; color:#fff; }
.k-dialog{ border:0; border-radius:var(--r-md); padding:1.5rem 1.6rem; max-width:520px; width:calc(100% - 2rem);
  box-shadow:var(--shadow-lg); color:var(--text); background:var(--card); }
.k-dialog::backdrop{ background:rgba(11,21,26,.55); }
.ka-keuzes{ display:grid; gap:.45rem; }
.ka-keuze{ display:flex; align-items:flex-start; gap:.6rem; padding:.7rem .85rem; border:1.5px solid var(--line);
  border-radius:var(--r-sm); cursor:pointer; font-size:.95rem; line-height:1.35; }
.ka-keuze:hover{ border-color:var(--brand); }
.ka-keuze input{ margin-top:.15rem; accent-color:var(--brand); flex:none; }
.ka-keuze.is-aan{ border-color:var(--brand); background:rgba(0,176,240,.07); }
.ka-voorbeeld{ margin:.9rem 0 0; padding:.7rem .85rem; border-radius:var(--r-sm); font-size:.88rem;
  background:rgba(228,87,61,.1); color:var(--text); min-height:1.2rem; }

/* ---------- ingrediënten op/beschikbaar (beheer) ---------- */
.ing-pills{ display:flex; flex-wrap:wrap; gap:.55rem; }
.ing-pill{ display:flex; flex-direction:column; align-items:flex-start; gap:.1rem; cursor:pointer;
  border:2px solid var(--line); border-radius:14px; background:var(--card); padding:.55rem .85rem;
  min-width:130px; text-align:left; transition:border-color .12s, background .12s; }
.ing-pill:hover{ border-color:var(--brand); }
.ing-pill b{ font-size:.95rem; color:var(--ink); }
.ing-pill small{ font-size:.74rem; color:var(--muted); }
.ing-pill.is-op{ border-color:rgba(200,42,42,.55); background:rgba(200,42,42,.08); }
.ing-pill.is-op b{ color:#A31515; text-decoration:line-through; }
.ing-pill.is-op small{ color:#A31515; font-weight:700; }

/* ---------- productdialoog (beheer) ---------- */
.pd-keuzes-blok{ border:1px solid var(--line); border-radius:var(--r-sm); padding:.7rem .85rem; background:#FCFBF8; }
.pd-keuzes-blok b{ font-size:.88rem; color:var(--ink); }
.pd-keuzes-blok p{ margin:.25rem 0 0; font-size:.85rem; color:var(--muted); line-height:1.45; }
.pd-keuzes-blok #pd-gekozen{ color:var(--text); font-weight:600; }
/* ---------- allergenen per product (beheer, v228) ---------- */
.pd-allerg-blok{ margin-bottom:.8rem; }
.al-dlg{ max-width:640px; }
.al-dlg h2{ font-size:1.25rem; margin:0 0 .25rem; }
.al-stand{ margin:0 0 .8rem; padding:.6rem .75rem; border-radius:10px; font-size:.86rem; line-height:1.45;
  background:rgba(0,176,240,.08); color:var(--text); }
.al-stand.is-zaak{ background:rgba(35,189,108,.12); color:#0f5132; font-weight:600; }
.al-stand.is-leeg{ background:rgba(245,167,59,.14); color:#5A3D02; font-weight:600; }
.al-vak{ margin-top:.5rem; }
.al-raster{ display:grid; grid-template-columns:repeat(auto-fill, minmax(190px, 1fr)); gap:.3rem .8rem; }
.al-vink{ display:flex; align-items:center; gap:.5rem; padding:.35rem .45rem; border-radius:9px; cursor:pointer;
  font-size:.9rem; color:var(--ink); line-height:1.25; }
.al-vink:hover{ background:rgba(0,176,240,.07); }
.al-vink input{ width:1.1rem; height:1.1rem; accent-color:var(--brand); flex:none; margin:0; }
.al-ic{ display:inline-flex; width:1.25rem; height:1.25rem; flex:none; color:var(--muted); }
.al-ic svg{ width:100%; height:100%; }
.al-vink input:checked ~ .al-ic{ color:var(--ink); }
.al-vink input:checked ~ .al-naam{ font-weight:700; }
.al-geen{ margin-top:.4rem; border-top:1px solid var(--line); border-radius:0; padding-top:.6rem; }
.al-noot{ margin:.7rem 0 0; font-size:.82rem; color:var(--muted); }
.al-knop.is-leeg{ border-color:#E8A02A; color:#8a4b00; }
@media (max-width:520px){ .al-raster{ grid-template-columns:1fr 1fr; } .al-vink{ font-size:.85rem; } }

/* ---------- keuzes per gerecht (beheer, v222) ---------- */
.kz-dlg{ max-width:660px; }
.kz-dlg h2{ font-size:1.25rem; margin:0 0 .25rem; }
.kz-uitleg{ margin:0 0 .9rem; font-size:.88rem; color:var(--muted); line-height:1.45; }
.kz-uitleg b{ color:var(--text); }
.kz-vak{ max-height:52vh; overflow:auto; margin:0 -.5rem; padding:0 .5rem; }
.kz-leeg{ margin:.4rem 0; font-size:.9rem; color:var(--muted); }
.kz-blok{ padding:.85rem 0; border-top:1px solid var(--line); }
.kz-blok:first-child{ border-top:0; padding-top:.1rem; }
.kz-blok-kop{ display:flex; align-items:center; gap:.6rem; flex-wrap:wrap; }
.kz-titel{ flex:1; min-width:150px; color:var(--ink); }
.kz-titel b{ font-size:1rem; }
.kz-titel small{ color:var(--muted); font-size:.82rem; margin-left:.25rem; }
.kz-info{ margin:.3rem 0 0; font-size:.82rem; color:var(--muted); line-height:1.4; }
.kz-eigen{ color:#157A47; font-weight:700; }
.kz-link{ border:0; background:none; padding:.15rem 0; font:inherit; font-size:.85rem; font-weight:700;
  color:var(--brand-ink); text-decoration:underline; text-underline-offset:2px; cursor:pointer;
  display:inline-flex; align-items:center; gap:.3rem; }
.kz-link:hover{ color:var(--ink); }
.kz-link svg{ width:1em; height:1em; flex:none; }
.kz-rijen{ display:grid; gap:.1rem; margin:.45rem 0 0; }
.kz-rij{ display:flex; align-items:center; gap:.6rem; padding:.2rem .5rem; border-radius:10px; flex-wrap:wrap; min-height:2.35rem; }
.kz-rijen > .kz-rij:hover{ background:rgba(0,176,240,.06); }
.kz-rij input[type=checkbox]{ width:1.15rem; height:1.15rem; accent-color:var(--brand); flex:none; margin:0; cursor:pointer; }
.kz-rij input[type=checkbox]:disabled{ cursor:default; }
.kz-naam{ flex:1; min-width:130px; font-weight:600; color:var(--ink); font-size:.95rem; cursor:pointer; line-height:1.3; }
.kz-rij.is-uit .kz-naam{ color:var(--muted); font-weight:500; }
.kz-rij.is-vast .kz-naam{ color:var(--muted); cursor:default; }
.kz-vast-noot{ color:var(--muted); font-size:.82rem; white-space:nowrap; }
.kz-prijs{ display:inline-flex; align-items:center; gap:.35rem; white-space:nowrap; color:var(--muted); font-size:.85rem; }
.kz-prijs input, .kz-tekst{ border:1.5px solid var(--line); border-radius:9px; padding:.42rem .6rem; background:#fff;
  font:inherit; font-size:.9rem; color:var(--text); min-height:2.05rem; }
.kz-dlg:focus{ outline:none; }
.kz-prijs input{ padding:.3rem .6rem; }
.kz-prijs input{ width:78px; text-align:right; font-variant-numeric:tabular-nums; }
.kz-prijs input:focus, .kz-tekst:focus{ border-color:var(--brand); }
.kz-rij.is-uit .kz-prijs input{ background:#F4F2EC; }
.kz-std{ border:1.5px solid var(--line); background:#fff; color:var(--muted); border-radius:999px; padding:.22rem .65rem;
  font:inherit; font-size:.78rem; font-weight:700; cursor:pointer; display:inline-flex; align-items:center; gap:.25rem; white-space:nowrap; }
.kz-std svg{ width:.95em; height:.95em; flex:none; }
.kz-std:hover{ border-color:var(--brand); color:var(--ink); }
.kz-std.is-aan{ background:rgba(35,189,108,.14); border-color:rgba(21,122,71,.5); color:#157A47; }
.kz-uit-knop{ margin:.35rem 0 0 .5rem; }
.kz-erbij{ margin-top:.45rem; padding:.45rem .5rem; background:#FCFBF8; border:1px dashed var(--line); }
.kz-erbij-naam{ flex:1; min-width:150px; }
.kz-zoek{ width:100%; margin:0 0 .6rem; }
.kz-kandidaat{ padding:.5rem; border-bottom:1px solid var(--line); border-radius:0; flex-wrap:nowrap; }
.kz-kandidaat .kz-naam{ cursor:default; min-width:0; }
.kz-kandidaat .kz-naam b{ display:block; }
.kz-kandidaat .kz-naam small{ display:block; color:var(--muted); font-weight:500; font-size:.8rem; margin-top:.1rem; }
.kz-balk{ display:flex; align-items:center; gap:1rem; flex-wrap:wrap; margin:0 0 .4rem; }
.kz-teller{ margin-left:auto; font-size:.82rem; color:var(--muted); font-variant-numeric:tabular-nums; }
.kz-tussenkop{ margin:.8rem 0 0; font-weight:700; font-size:.88rem; color:var(--ink); }
.kz-nieuw-rij{ padding-left:0; padding-right:0; }
.kz-nog-een{ margin:.35rem 0 0; }
.kz-soort{ display:grid; gap:.35rem; margin:1rem 0 .2rem; }
.kz-soort label{ display:flex; align-items:flex-start; gap:.55rem; cursor:pointer; font-size:.95rem; line-height:1.35; }
.kz-soort input{ accent-color:var(--brand); margin-top:.2rem; flex:none; }
.kz-soort small{ display:block; color:var(--muted); font-size:.82rem; }
.kz-voet{ display:flex; gap:.6rem; flex-wrap:wrap; margin-top:1rem; padding-top:.9rem; border-top:1px solid var(--line); }
.kz-voet .kz-klaar{ margin-left:auto; }
.kz-voet .btn svg{ width:1em; height:1em; flex:none; }
@media (max-width:520px){
  .kz-dlg{ padding:1.1rem 1rem; }
  .kz-vak{ max-height:46vh; }
  .kz-voet .kz-klaar{ margin-left:0; flex:1 1 100%; justify-content:center; }
}

/* ---------- kasafsluiting (beheer) ---------- */
.kas-kaart{ background:var(--card); border:1px solid var(--line); border-radius:var(--r-md);
  padding:1.1rem 1.2rem; margin-bottom:1rem; box-shadow:var(--shadow-md); }
.kas-kop{ display:flex; justify-content:space-between; align-items:baseline; gap:.8rem;
  margin-bottom:.6rem; }
.kas-kop b{ font-size:1.1rem; color:var(--ink); }
.kas-kop span{ font-size:.85rem; color:var(--muted); }
.kas-tabel{ width:100%; border-collapse:collapse; font-size:.95rem; }
.kas-tabel td{ padding:.32rem 0; border-bottom:1px solid var(--line); vertical-align:top; }
.kas-tabel td:last-child{ text-align:right; white-space:nowrap; font-variant-numeric:tabular-nums; }
.kas-tabel small{ display:block; color:var(--muted); font-size:.78rem; }
.kas-tabel .kas-verwacht td{ font-weight:800; font-size:1.05rem; color:var(--ink);
  border-bottom:2px solid var(--ink); padding-top:.5rem; }
.kas-tabel .kas-los td{ color:var(--muted); }
.kas-invoer{ display:flex; gap:.8rem; flex-wrap:wrap; margin-top:.9rem; }
.kas-invoer .field{ min-width:150px; }
.kas-invoer .field.grow{ flex:1; min-width:220px; }
/* v173: afromen — geld dat de zaak tussendoor uit de tas haalt. De regel in de tabel
   staat in amber en met een minteken, zodat je in één oogopslag ziet dat hij ergens
   ánders heen gaat dan de rest van de tabel. */
.kas-tabel tr.kas-afgeroomd td{ color:#8A5A12; }
.kas-tabel tr.kas-afgeroomd td:last-child{ font-weight:800; }
.kas-afromen{ margin-top:.6rem; border-top:1px solid var(--line); padding-top:.5rem; }
.kas-afromen > summary{ cursor:pointer; font-size:.85rem; font-weight:700; color:#8A5A12; }
.kas-afromen-inhoud{ padding-top:.5rem; }
.kas-afroomlijst{ display:flex; flex-direction:column; gap:.3rem; margin-bottom:.4rem; }
.kas-afroomrij{ display:flex; align-items:center; gap:.6rem; font-size:.88rem; flex-wrap:wrap; }
.kas-afroomrij > span:first-child{ color:var(--muted); min-width:3.2em; }
.kas-afroomrij b{ font-variant-numeric:tabular-nums; }
.kas-afroomnot{ color:var(--muted); flex:1; min-width:80px; }
.kas-afroomleeg{ margin:0; font-size:.86rem; color:var(--muted); }

.kas-verschil{ margin-top:.6rem; font-weight:700; font-size:.98rem; min-height:1.2rem; }
.kas-verschil.is-goed{ color:#157A47; }
.kas-verschil.is-kort{ color:#A31515; }
.kas-verschil.is-over{ color:#9A6215; }
.kas-ritten{ margin-top:.9rem; border-top:1px solid var(--line); padding-top:.7rem; }
.kas-ritten summary{ cursor:pointer; font-weight:700; font-size:.9rem; color:var(--brand-ink); }
.kas-ritten-inhoud{ margin-top:.6rem; overflow-x:auto; }
.kas-rittentabel{ font-size:.88rem; }
.kas-rittentabel th{ text-align:left; color:var(--muted); font-weight:700; padding:.3rem 0; }
.kas-rittentabel td:last-child, .kas-rittentabel th:last-child{ text-align:right; }
.kas-rittentabel td:nth-child(n+4), .kas-rittentabel th:nth-child(n+4){ text-align:right; white-space:nowrap; }

/* ---------- afrekenen bij de deur (bezorger-app) ----------
   Grote vlakken en grote cijfers: dit gebeurt buiten, in het donker, met een tas in de
   andere hand. Alles moet met één duim te bedienen zijn. */
.bz-af-klant{ margin:0 0 .9rem; color:var(--muted); font-size:.92rem; }
.bz-af-bedrag{ display:flex; justify-content:space-between; align-items:baseline; gap:.8rem;
  padding:.75rem .95rem; border-radius:var(--r-sm); background:rgba(0,176,240,.09);
  font-size:.95rem; color:var(--text); }
.bz-af-bedrag b{ font-size:1.7rem; color:var(--ink); }
.bz-af-melding{ margin-top:.9rem; padding:.8rem .95rem; border-radius:var(--r-sm);
  background:rgba(35,189,108,.13); color:#136F42; font-weight:600; font-size:.95rem; }
.bz-af-wijzen{ display:grid; grid-template-columns:1fr 1fr; gap:.7rem; margin-top:1rem; }
.bz-af-wijze{ padding:1.1rem .6rem; border:2px solid var(--line); border-radius:var(--r-sm);
  background:var(--card); color:var(--ink); font-weight:800; font-size:1.15rem; cursor:pointer; }
.bz-af-wijze:hover{ border-color:var(--brand); }
.bz-af-wijze.is-aan{ border-color:var(--brand); background:var(--brand); color:#04222E; }
.bz-af-label{ display:block; margin:1.1rem 0 .35rem; font-weight:700; font-size:.92rem; color:var(--ink); }
.bz-af-veld{ display:flex; align-items:center; gap:.5rem; border:2px solid var(--line);
  border-radius:var(--r-sm); padding:.5rem .8rem; }
.bz-af-veld:focus-within{ border-color:var(--brand); }
.bz-af-veld span{ font-size:1.4rem; font-weight:800; color:var(--muted); }
.bz-af-veld input{ flex:1; border:0; outline:0; background:none; font:inherit; font-size:1.7rem;
  font-weight:800; color:var(--ink); width:100%; padding:.1rem 0; }
.bz-af-snel{ display:flex; flex-wrap:wrap; gap:.45rem; margin-top:.6rem; }
.bz-af-snel button{ border:1.5px solid var(--line); border-radius:999px; background:var(--card);
  color:var(--ink); font-weight:700; font-size:.95rem; padding:.45rem .9rem; cursor:pointer; }
.bz-af-snel button:hover{ border-color:var(--brand); }
.bz-af-uitkomst{ margin-top:.8rem; font-size:1.05rem; font-weight:700; color:var(--ink); min-height:1.4rem; }
.bz-af-uitkomst small{ display:block; font-weight:500; font-size:.85rem; color:var(--muted); }
/* "maak er 28 van": het bedrag waarop je afrekent, los van wat de klant geeft */
.bz-af-afreken{ display:flex; flex-wrap:wrap; gap:.45rem; }
.bz-af-chip{ border:2px solid var(--line); border-radius:999px; background:var(--card); color:var(--ink);
  font-weight:800; font-size:1rem; padding:.6rem 1rem; cursor:pointer; min-height:44px; }
.bz-af-chip:hover{ border-color:var(--brand); }
.bz-af-chip.is-aan{ border-color:#23BD6C; background:#23BD6C; color:#fff; }
.bz-af-chip--anders{ font-weight:700; color:var(--muted); }
.bz-af-chip--anders.is-aan{ color:#fff; }
.bz-af-acties{ display:flex; gap:.6rem; justify-content:flex-end; margin-top:1.3rem; flex-wrap:wrap; }
.bz-af-acties .btn{ min-height:48px; }
@media (max-width:420px){
  .bz-af-acties{ flex-direction:column-reverse; }
  .bz-af-acties .btn{ width:100%; }
}
.ka-voorbeeld:empty{ display:none; }

.k-print{ display:none; }
@media print{
  /* zelfde reden als hierboven: het keukenscherm is lang, dus alles wat niet de bon is
     moet écht weg en niet alleen onzichtbaar */
  @page{ size:A4 portrait; margin:14mm 15mm; }
  body.printing-ticket{ background:#fff; }
  body.printing-ticket > *{ display:none !important; }
  body.printing-ticket .k-print{ display:block !important; position:static; width:auto; }
  body.printing-ticket .bon--a4{ width:auto; min-height:0; padding:0; box-shadow:none;
    /* iPad/Safari drukt achtergrondkleuren standaard niet af — zonder dit verdwijnt
       de zwarte AFHALEN/BEZORGEN-balk van de bon */
    -webkit-print-color-adjust:exact; print-color-adjust:exact; }
}

/* ---------- iDEAL-betaaldemo (bestellen.html) ---------- */
.ideal-modal{ position:fixed; inset:0; background:rgba(11,21,26,.55); z-index:200;
  display:flex; align-items:center; justify-content:center; padding:1.2rem; }
.ideal-modal-card{ background:var(--card); border-radius:var(--r-lg); padding:1.8rem 1.6rem;
  max-width:380px; width:100%; box-shadow:var(--shadow-lg); text-align:center; }
.ideal-service-note{ font-size:.82rem; color:var(--muted); line-height:1.5; margin:.45rem 0 0; }
.ideal-opbouw{ font-size:.85rem; color:var(--muted); margin:.2rem 0 0; }
.ideal-demo-label{ display:inline-block; background:rgba(245,167,59,.16); color:#8A5A12; font-weight:800;
  font-size:.72rem; letter-spacing:.05em; text-transform:uppercase; padding:.3rem .7rem; border-radius:999px; margin-bottom:.7rem; }
.ideal-modal-card h3{ margin:.2rem 0 .5rem; font-size:1.25rem; }
.ideal-bedrag-regel{ font-weight:800; font-size:1.1rem; color:var(--ink); margin:0 0 .3rem; }
.ideal-banken{ display:grid; grid-template-columns:1fr 1fr; gap:.6rem; margin-top:.4rem; }
.ideal-bank-btn{ border:1.5px solid var(--line); background:#fff; border-radius:12px; padding:.75rem .6rem;
  font-weight:700; font-size:.92rem; color:var(--ink); transition:border-color .15s, background .15s; }
.ideal-bank-btn:hover{ border-color:var(--brand); background:rgba(0,176,240,.06); }
.ideal-spinner{ width:38px; height:38px; border-radius:50%; border:4px solid var(--line);
  border-top-color:var(--brand); margin:0 auto; animation:ideal-spin .8s linear infinite; }
@keyframes ideal-spin{ to{ transform:rotate(360deg); } }

/* ---------- v178: waarschuwing glutenvrije oven ----------
   Dezelfde opbouw als de iDEAL-dialoog (donkere waas + kaart), maar met een eigen,
   nadrukkelijker gezicht: dit is de enige melding op de bestelpagina waar een
   verkeerde klik iemand ziek kan maken. De veilige knop staat vooraan en is de
   volle knop; "Toch toevoegen" is bewust de rustige. */
.gv-modal{ position:fixed; inset:0; background:rgba(11,21,26,.62); z-index:240;
  display:flex; align-items:center; justify-content:center; padding:1.1rem;
  animation:gv-waas .16s ease-out; }
.gv-modal[hidden]{ display:none; }
@keyframes gv-waas{ from{ opacity:0 } to{ opacity:1 } }
.gv-modal-card{ background:var(--card); border-radius:var(--r-lg); padding:1.7rem 1.5rem 1.4rem;
  max-width:430px; width:100%; box-shadow:var(--shadow-lg); text-align:center;
  border-top:5px solid var(--amber); animation:gv-op .18s ease-out; }
@keyframes gv-op{ from{ transform:translateY(10px); opacity:0 } to{ transform:none; opacity:1 } }
.gv-modal-ic{ width:52px; height:52px; margin:0 auto .8rem; border-radius:50%;
  background:rgba(245,167,59,.16); color:#A8650B;
  display:flex; align-items:center; justify-content:center; }
.gv-modal-ic svg{ width:27px; height:27px; }
.gv-modal-eyebrow{ margin:0 0 .35rem; font-size:.76rem; font-weight:800; letter-spacing:.09em;
  text-transform:uppercase; color:#A8650B; }
.gv-modal-card h3{ margin:0 0 .6rem; font-size:1.22rem; line-height:1.3; color:var(--ink); }
.gv-modal-card h3 #gv-modal-product{ color:var(--ink); }
.gv-modal-tekst{ margin:0 0 .5rem; font-size:.97rem; line-height:1.55; color:var(--ink); }
.gv-modal-venster{ margin:0 0 .9rem; font-size:.89rem; line-height:1.5; color:var(--muted); }
.gv-modal-let-op{ background:rgba(245,167,59,.13); border:1px solid rgba(245,167,59,.42);
  border-radius:14px; padding:.75rem .85rem; font-size:.92rem; line-height:1.5;
  color:var(--ink); text-align:left; margin:0 0 1.15rem; }
.gv-modal-knoppen{ display:flex; flex-direction:column; gap:.55rem; }
.gv-modal-knoppen .btn{ width:100%; justify-content:center; padding-left:.9rem; padding-right:.9rem; }
.gv-modal-ja{ font-weight:600; }
/* pas naast elkaar als ze er ook echt naast pássen: op een telefoon van 430 px stak
   "Toch toevoegen" anders buiten de kaart. Onder elkaar staat de veilige knop boven. */
@media (min-width:540px){
  .gv-modal-knoppen{ flex-direction:row-reverse; }
  .gv-modal-knoppen .btn{ flex:1 1 0; min-width:0; width:auto; }
}
/* de glutenvrije sectie op de kaart terwijl de oven uit staat */
.gv-note{ display:block; }

/* ---------- allergenen-pictogrammen (bestelpagina) ---------- */
/* het tikgebied is met opzet groter dan de icoontjes (padding + compenserende
   marges): 21px-rondjes zijn op een telefoon anders nét te fijn om te raken */
.oi-allerg{ display:flex; gap:.3rem; align-items:center; margin:.4rem -.4rem -.5rem; background:none; border:0; padding:.5rem .4rem; cursor:pointer; }
.allerg-ic{ width:21px; height:21px; border-radius:50%; border:1.5px solid rgba(11,21,26,.22); color:var(--muted);
  display:inline-flex; align-items:center; justify-content:center; background:#fff; flex:0 0 auto; }
.allerg-ic svg{ width:13px; height:13px; }
.oi-allerg:hover .allerg-ic{ border-color:var(--brand); color:var(--brand); }
.allerg-legend{ display:flex; flex-wrap:wrap; gap:.55rem 1.05rem; margin-top:1rem; font-size:.85rem; color:var(--muted); }
.allerg-legend .lg{ display:inline-flex; align-items:center; gap:.4rem; }

/* v210 — de complete allergenenlijst van de zaak (27 sep). Aantikken van de pictogrammen
   klapt een vakje open met waar elk allergeen vandaan komt (tot v209 een melding van één
   regel, die bij een lange opgave halverwege werd afgekapt). */
.oi-allerg-pijl{ width:.42rem; height:.42rem; margin:0 .3rem 0 .35rem; flex:0 0 auto;
  border-right:1.8px solid var(--muted); border-bottom:1.8px solid var(--muted);
  transform:translateY(-2px) rotate(45deg); transition:transform .15s ease; }
.oi-allerg[aria-expanded="true"] .oi-allerg-pijl{ transform:translateY(2px) rotate(-135deg); }
.oi-allerg:hover .oi-allerg-pijl{ border-color:var(--brand); }
.oi-allerg-info{ margin:.6rem 0 .15rem; padding:.6rem .75rem .55rem; max-width:34rem;
  border:1px solid var(--line); border-radius:var(--r-sm); background:#F3F7F9;
  font-size:.82rem; line-height:1.45; }
.oi-allerg-info[hidden]{ display:none; }
.oai-delen{ list-style:none; margin:0; padding:0; display:grid; gap:.32rem; }
.oai-delen li{ display:grid; grid-template-columns:minmax(0, 10.5rem) minmax(0, 1fr); gap:.1rem .9rem; }
.oai-naam{ font-weight:700; color:var(--ink); overflow-wrap:anywhere; }
.oai-naam em{ display:block; font-style:normal; font-weight:600; font-size:.7rem; color:var(--muted); }
.oai-termen{ color:var(--text); }
.oai-delen li.is-onbekend .oai-termen{ color:var(--muted); font-style:italic; }
.oai-voet{ margin:.5rem 0 0; font-size:.74rem; line-height:1.4; color:var(--muted); }
.oai-voet a{ color:var(--brand-ink); font-weight:700; }
@media (max-width:420px){
  .oai-delen li{ grid-template-columns:minmax(0, 1fr); gap:0; }
}

/* per keuze: onder de vraag de allergenen van wat er gekozen is; bij een actief filter een
   rood uitroepteken op elke keuze waar een van die allergenen in zit */
.chip-let-op{ display:none; }
.keuze-chip.is-bevat, .keuze-chip.is-bevat.heeft-prijs:not(.is-aan){ border-color:#C0392B; border-style:solid; }
.keuze-chip.is-bevat .chip-let-op{ display:inline-flex; align-items:center; justify-content:center;
  width:1.05rem; height:1.05rem; border-radius:50%; background:#C0392B; color:#fff;
  font-size:.7rem; font-weight:900; line-height:1; }
.keuze-chip.is-bevat .chip-let-op::before{ content:'!'; }
.keuze-chip.is-bevat.is-aan{ background:#C0392B; border-color:#C0392B; }
.keuze-chip.is-bevat.is-aan .chip-let-op{ background:#fff; color:#C0392B; }
.keuze-allerg{ margin:.4rem 0 0; font-size:.78rem; line-height:1.45; color:var(--muted); }
.keuze-allerg[hidden]{ display:none; }
.keuze-allerg b{ color:var(--ink); font-weight:700; }
.keuze-allerg .ka-naam{ font-weight:700; color:var(--text); }
.keuze-allerg.is-let-op{ padding:.35rem .55rem; border-radius:8px; color:#8E2A1E;
  background:#FFF4F1; border:1px solid #F0C3BA; }
.keuze-allerg.is-let-op b, .keuze-allerg.is-let-op .ka-naam{ color:#8E2A1E; }

/* producten die niet in de lijst staan: alleen zichtbaar gemaakt als het filter aanstaat */
.oi-geen-opgave{ display:none; }
body.allerg-filter-aan .oi-geen-opgave{ display:inline-flex; align-items:center; margin:.3rem 0 0;
  padding:.16rem .5rem; border-radius:6px; background:#EFEDE7; color:#5E5238;
  border:1px dashed rgba(94,82,56,.45); font-size:.74rem; font-weight:700; line-height:1.3; }

.sr-alleen{ position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden;
  clip:rect(0,0,0,0); white-space:nowrap; border:0; }

/* ---------- aantal-stepper op de productkaart ---------- */
.qty-step{ flex:0 0 auto; display:flex; align-items:center; gap:.55rem; }
.step-min{
  width:44px; height:44px; border-radius:50%; border:2px solid var(--ink); background:#fff; color:var(--ink);
  font-size:1.3rem; font-weight:700; line-height:1; display:flex; align-items:center; justify-content:center;
  transition:background .15s ease, transform .15s ease; cursor:pointer;
}
.step-min:hover{ background:var(--ink); color:#fff; }
.step-min:active{ transform:scale(.95); }
.step-count{ min-width:1.4em; text-align:center; font-weight:800; font-size:1.08rem; color:var(--ink); font-variant-numeric:tabular-nums; }
.qty-step.is-zero .step-min, .qty-step.is-zero .step-count{ display:none; }

/* ---------- compacte keuze-knop (saus bij friet/snacks) ---------- */
.opt-toggle{
  margin-top:.5rem; background:none; border:1.5px dashed var(--line); border-radius:999px;
  padding:.32rem .85rem; font-size:.86rem; font-weight:700; color:var(--muted); cursor:pointer;
  transition:border-color .15s ease, color .15s ease, background .15s ease;
}
.opt-toggle:hover{ border-color:var(--brand); color:var(--brand); }
.opt-toggle.is-gekozen{ border-style:solid; border-color:var(--brand); color:var(--ink); background:rgba(0,176,240,.09); }

/* ---------- vervoermiddel-keuze in de bezorger-app ---------- */
.nav-modus{ display:flex; align-items:center; gap:.5rem; margin-top:1.2rem; flex-wrap:wrap; }
.nav-modus span{ color:#8FA6AF; font-size:.82rem; text-transform:uppercase; letter-spacing:.06em; margin-right:.2rem; }
.nav-modus button{
  border:1.5px solid rgba(255,255,255,.2); background:#132129; color:#DCE8ED;
  border-radius:999px; padding:.4rem 1rem; font-size:.9rem; font-weight:700; cursor:pointer;
}
.nav-modus button.is-active{ background:var(--brand); border-color:var(--brand); color:#04222E; }

/* ---------- filterbalk + favorieten (bestelpagina) ---------- */
.menu-filter{ display:flex; gap:.55rem; align-items:center; margin-top:.6rem; }
.menu-filter input{
  flex:1; min-width:0; border:1.5px solid var(--line); border-radius:999px; padding:.55rem 1rem;
  /* 16px, niet kleiner: onder de 16px zoomt iOS bij focus de hele pagina in */
  background:#fff; font-size:1rem; color:var(--ink);
}
.menu-filter input:focus{ border-color:var(--brand); }
.menu-filter input:focus:not(:focus-visible){ outline:none; }
@media (max-width:540px){
  /* op een telefoon krijgt het zoekveld de hele regel: naast "Allergenen" en
     "Favorieten" bleef er anders een postzegel over waar je niets in kunt lezen */
  .menu-filter{ flex-wrap:wrap; }
  .menu-filter input{ flex:1 1 100%; }
}
@media (max-width:380px){
  /* zeer smalle schermen: de filterknoppen alleen als icoon, anders duwen
     "Allergenen" + "Favorieten" samen de pagina breder dan het scherm */
  .menu-filter .fav-filter span{ display:none; }
  .fav-filter{ padding:.5rem .7rem; }
}
.fav-filter{
  flex:0 0 auto; border:1.5px solid var(--line); background:#fff; color:var(--ink);
  font-weight:700; font-size:.93rem; padding:.5rem 1.05rem; border-radius:999px; cursor:pointer;
  display:inline-flex; align-items:center; gap:.4rem; transition:all .15s ease;
}
.fav-filter:hover{ border-color:#E23D4E; color:#E23D4E; }
.fav-filter[aria-pressed="true"]{ background:#E23D4E; border-color:#E23D4E; color:#fff; }
/* v208 — cateringpagina: twee categorieën en geen zoekveld, dus de knoppen Allergenen en
   Favorieten op dezelfde regel als de categorieën (op een telefoon eronder) */
.cat-bar--kort .container{ display:flex; flex-wrap:wrap; align-items:center; gap:.55rem .8rem; }
.cat-bar--kort .container > .cat-schuif,
.cat-bar--kort .container > .cat-bar-inner{ flex:1 1 auto; min-width:0; }
.cat-bar--kort .menu-filter{ margin-top:0; flex:0 0 auto; }
.cat-bar--kort .allerg-filter{ display:contents; }
.cat-bar--kort .allerg-paneel{ flex:1 1 100%; margin-top:0; }
.fav-btn{
  flex:0 0 auto; width:38px; height:38px; border-radius:50%; border:1.5px solid var(--line);
  background:#fff; color:#B9C4C9; display:flex; align-items:center; justify-content:center;
  cursor:pointer; transition:all .15s ease; margin-right:.1rem;
}
.fav-btn:hover{ border-color:#E23D4E; color:#E23D4E; }
.fav-btn[aria-pressed="true"]{ border-color:#E23D4E; color:#E23D4E; background:rgba(226,61,78,.09); }
.fav-btn svg{ width:18px; height:18px; }
.filter-leeg{ text-align:center; color:var(--muted); padding:2.5rem 1rem; font-size:1rem; display:none; }

/* ===== kaart pas laden na een klik (privacy: geen Google-verzoek vóór toestemming) ===== */
.kaart-knop{
  position:absolute; inset:0; width:100%; height:100%; border:0; padding:0; cursor:pointer;
  background:var(--ink); display:block; overflow:hidden;
}
.kaart-knop img{ width:100%; height:100%; object-fit:cover; opacity:.35; }
.kaart-knop span{
  position:absolute; inset:0; display:flex; flex-direction:column; align-items:center;
  justify-content:center; gap:.45rem; color:#fff; font-weight:800; font-size:1.05rem;
  text-align:center; padding:1.2rem;
}
.kaart-knop small{ font-weight:500; font-size:.82rem; color:#C9D9E0; max-width:26ch; line-height:1.35; }
.kaart-knop:hover img{ opacity:.5; }
.kaart-knop:focus-visible{ outline:3px solid var(--brand); outline-offset:-3px; }

/* [hidden] werkt alleen als geen enkele regel er een eigen display overheen zet.
   Knoppen en de tip hieronder hebben wél een display, dus dit moet er expliciet bij. */
[hidden]{ display:none !important; }

/* ===== bezorger-app op het beginscherm (PWA) ===== */
.pwa-tip{
  display:flex; align-items:center; gap:.9rem; margin:1.1rem 0 0;
  background:#132129; border:1px solid rgba(255,255,255,.12); border-radius:14px;
  padding:.85rem 1rem; color:#DCE8ED;
}
.pwa-tip b{ display:block; font-size:.95rem; color:#fff; }
.pwa-tip span{ display:block; font-size:.84rem; color:#8FA6AF; line-height:1.4; margin-top:.15rem; }
.pwa-tip-knoppen{ margin-left:auto; display:flex; align-items:center; gap:.5rem; flex-shrink:0; }
.pwa-sluit{
  background:none; border:0; color:#8FA6AF; font-size:1.5rem; line-height:1;
  /* ruim tikdoel: het kruisje wordt vooral op telefoons gebruikt */
  min-width:40px; min-height:40px; display:inline-flex; align-items:center; justify-content:center;
  padding:0; margin:-.3rem -.3rem -.3rem 0; cursor:pointer;
}
.pwa-sluit:hover{ color:#fff; }
.offline-balk{
  position:fixed; left:0; right:0; bottom:0; z-index:60;
  background:#B3261E; color:#fff; font-size:.86rem; font-weight:600;
  padding:.7rem 1rem calc(.7rem + env(safe-area-inset-bottom)); text-align:center;
}
/* in app-weergave is er geen adresbalk: wat extra ruimte boven en onder */
@media (display-mode: standalone){
  .driver-shell{ padding-top:calc(1.2rem + env(safe-area-inset-top)); padding-bottom:calc(4rem + env(safe-area-inset-bottom)); }
}

/* lichte variant van de installatietip, voor het keukenscherm (lichte achtergrond) */
.pwa-tip--licht{
  background:#fff; border-color:var(--line); color:var(--text);
}
.pwa-tip--licht b{ color:var(--ink); }
.pwa-tip--licht span{ color:var(--muted); }
.pwa-tip--licht .pwa-sluit{ color:var(--muted); }
.pwa-tip--licht .pwa-sluit:hover{ color:var(--ink); }

/* draait het scherm als geïnstalleerde app? dan is er geen adresbalk meer die de
   veilige marges regelt */
@media (display-mode: standalone), (display-mode: fullscreen){
  .admin-body .site-header{ padding-top:env(safe-area-inset-top); }
  .driver-shell{
    padding-top:calc(1.2rem + env(safe-area-inset-top));
    padding-bottom:calc(4rem + env(safe-area-inset-bottom));
  }
}

/* publiceerbalk onder de menukaart — zelfde actie als in het Publiceren-paneel, maar
   op de plek waar je net iets hebt aangepast */
.pub-balk{ display:flex; align-items:center; justify-content:space-between; gap:1.2rem; flex-wrap:wrap;
  margin-top:1.6rem; padding-top:1.3rem; border-top:1px solid var(--line); }
.pub-balk > div:first-child b{ display:block; color:var(--ink); font-size:1rem; }
.pub-balk > div:first-child span{ color:var(--muted); font-size:.9rem; }
.pub-balk-actie{ text-align:right; }
@media (max-width:640px){
  .pub-balk{ flex-direction:column; align-items:stretch; }
  .pub-balk-actie{ text-align:left; }
  .pub-balk-actie .btn{ width:100%; }
}

/* publiceerbalk bovenaan Beheer — plakt mee bij het scrollen, zodat "live zetten"
   altijd binnen bereik is. Blijft onder de vaste sitebalk (z-index 60) hangen. */
.pub-top{ position:sticky; top:var(--kop-onder, 68px); z-index:30; display:flex; align-items:center; gap:1rem;
  flex-wrap:wrap; background:#EFECE5; border:1px solid var(--line); border-radius:var(--r-md);
  padding:.75rem .9rem; margin-bottom:1rem;
  box-shadow:0 10px 24px -20px rgba(11,21,26,.55); }
.pub-top-actie{ margin-left:auto; text-align:right; }
.pub-top-actie .pub-stand-vak:empty{ display:none; }

/* v126 — de publiceerbalk als één regel.
   Hij plakt boven aan het scherm, dus elke pixel die hij inneemt ben je de rest van de
   dag kwijt. Op een MacBook (749 px hoog) at hij samen met de kop 30% van het venster
   op om te melden dat álles al gepubliceerd was — en hij zei het twee keer, in de
   oranje badge én in de zin eronder. Nu: één zin links, de knop rechts. Kleur en
   knopformaat doen het verschil tussen "klaar" en "er staat nog iets open".
   De badge is de terugval zolang de stand nog niet bekend is (JS nog bezig). */
body.pub-stand-bekend .pub-top .badge-demo{ display:none; }
.pub-top .pub-top-actie{
  /* in de HTML staat de knop vóór de statuszin; row-reverse zet de zin links en de
     knop rechts zonder de leesvolgorde te veranderen (schermlezers horen eerst de knop) */
  display:flex; flex-direction:row-reverse; align-items:center; gap:.9rem;
  width:100%; margin-left:0; text-align:left;
}
.pub-top .pub-top-actie .pub-stand-vak{ flex:1; margin:0 !important; font-size:.9rem; }
.pub-top .pub-top-actie .btn{ flex:0 0 auto; }

/* klaar: rustig, dun, knop in de tweede rang */
body.pub-gelijk .pub-top{ padding:.4rem .8rem; box-shadow:none; background:#F4F2EC; }
body.pub-gelijk .pub-top .pub-top-actie .pub-stand-vak{ font-weight:700; }
body.pub-gelijk .pub-top .pub-top-actie .btn{
  padding:.38rem .9rem; font-size:.85rem;
  background:none; color:var(--ink); border:1.5px solid var(--line);
}
body.pub-gelijk .pub-top .pub-top-actie .btn:hover{ border-color:var(--ink); }
@media (max-width:900px){
  /* één kolom: de knoppenbalk van Beheer staat dan bóven dit blok en schuift er
     doorheen als de balk blijft plakken. Op die breedte dus gewoon meescrollen —
     hij staat toch bovenaan de pagina, en onder de menukaart staat dezelfde knop. */
  .pub-top{ position:static; }
  /* de lange opslaan/publiceer-knoppen mogen op een telefoon over twee regels */
  .pub-top .btn, .pub-top-actie .btn{ white-space:normal; }
}
@media (max-width:640px){
  .pub-top-actie{ margin-left:0; width:100%; text-align:left; }
  .pub-top-actie .btn{ width:100%; }
  /* v125 — op een telefoon slokte deze balk een kwart van het scherm op voordat je
     ook maar iets van beheer zag. De knop is het belangrijkst, dus die komt eerst;
     de uitleg eronder in gewone letters (hoofdletters met letterafstand namen op deze
     breedte drie regels in beslag). */
  .pub-top{ flex-direction:column; align-items:stretch; gap:.5rem; padding:.6rem .7rem; }
  .pub-top .badge-demo{ order:2; text-transform:none; letter-spacing:0; font-size:.78rem;
    font-weight:600; padding:.25rem .6rem; background:none; color:var(--muted); }
  .pub-top .pub-top-actie{ order:1; }
  .pub-top .pub-top-actie .btn{ white-space:nowrap; }
  /* de lange uitleg over wat er nog gepubliceerd moet worden past niet op deze
     breedte (drie regels). Hij staat óók onder de menukaart, op de plek waar je
     net iets hebt aangepast — daar is hij nuttiger dan hier bovenaan. */
  .pub-top .pub-stand-vak{ display:none; }
}
/* twee schrijfwijzen van dezelfde mededeling: kort op een telefoon, volledig daarboven */
.alleen-smal{ display:none; }
@media (max-width:640px){
  .alleen-smal{ display:inline; }
  .alleen-breed{ display:none; }
}

/* ---- e-mailadres bevestigen (bestelpagina) --------------------------------------
   Twee tekstknoppen onder het codeveld. Bewust <button> en geen <a>: er is geen
   adres om heen te gaan, en een schermlezer moet ze als knop aankondigen. */
.mc-link{
  background:none; border:0; padding:0; cursor:pointer;
  color:var(--muted); font:inherit; font-size:.86rem; text-decoration:underline;
}
.mc-link:hover{ color:var(--brand); }
.mc-link[disabled]{ opacity:.5; cursor:default; text-decoration:none; }
#mail-check{ max-width:430px; }
#mc-code{ font-family:'Courier New',Courier,monospace; }


/* ---- compacte bestelkaart op het keukenscherm (v34) --------------------------------
   Tijdblok links (kleur = waar de bon in het proces staat), naam en type in het midden,
   het dagnummer groot en licht rechtsboven, het bedrag als rood/groen pilletje. Alles
   wat hier niet op staat, zit achter een tik op de kaart. */
.k-card.k-compact{ position:relative; display:grid; grid-template-columns:auto 1fr;
  grid-template-rows:1fr auto; gap:.3rem .85rem; cursor:pointer; min-height:0;
  /* v167: klemt het vervoerswatermerk af binnen de afgeronde rand */
  overflow:hidden;
  /* v143: rand rondom in de typekleur (zie .k-card); de binnenruimte blijft gelijk
     doordat de vulling 3px kleiner is dan bij het oude streepje */
  padding:.55rem .85rem .55rem .9rem; }
.k-card.k-compact:hover{ box-shadow:var(--shadow-lg, var(--shadow-md)); }
/* v142: op de balie is de kaart alleen om naar te kijken — geen handje, geen zweefeffect */
/* v156: de baliekaart is weer aanklikbaar (popup met de statusstappen); de groene rand
   bij Gereed blijft */
.k-balie-wacht{ font-size:.82rem; font-weight:600; color:var(--muted); }
.k-card.s-gereed.k-balie{ border-color:#23BD6C; }
/* v230: bezorgscherm (bezorgscherm@) — één grote knop per kaart, de volgende stap */
.k-bzscherm .k-bz-knop{ min-height:44px; padding-inline:1.1rem; font-size:.95rem; color:#fff; margin-left:auto; white-space:nowrap; }
.k-bzscherm .k-onder .k-bz-knop + .k-bedrag{ margin-left:0; }
.k-bzscherm .k-bz-knop[data-stap="onderweg"]{ background:#1F6FD1; border-color:#1F6FD1; }
.k-bzscherm .k-bz-knop[data-stap="afgeleverd"]{ background:#23BD6C; border-color:#23BD6C; }
.k-bzscherm .k-bz-knop.is-zeker{ background:#E8A317; border-color:#E8A317; color:#1a1300; }
.k-card.s-gereed.k-bzscherm{ border-color:#23BD6C; }
/* v237: de knop naar Google Maps op het bezorgscherm */
.k-bzscherm .k-maps{ display:inline-flex; align-items:center; gap:.35rem; min-height:44px; padding-inline:.85rem;
  white-space:nowrap; text-decoration:none; flex:none; }
.k-bzscherm .k-maps svg{ width:18px; height:18px; flex:none; }
.k-card.k-compact.k-bezorgen{ border-color:var(--k-rand-bezorgen); }

.k-tijdblok{ grid-row:1; align-self:stretch; display:flex; flex-direction:column;
  justify-content:center; gap:.15rem; min-width:82px; padding:.5rem .5rem; border-radius:10px;
  background:var(--ink); color:#fff; text-align:center; }
.k-tijdblok b{ font-size:clamp(.98rem, 1.4vh + .35rem, 1.2rem); letter-spacing:.02em; }
.k-tijdblok small{ font-size:.62rem; font-weight:800; text-transform:uppercase; letter-spacing:.05em; opacity:.85; }
.s-nieuw   .k-tijdblok{ background:var(--red); animation:k-knipper 1.3s ease-in-out infinite; }
.k-card.s-nieuw{ animation:k-schud 4s ease-in-out infinite; }
@keyframes k-schud{
  0%, 88%, 100%{ transform:translateX(0) rotate(0); }
  90%{ transform:translateX(-3px) rotate(-.4deg); }
  92%{ transform:translateX(3px) rotate(.4deg); }
  94%{ transform:translateX(-3px) rotate(-.3deg); }
  96%{ transform:translateX(2px) rotate(.2deg); }
  98%{ transform:translateX(-1px); }
}
@media (prefers-reduced-motion: reduce){ .k-card.s-nieuw{ animation:none; } }
.s-bon     .k-tijdblok{ background:var(--amber); color:var(--ink); }
.s-keuken  .k-tijdblok{ background:var(--sky, var(--brand)); }
.s-gereed  .k-tijdblok{ background:var(--green, #23BD6C); }
/* v162 (wens Bas, 10 sep): een bezorgbon blijft na "onderweg" op het scherm staan tot de
   bezorger op Afgeleverd drukt. Donkerblauw met witte tekst — duidelijk anders dan het
   hemelsblauw van "in de keuken", en rustig genoeg om niet als werk te lezen. */
.s-onderweg .k-tijdblok{ background:#123A6B; color:#fff; }
.k-card.s-onderweg{ opacity:.82; }
.k-card.s-onderweg .k-naam{ color:var(--muted); }
@keyframes k-knipper{ 0%,100%{ opacity:1 } 50%{ opacity:.55 } }

.k-kern{ display:flex; flex-direction:column; gap:.1rem; min-width:0; min-height:0;
  overflow:hidden; padding-right:1.2rem; }
.k-naam{ font-size:1.08rem; color:var(--ink); line-height:1.25; overflow:hidden;
  text-overflow:ellipsis; white-space:nowrap; }
/* v169: ALLEEN op een bezorgbon staat hier het adres in plaats van de klantnaam, en
   alleen daar gaat de regel iets kleiner (1,08 -> 1rem) — genoeg om "1701 GH
   Heerhugowaard" en "1821 AB Stompetoren" in hun geheel kwijt te kunnen. Een afhaalbon
   blijft precies zoals hij was: daar roep je een naam om, en die is kort. */
.k-card.k-bezorgen .k-naam{ font-size:1rem; }
.k-type{ font-style:italic; font-weight:500; font-size:.9rem; color:var(--text); }
.k-adres{ font-size:.86rem; color:var(--muted); line-height:1.3; display:-webkit-box;
  -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
/* v170 (wens Bas, 12 sep): het dagnummer zwart en vol in plaats van lichtgrijs. Dat is
   het nummer waarmee de keuken en de balie de bon bij elkaar zoeken en waarmee een klant
   wordt omgeroepen — dan moet je het van een meter afstand kunnen lezen, niet moeten
   zoeken. Anton is al een zware letter; de winst zit in de dekking (was .16). */
.k-bonnr{ position:absolute; bottom:.1rem; left:50%; transform:translateX(-50%);
  font-family:'Anton',Impact,sans-serif; font-size:1.55rem; line-height:1;
  color:var(--ink); pointer-events:none; }
/* v170: het bonnummer staat nu onderin het midden (was lichtgrijs rechtsboven). De
   onderbalk houdt daar ruimte voor vrij: links de bezorger, rechts het bedrag, en in het
   midden een gat waar het nummer in past — anders loopt een lange bezorgersnaam eronder. */
.k-onder{ grid-column:1 / -1; display:flex; align-items:center; gap:.45rem; flex-wrap:nowrap;
  min-width:0; padding-inline:0 0; }
.k-onder > .k-toewijs{ max-width:calc(50% - 1.4rem); }
.k-onder .k-bedrag{ margin-left:auto; }
.k-onder .k-bedrag{ margin-left:auto; }
.k-bedrag{ font-weight:800; font-size:.86rem; padding:.22rem .6rem; border-radius:999px;
  border:2px solid; background:#fff; white-space:nowrap; }
.k-bedrag.is-rood{ color:var(--red); border-color:var(--red); }
.k-bedrag.is-groen{ color:#157A47; border-color:#23BD6C; }
.k-teller{ display:inline-block; min-width:1.7em; text-align:center; font-size:1.05rem;
  background:var(--brand); color:#fff; border-radius:9px; padding:.05em .3em; vertical-align:middle; }

.k-toewijs{ display:flex; align-items:center; gap:.3rem; font-size:.78rem; color:var(--text);
  flex-wrap:nowrap; min-width:0; overflow:hidden; }
.k-toewijs > span{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.k-toewijs select{ font-size:.82rem; padding:.3rem .4rem; border-radius:8px; border:1.5px solid var(--line);
  max-width:190px; min-width:110px; flex:1 1 auto; }
.k-mini{ font:inherit; font-size:.74rem; font-weight:800; padding:.24rem .55rem; border-radius:8px;
  border:1.5px solid var(--line); background:#fff; color:var(--text); cursor:pointer; }
.k-mini:hover{ border-color:var(--brand); color:var(--brand); }

/* ---- de popup van een kaart -------------------------------------------------------- */
.kd{ max-width:880px; width:min(880px, 94vw); } /* v152: 640 was te smal voor de vier knoppen onderin — Sluiten viel op een tweede regel (Bas, 8 sep); v158: 880 voor de vijfde knop (Alleen stickers) */
.kd-kop{ display:flex; justify-content:space-between; align-items:flex-start; gap:.8rem; margin-bottom:.8rem; }
.kd-stappen{ display:flex; gap:.35rem; flex-wrap:wrap; margin:0 0 1.1rem; }
.kd-stap{ flex:1 1 0; min-width:86px; display:flex; align-items:center; justify-content:center; gap:.4rem;
  font:inherit; font-size:.8rem; font-weight:800; padding:.5rem .4rem; border-radius:10px;
  border:1.5px solid var(--line); background:#fff; color:var(--muted); cursor:pointer; }
.kd-stap i{ width:.65em; height:.65em; border-radius:50%; background:var(--line); flex:0 0 auto; }
.kd-stap.is-gedaan{ color:var(--text); }
.kd-stap.is-gedaan i{ background:var(--green, #23BD6C); }
.kd-stap.is-actief{ background:var(--ink); border-color:var(--ink); color:#fff; cursor:default; }
.kd-stap.is-actief i{ background:var(--brand); }
.kd-stap:not(.is-actief):not(:disabled):hover{ border-color:var(--brand); color:var(--brand); }
.kd-stap:disabled:not(.is-actief){ opacity:.55; cursor:default; }
/* v182: de stappen die eigenlijk van de bezorger zijn (Onderweg, Afgeleverd bij bezorgen).
   De keuken mag ze zetten als achtervang, maar ze horen niet als gewone werkroute te lezen —
   vandaar de gestreepte rand in plaats van een dichte. */
.kd-stap.kd-stap-nood{ border-style:dashed; color:var(--muted); }
.kd-stap.kd-stap-nood:hover{ border-style:solid; border-color:var(--brand); color:var(--brand); }
.kd-twee{ display:grid; grid-template-columns:1fr 1fr; gap:1.2rem; }
@media (max-width: 620px){ .kd-twee{ grid-template-columns:1fr; } }
.kd-h{ font-size:.78rem; text-transform:uppercase; letter-spacing:.06em; color:var(--muted); margin:0 0 .45rem; }
.kd-regel{ display:flex; gap:.6rem; font-size:.9rem; margin:.22rem 0; }
.kd-regel > span{ flex:0 0 84px; color:var(--muted); }
.kd-regel b{ color:var(--ink); font-weight:700; word-break:break-word; }
.kd-tabel{ width:100%; border-collapse:collapse; font-size:.9rem; }
.kd-tabel td{ padding:.3rem 0; vertical-align:top; border-bottom:1px dashed var(--line); }
.kd-tabel td:last-child{ text-align:right; white-space:nowrap; }
.kd-sub{ color:var(--muted); font-size:.82rem; }
.kd-totalen{ margin-top:.4rem; }
.kd-totalen td{ border-bottom:0; padding:.16rem 0; }
.kd-totalen .b-tot td{ font-weight:800; color:var(--ink); border-top:2px solid var(--ink); padding-top:.35rem; }
/* v220: met Wijzigen erbij pasten de knoppen niet op één regel van 880 px; Annuleren en
   Sluiten vielen er rechts buiten. Wijzigen staat nu bovenaan, en wat toch niet past,
   schuift naar een tweede regel in plaats van uit beeld. */
.kd-knoppen{ display:flex; gap:.6rem; flex-wrap:wrap; margin-top:1.2rem; }
.kd-knoppen .btn{ white-space:nowrap; }
/* v220 (wens Bas): Wijzigen bovenaan, links naast het bedrag; kan het niet, dan staat de
   reden eronder (online betaald, al afgerekend, onderweg of afgerond) */
.kd-kop-rechts{ display:flex; flex-direction:column; align-items:flex-end; gap:.35rem; }
.kd-kop-rij{ display:flex; align-items:center; justify-content:flex-end; flex-wrap:wrap; gap:.6rem; }
.kd-wijzig-noot{ margin:0; font-size:.84rem; color:var(--muted); text-align:right; }
/* v186 — de factuur in Beheer → Historie */
.hd-factuur{ margin-top:1rem; padding:.85rem 1rem .9rem; border:1px solid var(--line); border-radius:12px; }
.hd-factuur[hidden]{ display:none; }
.hd-factuur-kop{ display:flex; align-items:baseline; flex-wrap:wrap; gap:.3rem .7rem; }
.hd-factuur-kop .kd-h{ margin:0; }
.hd-f-status{ font-weight:800; color:var(--ink); font-variant-numeric:tabular-nums; }
.hd-f-info{ margin:.3rem 0 .75rem; font-size:.88rem; color:var(--muted); }
.hd-f-knoppen{ display:flex; flex-wrap:wrap; gap:.5rem; }
.hd-f-knoppen[hidden]{ display:none; }
.hd-f-form{ margin-top:.9rem; padding-top:.9rem; border-top:1px solid var(--line); }
.hd-f-form[hidden]{ display:none; }
.hd-f-uitleg{ margin:0 0 .8rem; font-size:.86rem; color:var(--muted); }
.hd-f-form .field label small{ font-weight:400; color:var(--muted); }
.hd-f-melding{ margin:.65rem 0 0; font-size:.88rem; min-height:1.2em; }
.hd-f-melding:empty{ margin:0; min-height:0; }
.hd-f-melding.is-fout{ color:var(--red); font-weight:700; }
.hd-f-melding.is-goed{ color:#1e8a4a; font-weight:700; }
@media (max-width: 620px){ .hd-f-form .field-row{ grid-template-columns:1fr; gap:0; } }


/* ---- verwachte tijd (de Wijzigen-knop en het kiesvenster) ------------------------- */
.kd-wijzig{ margin-left:auto; font:inherit; font-size:.78rem; font-weight:800; padding:.3rem .7rem;
  border-radius:999px; border:0; background:var(--amber); color:var(--ink); cursor:pointer; }
.kd-wijzig:hover{ filter:brightness(1.06); }
.kt-select{ font:inherit; font-size:1.5rem; font-weight:800; padding:.45rem .6rem; border-radius:12px;
  border:2px solid var(--line); background:#fff; color:var(--ink); text-align:center; }
.kt-select:focus{ border-color:var(--brand); }
.kt-select:focus:not(:focus-visible){ outline:none; }

/* ---- de gekozen opties als pills in de bon-popups (v41) --------------------------- */
.kd-pills{ display:flex; flex-wrap:wrap; gap:.22rem; margin-top:.22rem; }
.kd-pill{ display:inline-block; font-size:.7rem; font-weight:700; line-height:1;
  padding:.24rem .5rem; border-radius:999px; background:#F1EEE6; color:var(--text);
  border:1px solid var(--line); white-space:nowrap; }
.kd-pill.is-extra{ background:rgba(0,176,240,.10); border-color:rgba(0,176,240,.45);
  color:var(--brand); font-weight:800; }
/* een grote bon: de popup blijft binnen het scherm en scrolt vanbinnen */
.kd{ max-height:92vh; overflow-y:auto; }

/* ===== menukaart-modus (v57) =====================================================
   De bestelpagina zonder bestelfunctie: alle producten, prijzen, keuzes en
   allergenen blijven zichtbaar, maar de winkelwagen en de plus-knoppen zijn weg.
   Aan/uit via site-config → bestelExtern.modus. */
.menukaart-modus .cart-panel,
.menukaart-modus .cart-fab,
.menukaart-modus .qty-step,
.menukaart-modus #order-form { display:none !important; }
.menukaart-modus .order-layout{ grid-template-columns:minmax(0,1fr); }
.menukaart-modus .oi-price{ margin-right:.2rem; }
.menukaart-balk{
  display:flex; align-items:center; justify-content:space-between; gap:1rem 1.4rem; flex-wrap:wrap;
  background:#fff8ec; border:1px solid #f0dcb4; border-left:5px solid var(--amber, #E8A02A);
  border-radius:var(--r-lg, 14px); padding:1rem 1.2rem; margin:0 0 1.6rem;
}
.menukaart-balk b{ display:block; color:var(--ink); font-size:1.02rem; }
.menukaart-balk span{ display:block; color:var(--muted); font-size:.93rem; max-width:62ch; margin-top:.15rem; }
.menukaart-balk .mk-knoppen{ display:flex; gap:.6rem; flex-wrap:wrap; }
@media (max-width:600px){
  .menukaart-balk{ padding:.9rem 1rem; }
  .menukaart-balk .mk-knoppen{ width:100%; }
  .menukaart-balk .mk-knoppen .btn{ flex:1; justify-content:center; }
}

/* ===== Historie: filterbalk met periodekiezer (v58) ===== */
.his-filters{ display:flex; flex-wrap:wrap; align-items:flex-end; gap:.7rem .8rem; }
.his-filters .field{ margin:0; flex:0 0 auto; }
.his-filters .field label{ white-space:nowrap; }
.his-filters .field input, .his-filters .field select{ width:100%; }
.his-filters .btn{ white-space:nowrap; }
@media (max-width:640px){
  .his-filters .field{ flex:1 1 46%; max-width:none !important; }
  .his-filters .field:last-child{ flex:1 1 100%; }
}

/* ---------- glutenvrije oven buiten bedrijf --------------------------------------
   De producten blijven bestelbaar (ze worden dan in de gewone frituur bereid), maar de
   sectie moet er onmiskenbaar anders uitzien dan de rest van de kaart. Vandaar gedempt
   in plaats van onklikbaar: grijs genoeg om op te vallen, niet zo grijs dat iemand denkt
   dat het niet kan. De waarschuwingsregel eronder blijft juist wél op volle sterkte. */
[data-gv-sectie].gv-buiten .item-list { opacity: .55; filter: grayscale(.55); }
[data-gv-sectie].gv-buiten .item-list:hover,
[data-gv-sectie].gv-buiten .item-list:focus-within { opacity: .8; filter: grayscale(.25); }
[data-gv-sectie] .gv-note { display: block; margin-top: .25rem; max-width: 62ch; }
/* v178: de vaste uitleg boven de producten — staat er altijd, ook als de oven aan is,
   zodat niemand hoeft te raden wanneer apart bereiden wél kan */
[data-gv-sectie] .gv-uitleg {
  display: block; margin-top: .35rem; max-width: 62ch;
  color: var(--ink); font-weight: 600; line-height: 1.5;
  background: rgba(11,21,26,.04);
  border-left: 3px solid var(--line);
  padding: .5rem .7rem; border-radius: 6px;
}
[data-gv-sectie]:not(.gv-buiten) .gv-note { color: #1F7A4A; font-weight: 700; }
/* in de donkere categoriebanner moet diezelfde uitleg licht zijn — anders staat er
   bijna-zwarte tekst op een bijna-zwarte kop */
.cat-banner .gv-uitleg {
  color: #EAF4F9;
  background: rgba(255,255,255,.09);
  border-left-color: rgba(255,255,255,.38);
}
.cat-banner[data-gv-sectie]:not(.gv-buiten) .gv-note { color: #8FE3B4; }
[data-gv-sectie].gv-buiten .gv-note {
  color: #8a4b00;
  background: #fff5e6;
  border-left: 3px solid #e8a02a;
  padding: .4rem .6rem;
  border-radius: 4px;
  font-weight: 600;
  opacity: 1;
}
/* v119 — hier stond een @media (prefers-color-scheme: dark)-blok. Weggehaald, want de
   site kent geen donkere modus: de klasse `dark` in de opmaak is een SECTIEklasse voor
   een donkere band op de pagina, geen thema. Deze regels sloegen dus aan zodra de
   BEZOEKER zijn telefoon of Mac op donker had staan, en zetten lichte tekst (bedoeld
   voor een donkere achtergrond) op onze gewoon witte pagina. Dat maakte uitgerekend de
   gesloten-melding onleesbaar. Komt er ooit een echte donkere modus, dan hoort die aan
   dezelfde schakelaar te hangen als de rest van de site — niet aan een losse media-regel
   per component. */

/* ---------- gesloten: niets te kiezen, en dat moet je zien ------------------------
   Tot v64 kon je op een gesloten dag nog "zo snel mogelijk" bestellen — er stond dan
   's ochtends een bon in een lege keuken. Nu gaat alles op slot: de knoppen Afhalen en
   Bezorgen, de invulvelden en de bestelknoppen. Een grijze knop met een uitleg erbij is
   duidelijker dan een knop die verdwijnt: je ziet dát het bestaat, alleen nu niet. */
.seg button.is-dicht {
  opacity: .45;
  cursor: not-allowed;
  text-decoration: line-through;
  text-decoration-thickness: 1px;
}
.seg button.is-dicht:hover { background: transparent; color: inherit; }

.order-gesloten {
  display: block;
  /* v118 — steviger dan de eerste opzet (wens Bas: "het moet gewoon duidelijk zijn").
     Dit is de enige melding op de pagina die de klant écht moet lezen: hij legt uit
     waarom bestellen nu niet gaat. Vandaar een dichte rand rondom in plaats van een
     streepje links, en tekst die dezelfde zwaarte heeft als de rest van de pagina. */
  background: #fff4f1;
  border: 2px solid #c0392b;
  border-left-width: 6px;
  /* dezelfde ronding als de kaarten en het bestelpaneel eromheen (--r-md), zodat het
     kader erbij hoort in plaats van er als een vreemde melding overheen te liggen */
  border-radius: var(--r-md);
  padding: .85rem 1rem;
  margin: .6rem 0 .2rem;
  line-height: 1.45;
}
.order-gesloten b {
  display: block;
  text-transform: uppercase;
  letter-spacing: .08em;
  font-size: .86rem;
  font-weight: 800;
  color: #8f1c10;
  margin-bottom: .3rem;
}
.order-gesloten span { display: block; font-size: 1rem; line-height: 1.5; color: #3d140e; }

/* de kopie bovenaan de pagina, boven de kaart: dit is het eerste wat iemand ziet die
   's avonds nog even wil bestellen, dus die mag groter. `scroll-margin-top` zodat hij
   niet half onder de plakkende kop verdwijnt als er naartoe gesprongen wordt. */
#gesloten-banner-vak .order-gesloten {
  padding: 1.05rem 1.2rem;
  scroll-margin-top: 6rem;
}
#gesloten-banner-vak .order-gesloten b { font-size: .95rem; }
#gesloten-banner-vak .order-gesloten span { font-size: 1.08rem; }
.order-gesloten a { color: inherit; font-weight: 700; }
.order-gesloten[hidden] { display: none !important; }
/* v145: de stickerwaarschuwing op het keukenscherm — zelfde kader als "gesloten", met een
   kruisje om hem weg te klikken zodra iemand hem gezien heeft */
.k-sticker-alarm { display: flex; align-items: flex-start; gap: .8rem; }
.k-sticker-alarm > div { flex: 1; }
.k-sticker-alarm .k-alarm-dicht { flex: 0 0 auto; border: 0; background: #c0392b; color: #fff; border-radius: 999px;
  width: 2rem; height: 2rem; font-size: 1.2rem; line-height: 1; cursor: pointer; }
/* v155: het vel-vangnet op verzoek (alleen op een pc die een printvenster toont) */
.k-sticker-alarm .k-alarm-vel { display: inline-block; margin-top: .55rem; font: inherit; font-size: .82rem; font-weight: 800;
  padding: .4rem .8rem; border-radius: 9px; border: 1.5px solid currentColor; background: transparent; color: inherit; cursor: pointer; }
.k-sticker-alarm .k-alarm-vel:hover { background: rgba(255,255,255,.35); }
/* v158: opnieuw naar de labelprinter, rechtstreeks vanuit de melding */
.k-sticker-alarm .k-alarm-zebra { display: inline-block; margin: .55rem .5rem 0 0; font: inherit; font-size: .82rem; font-weight: 800;
  padding: .4rem .8rem; border-radius: 9px; border: 1.5px solid currentColor; background: #fff; color: #c0392b; cursor: pointer; }
.k-sticker-alarm .k-alarm-zebra:hover { background: #fde8e6; }

/* v118 — het dimmen zat op het formulier zélf, en de gesloten-melding staat daarbinnen
   (bovenaan de gegevensstap, zodat je de reden meteen ziet). Uitgerekend de tekst die
   uitlegt waarom alles op slot zit, was daardoor het slechtst leesbaar van de pagina.
   Let op: `opacity` op de ouder terugdraaien bij het kind kán niet — opacity maakt een
   groep, een kind kan nooit dekkender zijn dan zijn ouder. Daarom dimmen we nu de
   kínderen los, en slaan we de melding daarbij over. */
#order-form.is-dicht > *:not(.order-gesloten) { opacity: .5; }
#order-form.is-dicht input,
#order-form.is-dicht select,
#order-form.is-dicht textarea { cursor: not-allowed; }



/* ---------- drukteknop in Beheer -------------------------------------------------- */
.drukte-blok{ border:1px solid var(--line); border-radius:var(--r-md); padding:.9rem 1rem; margin-bottom:1.2rem; background:var(--card); }
.drukte-blok.is-aan{ border-color:#E8A02A; background:#fff8ec; }
.drukte-kop{ display:flex; align-items:center; justify-content:space-between; gap:1rem; flex-wrap:wrap; }
.drukte-kop b{ display:block; font-size:1.02rem; }
.drukte-kop span{ display:block; color:var(--muted); font-size:.9rem; margin-top:.1rem; }
.drukte-blok.is-aan .drukte-kop span{ color:#8a4b00; font-weight:600; }
.drukte-knoppen{ display:flex; gap:.5rem; flex-wrap:wrap; margin:.75rem 0 .4rem; }
.drukte-knoppen .btn.is-aan{ background:#E8A02A; border-color:#E8A02A; color:#2a1800; }
.drukte-uitleg{ color:var(--muted); font-size:.86rem; margin:0; line-height:1.45; }



/* ---------- bestellen in stappen op telefoon (v75) --------------------------------
   Op een klein scherm is het bestelpaneel een app-achtig scherm in drie stappen:
   1 bestelling → 2 gegevens → 3 controleren en betalen. Op een breed scherm staat
   alles gewoon onder elkaar in de zijbalk — daar verandert niets. */
.stap-titel{ display:none; }
.stap-nav{ display:none; }
.stap-inlog{ font-size:.88rem; color:var(--muted); margin:.1rem 0 .8rem; }
.stap-inlog a{ font-weight:700; }
#stap-recap{ padding:0 1.4rem; }
.recap-blok{ border:1px solid var(--line); border-radius:var(--r-md); padding:.8rem 1rem; margin-bottom:.8rem; }
.recap-blok b.rk{ display:block; font-size:.78rem; letter-spacing:.06em; text-transform:uppercase; color:var(--muted); margin-bottom:.35rem; }
.recap-regel{ display:flex; justify-content:space-between; gap:1rem; font-size:.95rem; padding:.12rem 0; }
.recap-regel.r-korting{ color:#1e8a4a; font-weight:700; }
.recap-regel.r-totaal{ font-weight:800; border-top:2px solid var(--ink); margin-top:.35rem; padding-top:.4rem; }
.recap-wijzig{ background:none; border:0; color:var(--brand-ink, #0077a8); font-weight:700; font-size:.85rem; cursor:pointer; padding:0; }

/* stappen: alleen tonen wat bij de actieve stap hoort — nu op ÉLKE schermbreedte (v94),
   zodat desktop dezelfde app-flow heeft als de telefoon: producten → gegevens → betalen */
.cart-panel .stap{ display:none; }
.cart-panel.sa-kaart .stap-kaart,
.cart-panel.sa-gegevens .stap-gegevens,
.cart-panel.sa-betalen .stap-betalen{ display:block; }
.cart-panel.sa-kaart .cart-actions.stap-kaart,
.cart-panel.sa-betalen .cart-actions.stap-betalen{ display:flex; }
/* v106: de totalen staan óók in stap 2, want de keuze afhalen/bezorgen valt daar —
   zo ziet de klant de bezorgkosten meteen verschijnen als hij op Bezorgen drukt. */
.cart-panel.sa-gegevens .cart-totals{ border-bottom:1px solid var(--line); padding-bottom:.9rem; margin-bottom:.2rem; }
/* in stap 3 tellen de totalen mee als controle-overzicht, maar de bestellijst niet */
.cart-panel .stap-titel{ display:inline-block; margin-left:auto; margin-right:.6rem;
  font-size:.78rem; font-weight:700; color:#BFE9F7; letter-spacing:.03em; white-space:nowrap; }
.cart-panel .stap-nav{ position:sticky; bottom:0; z-index:3; display:flex; gap:.7rem;
  padding:.8rem 1.4rem calc(.8rem + env(safe-area-inset-bottom));
  background:var(--card); border-top:1px solid var(--line); }
.cart-panel .stap-nav .btn{ flex:1; }
.cart-panel .stap-nav .btn[hidden]{ display:none; }

/* desktop-wizard (v94): in stap 2 en 3 verdwijnen de producten en staat het paneel
   gecentreerd — net als de app-flow op de telefoon. Stap 1 houdt de twee kolommen
   (producten links, "Jouw bestelling" rechts met de knop Volgende). */
@media (min-width:1081px){
  .order-layout.flow-gegevens #menu-root,
  .order-layout.flow-betalen #menu-root{ display:none; }
  .order-layout.flow-gegevens,
  .order-layout.flow-betalen{ grid-template-columns:minmax(0,600px); justify-content:center; }
  .order-layout.flow-gegevens .cart-panel,
  .order-layout.flow-betalen .cart-panel{ position:static; max-height:none; width:100%; }
}

/* productkaart op telefoon: prijs en de +/− niet meer náást de keuzes (dat kneep het
   keuzemenu plat) maar er onder — prijs links, knoppen rechts (wens Maico, 1 sep) */
@media (max-width:640px){
  .order-item{ flex-wrap:wrap; row-gap:.55rem; }
  .order-item .oi-info{ flex:1 1 100%; }
  .order-item .oi-price{ order:2; margin-right:auto; }
  .order-item .qty-step{ order:3; margin-left:auto; }
}

/* v126 — meer eten in beeld.
   Een productkaart was 309 px hoog. Op een iPhone SE bleef er na de kop, de filterbalk
   en de mandjesbalk 375 px over: je scrolde door 166 producten met steeds één product
   tegelijk in zicht. Alles blijft staan — favoriet, keuzes, prijs, plus — maar strakker
   gestapeld: het hartje naast de naam in plaats van erboven, de keuzeregel als één
   regel in plaats van een blok, en wat minder lucht rondom. */
@media (max-width:640px){
  .order-item{ padding:.7rem .8rem; gap:.6rem; }
  .oi-name{ font-size:.98rem; }
  .oi-desc{ font-size:.85rem; }

  /* Het hartje stond op een eigen regel bovenaan en kostte zo een halve productkaart.
     Hij gaat naar de rechterbovenhoek. Bewust met position:absolute en niet door de
     kolombreedte aan te passen: zodra het keuzepaneel opengaat moet de tekstkolom
     juist de volle breedte pakken, en die regel wil ik niet doorkruisen. */
  .order-item{ position:relative; }
  .order-item .fav-btn{ position:absolute; top:.55rem; right:.6rem; margin:0; z-index:1; }
  .order-item .oi-name{ padding-right:3.6rem; }   /* hartje 44 px + .6rem rand + lucht */

  /* de keuzeregel: dezelfde informatie, maar op één regel en zonder omkadering.
     Wat er niet meer bij past wordt afgekapt — de hele lijst staat toch in het
     paneel dat opengaat zodra je erop tikt. */
  .oi-keuze-kop{
    padding:.3rem 1.9rem .3rem .5rem; margin-top:.3rem; font-size:.8rem; line-height:1.25;   /* v245: rechts plek voor het potlood */
    display:flex; align-items:baseline; gap:.4rem; background:none;
    border:0; border-left:2.5px solid rgba(0,176,240,.5); border-radius:0;
  }
  .oi-keuze-kop b{
    display:inline; font-size:.72rem; white-space:nowrap; flex:0 0 auto;
  }
  .oi-keuze-kop span{
    display:block; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  }
  /* een onafgemaakte keuze moet wél opvallen: die houdt zijn vlak */
  .oi-keuze-kop.is-onaf{
    border:1px solid rgba(245,167,59,.5); border-radius:var(--r-sm);
    padding:.35rem 1.9rem .35rem .55rem; background:rgba(245,167,59,.14);
  }
}

/* --------------------------------------------------------------------------------------
   Keukenscherm — belmelding van de telefoonkoppeling (v88)
   Zelfde compacte kaartjes als op de kassa, iets groter: het keukenscherm hangt verder
   van de ogen af. "Naar kassa" springt naar pos.html en neemt de beller meteen over. */
.k-oproep{ display:none; margin:0 0 1rem }
.k-oproep.is-open{ display:flex; flex-wrap:wrap; gap:.5rem }
.k-oproep .balk{ display:flex; align-items:center; gap:.55rem; background:#12242C; color:#fff;
  border-radius:12px; padding:.5rem .75rem; flex:0 1 auto; font-size:1rem;
  box-shadow:0 6px 18px rgba(11,21,26,.25); animation:kOproepIn .25s ease }
.k-oproep .balk .ic svg{ width:18px; height:18px }
.k-oproep .balk small{ color:#C9D9E0; font-weight:600 }
.k-oproep .neem{ background:#C62828; color:#fff; border:0; border-radius:9px;
  padding:.42rem .8rem; font:inherit; font-weight:800; font-size:.92rem; cursor:pointer }
.k-oproep .weg{ background:none; border:0; color:#C9D9E0; font-size:1.15rem; line-height:1;
  cursor:pointer; padding:.2rem .3rem }
@keyframes kOproepIn{ from{ transform:translateY(-6px); opacity:0 } to{ transform:none; opacity:1 } }
/* zwevende variant (v96): voor schermen zonder eigen plek voor de belmelding, zoals
   Beheer — blijft rechtsonder in beeld, waar je ook mee bezig bent */
.k-oproep--zwevend{ position:fixed; right:1rem; bottom:1rem; z-index:1200; margin:0; max-width:min(92vw, 420px) }
.k-oproep--zwevend.is-open{ flex-direction:column; align-items:flex-end }
.k-oproep--zwevend .balk{ box-shadow:0 10px 28px rgba(11,21,26,.35) }
/* v100: bezorger-app — rit klaar / volgende rit */
.rit-klaar{ display:flex; align-items:center; gap:.8rem; background:#12242C; color:#fff; border-radius:14px; padding:.8rem 1rem }
.rit-klaar > div{ flex:1; display:flex; flex-direction:column }
.rit-klaar small{ color:#C9D9E0 }
.stop-card.is-volgende{ opacity:.72 }
.stop-status.s-volgende{ background:rgba(255,255,255,.08); color:#C9D9E0 }
/* v101: Beheer → Bezorgers */
.bz-overzicht{ display:grid; grid-template-columns:minmax(260px,340px) minmax(0,1fr); gap:1rem; align-items:start }
.bz-kaart{ height:520px; margin-top:0 }

/* v126 — de kaart loopt mee tijdens het scrollen.
   Je leest links de lijst met bezorgers en wilt ondertussen op de kaart blijven zien
   waar ze rijden; scrolde de kaart mee naar boven weg, dan werd de lijst onleesbaar
   zonder kaart en de kaart onbruikbaar zonder lijst. Nu plakt hij in de ruimte tussen
   de publiceerbalk en de onderkant van het venster.

   --bz-top is de onderkant van alles wat bovenaan blijft plakken (sitebalk +
   publiceerbalk) plus wat lucht; pagina-beheer.js meet dat en zet het hier neer, want
   die hoogtes veranderen mee met het scherm. De waarde hieronder is de terugval voor
   het geval het meten niet lukt. In een grid is het grid-gebied het kader waarbinnen
   sticky mag bewegen, en dat gebied is zo hoog als de langste kolom — precies wat we
   willen: de kaart blijft staan zolang er lijst is om langs te scrollen. */
@media (min-width:901px){
  .bz-kaart{
    position:sticky;
    top:var(--bz-top, 186px);
    height:calc(100vh - var(--bz-top, 186px) - var(--bz-onder, 1.2rem));
    min-height:320px;
  }
}
@media (max-width:900px){
  .bz-overzicht{ grid-template-columns:1fr }
  /* op een telefoon staat de kaart ónder de lijst; plakken heeft daar geen zin */
  .bz-kaart{ height:min(60vh, 420px) }
}
.bz-kaart #bz-kaart{ width:100%; height:100%; background:#EAF2F5 }
.bz-rij{ border:1px solid var(--line); border-radius:12px; padding:.75rem .9rem; margin-bottom:.6rem; background:#fff }
.bz-rij b{ display:flex; align-items:center; gap:.5rem }
.bz-stip{ width:12px; height:12px; border-radius:50%; display:inline-block; flex:0 0 12px }
.bz-rij small{ color:var(--muted); display:block; margin-top:.15rem }
.bz-rij ol{ margin:.4rem 0 0 1.1rem; padding:0; font-size:.9rem }
.bz-rij ol li{ margin:.15rem 0 }
.bz-rij .bz-oud{ color:#C62828; font-weight:700 }
.os-marker--bz{ width:30px; height:30px; font-size:.75rem; font-weight:800 }
.os-marker--stop{ background:#fff; color:#12242C; width:26px; height:26px; font-size:.75rem; font-weight:800; border-color:#12242C }
/* v103: Mijn profiel in de bezorger-app (donker thema) */
.pf-kaart{ background:#132129; border:1px solid rgba(255,255,255,.1); border-radius:18px; padding:1.1rem 1.2rem; margin:0 0 1.4rem }
.pf-kop{ display:flex; align-items:center; gap:.7rem; margin-bottom:.9rem }
.pf-kop b{ color:#fff; font-size:1.05rem; display:block }
.pf-kop small{ color:#8FA6AF; display:block; margin-top:.1rem }
.pf-form label{ display:block; color:#C9D9E0; font-size:.85rem; font-weight:700; margin:.7rem 0 .25rem }
.pf-form input{ width:100%; box-sizing:border-box; background:#0B151A; border:1px solid rgba(255,255,255,.16);
  border-radius:11px; padding:.7rem .8rem; color:#fff; font:inherit; font-size:1rem }
.pf-form input:focus{ outline:2px solid var(--brand); outline-offset:1px }
.pf-form .btn{ width:100%; margin-top:1rem }
.pf-meter{ height:6px; background:rgba(255,255,255,.1); border-radius:999px; margin:.5rem 0 .1rem; position:relative }
.pf-meter span{ display:block; height:100%; width:0; border-radius:999px; background:#C62828; transition:width .2s }
.pf-meter small{ position:absolute; right:0; top:8px; font-size:.75rem; color:#8FA6AF }
.pf-meter.is-matig span{ background:#F5A73B } .pf-meter.is-goed span{ background:#23BD6C }
.pf-melding{ font-size:.88rem; margin:.7rem 0 0; color:#C9D9E0; min-height:1.2em }
.pf-melding.is-ok{ color:#23BD6C; font-weight:700 } .pf-melding.is-nok{ color:#FF8A7A; font-weight:700 }
.pf-tip{ font-size:.8rem; color:#7E96A0; margin:.8rem 0 0; line-height:1.55 }
/* v106: het bedrag inclusief servicekosten, onder het gewone totaal */
.cart-totals .t-ideal{ color:var(--muted); font-size:.9rem; padding-top:.35rem; }
.cart-totals .t-ideal small{ display:block; font-size:.82em; opacity:.85; }
.recap-regel.r-ideal{ color:var(--muted); font-size:.9rem; }
/* v160: de bestelregels op stap 2, boven de totalen — zelfde regels als de recap van stap 3 */
.cart-panel .stap2-regels{ padding:.9rem 1.4rem 0; }
.cart-panel .stap2-regels b.rk{ display:flex; align-items:center; gap:.5rem; font-size:.78rem; letter-spacing:.06em; text-transform:uppercase; color:var(--muted); margin-bottom:.35rem; }
.cart-panel .stap2-regels .recap-regel{ font-size:.92rem; }
.recap-regel.r-ideal small{ display:block; font-size:.85em; opacity:.85; }

/* ---------- v110: navigeren binnen de bezorger-app ----------
   Schermvullend, want dit is wat de bezorger tijdens het rijden ziet. Grote cijfers,
   grote knoppen, veel contrast: dit wordt buiten bekeken, vaak in het donker, met een
   tas in de andere hand. De kaart ligt eronder, kop en voet liggen erop. */
.bz-nav{ position:fixed; inset:0; z-index:1200; background:#0B1F27; }
.bz-nav[hidden]{ display:none; }
.bz-nav-map{ position:absolute; inset:0; }
.bz-nav-map .leaflet-control-attribution{ font-size:9px; }

.bz-nav-kop{ position:absolute; top:0; left:0; right:0; z-index:1210; display:flex; align-items:flex-start;
  gap:.7rem; padding:calc(.7rem + env(safe-area-inset-top)) .9rem .9rem;
  background:linear-gradient(#0B1F27 62%, rgba(11,31,39,0)); color:#fff; }
.bz-nav-x{ flex:0 0 auto; width:40px; height:40px; border:0; border-radius:12px; cursor:pointer;
  background:rgba(255,255,255,.14); color:#fff; font-size:1.5rem; line-height:1; }
.bz-nav-adres{ flex:1 1 auto; min-width:0; }
.bz-nav-adres b{ display:block; font-size:1.15rem; line-height:1.2; }
.bz-nav-adres span{ display:block; font-size:.9rem; color:#BFE9F7; }
.bz-nav-cijfers{ flex:0 0 auto; text-align:right; }
.bz-nav-cijfers b{ display:block; font-size:1.35rem; line-height:1.1; font-variant-numeric:tabular-nums; }
.bz-nav-cijfers span{ display:block; font-size:.82rem; color:#BFE9F7; white-space:nowrap; }

.bz-nav-voet{ position:absolute; left:0; right:0; bottom:0; z-index:1210;
  padding:1rem .9rem calc(.9rem + env(safe-area-inset-bottom));
  background:linear-gradient(rgba(11,31,39,0), #0B1F27 42%); }
.bz-nav-knoppen{ display:flex; gap:.6rem; }
.bz-nav-knoppen .btn{ flex:1 1 auto; }
.bz-nav-knoppen #bz-nav-centreer, .bz-nav-knoppen #bz-nav-bel{ flex:0 0 auto; }
.bz-nav-google{ display:block; margin:.7rem 0 0; text-align:center; font-size:.78rem;
  color:#9FB4BD; text-decoration:underline; }
.bz-nav-melding{ margin:0 0 .7rem; padding:.55rem .8rem; border-radius:10px; font-size:.85rem;
  background:rgba(232,160,42,.18); border:1px solid #E8A02A; color:#FFE2AF; }
.bz-nav-melding[hidden]{ display:none; }

/* de twee spelden op de kaart: dezelfde vormtaal als het klantportaal */
.bz-pin{ width:34px; height:34px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  border:3px solid #fff; box-shadow:0 2px 8px rgba(0,0,0,.4); }
.bz-pin svg{ width:18px; height:18px; }
.bz-pin--ik{ background:#00A3D9; color:#fff; }
.bz-pin--klant{ background:#E8A02A; color:#0B1F27; }

/* v113 — het op-rekening-vinkje in de kassa (verschijnt alleen bij een gekoppelde klant) */
.pg-rek{ display:flex; gap:.6rem; align-items:flex-start; margin:.7rem 0 0; padding:.65rem .8rem;
  border:1.5px solid rgba(11,21,26,.18); border-radius:12px; cursor:pointer; background:#fff; }
.pg-rek[hidden]{ display:none; }
.pg-rek input{ width:22px; height:22px; flex:0 0 auto; margin-top:.05rem; accent-color:#0B151A; }
.pg-rek b{ display:block; font-size:.95rem; }
.pg-rek small{ display:block; font-size:.8rem; color:#5B6B73; margin-top:.1rem; }

/* v122 — de gesloten-knop in Beheer. Zwaarder aangezet dan de drukteknop: die maakt de
   wachttijd langer, deze zet de zaak op slot. Staat hij aan, dan moet je dat vanaf de
   andere kant van de keuken kunnen zien. */
.dicht-blok{ border:1px solid var(--line); border-radius:var(--r-md); padding:.9rem 1rem;
  margin-bottom:1.2rem; background:var(--card); }
.dicht-blok.is-aan{ border:2px solid #c0392b; background:#fff4f1; }
.dicht-blok.is-aan .drukte-kop b{ color:#8f1c10; }
.dicht-blok.is-aan #dicht-stand{ color:#3d140e; font-weight:700; }

/* v224 — bezorgen uit, los van afhalen: drie standen. Amber als alleen de fiets rijdt,
   rood als er helemaal niet bezorgd wordt; de gekozen knop is gevuld. */
.bezorguit-blok{ border:1px solid var(--line); border-radius:var(--r-md); padding:.9rem 1rem;
  margin-bottom:1.2rem; background:var(--card); }
.bezorguit-blok.is-fiets{ border:2px solid #E8A02A; background:#fff8ec; }
.bezorguit-blok.is-uit{ border:2px solid #c0392b; background:#fff4f1; }
.bezorguit-blok.is-fiets #bezorguit-stand{ color:#8a4b00; font-weight:700; }
.bezorguit-blok.is-uit #bezorguit-stand{ color:#3d140e; font-weight:700; }
.bezorguit-blok.is-uit .drukte-kop b{ color:#8f1c10; }
.bezorguit-knoppen{ display:flex; gap:.5rem; flex-wrap:wrap; margin:.75rem 0 .5rem; }
.bezorguit-knoppen .btn{ white-space:normal; text-align:left; max-width:100%; }
.bezorguit-knoppen .btn svg{ width:1.05em; height:1.05em; flex:none; }
@media (max-width:520px){ .bezorguit-knoppen .btn{ flex:1 1 100%; } }
.bezorguit-knoppen .btn[aria-pressed="true"]{ background:var(--ink); border-color:var(--ink); color:#fff; }
.bezorguit-knoppen .btn[data-bezorgstand="fiets"][aria-pressed="true"]{ background:#E8A02A; border-color:#E8A02A; color:#2a1800; }
.bezorguit-knoppen .btn[data-bezorgstand="uit"][aria-pressed="true"]{ background:#c0392b; border-color:#c0392b; color:#fff; }
/* op het keukenscherm: de scooter-uit-balk in amber, bezorgen-uit blijft rood */
.order-gesloten.k-bezorguit.is-fiets{ background:#fff8ec; border-color:#E8A02A; }
.order-gesloten.k-bezorguit.is-fiets b{ color:#8a4b00; }
.order-gesloten.k-bezorguit.is-fiets span{ color:#4a2d00; }

/* v124 — een stap-blok met `hidden` moet verborgen blijven, ook als zijn stap actief is.
   Zonder deze regel wint `.cart-panel.sa-betalen .stap-betalen{display:block}` van
   `[hidden]`, en stond het puntenblok er ook voor wie geen punten heeft. */
.cart-panel .stap[hidden]{ display:none !important; }

/* v124 — de klantregel in Beheer is een knop geworden; hij moet er nog steeds uitzien
   als tekst, maar wel voelen als iets waar je op kunt klikken. */
.klantknop{ text-align:left; background:none; border:0; padding:.15rem .2rem; margin:-.15rem -.2rem;
  border-radius:8px; cursor:pointer; font:inherit; color:inherit; }
.klantknop:hover{ background:rgba(0,0,0,.05); }
.klantknop:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; }


/* ---------- melding "nieuwe bestelling, bon nog niet geprint" (v130) --------------
   Voor de kassa en Beheer. Het keukenscherm heeft zijn eigen kaartjes en piept al;
   deze melding is er voor de schermen waar je aan het werk bent zonder op de
   bestellingen te letten. Hij dekt het scherm af — dat is de bedoeling: hij ging
   eerder verloren als balkje bovenaan. Zodra de bon geprint is verdwijnt hij vanzelf. */
.nb-melding{
  position:fixed; inset:0; z-index:1400;
  display:flex; align-items:center; justify-content:center; padding:1.2rem;
  background:rgba(11,21,26,.62); backdrop-filter:blur(3px);
  animation:nbIn .18s ease-out;
}
@keyframes nbIn{ from{ opacity:0 } to{ opacity:1 } }
@media (prefers-reduced-motion:reduce){ .nb-melding{ animation:none } }

.nb-melding .nb-kaart{
  background:var(--card); border-radius:var(--r-lg); box-shadow:0 30px 70px -20px rgba(11,21,26,.6);
  padding:1.6rem 1.7rem 1.3rem; width:min(92vw, 460px); border-top:6px solid var(--red);
}
.nb-melding .nb-kop{ display:flex; gap:.9rem; align-items:flex-start; }
.nb-melding .nb-kop h2{ font-size:1.35rem; margin:0; color:var(--ink); line-height:1.15; }
.nb-melding .nb-kop p{ margin:.15rem 0 0; color:var(--red); font-weight:800; font-size:.95rem; }
.nb-melding .nb-bel{
  flex:0 0 auto; width:44px; height:44px; border-radius:14px; display:flex; align-items:center;
  justify-content:center; background:rgba(228,87,61,.13); color:var(--red);
  animation:nbTik 1.6s ease-in-out infinite;
}
.nb-melding .nb-bel svg{ width:24px; height:24px; }
@keyframes nbTik{ 0%,70%,100%{ transform:rotate(0) } 78%{ transform:rotate(11deg) } 86%{ transform:rotate(-9deg) } }
@media (prefers-reduced-motion:reduce){ .nb-melding .nb-bel{ animation:none } }

.nb-melding .nb-lijst{ list-style:none; margin:1.1rem 0 0; padding:0; display:grid; gap:.4rem; }
.nb-melding .nb-lijst li{
  background:#F7F5F0; border:1px solid var(--line); border-radius:10px;
  padding:.5rem .7rem; font-size:.95rem; color:var(--ink);
}
.nb-melding .nb-lijst .nb-rest{ background:none; border:0; color:var(--muted); padding:.1rem .2rem; }
.nb-melding .nb-knoppen{ display:flex; gap:.6rem; margin-top:1.2rem; flex-wrap:wrap; }
.nb-melding .nb-knoppen .btn{ flex:1 1 auto; justify-content:center; }
.nb-melding .nb-voet{ margin:.9rem 0 0; font-size:.85rem; color:var(--muted); text-align:center; }

@media (max-width:520px){
  .nb-melding .nb-kaart{ padding:1.2rem 1.1rem 1rem; }
  .nb-melding .nb-kop h2{ font-size:1.15rem; }
  .nb-melding .nb-knoppen .btn{ flex:1 1 100%; }
}

/* ---------- v133: bezorger — scherm-aan-melding en uitleg ----------
   Let op de volgorde: deze regels staan achteraan het bestand, dus na alles wat ze
   zouden kunnen overschrijven. Een media query hoort ná de basisregel te staan (die
   valkuil kostte in v125/v126 drie keer een fix). */
.bz-scherm{ display:flex; align-items:center; gap:.5rem; font-size:.82rem; line-height:1.4;
  color:#8FA6AF; background:#132129; border:1px solid rgba(255,255,255,.1);
  border-radius:12px; padding:.55rem .75rem; margin:0 0 1.2rem }
.bz-scherm::before{ content:''; flex:0 0 auto; width:9px; height:9px; border-radius:50%;
  background:#8FA6AF }
.bz-scherm--ja{ color:#BFE3C6; border-color:rgba(94,186,125,.45) }
.bz-scherm--ja::before{ background:#5EBA7D }
.bz-scherm--nee{ color:#FFD9A8; border-color:rgba(230,150,40,.5) }
.bz-scherm--nee::before{ background:#E69628 }

.bz-uitleg{ background:#132129; border:1px solid rgba(255,255,255,.1); border-radius:18px;
  padding:1.1rem 1.2rem 1.3rem; margin:0 0 1.4rem; color:#D6E3E8 }
.bz-uitleg h2{ font-family:'Anton',Impact,sans-serif; font-size:1.25rem; letter-spacing:.02em;
  color:#fff; margin:0 0 .9rem; text-transform:uppercase }
.bz-uitleg h3{ display:flex; align-items:center; gap:.45rem; font-size:.82rem;
  text-transform:uppercase; letter-spacing:.06em; color:#E8B04B; margin:1.4rem 0 .5rem }
.bz-uitleg h3:first-of-type{ margin-top:0 }
.bz-uitleg h3 .ic{ width:16px; height:16px; flex:0 0 auto }
.bz-uitleg p{ margin:0 0 .6rem; font-size:.92rem; line-height:1.6 }
.bz-uitleg ul,.bz-uitleg ol{ margin:0; padding-left:1.15rem; font-size:.92rem; line-height:1.6 }
.bz-uitleg li{ margin:0 0 .45rem }
.bz-uitleg li:last-child{ margin-bottom:0 }
.bz-uitleg b{ color:#fff }
.bz-uitleg i{ font-style:normal; color:#E8B04B }
.bz-uitleg-slot{ margin:1.4rem 0 0; padding-top:.9rem; border-top:1px solid rgba(255,255,255,.1);
  font-size:.85rem; color:#8FA6AF }

/* v133: de kop van de bezorger-app mag omklappen. Met drie knoppen (Uitleg, Mijn profiel,
   Uitloggen) werd hij 478 px breed en zoomde een telefoon de hele pagina uit — ook het
   navigatiescherm stond daardoor half buiten beeld. Op smal staan de knoppen nu onder de
   titel, op breed rechts ervan zoals altijd. */
.driver-head{ flex-wrap:wrap; }
.driver-head > div:not(.kop-knoppen){ flex:1 1 auto; min-width:0; }
.driver-head .kop-knoppen{ display:flex; gap:.4rem; flex:0 0 auto; margin-left:auto; flex-wrap:wrap; }
@media (max-width:560px){
  .driver-head .kop-knoppen{ flex-basis:100%; margin-left:0; }
}

/* v133: in het navigatiescherm pasten Afgeleverd, Centreren en Bel niet naast elkaar op een
   telefoon van 390 px — Bel viel buiten beeld. Op smal: Afgeleverd over de volle breedte,
   Centreren en Bel eronder. */
@media (max-width:480px){
  .bz-nav-knoppen{ flex-wrap:wrap; }
  .bz-nav-knoppen #bz-nav-klaar{ flex:1 1 100%; }
  .bz-nav-knoppen #bz-nav-centreer, .bz-nav-knoppen #bz-nav-bel{ flex:1 1 0; }
}

/* v134: kassa — waarschuwing "buiten het bezorggebied" (geen blokkade meer) */
.pg-gebied{ margin:.4rem 0 0; padding:.55rem .75rem; border-radius:10px; font-size:.86rem; line-height:1.45;
  background:rgba(245,167,59,.16); border:1px solid #E8A02A; color:#6b3d00; }
.pg-gebied[hidden]{ display:none; }

/* v134: keuken — badge "buiten gebied" op de kaart en de noot in de omzet-dialoog */
.k-buiten{ display:inline-block; margin-left:.45rem; padding:.08rem .45rem; border-radius:6px; font-size:.7rem;
  font-weight:800; letter-spacing:.04em; text-transform:uppercase; background:#F5A73B; color:#2b1a00; vertical-align:middle; }
.ky-gebied{ margin:.3rem 0 0; padding:.5rem .7rem; border-radius:8px; font-size:.85rem; line-height:1.45;
  background:rgba(245,167,59,.16); border:1px solid #E8A02A; color:#6b3d00; }
.ky-gebied[hidden]{ display:none; }

/* v134: bezorger — noot bij een stop buiten het vaste gebied */
.stop-buiten{ margin:.35rem 0 0; padding:.35rem .6rem; border-radius:8px; font-size:.82rem; font-weight:700;
  background:rgba(245,167,59,.18); border:1px solid rgba(245,167,59,.6); color:#FFD9A8; }

/* v134 — bonnummer links, boven naam en adres (wens Bas: de bezorger ziet het in één blik).
   Het nummer stond rechts in de kopregel; die regel houdt nu alleen de zaaknaam en
   AFHALEN/BEZORGEN. Het nummer staat groot en kaal aan de linkerkant, met code, datum,
   bron en printtijd in klein ernaast — samen op één regel, zodat de kop niet hoger wordt
   dan in v129. Geen tussentinten: het is een tonerprinter. */
.bon--a4 .b-bonblok{ display:flex; align-items:baseline; gap:10px; margin:2px 0 4px; }
.bon--a4 .b-bonblok .b-nr{ text-align:left; font-size:34px; line-height:1; letter-spacing:1px; flex:0 0 auto; }
.bon--a4 .b-bonblok .b-meta{ font-size:11px; line-height:1.3; flex:1 1 auto; min-width:0; }
.bon--a4 .b-vlag{ margin:5px 0 0; padding:4px 8px; border:2px solid #000; font-size:14px; font-weight:800;
  letter-spacing:1px; text-align:center; }
.bon--a4 .b-vlag[hidden]{ display:none; }
/* de smalle bon kent het blok ook, maar daar staat het nummer gewoon groot bovenaan */
.bon:not(.bon--a4) .b-bonblok .b-nr{ font-size:22px; font-weight:800; }
.bon:not(.bon--a4) .b-bonblok .b-meta{ font-size:11px; }
.bon:not(.bon--a4) .b-vlag[hidden]{ display:none; }

/* v134 — de iDEAL-knop: beeldmerk links, tekst rechts. Bovenaan en als hoofdknop. */
.btn--ideal{ display:flex; align-items:center; justify-content:center; gap:.8rem; text-align:left; padding:.7rem 1rem; }
.btn--ideal .ideal-merk{ flex:0 0 auto; display:flex; }
.btn--ideal .ideal-merk img{ display:block; width:auto; height:40px; border-radius:6px; }
.btn--ideal .ideal-tekst{ display:flex; flex-direction:column; gap:.1rem; min-width:0; }
.btn--ideal .ideal-sub{ opacity:.85; font-weight:600; font-size:.78em; }
.btn--ideal:disabled .ideal-merk img{ filter:grayscale(1); opacity:.55; }
@media (max-width:480px){ .btn--ideal .ideal-merk img{ height:30px; } .btn--ideal{ gap:.55rem; padding:.65rem .7rem; } .btn--ideal .ideal-tekst > span:first-child{ font-size:.93em; } }

/* ---------- v135: turn-by-turn navigatie in de bezorger-app ----------
   De kop is nu twee regels: bovenaan de eerstvolgende afslag (pijl, afstand, "Linksaf,
   Munnikenweg") naast de totaalcijfers, daaronder klein het adres van de klant. De kaart
   draait mee en kijkt schuin vooruit; de bezorger staat als "puck" onderin het beeld. */
.bz-nav-kop{ flex-direction:column; align-items:stretch; gap:.4rem; padding-bottom:1.2rem;
  background:linear-gradient(#0B1F27 72%, rgba(11,31,39,0)); }
.bz-nav-rij{ display:flex; align-items:center; gap:.7rem; }
.bz-nav-afslag{ flex:1 1 auto; min-width:0; display:flex; align-items:center; gap:.7rem; }
.bz-nav-icoon{ flex:0 0 auto; width:58px; height:58px; border-radius:16px; background:#F5A73B; color:#0B1F27;
  display:flex; align-items:center; justify-content:center; }
.bz-nav-icoon svg{ width:40px; height:40px; }
.bz-nav-icoon:empty{ background:rgba(255,255,255,.12); }
.bz-nav-tekst{ flex:1 1 auto; min-width:0; }
.bz-nav-tekst b{ display:block; font-size:1.75rem; line-height:1.05; font-variant-numeric:tabular-nums; }
.bz-nav-tekst span{ display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; margin-top:.15rem;
  font-size:1rem; line-height:1.2; color:#fff; overflow:hidden; }
.bz-nav-kop .bz-nav-adres{ padding-left:calc(40px + .7rem); font-size:.88rem; color:#BFE9F7;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bz-nav-kop .bz-nav-adres b{ display:inline; font-size:inherit; font-weight:700; color:#fff; }
.bz-nav-kop .bz-nav-adres span{ display:inline; font-size:inherit; color:#BFE9F7; }
.bz-nav-kop .bz-nav-adres span:not(:empty)::before{ content:' · '; }
.bz-nav-cijfers b{ font-size:1.25rem; }

/* de bezorger zelf op de kaart: een blauwe stip met een pijl in de rijrichting */
.bz-puck{ position:relative; width:30px; height:30px; border-radius:50%; background:#00A3D9; border:3px solid #fff;
  box-shadow:0 0 0 7px rgba(0,163,217,.28), 0 2px 8px rgba(0,0,0,.45); }
.bz-puck-pijl{ position:absolute; left:50%; top:-18px; width:0; height:0; transform:translateX(-50%);
  border-left:11px solid transparent; border-right:11px solid transparent; border-bottom:17px solid #fff;
  filter:drop-shadow(0 1px 2px rgba(0,0,0,.4)); }
/* de MapLibre-stylesheet zet .maplibregl-map op position:relative — dan is de kaart 0 px
   hoog. Hier winnen we het op specificiteit: de kaart vult het hele scherm. */
.bz-nav-map.maplibregl-map{ position:absolute; inset:0; width:auto; height:auto; }
.bz-nav-map .maplibregl-marker{ cursor:default; }
.bz-nav-map .maplibregl-ctrl-attrib{ font-size:9px; background:rgba(255,255,255,.7); }
.bz-nav-map .maplibregl-ctrl-bottom-right, .bz-nav-map .leaflet-bottom{ bottom:var(--bz-voet, 150px); }
.bz-nav-map canvas{ outline:none; }

/* de knoppen onderin: Afgeleverd groot, de rest ernaast; op smal in twee rijen */
.bz-nav-knoppen #bz-nav-overzicht, .bz-nav-knoppen #bz-nav-stem{ flex:0 0 auto; }
.bz-nav-stem{ gap:.35rem; }
.bz-nav-stem svg{ width:18px; height:18px; flex:0 0 auto; }
.bz-nav-stem.is-uit{ opacity:.65; }
.bz-nav-stem[hidden]{ display:none; }
@media (max-width:480px){
  .bz-nav-knoppen #bz-nav-overzicht, .bz-nav-knoppen #bz-nav-stem{ flex:1 1 0; }
  .bz-nav-knoppen .btn--ghost{ padding-left:.5rem; padding-right:.5rem; font-size:.84rem; letter-spacing:0; }
  .bz-nav-knoppen .btn--ghost svg{ width:16px; height:16px; }
  .bz-nav-icoon{ width:52px; height:52px; border-radius:14px; }
  .bz-nav-icoon svg{ width:36px; height:36px; }
  .bz-nav-tekst b{ font-size:1.5rem; }
  .bz-nav-tekst span{ font-size:.95rem; }
  .bz-nav-cijfers b{ font-size:1.1rem; }
  .bz-nav-cijfers span{ font-size:.76rem; }
}

/* ===================================================================================
   v175 — adres op postcode + huisnummer (kassa en klantportaal)
   Postcode en huisnummer staan naast elkaar; het gevonden adres komt op de regel
   eronder, met de vraag die Maico hardop stelt. Groen = bevestigd, oranje = zelf
   ingetikt en dus niet nagekeken, rood = niet in het register gevonden.
   =================================================================================== */
.pg-adresrij{ display:flex; gap:.6rem; align-items:flex-start; flex-wrap:wrap; }
.pg-adresrij .pg-veld{ flex:1 1 130px; margin:0; }
.pg-adresrij .pg-veld:first-child{ flex:1 1 150px; max-width:190px; }
.pg-adresrij .pg-veld:last-child{ max-width:150px; }
.pg-optioneel{ font-weight:400; opacity:.6; }

.pg-adresuit{ margin:.5rem 0 0; padding:.55rem .75rem; border-radius:10px; line-height:1.45;
  font-size:.95rem; background:var(--vlak, #f4f4f6); border:1px solid rgba(0,0,0,.12); }
.pg-adresuit[hidden]{ display:none; }
.pg-adresuit b{ display:block; font-size:1.02rem; }
.pg-adresuit.is-bezig{ opacity:.7; }
.pg-adresuit.is-bezig b{ font-weight:500; }
.pg-adresuit.is-gevonden{ background:rgba(31,122,74,.10); border-color:#1F7A4A; }
.pg-adresuit.is-goed{ background:rgba(31,122,74,.16); border-color:#1F7A4A; color:#0e4a2b; }
.pg-adresuit.is-handmatig{ background:rgba(245,167,59,.16); border-color:#E8A02A; color:#6b3d00; }
.pg-adresuit.is-handmatig b{ font-size:.88rem; font-weight:600; }
.pg-adresuit.is-geen{ background:rgba(200,42,42,.12); border-color:#C82A2A; color:#7a1414; }
.pg-adresuit.is-geen b{ font-size:.88rem; font-weight:600; }

.pg-adresvraag{ display:flex; gap:.45rem; align-items:center; flex-wrap:wrap; margin-top:.45rem; }
.pg-adresvraag[hidden]{ display:none; }
.pg-adresvraag span{ font-size:.88rem; font-weight:700; }
.pg-adresvraag button{ border:1px solid rgba(0,0,0,.2); border-radius:8px; padding:.32rem .7rem;
  font:inherit; font-size:.86rem; font-weight:700; cursor:pointer; background:#fff; }
.pg-adresvraag .pg-ja{ background:#1F7A4A; border-color:#1F7A4A; color:#fff; }
.pg-adresvraag .pg-nee{ background:#fff; }
.pg-handmatig[hidden]{ display:none; }

/* de markering "adres niet nagekeken" op het keukenscherm en in de bezorgapp */
.k-ongecheckt, .bz-ongecheckt{ display:inline-block; margin-left:.45rem; padding:.08rem .45rem;
  border-radius:6px; font-size:.7rem; font-weight:800; letter-spacing:.04em; text-transform:uppercase;
  background:#C82A2A; color:#fff; vertical-align:middle; }
.bz-ongecheckt{ margin:.25rem 0 0; display:block; width:fit-content; }

/* "Openen in Google Maps" bij een stop die niet op de kaart staat */
.bz-geenkaart{ margin:.4rem 0 0; padding:.55rem .7rem; border-radius:10px; font-size:.86rem;
  line-height:1.45; background:rgba(200,42,42,.10); border:1px solid #C82A2A; color:#7a1414; }
.bz-geenkaart a{ display:inline-block; margin-top:.4rem; padding:.35rem .75rem; border-radius:8px;
  background:#C82A2A; color:#fff; font-weight:700; text-decoration:none; }

/* ===================================================================================
   v176 — afhaalbon: eerst betalen, daarna meegeven (wens Maico, 13 sep)
   De knop zegt zelf of er afgerekend is: grijs "Betalen", en vol groen met witte
   hoofdletters zodra het geld binnen is. Dezelfde knop op de balietablet en in de
   bonpopup, zodat het op beide schermen hetzelfde leest.
   =================================================================================== */
.kd-betaald{ border:1px solid rgba(0,0,0,.22); border-radius:9px; padding:.34rem .8rem;
  font:inherit; font-size:.86rem; font-weight:700; line-height:1.3; cursor:pointer;
  background:#fff; color:var(--ink, #1b1b1f); white-space:nowrap; }
.kd-betaald:hover{ background:#f3f3f5; }
.kd-betaald.is-betaald{ background:#1F7A4A; border-color:#1F7A4A; color:#fff;
  letter-spacing:.03em; cursor:default; opacity:1; }
.kd-betaald.is-betaald:hover{ background:#1F7A4A; }
.kd-betaald[disabled]{ opacity:1; }

.kd-afhaal{ display:flex; gap:.5rem; align-items:center; flex-wrap:wrap; margin:.15rem 0 .2rem; }
.kd-afhaal[hidden]{ display:none; }
.kd-afhaal .kd-afhaalknop[disabled]{ opacity:.45; cursor:not-allowed; }

/* ---------- v188 — Mijn LOBO: mijn gegevens ----------
   Op de laptop breder en in twee kolommen (naam en contact | adres), zodat het hele
   formulier in één keer te overzien is. Op de telefoon gewoon onder elkaar. */
.mp-container{ max-width:840px; }
@media (min-width:1024px){ .mp-container{ max-width:1080px; } }
.mp-factuurhint{ margin:.9rem 0 0; padding:.7rem .9rem; border-radius:12px; background:#EEF8FD;
  border:1px solid #B9E3F5; font-size:.9rem; color:var(--text); }
.mp-factuurhint a{ color:var(--brand-ink); font-weight:800; }
.mg-kop{ margin-bottom:1.1rem; }
.mg-kop .auth-note{ margin:.15rem 0 0; max-width:62ch; }
.mg-kolommen{ display:grid; grid-template-columns:1fr; gap:.4rem; }
@media (min-width:900px){
  .mg-kolommen{ grid-template-columns:1fr 1fr; gap:2.4rem; }
  .mg-blok + .mg-blok{ border-left:1px solid var(--line); padding-left:2.4rem; }
}
.mg-titel{ font-family:var(--font-body); font-size:.76rem; font-weight:800; letter-spacing:.12em;
  text-transform:uppercase; color:var(--muted); margin:0 0 .75rem; }
.mg-opt{ font-weight:500; color:var(--muted); }
.mg-noot{ display:block; font-size:.8rem; color:var(--muted); line-height:1.45; }
.mg-mail{ display:flex; gap:.5rem; align-items:center; }
.mg-mail input{ flex:1; min-width:0; background:#F4F2EC; color:var(--text); }
.mg-mail .btn{ flex:0 0 auto; }
.mg-mailstap{ margin:-.3rem 0 1rem; padding:1rem 1rem .6rem; border:1.5px solid #B9E3F5; border-radius:14px; background:#F6FBFE; }
.mg-mailstap .field{ margin-bottom:.6rem; }
.mg-stap{ margin:0 0 .7rem; font-size:.92rem; color:var(--text); }
.mg-knoppen{ display:flex; gap:.5rem; align-items:center; flex-wrap:wrap; margin:.55rem 0 .2rem; }
.mg-link{ border:0; background:none; padding:.4rem .2rem; font:inherit; font-size:.9rem; font-weight:700;
  color:var(--muted); text-decoration:underline; cursor:pointer; }
.mg-link:hover{ color:var(--ink); }
.mg-code{ max-width:11rem; font-size:1.35rem; font-weight:800; letter-spacing:.35em; font-variant-numeric:tabular-nums; }
.mg-voet{ display:flex; gap:.8rem; align-items:center; flex-wrap:wrap; margin-top:.6rem; padding-top:1.1rem; border-top:1px solid var(--line); }
.mg-voet .pc-feedback{ margin-top:0; }
@media (max-width:520px){
  .mg-mail{ flex-wrap:wrap; }
  .mg-mail .btn{ width:100%; justify-content:center; }
}


/* ---------- v194: logboek per bon (Beheer) ----------------------------------------
   Een bon die misging moet na te lopen zijn: wat gebeurde er, wanneer, en door wie.
   Een tijdlijn leest hier prettiger dan een tabel - de tijd staat vast in een smalle
   kolom, de gebeurtenis loopt door, en de veranderingen staan als paartjes eronder. */
.hd-stappen{ margin-top:1rem; border-top:1px solid var(--line); padding-top:.9rem; }
.hd-stap-lijst{ list-style:none; margin:.2rem 0 0; padding:0; display:grid; gap:.45rem; }
.hd-stap{ display:grid; grid-template-columns:5.6rem 1fr; gap:.6rem; align-items:baseline;
  font-size:.88rem; line-height:1.45; }
.hd-stap-tijd{ color:var(--muted); font-variant-numeric:tabular-nums; white-space:nowrap; }
.hd-stap-wat{ font-weight:800; }
.hd-stap-wie{ color:var(--muted); font-weight:600; }
.hd-stap-velden{ margin:.1rem 0 0; color:var(--ink); }
.hd-stap-veld{ display:block; }
.hd-stap-veld b{ font-weight:700; }
.hd-stap-oud{ color:var(--muted); text-decoration:line-through; }
.hd-stap-pijl{ color:var(--muted); }
.hd-stap--verwijderd .hd-stap-wat{ color:#c0392b; }
.hd-stap--mail .hd-stap-wat{ font-weight:700; }
.hd-stap-melding{ margin:.5rem 0 0; font-size:.85rem; color:var(--muted); }

/* ==========================================================================
   v195 — CATERING (catering.html)
   Dezelfde bestelpagina, met een eigen kop: de schaal ernaast, en de drie stappen die
   echt een volgorde zijn. In de winkelwagen een balk die telt tot 12, 16 of 20.
   ========================================================================== */
.page-hero--catering{ padding: calc(var(--header-h) + clamp(1.6rem,3.4vw,2.8rem)) 0 clamp(1.8rem,3vw,2.6rem); }
.page-hero--catering h1{ font-size:clamp(2.4rem,5.2vw,4rem); hyphens:manual; }
.page-hero--catering .lead{ max-width:34rem; }
.cat-hero{ --cat-gap:clamp(1.6rem,4vw,3.6rem); display:grid; grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr); gap:var(--cat-gap); align-items:center; }
.cat-hero-foto{ position:relative; margin:0; justify-self:end; width:min(100%, 440px); }
.cat-hero-foto img{
  display:block; width:100%; height:auto; aspect-ratio:4/3; object-fit:cover;
  border-radius:var(--r-lg); border:6px solid #fff;
  box-shadow:0 30px 60px -24px rgba(0,0,0,.7), 0 0 0 1px rgba(255,255,255,.08);
  transform:rotate(1.6deg);
}
.cat-hero-foto figcaption{
  position:absolute; left:-1rem; bottom:-1rem; transform:rotate(-2deg);
  display:flex; flex-direction:column; align-items:flex-start; gap:.1rem;
  background:var(--brand); color:#04222E; border-radius:var(--r-md);
  padding:.55rem .95rem .6rem; box-shadow:var(--shadow-brand);
}
.cat-hero-foto figcaption b{ font-family:var(--font-display); font-weight:400; font-size:1.55rem; letter-spacing:.04em; line-height:1; }
.cat-hero-foto figcaption span{ font-size:.78rem; font-weight:800; letter-spacing:.06em; text-transform:uppercase; }

.cat-stappen{
  list-style:none; counter-reset:stap; margin:.2rem 0 0; padding:0;
  display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:.9rem;
}
.cat-stappen li{
  counter-increment:stap; position:relative; display:flex; flex-direction:column; gap:.2rem;
  padding:.9rem 1rem .95rem 3.1rem; border-radius:var(--r-md);
  background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.12);
}
.cat-stappen li::before{
  content:counter(stap); position:absolute; left:.9rem; top:.85rem;
  width:1.7rem; height:1.7rem; border-radius:50%; display:grid; place-items:center;
  background:var(--brand); color:#04222E; font-weight:800; font-size:.9rem;
}
.cat-stappen b{ color:#fff; font-size:.98rem; }
.cat-stappen span{ color:#AFC4CD; font-size:.86rem; line-height:1.45; }
/* v198 — de knoppenrij staat onder tekst én foto (over de hele breedte), zodat Inloggen
   rechts uitkomt zoals op de bestelpagina. De negatieve marge haalt de rij-afstand van het
   raster terug naar dezelfde 1,3rem als eerst. */
.cat-hero > .pdf-links{ grid-column:1 / -1; margin-top:calc(1.3rem - var(--cat-gap)); }

@media (max-width:980px){
  .cat-hero{ grid-template-columns:1fr; }
  .cat-hero-foto{ justify-self:start; width:min(100%, 520px); order:-1; margin-bottom:.4rem; }
  .cat-hero-foto img{ aspect-ratio:16/9; transform:none; border-width:4px; }
  .cat-hero-foto figcaption{ left:.7rem; bottom:-.8rem; }
}
@media (max-width:760px){
  /* op een telefoon wil je snel naar de broodjes: foto als smalle strook, stappen compact */
  .page-hero--catering{ padding: calc(var(--header-h) + 1.1rem) 0 1.5rem; }
  .page-hero--catering h1{ font-size:clamp(2rem,9vw,2.8rem); margin-bottom:.25em; }
  .page-hero--catering .lead{ font-size:1rem; line-height:1.55; }
  .page-hero--catering .crumbs{ margin-bottom:.7rem; }
  .page-hero--catering .hero-status{ margin-bottom:1rem; }
  .cat-hero-foto{ width:100%; margin-bottom:.9rem; }
  .cat-hero-foto img{ aspect-ratio:16/7; }
  .cat-hero-foto figcaption{ padding:.35rem .7rem .4rem; bottom:-.7rem; }
  .cat-hero-foto figcaption b{ font-size:1.15rem; }
  .cat-hero-foto figcaption span{ font-size:.66rem; }
  .cat-stappen{ grid-template-columns:1fr; gap:.45rem; }
  .cat-stappen li{ padding:.6rem .85rem .65rem 2.8rem; }
  .cat-stappen li::before{ top:.62rem; width:1.55rem; height:1.55rem; font-size:.82rem; }
  .cat-stappen b{ font-size:.94rem; }
  .cat-stappen span{ font-size:.83rem; }
}

/* de balk in de winkelwagen: telt mee tot een schaal */
.schaal-balk{
  display:grid; gap:.6rem; padding:1rem 1.4rem 1.05rem;
  background:#EEF8FD; border-bottom:1px solid rgba(0,144,206,.18);
}
.schaal-balk .sb-kop{ display:flex; gap:.7rem; align-items:flex-start; }
.schaal-balk .sb-ic{
  flex:0 0 auto; width:2.1rem; height:2.1rem; border-radius:50%; display:grid; place-items:center;
  background:#fff; color:var(--brand-ink); box-shadow:0 0 0 1px rgba(0,144,206,.2);
}
.schaal-balk .sb-ic svg{ width:1.15rem; height:1.15rem; }
.schaal-balk .sb-tekst{ display:flex; flex-direction:column; gap:.1rem; min-width:0; }
.schaal-balk .sb-tekst b{ font-size:1rem; color:var(--ink); line-height:1.3; }
.schaal-balk .sb-tekst small{ font-size:.84rem; color:var(--muted); line-height:1.4; }
.schaal-balk .sb-meter{ height:8px; border-radius:999px; background:rgba(0,144,206,.15); overflow:hidden; }
.schaal-balk .sb-meter i{ display:block; height:100%; border-radius:inherit; background:var(--brand); transition:width .25s ease; }
.schaal-balk .sb-schalen{ display:flex; flex-wrap:wrap; gap:.4rem; }
.schaal-balk .sb-schaal{
  display:inline-flex; align-items:center; gap:.35rem; padding:.2rem .65rem .2rem .45rem;
  border-radius:999px; background:#fff; font-weight:800; font-size:.84rem; color:#16663F;
  box-shadow:0 0 0 1px rgba(35,189,108,.35);
}
.schaal-balk .sb-schaal::before{
  content:""; width:1.05rem; height:.62rem; border-radius:.3rem; border:2px solid currentColor; opacity:.7;
}
.schaal-balk .sb-schaal::after{ content:"stuks"; font-weight:600; font-size:.74rem; opacity:.75; }
.schaal-balk.is-ok{ background:#EFFAF4; border-bottom-color:rgba(35,189,108,.25); }
.schaal-balk.is-ok .sb-ic{ background:var(--green); color:#fff; box-shadow:none; }
.schaal-balk.is-ok .sb-meter{ background:rgba(35,189,108,.18); }
.schaal-balk.is-ok .sb-meter i{ background:var(--green); }
.schaal-balk.is-leeg .sb-meter{ display:none; }
.schaal-balk.is-tik{ animation:seg-tik .42s ease 2; }
@media (prefers-reduced-motion: reduce){ .schaal-balk.is-tik{ animation:none; } .schaal-balk .sb-meter i{ transition:none; } }
/* v213 — cateringbroodjes per 2: oneven in de mand is oranje (geen fout van de klant,
   wel iets om recht te zetten), en de knoppen op de kaart zeggen -2 en +2 */
.schaal-balk.is-oneven{ background:#FFF6E8; border-bottom-color:rgba(232,160,42,.35); }
.schaal-balk.is-oneven .sb-ic{ background:#E8A02A; color:#fff; box-shadow:none; }
.schaal-balk.is-oneven .sb-meter{ display:none; }   /* eerst per 2 rechtzetten; de voortgang komt daarna terug */
.add-btn .add-twee{ font-size:1.02rem; font-weight:800; letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
.qty-step.is-twee .step-min{ font-size:1.02rem; font-weight:800; letter-spacing:-.02em; }
.cart-line.is-oneven .cl-qty{ color:#8a4b00; }
.cart-line .cl-oneven{ display:block; color:#8a4b00; font-weight:700; }
.cat-banner .cat-per-twee{ color:#fff; font-weight:800; }

/* ---------- v215: de datumkiezer — de dag van de catering als kalender ----------
   Wens Bas (29 sep): in de keuzelijst moest je ver scrollen om een dag over een paar weken
   te kiezen. De <select> blijft onder water de bron (zie lobo-datumkiezer.js); de knop
   staat op zijn plek en de kalender klapt onder de rij open, over de volle breedte. */
.ldk-bron{ position:absolute !important; width:1px !important; height:1px !important; padding:0 !important;
  margin:-1px !important; overflow:hidden !important; clip:rect(0 0 0 0) !important; clip-path:inset(50%) !important;
  white-space:nowrap !important; border:0 !important; }
.ldk-knop{ display:flex; align-items:center; justify-content:space-between; gap:.6rem; width:100%; height:2.625rem;
  border:1.5px solid var(--line); border-radius:12px; padding:0 .8rem 0 .85rem; background:#fff; color:var(--ink);
  font:inherit; font-size:1rem; text-align:left; cursor:pointer; transition:border-color .15s ease; }
.ldk-knop .ldk-waarde{ flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ldk-knop.is-leeg .ldk-waarde{ color:var(--muted); }
.ldk-knop .ldk-ic{ flex:0 0 auto; display:grid; place-items:center; color:var(--brand-ink); }
.ldk-knop:hover:not(:disabled), .ldk-knop.is-open{ border-color:var(--brand); }
.ldk-knop:focus-visible{ outline:2px solid var(--brand-ink); outline-offset:2px; }
.ldk-knop:disabled{ opacity:.5; cursor:not-allowed; }
.ldk-paneel{ margin:-.35rem 0 .95rem; padding:.8rem .8rem .55rem; background:#fff; border:1.5px solid var(--line);
  border-radius:14px; box-shadow:0 14px 34px -22px rgba(11,21,26,.45); max-width:24rem;
  scroll-margin-bottom:6.5rem; }   /* op de telefoon niet onder de knoppenbalk onderin */
.ldk-paneel[hidden]{ display:none; }
/* in een rij met twee velden (Dag en Tijd): op de computer onder de rij, over de volle
   breedte; op de telefoon, waar de velden onder elkaar staan, direct onder Dag */
.field-row > .ldk-paneel{ grid-column:1 / -1; grid-row:2; margin-top:-.45rem; }
@media (max-width:520px){ .field-row > .ldk-paneel{ grid-row:auto; } }
.ldk-kop{ display:flex; align-items:center; justify-content:space-between; gap:.5rem; margin-bottom:.45rem; }
.ldk-maand{ font-weight:800; font-size:1rem; color:var(--ink); }
.ldk-nav{ width:36px; height:36px; padding:0; border-radius:50%; border:1.5px solid var(--line); background:#fff;
  color:var(--ink); display:grid; place-items:center; cursor:pointer; }
.ldk-nav:hover:not(:disabled){ border-color:var(--brand); color:var(--brand-ink); }
.ldk-nav:disabled{ opacity:.3; cursor:default; }
.ldk-nav:focus-visible{ outline:2px solid var(--brand-ink); outline-offset:2px; }
.ldk-week, .ldk-raster{ display:grid; grid-template-columns:repeat(7, minmax(0, 1fr)); gap:.25rem; }
.ldk-week span{ text-align:center; font-size:.7rem; font-weight:800; letter-spacing:.06em; text-transform:uppercase;
  color:var(--muted); padding:.1rem 0 .25rem; }
.ldk-dag{ height:2.5rem; min-width:0; padding:0; border:1.5px solid transparent; border-radius:10px; background:#EAF7FD;
  color:var(--ink); font:inherit; font-weight:700; font-size:.95rem; font-variant-numeric:tabular-nums; cursor:pointer; }
.ldk-dag:hover{ border-color:var(--brand); }
.ldk-dag.is-uit{ background:transparent; color:rgba(11,21,26,.32); font-weight:500; cursor:default; }
.ldk-dag.is-uit:hover{ border-color:transparent; }
.ldk-dag.is-grijs{ color:rgba(11,21,26,.45);
  background:repeating-linear-gradient(135deg, transparent 0 4px, rgba(11,21,26,.06) 4px 8px); }
.ldk-dag.is-vandaag{ box-shadow:inset 0 0 0 1.5px rgba(11,21,26,.22); }
.ldk-dag.is-gekozen{ background:var(--brand); color:#04222E; }
.ldk-dag:focus-visible{ outline:2px solid var(--ink); outline-offset:1px; }
.ldk-gat{ display:block; }
.ldk-noot{ margin:.5rem .1rem .1rem; font-size:.84rem; line-height:1.4; color:var(--muted); }
.ldk-noot:empty{ margin:0; }
.ldk-noot.is-reden{ color:#8a4b00; font-weight:600; }
@media (prefers-reduced-motion: reduce){ .ldk-knop{ transition:none; } }

.fab-schaal{ display:block; font-size:.74rem; font-weight:700; color:#AFC4CD; letter-spacing:.01em; }
.fab-schaal:empty{ display:none; }

/* v195 — CATERING op de bon (wens Bas: "dikgedrukt CATERING"). Een zwarte balk dwars
   over het vel met de dag erin, en in kleiner schrift de schalen en wit/bruin. Wit op
   zwart valt op een tonerprinter het meest op; print-color-adjust houdt hem zwart. */
.bon .b-catering{ margin:7px 0 0; padding:6px 10px 7px; background:#000; color:#fff; text-align:center;
  -webkit-print-color-adjust:exact; print-color-adjust:exact; }
.bon .b-catering[hidden]{ display:none; }
.bon .b-catering b{ display:block; font-size:24px; font-weight:800; letter-spacing:2px; line-height:1.2; }
.bon .b-catering small{ display:block; margin-top:2px; font-size:13.5px; font-weight:700; letter-spacing:.2px; line-height:1.3; }
.bon:not(.bon--a4) .b-catering b{ font-size:17px; letter-spacing:1px; }
.bon:not(.bon--a4) .b-catering small{ font-size:11px; }

/* v195 — catering op het keukenscherm: zwart CATERING-label vooraan de typeregel, en
   de dag (vandaag / morgen / vr 26 sep) als wit plaatje boven de tijd — wit, zodat hij
   op elke statuskleur van het tijdblok leesbaar blijft. */
.k-cat{ display:inline-block; margin-right:.45rem; padding:.08rem .45rem .06rem; border-radius:6px;
  background:var(--ink); color:#fff; font-style:normal; font-weight:900; font-size:.74rem;
  letter-spacing:.09em; line-height:1.35; vertical-align:.06em; }
.k-tijdblok .k-cat-dag{ align-self:center; padding:.06rem .38rem; border-radius:5px; background:#fff;
  color:var(--ink); font-size:.66rem; font-weight:900; letter-spacing:.05em; text-transform:uppercase;
  line-height:1.3; white-space:nowrap; }
/* v195 — catering in de bezorgapp: wit op de donkere kaart, zodat hij opvalt naast 18+ */
.stop-catering{ margin:.35rem 0 0; padding:.35rem .6rem; border-radius:8px; background:#fff;
  color:#0B1F2A; font-size:.82rem; font-weight:700; }
.stop-catering b{ font-weight:900; letter-spacing:.08em; }
/* v230/v237: op het bezorgscherm staat het bonnummer altijd rechtsboven, zodat de onderbalk
   de hele breedte heeft voor bezorger, Maps, de stapknop en het bedrag. */
.k-bzscherm .k-bonnr{ top:.45rem; right:.6rem; bottom:auto; left:auto; transform:none; font-size:1.45rem; }
.k-bzscherm .k-kern{ padding-right:2.2rem; }
.k-bzscherm .k-onder > .k-toewijs{ max-width:none; flex:1 1 0; min-width:0; }
.k-bzscherm .k-onder > .k-toewijs select{ width:100%; min-width:0; }
.k-bzscherm .k-maps{ margin-left:auto; }
.k-bzscherm .k-maps + .k-bz-knop{ margin-left:0; }
@media (max-width:560px){
  .k-bzscherm .k-bonnr{ font-size:1.3rem; }
  .k-bzscherm .k-kern{ padding-right:1.9rem; }
  .k-bzscherm .k-bz-knop{ padding-inline:.8rem; font-size:.88rem; }
  .k-bzscherm .k-maps{ padding-inline:.6rem; }
  .k-bzscherm .k-maps span{ display:none; }
}

/* v238 — tegoed: iets wat de zaak vergat, gaat gratis mee met de volgende bestelling.
   Groen = gratis; de winkelwagen-plus is blauw, zoals elke "erbij"-knop op de site. */
.cart-tegoed{ margin:.7rem 0 .2rem; padding:.55rem .75rem .35rem; border-radius:12px;
  background:rgba(35,189,108,.09); border:1px solid rgba(35,189,108,.32); }
.ct-kop{ display:flex; align-items:center; gap:.4rem; margin:0 0 .1rem; font-size:.78rem; font-weight:800;
  letter-spacing:.06em; text-transform:uppercase; color:#157A47; }
.ct-kop svg{ width:16px; height:16px; flex:none; }
.ct-uitleg{ margin:.35rem 0 0; font-size:.84rem; color:var(--muted); line-height:1.4; }
.cart-tegoed .cart-line{ align-items:center; border-bottom-color:rgba(35,189,108,.28); }
.cart-tegoed .cart-line:last-child{ border-bottom:0; }
.cart-line.is-aanbod .cl-qty, .cart-line.is-aanbod .cl-name{ color:var(--muted); }
.cl-gratis{ color:#157A47; font-weight:800; }
.tg-plus{ flex:none; display:inline-flex; align-items:center; justify-content:center; width:42px; height:42px;
  margin:-.2rem -.1rem -.2rem 0; border:0; border-radius:50%; background:var(--brand); color:#fff; cursor:pointer;
  box-shadow:0 2px 8px rgba(0,122,176,.25); transition:transform .12s ease, background-color .15s ease; }
.tg-plus svg{ width:22px; height:22px; }
.tg-plus:hover{ background:var(--brand-ink); }
.tg-plus:active{ transform:scale(.94); }
.tg-plus:focus-visible{ outline:3px solid rgba(0,176,240,.45); outline-offset:2px; }
.tg-plus.is-in{ background:#1e8a4a; box-shadow:none; }
.tg-plus.is-in:hover{ background:#176e3b; }
@media (prefers-reduced-motion: reduce){ .tg-plus{ transition:none; } .tg-plus:active{ transform:none; } }

/* v238 — Mijn LOBO: de tegoedkaart bovenaan */
.tg-kaart{ border:1px solid rgba(35,189,108,.4); background:linear-gradient(180deg, rgba(35,189,108,.08), rgba(35,189,108,0) 70%), #fff; }
.tg-kaart[hidden]{ display:none; }
.tg-kaart-kop{ display:flex; align-items:center; gap:.8rem; }
.tg-kaart-kop .tg-ic{ flex:none; display:inline-flex; width:44px; height:44px; border-radius:12px; align-items:center;
  justify-content:center; background:rgba(35,189,108,.16); color:#157A47; }
.tg-kaart-kop .tg-ic svg{ width:24px; height:24px; }
.tg-kaart-kop h2{ font-size:1.3rem; margin:0; }
.tg-kaart-kop .overline{ margin:0; color:#157A47; }
.tg-kaart-uitleg{ margin:.7rem 0 .4rem; font-size:.92rem; color:var(--muted); max-width:60ch; }
.tg-lijst{ list-style:none; margin:0; padding:0; }
.tg-regel{ display:flex; align-items:center; gap:.8rem; padding:.65rem 0; border-bottom:1px dashed var(--line); }
.tg-regel:last-child{ border-bottom:0; }
.tg-aantal{ font-weight:800; color:var(--brand-ink); min-width:2.2ch; font-variant-numeric:tabular-nums; }
.tg-naam{ flex:1; min-width:0; font-weight:700; color:var(--ink); }
.tg-naam small{ display:block; font-weight:500; color:var(--muted); font-size:.84rem; }
.tg-naam .tg-wanneer{ color:#157A47; font-weight:600; }
.tg-voet{ display:flex; flex-wrap:wrap; align-items:center; gap:.6rem 1rem; margin-top:.7rem; }
.tg-voet[hidden]{ display:none; }
.tg-voet p{ margin:0; font-size:.88rem; color:#157A47; font-weight:700; }

/* v238 — Beheer → Historie → bon: tegoed geven */
.hd-tegoed{ margin-top:1rem; padding:.85rem 1rem .9rem; border:1px solid var(--line); border-radius:12px; }
.hd-tegoed[hidden]{ display:none; }
.hd-t-lijst{ list-style:none; margin:.2rem 0 .6rem; padding:0; }
.hd-t-lijst:empty{ display:none; }
.hd-t-lijst li{ display:flex; flex-wrap:wrap; align-items:center; gap:.3rem .7rem; padding:.4rem 0;
  border-bottom:1px dashed var(--line); font-size:.9rem; }
.hd-t-lijst li:last-child{ border-bottom:0; }
.hd-t-lijst .hd-t-wat{ flex:1 1 14rem; min-width:0; font-weight:700; }
.hd-t-lijst .hd-t-wat small{ display:block; font-weight:500; color:var(--muted); }
.hd-t-pil{ display:inline-block; padding:.08rem .5rem; border-radius:999px; font-size:.74rem; font-weight:800;
  letter-spacing:.03em; white-space:nowrap; }
.hd-t-pil.is-open{ background:rgba(35,189,108,.16); color:#157A47; }
.hd-t-pil.is-gebruikt{ background:rgba(0,176,240,.14); color:var(--brand-ink); }
.hd-t-pil.is-ingetrokken{ background:rgba(11,21,26,.07); color:var(--muted); text-decoration:line-through; }
.hd-t-kies{ display:flex; align-items:center; gap:.7rem; padding:.45rem 0; border-bottom:1px dashed var(--line); }
.hd-t-kies:last-of-type{ border-bottom:0; }
.hd-t-kies input[type="checkbox"]{ width:20px; height:20px; flex:none; accent-color:var(--brand); }
.hd-t-kies label{ flex:1; min-width:0; font-weight:700; cursor:pointer; }
.hd-t-kies label small{ display:block; font-weight:500; color:var(--muted); }
.hd-t-kies .hd-t-n{ width:4.4rem; font:inherit; font-weight:700; padding:.3rem .45rem; border:1px solid var(--line);
  border-radius:8px; text-align:center; }
.hd-t-kies.is-op{ opacity:.55; }
.hd-t-info-let{ color:#8a4b00; font-weight:700; }

/* v240 — meerdere soorten schalen: de naam van de soort vóór zijn schalen */
.schaal-balk .sb-soort{ align-self:center; font-size:.76rem; font-weight:800; letter-spacing:.04em;
  text-transform:uppercase; color:#16663F; margin-left:.2rem; }
.schaal-balk .sb-soort:first-child{ margin-left:0; }
.schaal-balk .sb-groep{ display:inline-flex; flex-wrap:wrap; align-items:center; gap:.4rem; margin-right:.5rem; }

/* v241 — een prijs die aan de gewone kaart hangt (schalen baguettes en kadetjes) */
.admin-prijs-gekoppeld{ background:repeating-linear-gradient(135deg, rgba(0,176,240,.06) 0 6px, transparent 6px 12px) !important;
  color:var(--brand-ink) !important; cursor:help; }

/* v242 — keukenscherm: bij catering ook de dag wijzigen */
.kt-dag{ display:flex; flex-direction:column; gap:.3rem; margin:0 0 .8rem; }
.kt-dag[hidden]{ display:none; }
.kt-dag label{ font-size:.78rem; font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--muted); }
.kt-select--dag{ font-size:1.15rem; width:100%; }
/* v242: de dag als kalender — de knop zo groot als de keuzelijsten voor uur en minuten */
.kt-dag .ldk-knop{ height:3.1rem; font-size:1.15rem; font-weight:800; border-width:2px; }
#k-tijd .ldk-paneel{ margin:-.35rem 0 .9rem; max-width:none; }
#k-tijd .ldk-dag{ height:2.7rem; font-size:1rem; }
/* v242 — keukenscherm achter: tabbladen "Bestellingen" en "Aankomende bestellingen" */
.k-tabs{ display:flex; flex-wrap:wrap; gap:.4rem 1.4rem; align-items:flex-end; }
.k-tabs[hidden]{ display:none; }
.k-tab{ appearance:none; background:none; border:0; border-bottom:4px solid transparent; padding:.15rem .1rem .35rem;
  margin:0; font-size:1.7rem; line-height:1.1; color:var(--muted); cursor:pointer; display:inline-flex; align-items:center; gap:.4rem; }
.k-tab[aria-selected="true"]{ color:var(--ink); border-bottom-color:var(--brand); }
.k-tab:not([aria-selected="true"]){ font-size:1.25rem; }
.k-tab:hover{ color:var(--ink); }
.k-tab:focus-visible{ outline:3px solid var(--brand); outline-offset:3px; border-radius:6px; }
.k-tab .k-teller:empty{ display:none; }
.k-teller--later{ background:var(--muted); }
.k-tab[aria-selected="true"] .k-teller--later{ background:var(--ink); }

/* ---------- v248: de checklist (checklist.snackhouselobo.nl) ----------
   Gemaakt voor de telefoon in de hand, met natte of vette vingers: grote tikvlakken,
   één kolom, de naam en de tijd direct onder wat er gedaan is. */
.cl-app{ max-width:720px; padding:1.2rem 16px 4rem; display:flex; flex-direction:column; gap:.9rem; }
.cl-account{ font-size:.85rem; color:#C9D9E0; font-weight:700; }
.cl-kop{ display:flex; align-items:flex-end; justify-content:space-between; gap:.8rem; flex-wrap:wrap; }
.cl-dag{ font-size:clamp(1.6rem, 6vw, 2.2rem); margin:0; text-wrap:balance; }
.cl-dag-sub{ margin:0 0 .2rem; font-size:.78rem; font-weight:800; letter-spacing:.08em; text-transform:uppercase; color:var(--brand-ink); }
.cl-dagkeuze{ display:flex; flex-direction:column; gap:.2rem; }
.cl-dagkeuze label{ font-size:.75rem; font-weight:700; color:var(--muted); }
.cl-dagkeuze input{ font:inherit; font-size:.9rem; padding:.4rem .6rem; border:1.5px solid var(--line); border-radius:10px; background:var(--card); color:var(--ink); }
.cl-terug{ display:flex; align-items:center; justify-content:space-between; gap:.6rem; flex-wrap:wrap;
  background:var(--ink); color:#fff; border-radius:14px; padding:.7rem .9rem; font-weight:700; font-size:.9rem; }
.cl-terug .btn{ background:#fff; color:var(--ink); }
.cl-ikben{ display:flex; align-items:center; gap:.6rem; background:var(--card); border:1px solid var(--line); border-radius:14px; padding:.55rem .55rem .55rem .9rem; }
.cl-ikben label{ font-weight:800; font-size:.9rem; white-space:nowrap; display:flex; align-items:center; gap:.35rem; }
.cl-ikben input{ flex:1; min-width:0; font:inherit; font-weight:700; padding:.55rem .7rem; border:1.5px solid var(--line); border-radius:10px; background:#F7F5F0; color:var(--ink); }
.cl-ikben input.is-mist{ border-color:var(--red); background:#FDF1EE; animation:cl-schud .35s; }
@keyframes cl-schud{ 25%{ transform:translateX(-4px); } 75%{ transform:translateX(4px); } }
.cl-beheer{ display:flex; gap:.5rem; flex-wrap:wrap; }
.cl-beheer .btn{ gap:.35rem; }
#cl-bewerk.is-aan{ background:var(--ink); color:#fff; }
.cl-tabs{ display:flex; gap:.4rem; overflow-x:auto; scrollbar-width:none; padding:.2rem 0; margin:0 -16px; padding-inline:16px; scroll-padding-inline:16px; }
.cl-tabs::-webkit-scrollbar{ display:none; }
.cl-tab{ flex:0 0 auto; display:flex; align-items:center; gap:.5rem; border:1.5px solid var(--line); background:var(--card);
  color:var(--ink); border-radius:999px; padding:.6rem .95rem; font:inherit; font-weight:800; font-size:.95rem; cursor:pointer; min-height:44px; }
.cl-tab-n{ font-size:.78rem; font-variant-numeric:tabular-nums; background:#EDEAE2; color:var(--muted); border-radius:999px; padding:.12rem .5rem; display:inline-flex; align-items:center; }
.cl-tab-n .ic{ width:1em; height:1em; }
.cl-tab[aria-selected="true"]{ background:var(--ink); color:#fff; border-color:var(--ink); }
.cl-tab[aria-selected="true"] .cl-tab-n{ background:rgba(255,255,255,.16); color:#fff; }
.cl-tab.is-klaar .cl-tab-n{ background:var(--green); color:#fff; }
.cl-tab:focus-visible{ outline:3px solid var(--brand); outline-offset:2px; }
.cl-catbalk{ display:flex; align-items:center; justify-content:space-between; gap:.6rem; flex-wrap:wrap; font-size:.9rem;
  border:1.5px dashed rgba(11,21,26,.25); border-radius:14px; padding:.5rem .6rem .5rem .9rem; }
.cl-voortgang{ display:flex; align-items:center; gap:.7rem; }
.cl-balk{ flex:1; height:8px; border-radius:99px; background:rgba(11,21,26,.1); overflow:hidden; }
.cl-balk span{ display:block; height:100%; width:0; background:var(--brand); border-radius:inherit; transition:width .35s ease; }
.cl-voortgang.is-klaar .cl-balk span{ background:var(--green); }
.cl-telling{ font-size:.82rem; font-weight:800; color:var(--muted); font-variant-numeric:tabular-nums; white-space:nowrap; }
.cl-lijst{ list-style:none; margin:0; padding:0; background:var(--card); border:1px solid var(--line); border-radius:var(--r-lg); overflow:hidden; }
.cl-lijst:empty{ display:none; }
.cl-rij{ display:flex; align-items:stretch; border-top:1px solid var(--line); }
.cl-rij:first-child{ border-top:0; }
.cl-punt{ flex:1; min-width:0; display:flex; align-items:center; gap:.85rem; text-align:left; border:0; background:none;
  font:inherit; color:var(--ink); padding:.9rem 1rem; min-height:64px; cursor:pointer; -webkit-tap-highlight-color:transparent; }
.cl-punt:active:not(:disabled){ background:#F4F1EA; }
.cl-punt:disabled{ cursor:default; }
.cl-punt:focus-visible{ outline:3px solid var(--brand); outline-offset:-3px; }
.cl-vak{ flex:0 0 auto; width:30px; height:30px; border-radius:50%; border:2px solid rgba(11,21,26,.28); display:flex;
  align-items:center; justify-content:center; color:transparent; transition:background .15s, border-color .15s; }
.cl-vak svg{ width:18px; height:18px; stroke-width:2.6; }
.cl-tekst{ display:flex; flex-direction:column; gap:.15rem; min-width:0; }
.cl-wat{ font-weight:700; font-size:1rem; line-height:1.3; overflow-wrap:anywhere; }
.cl-wie{ display:inline-flex; align-items:center; gap:.3rem; font-size:.8rem; font-weight:800; color:#157A47; font-variant-numeric:tabular-nums; }
.cl-wie .ic{ width:.95em; height:.95em; }
.cl-wie--weg{ color:var(--muted); font-weight:700; }
.cl-rij.is-gedaan .cl-vak{ background:var(--green); border-color:var(--green); color:#fff; }
.cl-rij.is-gedaan .cl-wat{ color:var(--muted); }
.cl-rij.is-bezig .cl-vak{ opacity:.6; }
.cl-bewerk-knoppen{ display:flex; align-items:center; gap:.15rem; padding-right:.5rem; }
.cl-mini{ width:40px; height:40px; border:0; border-radius:10px; background:#F2EFE8; color:var(--ink); display:flex; align-items:center; justify-content:center; cursor:pointer; }
.cl-mini:disabled{ opacity:.3; cursor:default; }
.cl-mini .ic, .cl-mini svg{ width:18px; height:18px; }
.cl-mini:focus-visible{ outline:3px solid var(--brand); outline-offset:1px; }
.cl-bewerkt .cl-punt{ cursor:text; }
.cl-bewerkt .cl-lijst{ border-style:dashed; border-color:rgba(11,21,26,.3); }
.cl-leeg{ text-align:center; color:var(--muted); font-weight:700; padding:2rem 1rem; border:1.5px dashed var(--line); border-radius:var(--r-lg); }
.cl-klaar{ margin:0; display:flex; align-items:center; justify-content:center; gap:.4rem; color:#157A47; font-weight:800; }
.cl-dlg{ border:0; border-radius:var(--r-lg); padding:1.4rem; width:calc(100% - 32px); max-width:480px; color:var(--ink); background:var(--card); }
.cl-dlg::backdrop{ background:rgba(11,21,26,.55); }
.cl-dlg h2{ font-size:1.4rem; margin:0 0 1rem; }
.cl-dlg-plek{ display:flex; align-items:center; gap:.5rem; margin:0 0 1rem; font-size:.88rem; font-weight:700; }
.cl-dlg-plek span{ margin-right:auto; }
.cl-dlg-knoppen{ display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; margin-top:.4rem; }
.cl-dlg-knoppen .grow{ flex:1; }
.cl-weg{ color:#A93A26; border-color:rgba(169,58,38,.45); }
.cl-weg.is-zeker{ background:#A93A26; color:#fff; border-color:#A93A26; }
@media (prefers-reduced-motion:reduce){ .cl-balk span, .cl-vak{ transition:none; } .cl-ikben input.is-mist{ animation:none; } }
.cl-verberg{ border:1.5px solid var(--line); background:var(--card); color:var(--ink); border-radius:999px; font:inherit; font-size:.78rem; font-weight:800; padding:.35rem .7rem; cursor:pointer; white-space:nowrap; min-height:34px; }
.cl-verberg[aria-pressed="true"]{ background:var(--ink); color:#fff; border-color:var(--ink); }
.cl-verberg:focus-visible{ outline:3px solid var(--brand); outline-offset:2px; }
.cl-voet{ order:10; margin:0; text-align:center; font-size:.8rem; color:var(--muted); }
.cl-beheer .btn{ padding:.55rem .9rem; }
.cl-dagkeuze{ flex-direction:row; align-items:center; gap:.45rem; }
.cl-dagkeuze input{ padding:.3rem .5rem; font-size:.85rem; }
.cl-mini{ width:36px; height:36px; }

/* ---------- v248: Beheer → Checklist ---------- */
.sr-only{ position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; }
.bc-filter{ display:flex; flex-wrap:wrap; gap:.7rem 1rem; align-items:center; margin:1rem 0 .4rem; }
.bc-seg{ display:inline-flex; background:#EDEAE2; border-radius:999px; padding:4px; gap:2px; }
.bc-seg button{ border:0; background:none; font:inherit; font-weight:800; font-size:.9rem; color:var(--muted); padding:.45rem .95rem; border-radius:999px; cursor:pointer; }
.bc-seg button.is-active{ background:var(--ink); color:#fff; }
.bc-seg button:focus-visible{ outline:3px solid var(--brand); outline-offset:1px; }
.bc-stap{ display:flex; align-items:center; gap:.4rem; flex-wrap:wrap; }
.bc-stap .btn{ min-width:2.4rem; justify-content:center; }
.bc-datum input{ font:inherit; font-size:.9rem; padding:.42rem .6rem; border:1.5px solid var(--line); border-radius:10px; background:var(--card); color:var(--ink); }
.bc-kop{ display:flex; flex-wrap:wrap; align-items:flex-end; justify-content:space-between; gap:.6rem 1rem; margin:.8rem 0 .7rem; }
.bc-bereik{ margin:0; font-weight:800; font-size:1.05rem; color:var(--ink); }
.bc-samen{ margin:.15rem 0 0; color:var(--muted); font-size:.88rem; font-variant-numeric:tabular-nums; }
.bc-down{ display:flex; flex-wrap:wrap; gap:.4rem; }
.bc-down .btn{ gap:.35rem; }
.bc-tabel-vak{ position:relative; overflow-x:auto; border:1px solid var(--line); border-radius:14px; }
.bc-tabel{ width:100%; border-collapse:collapse; font-size:.9rem; font-variant-numeric:tabular-nums; }
.bc-tabel th, .bc-tabel td{ padding:.55rem .7rem; border-top:1px solid var(--line); text-align:left; vertical-align:middle; white-space:nowrap; }
.bc-tabel thead th{ border-top:0; font-size:.72rem; letter-spacing:.06em; text-transform:uppercase; color:var(--muted); background:#F7F5F0; }
.bc-tabel .bc-num{ text-align:right; }
.bc-tabel td.bc-num span{ color:var(--muted); }
.bc-tabel td.bc-num.is-af{ color:#157A47; font-weight:800; }
.bc-tabel td.bc-num.is-af span{ color:#157A47; }
.bc-leegcel{ color:var(--muted); }
.bc-dag{ font-weight:800; }
.bc-nu{ display:inline-block; font-size:.7rem; font-weight:800; color:#fff; background:var(--brand-ink); border-radius:999px; padding:.05rem .45rem; margin-left:.3rem; }
.bc-tot-in{ display:flex; align-items:center; gap:.5rem; min-width:7.5rem; }
.bc-balk{ flex:1; height:6px; border-radius:99px; background:rgba(11,21,26,.1); overflow:hidden; min-width:3.5rem; }
.bc-balk span{ display:block; height:100%; background:var(--brand); border-radius:inherit; }
.bc-tabel tr.is-af .bc-balk span{ background:var(--green); }
.bc-tabel tr.is-af .bc-tot b{ color:#157A47; }
.bc-tabel tr.is-niets .bc-tot b{ color:#A93A26; }
.bc-tot b{ width:2.8rem; text-align:right; }
.bc-wie{ white-space:normal !important; min-width:9rem; max-width:18rem; }
.bc-grijs{ color:var(--muted); }
.bc-acties{ text-align:right !important; }
.bc-acties .btn + .btn{ margin-left:.35rem; }
.bc-acties .btn{ gap:.3rem; }
.bc-maand th{ background:#EFECE5; font-weight:800; font-size:.8rem; letter-spacing:.06em; text-transform:uppercase; color:var(--ink); }
.bc-leeg{ color:var(--muted); font-size:.92rem; }
.bc-dlg{ border:0; border-radius:var(--r-lg); padding:0; width:calc(100% - 32px); max-width:640px; max-height:calc(100vh - 48px); color:var(--ink); background:var(--card); }
.bc-dlg::backdrop{ background:rgba(11,21,26,.55); }
.bc-dlg-kop{ display:flex; align-items:flex-start; justify-content:space-between; gap:1rem; padding:1.3rem 1.4rem .4rem; }
.bc-dlg-kop h2{ font-size:1.45rem; margin:0; }
.bc-dlg-x{ color:var(--ink); font-size:1.6rem; line-height:1; background:none; border:0; cursor:pointer; padding:.2rem .4rem; }
.bc-dlg-knoppen{ display:flex; flex-wrap:wrap; align-items:center; gap:.5rem .8rem; padding:.3rem 1.4rem .9rem; border-bottom:1px solid var(--line); }
.bc-dlg-knoppen .btn{ gap:.35rem; }
.bc-alleen-open{ display:flex; align-items:center; gap:.4rem; font-size:.88rem; font-weight:700; cursor:pointer; }
.bc-dlg-inhoud{ padding:.6rem 1.4rem 1.4rem; overflow:auto; }
.bc-cat h3{ display:flex; justify-content:space-between; align-items:baseline; font-size:1.05rem; margin:1rem 0 .3rem; }
.bc-cat-n{ font-size:.85rem; color:var(--muted); font-variant-numeric:tabular-nums; }
.bc-cat ul{ list-style:none; margin:0; padding:0; }
.bc-cat li{ display:grid; grid-template-columns:20px minmax(0,1fr) auto; gap:.6rem; align-items:start; padding:.42rem 0; border-top:1px solid var(--line); font-size:.92rem; }
.bc-vak{ width:18px; height:18px; border-radius:5px; border:1.5px solid #C9806F; display:flex; align-items:center; justify-content:center; margin-top:.1rem; }
.bc-vak svg{ width:13px; height:13px; stroke-width:3; }
.bc-cat li.is-gedaan .bc-vak{ background:var(--green); border-color:var(--green); color:#fff; }
.bc-wat{ overflow-wrap:anywhere; }
.bc-door{ font-weight:700; font-size:.82rem; color:#157A47; white-space:nowrap; font-variant-numeric:tabular-nums; }
.bc-cat li.is-open .bc-door{ color:#A93A26; }
.bc-tabel tbody th.bc-dag{ text-transform:none; letter-spacing:0; font-size:.9rem; color:var(--ink); font-weight:800; background:none; }
.bc-tabel td.bc-wie, .bc-tabel thead th:nth-last-child(2){ text-align:left !important; }
.bc-tabel thead th:nth-last-child(3){ text-align:left !important; }
/* v248: de keuken-iPad — namen als knoppen */
.cl-ikben{ flex-direction:column; align-items:stretch; gap:.55rem; padding:.7rem .8rem; }
.cl-ikben-kop{ display:flex; align-items:center; justify-content:space-between; gap:.6rem; flex-wrap:wrap; }
.cl-ikben-uitleg{ font-size:.82rem; font-weight:700; color:var(--muted); }
.cl-ikben.is-gekozen .cl-ikben-uitleg{ color:#157A47; }
.cl-namen{ display:flex; flex-wrap:wrap; gap:.4rem; }
.cl-namen:empty{ display:none; }
.cl-naam-knop{ border:1.5px solid var(--line); background:#F7F5F0; color:var(--ink); font:inherit; font-weight:800; font-size:.95rem;
  border-radius:999px; padding:.5rem .95rem; min-height:44px; cursor:pointer; }
.cl-naam-knop[aria-pressed="true"]{ background:var(--ink); color:#fff; border-color:var(--ink); }
.cl-naam-knop:focus-visible{ outline:3px solid var(--brand); outline-offset:2px; }
.cl-ikben input{ flex:none; }
/* op de iPad blijft "Wie vinkt af?" in beeld, ook onderaan een lange lijst */
.cl-ikben{ position:sticky; top:76px; z-index:5; box-shadow:0 6px 18px rgba(11,21,26,.08); }
