/* ==========================================================
   V5 additions: hero carousel, "Full Menu" button, fill-hover tabs,
   4/2-column grids, ribbon font, social buttons, flip photo cards
   ========================================================== */
:root{--c5-cocoa:#24140E;--c5-milk:#4A2E20;--c5-gold:#F5B838;--c5-gold-d:#C98A12;--c5-cream:#FAF6F0;--c5-ease:cubic-bezier(.22,1,.36,1)}

/* ---------- 1. hero carousel: V3 dark split (copy left, animated photos right) ---------- */
.hero.hx{padding:0;background:#24140E;overflow:hidden;position:relative}
.hx .hslides{position:relative;height:clamp(540px,72vh,700px)}
.hx .hslide{position:absolute;inset:0;display:grid;grid-template-columns:1fr 1fr;opacity:0;visibility:hidden;transition:opacity .9s var(--c5-ease),visibility .9s}
.hx .hslide.on{opacity:1;visibility:visible;z-index:1}
.hx-copy{display:flex;flex-direction:column;justify-content:center;gap:20px;padding:40px clamp(24px,6vw,96px);background:var(--bg,#24140E);color:#F6ECE0}
.hx-copy>*{opacity:0;transform:translateY(24px);transition:opacity .8s var(--c5-ease),transform .9s var(--c5-ease)}
.hslide.on .hx-copy>*{opacity:1;transform:none}
.hslide.on .hx-copy>:nth-child(2){transition-delay:.1s}.hslide.on .hx-copy>:nth-child(3){transition-delay:.2s}.hslide.on .hx-copy>:nth-child(4){transition-delay:.3s}
.hx-eb{font:600 12px "DM Sans",system-ui,sans-serif;letter-spacing:.2em;text-transform:uppercase;color:var(--c5-gold)}
.hx-h{font:500 clamp(40px,5.4vw,74px)/1.02 "Fraunces",Georgia,serif;letter-spacing:-.02em;margin:0;color:#F6ECE0}
.hx-h em{font-style:italic;color:var(--c5-gold)}
.hx-copy p{margin:0;max-width:440px;font:17px/1.6 "DM Sans",system-ui,sans-serif;opacity:.9;color:#F6ECE0}
.hx-ctas{display:flex;gap:12px;flex-wrap:wrap}
.hx-btn{display:inline-flex;align-items:center;justify-content:center;padding:14px 26px;font:600 14px "DM Sans",system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;border:1.5px solid;text-decoration:none;border-radius:0;transition:background .3s,color .3s,transform .3s var(--c5-ease)}
.hx-btn:hover{transform:translateY(-2px)}
.hx-gold{background:var(--c5-gold);border-color:var(--c5-gold);color:var(--c5-cocoa)}
.hx-gold:hover{background:#ffc54a}
.hx-ghost{background:transparent;border-color:rgba(255,255,255,.7);color:#fff}
.hx-ghost:hover{background:#fff;color:var(--c5-cocoa)}
.hx-pic{position:relative;overflow:hidden}
.hx-main{position:absolute;inset:-4%}
.hx-main img{width:100%;height:100%;object-fit:cover;transform:scale(1.12);transition:transform 7s linear}
.hslide.on .hx-main img{transform:scale(1)}
.hx-orb,.hx-glass,.hx-pic .bean,.hx-dust{z-index:2}
.hx-orb{position:absolute;border-radius:50%;overflow:hidden;box-shadow:0 24px 50px -20px rgba(0,0,0,.55);border:5px solid rgba(255,255,255,.95);background:#fff;opacity:0;scale:.6;transition:opacity .8s var(--c5-ease),scale 1s var(--c5-ease)}
.hslide.on .hx-orb{opacity:1;scale:1}
.hslide.on .hx-orb-1{transition-delay:.35s}.hslide.on .hx-orb-2{transition-delay:.5s}.hslide.on .hx-orb-3{transition-delay:.65s}
.hx-orb img{width:100%;height:100%;object-fit:cover;display:block}
.hx-orb-1{width:150px;height:150px;top:40px;right:40px}
.hx-orb-2{width:128px;height:128px;bottom:70px;left:36px}
.hx-orb-3{width:96px;height:96px;bottom:36px;right:70px}
.hx-glass{position:absolute;display:flex;align-items:center;gap:10px;padding:10px 16px 10px 10px;border-radius:18px;background:rgba(255,255,255,.72);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.85);box-shadow:0 12px 30px -14px rgba(0,0,0,.4);font:700 13.5px/1.25 "DM Sans",system-ui,sans-serif;color:var(--c5-cocoa);opacity:0;transition:opacity .8s .7s}
.hslide.on .hx-glass{opacity:1}
.hx-glass small{display:block;font-weight:500;color:#6B5446;font-size:12px}
.hx-glass .ic{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:var(--c5-gold);font-size:18px}
.hx-glass-1{top:150px;left:30px}
.hx-glass-2{bottom:170px;right:30px}
.hx-pic .bean{position:absolute;box-shadow:0 4px 10px rgba(0,0,0,.35)}
.hx-dust{position:absolute;inset:0;pointer-events:none}
.hx-dust i{position:absolute;border-radius:50%;background:rgba(255,236,210,.55);animation:h5dust 9s linear infinite}
@keyframes h5dust{0%{transform:translate(0,0);opacity:0}15%{opacity:1}100%{transform:translate(30px,-220px);opacity:0}}
.hx-pic [data-depth]{transform:translate3d(calc(var(--mx,0)*var(--d)*1px),calc(var(--my,0)*var(--d)*1px),0);transition:transform .6s var(--c5-ease)}
.hx .hctl{position:absolute;right:24px;bottom:22px;left:auto;transform:none;z-index:5;display:flex;align-items:center;gap:10px}
.hdots{display:flex;gap:8px}
.hdots button{width:34px;height:3px;border:0;padding:0;background:rgba(255,255,255,.35);position:relative;overflow:hidden;cursor:pointer}
.hdots button i{position:absolute;inset:0;background:var(--c5-gold);transform:scaleX(0);transform-origin:left}
.hdots button.on i{animation:h5fill var(--dur,6.5s) linear forwards}
.hero.paused .hdots button.on i{animation-play-state:paused}
@keyframes h5fill{to{transform:scaleX(1)}}
.hpause{width:40px;height:40px;border-radius:50%;border:1px solid rgba(255,255,255,.5);background:rgba(36,20,14,.35);color:#fff;display:grid;place-items:center;cursor:pointer;backdrop-filter:blur(6px)}
.hpause svg{width:16px;height:16px}
@media(max-width:900px){
  .hx .hslides{height:auto;min-height:680px}
  .hx .hslide{grid-template-columns:1fr;grid-template-rows:320px auto}
  .hx-pic{order:-1}
  .hx-copy{padding:30px 24px 60px;justify-content:flex-start}
  .hx .hctl{top:14px;bottom:auto;right:14px}
  .hx-orb-1{width:96px;height:96px;top:60px;right:16px}.hx-orb-2{width:84px;height:84px;bottom:20px;left:16px}.hx-orb-3{width:66px;height:66px;bottom:14px;right:30px}
  .hx-glass{font-size:12px;padding:7px 11px 7px 7px}.hx-glass .ic{width:28px;height:28px;font-size:15px}
  .hx-glass-1{top:70px;left:12px}.hx-glass-2{bottom:auto;top:170px;right:12px}
}
@media(max-width:600px){
  .hx-ctas .hx-btn{flex:1;padding:13px 14px;font-size:12.5px}
  .hx-h{font-size:40px}
}
@media (prefers-reduced-motion:reduce){.hx-orb,.hx-glass{opacity:1;scale:1}.hx-main img{transition:none}}

/* ---------- 2. "Full Menu" button (3-D layered button, our colours) ---------- */
.v2 .nav{align-items:center}
.v2 .nav>li.nav-cta{margin-left:14px}
.v2 .nav>li>a.fmb{display:block;height:42px;width:150px;padding:0;position:relative;border-radius:12px;transform:rotate(-3deg) skewX(4deg);text-decoration:none}
.v2 .nav>li>a.fmb::after{display:none}
.fmb-bg{position:absolute;inset:0;border-radius:inherit;filter:blur(1px)}
.fmb-bg::before{content:"";position:absolute;inset:0;border-radius:inherit;background:var(--c5-milk);filter:blur(4px);transition:box-shadow .3s ease;
  box-shadow:-4px 4px 0 0 rgba(74,46,32,.35),-8px 8px 0 0 rgba(74,46,32,.22),-12px 12px 3px 0 rgba(74,46,32,.14),-16px 16px 6px 0 rgba(74,46,32,.08)}
.fmb-wrap{position:relative;display:block;height:100%;border-radius:inherit;overflow:hidden;padding:2px;transform:translate(4px,-4px);transition:transform .3s ease;
  background:linear-gradient(to bottom,#FFE3A1 0%,var(--c5-gold-d) 100%)}
.fmb-shine{position:absolute;inset:0;border-radius:inherit;overflow:hidden;opacity:0;transition:opacity .4s ease}
.fmb-shine::before{content:"";position:absolute;inset:2px;margin:auto;width:70px;height:220px;background:linear-gradient(to right,transparent,rgba(255,255,255,.9) 50%,transparent);animation:fmbSpin 3s linear infinite;animation-play-state:paused}
.fmb-in{position:relative;z-index:1;height:100%;display:flex;align-items:center;justify-content:center;gap:10px;border-radius:10px;
  background:linear-gradient(to bottom,#5A3726 0%,var(--c5-cocoa) 100%);box-shadow:inset -2px 8px 8px -5px rgba(245,184,56,.35),inset 1px -3px 8px 0 rgba(0,0,0,.45)}
.fmb-chars{display:flex;align-items:center;font:800 14.5px/1 "DM Sans",system-ui,sans-serif;letter-spacing:.02em}
.fmb-chars span[data-l]{position:relative;display:block;color:transparent}
.fmb-chars span[data-l]::before,.fmb-chars span[data-l]::after{content:attr(data-l);position:absolute;left:0;top:0;color:var(--c5-gold);text-shadow:-1px 1px 2px rgba(0,0,0,.45)}
.fmb-chars span[data-l]::before{opacity:0;transform:translateY(-100%)}
.fmb-chars span[data-l]::after{animation:fmbIn 1s ease backwards calc(var(--i)*.03s)}
.fmb-sp{width:5px}
.fmb-arrow i{position:relative;display:block;width:18px;height:2.5px;border-radius:2px;background:var(--c5-gold);animation:fmbSwing 1s ease-in-out infinite;animation-play-state:paused}
.fmb-arrow i::before,.fmb-arrow i::after{content:"";position:absolute;right:0;width:10px;height:2.5px;border-radius:2px;background:var(--c5-gold);transform-origin:center right}
.fmb-arrow i::before{top:0;transform:rotate(44deg)}
.fmb-arrow i::after{top:0;transform:rotate(-44deg)}
.fmb:hover .fmb-wrap{transform:translate(6px,-6px)}
.fmb:hover .fmb-shine{opacity:1}
.fmb:hover .fmb-shine::before,.fmb:hover .fmb-arrow i{animation-play-state:running}
.fmb:hover .fmb-chars span[data-l]::before{animation:fmbIn .7s ease calc(var(--i)*.03s)}
.fmb:hover .fmb-chars span[data-l]::after{animation:fmbOut .7s ease calc(var(--i)*.03s)}
.fmb:active .fmb-wrap{transform:translate(2px,-2px)}
.fmb:active .fmb-bg::before{box-shadow:-3px 3px 0 0 rgba(74,46,32,.3),-6px 6px 2px 0 rgba(74,46,32,.15)}
@keyframes fmbSpin{to{transform:rotate(360deg)}}
@keyframes fmbIn{0%{transform:translateY(50%);opacity:0;filter:blur(8px)}20%{transform:translateY(70%);opacity:1}50%{transform:translateY(-15%);filter:blur(0)}100%{transform:translateY(0);opacity:1}}
@keyframes fmbOut{0%{transform:translateY(0);opacity:1}100%{transform:translateY(-70%);opacity:0;filter:blur(3px)}}
@keyframes fmbSwing{50%{transform:translateX(4px)}}
/* same button inside the mobile menu drawer */
.v2 .mlist .fmb{display:block;height:48px;width:100%;max-width:260px;margin:16px 0 8px;padding:0;position:relative;border-radius:12px;transform:none}

/* ---------- 3. category names: colour fills in on hover ---------- */
.mtabs a,.pills .pill{position:relative;z-index:0;overflow:hidden;transition:color .45s var(--c5-ease),box-shadow .3s,transform .3s var(--c5-ease)!important}
.mtabs a::before,.pills .pill::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--c5-cocoa);transform:scaleX(0);transform-origin:right;transition:transform .5s var(--c5-ease);border-radius:inherit}
.mtabs a:hover,.pills .pill:hover{color:#fff!important;border-color:var(--c5-cocoa)!important}
.mtabs a:hover::before,.pills .pill:hover::before{transform:scaleX(1);transform-origin:left}
.mtabs a:focus-visible::before,.pills .pill:focus-visible::before{transform:scaleX(1)}
.mtabs a:focus-visible,.pills .pill:focus-visible{color:#fff!important}

/* ---------- 4. grids: 4 columns on desktop, 2 on phones ---------- */
.mgrid,.grid{grid-template-columns:repeat(4,1fr)!important}
@media(max-width:767px){.mgrid,.grid{grid-template-columns:repeat(2,1fr)!important}}

/* ---------- 5. ribbon font ---------- */
/* Crown picked Dancing Script (option 6 of the font demo, 23 Sep) one point larger, at 28px.
   Handwriting, so: sentence case only (capitals would break the joined letters), a little more room
   between the words, and it never goes below 24px - a script face turns to mush when it is small and
   moving. The font file is loaded with the others in build.py's HEAD_EXTRA. */
.marquee-track{font:600 28px/1 "Dancing Script","Segoe Script",cursive!important;letter-spacing:.01em;text-transform:none}
.marquee-track span{gap:38px}
@media(max-width:600px){.marquee-track{font-size:24px!important}.marquee-track span{gap:30px}}
/* Crown, 23 Sep: the ribbon takes the "Big smiles." gold (--c5-gold #F5B838), a little darker.
   How much darker is decided by the white writing, not by taste: #F5B838 itself measures 1.78:1
   against white and #C98A12 measures 2.95:1 - both below the 3:1 the rules ask for at this size,
   and both go hazy on a phone in daylight. #C08213 is the first step down that passes, at 3.26:1. */
.marquee{background:var(--c5-ribbon,#C08213);color:#fff}
.marquee-track img{border-color:#fff}

/* ---------- 6. social buttons (tooltip rises on hover, springy) ---------- */
.socials5{display:flex;flex-wrap:wrap;gap:14px;list-style:none;margin:0;padding:16px 0 0}
.socials5 li{list-style:none}
.socials5 .sb{position:relative;width:48px;height:48px;border-radius:50%;background:#fff;color:var(--c5-cocoa);display:flex;align-items:center;justify-content:center;
  box-shadow:0 10px 16px rgba(36,20,14,.14);transition:all .25s cubic-bezier(.68,-.55,.265,1.55);text-decoration:none}
.socials5 .sb svg{width:20px;height:20px}
.socials5 .sb-tip{position:absolute;top:0;left:50%;transform:translateX(-50%);font:700 12.5px/1 "DM Sans",system-ui,sans-serif;white-space:nowrap;background:#fff;color:#fff;padding:7px 10px;border-radius:6px;
  box-shadow:0 10px 16px rgba(36,20,14,.14);opacity:0;pointer-events:none;transition:all .3s cubic-bezier(.68,-.55,.265,1.55)}
.socials5 .sb-tip::before{content:"";position:absolute;width:8px;height:8px;background:inherit;bottom:-3px;left:50%;transform:translateX(-50%) rotate(45deg)}
.socials5 .sb:hover{transform:translateY(-3px)}
.socials5 .sb:hover .sb-tip{top:-42px;opacity:1}
/* our palette instead of the networks' own colours */
.socials5 .sb-facebook:hover,.socials5 .sb-facebook:hover .sb-tip{background:var(--c5-cocoa);color:var(--c5-gold)}
.socials5 .sb-instagram:hover,.socials5 .sb-instagram:hover .sb-tip{background:var(--c5-gold);color:var(--c5-cocoa)}
.socials5 .sb-tiktok:hover,.socials5 .sb-tiktok:hover .sb-tip{background:var(--c5-milk);color:#fff}
.socials5 .sb-whatsapp:hover,.socials5 .sb-whatsapp:hover .sb-tip{background:var(--c5-gold-d);color:#fff}
.socials5.on-dark .sb{background:#3A2319;color:#F3E7DA;box-shadow:0 10px 16px rgba(0,0,0,.3)}
.socials5.on-dark .sb-tip{background:#3A2319}
.socials5.on-dark .sb-facebook:hover,.socials5.on-dark .sb-facebook:hover .sb-tip{background:#F3E7DA;color:var(--c5-cocoa)}
.socials5.in-card{padding:6px 0 4px}
.follow .socials5{justify-content:center;padding-top:30px}

/* ---------- 7. flip photo cards (front = photo, back = details) ---------- */
.flip{perspective:1000px;background:transparent!important;overflow:visible!important}
.flip-in{position:relative;display:block;width:100%;height:100%;transform-style:preserve-3d;transition:transform .8s var(--c5-ease)}
.flip-front,.flip-back{position:absolute;inset:0;display:block;-webkit-backface-visibility:hidden;backface-visibility:hidden;border-radius:inherit;overflow:hidden}
.flip-front{background:#F1E7DA}
.flip-front>img{width:100%;height:100%;object-fit:cover}
.flip-back{transform:rotateY(180deg);display:flex;flex-direction:column;justify-content:center;gap:8px;padding:18px;text-align:left;color:#F6ECE0;
  background:linear-gradient(135deg,var(--c5-cocoa) 0%,#3A2319 55%,#5A3726 100%);box-shadow:inset 0 0 0 1px rgba(245,184,56,.35)}
.flip-back b{font:600 16px/1.3 "Fraunces",Georgia,serif;color:var(--c5-gold)}
.flip-back span{font-size:13px;line-height:1.5;color:#E6D6C6;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden}
.flip-back em{font-style:normal;font-weight:800;color:#fff}
.flip-back i{font-style:normal;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--c5-gold)}
@media (hover:hover){
  .mi:hover .flip-in,.card:hover .flip-in{transform:rotateY(180deg)}
}
.mi:hover .mi-pic>img,.card:hover .pic img{transform:none}
/* menu cards: rounded photo so the flip reads as a card */
.mi-pic.flip{border-radius:14px 14px 0 0}
.mi .mi-badge{z-index:2}
/* home cards */
.card .pic.flip{overflow:visible}
.card .pic.flip .flip-front,.card .pic.flip .flip-back{border-radius:28px 28px 0 0}
.card .pic.flip .tag{z-index:2}
.card .pic.flip .noimg{position:absolute;inset:0}

/* ---------- 8. corporate block from V2 ---------- */
.v2-corp{margin:30px 0 20px}

@media (prefers-reduced-motion:reduce){.flip-in{transition:none}.hslide{transition:none}}
.v2 .ftr ul.socials5{display:flex;grid-template-columns:none;gap:14px;padding-top:24px}

/* ---------- V5.1: social buttons in the top bar ---------- */
.v2 .ann .side-soc{align-items:center;gap:16px}
.socials5.in-bar{gap:8px;padding:0;flex-wrap:nowrap}
.socials5.in-bar .sb{width:26px;height:26px;background:rgba(255,255,255,.1);color:#EADBC9;box-shadow:none}
.socials5.in-bar .sb svg{width:13px;height:13px}
.socials5.in-bar .sb-tip{top:auto;bottom:0;font-size:11.5px;padding:5px 8px;z-index:80}
.socials5.in-bar .sb-tip::before{bottom:auto;top:-3px}
.socials5.in-bar .sb:hover{transform:translateY(-1px)}
.socials5.in-bar .sb:hover .sb-tip{top:auto;bottom:-34px}
.v2 .ann{position:relative;z-index:61}
.v2 .ann .wrap,.v2 .ann .side{overflow:visible}

/* ---------- V5.1: Full Menu button on phones (bottom bar) ---------- */
@media(max-width:480px){.v2 .icons a[href="index.html#visit"]{display:none}}
.mbar .fmb-bar{display:block;position:relative;flex:1;height:48px;border-radius:99px;text-decoration:none;transform:none}
.mbar .fmb-bar .fmb-wrap{border-radius:99px;transform:none}
.mbar .fmb-bar .fmb-in{border-radius:99px}
.mbar .fmb-bar .fmb-bg{display:none}
.mbar .fmb-bar .fmb-chars{font-size:15px}
/* touch screens have no hover: keep the shine and arrow moving so the button still feels alive */
@media (hover:none){.fmb .fmb-shine{opacity:1}.fmb .fmb-shine::before,.fmb .fmb-arrow i{animation-play-state:running}}
@media(max-width:900px){.v2 .hdr-top .logo{flex:none}.v2 .hdr-top .logo img{width:auto;height:44px}}
@media(max-width:480px){.v2 .hdr-top .icons .icon-btn[aria-label="Find the cafe"]{display:none}.v2 .hdr-top .icons{gap:2px}}

/* ---------- V5.2: social buttons live in the header (desktop) and the phone menu drawer ---------- */
.socials5.in-hdr{gap:8px;padding:0;flex-wrap:nowrap;margin-right:8px}
.socials5.in-hdr .sb{width:38px;height:38px;background:#F4ECE3;color:var(--c5-cocoa);box-shadow:none}
.socials5.in-hdr .sb svg{width:16px;height:16px}
.socials5.in-hdr .sb-tip{top:auto;bottom:0;z-index:80}
.socials5.in-hdr .sb-tip::before{bottom:auto;top:-3px}
.socials5.in-hdr .sb:hover{transform:translateY(-2px)}
.socials5.in-hdr .sb:hover .sb-tip{top:auto;bottom:-40px}
@media(max-width:900px){.socials5.in-hdr{display:none}}
.socials5.in-panel{justify-content:center;padding:4px 0 0}
@media(max-width:900px){.v2 .hdr-top .icons{justify-self:end;margin-left:auto}}

/* ---------- 20 Sep: sizes on one card + size picker in the quick view ---------- */
.mi-anchor{position:absolute;scroll-margin-top:calc(var(--hdrH,130px) + 80px)}
.mi{position:relative}
.mi-vars{display:block;font-size:12px;font-weight:600;color:var(--gold-d,#C98A12);letter-spacing:.02em}
.v2 .qv-vars{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.v2 .qv-lab{width:100%;font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2)}
.v2 .qv-vars button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:88px;padding:9px 14px;border:1.5px solid var(--line);border-radius:12px;background:#fff;font:inherit;color:var(--ink);text-align:left;transition:border-color .2s,background .2s,transform .2s var(--ease)}
.v2 .qv-vars button b{font-size:14px}
.v2 .qv-vars button small{font-size:12px;color:var(--ink-2)}
.v2 .qv-vars button:hover{border-color:var(--cocoa)}
.v2 .qv-vars button.on{border-color:var(--cocoa);background:var(--cocoa);color:var(--cream)}
.v2 .qv-vars button.on small{color:var(--gold)}
.v2 #qAdd{white-space:nowrap}

/* ---------- 20 Sep: bag -> checkout -> WhatsApp ---------- */
.v2 .co-panel{width:min(480px,100vw)}
.v2 .co-steps{display:flex;gap:6px;margin:0;padding:10px 22px 0;list-style:none;counter-reset:st}
.v2 .co-steps li{flex:1;position:relative;padding-top:10px;font-size:11.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#B9A999;counter-increment:st}
.v2 .co-steps li::before{content:"";position:absolute;top:0;left:0;right:0;height:4px;border-radius:4px;background:var(--line)}
.v2 .co-steps li.on{color:var(--cocoa)}
.v2 .co-steps li.on::before{background:var(--gold)}
.v2 .co-form{display:flex;flex-direction:column;gap:14px;padding-top:14px}
.v2 .co-form fieldset{border:0;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.v2 .co-form fieldset[hidden]{display:none}
.v2 .co-form legend{padding:0 0 6px;font:500 18px var(--f-head);color:var(--cocoa)}
.v2 .co-form legend b,.v2 .co-f b{color:#B3261E;font-weight:600}
.v2 #bag [data-step][hidden],.v2 #bagFt[hidden]{display:none!important}
.v2 .co-f{display:block;font-size:13px;font-weight:600;color:var(--ink)}
.v2 .co-f>input,.v2 .co-f>select,.v2 .co-f>textarea,.v2 .co-f>.co-tel{margin-top:5px}
.v2 .co-f input,.v2 .co-f select,.v2 .co-f textarea,.v2 .co-tel{width:100%;box-sizing:border-box;padding:12px 13px;border:1.5px solid var(--line);border-radius:10px;background:#fff;font:400 15px var(--f-body);color:var(--ink)}
.v2 .co-f input::placeholder,.v2 .co-f textarea::placeholder{color:#A8998C}
.v2 .co-f input:focus,.v2 .co-f select:focus,.v2 .co-f textarea:focus{outline:none;border-color:var(--gold-d,#C98A12);box-shadow:0 0 0 3px rgba(245,184,56,.3)}
.v2 .co-tel{display:flex;align-items:center;gap:8px;padding:0 0 0 13px}
.v2 .co-tel>span{font-weight:600;color:var(--ink-2)}
.v2 .co-tel input{border:0;box-shadow:none!important;padding-left:0;border-radius:0 10px 10px 0}
.v2 .co-f.bad input,.v2 .co-f.bad select,.v2 .co-f.bad .co-tel{border-color:#B3261E;background:#FFF6F5}
.v2 .co-2{display:grid;grid-template-columns:1fr 1.3fr;gap:10px;align-items:end}
.v2 .co-choice{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.v2 .co-choice label{position:relative;cursor:pointer}
.v2 .co-choice input{position:absolute;opacity:0;inset:0}
.v2 .co-choice span{display:flex;flex-direction:column;gap:2px;height:100%;box-sizing:border-box;padding:12px;border:1.5px solid var(--line);border-radius:12px;background:#fff;font-weight:600;font-size:14px;transition:border-color .2s,background .2s}
.v2 .co-choice small{font-weight:500;font-size:12px;color:var(--ink-2)}
.v2 .co-choice input:checked+span{border-color:var(--cocoa);background:#FFF6E3;box-shadow:inset 0 0 0 1px var(--cocoa)}
.v2 .co-choice input:focus-visible+span{outline:3px solid var(--gold);outline-offset:2px}
.v2 .co-loc{align-self:flex-start;border:1.5px dashed var(--gold-d,#C98A12);border-radius:10px;background:#FFFBF2;padding:9px 12px;font:600 13px var(--f-body);color:var(--cocoa);cursor:pointer}
.v2 .co-loc small{font-weight:500;color:var(--ink-2)}
.v2 .co-hint{margin:0;font-size:12.5px;color:var(--ink-2)}
.v2 .co-id{margin:0;padding:9px 12px;border-radius:10px;background:var(--sand);font-size:13px;color:var(--ink-2)}
.v2 .co-id b{color:var(--cocoa);letter-spacing:.04em}
.v2 .co-err{margin:0;padding:10px 12px;border-radius:10px;background:#FBEAE8;color:#B3261E;font-size:14px;font-weight:600}
.v2 .co-sum{display:grid;gap:4px}
.v2 .co-sum>div:not(.total){display:flex;justify-content:space-between;font-size:14px;color:var(--ink-2)}
.v2 .co-sum>div[hidden]{display:none}
.v2 .co-btns{display:grid;grid-template-columns:auto 1fr;gap:8px}
.v2 .co-btns[hidden]{display:none}
.v2 .co-btns .btn{padding:13px 12px;font-size:13px;letter-spacing:.04em;line-height:1.25}
.v2 .co-btns .btn:disabled{opacity:.4;pointer-events:none}
.v2 .co-done .co-ok{display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;padding:30px 4px}
.v2 .co-tick{width:64px;height:64px;border-radius:50%;display:grid;place-items:center;background:var(--gold);color:var(--cocoa);font-size:32px;font-weight:700}
.v2 .co-ok h4{margin:0;font:500 24px var(--f-head)}
.v2 .co-ok p{margin:0;color:var(--ink-2)}
.v2 .co-ok .btn{width:100%}
.v2 .co-ok .link-u{border:0;background:none;font:600 14px var(--f-body);color:var(--milk);text-decoration:underline;cursor:pointer}
@media (max-width:420px){.v2 .co-2{grid-template-columns:1fr}.v2 .co-btns{grid-template-columns:1fr 1.4fr}.v2 #bag.step2 #bagNote{display:none}.v2 #bag .panel-ft{padding:12px 18px;gap:8px}}
.v2 .co-sum small{font-size:11.5px;color:#A8998C}
.v2 .co-free{margin:2px 0 0;padding:7px 10px;border-radius:8px;background:#FFF6E3;color:#6B4A00;font-size:12.5px;font-weight:600}
.v2 .co-free[hidden]{display:none}
/* remove a line from the bag */
.v2 .line .line-r{display:flex;flex-direction:column;align-items:flex-end;justify-content:space-between;align-self:stretch;gap:8px}
.v2 .line .rm{width:32px;height:32px;border-radius:50%;border:1px solid var(--line);background:#fff;color:var(--ink-2);font-size:14px;line-height:1;display:grid;place-items:center;cursor:pointer;transition:background .2s,color .2s,border-color .2s}
.v2 .line .rm:hover,.v2 .line .rm:focus-visible{background:#FBEAE8;border-color:#B3261E;color:#B3261E}
.v2 .co-sum>div:not(.total){gap:12px}
.v2 .co-sum>div>span:last-child{text-align:right}
/* toast ("Added …" / "Removed …"): always one line with a green tick */
.v2 .toast{flex-wrap:nowrap;gap:8px;width:max-content;max-width:calc(100vw - 16px);box-sizing:border-box;padding:11px 14px;border-radius:999px;white-space:nowrap;font-size:13.5px}
.v2 .toast .t-ok{flex:none;width:22px;height:22px;border-radius:50%;background:#22A45D;color:#fff;display:grid;place-items:center;font-size:13px;font-weight:700;line-height:1}
.v2 .toast .t-msg{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.v2 .toast .t-msg b{color:var(--gold);margin-right:4px}
.v2 .toast .t-btn{flex:none;border:0;background:none;padding:0 0 0 2px;color:#F5B838;font:700 13.5px var(--f-body);text-decoration:underline;cursor:pointer;white-space:nowrap}

/* ---- cookie banner (tracking.js) - only shown when a tracking ID is set in Admin > Settings ---- */
.ck{position:fixed;left:16px;right:16px;bottom:16px;z-index:89;max-width:560px;margin:0 auto;display:flex;gap:14px;align-items:center;flex-wrap:wrap;
  background:var(--c5-cocoa);color:#F6ECE0;padding:16px 18px;border-radius:16px;box-shadow:0 20px 40px -12px rgba(0,0,0,.45);font:14px/1.5 "DM Sans",system-ui,sans-serif;
  animation:ck-in .5s var(--c5-ease)}
.ck p{margin:0;flex:1 1 260px}.ck b{color:var(--c5-gold)}
.ck-b{display:flex;gap:10px;margin-left:auto}
.ck button{min-height:44px;padding:10px 18px;border-radius:999px;font:600 14px "DM Sans",system-ui,sans-serif;cursor:pointer;border:1.5px solid rgba(246,236,224,.45);background:none;color:#F6ECE0}
.ck .ck-yes{background:var(--c5-gold);border-color:var(--c5-gold);color:var(--c5-cocoa)}
.ck button:focus-visible,.ck-set:focus-visible{outline:2px solid var(--c5-gold);outline-offset:2px}
.ck-set{display:inline-block;margin-top:10px;padding:6px 0;background:none;border:0;color:inherit;opacity:.7;font:inherit;font-size:13px;text-decoration:underline;cursor:pointer}
@keyframes ck-in{from{transform:translateY(20px);opacity:0}to{transform:none;opacity:1}}
@media (max-width:640px){.ck{bottom:84px;left:12px;right:12px}.ck-b{width:100%}.ck-b button{flex:1}}
@media (prefers-reduced-motion:reduce){.ck{animation:none}}

/* ================= Sep 2026 (Crown): Full Menu moved out of the menu bar, floating delivery apps =========== */
/* plain text link that replaces the old button in the menu bar */
.v2 .nav>li>a.nav-plain{font-weight:700;color:var(--c5-gold-d,#C98A12)}

/* the Full Menu button now floats at the bottom right of the home page (phones keep the bottom bar) */
.fmb-dock{position:fixed;right:18px;bottom:18px;z-index:88}
.fmb-dock .fmb.fmb-float{display:block;height:52px;width:186px;border-radius:14px;transform:rotate(-2deg) skewX(3deg)}
.fmb-dock .fmb.fmb-float .fmb-chars{font-size:16px}
.fmb-dock .fmb.fmb-float .fmb-in{gap:12px}
@media (max-width:640px){.fmb-dock{display:none}}

/* the round delivery-app buttons: slide in from the right edge once the visitor scrolls */
.dfl{position:fixed;right:18px;bottom:96px;z-index:87;display:flex;flex-direction:column;align-items:flex-end;gap:10px;
  opacity:0;transform:translateX(30px);pointer-events:none;transition:opacity .45s var(--c5-ease),transform .45s var(--c5-ease)}
.dfl.on{opacity:1;transform:none;pointer-events:auto}
.dfl-t{font:700 10px/1 "DM Sans",system-ui,sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--c5-milk);
  background:rgba(250,246,240,.92);padding:6px 9px;border-radius:999px;box-shadow:0 6px 16px -8px rgba(36,20,14,.5)}
.dfl-a{position:relative;width:54px;height:54px;border-radius:50%;background:#fff;border:2px solid var(--c);display:grid;place-items:center;
  box-shadow:0 10px 24px -10px rgba(36,20,14,.55);text-decoration:none;
  transition:transform .25s var(--c5-ease),box-shadow .25s ease}
.dfl-a::before{content:"";position:absolute;inset:-2px;border-radius:50%;border:2px solid var(--c);opacity:0;transform:scale(.9)}
.dfl-a:hover,.dfl-a:focus-visible{transform:scale(1.08) translateY(-2px);box-shadow:0 14px 30px -10px rgba(36,20,14,.6)}
.dfl-a:hover::before,.dfl-a:focus-visible::before{animation:dflRing 1.1s ease-out infinite}
.dfl-a:focus-visible{outline:2px solid var(--c5-cocoa);outline-offset:3px}
.dfl-ic{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;overflow:hidden}
.dfl-ic img{width:40px;height:40px;object-fit:contain;border-radius:50%}
.dfl-l{font:800 20px/1 "DM Sans",system-ui,sans-serif;color:var(--c)}
.dfl-n{position:absolute;right:64px;top:50%;transform:translate(8px,-50%);white-space:nowrap;background:var(--c5-cocoa);color:#F6ECE0;
  font:600 13px/1 "DM Sans",system-ui,sans-serif;padding:8px 11px;border-radius:9px;opacity:0;pointer-events:none;transition:.25s var(--c5-ease)}
.dfl-a:hover .dfl-n,.dfl-a:focus-visible .dfl-n{opacity:1;transform:translate(0,-50%)}
@keyframes dflRing{0%{opacity:.55;transform:scale(1)}100%{opacity:0;transform:scale(1.45)}}
@media (max-width:640px){
  .dfl{right:10px;bottom:auto;top:50%;transform:translate(26px,-50%);gap:8px}
  .dfl.on{transform:translate(0,-50%)}
  .dfl-t{display:none}
  .dfl-a{width:44px;height:44px}.dfl-ic,.dfl-ic img{width:32px;height:32px}.dfl-l{font-size:17px}
  .dfl-n{display:none}
}
@media (min-width:641px){.ck{right:96px}}
@media (prefers-reduced-motion:reduce){.dfl-a{animation:none}.dfl-a:hover::before{animation:none}.dfl{transition:opacity .2s linear}}

/* The four app buttons run a 5-second cycle (Crown, 23 Sep): they slide OUT past the right edge
   stacked on top of each other, then wipe back IN from the right and open out one -> four.
   Each button carries --i (its place, 0 first) and --n (the last place) from links.py float_apps(),
   so the stagger is pure CSS: going in, the LAST one arrives first and the rest fan upwards. */
.dfl{--pitch:64px;--step:.11s}
.dfl-a{z-index:calc(var(--i) + 1);
  transition:transform .52s var(--c5-ease),opacity .4s ease,box-shadow .25s ease;
  transition-delay:calc((var(--n) - var(--i)) * var(--step))}        /* coming in: last first, then upwards */
.dfl.gone .dfl-a{
  transform:translateX(150%) translateY(calc((var(--n) - var(--i)) * var(--pitch))) scale(.92);
  opacity:0;pointer-events:none;
  transition-delay:calc(var(--i) * (var(--step) / 2))}               /* going out: the top one leaves first */
.dfl-t{transition:opacity .35s ease}
.dfl.gone .dfl-t{opacity:0}
/* the hover lift must beat the cycle's own transform, or a pointed-at button jumps back into line */
.dfl:not(.gone) .dfl-a:hover,.dfl:not(.gone) .dfl-a:focus-visible{transition-delay:0s}
@media (max-width:640px){.dfl{--pitch:52px}}
@media (prefers-reduced-motion:reduce){.dfl.gone .dfl-a{transform:none;opacity:1;pointer-events:auto}
  .dfl.gone .dfl-t{opacity:1}}

/* the little speaker in the header (sound.js). Hidden until the owner switches the cafe sound on. */
.sndb{position:relative}
.sndb .sndb-on{display:none}
.sndb.on .sndb-on{display:block}
.sndb.on .sndb-off{display:none}
.sndb.on{color:var(--c5-gold-d,#C98A12)}
.sndb.on::after{content:"";position:absolute;right:6px;top:6px;width:6px;height:6px;border-radius:50%;background:var(--c5-gold);
  box-shadow:0 0 0 0 rgba(245,184,56,.7);animation:sndPulse 2.4s ease-out infinite}
@keyframes sndPulse{0%{box-shadow:0 0 0 0 rgba(245,184,56,.6)}70%{box-shadow:0 0 0 7px rgba(245,184,56,0)}100%{box-shadow:0 0 0 0 rgba(245,184,56,0)}}
@media (prefers-reduced-motion:reduce){.sndb.on::after{animation:none}}

/* one-time line that tells a visitor the music started and how to stop it (sound.js) */
.sndhint{position:fixed;left:50%;top:76px;transform:translate(-50%,-10px);z-index:96;background:var(--c5-cocoa);color:#F6ECE0;
  font:600 13px/1.3 "DM Sans",system-ui,sans-serif;padding:10px 16px;border-radius:999px;box-shadow:0 14px 30px -12px rgba(36,20,14,.6);
  opacity:0;animation:sndHintIn .45s var(--c5-ease) forwards;cursor:pointer;max-width:92vw;text-align:center}
.sndhint span{color:var(--c5-gold);margin-right:6px}
.sndhint.go{animation:sndHintOut .6s var(--c5-ease) forwards}
@keyframes sndHintIn{to{opacity:1;transform:translate(-50%,0)}}
@keyframes sndHintOut{to{opacity:0;transform:translate(-50%,-10px)}}
@media (max-width:640px){.sndhint{top:auto;bottom:96px;font-size:12.5px}}
@media (prefers-reduced-motion:reduce){.sndhint{animation:none;opacity:1;transform:translate(-50%,0)}}

/* ============ Crown's round of 23 Sep ============ */

/* --- 1. the Full Menu button now lives in the header, in orange, next to the bag --- */
:root{--c5-orange:#FF7A18;--c5-orange-d:#D9520A;--c5-ribbon:#C08213}
.fmb-hdr{display:block;height:42px;width:148px;flex:none;margin-right:6px;border-radius:12px;text-decoration:none;position:relative}
.fmb-hdr .fmb-bg{display:none}                       /* no long drop shadow: a header has no room for it */
.fmb-hdr .fmb-wrap{transform:none;background:linear-gradient(to bottom,#FFB061 0%,var(--c5-orange-d) 100%);
  box-shadow:0 6px 16px -6px rgba(217,82,10,.65)}
.fmb-hdr .fmb-in{background:linear-gradient(to bottom,#FF9038 0%,var(--c5-orange) 100%);
  box-shadow:inset 0 6px 8px -6px rgba(255,255,255,.75),inset 0 -4px 8px 0 rgba(140,50,0,.35)}
.fmb-hdr .fmb-chars span[data-l]::before,.fmb-hdr .fmb-chars span[data-l]::after{color:#fff;text-shadow:0 1px 2px rgba(120,45,0,.55)}
.fmb-hdr .fmb-arrow i,.fmb-hdr .fmb-arrow i::before,.fmb-hdr .fmb-arrow i::after{background:#fff}
.fmb-hdr:hover .fmb-wrap{transform:translateY(-2px);box-shadow:0 10px 22px -8px rgba(217,82,10,.8)}
.fmb-hdr:active .fmb-wrap{transform:translateY(0)}
.v2 .hdr .icons{align-items:center}
@media(max-width:900px){.fmb-hdr{display:none}}   /* phones already have the bottom bar */

/* --- 2. the logo, much bigger (Crown: "present logo size is too smaller") --- */
.v2 .logo img{height:100px}
.v2 .hdr.stuck .logo img{height:76px}
.v2 .ftr .brand>img{height:118px}
@media(max-width:900px){.v2 .hdr-top .logo img{height:78px}}
@media(max-width:600px){.v2 .logo img{height:72px}.v2 .hdr.stuck .logo img{height:62px}.v2 .ftr .brand>img{height:96px}}

/* --- 3. the footer ran into the screen edge on phones: the padding shorthand on .cols / .base
       wiped out the side padding that .wrap sets. Put it back. --- */
.v2 .ftr .cols,.v2 .ftr .base{padding-left:24px;padding-right:24px}
@media(max-width:600px){.v2 .ftr .cols,.v2 .ftr .base{padding-left:18px;padding-right:18px}}

/* --- 4. a social button can carry the owner's own picture instead of the drawn icon --- */
/* An uploaded icon is the brand's own badge, already coloured and already round - so it fills the
   button and leaves only a thin rim, instead of sitting small in the middle of a big white disc
   the way a thin line drawing has to (Crown, 23 Sep). */
.socials5 .sb-img{width:calc(100% - 7px);height:calc(100% - 7px);object-fit:contain;border-radius:50%;display:block}
.socials5.in-bar .sb-img{width:calc(100% - 4px);height:calc(100% - 4px)}
.socials5 .sb:has(.sb-img){background:#fff;padding:0}
.socials5.in-hdr .sb{width:42px;height:42px}          /* a touch bigger, so an uploaded icon reads */
.socials5 .sb-letter{font:800 19px/1 "DM Sans",system-ui,sans-serif;display:block}
.socials5 .sb-snapchat:hover,.socials5 .sb-snapchat:hover .sb-tip{background:#FFFC00;color:#1A1A1A}

/* --- 5. phones: the bottom bar wears the ribbon's gold and wipes back in from the left edge
       every 5 s (Crown, 23 Sep). It slides off to the left, waits a beat, then comes back with a
       small overshoot - the eye follows movement that enters from the side far better than a bounce. */
.mbar{background:var(--c5-ribbon,#C08213)}
.mbar .btn-line{border-color:rgba(255,255,255,.85);color:#fff;font-weight:700}
.mbar .btn-line:hover,.mbar .btn-line:active{background:#fff;color:var(--c5-cocoa)}
@keyframes mbarWipe{
  0%{transform:translateX(0)}
  14%{transform:translateX(-118%)}
  26%{transform:translateX(-118%)}
  64%{transform:translateX(3.5%)}
  80%{transform:translateX(-1.5%)}
  100%{transform:translateX(0)}
}
@keyframes mbarGlow{
  0%,40%{box-shadow:var(--shadow)}
  64%{box-shadow:0 0 0 3px rgba(255,255,255,.55),0 18px 36px -12px rgba(0,0,0,.55)}
  100%{box-shadow:var(--shadow)}
}
.mbar.hop{animation:mbarWipe 1.5s cubic-bezier(.3,1.35,.4,1) both,mbarGlow 1.5s ease both}
@media (prefers-reduced-motion:reduce){.mbar.hop{animation:none}}

/* ---- round 3 (Crown): every social button on phones and tablets, in the dark top bar ---- */
.v2 .ann .ann-soc{display:none}
@media(max-width:900px){
  .v2 .ann .ann-msgs{display:none}
  .v2 .ann .wrap{justify-content:center}
  .v2 .ann .ann-soc{display:flex;justify-content:center;flex:1}
  .socials5.in-bar{gap:12px}
  .socials5.in-bar .sb{width:30px;height:30px}
  .socials5.in-bar .sb svg{width:14px;height:14px}
  .socials5.in-bar .sb-letter{font-size:14px}
  .socials5.in-bar .sb-tip{display:none}
}

/* ---- round 3 (Crown): the home page carousel as full-width 16:9 videos, one video per slide ----
   Computers: the words sit over the video on a dark left-hand shade. Phones and tablets: the video on top
   (the whole 16:9 picture, nothing cut off), the words under it. The slides are stacked in one grid cell,
   so the carousel is always as tall as its tallest slide and nothing jumps when a slide changes. */
.hero.hv .hslides{display:grid;height:auto;min-height:0}
.hero.hv .hslide{position:relative;inset:auto;grid-area:1/1;display:block}
/* the frame is ALWAYS exactly 16:9 at every screen width (Crown: "auto fit with the full frame size"), so a 16:9
   video fills it edge to edge with nothing cut off. A video of another shape still fills the whole frame (cover),
   trimmed evenly from the middle - the panel warns about that when it is uploaded. */
.hv-media{position:relative;width:100%;aspect-ratio:16/9;background:#24140E;overflow:hidden}
.hv-vid{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;background:#24140E}
.hvs.has-copy .hv-media::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(90deg,rgba(24,13,8,.82) 0%,rgba(24,13,8,.6) 32%,rgba(24,13,8,.18) 62%,rgba(24,13,8,0) 80%)}
/* the words stay centred in the part of the video that is on screen, even when a full 16:9 frame is taller
   than a laptop's window (1366 x 768: the frame is 768 px, the window shows ~600 px of it under the header) */
.hx-copy.hv-copy{position:absolute;top:0;bottom:auto;left:0;height:min(100%,calc(100svh - 170px));width:min(640px,58%);background:transparent;z-index:2;text-shadow:0 2px 18px rgba(0,0,0,.35)}
.hero.hv .hctl{top:22px;bottom:auto}
.hv-copy .hx-h{font-size:clamp(38px,4.6vw,68px)}
.hero.hv .hctl{z-index:6}
.hero.hv .hdots button.on i{animation:none;transition:transform .25s linear}
@media(max-width:900px){
  .hv-media{max-height:none;min-height:0}
  .hvs.has-copy .hv-media::after{display:none}
  .hx-copy.hv-copy{position:static;width:auto;height:auto;padding:26px 24px 44px;background:#24140E;text-shadow:none}
  .hero.hv .hctl{top:14px}
  .hv-copy .hx-h{font-size:clamp(32px,8.4vw,44px)}
}
