/* litespeed-cache-dummy */
/* To be replaced in `head` to control optm data location */
/* hello-elementor */
html{line-height:1.15;-webkit-text-size-adjust:100%}*,:after,:before{box-sizing:border-box}body{background-color:#fff;color:#333;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{color:inherit;font-family:inherit;font-weight:500;line-height:1.2;margin-block-end:1rem;margin-block-start:.5rem}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-block-end:.9rem;margin-block-start:0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em;white-space:pre-wrap}a{background-color:transparent;color:#c36;text-decoration:none}a:active,a:hover{color:#336}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}abbr[title]{border-block-end:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none;height:auto;max-width:100%}details{display:block}summary{display:list-item}figcaption{color:#333;font-size:16px;font-style:italic;font-weight:400;line-height:1.4}[hidden],template{display:none}@media print{*,:after,:before{background:transparent!important;box-shadow:none!important;color:#000!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre{white-space:pre-wrap!important}blockquote,pre{-moz-column-break-inside:avoid;border:1px solid #ccc;break-inside:avoid}thead{display:table-header-group}img,tr{-moz-column-break-inside:avoid;break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{-moz-column-break-after:avoid;break-after:avoid}}label{display:inline-block;line-height:1;vertical-align:middle}button,input,optgroup,select,textarea{font-family:inherit;font-size:1rem;line-height:1.5;margin:0}input[type=date],input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],select,textarea{border:1px solid #666;border-radius:3px;padding:.5rem 1rem;transition:all .3s;width:100%}input[type=date]:focus,input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,select:focus,textarea:focus{border-color:#333}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;width:auto}[type=button],[type=submit],button{background-color:transparent;border:1px solid #c36;border-radius:3px;color:#c36;display:inline-block;font-size:1rem;font-weight:400;padding:.5rem 1rem;text-align:center;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}[type=button]:focus:not(:focus-visible),[type=submit]:focus:not(:focus-visible),button:focus:not(:focus-visible){outline:none}[type=button]:focus,[type=button]:hover,[type=submit]:focus,[type=submit]:hover,button:focus,button:hover{background-color:#c36;color:#fff;text-decoration:none}[type=button]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto;resize:vertical}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}select{display:block}table{background-color:transparent;border-collapse:collapse;border-spacing:0;font-size:.9em;margin-block-end:15px;width:100%}table td,table th{border:1px solid hsla(0,0%,50%,.502);line-height:1.5;padding:15px;vertical-align:top}table th{font-weight:700}table tfoot th,table thead th{font-size:1em}table caption+thead tr:first-child td,table caption+thead tr:first-child th,table colgroup+thead tr:first-child td,table colgroup+thead tr:first-child th,table thead:first-child tr:first-child td,table thead:first-child tr:first-child th{border-block-start:1px solid hsla(0,0%,50%,.502)}table tbody>tr:nth-child(odd)>td,table tbody>tr:nth-child(odd)>th{background-color:hsla(0,0%,50%,.071)}table tbody tr:hover>td,table tbody tr:hover>th{background-color:hsla(0,0%,50%,.102)}table tbody+tbody{border-block-start:2px solid hsla(0,0%,50%,.502)}@media(max-width:767px){table table{font-size:.8em}table table td,table table th{line-height:1.3;padding:7px}table table th{font-weight:400}}dd,dl,dt,li,ol,ul{background:transparent;border:0;font-size:100%;margin-block-end:0;margin-block-start:0;outline:0;vertical-align:baseline}

/* hello-elementor-theme-style */
.comments-area a,.page-content a{text-decoration:underline}.alignright{float:right;margin-left:1rem}.alignleft{float:left;margin-right:1rem}.aligncenter{clear:both;display:block;margin-inline:auto}.alignwide{margin-inline:-80px}.alignfull{margin-inline:calc(50% - 50vw);max-width:100vw}.alignfull,.alignfull img{width:100vw}.wp-caption{margin-block-end:1.25rem;max-width:100%}.wp-caption.alignleft{margin:5px 20px 20px 0}.wp-caption.alignright{margin:5px 0 20px 20px}.wp-caption img{display:block;margin-inline:auto}.wp-caption-text{margin:0}.gallery-caption{display:block;font-size:.8125rem;line-height:1.5;margin:0;padding:.75rem}.pagination{display:flex;justify-content:space-between;margin:20px auto}.sticky{display:block;position:relative}.bypostauthor{font-size:inherit}.hide{display:none!important}.post-password-form{margin:50px auto;max-width:500px}.post-password-form p{align-items:flex-end;display:flex;width:100%}.post-password-form [type=submit]{margin-inline-start:3px}.screen-reader-text{clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;position:absolute!important;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#eee;clip:auto!important;clip-path:none;color:#333;display:block;font-size:1rem;height:auto;left:5px;line-height:normal;padding:12px 24px;text-decoration:none;top:5px;width:auto;z-index:100000}.post .entry-title a{text-decoration:none}.post .wp-post-image{max-height:500px;-o-object-fit:cover;object-fit:cover;width:100%}@media(max-width:991px){.post .wp-post-image{max-height:400px}}@media(max-width:575px){.post .wp-post-image{max-height:300px}}#comments .comment-list{font-size:.9em;list-style:none;margin:0;padding:0}#comments .comment,#comments .pingback{position:relative}#comments .comment .comment-body,#comments .pingback .comment-body{border-block-end:1px solid #ccc;display:flex;flex-direction:column;padding-block-end:30px;padding-block-start:30px;padding-inline-end:0;padding-inline-start:60px}#comments .comment .avatar,#comments .pingback .avatar{border-radius:50%;left:0;margin-inline-end:10px;position:absolute}body.rtl #comments .comment .avatar,body.rtl #comments .pingback .avatar,html[dir=rtl] #comments .comment .avatar,html[dir=rtl] #comments .pingback .avatar{left:auto;right:0}#comments .comment-meta{display:flex;justify-content:space-between;margin-block-end:.9rem}#comments .comment-metadata,#comments .reply{font-size:11px;line-height:1}#comments .children{list-style:none;margin:0;padding-inline-start:30px;position:relative}#comments .children li:last-child{padding-block-end:0}#comments ol.comment-list .children:before{content:"↪";display:inline-block;font-size:1em;font-weight:400;left:0;line-height:100%;position:absolute;top:45px;width:auto}body.rtl #comments ol.comment-list .children:before,html[dir=rtl] #comments ol.comment-list .children:before{content:"↩";left:auto;right:0}@media(min-width:768px){#comments .comment-author,#comments .comment-metadata{line-height:1}}@media(max-width:767px){#comments .comment .comment-body{padding:30px 0}#comments .children{padding-inline-start:20px}#comments .comment .avatar{float:left;position:inherit}body.rtl #comments .comment .avatar,html[dir=rtl] #comments .comment .avatar{float:right}}.page-header .entry-title,.site-footer .footer-inner,.site-footer:not(.dynamic-footer),.site-header .header-inner,.site-header:not(.dynamic-header),body:not([class*=elementor-page-]) .site-main{margin-inline-end:auto;margin-inline-start:auto;width:100%}@media(max-width:575px){.page-header .entry-title,.site-footer .footer-inner,.site-footer:not(.dynamic-footer),.site-header .header-inner,.site-header:not(.dynamic-header),body:not([class*=elementor-page-]) .site-main{padding-inline-end:10px;padding-inline-start:10px}}@media(min-width:576px){.page-header .entry-title,.site-footer .footer-inner,.site-footer:not(.dynamic-footer),.site-header .header-inner,.site-header:not(.dynamic-header),body:not([class*=elementor-page-]) .site-main{max-width:500px}.site-footer.footer-full-width .footer-inner,.site-header.header-full-width .header-inner{max-width:100%}}@media(min-width:768px){.page-header .entry-title,.site-footer .footer-inner,.site-footer:not(.dynamic-footer),.site-header .header-inner,.site-header:not(.dynamic-header),body:not([class*=elementor-page-]) .site-main{max-width:600px}.site-footer.footer-full-width,.site-header.header-full-width{max-width:100%}}@media(min-width:992px){.page-header .entry-title,.site-footer .footer-inner,.site-footer:not(.dynamic-footer),.site-header .header-inner,.site-header:not(.dynamic-header),body:not([class*=elementor-page-]) .site-main{max-width:800px}.site-footer.footer-full-width,.site-header.header-full-width{max-width:100%}}@media(min-width:1200px){.page-header .entry-title,.site-footer .footer-inner,.site-footer:not(.dynamic-footer),.site-header .header-inner,.site-header:not(.dynamic-header),body:not([class*=elementor-page-]) .site-main{max-width:1140px}.site-footer.footer-full-width,.site-header.header-full-width{max-width:100%}}.site-header+.elementor{min-height:calc(100vh - 320px)}

/* bcc-tokens */
/**
 * Barranco Comptoir Péruvien — brand design tokens.
 *
 * Source: Brand Book V6 (Sept 2026) + the official Kit de Marque V6 asset
 * export's own BC_Tokens.css (docs/brand-assets/), which is what's used
 * for --bcc-ink below -- V4 had no confirmed ink value, so this file
 * aliased it to Pacífico as a placeholder. V6's asset kit ships a
 * distinct, real ink value (#1B1726) that was never Pacífico; corrected.
 * Everything else (5-color palette, 3 type families) matched exactly
 * between V4 and V6 -- no other change needed.
 *
 * The legacy names (--bcc-purple-900, --bcc-gold-400, --bcc-cream,
 * --bcc-ink, --bcc-lime, etc.) below are kept from the original
 * placeholder token set on purpose —
 * PRs 5, 7, 8, 9, 11, 12 already reference them in shipped CSS. Renaming
 * would silently break every one of those (undefined custom properties
 * fail silent in CSS, not a build error). They now alias the confirmed
 * brand-book colors instead of guesses.
 *
 * Fonts are self-hosted below (assets/fonts/*.woff2, fetched from Google
 * Fonts — same open-license files, just served from our own domain).
 * The brand book's true display face is "Brothers", not yet licensed;
 * it names "Big Shoulders Display" as the explicit interim substitute
 * (page 20: "* Big Shoulders Display en attendant la licence Brothers.
 * Le wordmark n'est jamais retapé." — the logo artwork itself is never
 * reset in a font, only surrounding headline/UI text uses this face).
 */
:root {
	/* Confirmed brand-book palette (source of truth) — proportion guide
	   45 / 20 / 25 / 7 / 3, in this same order. */
	--bcc-chicha: #48396F;   /* Maïs mauve — primary, 45% */
	--bcc-choclo: #EEDB76;   /* Maïs géant — secondary, 20% */
	--bcc-quinoa: #F6F1E4;   /* La graine — light/background, 25% */
	--bcc-pacifico: #143232; /* La mer — dark accent, 7% */
	--bcc-lucuma: #EBAF82;   /* Le fruit — accent, 3% */
	--bcc-ink-text: #1B1726; /* Confirmed body-text ink from the V6 asset kit's own tokens -- distinct from Pacífico, not part of the 5-color brand palette itself */

	/* design/reference/index.html's own :root has two tokens the brand
	   book's 5-color list doesn't name on its own: a brighter "paper"
	   white for cards/tabs/panels (its --card/--paper, both #FFFDF8) that
	   sits on top of the tan --bg/Quinoa page background, and a darkened
	   Chicha for :hover states (its --chicha-dk). Without --bcc-paper,
	   --bcc-cream below aliased straight to Quinoa -- the exact same
	   color as the page background it sits on -- so every dish card, menu
	   tab, sticky panel and mini-bar rendered flush with the page instead
	   of lifting off it. */
	--bcc-paper: #FFFDF8;
	--bcc-chicha-dk: #382B5A;

	/* Legacy names (PRs 5/7/8/9/11/12 reference these) -> brand-book colors */
	--bcc-purple-900: var(--bcc-chicha); /* deep background, footer */
	--bcc-purple-700: var(--bcc-chicha); /* primary brand */
	--bcc-purple-500: var(--bcc-chicha); /* hover/active — brand book has one confirmed purple, no tint */
	--bcc-gold-400: var(--bcc-choclo);   /* brand yellow background */
	--bcc-gold-600: var(--bcc-lucuma);   /* accents, borders — distinct from the gold-400 fill */
	--bcc-cream: var(--bcc-paper);       /* cards/tabs/panels sitting on the page -- was aliased to Quinoa (see comment above) */
	--bcc-ink: var(--bcc-ink-text);      /* body text on light — real confirmed ink, not Pacífico */

	/* TODO(Fidel): no red/orange or green exists in the brand book's 5-color
	   palette. --bcc-chili and --bcc-lime are functional UI colors (spicy
	   tag, open-now dot), not brand colors — flagging that these are
	   outside the confirmed palette rather than guessing brand intent. */
	--bcc-chili: var(--bcc-lucuma);
	--bcc-lime: var(--bcc-pacifico);

	/* design/BRIEF.md §2's own :root also names these two -- muted body
	   text and hairline rules/dividers. Confirmed 2026-09-20: hero.css's
	   .bcc-how__step p already referenced --bcc-muted since step 2 of the
	   mockup port, but this file never defined it, so that rule was
	   silently falling back to inherited text colour. Defining both here
	   fixes that and unblocks menu.css's step-3 usage. */
	--bcc-muted: #5A5170;
	--bcc-rule: #CFC6B4;
	--bcc-font-display: "Big Shoulders Display", impact, sans-serif; /* TODO: swap to "Brothers" once licensed — never re-set the logo artwork itself in this font */
	--bcc-font-body: "Roboto Condensed", system-ui, sans-serif;
	--bcc-font-mono: "IBM Plex Mono", ui-monospace, monospace; /* labels, prices, addresses, hours, codes (brand book 02.8) */

	/* Shared H2 scale for full-width, single-column section headings
	   (menu/nutrition/coach/comptoirs/faq/ingredients + b2b's page h1) --
	   P2 audit found these 7 hardcoding the identical clamp() value
	   independently. Two-column split-layout headings (club/story/matin/
	   traiteur) keep their own smaller, layout-tuned
	   values -- those aren't drift, a half-width column genuinely needs
	   a smaller cap, so they're deliberately left alone here. */
	--bcc-h2: clamp(3.375rem, 7.2vw, 7rem);

	/* Type scale (UI/UX audit 2026-10-05, §4): fluid 360 -> 1440px, nine
	   sizes. New and touched rules use these; nothing visible goes below
	   --fs-data (13px) except legal fine print (.legal, --fs-legal 12px).
	   Roles: --bcc-font-display for H2-H4, nav, buttons, tabs, chips;
	   --bcc-font-body for reading and form text; --bcc-font-mono for data
	   only (prices, kcal/protein, codes), never for sentences. */
	--fs-display: clamp(2.75rem, 1.6rem + 5vw, 6rem);
	--fs-h2: clamp(2rem, 1.4rem + 2.6vw, 3.75rem);
	--fs-h3: clamp(1.5rem, 1.2rem + 1.2vw, 2.25rem);
	--fs-h4: clamp(1.25rem, 1.1rem + .6vw, 1.5rem);
	--fs-lead: clamp(1.125rem, 1rem + .4vw, 1.25rem);
	--fs-body: 1rem;
	--fs-small: .875rem;
	--fs-data: .8125rem;
	--fs-legal: .75rem;
	--lh-tight: 1;
	--lh-heading: 1.1;
	--lh-body: 1.55;
	--measure: 62ch;

	/* Sharp, bordered, "poster" language (2026-09-20, matching the
	   reference mockup Fidel picked) -- flat corners everywhere, no
	   blurred shadows. Cards/buttons/chips get a solid 2px border plus a
	   hard offset shadow on hover instead. Kept as tokens rather than 0
	   hardcoded per file so a future direction change is one edit. */
	--bcc-radius-sm: 0;
	--bcc-radius-md: 0;
	--bcc-radius-lg: 0;
	--bcc-radius-pill: 0;
	--bcc-shadow-card: none;
	--bcc-shadow-lift: 0 16px 40px rgb(72 57 111 / .28);
	--bcc-border-width: 2px;
	--bcc-space: clamp(16px, 2.5vw, 32px);

	/* Film grain overlay for coloured sections (design/BRIEF.md §2),
	   ported verbatim from design/reference/index.html's --grain SVG
	   data URI -- a generated noise texture, not a fetched image. */
	--bcc-grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(https://barrancocomptoir.com/wp-content/plugins/barranco-comptoir-core/assets/css/%23n)'/%3E%3C/svg%3E");
}

/**
 * Neither html nor body carry overflow-x:hidden any more (both removed
 * 2026-09-21) -- full history below, since this took two rounds to get
 * right and the reasoning matters if anyone touches horizontal overflow
 * again.
 *
 * Originally added to fix an iOS Safari horizontal rubber-band bug
 * (Fidel: "when scrolling it's moving sideways everything", confirmed
 * on a real iPhone) blamed on the hero's infinite marquee track
 * (motion.css), which is legitimately much wider than the viewport by
 * design. Round 1 removed body's copy: setting overflow-x alone on an
 * element forces its overflow-y to compute as `auto` instead of
 * `visible` (a real CSS spec rule), which makes that element its own
 * independent scroll container -- confirmed via an isolated
 * reproduction that this was silently breaking position:sticky for
 * every descendant sitewide (found via the bowl builder's totals panel
 * never actually sticking while scrolling). Kept html's copy, reasoning
 * the iOS fix needed it.
 *
 * Round 2, after re-verifying live post-deploy: the panel *still*
 * didn't stick. html's own overflow-x:hidden turned out to independently
 * cause the exact same breakage, confirmed by live A/B testing (toggling
 * only html's overflow-x on a live page while everything else stayed
 * fixed: present -> panel locked in lockstep with scroll, i.e. not
 * sticking at all; removed -> panel correctly held at top:104px while
 * scrolling through the section). Tried `overflow-x: clip` as a
 * spec-cleaner alternative to `hidden` (doesn't force the other axis to
 * `auto`) -- still broke sticky the same way, so this isn't specific to
 * the auto-promotion, just to setting non-visible overflow-x on the
 * scrolling root at all.
 *
 * Before removing it outright, checked whether it's even still needed:
 * measured document.documentElement.scrollWidth vs clientWidth (the
 * direct, engine-agnostic signal for "is this document horizontally
 * scrollable") on `/`, `/menu/`, `/arma-tu-bowl/` and `/emplacements/`
 * at a 390px mobile viewport, with html's overflow-x removed -- equal
 * on every page, no horizontal overflow anywhere. .bcc-marquee's own
 * overflow:hidden (motion.css) already fully contains the wide track on
 * its own today; whatever this rule was compensating for no longer
 * exists in the current markup/CSS. Safe to remove entirely.
 */

/**
 * Global radius reset (AUDIT_DESIGN_FUNNEL_Comptoir.md A2): the brand's
 * "poster" language is flat corners everywhere (--bcc-radius-*: 0
 * above), but live measurement across every page found pill-shaped
 * buttons, rounded inputs and a rounded logo image -- 12px/16px/9px
 * radii that exist nowhere in this plugin's own CSS (grepped for
 * hardcoded border-radius: only 50% circles, all intentional dots/
 * avatars). They're Hello Elementor's/Elementor's own default button,
 * input and image styling leaking through wherever this plugin doesn't
 * explicitly override it.
 *
 * !important, corrected 2026-09-20: a universal selector has *zero*
 * specificity -- lower than even a bare element selector -- so without
 * !important this reset never actually beat Elementor's own
 * `button`/`img`/`input` rules (re-verified live post-deploy: radius
 * offenders were unchanged). !important makes it win unconditionally,
 * which is why every intentional `border-radius: 50%` circle rule in
 * this plugin (dots, avatars) now also carries !important below --
 * !important always wins over non-!important regardless of
 * specificity, so those circles would otherwise have been flattened
 * by this same reset.
 *
 * A handful of buttons (.bcc-hero__arrow, .bcc-hero__dots button,
 * .bcc-opt) still measured a small 3px radius live even after this --
 * Elementor's kit CSS scopes some of its own button defaults with a
 * higher-specificity compound selector that keeps winning over this
 * bare `*` rule despite !important (specificity is compared before
 * source order, even between two !important declarations). Gave those
 * three their own `border-radius: 0 !important` directly, which does
 * have enough specificity to win.
 */
* {
	border-radius: 0 !important;
}

/**
 * Base page look (design/reference/index.html's own `body` rule, ported
 * verbatim). Nothing set this before, so every front-end page fell back
 * to the theme's default white background and font instead of the
 * brand's warm tan canvas -- the single biggest reason the site read as
 * off-brand next to the mockup. --bcc-cream-filled cards (see above)
 * only read as "lifted paper" against this tan backdrop; without it
 * they had nothing to contrast against.
 *
 * background/color: !important, corrected 2026-09-20 -- this was the
 * single biggest miss of the whole night. Live-measured
 * document.body's own computed backgroundColor as #FFF5C7 (a pale
 * lemon yellow, Elementor's kit default), not --bcc-quinoa, despite
 * this rule -- exactly AUDIT_DESIGN_FUNNEL_Comptoir.md A3's complaint
 * ("page background is a light lemon yellow"). Every #fff5c7
 * "background" reading in this session's own contrast/palette audits
 * was this real bug, not a sandbox/proxy artifact as earlier passes
 * assumed -- it's what any section without its own opaque background
 * (gaps, margins, any section whose own background rule is also
 * losing this same fight) was actually showing through to. Same
 * missing-!important collision as everywhere else tonight, just never
 * caught here because no automated check was written to inspect the
 * page's own base background specifically, only per-element text
 * contrast and known component classes.
 *
 * font-family: !important (UI/UX audit 2026-10-05, §4) -- Hello
 * Elementor's reset printed after this file and its own
 * `body{font-family:-apple-system,...}` won the tie, so every paragraph
 * without its own font rule rendered in the system face instead of the
 * brand's text face (BRAND.md: Roboto Condensed). includes/assets.php now
 * prints the theme first; !important keeps it true if that ever changes.
 */
body {
	background: var(--bcc-quinoa) !important;
	color: var(--bcc-ink) !important;
	font-family: var(--bcc-font-body) !important;
	font-size: var(--fs-body); /* 16px: what visitors saw while the theme's reset won (QA 2026-10-06) */
	line-height: 1.5;
	-webkit-font-smoothing: antialiased;
}

/**
 * Visible focus ring on every interactive element, ported verbatim from
 * design/reference/index.html's own `:focus-visible{outline:3px solid
 * var(--choclo);outline-offset:3px}` -- present in the reference from
 * day one but never actually carried over into this plugin. Grepped the
 * whole plugin for any :focus/:focus-visible rule and found none at all
 * (confirmed real gap, not a leak this time -- nothing here or in
 * Elementor's kit CSS suppresses the browser default either, it's just
 * that an unstyled default varies by browser and doesn't read as
 * "branded"). Gold reads well against every section background except
 * the few elements that are themselves gold (the primary CTA, and the
 * selected/pressed state of chips and ingredient options) -- those get
 * a purple override right after their own rule, same targeted-override
 * pattern already used for border-radius/box-shadow collisions.
 */
:focus-visible {
	outline: 3px solid var(--bcc-gold-400);
	outline-offset: 3px;
}

/**
 * Sitewide mid-fetch button state -- audit found 6 of 8 async form
 * submits (popup, opening countdown, nutrition/coach "send me this"
 * modals, b2b/office-lunch) set `button.disabled` in JS but had no
 * matching CSS anywhere, so the button looked identical while a
 * request was in flight, inviting double-submits. One global rule
 * instead of patching each button class individually.
 */
button:disabled {
	opacity: .6;
	cursor: default;
	pointer-events: none;
}

/**
 * Apply .grain to any coloured section to lay this noise texture over
 * it (design/BRIEF.md §2). .grain > * lifts real content above the
 * overlay without needing to know that section's own class names.
 */
.grain {
	position: relative;
	isolation: isolate;
}

.grain::after {
	content: "";
	position: absolute;
	inset: 0;
	background-image: var(--bcc-grain);
	opacity: .13;
	mix-blend-mode: overlay;
	pointer-events: none;
	z-index: 0;
}

.grain > * {
	position: relative;
	z-index: 1;
}

/**
 * Hides Hello Elementor's own generic page title (2026-09-22, Fidel:
 * "better design of each page basically, use the branding typographie
 * also do not forget!!") -- live-checked /faq: the theme's default
 * single-page template prints <div class="page-header"><h1
 * class="entry-title">...</h1></div> above our own [bcc_*] shortcode
 * content on every plain WP page (/menu, /arma-tu-bowl, /bureau,
 * /emplacements, /faq, /nos-ingredients, the location and dish pages --
 * anywhere that isn't the homepage's own custom front-page.php
 * template). Never touched by this plugin's CSS until now, so it
 * rendered in the theme's default font -- not the brand's Big Shoulders
 * Display -- right above each page's own properly-branded heading
 * (e.g. [bcc_faq]'s own "Questions", [bcc_menu]'s own "La carte"),
 * reading as two different-looking headings stacked on top of each
 * other. Visually hidden (not display: none) rather than restyled to
 * match, since every page already has its own real, branded heading
 * immediately below it -- a second heading here would just be a
 * duplicate. Keeps the real <h1> in the DOM for SEO/accessibility.
 */
.page-header {
	margin: 0;
	padding: 0;
}

/**
 * !important on every property -- live-verified on /faq and
 * /nos-ingredients that the plain rule above didn't actually hide
 * anything (h1 still full-width, visible). Same Elementor global-kit
 * specificity collision documented throughout this plugin's own CSS
 * history (header.css's .bcc-announce, popup.css's .bcc-popup__offer,
 * etc.) -- Elementor's own kit styles for a generic heading element win
 * without it.
 */
.page-header .entry-title {
	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;
	white-space: nowrap !important;
	border: 0 !important;
}

@font-face {
	font-family: "Big Shoulders Display";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("https://barrancocomptoir.com/wp-content/plugins/barranco-comptoir-core/assets/css/../fonts/big-shoulders-display-400.woff2") format("woff2");
}

@font-face {
	font-family: "Big Shoulders Display";
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url("https://barrancocomptoir.com/wp-content/plugins/barranco-comptoir-core/assets/css/../fonts/big-shoulders-display-700.woff2") format("woff2");
}

@font-face {
	font-family: "Big Shoulders Display";
	font-style: normal;
	font-weight: 900;
	font-display: swap;
	src: url("https://barrancocomptoir.com/wp-content/plugins/barranco-comptoir-core/assets/css/../fonts/big-shoulders-display-900.woff2") format("woff2");
}

@font-face {
	font-family: "Roboto Condensed";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("https://barrancocomptoir.com/wp-content/plugins/barranco-comptoir-core/assets/css/../fonts/roboto-condensed-400.woff2") format("woff2");
}

@font-face {
	font-family: "Roboto Condensed";
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url("https://barrancocomptoir.com/wp-content/plugins/barranco-comptoir-core/assets/css/../fonts/roboto-condensed-700.woff2") format("woff2");
}

@font-face {
	font-family: "Roboto Condensed";
	font-style: italic;
	font-weight: 400;
	font-display: swap;
	src: url("https://barrancocomptoir.com/wp-content/plugins/barranco-comptoir-core/assets/css/../fonts/roboto-condensed-400-italic.woff2") format("woff2");
}

@font-face {
	font-family: "IBM Plex Mono";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("https://barrancocomptoir.com/wp-content/plugins/barranco-comptoir-core/assets/css/../fonts/ibm-plex-mono-400.woff2") format("woff2");
}

@font-face {
	font-family: "IBM Plex Mono";
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url("https://barrancocomptoir.com/wp-content/plugins/barranco-comptoir-core/assets/css/../fonts/ibm-plex-mono-600.woff2") format("woff2");
}

/* bcc-header */
/**
 * Sticky header, full-screen mobile drawer, announcement bar. Reference:
 * design mockup Fidel shared 2026-09-19 (purple/gold, bold uppercase
 * nav). Order bar (components.css) owns the bottom of the viewport on
 * mobile, so this owns the top instead -- no z-index collision.
 *
 * Hiding the old header (2026-09-20): staging showed the theme's own
 * default header (logo/CTA stacked, its own hamburger opening a
 * completely different menu -- "À propos / Contact / Franchise", pages
 * this plugin knows nothing about) rendering alongside this one, because
 * nobody had gone into Elementor to hide it yet. Rather than leave that
 * as a manual step someone has to remember, this CSS rule hides it
 * automatically -- purely visual (display:none), nothing in the theme
 * or Elementor is touched or edited. Targets Hello Elementor's default
 * header markup (#masthead, .site-header) and an Elementor Pro header
 * template (data-elementor-type="header"), covering both possibilities
 * without knowing which one this site actually uses.
 */
body > header#masthead,
body > .site-header,
[data-elementor-type="header"] {
	display: none !important;
}

/**
 * color: !important -- AUDIT_DESIGN_FUNNEL_Comptoir.md flagged a
 * non-palette magenta (#cc3366) on this element; live measurement
 * confirmed it, computed instead of the purple set below. Same
 * Elementor-collision pattern already fixed elsewhere in this file
 * (.bcc-menu-toggle) and across the plugin -- this anchor's color was
 * simply never audited for it since it isn't a heading/button/select.
 */
.bcc-announce {
	display: block;
	background: var(--bcc-gold-400);
	color: var(--bcc-purple-900) !important;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .02em;
	text-align: center;
	text-decoration: none;
	padding: 9px 16px;
}

a.bcc-announce:hover {
	text-decoration: underline;
}

.bcc-drawer {
	position: fixed;
	inset: 0;
	z-index: 200;
	background: var(--bcc-purple-900);
	color: var(--bcc-cream);
	padding: calc(env(safe-area-inset-top, 0px) + 90px) 28px 40px;
	display: flex;
	flex-direction: column;
	gap: 18px;
	overflow-y: auto;
	overscroll-behavior: contain;
}

/* Page behind the open phone menu stays put (audit 2026-10-05, #18). */
html.bcc-drawer-open,
html.bcc-drawer-open body {
	overflow: hidden;
}

.bcc-drawer[hidden] {
	display: none;
}

.bcc-drawer.is-open {
	animation: bcc-drawer-in .25s ease;
}

@keyframes bcc-drawer-in {
	from { opacity: 0; }
}

.bcc-drawer__nav {
	display: flex;
	flex-direction: column;
	gap: 14px;
}

.bcc-drawer__nav a {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 46px;
	line-height: 1;
	text-transform: uppercase;
	color: var(--bcc-cream);
	text-decoration: none;
}

.bcc-drawer__lang {
	display: flex;
	align-items: center;
	gap: 10px;
	margin-top: 24px;
	padding-top: 20px;
	border-top: var(--bcc-border-width) solid rgb(246 241 228 / .25);
	font-family: var(--bcc-font-mono);
	font-size: 15px;
	font-weight: 700;
	letter-spacing: .03em;
}

.bcc-drawer__lang a,
.bcc-drawer__lang span {
	color: var(--bcc-cream);
	text-decoration: none;
}

.bcc-drawer__lang .is-active {
	color: var(--bcc-gold-400);
}

.bcc-drawer__close {
	position: absolute;
	top: calc(env(safe-area-inset-top, 0px) + 18px);
	right: 20px;
	width: 46px;
	height: 46px;
	background: none !important;
	border: var(--bcc-border-width) solid var(--bcc-cream);
	border-radius: var(--bcc-radius-sm);
	color: var(--bcc-cream) !important;
	font-size: 22px;
	cursor: pointer;
}

.bcc-drawer__cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	min-height: 52px;
	margin-top: 10px;
	padding: 0 26px;
	background: var(--bcc-gold-400) !important;
	color: var(--bcc-purple-900) !important;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 26px;
	letter-spacing: .05em;
	text-transform: uppercase;
	text-decoration: none;
	border: 2px solid transparent;
	border-radius: var(--bcc-radius-pill);
	box-shadow: 0 6px 0 -1px rgb(0 0 0 / .18);
	align-self: flex-start;
}

@media (prefers-reduced-motion: reduce) {
	.bcc-drawer.is-open {
		animation: none;
	}
}

.bcc-top {
	position: sticky;
	top: env(safe-area-inset-top, 0);
	z-index: 120;
	background: var(--bcc-purple-900);
	color: var(--bcc-cream);
	box-shadow: none;
	transition: box-shadow .3s, transform .3s ease;
}

.bcc-top.bcc-top--scrolled {
	box-shadow: 0 10px 30px rgb(21 18 29 / .25);
}

/**
 * Hide-on-scroll-down / reveal-on-scroll-up, per the reference mockup
 * ("the top ... are sticky pretty much or disappear from time to time").
 * header.js toggles this class; disabled outright for reduced-motion so
 * the header just stays put rather than snapping.
 */
.bcc-top.bcc-top--hidden {
	transform: translateY(-100%);
}

@media (prefers-reduced-motion: reduce) {
	.bcc-top {
		transition: box-shadow .3s;
	}

	.bcc-top.bcc-top--hidden {
		transform: none;
	}
}

.bcc-top__wrap {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
	height: 74px;
}

/**
 * color: !important -- the logo is image-only (no visible text), so
 * this never affected rendering, but live measurement still found
 * Elementor's default link magenta computed here. Fixed anyway per
 * AUDIT_DESIGN_FUNNEL_Comptoir.md A1's "delete every non-palette
 * colour" -- zero tolerance, not just the visible ones.
 */
.bcc-top__logo {
	color: var(--bcc-cream) !important;
}

.bcc-top__logo img {
	height: 44px;
	width: auto;
	display: block;
}

.bcc-top__nav {
	display: flex;
	gap: 24px;
}

/**
 * FR/EN toggle (Fidel: "why the website theres no toggle FR or EN"),
 * both here (desktop) and .bcc-drawer__lang below (mobile drawer).
 * Current language is a plain span, not a link -- no reason to link a
 * page to itself -- the other language is the only clickable one.
 * The :hover rule is grouped with .bcc-top__nav's own :hover/::after
 * block further below, not here next to this rule -- same specificity
 * tier, kept together so stylelint's no-descending-specificity (which
 * compares raw specificity values file-wide, not by component) stays
 * satisfied without disabling the rule.
 */
.bcc-top__lang {
	display: flex;
	align-items: center;
	gap: 6px;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	font-weight: 700;
	letter-spacing: .03em;
}

.bcc-top__lang a,
.bcc-top__lang span {
	color: var(--bcc-cream);
	text-decoration: none;

	/* Tap target >= 44px on phones (audit 2026-10-05, #20). */
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 44px;
	min-height: 44px;
}

.bcc-top__lang .is-active {
	color: var(--bcc-gold-400);
}

/**
 * font-family: was --bcc-font-mono (ported verbatim from the reference
 * mockup) -- Fidel flagged it live as "not matching the fonts used in
 * the mobile nav menu... pretty thin and not very lisable." Brand
 * book 02.8 also scopes mono to labels/prices/addresses/codes, not
 * primary navigation, so this brings desktop in line with the mobile
 * drawer's own bold display treatment (bcc-drawer__nav a above)
 * instead of the mockup's thinner label style.
 */
.bcc-top__nav a {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 17px;
	letter-spacing: .02em;
	text-transform: uppercase;
	color: var(--bcc-cream);
	text-decoration: none;
	opacity: .88;
	position: relative;
	padding: 6px 0;
	transition: opacity .2s;
}

.bcc-top__nav a:hover {
	opacity: 1;
}

/**
 * Animated underline (design/BRIEF.md §4.2): grows in from the left on
 * hover, stays filled for the current page (.act, set server-side in
 * bcc_print_nav_links()) or a real WP menu's own "current page" class.
 */
.bcc-top__nav a::after {
	content: "";
	position: absolute;
	left: 0;
	right: 100%;
	bottom: 0;
	height: 2px;
	background: var(--bcc-gold-400);
	transition: right .25s;
}

.bcc-top__nav a:hover::after,
.bcc-top__nav a.act::after,
.bcc-top__nav .current-menu-item > a::after {
	right: 0;
}

.bcc-top__nav a.act,
.bcc-top__nav .current-menu-item > a {
	opacity: 1;
}

.bcc-top__lang a:hover {
	text-decoration: underline;
}

@media (prefers-reduced-motion: reduce) {
	.bcc-top__nav a::after {
		transition: none;
	}
}

.bcc-top__actions {
	display: flex;
	align-items: center;
	gap: 14px;
}

.bcc-top__cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 46px;
	padding: 0 26px;
	background: var(--bcc-gold-400) !important;
	color: var(--bcc-purple-900) !important;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 20px;
	letter-spacing: .05em;
	text-transform: uppercase;
	text-decoration: none;
	border: 2px solid transparent;
	border-radius: var(--bcc-radius-pill);
	box-shadow: 0 6px 0 -1px rgb(0 0 0 / .18);
	transition: transform .2s cubic-bezier(.2,.8,.2,1);
}

.bcc-top__cta:hover {
	transform: translateY(-2px);
}

/* tokens.css's global focus ring is gold -- invisible on this CTA's own gold fill */
.bcc-top__cta:focus-visible,
.bcc-drawer__cta:focus-visible {
	outline-color: var(--bcc-purple-900);
}

/**
 * !important throughout: staging showed this button picking up an
 * unidentified fill color from somewhere outside this plugin (not
 * reproducible from any rule in this codebase -- grepped for it,
 * nothing here sets it). Forcing our own values wins regardless of
 * whatever else on the page might be targeting a bare <button>.
 */
.bcc-menu-toggle {
	display: none !important;
	flex-direction: column !important;
	justify-content: center !important;
	align-items: center !important;
	gap: 5px !important;
	width: 46px !important;
	height: 46px !important;
	background: transparent !important;
	border: var(--bcc-border-width) solid var(--bcc-cream) !important;
	border-radius: var(--bcc-radius-sm) !important;
	box-shadow: none !important;
	cursor: pointer;
}

.bcc-menu-toggle span {
	display: block !important;
	width: 20px !important;
	height: 2px !important;
	background: var(--bcc-cream) !important;
	transition: transform .25s, opacity .25s;
}

.bcc-menu-toggle[aria-expanded="true"] span:nth-child(1) {
	transform: translateY(7px) rotate(45deg);
}

.bcc-menu-toggle[aria-expanded="true"] span:nth-child(2) {
	opacity: 0;
}

.bcc-menu-toggle[aria-expanded="true"] span:nth-child(3) {
	transform: translateY(-7px) rotate(-45deg);
}

@media (width < 1020px) {
	.bcc-top__nav {
		display: none;
	}

	/**
	 * Matches the reference's own .top .btn.hide-m{display:none} at this
	 * same breakpoint: below 1020px the header CTA is dropped entirely,
	 * not shrunk. Live-render testing found this missing rule was the
	 * cause of a real horizontal-overflow bug on phones (the logo + full
	 * CTA + hamburger together don't fit in one row under ~420px) --
	 * not a conversion loss, since the sticky order bar (order-bar.css)
	 * already carries the same "commander" job on small screens.
	 */
	.bcc-top__cta {
		display: none;
	}

	.bcc-menu-toggle {
		display: inline-flex !important;
	}
}

/* bcc-hero */
/**
 * Hero (mockup port step 2, design/BRIEF.md §5): split layout, headline
 * left, dish stage right with a 5-plate slider. M1 entrance animation
 * (word stagger, image scale+fade, CTAs pop last) lives here too --
 * triggered by motion.js adding `.bcc-hero-in` to <html>.
 */
.bcc-hero {
	background: var(--bcc-purple-900);
	color: #fff;
	overflow: hidden;
}

.bcc-hero__wrap {
	display: grid;
	grid-template-columns: 1.05fr .95fr;
	gap: 30px;
	align-items: center;
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
	min-height: min(78vh, 760px);
	padding-block: 64px 48px;
}

.bcc-hero__kicker {
	font-family: var(--bcc-font-mono);
	font-size: 14px;
	letter-spacing: .03em;
	color: var(--bcc-gold-400);
	margin: 0 0 20px;
}

.bcc-hero__headline {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: clamp(4.125rem, 9.2vw, 9.375rem);
	line-height: .88;
	text-transform: uppercase;
	margin: 0;
	color: #fff;
}

.bcc-hero__line {
	display: block;
	overflow: hidden;
	padding-top: .12em;
	margin-top: -.12em;
}

/**
 * Explicit, not inherited from .bcc-hero__headline's color:#fff above:
 * a live-render check (2026-09-20, Playwright against staging) found
 * this line's text rendering purple-on-purple -- effectively invisible
 * -- while the accent line rendered correctly. Something in the page's
 * cascade overrides the *inherited* heading color on this specific
 * nested span without touching a directly-declared one, the same
 * pattern already fixed for headings elsewhere in this plugin.
 */
.bcc-hero__line span {
	color: #fff;
}

.bcc-hero__line--accent {
	color: var(--bcc-gold-400);
}

.bcc-hero__line--accent span {
	color: var(--bcc-gold-400);
}

.bcc-hero__lede {
	font-size: 22px;
	max-width: 540px;
	margin: 24px 0 30px;
	color: #E8E1F3;
}

/**
 * Hero order module (includes/order-module.php): two counter chips right
 * above "Commander". Selected = Choclo fill (the action colour); status
 * dot: Choclo when open, muted when closed, Lucuma when opening soon.
 */
.bcc-hero__loc {
	margin: -12px 0 18px;
}

.bcc-hero__loc-chips {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 8px;
	max-width: 540px;
}

/* !important on the box model: Hello Elementor's reset and Elementor's
   kit style every <button> (inline-block, nowrap, centred, grey fill,
   offset shadow), which squeezed name + status onto one clipped line.
   Same collision as .bcc-hero__arrow etc. (see tokens.css). */
.bcc-hero__loc-chip {
	display: flex !important;
	flex-direction: column !important;
	align-items: flex-start !important;
	justify-content: center !important;
	gap: 2px;
	width: 100% !important;
	min-width: 0;
	min-height: 56px;
	margin: 0 !important;
	padding: 8px 12px !important;
	border: var(--bcc-border-width) solid rgb(246 241 228 / .45) !important;
	background: transparent !important;
	box-shadow: none !important;
	color: var(--bcc-quinoa) !important;
	text-align: left !important;
	white-space: normal !important;
	cursor: pointer;
	transition: background .15s, border-color .15s, color .15s;
}

.bcc-hero__loc-chip:disabled {
	cursor: default;
	border-style: dashed !important;
	opacity: .8 !important;
}

.bcc-hero__loc-chip:hover:not(:disabled) {
	border-color: var(--bcc-choclo) !important;
}

.bcc-hero__loc-chip[aria-checked="true"] {
	background: var(--bcc-choclo) !important;
	border-color: var(--bcc-choclo) !important;
	color: var(--bcc-chicha) !important;
}

.bcc-hero__loc-name {
	font-family: var(--bcc-font-display);
	font-weight: 700;
	font-size: 18px;
	line-height: 1.1;
	text-transform: uppercase;
}

.bcc-hero__loc-status {
	display: flex;
	align-items: center;
	gap: 6px;
	max-width: 100%;
	text-transform: none;
	letter-spacing: 0;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	line-height: 1.3;
}

.bcc-hero__loc-status::before {
	content: "";
	flex: none;
	width: 7px;
	height: 7px;
	background: rgb(246 241 228 / .5);
}

.bcc-hero__loc-chip.is-open .bcc-hero__loc-status::before {
	background: var(--bcc-choclo);
}

.bcc-hero__loc-chip:disabled .bcc-hero__loc-status::before {
	background: var(--bcc-lucuma);
}

/* On the selected (Choclo) chip, the dot switches to ink to stay visible. */
.bcc-hero__loc-chip[aria-checked="true"] .bcc-hero__loc-status::before {
	background: var(--bcc-chicha);
}

.bcc-hero__ctas {
	display: flex;
	flex-wrap: wrap;
	gap: 14px;
}

.bcc-hero__cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 52px;
	padding: 0 26px;
	border: var(--bcc-border-width) solid transparent;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 22px;
	letter-spacing: .05em;
	text-transform: uppercase;
	text-decoration: none;
	transition: transform .2s cubic-bezier(.2,.8,.2,1);
}

.bcc-hero__cta:hover {
	transform: translateY(-2px);
}

.bcc-hero__cta--primary {
	background: var(--bcc-gold-400) !important;
	color: var(--bcc-purple-900) !important;
	box-shadow: 0 6px 0 -1px rgb(0 0 0 / .18);
}

/* tokens.css's global focus ring is gold -- invisible on this button's own gold background */
.bcc-hero__cta--primary:focus-visible {
	outline-color: var(--bcc-purple-900);
}

.bcc-hero__cta--ghost {
	background: transparent !important;
	border-color: var(--bcc-cream);
	color: var(--bcc-cream) !important;
}

/**
 * Why order direct instead of a delivery app (AUDIT_DESIGN_FUNNEL_
 * Comptoir.md D5), sitting right under the CTAs per that same ask.
 */
.bcc-hero__reasons {
	margin: 14px 0 0;
	color: #E8E1F3;
	font-size: 14px;
}

.bcc-hero__facts {
	display: flex;
	flex-wrap: wrap;
	gap: 10px 22px;
	margin-top: 14px;
	color: var(--bcc-gold-400);
	font-family: var(--bcc-font-mono);
	font-size: 14px;
}

.bcc-hero__facts span::before {
	content: "";
	display: inline-block;
	width: 8px;
	height: 8px;
	background: var(--bcc-gold-400);
	margin-right: 8px;
	vertical-align: 1px;
}

/* ===== Dish stage / slider (design/BRIEF.md §5) ===== */

.bcc-hero__stage {
	position: relative;
	justify-self: center;
	width: min(560px, 100%);
	aspect-ratio: 1;
}

.bcc-hero__slides {
	position: absolute;
	inset: 0;
}

.bcc-hero__plate {
	position: absolute;
	inset: 6%;
	opacity: 0;
	transform: scale(.62) rotate(-90deg);
	transition: opacity .5s ease, transform .5s cubic-bezier(.5,0,.75,0);
	pointer-events: none;
}

.bcc-hero__plate.is-on {
	opacity: 1;
	transform: none;
	transition: opacity .6s ease .15s, transform 1.1s cubic-bezier(.2,.8,.2,1) .15s;
}

.bcc-hero__plate.is-out {
	opacity: 0;
	transform: scale(.7) rotate(70deg);
}

/**
 * animation removed 2026-09-22 (Fidel, live: "i dont want the animation
 * to go round and round") -- was a 90s continuous rotation on the hero
 * dish photo. Circular crop (border-radius) kept, that's the intended
 * plate framing, not part of the complaint.
 */
.bcc-hero__spin {
	width: 100%;
	height: 100%;
	border-radius: 50% !important;
	overflow: hidden;
	position: relative;
}

.bcc-hero__art {
	width: 100%;
	height: 100%;
	display: block;
}

.bcc-hero__art svg,
.bcc-hero__art img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}


.bcc-hero__tag {
	position: absolute;
	z-index: 3;
	left: -2%;
	bottom: 10%;
	background: var(--bcc-quinoa);
	color: var(--bcc-ink);
	padding: 14px 18px;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	box-shadow: 6px 6px 0 var(--bcc-gold-400);
	animation: bcc-hero-tag-in .8s 1.1s ease both;
}

.bcc-hero__tag.is-swap {
	animation: bcc-hero-tag-swap .6s cubic-bezier(.2,.8,.2,1);
}

@keyframes bcc-hero-tag-in {
	from {
		opacity: 0;
		transform: translateY(16px);
	}
}

@keyframes bcc-hero-tag-swap {
	from {
		opacity: 0;
		transform: translateY(14px);
	}
}

.bcc-hero__tag b {
	display: block;
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 30px;
	text-transform: uppercase;
	line-height: 1;
}

.bcc-hero__hctl {
	position: absolute;
	left: 50%;
	bottom: -6%;
	transform: translateX(-50%);
	display: flex;
	align-items: center;
	gap: 12px;
	z-index: 4;
}

.bcc-hero__arrow {
	flex: none;
	box-sizing: border-box;
	width: 44px;
	height: 44px;
	padding: 0 !important; /* theme/Elementor button padding stretched it to ~95px wide */
	border: var(--bcc-border-width) solid var(--bcc-cream);
	border-radius: 0 !important;
	background: transparent !important;
	color: var(--bcc-cream) !important;
	font-size: 18px;
	cursor: pointer;
	transition: background .2s, color .2s;
}

.bcc-hero__arrow:hover {
	background: var(--bcc-gold-400) !important;
	color: var(--bcc-purple-900) !important;
	border-color: var(--bcc-gold-400);
}

.bcc-hero__dots {
	display: flex;
	gap: 6px;
}

.bcc-hero__dots button {
	width: 34px;
	height: 6px;
	border: 0;
	border-radius: 0 !important;
	padding: 0;
	background: rgb(246 241 228 / .3) !important;
	cursor: pointer;
	position: relative;
	overflow: hidden;
}

.bcc-hero__dots button i {
	position: absolute;
	inset: 0;
	background: var(--bcc-gold-400) !important;
	transform: scaleX(0);
	transform-origin: left;
}

.bcc-hero__dots button.is-on i {
	animation: bcc-hero-progress var(--bcc-hero-dur, 6s) linear forwards;
}

.bcc-hero__dots.is-paused button.is-on i {
	animation-play-state: paused;
}

@keyframes bcc-hero-progress {
	to { transform: scaleX(1); }
}

/* Floating ingredient pieces (design/BRIEF.md §5) */
.bcc-hero__float {
	position: absolute;
	width: 64px;
	height: 64px;
	pointer-events: none;
	will-change: transform;
}

.bcc-hero__float svg {
	width: 100%;
	height: 100%;
	animation: bcc-hero-bob 6s ease-in-out infinite;
}

@keyframes bcc-hero-bob {
	50% { transform: translateY(-12px) rotate(12deg); }
}

/**
 * Marquee word styling only -- .bcc-marquee/.bcc-marquee__track
 * themselves (overflow, track layout, the M5 scroll animation) are
 * owned by motion.css so there's exactly one definition of that
 * animation, not two competing ones.
 */
.bcc-marquee__word {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 34px;
	text-transform: uppercase;
	color: var(--bcc-gold-400);
}

.bcc-marquee__word--outline {
	color: transparent;
	-webkit-text-stroke: 1.5px var(--bcc-gold-400);
}

/* ===== "Comment ça marche" strip (design/BRIEF.md §4.6) ===== */

.bcc-how {
	background: var(--bcc-cream);
	color: var(--bcc-ink);
	border-bottom: var(--bcc-border-width) solid var(--bcc-ink);

	--bcc-scene-accent: var(--bcc-purple-900); /* M12 -- gold default reads too light on this cream background */
}

.bcc-how__wrap {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
}

.bcc-how__step {
	padding: 30px 24px;
	border-left: var(--bcc-border-width) solid var(--bcc-ink);
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.bcc-how__step:last-child {
	border-right: var(--bcc-border-width) solid var(--bcc-ink);
}

.bcc-how__step b {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 48px;
	line-height: 1;
	color: var(--bcc-purple-900);
}

.bcc-how__step h3 {
	margin: 0;
	font-family: var(--bcc-font-display) !important;
	font-weight: 800;
	font-size: 26px;
	text-transform: uppercase;
	color: var(--bcc-ink) !important;
}

.bcc-how__step p {
	margin: 0;
	color: var(--bcc-muted);
	font-size: 16px;
}

@media (width < 860px) {
	.bcc-how__wrap {
		grid-template-columns: 1fr 1fr;
	}

	.bcc-how__step {
		border-bottom: var(--bcc-border-width) solid var(--bcc-ink);
	}
}

/* No-JS fallback (critical): stays fully visible until motion.php's early
   inline script confirms JS is running by adding `.js` to <html>. */
html:not(.js) .bcc-hero__line span,
html:not(.js) .bcc-hero__plate,
html:not(.js) .bcc-hero__ctas {
	opacity: 1;
	transform: none;
}

html:not(.js) .bcc-hero__plate {
	position: static;
	display: none;
}

html:not(.js) .bcc-hero__plate:first-child {
	display: block;
}

@media (prefers-reduced-motion: no-preference) {
	.js .bcc-hero__line span {
		opacity: 0;
		transform: translateY(108%);
		transition: transform 1s cubic-bezier(.2,.7,.1,1);
	}

	.js .bcc-hero__line--accent span {
		transition-delay: .12s;
	}

	.js.bcc-hero-in .bcc-hero__line span {
		opacity: 1;
		transform: none;
	}

	/* Slide only, never hidden (2026-09-25, Lighthouse): opacity 0 here
	   made the lede the page's LCP element and pushed LCP to ~9 s while
	   it waited for motion.js. Visible from first paint, same motion. */
	.js .bcc-hero__lede,
	.js .bcc-hero__ctas,
	.js .bcc-hero__reasons,
	.js .bcc-hero__facts {
		transform: translateY(16px);
		transition: transform .8s cubic-bezier(.2,.8,.2,1);
	}

	.js .bcc-hero__ctas {
		transition-delay: .15s;
	}

	.js .bcc-hero__reasons {
		transition-delay: .22s;
	}

	.js .bcc-hero__facts {
		transition-delay: .3s;
	}

	.js.bcc-hero-in .bcc-hero__lede,
	.js.bcc-hero-in .bcc-hero__ctas,
	.js.bcc-hero-in .bcc-hero__reasons,
	.js.bcc-hero-in .bcc-hero__facts {
		opacity: 1;
		transform: none;
	}
}

@media (prefers-reduced-motion: reduce) {
	.bcc-hero__float svg,
	.bcc-marquee__track {
		animation: none;
	}

	.bcc-hero__plate {
		position: static;
		opacity: 1;
		transform: none;
		display: none;
	}

	.bcc-hero__plate.is-on {
		display: block;
	}
}

/**
 * Fit the desktop hero to the screen height, not just its width (Fidel,
 * 2026-09-29): sized by vw alone, the hero was ~920-1000px tall and put
 * "Commander" below the fold on every common laptop (1280x640 to
 * 1536x730, measured on staging). Headline, spacing and dish stage now
 * also cap on svh; 80px = sticky header allowance (measured 74px).
 * Phones/tablets are untouched (the < 900px block below owns them).
 */
@media (width >= 900px) {
	.bcc-hero__wrap {
		min-height: min(calc(100svh - 80px), 820px);
		padding-block: clamp(20px, 4.5svh, 64px) clamp(28px, 4.5svh, 48px);
		gap: clamp(20px, 3vw, 30px);
	}

	.bcc-hero__kicker {
		margin-bottom: clamp(8px, 1.8svh, 20px);
	}

	.bcc-hero__headline {
		font-size: clamp(3.25rem, min(9.2vw, 11svh), 9.375rem);
	}

	.bcc-hero__lede {
		font-size: clamp(17px, 2.5svh, 22px);
		margin: clamp(12px, 2.4svh, 24px) 0 clamp(16px, 3svh, 30px);
	}

	/* 150px leaves room for the padding and the arrows under the stage. */
	.bcc-hero__stage {
		width: min(560px, 100%, calc(100svh - 80px - 150px));
	}
}

@media (width < 900px) {
	.bcc-hero__wrap {
		grid-template-columns: 1fr;
		padding-block: 34px 30px;
		min-height: 0;
		text-align: center;
	}

	.bcc-hero__lede {
		font-size: 19px;
	}

	.bcc-hero__ctas,
	.bcc-hero__facts {
		justify-content: center;
	}

	.bcc-hero__loc-chips {
		margin-inline: auto;
	}

	/* Copy first on phones (audit 2026-09-24 §3.1): with the dish stage on
	   top, "Commander" sat at 938px on a 390x844 screen, below the fold.
	   Headline, promise and CTA now fill the first screen (CTA at ~583px);
	   the dish carousel follows. */
	.bcc-hero__stage {
		width: min(380px, 92%);
		margin-inline: auto;
	}

	.bcc-hero__tag {
		bottom: 2%;
		padding: 10px 12px;
	}

	.bcc-hero__tag b {
		font-size: 22px;
	}

	/* One dot per hero dish at 34px each pushed the "next" arrow off-screen
	   on phones (audit P0-10). Keep the controls inside the stage width. */
	.bcc-hero__hctl {
		left: 0;
		right: 0;
		transform: none;
		justify-content: center;
	}

	/* Dots overflowed on top of the next arrow on phones (Lighthouse
	   target-size, 2026-09-25): the arrows alone navigate here. */
	.bcc-hero__dots {
		display: none;
	}
}

/* bcc-promo-band */
/**
 * [bcc_promo_band] -- docs/HQ-PORTAL-SPEC.md Phase 3 slice 1, the
 * promotions-engine skill's "promo-band" placement (under the hero).
 * Renders nothing when includes/hq-promos.php's bcc_active_promo()
 * finds no live promo, so this file only ever matters when Marketing
 * has actually scheduled something.
 */
.bcc-promo-band {
	background: var(--bcc-choclo);
	border-block: var(--bcc-border-width) solid var(--bcc-chicha);
}

.bcc-promo-band__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
	padding-block: 14px;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 8px 20px;
	text-align: center;
}

.bcc-promo-band__text {
	margin: 0;
	color: var(--bcc-chicha);
	font-size: 15px;
	line-height: 1.4;
}

.bcc-promo-band__text strong {
	font-family: var(--bcc-font-display, sans-serif);
	font-weight: 900;
	text-transform: uppercase;
	margin-right: 8px;
}

.bcc-promo-band__cta {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	background: var(--bcc-chicha);
	color: var(--bcc-quinoa);
	font-family: var(--bcc-font-mono, monospace);
	font-size: 13px;
	letter-spacing: 0.02em;
	text-decoration: none;
	padding: 8px 16px;
	white-space: nowrap;
}

.bcc-promo-band__cta:hover {
	background: var(--bcc-chicha-dk, var(--bcc-chicha));
}

@media (width < 640px) {
	.bcc-promo-band__wrap {
		flex-direction: column;
		text-align: center;
	}
}

/* bcc-story */
/**
 * Brand story ([bcc_story]): the reference mockup's two-column
 * "Un barrio de Lima" section -- an art placeholder on one side, the
 * story + three brand beats on the other.
 *
 * background: Choclo, not Pacífico -- 2026-09-21 palette rebalance
 * (Fidel: unify around yellow/purple/beige as the mains; this is
 * yellow's first full-section moment on the site, used for the brand's
 * emotional highlight rather than routine background rotation). Text
 * flipped light-on-dark -> dark-on-light: Chicha on Choclo is an
 * approved pairing per docs/BRAND.md ("Choclo/Chicha"). Every
 * color/border rule below that was tuned for the old dark panel is
 * updated in the same pass -- see individual comments.
 */
.bcc-story {
	background: var(--bcc-gold-400);
	color: var(--bcc-purple-900);
	padding-block: 100px;

	--bcc-scene-accent: var(--bcc-purple-900); /* M12 -- gold-on-gold would be invisible here */
}

@media (width < 860px) {
	.bcc-story {
		padding-block: 64px;
	}
}

.bcc-story__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
	display: grid;
	grid-template-columns: .85fr 1.15fr;
	gap: 56px;
	align-items: center;
}

@media (width < 900px) {
	.bcc-story__wrap {
		grid-template-columns: 1fr;
	}
}

.bcc-story__art {
	aspect-ratio: 4 / 5;
	position: relative;
	background: linear-gradient(180deg, var(--bcc-chicha-dk) 0%, var(--bcc-purple-900) 55%, var(--bcc-ink) 100%);
	overflow: hidden;
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
}

.bcc-story__art img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/**
 * M-story -- slow photo drift, same cheap transform-only motion as the
 * rest of motion.css (M2/M3/M5/M11), scoped here since it's specific to
 * this one image rather than a reusable system pattern. Full stop under
 * prefers-reduced-motion, matching motion.css's own gate.
 */
@media (prefers-reduced-motion: no-preference) {
	.bcc-story__art img {
		animation: bcc-story-drift 22s ease-in-out infinite alternate;
	}
}

@keyframes bcc-story-drift {
	from {
		transform: scale(1.06) translate3d(0, 0, 0);
	}

	to {
		transform: scale(1.14) translate3d(-1.5%, -1.5%, 0);
	}
}

.bcc-story__eyebrow {
	font-family: var(--bcc-font-mono);
	font-size: 14px;
	letter-spacing: .03em;
	color: var(--bcc-purple-900);
	margin: 0 0 16px;
}

/**
 * color: !important -- live-measured on staging showing this headline
 * in Elementor's global heading purple instead of the color set below.
 * Same collision PR59/61 already fixed for font-family and other
 * headings' color; this file's own h2 was missed. Audited every other
 * h1-6/button/select color declaration in the plugin for the same gap
 * in this same pass. Color itself updated 2026-09-21: Chicha, not gold
 * -- the section background is now Choclo (see .bcc-story above), and
 * gold-on-gold text would be unreadable.
 */
.bcc-story h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	text-transform: uppercase;
	line-height: .88;
	font-size: clamp(3.5rem, 7vw, 7rem);
	color: var(--bcc-purple-900) !important;
	margin: 0;
}

.bcc-story__lede {
	font-size: 20px;
	max-width: 620px;
	margin: 16px 0 0;
}

.bcc-story__beats {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 22px;
	margin-top: 30px;
}

@media (width < 620px) {
	.bcc-story__beats {
		grid-template-columns: 1fr;
	}
}

.bcc-story__beats div {
	border-top: var(--bcc-border-width) solid rgb(72 57 111 / .4);
	padding-top: 12px;
}

.bcc-story__beats b {
	display: block;
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 26px;
	text-transform: uppercase;
	color: var(--bcc-purple-900);
	margin-bottom: 6px;
}

.bcc-story__beats span {
	font-size: 15px;
	line-height: 1.4;
}

/**
 * Ingredient highlights strip added 2026-09-22 (this section now covers
 * both culture and real-ingredients credibility -- see this file's own
 * docblock). Plain names, not a second row of cards -- the full 12-card
 * treatment lives on /nos-ingredients, one click away via the CTA below.
 */
.bcc-story__ingredients {
	margin-top: 30px;
	padding-top: 22px;
	border-top: var(--bcc-border-width) solid rgb(72 57 111 / .4);
}

.bcc-story__ingredients-label {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .03em;
	text-transform: uppercase;
	color: var(--bcc-purple-900); /* full strength: .75 opacity gave 4.06:1 on Choclo, WCAG AA needs 4.5:1 */
	margin: 0 0 12px;
}

.bcc-story__ingredients-list {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	list-style: none;
	margin: 0 0 16px;
	padding: 0;
}

.bcc-story__ingredients-list li {
	font-family: var(--bcc-font-display);
	font-weight: 700;
	font-size: 15px;
	text-transform: uppercase;
	letter-spacing: .01em;
	color: var(--bcc-purple-900);
	background: rgb(72 57 111 / .08);
	border: 1px solid rgb(72 57 111 / .3);
	padding: 6px 12px;
}

.bcc-story__ingredients-cta {
	/* Tap target >= 44px on phones (audit 2026-10-05, #20). */
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: .02em;
	color: var(--bcc-purple-900);
	text-decoration: underline;
}

/* bcc-ingredients */
/**
 * [bcc_ingredients] -- "Nos ingrédients" (2026-09-20, Fidel's ask to
 * make the site "nutrition and Peruvian superfood forward"). Sits on
 * the light Quinoa background, between the dark Story panel and the
 * gold BP Club band, matching the site's existing light/dark/light
 * rhythm rather than stacking two dark sections back to back.
 */
.bcc-ingredients {
	background: var(--bcc-quinoa);
	padding-block: 100px;

	--bcc-scene-accent: var(--bcc-purple-900); /* M12 -- gold default reads too light on this cream background */
}

@media (width < 860px) {
	.bcc-ingredients {
		padding-block: 64px;
	}
}

.bcc-ingredients__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
}

.bcc-ingredients__head {
	max-width: 720px;
	margin-bottom: 40px;
}

.bcc-ingredients__eyebrow {
	font-family: var(--bcc-font-mono);
	font-size: 14px;
	letter-spacing: .03em;
	color: var(--bcc-chicha);
	margin: 0 0 12px;
}

.bcc-ingredients__head h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	text-transform: uppercase;
	line-height: .88;
	font-size: var(--bcc-h2);
	color: var(--bcc-ink) !important;
	margin: 0;
}

.bcc-ingredients__lede {
	max-width: 560px;
	color: var(--bcc-muted);
	margin: 16px 0 0;
	font-size: 19px;
}

/**
 * Horizontal scroll-snap row, not a grid -- 2026-09-22 (Fidel, live:
 * "the super aliments not columns but more horizontally aligned better
 * read to the public" + "make sure the page is compacter"). This grid
 * had already been through two rounds of column-count firefighting
 * (4/3/2 columns tuned per breakpoint, see this file's own git history)
 * chasing a "too tall" complaint that a stacked grid was always going to
 * produce with 12 cards. A single scrolling row fixes both asks at once:
 * it reads left-to-right instead of in column blocks, and the section's
 * height is now just one row tall at every viewport width, full stop --
 * no more per-breakpoint column-count tuning.
 *
 * width: 100vw + margin-left: calc(50% - 50vw) breaks this row out of
 * .bcc-ingredients__wrap's own max-width so cards can scroll edge-to-edge
 * (and peek a partial next card, the usual affordance that a row
 * scrolls); padding-inline puts the first/last card back in line with
 * the wrap's own left/right edge instead of touching the viewport edge.
 */
.bcc-ingredients__grid {
	display: flex;
	gap: 14px;
	overflow-x: auto;
	scroll-snap-type: x proximity;
	-webkit-overflow-scrolling: touch;
	width: 100vw;
	margin-left: calc(50% - 50vw);
	padding: 4px calc((100vw - min(1280px, 100vw - 40px)) / 2) 14px;
}

.bcc-ingredients__card {
	flex: 0 0 clamp(200px, 70vw, 230px);
	scroll-snap-align: start;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	background: var(--bcc-paper);
	padding: 14px;
	display: flex;
	flex-direction: column;
	gap: 5px;
	text-decoration: none;
	color: inherit;
	transition: transform .15s, box-shadow .15s;
}

.bcc-ingredients__card:hover {
	box-shadow: 8px 8px 0 var(--bcc-gold-400);
	transform: translate(-4px, -4px);
}

@media (prefers-reduced-motion: reduce) {
	.bcc-ingredients__card {
		transition: none;
	}

	.bcc-ingredients__card:hover {
		transform: none;
	}
}

/**
 * Trailing "see all" card added 2026-09-22 (homepage teaser mode, see
 * includes/ingredients.php's $limit att) -- caps the homepage's
 * horizontal row instead of just stopping mid-scroll, and gives the
 * count still hidden so it reads as an invitation, not a dead end.
 */
.bcc-ingredients__card--more {
	align-items: center;
	justify-content: center;
	text-align: center;
	gap: 10px;
	background: var(--bcc-purple-900);
	color: var(--bcc-quinoa);
}

.bcc-ingredients__more-count {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 40px;
	line-height: 1;
	color: var(--bcc-gold-400);
}

/**
 * Photo slot added 2026-09-21 (Fidel: "make our ingredients more
 * powerful," AI photo per ingredient instead of a plain colour dot).
 * `.bcc-ingredients__art` keeps the item's brand-colour fill as a
 * background, so a not-yet-generated or failed-to-load image (the
 * markup's own `onerror="this.remove()"`) still shows a solid colour
 * block rather than a broken-image icon.
 */
.bcc-ingredients__art {
	display: block;
	aspect-ratio: 16 / 10;
	width: 100%;
	overflow: hidden;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	margin-bottom: 4px;
}

.bcc-ingredients__art img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.bcc-ingredients__why {
	font-family: var(--bcc-font-body);
	font-size: 14px;
	line-height: 1.4;
	color: var(--bcc-chicha);
	background: var(--bcc-cream);
	border-left: 3px solid var(--bcc-gold-400);
	padding: 6px 8px;
	margin: 4px 0 0;
}

.bcc-ingredients__eyebrow-sm {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .03em;
	text-transform: uppercase;
	color: var(--bcc-muted);
	margin: 0;
}

.bcc-ingredients__card h3 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	font-size: 21px;
	text-transform: uppercase;
	line-height: .95;
	margin: 0;
	color: var(--bcc-ink) !important;
}

.bcc-ingredients__blurb {
	font-size: 13px;
	line-height: 1.4;
	color: var(--bcc-ink);
	margin: 0;
	flex-grow: 1;
}

.bcc-ingredients__cta {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: .02em;
	color: var(--bcc-chicha);
	margin-top: 6px;
}

.bcc-ingredients__card--more .bcc-ingredients__cta {
	color: var(--bcc-gold-400);
}

/**
 * Full-page grid mode (/nos-ingredients, includes/ingredients.php's
 * bcc_ingredients_shortcode() adds .bcc-ingredients--full when $limit is
 * 0) -- 2026-09-22 (Fidel: "nos ingredients need better layout small
 * square cards"). The horizontal scroll-snap row above is right for the
 * homepage's own 4-card teaser, but wrong for this page's full 12-card
 * grid: a real multi-column grid with square photo crops reads better
 * with a full page of vertical room to use, instead of one long
 * horizontal scroller.
 */
.bcc-ingredients--full .bcc-ingredients__grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
	gap: 20px;
	width: auto;
	margin-left: 0;
	padding: 0;
	overflow-x: visible;
}

.bcc-ingredients--full .bcc-ingredients__card {
	flex: none;
}

.bcc-ingredients--full .bcc-ingredients__art {
	aspect-ratio: 1 / 1;
}

/* bcc-consent */
/**
 * Consent banner, anchored to the BOTTOM of the viewport (Fidel: it was
 * sitting on top of the header/nav on every page, "should be on the
 * footer not on top"). Was top-anchored specifically to dodge the
 * sticky mobile order bar's own inset-block-end: 0 (components.css) --
 * that collision is now handled below instead of by avoiding the
 * bottom entirely: the order bar only renders under 1024px and starts
 * translated off-screen (transform: translateY(100%)) until JS reveals
 * it, so this reserves its height via padding-bottom on mobile so the
 * two never overlap once both are visible.
 */
.bcc-consent {
	position: fixed;
	inset-block-end: 0;
	inset-inline: 0;
	z-index: 150;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 12px var(--bcc-space);
	background: var(--bcc-purple-900) !important;
	color: #fff !important;
	box-shadow: var(--bcc-shadow-card);
}

/*
 * Audit 2026-10-05: reserving the bar's height with padding left the
 * banner's opaque background (z-index 150) painted over the order bar,
 * so a phone visitor's first tap on « Commander » hit the banner. The
 * banner now sits ABOVE the bar instead; both stay tappable.
 */
@media (width < 1024px) {
	.bcc-consent {
		inset-block-end: calc(58px + env(safe-area-inset-bottom, 0px));
	}
}

.bcc-consent[hidden] {
	display: none;
}

.bcc-consent p {
	margin: 0;
	font-size: 13px;
	line-height: 1.4;
	flex: 1 1 260px;
}

.bcc-consent a {
	color: var(--bcc-gold-400);
	text-decoration: underline !important; /* not colour alone (WCAG link-in-text-block) */
	text-underline-offset: 2px;
}

.bcc-consent__actions {
	display: flex;
	gap: 8px;
	flex: 0 0 auto;
}

.bcc-consent__actions .bcc-hero__cta {
	padding: 8px 18px;
	font-size: 13px;
}

/* bcc-motion */
/**
 * Motion system — M2 (scroll reveal), M3 (card lift), M5 (checker marquee),
 * M11 (open-now pulse). Cheap only: transform + opacity, 150-450ms,
 * cubic-bezier(.2,.8,.2,1). Full stop under prefers-reduced-motion.
 *
 * No-JS fallback (critical): motion.php adds a `.js` class to <html> as
 * soon as the page starts loading. Until then — or if JS never runs —
 * [data-reveal] content stays fully visible.
 */
html:not(.js) [data-reveal],
html:not(.js) [data-reveal-stagger] > *,
html:not(.js) [data-scene] {
	opacity: 1;
	transform: none;
}

@media (prefers-reduced-motion: no-preference) {
	/* M2 — scroll reveal. Slide only, fully opaque at all times
	   (2026-09-25: the old .6 -> 1 fade left text half-transparent while
	   it settled, which Lighthouse measured as failing colour contrast --
	   and it read washed-out on slow phones). Short 12px lift, 250ms. */
	.js [data-reveal],
	.js [data-reveal-stagger] > * {
		transform: translateY(12px);
		transition: transform .25s cubic-bezier(.2,.8,.2,1);
	}

	.js [data-reveal].is-in,
	.js [data-reveal-stagger] > *.is-in {
		opacity: 1;
		transform: none;
	}

	/**
	 * M12 -- scene entrance for full-width homepage sections (2026-09-21,
	 * Fidel: scrolling felt boring, wanted each section to feel like it
	 * "changes the page" as you reach it. Deliberately NOT scroll-jacking
	 * or a hijacked swipe transition -- that's an explicit Never in this
	 * project's own motion rules (breaks native momentum scroll, iOS
	 * Safari's address-bar behaviour, keyboard nav and Lighthouse, all
	 * working against this site's #1 goal of fast direct orders). This
	 * gets the "new page" feeling a safer way: a brand-colour wipe bar
	 * sweeps across the section's top edge as it crosses into view,
	 * timed to the original design audit's own §5 spec for section-level
	 * reveals (900ms) rather than M2's lighter 450ms block fade -- native
	 * scroll is untouched throughout. Uses the same IntersectionObserver
	 * + .is-in toggle as M2 (motion.js), just a different visual result.
	 * --bcc-scene-accent is set per section (see each section's own CSS)
	 * to whichever brand colour reads best against that section's
	 * background; falls back to gold if a section doesn't set one.
	 *
	 * 2026-09-25 (audit §2.1): same rule as M2, never fully hidden. The
	 * wipe bar carries the "new scene" feeling; the section only settles in.
	 */
	.js [data-scene] {
		position: relative;
		transform: translateY(12px);
		transition: transform .4s cubic-bezier(.2,.8,.2,1);
	}

	.js [data-scene]::before {
		content: "";
		position: absolute;
		inset-block-start: 0;
		inset-inline-start: 0;
		width: 100%;
		height: 6px;
		background: var(--bcc-scene-accent, var(--bcc-gold-400));
		transform: scaleX(0);
		transform-origin: left;
		transition: transform .9s cubic-bezier(.2,.8,.2,1) .1s;
		z-index: 2;
	}

	.js [data-scene].is-in {
		opacity: 1;
		transform: none;
	}

	.js [data-scene].is-in::before {
		transform: scaleX(1);
	}

	/* M3 — card lift. Hard offset shadow + diagonal shift on hover
	   (2026-09-20, matching the reference mockup) replaces the previous
	   soft blurred lift -- flat/bordered at rest is the point now. */
	.bcc-card {
		transition: transform .2s cubic-bezier(.2,.8,.2,1), box-shadow .2s cubic-bezier(.2,.8,.2,1);
	}

	.bcc-card:hover,
	.bcc-card:focus-within {
		transform: translate(-4px, -4px);
		box-shadow: 6px 6px 0 var(--bcc-purple-900);
	}

	.bcc-card img {
		transition: transform .4s cubic-bezier(.2,.8,.2,1);
	}

	.bcc-card:hover img {
		transform: scale(1.04);
	}

	/* M5 — checker marquee. 40s per design/BRIEF.md §12's animation table
	   (was 30s before that reference existed). */
	.bcc-marquee__track {
		animation: bcc-marquee 40s linear infinite;
	}

	.bcc-marquee:hover .bcc-marquee__track {
		animation-play-state: paused;
	}

	@keyframes bcc-marquee {
		to { transform: translateX(-50%); }
	}

	/* M11 — open-now pulse */
	.bcc-status--open::before {
		animation: bcc-pulse 2s ease-out infinite;
	}

	@keyframes bcc-pulse {
		0%   { box-shadow: 0 0 0 0 rgb(20 50 50 / .6); }
		100% { box-shadow: 0 0 0 10px rgb(20 50 50 / 0); }
	}
}

/* Static states that must exist with or without motion */

/* Base card look (M3's transition/hover above only adds the lift on top
   of this) -- every .bcc-card user (menu, location, B2B format cards)
   gets the same border/radius/background instead of drifting per file.
   Solid 2px border, no radius, no resting shadow (2026-09-20, matching
   the reference mockup) -- the hard shadow only appears on hover. */
.bcc-card {
	border-radius: var(--bcc-radius-md);
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
	box-shadow: var(--bcc-shadow-card);
	background: var(--bcc-cream);
}

.bcc-marquee {
	overflow: hidden;
	white-space: nowrap;
	padding: 14px 0;
	border-top: var(--bcc-border-width) solid rgb(246 241 228 / .2);
}

.bcc-marquee__track {
	display: inline-flex;
	gap: 48px;
	width: max-content;
	padding-left: 48px;
}

.bcc-status--open::before,
.bcc-status--closed::before,
.bcc-status--soon::before {
	content: "";
	display: inline-block;
	width: 8px;
	height: 8px;
	border-radius: var(--bcc-radius-pill);
	margin-inline-end: 6px;
}

.bcc-status--open::before {
	background: var(--bcc-lime);
}

.bcc-status--closed::before {
	background: #9a9a9a;
}

.bcc-status--soon::before {
	background: var(--bcc-lucuma);
}

/* bcc-components */
/**
 * Sticky mobile CTA bar (M6), matching design/reference/index.html's
 * own `.mbar` verbatim: two flex-1 links, poster typography, gold
 * fill on the primary action. Mobile only -- desktop already has the
 * primary CTAs above the fold once the hero ships (PR 6).
 */
.bcc-order-bar {
	position: fixed;
	inset-block-end: 0;
	inset-inline: 0;
	z-index: 100;
	display: flex;
	background: var(--bcc-purple-900);
	border-top: var(--bcc-border-width) solid var(--bcc-gold-400);
	padding-bottom: env(safe-area-inset-bottom, 0);
	transform: translateY(100%);
	transition: transform .3s cubic-bezier(.2,.8,.2,1);
}

.bcc-order-bar.is-visible {
	transform: translateY(0);
}

.bcc-order-bar.is-hidden {
	transform: translateY(100%);
}

@media (prefers-reduced-motion: reduce) {
	.bcc-order-bar {
		transition: none;
	}
}

@media (width >= 1024px) {
	.bcc-order-bar {
		display: none;
	}
}

.bcc-order-bar__link {
	flex: 1;
	min-height: 58px;
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	font-size: 22px;
	text-transform: uppercase;
	text-decoration: none;
	color: var(--bcc-quinoa) !important;
}

.bcc-order-bar__link--primary {
	background: var(--bcc-gold-400) !important;
	color: var(--bcc-purple-900) !important;
}

/* tokens.css's global focus ring is gold -- invisible on this button's own gold background */
.bcc-order-bar__link--primary:focus-visible {
	outline-color: var(--bcc-purple-900);
}

/**
 * .bcc-order-bar__btn below is a *different, still-used* component --
 * the standalone pickup/delivery CTA on location pages (locations.php)
 * and the office-lunch band, not part of the sticky bar above. Kept
 * verbatim; only the sticky bar's own select/actions markup was
 * replaced by .bcc-order-bar__link above.
 *
 * Audit 2026-10-05: was 13px underlined text in a 31px box -- now a real
 * button (display face, 48px tall). text-decoration !important: the
 * theme's `.page-content a{text-decoration:underline}` outranks a class.
 */
.bcc-order-bar__btn {
	flex: 1 1 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 48px;
	text-align: center;
	padding: 10px 14px;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	border-radius: var(--bcc-radius-pill);
	background: var(--bcc-gold-400) !important;
	color: var(--bcc-ink) !important;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 17px;
	letter-spacing: .01em;
	text-transform: uppercase;
	text-decoration: none !important;
	white-space: nowrap;
}

/* tokens.css's global focus ring is gold -- invisible on this button's own gold background */

/**
 * Scoped to exclude --call below: ink outline reads fine on the gold
 * pickup/delivery fill, but --call sits on the bar's own dark Chicha
 * fill with no gold behind it -- ink-on-Chicha computes to ~1.7:1,
 * under the WCAG 2.4.11 minimum, so it falls back to the sitewide gold
 * ring instead, which has good contrast against the dark bar.
 */
.bcc-order-bar__btn:not(.bcc-order-bar__btn--call):focus-visible {
	outline-color: var(--bcc-ink);
}

.bcc-order-bar__btn--call {
	background: transparent !important;
	border: var(--bcc-border-width) solid rgb(255 255 255 / .6);
	color: #fff !important;
}

.bcc-order-bar__btn.is-disabled {
	opacity: .4;
	pointer-events: none;
}

/* "Politique de confidentialité" link under every form's consent box
   (includes/privacy.php). Inherits the form's own text colour so it reads
   on light and dark forms alike; !important for the usual Elementor kit
   link-colour collision (see tokens.css). */
.bcc-form-privacy {
	margin: 4px 0 0;
	font-family: var(--bcc-font-mono);
	font-size: var(--fs-legal);
}

.bcc-form-privacy a {
	color: inherit !important;
	text-decoration: underline;
	text-underline-offset: 2px;
}

/* Honeypot added to Elementor forms (includes/contact-form.php): off-screen, never display:none (some bots skip hidden fields). */
.bcc-hp {
	position: absolute !important;
	left: -9999px !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

.bcc-form-purpose {
	margin-top: 12px;
	font-size: .9rem;
}

/* "Valeurs estimées" note wherever calories/protein show while
   BCC_NUTRITION_FINAL is false (includes/data.php). */

/* Body face, not mono: these are full sentences (Brand Book V6 keeps mono for labels, prices, hours). */
.bcc-estimate-note {
	margin: 8px 0 0;
	font-family: var(--bcc-font-body);
	font-size: .9rem;
	color: var(--bcc-muted) !important;
}

/* Back link on location pages and the builder (audit 2026-10-05, #19).
   44px tall so it is an easy tap on a phone. */
.bcc-back {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	min-height: 44px;
	margin-bottom: 8px;
	font-family: var(--bcc-font-display);
	font-size: var(--fs-small);
	text-transform: uppercase;
	letter-spacing: .04em;
	color: var(--bcc-ink-text);
	text-decoration: none;
}

.bcc-back:hover,
.bcc-back:focus-visible {
	text-decoration: underline;
}

/* bcc-locations */
/**
 * Location card (shortcode output) + footer NAP block.
 */
.bcc-location-intro {
	max-width: 640px;
	font-size: 15px;
	line-height: 1.5;
	color: var(--bcc-ink);
	margin: 0 0 var(--bcc-space);
}

.bcc-location-card {
	padding: var(--bcc-space);
	background: var(--bcc-cream);
	border-radius: var(--bcc-radius-lg);
	box-shadow: var(--bcc-shadow-card);
	max-width: 640px;
}

/**
 * /emplacements layout (migrations/013): 2 location cards side by side,
 * plus a third, full-width Barranco Restaurant card beneath -- Fidel,
 * live: "the emplacement 2 by row" (the two [bcc_location] cards were
 * just stacked full-width, one under the other, before this).
 */
.bcc-locations-grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--bcc-space);
	align-items: start;
}

.bcc-locations-grid .bcc-location-card,
.bcc-locations-grid .bcc-location-intro {
	max-width: none;
}

/**
 * Reworked 2026-09-22 (Fidel, live: "fix the barranco restaurant
 * emplacement no black background. find an image of my resturant
 * present it nicely and welcoming") -- was a solid --bcc-ink block,
 * text only. Now a photo + text split on the same cream card background
 * as the two location cards beside it (.bcc-location-card), so the row
 * reads as one family of cards instead of one dark outlier.
 */
.bcc-restaurant-card {
	grid-column: 1 / -1;
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1.3fr);
	background: var(--bcc-cream);
	border-radius: var(--bcc-radius-lg);
	box-shadow: var(--bcc-shadow-card);
	overflow: hidden;
}

.bcc-restaurant-card__media {
	position: relative;
	min-height: 240px;
}

.bcc-restaurant-card__media img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.bcc-restaurant-card__body {
	padding: var(--bcc-space);
	display: flex;
	flex-direction: column;
	justify-content: center;
}

.bcc-restaurant-card__eyebrow {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--bcc-chicha);
	margin: 0 0 8px;
}

.bcc-restaurant-card h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	font-size: clamp(2rem, 4vw, 3rem);
	line-height: .95;
	text-transform: uppercase;
	color: var(--bcc-ink) !important;
	margin: 0 0 12px;
}

.bcc-restaurant-card__copy {
	max-width: 480px;
	color: var(--bcc-muted);
	margin: 0 0 20px;
}

@media (width < 780px) {
	.bcc-locations-grid {
		grid-template-columns: 1fr;
	}

	.bcc-restaurant-card {
		grid-template-columns: 1fr;
	}

	.bcc-restaurant-card__media {
		min-height: 200px;
	}
}

.bcc-location-card h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	font-size: var(--fs-h3);
	line-height: var(--lh-heading);
	text-transform: uppercase;
	color: var(--bcc-ink) !important;
	margin: 0 0 12px;
}

.bcc-location-card__brand {
	display: block;
	margin-bottom: 4px;
	font-family: var(--bcc-font-mono);
	font-weight: 600;
	font-size: var(--fs-data);
	letter-spacing: .08em;
	color: var(--bcc-muted);
}

/* Same face as every other card heading (audit §4: this H3 alone used a different family) */
.bcc-location-card__hours h3 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 800;
	font-size: var(--fs-h4);
	text-transform: uppercase;
	margin: 16px 0 6px;
}

.bcc-location-card__hours ul {
	list-style: none;
	padding: 0;
	margin: 0;
}

.bcc-location-card__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin-block: 16px;
}

.bcc-location-card__map {
	width: 100%;
	aspect-ratio: 16 / 9;
	border: 0;
	border-radius: var(--bcc-radius-md);
}

/**
 * Base link colour for the footer NAP block below -- placed here (lower
 * specificity than .bcc-location-card address a/p a right after it) only
 * to satisfy stylelint's no-descending-specificity rule; the two never
 * target the same element (different parent classes).
 */
.bcc-footer-nap a {
	color: inherit;
	text-decoration: none;
}

/**
 * The directions and phone links (bare <a> inside <address>/<p> in
 * locations.php's own [bcc_location] card, not the footer NAP below) had
 * no color rule of their own, so they fell through to an off-palette
 * magenta (~#cc3366), the same Elementor-collision pattern documented in
 * header.css's .bcc-announce fix -- confirmed live.
 */
.bcc-location-card address a,
.bcc-location-card p a {
	display: inline-flex;
	align-items: center;
	min-height: 44px; /* tap target (audit §7: 17px tall) */
	color: var(--bcc-chicha) !important;
	text-decoration: underline;
}

/**
 * Round 4 (2026-09-23, Fidel, live: "I FEEL THE SAME... WHERES THE
 * RESTAURANT LOCATION IN THE FOOTER TOO, I FEEL WE CAN DO A LOT BETTER
 * THIS PART") -- round 3 (below, still true) gave this block the right
 * colors but not real structure: bare stacked text with a small gold
 * label, no card treatment, landing right after the big wordmark "outro"
 * and immediately deflating it. Barranco Restaurant (includes/
 * locations.php's bcc_print_footer_nap()) was also missing entirely --
 * only the 2 comptoirs printed here. Rebuilt as 3 real bordered cards
 * (comptoirs + the restaurant), same border/panel language as every
 * other card on the site, so this reads as a proper "find us" closing
 * band instead of fine print.
 *
 * Round 3 (Fidel, live screenshot: "the footer needs love!!!!" -- still
 * true right after round 2 shipped .bcc-footer's own grain/rule/
 * signature/column-title treatment, because this block -- printed
 * separately by wp_footer at priority 30, right below it on every page --
 * was never touched: a full-bleed var(--bcc-purple-900)/#fff bar with no
 * width match to .bcc-footer__wrap and no type hierarchy, so the page hit
 * a jarring color jump (chicha purple, not the footer's ink) the instant
 * the real footer ended. Restyled to read as that same footer's own
 * closing address row instead of a second, disconnected block: same ink
 * background + 1280px wrap as .bcc-footer__wrap, same gold-label/quinoa-
 * body/muted-mono hierarchy as its column titles and links, and only a
 * thin top rule (same language as .bcc-footer__sign) marking where it
 * starts.
 */
.bcc-footer-nap {
	background: var(--bcc-ink);
	color: var(--bcc-quinoa);
	padding: 40px 0 48px;
	border-top: 1px solid rgb(246 241 228 / .12);
	font-size: 13px;
}

.bcc-footer-nap__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
}

.bcc-footer-nap__eyebrow {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--bcc-gold-400);
	opacity: .9;
	margin: 0 0 16px;
}

.bcc-footer-nap__grid {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 20px;
}

@media (width < 860px) {
	.bcc-footer-nap__grid {
		grid-template-columns: 1fr;
	}
}

.bcc-footer-nap__card {
	display: flex;
	flex-direction: column;
	border: 1px solid rgb(246 241 228 / .2);
	padding: 20px;
	line-height: 1.6;
}

.bcc-footer-nap__card--restaurant {
	border-color: var(--bcc-gold-400);
}

.bcc-footer-nap__name {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--bcc-gold-400);
	margin: 0 0 8px;
}

.bcc-footer-nap__addr {
	font-style: normal;
	color: rgb(246 241 228 / .85);
	margin: 0 0 6px;
}

.bcc-footer-nap__tel {
	display: flex;
	align-items: center;

	/* Tap target >= 44px on phones (audit 2026-10-05, #20). */
	min-height: 44px;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	margin-bottom: 0;
}

.bcc-footer-nap__hours {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	color: rgb(246 241 228 / .55);
	margin: auto 0 0;
	padding-top: 6px;
}

.bcc-footer-nap__link {
	display: inline-flex;
	align-items: center;

	/* Tap target >= 44px on phones (audit 2026-10-05, #20). */
	min-height: 44px;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	text-transform: uppercase;
	letter-spacing: .04em;
	color: var(--bcc-gold-400);
	margin-top: auto;
}

.bcc-footer-nap a:hover {
	text-decoration: underline;
}

.bcc-footer-nap__social {
	display: flex;
	flex-wrap: wrap;
	gap: 4px 24px;
	margin-top: 24px;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .02em;
	color: rgb(246 241 228 / .85);
}

/* Icon + @handle (audit §2.3), 44px tap target. */
.bcc-footer-nap__social .bcc-social {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	min-height: 44px;
}

.bcc-footer-nap__social .bcc-social svg {
	flex: none;
}

/* bcc-faq */
/**
 * [bcc_faq] + the FAQ block appended to [bcc_location] output. Restyled to
 * match the reference mockup's plain <details>/<summary> treatment
 * (design/reference/index.html's generic details/summary rules) instead
 * of the bordered-card look this used to have -- no page used this before
 * PR 12 shipped it, so there was nothing to preserve.
 */

/*
 * Interactive pass 2026-09-25 (Fidel: "build the FAQ more interactive,
 * more animations, better UX"). Numbered rows, hover lift, an icon that
 * morphs + into x, answers with a real action button, topic chips and
 * live search (assets/js/faq.js). Plain <details> still works without JS.
 */
.bcc-faq {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

.bcc-faq__sr {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

/* Tools: search + topic chips */
.bcc-faq__tools {
	display: grid;
	gap: 16px;
}

/* Shown from the first paint when JS is on (the inline .js class in
   <head>), hidden only without it. It used to wait for faq.js to remove
   `hidden`, which pushed every question down: CLS 0.137 on phones
   (audit 2026-10-05, #22). */
html:not(.js) .bcc-faq__tools {
	display: none;
}

.bcc-faq__search {
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 0 18px;
	min-height: 60px;
	background: var(--bcc-paper);
	border: var(--bcc-border-width) solid var(--bcc-ink);
	color: var(--bcc-muted);
	transition: box-shadow .2s cubic-bezier(.2,.8,.2,1), transform .2s cubic-bezier(.2,.8,.2,1);
}

.bcc-faq__search:focus-within {
	transform: translate(-3px, -3px);
	box-shadow: 6px 6px 0 var(--bcc-choclo);
	color: var(--bcc-ink);
}

.bcc-faq__search input {
	flex: 1;
	min-width: 0;

	/* Tap target >= 44px on phones (audit 2026-10-05, #20). */
	min-height: 44px;
	border: 0 !important;
	outline: 0;
	background: transparent !important;
	box-shadow: none !important;
	padding: 0 !important;
	font-family: var(--bcc-font-body);
	font-size: 18px;
	color: var(--bcc-ink);
}

.bcc-faq__chips {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
}

.bcc-faq__chip {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	min-height: 44px; /* was 42 (audit 2026-10-05, #20) */
	padding: 0 16px;
	border: var(--bcc-border-width) solid var(--bcc-ink) !important;
	border-radius: 0 !important;
	background: transparent !important;
	color: var(--bcc-ink) !important;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 17px;
	text-transform: uppercase;
	cursor: pointer;
	transition: background-color .2s, color .2s, transform .2s cubic-bezier(.2,.8,.2,1);
}

.bcc-faq__chip:hover {
	transform: translateY(-2px);
}

.bcc-faq__chip.is-active {
	background: var(--bcc-purple-900) !important;
	border-color: var(--bcc-purple-900) !important;
	color: var(--bcc-choclo) !important;
}

.bcc-faq__count {
	font-family: var(--bcc-font-mono);
	font-weight: 400;
	font-size: 13px;
	opacity: .85; /* .7 read 4.4:1 on the active chip (audit 2026-10-05, #21) */
}

/* Rows */
.bcc-faq__list {
	border-bottom: var(--bcc-border-width) solid var(--bcc-ink);
}

.bcc-faq__item {
	border-top: var(--bcc-border-width) solid var(--bcc-ink);
	transition: background-color .25s;
}

.bcc-faq__item[hidden] {
	display: none;
}

.bcc-faq__item summary {
	cursor: pointer;
	list-style: none;
	display: grid;
	grid-template-columns: auto 1fr auto;
	align-items: center;
	gap: 20px;
	padding: 22px 16px;
	transition: transform .25s cubic-bezier(.2,.8,.2,1);
}

.bcc-faq__item summary::-webkit-details-marker {
	display: none;
}

.bcc-faq__item summary:focus-visible {
	outline: 3px solid var(--bcc-choclo);
	outline-offset: -3px;
}

.bcc-faq__item:hover {
	background: var(--bcc-paper);
}

.bcc-faq__item:hover summary {
	transform: translateX(6px);
}

.bcc-faq__item.is-open {
	background: var(--bcc-paper);
}

.bcc-faq__n {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .08em;
	color: var(--bcc-chicha); /* was Lúcuma: 1.7:1 on cream, unreadable (audit 2026-10-05, #21) */
	font-weight: 600;
}

.bcc-faq__q {
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: clamp(22px, 2.4vw, 30px);
	line-height: 1.05;
	text-transform: uppercase;
	color: var(--bcc-ink);
}

/* + morphs into x, filled circle when open */
.bcc-faq__icon {
	position: relative;
	flex: none;
	width: 40px;
	height: 40px;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	transition: background-color .25s, border-color .25s;
}

.bcc-faq__icon::before,
.bcc-faq__icon::after {
	content: "";
	position: absolute;
	top: 50%;
	left: 50%;
	width: 16px;
	height: 2.5px;
	margin: -1.25px 0 0 -8px;
	background: var(--bcc-ink);
	transition: background-color .25s, transform .35s cubic-bezier(.2,.8,.2,1);
}

.bcc-faq__icon::after {
	transform: rotate(90deg);
}

.bcc-faq__item:hover .bcc-faq__icon {
	background: var(--bcc-choclo);
	border-color: var(--bcc-choclo);
}

.bcc-faq__item.is-open .bcc-faq__icon,
.bcc-faq__item[open]:not(.is-open) .bcc-faq__icon {
	background: var(--bcc-purple-900);
	border-color: var(--bcc-purple-900);
}

.bcc-faq__item.is-open .bcc-faq__icon::before {
	background: var(--bcc-choclo);
	transform: rotate(45deg);
}

.bcc-faq__item.is-open .bcc-faq__icon::after {
	background: var(--bcc-choclo);
	transform: rotate(135deg);
}

/* Answer */
.bcc-faq__a {
	overflow: hidden;
}

.bcc-faq__a-inner {
	padding: 0 16px 26px calc(16px + 20px + 2.2ch);
	opacity: 0;
	transform: translateY(-6px);
	transition: opacity .3s ease .08s, transform .35s cubic-bezier(.2,.8,.2,1) .08s;
}

.bcc-faq__item.is-open .bcc-faq__a-inner,
.bcc-faq__item[open]:not(.is-open) .bcc-faq__a-inner {
	opacity: 1;
	transform: none;
}

.bcc-faq__a p {
	margin: 0;
	max-width: 760px;
	font-size: 18px;
	line-height: 1.55;
	color: var(--bcc-muted);
}

.bcc-faq__cta {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin-top: 16px;
	padding: 10px 18px;
	background: var(--bcc-purple-900);
	color: var(--bcc-choclo) !important;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 18px;
	text-transform: uppercase;
	text-decoration: none !important;
	box-shadow: 4px 4px 0 var(--bcc-choclo);
	transition: transform .2s cubic-bezier(.2,.8,.2,1), box-shadow .2s cubic-bezier(.2,.8,.2,1);
}

.bcc-faq__cta:hover,
.bcc-faq__cta:focus-visible {
	transform: translate(-2px, -2px);
	box-shadow: 6px 6px 0 var(--bcc-choclo);
}

.bcc-faq__empty {
	margin: 0;
	padding: 28px;
	border: var(--bcc-border-width) dashed var(--bcc-ink);
	font-size: 17px;
	color: var(--bcc-muted);
	text-align: center;
}

.bcc-faq__empty[hidden] {
	display: none;
}

@media (width < 640px) {
	.bcc-faq__item summary {
		gap: 12px;
		padding: 18px 8px;
	}

	.bcc-faq__icon {
		width: 34px;
		height: 34px;
	}

	.bcc-faq__a-inner {
		padding: 0 8px 22px;
	}

	.bcc-faq__a p {
		font-size: 16px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.bcc-faq__item summary,
	.bcc-faq__icon,
	.bcc-faq__a-inner,
	.bcc-faq__chip,
	.bcc-faq__search,
	.bcc-faq__cta {
		transition: none;
	}

	.bcc-faq__item:hover summary {
		transform: none;
	}
}

/**
 * ===== [bcc_faq]'s own homepage section wrapper =====
 * The reference sits #faq directly under the (not yet built, tracked
 * separately) "Nos comptoirs" section with no top padding of its own --
 * once that section exists this can drop back to matching it exactly.
 * Until then this gets the same top/bottom rhythm as every other
 * homepage section.
 */
.bcc-faq-section {
	padding-block: 100px;

	--bcc-scene-accent: var(--bcc-purple-900); /* M12 -- gold default reads too light on the page's cream background */
}

@media (width < 860px) {
	.bcc-faq-section {
		padding-block: 64px;
	}
}

.bcc-faq-section__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
}

.bcc-faq-section__head {
	margin-bottom: 36px;
}

.bcc-faq-section__eyebrow {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--bcc-purple-700);
	margin: 0 0 12px;
}

.bcc-faq-section__lede {
	font-size: 19px;
	color: var(--bcc-muted);
	margin: 16px 0 0;
}

.bcc-faq-section__head h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	text-transform: uppercase;
	line-height: .88;
	font-size: var(--bcc-h2);
	color: var(--bcc-ink) !important;
	margin: 0;
}

/* Closing card: nothing left unanswered without a next step */
.bcc-faq-section__more {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
	flex-wrap: wrap;
	margin-top: 48px;
	padding: clamp(24px, 4vw, 40px);
	background: var(--bcc-purple-900);
	box-shadow: 10px 10px 0 var(--bcc-choclo);
}

.bcc-faq-section__more-title {
	margin: 0;
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: clamp(32px, 4vw, 52px);
	line-height: .9;
	text-transform: uppercase;
	color: var(--bcc-quinoa);
}

.bcc-faq-section__more-text {
	margin: 10px 0 0;
	max-width: 560px;
	font-size: 17px;
	color: rgb(246 241 228 / .85);
}

.bcc-faq-section__btn {
	display: inline-flex;
	align-items: center;
	min-height: 56px;
	padding: 0 28px;
	background: var(--bcc-choclo);
	color: var(--bcc-ink) !important;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 22px;
	text-transform: uppercase;
	text-decoration: none !important;
	box-shadow: 5px 5px 0 var(--bcc-lucuma);
	transition: transform .2s cubic-bezier(.2,.8,.2,1), box-shadow .2s cubic-bezier(.2,.8,.2,1);
}

.bcc-faq-section__btn:hover,
.bcc-faq-section__btn:focus-visible {
	transform: translate(-3px, -3px);
	box-shadow: 8px 8px 0 var(--bcc-lucuma);
}

@media (width < 640px) {
	.bcc-faq-section__btn {
		width: 100%;
		justify-content: center;
	}
}

/* bcc-menu */
/**
 * La carte (mockup port step 3, design/BRIEF.md §6): square tabs, a
 * family header (title + selling line + upsell strip), filter chips,
 * a responsive card grid with a 2x2 featured card, and a separate
 * 4-column Boissons layout. Replaces the sticky-chips-to-anchors layout
 * from PR 8/9. Rendered client-side by assets/js/menu.js.
 */
.bcc-menu {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
	padding-block: 100px;

	--bcc-scene-accent: var(--bcc-purple-900); /* M12 -- gold default reads too light on the page's cream background */
}

@media (width < 860px) {
	.bcc-menu {
		padding-block: 64px;
	}
}

/**
 * [bcc_menu_preview] (includes/menu.php) -- the homepage's 3-card
 * teaser, added 2026-09-22 as part of trimming the homepage down from
 * the full [bcc_menu] grid (Fidel: "too much scrolling... redirect to
 * the nav menu items pages"). Its own small header/wrap only -- the
 * cards themselves reuse .bcc-menu__grid/.bcc-dish verbatim below, on
 * purpose, so they're pixel-identical to the real /menu page's cards.
 */
.bcc-menu-preview {
	padding-block: 80px;
}

@media (width < 860px) {
	.bcc-menu-preview {
		padding-block: 56px;
	}
}

.bcc-menu-preview__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
}

.bcc-menu-preview__head {
	max-width: 640px;
	margin-bottom: 32px;
}

.bcc-menu-preview__eyebrow {
	font-family: var(--bcc-font-mono);
	font-size: 14px;
	letter-spacing: .03em;
	color: var(--bcc-chicha);
	margin: 0 0 12px;
}

.bcc-menu-preview__head h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	text-transform: uppercase;
	line-height: .88;
	font-size: var(--bcc-h2);
	color: var(--bcc-ink) !important;
	margin: 0;
}

.bcc-menu-preview__lede {
	max-width: 520px;
	color: var(--bcc-muted);
	margin: 16px 0 0;
	font-size: 19px;
}

.bcc-menu-preview__cta {
	margin-top: 28px;
}

/**
 * 4 highlight cards (one per family) need their own column count --
 * .bcc-menu__grid's real 3-column default (shared with the full /menu
 * page above) would strand the 4th card alone on its own row here.
 * Scoped to this section only so the real menu grid is untouched.
 */
@media (width >= 1020px) {
	.bcc-menu-preview .bcc-menu__grid {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

/**
 * CTA card at the bottom of the real /menu page, linking out to the bowl
 * builder + coach (arma-tu-bowl page) -- added 2026-09-25 when that page
 * lost its own primary-nav entry (Fidel: nav is getting long). This is
 * now the only on-site link to it, so a real card, not a small text link.
 */
.bcc-menu__promo {
	margin-top: 60px;
	padding: 32px;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 20px;
	background: var(--bcc-quinoa);
	border: var(--bcc-border-width) solid var(--bcc-ink);
}

.bcc-menu__promo-text h3 {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	text-transform: uppercase;
	font-size: 28px;
	line-height: 1;
	margin: 0 0 8px;
	color: var(--bcc-ink);
}

.bcc-menu__promo-text p {
	margin: 0;
	max-width: 520px;
	color: var(--bcc-muted);
}

.bcc-menu__promo-cta {
	flex: 0 0 auto;
}

@media (width < 640px) {
	.bcc-menu__promo {
		flex-direction: column;
		align-items: flex-start;
	}
}

.bcc-menu__head {
	display: grid;
	grid-template-columns: 1.1fr .9fr;
	gap: 32px;
	align-items: end;
	margin-bottom: 40px;
}

@media (width < 760px) {
	.bcc-menu__head {
		grid-template-columns: 1fr;
		gap: 12px;
		margin-bottom: 20px;
	}
}

.bcc-menu__notes {
	margin-top: 24px;
	max-width: 640px;
}

/* Plain dish list shown only when JavaScript is off (QA 2026-10-05). */
.bcc-menu__noscript {
	max-width: 760px;
	color: var(--bcc-ink);
}

.bcc-menu__noscript h3 {
	margin: 28px 0 8px;
	font-family: var(--bcc-font-display);
	font-weight: 900;
	text-transform: uppercase;
}

.bcc-menu__noscript li {
	padding: 8px 0;
	border-bottom: 1px solid rgb(27 23 38 / 0.15);
	line-height: 1.4;
}

.bcc-menu__head h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	text-transform: uppercase;
	line-height: .88;
	margin: 0;
	font-size: var(--bcc-h2);
	color: var(--bcc-ink) !important;
}

.bcc-menu__head p {
	max-width: 520px;
	color: var(--bcc-muted);
	margin: 0;
	font-size: 19px;
}

@media (width < 760px) {
	.bcc-menu__head p {
		font-size: 16px;
	}
}

.bcc-menu__tabs {
	display: flex;
	flex-wrap: wrap;
	gap: 0;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	width: max-content;
	max-width: 100%;
	background: var(--bcc-cream);
}

/**
 * color: !important -- this rule never declared a color at all, so it
 * fell back to inheritance; AUDIT_DESIGN_FUNNEL_Comptoir.md flagged
 * (and live measurement confirmed) the un-selected tabs computing a
 * pale Choclo-ish yellow on this bar's near-white background --
 * 1.27:1 contrast, functionally invisible. Same "explicit color always
 * wins over inheritance" fix as the rest of this plugin, just for a
 * rule that had never declared one at all rather than one missing
 * !important.
 */
.bcc-menu__tabs button {
	background: none;
	border: 0;
	border-right: var(--bcc-border-width) solid var(--bcc-ink);
	padding: 12px 18px;
	font-family: var(--bcc-font-display) !important;
	font-weight: 800;
	font-size: 22px;
	text-transform: uppercase;
	color: var(--bcc-ink) !important;
	cursor: pointer;
	position: relative;
	transition: background .2s, color .2s;
}

.bcc-menu__tabs button:last-child {
	border-right: 0;
}

.bcc-menu__tabs button:not([aria-selected="true"]):hover {
	color: var(--bcc-purple-900) !important;
	background: rgb(72 57 111 / .08);
}

.bcc-menu__tabs button[aria-selected="true"] {
	background: var(--bcc-purple-900);
	color: var(--bcc-gold-400) !important;
}

.bcc-menu__now {
	position: absolute;
	top: -10px;
	right: 6px;
	background: var(--bcc-lucuma);
	color: var(--bcc-ink);
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	padding: 1px 6px;
}

/**
 * Phones: one swipeable row, never a wrapped grid (UI/UX audit
 * 2026-10-05, P0-1). Wrapping the labels ("PLATS / SIGNATURE") was the
 * previous fix and still read as broken; every label now stays on one
 * line and the row scrolls sideways, with a right-edge fade as the
 * "there is more" hint. menu.js keeps the selected tab in view.
 */
@media (width < 760px) {
	.bcc-menu__tabs {
		flex-wrap: nowrap;
		width: auto;
		max-width: none;
		margin-inline: -20px;
		overflow-x: auto;
		scroll-snap-type: x proximity;
		scrollbar-width: none;
		border-inline: 0;
		mask-image: linear-gradient(to right, #000 calc(100% - 36px), transparent);
	}

	.bcc-menu__tabs::-webkit-scrollbar {
		display: none;
	}

	.bcc-menu__tabs button {
		flex: 0 0 auto;
		min-height: 48px;
		font-size: 18px;
		padding: 10px 16px;
		white-space: nowrap !important;
		word-break: normal;
		scroll-snap-align: start;
	}

	.bcc-menu__tabs button:first-child {
		margin-left: 20px;
		border-left: var(--bcc-border-width) solid var(--bcc-ink);
	}

	.bcc-menu__tabs button:last-child {
		margin-right: 36px;
		border-right: var(--bcc-border-width) solid var(--bcc-ink);
	}
}

.bcc-menu__famhead-inner {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: flex-end;
	gap: 16px;
	margin: 34px 0 18px;
	padding-bottom: 14px;
	border-bottom: var(--bcc-border-width) solid var(--bcc-ink);
}

.bcc-menu__famhead-inner h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	font-size: clamp(2.5rem, 5vw, 4rem);
	text-transform: uppercase;
	line-height: .9;
	margin: 0;
	color: var(--bcc-ink) !important;
}

.bcc-menu__famhead-inner p {
	margin: 0;
	color: var(--bcc-muted);
	max-width: 520px;
}

.bcc-menu__upsell {
	display: inline-flex;
	gap: 10px;
	align-items: center;
	background: var(--bcc-gold-400);
	color: var(--bcc-purple-900);
	padding: 8px 14px;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	margin-top: 10px;
}

.bcc-menu__filters {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0 0 18px;
}

/* Phones: one compact swipeable row, same pattern as the tabs (audit P1-4) */
@media (width < 760px) {
	.bcc-menu__filters {
		flex-wrap: nowrap;
		overflow-x: auto;
		scrollbar-width: none;
		margin-inline: -20px;
		padding: 4px 20px;
	}

	.bcc-menu__filters::-webkit-scrollbar {
		display: none;
	}

	.bcc-menu__filters button.bcc-chip {
		flex: 0 0 auto;
		white-space: nowrap;
	}
}

/* box-shadow: none !important -- Elementor's default button shadow leaked onto chips (audit §5: "heavy offset shadows") */
button.bcc-chip {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	background: transparent !important;
	color: var(--bcc-ink) !important;
	box-shadow: none !important;
	padding: 6px 14px;
	font-family: var(--bcc-font-display);
	font-weight: 700;
	font-size: 15px;
	letter-spacing: .01em;
	text-transform: uppercase;
	cursor: pointer;
	transition: background .2s, color .2s;
}

button.bcc-chip--reset {
	border-style: dashed;
}

button.bcc-chip[hidden] {
	display: none;
}

button.bcc-chip:not([aria-pressed="true"]):hover {
	border-color: var(--bcc-purple-900);
	background: rgb(72 57 111 / .08) !important;
}

button.bcc-chip[aria-pressed="true"] {
	background: var(--bcc-gold-400) !important;
	color: var(--bcc-purple-900) !important;
	border-color: var(--bcc-gold-400);
}

/* tokens.css's global focus ring is gold -- invisible on this chip's own gold background once selected */
button.bcc-chip[aria-pressed="true"]:focus-visible {
	outline-color: var(--bcc-purple-900);
}

/* ===== Dish grid ===== */

.bcc-menu__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 20px;
}

@media (width < 1020px) {
	.bcc-menu__grid {
		grid-template-columns: 1fr 1fr;
	}
}

@media (width < 620px) {
	.bcc-menu__grid {
		grid-template-columns: 1fr;
	}
}

/*
 * Reserve space while assets/js/menu.js builds the tabs and cards
 * (2026-09-25, Lighthouse CLS 0.28 on /menu): the containers start empty,
 * so the footer used to sit in the first screen and then jump down.
 * Holding the empty grid open keeps the footer below the fold until the
 * real content lands; :empty stops matching the moment it does.
 */
#bcc-menu-tabs:empty {
	min-height: 56px;
}

#bcc-menu-famhead:empty {
	min-height: 120px;
}

#bcc-menu-grid:empty {
	min-height: 150vh;
}

.bcc-menu__empty {
	padding: 40px;
	border: var(--bcc-border-width) dashed var(--bcc-rule);
	text-align: center;
	color: var(--bcc-muted);
	grid-column: 1 / -1;
}

.bcc-dish {
	background: var(--bcc-cream);
	border: var(--bcc-border-width) solid var(--bcc-ink);
	display: flex;
	flex-direction: column;
	transform: translateY(22px);
	animation: bcc-dish-in .6s cubic-bezier(.2,.8,.2,1) forwards;
	transition: box-shadow .25s, transform .25s;
}

.bcc-dish:hover {
	box-shadow: 8px 8px 0 var(--bcc-purple-900);
	transform: translate(-3px, -3px);
}

/* Slide only, never hidden (2026-09-26, Lighthouse CI: cards started at
   opacity 0, so the first dish photo -- /menu's LCP element -- only
   counted once its .6 s fade finished; /menu LCP 2.63 s median). */
@keyframes bcc-dish-in {
	to {
		transform: none;
	}
}

.bcc-dish--feat {
	grid-column: span 2;
	grid-row: span 2;
}

@media (width < 620px) {
	.bcc-dish--feat {
		grid-column: auto;
		grid-row: auto;
	}
}

.bcc-dish__vis {
	aspect-ratio: 1 / .78;
	display: flex;
	align-items: center;
	justify-content: center;
	border-bottom: var(--bcc-border-width) solid var(--bcc-ink);
	position: relative;
	overflow: hidden;
}

.bcc-dish--feat .bcc-dish__vis {
	aspect-ratio: auto;
	flex: 1;
	min-height: 420px;
}

@media (width < 620px) {
	.bcc-dish--feat .bcc-dish__vis {
		aspect-ratio: 1 / .78;
		min-height: 0;
		flex: none;
	}

	.bcc-dish--feat .bcc-dish__art {
		width: 78%;
	}
}

.bcc-dish__art {
	width: 78%;
	max-width: 320px;
	transition: transform .8s cubic-bezier(.2,.8,.2,1);
}

.bcc-dish--feat .bcc-dish__art {
	width: 62%;
	max-width: 460px;
}

.bcc-dish__art svg {
	width: 100%;
	height: auto;
}

.bcc-dish:hover .bcc-dish__art {
	transform: rotate(18deg) scale(1.04);
}

.bcc-dish__vis img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform .8s cubic-bezier(.2,.8,.2,1);
}

.bcc-dish:hover .bcc-dish__vis img {
	transform: scale(1.05);
}

.bcc-dish__badge {
	z-index: 2;
	position: absolute;
	left: 12px;
	top: 12px;
	background: var(--bcc-ink);
	color: var(--bcc-gold-400);
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	padding: 5px 9px;
}

.bcc-dish__body {
	padding: 20px 20px 22px;
	display: flex;
	flex-direction: column;
	gap: 10px;
	flex: 1;
}

.bcc-dish--feat .bcc-dish__body {
	padding: 26px 28px 28px;
	flex: none;
}

.bcc-dish__body h3 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	font-size: 34px;
	text-transform: uppercase;
	line-height: .95;
	margin: 0;
	color: var(--bcc-ink) !important;
}

/**
 * [bcc_menu_preview]-only (includes/menu.php). Round 1: a small family
 * label above the dish name (.bcc-dish__category, since removed). Fidel,
 * live: "the home page LA CARTE needs to show the categories not the
 * dish" -- the card's own h3 is the family name now (shares
 * .bcc-dish__body h3's styling above, no override needed), and the real
 * dish drops to this small "À essayer / Try" strip instead of the
 * headline. Never printed by the real /menu page's own JS-rendered cards
 * (those still lead with the dish -- the visible tab above already says
 * the family), so scoped to .bcc-menu-preview only.
 */
.bcc-menu-preview .bcc-dish__example {
	display: flex;
	align-items: baseline;
	flex-wrap: wrap;
	gap: 4px 10px;
	padding-top: 8px;
	margin-top: 2px;
	border-top: 1px solid var(--bcc-rule);
}

.bcc-menu-preview .bcc-dish__example-label {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: var(--bcc-muted);
}

.bcc-menu-preview .bcc-dish__example-name {
	font-family: var(--bcc-font-display);
	font-weight: 700;
	font-size: 15px;
	color: var(--bcc-ink);
	margin-right: auto;
}

.bcc-dish--feat .bcc-dish__body h3 {
	font-size: clamp(2.75rem, 5vw, 4.5rem);
}

.bcc-dish__row {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	gap: 12px;
}

.bcc-dish__price {
	font-family: var(--bcc-font-mono);
	font-size: 18px;
	white-space: nowrap;
}

.bcc-dish__body p {
	margin: 0;
	color: var(--bcc-muted);
	font-size: 16px;
}

.bcc-dish__nutri {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}

.bcc-dish__nutri span {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	padding: 5px 8px;
	background: var(--bcc-gold-400);
	color: var(--bcc-purple-900);
}

.bcc-dish__nutri span.v {
	background: var(--bcc-pacifico);
	color: var(--bcc-gold-400);
}

.bcc-dish__acts {
	display: flex;
	gap: 8px;
	margin-top: auto;
	padding-top: 6px;
}

.bcc-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	position: relative;
	min-height: 52px;
	padding: 0 26px;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 22px;
	letter-spacing: .05em;
	text-transform: uppercase;
	text-decoration: none !important; /* theme's `.page-content a` underline outranked it (audit §5) */
	cursor: pointer;
	border: var(--bcc-border-width) solid transparent;
	transition: transform .2s cubic-bezier(.2,.8,.2,1);
}

/**
 * design/reference/index.html's own .dish .acts .btn downsizes the base
 * .btn specifically inside a dish card's action row (flex:1, smaller
 * min-height/padding/font-size) -- every other use of .bcc-btn (matin's
 * CTA, coach's/the builder's result buttons) keeps the full base size
 * above. Scoped the same way here.
 */
.bcc-dish__acts .bcc-btn {
	flex: 1;
	min-height: 46px;
	padding: 0 14px;
	font-size: 19px;
}

.bcc-btn:hover {
	transform: translateY(-2px);
}

.bcc-btn--dark {
	background: var(--bcc-purple-900) !important;
	color: var(--bcc-gold-400) !important;
}

.bcc-btn--dark:hover {
	background: var(--bcc-chicha-dk) !important;
}

/* ===== Boissons: 4-column layout ===== */

.bcc-menu__grid--drinks {
	grid-template-columns: repeat(4, 1fr);
}

@media (width < 1020px) {
	.bcc-menu__grid--drinks {
		grid-template-columns: 1fr 1fr;
	}
}

@media (width < 560px) {
	.bcc-menu__grid--drinks {
		grid-template-columns: 1fr;
	}
}

.bcc-dcol {
	background: var(--bcc-cream);
	border: var(--bcc-border-width) solid var(--bcc-ink);
	display: flex;
	flex-direction: column;
	transform: translateY(22px);
	animation: bcc-dish-in .6s cubic-bezier(.2,.8,.2,1) forwards;
}

.bcc-dcol__vis {
	height: 210px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-bottom: var(--bcc-border-width) solid var(--bcc-ink);
}

.bcc-dcol__vis svg {
	height: 190px;
	width: auto;
	transition: transform .6s;
}

.bcc-dcol:hover .bcc-dcol__vis svg {
	transform: translateY(-6px) rotate(-4deg);
}

.bcc-dcol__body {
	padding: 18px 18px 20px;
}

.bcc-dcol__title {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 30px;
	line-height: .95;
	text-transform: uppercase;
	margin: 0 0 10px;
}

.bcc-dcol__body ul {
	list-style: none;
	margin: 0;
	padding: 0;
}

.bcc-dcol__body li {
	padding: 10px 0;
	border-bottom: 1px solid var(--bcc-rule);
	font-size: 16px;
}

.bcc-dcol__row {
	display: flex;
	justify-content: space-between;
	gap: 10px;
}

.bcc-dcol__row span:last-child {
	font-family: var(--bcc-font-mono);
	font-size: 14px;
	white-space: nowrap;
}

.bcc-dcol__desc {
	margin: 4px 0 0;
	font-size: 13px;
	line-height: 1.35;
	color: var(--bcc-muted);
}

.bcc-dcol__tags {
	display: flex;
	gap: 6px;
	margin: 4px 0 0;
}

.bcc-dcol__badge {
	background: var(--bcc-ink);
	color: var(--bcc-gold-400);
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	padding: 2px 7px;
}

.bcc-dcol__badge--vegan {
	background: transparent;
	color: var(--bcc-muted);
	border: 1px solid var(--bcc-rule);
}

.bcc-dcol__cta {
	margin-top: 16px;
	width: 100%;
	text-align: center;
}

@media (prefers-reduced-motion: reduce) {
	.bcc-dish,
	.bcc-dcol {
		opacity: 1;
		transform: none;
		animation: none;
	}

	.bcc-dish:hover {
		box-shadow: none;
		transform: none;
	}
}

/* Allergen row on each dish (only when BCC_ALLERGENS_FINAL). */
.bcc-dish__allergens {
	margin: 6px 0 0;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	color: var(--bcc-muted);
}

/* bcc-nutrition */
/**
 * Arma tu Bowl builder (mockup port step 4, design/BRIEF.md §7): step
 * chips + a sticky totals panel with a live illustrated bowl. The
 * "M'envoyer ce bol" modal reuses .bcc-popup (popup.css) and
 * .bcc-club__field/checkbox/hp (club.css) verbatim -- same signup
 * chrome, just a different form, so no chrome CSS is duplicated here.
 *
 * background: Chicha, not Pacífico -- 2026-09-21 palette rebalance
 * (Fidel: unify around yellow/purple/beige as the mains, keep Pacífico
 * and Lúcuma to small accents rather than full-section fills). Cream
 * text still reads correctly here -- Quinoa/Chicha is an approved
 * pairing per docs/BRAND.md.
 */

/**
 * overflow: hidden removed 2026-09-21 -- ported verbatim from the
 * reference mockup's .builder, but this section's own sticky totals
 * panel (.bcc-builder__panel below, position: sticky) needs an ancestor
 * chain with no overflow other than visible or it can't stick at all
 * (confirmed: this exact conflict was silently breaking it). The
 * reference mockup carries the same overflow: hidden, but nothing in
 * our port actually needs it -- grepped for any absolutely-positioned
 * decorative element that would bleed past the section's edges (the
 * kind of thing this property usually clips) and found none.
 */
.bcc-builder {
	background: var(--bcc-purple-900);
	color: var(--bcc-cream);
	padding-block: 100px;
	position: relative;
}

@media (width < 860px) {
	.bcc-builder {
		padding-block: 64px;
	}
}

.bcc-builder__head {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
	display: grid;
	grid-template-columns: 1.1fr .9fr;
	gap: 32px;
	align-items: end;
	margin-bottom: 40px;
}

@media (width < 760px) {
	.bcc-builder__head {
		grid-template-columns: 1fr;
	}
}

.bcc-builder__head h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	text-transform: uppercase;
	line-height: .88;
	margin: 0;
	font-size: var(--bcc-h2);
	color: var(--bcc-cream) !important;
}

.bcc-builder__head p {
	max-width: 520px;
	color: #E8E1F3;
	margin: 0;
	font-size: 19px;
}

.bcc-builder__notice {
	width: min(1280px, 100% - 40px);
	margin: 0 auto calc(var(--bcc-space) * 1.5);
	background: var(--bcc-lucuma);
	color: var(--bcc-ink);
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	padding: 10px 14px;
	border: var(--bcc-border-width) solid var(--bcc-ink);
}

.bcc-builder__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
	display: grid;
	grid-template-columns: 1.2fr .8fr;
	gap: 36px;
	align-items: start;
}

@media (width < 1020px) {
	.bcc-builder__wrap {
		grid-template-columns: 1fr;
	}
}

.bcc-builder__steps {
	display: flex;
	flex-direction: column;
}

.bcc-step {
	border-top: var(--bcc-border-width) solid rgb(246 241 228 / .28);
	padding: 22px 0;
}

.bcc-step h3 {
	display: flex;
	align-items: baseline;
	gap: 14px;
	margin: 0 0 14px;
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	font-size: 32px;
	text-transform: uppercase;
	color: var(--bcc-quinoa) !important;
}

.bcc-step h3 small {
	font-family: var(--bcc-font-mono) !important;
	font-weight: 400;
	font-size: 13px;
	color: var(--bcc-gold-400);
	text-transform: none;
}

.bcc-opts {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}

@media (width < 620px) {
	.bcc-opts {
		display: grid;
		grid-template-columns: 1fr 1fr;
	}
}

/**
 * box-shadow: none !important -- live screenshot showed every ingredient
 * chip with a dark maroon hard shadow (Elementor kit's own default
 * button shadow, #401C10, never overridden here) instead of no shadow
 * or the brand purple used elsewhere -- same collision pattern as the
 * border-radius/background fights already forced above, just never
 * caught for this property since it doesn't fail a contrast check.
 *
 * padding/gap tightened 2026-09-22 (Fidel: "ingredient in build your own
 * can be better and compacter") -- was 10px/14px padding with a 17px
 * name, making each chip noticeably taller than it needed to be for two
 * short lines of text.
 */
button.bcc-opt {
	border: var(--bcc-border-width) solid rgb(246 241 228 / .45);
	border-radius: 0 !important;
	background: transparent !important;
	color: var(--bcc-quinoa) !important;
	box-shadow: none !important;
	padding: 8px 10px;
	cursor: pointer;
	text-align: left;
	display: flex;
	flex-direction: column;
	gap: 1px;
	min-width: 140px;
	transition: background .18s, color .18s, border-color .18s, transform .15s;
}

@media (width < 620px) {
	button.bcc-opt {
		min-width: 0;
	}
}

button.bcc-opt:hover {
	border-color: var(--bcc-gold-400);
}

button.bcc-opt:active {
	transform: scale(.97);
}

/* Fidel, 2026-09-26: 7-topping cap on "Les légumes" (assets/js/nutrition.js
   step.max) -- every unselected option disables once reached, instead of
   just silently ignoring the click. */
button.bcc-opt:disabled,
button.bcc-opt[aria-disabled="true"] {
	opacity: .35;
	cursor: not-allowed;
}

/* Tap on a capped option: a short shake + the live message under the steps (audit P1-3) */
button.bcc-opt.is-shake {
	animation: bcc-opt-shake .32s ease;
}

@keyframes bcc-opt-shake {
	25% { transform: translateX(-4px); }
	50% { transform: translateX(4px); }
	75% { transform: translateX(-2px); }
}

.bcc-builder__cap {
	margin: 0 0 10px;
	font-size: 16px;
	font-weight: 700;
	color: var(--bcc-gold-400);
}

.bcc-builder__cap:empty {
	display: none;
}

/* "4 / 7" never splits across lines; it is short enough not to widen the column */
.bcc-step__count {
	white-space: nowrap;
}

.bcc-step__live.is-full {
	background: var(--bcc-gold-400);
	color: var(--bcc-purple-900);
}

button.bcc-opt:disabled:hover,
button.bcc-opt[aria-disabled="true"]:hover {
	border-color: rgb(246 241 228 / .45);
}

/**
 * !important: staging showed longer veg names ("Betteraves marinées",
 * "Chou rouge mariné") spilling past the card's right edge instead of
 * wrapping onto a second line -- live-measured white-space:nowrap
 * winning on <b>/<i> from outside this stylesheet (nothing here sets
 * it), same Elementor-collision pattern as the button/heading font
 * fights already forced with !important elsewhere in this file.
 */
.bcc-opt b {
	font-weight: 700;
	font-size: 15px;
	white-space: normal !important;
}

.bcc-opt i {
	font-style: normal;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	white-space: normal !important;
	opacity: .85;
}

button.bcc-opt[aria-pressed="true"] {
	background: var(--bcc-gold-400) !important;
	color: var(--bcc-purple-900) !important;
	border-color: var(--bcc-gold-400);
}

/* tokens.css's global focus ring is gold -- invisible on this chip's own gold background once selected */
button.bcc-opt[aria-pressed="true"]:focus-visible {
	outline-color: var(--bcc-purple-900);
}

.bcc-opt__dot {
	width: 14px;
	height: 14px;
	border-radius: 50% !important;
	display: inline-block;
	margin-right: 6px;
	vertical-align: -2px;
	border: 1.5px solid rgb(0 0 0 / .25);
}

/* ===== Sticky totals panel ===== */

.bcc-builder__panel {
	position: sticky;
	top: 104px;
	background: var(--bcc-quinoa);
	color: var(--bcc-ink);
	padding: 24px;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	box-shadow: 10px 10px 0 var(--bcc-gold-400);
}

.bcc-builder__art {
	width: 100%;
	max-width: 300px;
	margin: 0 auto 8px;
}

.bcc-builder__art svg {
	width: 100%;
	height: auto;
}

@media (prefers-reduced-motion: no-preference) {
	.bcc-builder__art .bcc-builder__fresh {
		animation: bcc-builder-drop .5s cubic-bezier(.3,1.4,.5,1);
	}
}

@keyframes bcc-builder-drop {
	from {
		opacity: 0;
		transform: translateY(-14px);
	}
}

.bcc-builder__totals {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	border-top: var(--bcc-border-width) solid var(--bcc-ink);
	border-bottom: var(--bcc-border-width) solid var(--bcc-ink);
	margin: 12px 0;
}

.bcc-builder__totals div {
	padding: 12px 6px;
	border-right: var(--bcc-border-width) solid var(--bcc-ink);
	text-align: center;
}

.bcc-builder__totals div:last-child {
	border-right: 0;
}

.bcc-builder__totals b {
	display: block;
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: clamp(22px, 8vw, 40px);
	line-height: 1;
	color: var(--bcc-purple-900);
}

.bcc-builder__totals span {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	color: var(--bcc-muted);
}

/* « Valeurs estimées » on the totals, and the incomplete-total notice
   (Fidel, 2026-10-04): a number is never shown as exact or complete
   when it isn't. */
.bcc-builder__est {
	display: inline-block;
	margin: 12px 0 -6px;
	padding: 2px 8px;
	background: var(--bcc-lucuma);
	color: var(--bcc-ink);
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	text-transform: uppercase;
	letter-spacing: .04em;
}

.bcc-builder__incomplete {
	margin: -4px 0 10px;
	padding: 8px 10px;
	border-left: 3px solid var(--bcc-purple-900);
	background: #F6EFE1;
	color: var(--bcc-ink);
	font-family: var(--bcc-font-body);
	font-size: 14px;
	line-height: 1.4;
}

.bcc-builder__bar {
	height: 8px;
	background: #E3DBC8;
	margin: 6px 0 2px;
}

.bcc-builder__bar i {
	display: block;
	height: 100%;
	background: var(--bcc-purple-900);
	width: 0;
	transition: width .5s ease;
}

.bcc-builder__bar-label {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	color: var(--bcc-muted);
	margin: 0 0 10px;
}

.bcc-builder__price {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	margin: 4px 0 10px;
}

.bcc-builder__price .m {
	font-family: var(--bcc-font-mono);
	font-size: 14px;
	letter-spacing: .03em;
}

.bcc-builder__price b {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 44px;
	color: var(--bcc-purple-900);
}

.bcc-builder__summary {
	font-size: 15px;
	color: var(--bcc-muted);
	margin: 0 0 16px;
}

.bcc-builder__acts {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.bcc-btn--ghost-dark {
	background: transparent !important;
	border-color: var(--bcc-purple-900);
	color: var(--bcc-purple-900) !important;
}

.bcc-builder__pairing {
	margin: 16px 0 0;
	border: var(--bcc-border-width) dashed var(--bcc-ink);
	padding: 10px 12px;
	font-size: 14px;
}

.bcc-builder__pairing a {
	font-weight: 700;
	color: var(--bcc-purple-900);
}

.bcc-builder__disclaimer {
	font-size: 13px;
	color: var(--bcc-muted);
	margin: 12px 0 0;
}

/* ===== Mobile mini-total bar (design/BRIEF.md §4.17) ===== */

.bcc-mini {
	position: fixed;
	left: 12px;
	right: 12px;
	bottom: calc(66px + env(safe-area-inset-bottom, 0px));
	z-index: 99;
	background: var(--bcc-quinoa);
	color: var(--bcc-ink);
	border: var(--bcc-border-width) solid var(--bcc-ink);
	padding: 10px 14px;
	display: none;
	justify-content: space-between;
	align-items: center;
	font-family: var(--bcc-font-mono);
	font-size: 14px;
}

.bcc-mini b {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 24px;
	color: var(--bcc-purple-900);
}

@media (width < 1020px) {
	.bcc-mini.is-visible {
		display: flex;
	}
}

@media (prefers-reduced-motion: reduce) {
	.bcc-builder__art .bcc-builder__fresh {
		animation: none;
	}
}

/* Numbered steps + live salsa count (audit §3.3). */
.bcc-step__num {
	display: inline-grid;
	place-items: center;
	width: 1.6em;
	height: 1.6em;
	margin-inline-end: 10px;
	background: var(--bcc-chicha);
	color: var(--bcc-choclo);
	font-family: var(--bcc-font-mono);
	font-size: .7em;
	vertical-align: .15em;
}

/* color: quinoa -- the muted ink colour was ~1.3:1 on the builder's purple (audit 2026-10-05) */
.bcc-step__live {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	font-style: normal;
	font-weight: 400;
	text-transform: none;
	letter-spacing: 0;
	color: var(--bcc-quinoa);
}

/* Recipe shown (and copied) after "Commander" (audit §3.3). */
.bcc-builder__recipe {
	margin: 10px 0 0;
	padding: 10px 12px;
	border: var(--bcc-border-width) dashed var(--bcc-chicha);
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	line-height: 1.45;
	color: var(--bcc-ink);
}

/* bcc-coach */
/**
 * "Ton bol idéal" coach (mockup port step 5, design/BRIEF.md §8): a
 * short profile form + a result panel matching the builder's sticky
 * panel language (hard shadow, bordered, poster style).
 */
.bcc-coach {
	background: var(--bcc-quinoa);
	color: var(--bcc-ink);
	padding-block: 100px;

	--bcc-scene-accent: var(--bcc-purple-900); /* M12 -- gold default reads too light on this cream background */
}

@media (width < 860px) {
	.bcc-coach {
		padding-block: 64px;
	}
}

.bcc-coach__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
}

.bcc-coach__head {
	display: grid;
	grid-template-columns: 1.1fr .9fr;
	gap: 32px;
	align-items: end;
	margin-bottom: 40px;
}

@media (width < 860px) {
	.bcc-coach__head {
		grid-template-columns: 1fr;
	}
}

.bcc-coach__title {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: var(--bcc-h2);
	text-transform: uppercase;
	line-height: .9;
	margin: 0;
}

.bcc-coach__head p {
	max-width: 520px;
	color: var(--bcc-muted);
	margin: 0;
	font-size: 19px;
}

.bcc-coach__grid {
	display: grid;
	grid-template-columns: .9fr 1.1fr;
	gap: 36px;
}

@media (width < 1020px) {
	.bcc-coach__grid {
		grid-template-columns: 1fr;
	}
}

.bcc-coach__form {
	display: grid;
	gap: 18px;
}

.bcc-fgroup {
	display: grid;
	gap: 8px;
	min-width: 0;
}

/* min-width: 0 -- a flex/grid child never shrinks below its content by default (audit P0-2: 471px-wide document at 392px) */
.bcc-seg > * {
	min-width: 0;
}

.bcc-fgroup > span {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	color: var(--bcc-muted);
}

.bcc-seg {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

/* box-shadow: none !important -- same Elementor-default-shadow leak fixed for .bcc-opt in nutrition.css */
.bcc-seg button {
	border: var(--bcc-border-width) solid var(--bcc-ink);
	background: transparent !important;
	color: var(--bcc-ink) !important;
	box-shadow: none !important;
	padding: 10px 14px;
	cursor: pointer;
	font-weight: 700;
	transition: background .18s, color .18s;
}

.bcc-seg button:not([aria-pressed="true"]):hover {
	border-color: var(--bcc-purple-900);
	background: rgb(72 57 111 / .08) !important;
}

.bcc-seg button[aria-pressed="true"] {
	background: var(--bcc-purple-900) !important;
	color: var(--bcc-gold-400) !important;
	border-color: var(--bcc-purple-900);
}

.bcc-row3 {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 12px;
}

.bcc-coach__form input[type="number"] {
	width: 100%;
	min-height: 50px;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	background: var(--bcc-cream);
	color: var(--bcc-ink);
	padding: 10px 12px;
	font-size: 17px;
}

.bcc-coach__result {
	background: var(--bcc-purple-900);
	color: var(--bcc-quinoa);
	padding: 30px;
	display: grid;
	grid-template-columns: 1fr;
	gap: 16px;
	align-content: start;
}

.bcc-coach__result.is-pop {
	animation: bcc-coach-pop .5s ease;
}

@keyframes bcc-coach-pop {
	from {
		opacity: 0;
		transform: translateY(16px);
	}
}

@media (prefers-reduced-motion: reduce) {
	.bcc-coach__result.is-pop {
		animation: none;
	}
}

.bcc-coach__result-art {
	width: 120px;
	height: 120px;
	border-radius: 50%;
	overflow: hidden;
	border: var(--bcc-border-width) solid var(--bcc-gold-400);
	box-shadow: 6px 6px 0 rgb(238 219 118 / .35);
}

.bcc-coach__result-art img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.bcc-coach__eyebrow {
	font-family: var(--bcc-font-mono);
	font-size: 14px;
	color: var(--bcc-gold-400);
	margin: 0;
}

.bcc-coach__result h3 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	font-size: 46px;
	text-transform: uppercase;
	line-height: .9;
	margin: 0;
	color: var(--bcc-gold-400) !important;
}

.bcc-coach__result p {
	margin: 0;
}

.bcc-coach__targets {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	border: var(--bcc-border-width) solid rgb(246 241 228 / .35);
}

.bcc-coach__targets div {
	padding: 12px;
	border-right: var(--bcc-border-width) solid rgb(246 241 228 / .35);
	text-align: center;
}

.bcc-coach__targets div:last-child {
	border-right: 0;
}

.bcc-coach__targets b {
	display: block;
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: clamp(21px, 7.5vw, 38px);
	color: var(--bcc-gold-400);
	line-height: 1;
}

.bcc-coach__targets span {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
}

.bcc-coach__rtop {
	display: grid;
	grid-template-columns: 180px 1fr;
	gap: 20px;
	align-items: center;
}

@media (width < 560px) {
	.bcc-coach__rtop {
		grid-template-columns: 1fr;
	}

	.bcc-coach__art {
		width: 160px;
	}
}

.bcc-coach__rtop svg {
	width: 100%;
	height: auto;
}

.bcc-coach__rtop h4 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	font-size: 26px;
	text-transform: uppercase;
	margin: 0 0 8px;
	color: var(--bcc-gold-400) !important;
}

.bcc-coach__rtop ul {
	margin: 0;
	padding-left: 18px;
}

.bcc-coach__fine {
	font-size: 13px;
	color: #CFC6E0;
	margin: 0;
}

.bcc-coach__acts {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
}

.bcc-coach__privacy {
	margin: 0;
	font-family: var(--bcc-font-body);
	font-size: 14px;
	color: var(--bcc-muted);
}

/* bcc-b2b */
/**
 * ===== [bcc_traiteur_band] -- homepage "Traiteur pour le bureau" teaser =====
 * Ported verbatim from the reference mockup's #traiteur section (.cat
 * .cwrap two-column band), not the .bcc-b2b__* page layout above.
 */
.bcc-traiteur {
	padding-block: 100px;

	--bcc-scene-accent: var(--bcc-purple-900); /* M12 -- gold default reads too light on the page's cream background */
}

@media (width < 860px) {
	.bcc-traiteur {
		padding-block: 64px;
	}

	/**
	 * .bcc-traiteur__row (Name/Company, Email/Phone, Date/People pairs,
	 * defined further below) had no mobile override at all despite every
	 * sibling component in this file having one -- P2 audit finding: at
	 * 390px each input lands at ~170px, visibly more cramped than every
	 * other field on the page, tightest on the date + headcount pair.
	 */
	.bcc-traiteur__row {
		grid-template-columns: 1fr;
	}
}

.bcc-traiteur__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 40px;
}

@media (width < 900px) {
	.bcc-traiteur__wrap {
		grid-template-columns: 1fr;
	}
}

.bcc-traiteur h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	text-transform: uppercase;
	line-height: .88;
	font-size: clamp(3.25rem, 6.6vw, 6.25rem);
	color: var(--bcc-ink) !important;
	margin: 0;
}

.bcc-traiteur__lede {
	font-size: 20px;
	color: var(--bcc-muted);
	max-width: 520px;
	margin: 16px 0 0;
}

.bcc-traiteur__bullets {
	display: grid;
	gap: 8px;
	margin-top: 22px;
	font-family: var(--bcc-font-mono);
	font-size: 14px;
	letter-spacing: .03em;
}

.bcc-traiteur__form {
	display: grid;
	gap: 18px;
}

.bcc-traiteur__row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 12px;
}

.bcc-traiteur__fgroup {
	display: grid;
	gap: 8px;
}

.bcc-traiteur__fgroup > span {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	color: var(--bcc-muted);
}

.bcc-traiteur__fgroup input {
	width: 100%;
	min-height: 50px;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	background: var(--bcc-cream);
	color: var(--bcc-ink);
	padding: 10px 12px;
	font-size: 17px;
}

.bcc-traiteur__consent {
	display: flex;
	gap: 10px;
	align-items: flex-start;
	font-size: 14px;
	color: var(--bcc-muted);
}

.bcc-traiteur__consent input {
	width: 20px;
	height: 20px;
	margin-top: 2px;
	flex: none;
}

.bcc-traiteur__status {
	font-size: 14px;
	font-weight: 600;
	margin: 0;
	min-height: 1.2em;
}

.bcc-traiteur__status.is-error {
	color: #A03A2E;
}

.bcc-traiteur__status.is-ok {
	color: var(--bcc-purple-700);
}

/**
 * [bcc_office_lunch] background photo (2026-09-21, Fidel: use a
 * background image with AI in this banner). `.bcc-traiteur__wrap` sits
 * on top of the photo + a dark scrim, same full-bleed-photo-plus-scrim
 * pattern the hero uses -- only this section's own selectors below
 * switch text colour to light-on-dark; [bcc_traiteur_band] (unused
 * elsewhere right now, see office-lunch.php's docblock) keeps the
 * original light-background `.bcc-traiteur` rules above untouched.
 */
.bcc-office-lunch {
	position: relative;
	overflow: hidden;
	padding-block: 100px;
}

@media (width < 860px) {
	.bcc-office-lunch {
		padding-block: 64px;
	}
}

.bcc-office-lunch__bg {
	position: absolute;
	inset: 0;
	z-index: 0;
}

.bcc-office-lunch__bg::after {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(100deg, rgb(27 23 38 / .92) 0%, rgb(27 23 38 / .82) 45%, rgb(27 23 38 / .55) 100%);
}

.bcc-office-lunch__bg img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.bcc-office-lunch .bcc-traiteur__wrap {
	position: relative;
	z-index: 1;
}

.bcc-office-lunch h2 {
	color: var(--bcc-gold-400) !important;
}

.bcc-office-lunch .bcc-traiteur__lede,
.bcc-office-lunch .bcc-traiteur__bullets,
.bcc-office-lunch .bcc-traiteur__fgroup > span,
.bcc-office-lunch .bcc-traiteur__consent {
	color: var(--bcc-quinoa);
}

.bcc-office-lunch .bcc-traiteur__status.is-ok {
	color: var(--bcc-gold-400);
}

/**
 * B2B corporate lunch page ([bcc_b2b]) -- sales-first layout, reworked
 * 2026-09-24 (Fidel: "better to the eyes from the selling point ...
 * corporate look ... it needs to sell by its own"). Sections, in the
 * buyer's decision order: photo hero + quote CTA, proof strip, format
 * cards (3 photo + 2 wide feature panels), how-it-works, then the quote
 * form beside a dark "what you get" pitch panel. Poster language kept
 * from the rest of the site: flat corners, 2px Chicha borders, hard
 * offset shadows. Headings/links need !important -- the Elementor kit's
 * global typography otherwise wins (same as every other section file).
 */
.bcc-b2b {
	width: min(1200px, 100% - 32px);
	margin: 0 auto;
	padding-block: calc(var(--bcc-space) * 1.5) calc(var(--bcc-space) * 2.5);
	color: var(--bcc-ink);
}

.bcc-b2b h1,
.bcc-b2b h2,
.bcc-b2b h3 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900 !important;
	text-transform: uppercase;
	letter-spacing: 0;
	line-height: .92;
	color: var(--bcc-ink) !important;
	margin: 0;
}

.bcc-b2b__eyebrow {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--bcc-choclo);
	margin: 0 0 14px;
}

.bcc-b2b__eyebrow--dark {
	color: var(--bcc-purple-700);
}

/* Buttons (scoped so this page doesn't depend on menu.css's .bcc-btn) */
.bcc-b2b__btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 54px;
	padding: 0 26px;
	border: var(--bcc-border-width) solid transparent;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 21px;
	text-transform: uppercase;
	text-decoration: none !important;
	cursor: pointer;
	transition: transform .2s cubic-bezier(.2,.8,.2,1), box-shadow .2s cubic-bezier(.2,.8,.2,1), background-color .2s;
}

.bcc-b2b__btn--gold {
	background: var(--bcc-choclo) !important;
	color: var(--bcc-ink) !important;
	border-color: var(--bcc-choclo);
	box-shadow: 5px 5px 0 var(--bcc-lucuma);
}

.bcc-b2b__btn--gold:hover,
.bcc-b2b__btn--gold:focus-visible {
	transform: translate(-3px, -3px);
	box-shadow: 8px 8px 0 var(--bcc-lucuma);
}

.bcc-b2b__btn--ghost {
	background: transparent !important;
	color: var(--bcc-quinoa) !important;
	border-color: rgb(246 241 228 / .55);
	font-size: 18px;
}

.bcc-b2b__btn--ghost:hover,
.bcc-b2b__btn--ghost:focus-visible {
	border-color: var(--bcc-quinoa);
	background: rgb(246 241 228 / .08) !important;
}

.bcc-b2b__btn--dark {
	background: var(--bcc-purple-900) !important;
	color: var(--bcc-choclo) !important;
	box-shadow: 5px 5px 0 var(--bcc-choclo);
}

.bcc-b2b__btn--dark:hover,
.bcc-b2b__btn--dark:focus-visible {
	background: var(--bcc-chicha-dk) !important;
	transform: translate(-3px, -3px);
	box-shadow: 8px 8px 0 var(--bcc-choclo);
}

.bcc-b2b__btn:disabled {
	opacity: .6;
	cursor: default;
	transform: none;
}

/* ===== Hero: pitch on Chicha + individual bowls on a light panel =====
 * Poulet Rouge-style (Fidel, 2026-09-25): clean single-portion bowls,
 * no whole chicken / family-platter photo. */
.bcc-b2b__hero {
	display: grid;
	grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
	background: var(--bcc-purple-900);
}

.bcc-b2b__hero-copy {
	align-self: center;
	padding: clamp(32px, 5vw, 64px);
}

.bcc-b2b__hero .bcc-b2b__title {
	font-size: clamp(48px, 5.4vw, 84px);
	line-height: .9;
	color: var(--bcc-quinoa) !important;
}

.bcc-b2b__lede {
	font-size: clamp(17px, 1.5vw, 20px);
	line-height: 1.5;
	color: rgb(246 241 228 / .88);
	margin: 18px 0 28px;
	max-width: 44ch;
}

.bcc-b2b__ctas {
	display: flex;
	flex-wrap: wrap;
	gap: 14px;
}

.bcc-b2b__hero-vis {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 0;
	background: #F5F0E6;
	border-left: var(--bcc-border-width) solid var(--bcc-purple-900);
}

.bcc-b2b__hero-vis img {
	width: 100%;
	height: auto;
	aspect-ratio: 1;
	object-fit: cover;
}

@media (width < 860px) {
	.bcc-b2b__hero {
		grid-template-columns: 1fr;
	}

	.bcc-b2b__hero-copy {
		padding: 40px 22px 32px;
	}

	.bcc-b2b__hero-vis {
		grid-template-columns: repeat(4, 1fr);
		border-left: 0;
		border-top: var(--bcc-border-width) solid var(--bcc-purple-900);
	}

	.bcc-b2b__btn {
		width: 100%;
	}
}

/* ===== Proof strip: sits flush under the hero, one bordered band ===== */
.bcc-b2b__proof {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	background: var(--bcc-paper);
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
	border-top: 0;
}

.bcc-b2b__proof-item {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 2px 14px;
	padding: 22px 24px;
	margin: 0;
}

.bcc-b2b__proof-item + .bcc-b2b__proof-item {
	border-left: var(--bcc-border-width) solid var(--bcc-purple-900);
}

.bcc-b2b__proof-n {
	grid-row: span 2;
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: 34px;
	line-height: 1;
	color: var(--bcc-chicha); /* was Lúcuma: 1.7:1 on cream, unreadable (audit 2026-10-05, #21) */
}

.bcc-b2b__proof strong {
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 21px;
	line-height: 1.05;
	text-transform: uppercase;
}

.bcc-b2b__proof-desc {
	font-size: 15px;
	color: var(--bcc-muted);
}

@media (width < 860px) {
	.bcc-b2b__proof {
		grid-template-columns: 1fr;
	}

	.bcc-b2b__proof-item + .bcc-b2b__proof-item {
		border-left: 0;
		border-top: var(--bcc-border-width) solid var(--bcc-purple-900);
	}
}

/* ===== The lunch box: one product, shown in detail ===== */
.bcc-b2b__box {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	gap: clamp(28px, 5vw, 72px);
	align-items: center;
	margin-top: clamp(56px, 8vw, 96px);
}

@media (width < 860px) {
	.bcc-b2b__box {
		grid-template-columns: 1fr;
	}
}

.bcc-b2b__box-vis {
	position: relative;
	aspect-ratio: 1;
	background: #F5F0E6;
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
	box-shadow: 10px 10px 0 var(--bcc-lucuma);
}

.bcc-b2b__box-vis img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* Name-label sticker: shows the "labelled with each name" promise */
.bcc-b2b__label {
	position: absolute;
	right: -14px;
	bottom: 28px;
	display: grid;
	gap: 2px;
	padding: 12px 16px;
	background: var(--bcc-paper);
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	color: var(--bcc-muted);
	transform: rotate(-3deg);
	box-shadow: 4px 4px 0 var(--bcc-purple-900);
}

.bcc-b2b__label-name {
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 20px;
	text-transform: uppercase;
	color: var(--bcc-ink);
}

@media (width < 520px) {
	.bcc-b2b__label {
		right: 10px;
		bottom: 14px;
	}
}

.bcc-b2b__box-copy h2,
.bcc-b2b__section-head h2,
.bcc-b2b__how h2 {
	font-size: clamp(2.6rem, 5vw, 4.4rem);
}

.bcc-b2b__parts {
	list-style: none;
	margin: 28px 0 0;
	padding: 0;
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 0;
	border-top: var(--bcc-border-width) solid var(--bcc-purple-900);
}

.bcc-b2b__part {
	display: grid;
	gap: 4px;
	margin: 0;
	padding: 20px 20px 20px 0;
	border-bottom: 1px solid var(--bcc-rule);
}

.bcc-b2b__part-n {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .1em;
	color: var(--bcc-chicha); /* was Lúcuma: 1.7:1 on cream, unreadable (audit 2026-10-05, #21) */
	font-weight: 600;
}

.bcc-b2b__part strong {
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 24px;
	line-height: 1;
	text-transform: uppercase;
}

.bcc-b2b__part-desc {
	font-size: 15px;
	color: var(--bcc-muted);
}

@media (width < 420px) {
	.bcc-b2b__parts {
		grid-template-columns: 1fr;
	}
}

/* Dish examples strip */
.bcc-b2b__dishes {
	margin-top: 48px;
}

.bcc-b2b__dishes-title {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--bcc-purple-700);
	margin: 0 0 16px;
}

.bcc-b2b__dish-row {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 20px;
}

@media (width < 640px) {
	.bcc-b2b__dish-row {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

.bcc-b2b__dish {
	margin: 0;
	display: grid;
	gap: 10px;
	justify-items: center;
	text-align: center;
}

.bcc-b2b__dish img {
	width: 100%;
	height: auto;
	aspect-ratio: 1;
	object-fit: cover;
	border-radius: 50%;
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
	background: #F5F0E6;
}

.bcc-b2b__dish-name {
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 18px;
	line-height: 1;
	text-transform: uppercase;
}

/* ===== Three ways to order ===== */
.bcc-b2b__section-head {
	margin: clamp(56px, 8vw, 96px) 0 28px;
}

.bcc-b2b__ways {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
}

@media (width < 900px) {
	.bcc-b2b__ways {
		grid-template-columns: 1fr;
	}
}

.bcc-b2b__feature {
	display: flex;
	flex-direction: column;
	padding: 0 28px 28px;
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
	overflow: hidden;
}

.bcc-b2b__feature-vis {
	display: grid;
	place-items: center;
	height: 180px;
	margin: 0 -28px 24px;
	border-bottom: var(--bcc-border-width) solid rgb(246 241 228 / .18);
}

.bcc-b2b__feature--once {
	background: var(--bcc-paper);
}

.bcc-b2b__feature--once .bcc-b2b__feature-vis {
	background: var(--bcc-choclo);
	border-bottom-color: var(--bcc-purple-900);
}

.bcc-b2b__feature--sub {
	background: var(--bcc-purple-900);
}

.bcc-b2b__feature--corp {
	background: var(--bcc-pacifico);
	border-color: var(--bcc-pacifico);
}

.bcc-b2b__tag {
	display: inline-block;
	align-self: flex-start;
	padding: 6px 10px;
	margin-bottom: 14px;
	background: var(--bcc-purple-900);
	color: var(--bcc-choclo);
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .06em;
	text-transform: uppercase;
}

.bcc-b2b__feature--sub .bcc-b2b__tag,
.bcc-b2b__feature--corp .bcc-b2b__tag {
	background: var(--bcc-choclo);
	color: var(--bcc-ink);
}

.bcc-b2b__feature h3 {
	font-size: clamp(1.9rem, 2.6vw, 2.3rem);
	margin-bottom: 10px;
}

.bcc-b2b__feature p {
	font-size: 16px;
	line-height: 1.5;
	margin: 0 0 20px;
}

.bcc-b2b__feature--sub h3,
.bcc-b2b__feature--corp h3 {
	color: var(--bcc-quinoa) !important;
}

.bcc-b2b__feature--sub p,
.bcc-b2b__feature--corp p {
	color: rgb(246 241 228 / .85);
}

.bcc-b2b__format-foot {
	margin-top: auto;
	padding-top: 16px;
	border-top: 1px solid var(--bcc-rule);
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	flex-wrap: wrap;
}

.bcc-b2b__price {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--bcc-muted);
}

.bcc-b2b__link {
	/* Tap target >= 44px on phones (audit 2026-10-05, #20). */
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 19px;
	text-transform: uppercase;
	color: var(--bcc-purple-700) !important;
	text-decoration: none !important;
	border-bottom: 2px solid var(--bcc-choclo);
}

.bcc-b2b__link:hover,
.bcc-b2b__link:focus-visible {
	border-bottom-color: var(--bcc-purple-700);
}

.bcc-b2b__arrow {
	display: inline-block;
	transition: transform .2s;
}

.bcc-b2b__link:hover .bcc-b2b__arrow {
	transform: translateX(4px);
}

.bcc-b2b__feature--sub .bcc-b2b__format-foot,
.bcc-b2b__feature--corp .bcc-b2b__format-foot {
	border-top-color: rgb(246 241 228 / .2);
}

.bcc-b2b__feature--sub .bcc-b2b__price,
.bcc-b2b__feature--corp .bcc-b2b__price {
	color: rgb(246 241 228 / .7);
}

.bcc-b2b__feature--sub .bcc-b2b__link,
.bcc-b2b__feature--corp .bcc-b2b__link {
	color: var(--bcc-choclo) !important;
}

.bcc-b2b__feature--sub .bcc-b2b__link:hover,
.bcc-b2b__feature--corp .bcc-b2b__link:hover {
	border-bottom-color: var(--bcc-quinoa);
}

.bcc-b2b__single {
	width: 140px;
	height: 140px;
	object-fit: cover;
	border-radius: 50%;
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
}

.bcc-b2b__week {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	gap: 6px;
}

.bcc-b2b__day {
	margin: 0;
	width: 52px;
	padding: 10px 0;
	text-align: center;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	text-transform: uppercase;
	color: rgb(246 241 228 / .75); /* .55 read 3.9:1 (audit 2026-10-05, #21) */
	border: 1px solid rgb(246 241 228 / .25);
}

.bcc-b2b__day.is-on {
	background: var(--bcc-choclo);
	border-color: var(--bcc-choclo);
	color: var(--bcc-ink);
	font-weight: 600;
}

.bcc-b2b__stack {
	position: relative;
	width: 230px;
	height: 130px;
}

.bcc-b2b__stack img {
	position: absolute;
	top: 0;
	width: 120px;
	height: 120px;
	object-fit: cover;
	border-radius: 50%;
	border: 3px solid var(--bcc-pacifico);
	box-shadow: 0 0 0 2px var(--bcc-choclo);
}

.bcc-b2b__stack img:nth-child(1) {
	left: 0;
}

.bcc-b2b__stack img:nth-child(2) {
	left: 55px;
	top: 10px;
}

.bcc-b2b__stack img:nth-child(3) {
	left: 110px;
}

@media (width < 400px) {
	.bcc-b2b__day {
		width: 44px;
	}
}

/* ===== How it works: one horizontal timeline, not 3 boxes ===== */
.bcc-b2b__how {
	margin-top: clamp(56px, 8vw, 96px);
}

.bcc-b2b__steps {
	list-style: none;
	margin: 28px 0 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 32px;
	counter-reset: none;
}

.bcc-b2b__step {
	margin: 0;
	padding-top: 22px;
	border-top: 4px solid var(--bcc-purple-900);
}

.bcc-b2b__step:nth-child(2) {
	border-top-color: var(--bcc-lucuma);
}

.bcc-b2b__step:nth-child(3) {
	border-top-color: var(--bcc-choclo);
}

.bcc-b2b__step-n {
	display: block;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .1em;
	color: var(--bcc-muted);
	margin-bottom: 10px;
}

.bcc-b2b__steps h3 {
	font-size: clamp(1.6rem, 2.2vw, 2rem);
	margin-bottom: 8px;
}

.bcc-b2b__steps p {
	font-size: 16px;
	color: var(--bcc-muted);
	margin: 0;
}

@media (width < 720px) {
	.bcc-b2b__steps {
		grid-template-columns: 1fr;
		gap: 24px;
	}
}

/* ===== Quote: dark pitch panel + form, one bordered unit ===== */
.bcc-b2b__quote {
	display: grid;
	grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
	margin-top: clamp(56px, 8vw, 96px);
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
	box-shadow: 10px 10px 0 var(--bcc-choclo);
	scroll-margin-top: 100px;
}

@media (width < 900px) {
	.bcc-b2b__quote {
		grid-template-columns: 1fr;
		box-shadow: 6px 6px 0 var(--bcc-choclo);
	}
}

.bcc-b2b__pitch {
	display: flex;
	flex-direction: column;
	gap: 0;
	background: var(--bcc-purple-900);
	color: var(--bcc-quinoa);
	padding: clamp(28px, 4vw, 48px);
}

.bcc-b2b__pitch h2 {
	font-size: clamp(2.6rem, 4.4vw, 4rem);
	color: var(--bcc-quinoa) !important;
}

.bcc-b2b__pitch > p {
	font-size: 17px;
	color: rgb(246 241 228 / .85);
	margin: 16px 0 24px;
}

.bcc-b2b__checks {
	list-style: none;
	margin: 0 0 32px;
	padding: 0;
	display: grid;
	gap: 14px;
}

.bcc-b2b__check {
	position: relative;
	margin: 0;
	padding-left: 34px;
	font-size: 16px;
	line-height: 1.4;
}

.bcc-b2b__check::before {
	content: "";
	position: absolute;
	left: 0;
	top: 1px;
	width: 20px;
	height: 20px;
	background: var(--bcc-choclo);
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M0 0h20v20H0z' fill='none'/%3E%3Cpath d='M4 10.5l4 4 8-9' stroke='%23000' stroke-width='3' fill='none'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* Order-now CTA pinned to the bottom of the pitch panel (Fidel,
   2026-09-25: "in the form we need to add the CTA clean to order now")
   -- fills what was dead purple space beside the tall form. */
.bcc-b2b__order {
	margin-top: auto;
	padding: 24px;
	background: rgb(246 241 228 / .08);
	border: 1px solid rgb(246 241 228 / .22);
	display: grid;
	grid-template-columns: 88px 1fr;
	column-gap: 18px;
	align-items: center;
}

.bcc-b2b__order-img {
	grid-row: span 2;
	width: 88px;
	height: 88px;
	object-fit: cover;
	border-radius: 50%;
	border: var(--bcc-border-width) solid var(--bcc-choclo);
	background: #F5F0E6;
}

.bcc-b2b__order-title {
	margin: 0;
	font-family: var(--bcc-font-display);
	font-weight: 800;
	font-size: 26px;
	line-height: 1;
	text-transform: uppercase;
	color: var(--bcc-quinoa);
}

.bcc-b2b__order-text {
	margin: 6px 0 0;
	font-size: 15px;
	color: rgb(246 241 228 / .8);
}

.bcc-b2b__order .bcc-b2b__btn {
	grid-column: 1 / -1;
	margin-top: 18px;
	width: 100%;
	padding: 0 14px;
	font-size: 19px;
	white-space: nowrap;
}

@media (width < 520px) {
	.bcc-b2b__order {
		grid-template-columns: 64px 1fr;
		padding: 18px;
	}

	.bcc-b2b__order-img {
		width: 64px;
		height: 64px;
	}
}

.bcc-b2b__form {
	background: var(--bcc-paper);
	padding: clamp(24px, 4vw, 48px);
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 18px 16px;
	align-content: start;
}

@media (width < 560px) {
	.bcc-b2b__form {
		grid-template-columns: 1fr;
	}
}

.bcc-b2b__full {
	grid-column: 1 / -1;
}

.bcc-b2b__form label {
	display: flex;
	flex-direction: column;
	gap: 6px;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: var(--bcc-muted);
	min-width: 0;
}

.bcc-b2b__form input:not([type="checkbox"]),
.bcc-b2b__form select,
.bcc-b2b__form textarea {
	width: 100%;
	min-height: 50px;
	font-family: var(--bcc-font-body);
	font-size: 17px;
	letter-spacing: 0;
	text-transform: none;
	padding: 10px 12px;
	border-radius: 0;
	border: var(--bcc-border-width) solid var(--bcc-ink);
	background: #fff;
	color: var(--bcc-ink);
}

.bcc-b2b__form textarea {
	min-height: 96px;
	resize: vertical;
}

.bcc-b2b__form input:focus-visible,
.bcc-b2b__form select:focus-visible,
.bcc-b2b__form textarea:focus-visible {
	outline: 3px solid var(--bcc-choclo);
	outline-offset: 0;
}

.bcc-b2b__restrictions {
	border: none;
	padding: 0;
	margin: 0;
	display: flex;
	flex-wrap: wrap;
	align-content: flex-start;
	gap: 10px 18px;
	min-width: 0;
}

.bcc-b2b__restrictions legend {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: var(--bcc-muted);
	margin-bottom: 10px;
	padding: 0;
}

.bcc-b2b__form .bcc-b2b__checkbox {
	flex-direction: row;
	align-items: center;

	/* Tap target >= 44px on phones (audit 2026-10-05, #20). */
	min-height: 44px;
	gap: 10px;
	font-family: var(--bcc-font-body);
	font-size: 15px;
	letter-spacing: 0;
	text-transform: none;
	color: var(--bcc-ink);
}

.bcc-b2b__form .bcc-b2b__checkbox input {
	width: 20px;
	height: 20px;
	margin: 1px 0 0;
	flex: none;
	accent-color: var(--bcc-purple-900);
}

.bcc-b2b__hp {
	position: absolute;
	left: -9999px;
	width: 1px;
	height: 1px;
	opacity: 0;
}

.bcc-b2b__legal {
	font-size: var(--fs-legal);
	color: var(--bcc-muted);
	margin: 0;
}

.bcc-b2b__submit {
	display: flex;
	align-items: center;
	gap: 18px;
	flex-wrap: wrap;
	margin-top: 4px;
}

.bcc-b2b__status {
	font-size: 15px;
	font-weight: 600;
	margin: 0;
	min-height: 1.2em;
}

.bcc-b2b__status.is-error {
	color: #A03A2E;
}

.bcc-b2b__status.is-ok {
	color: var(--bcc-purple-700);
}

@media (prefers-reduced-motion: reduce) {
	.bcc-b2b__btn,
	.bcc-b2b__arrow {
		transition: none;
	}
}

/* bcc-club */
/**
 * [bcc_club] -- the reference mockup's homepage "BP Club" band (a pitch
 * for the real loyalty program + a join link, see includes/club.php's
 * docblock). The .bcc-club__field/__sr/__checkbox/__hp rules further
 * below are NOT part of this band -- they're the shared form-chrome
 * classes includes/popup.php's site-wide newsletter popup reuses, kept
 * here so popup.css's dependency on this stylesheet keeps working.
 */
.bcc-club {
	position: relative;
	overflow: hidden;
	background: var(--bcc-purple-900);
	color: var(--bcc-quinoa);
	padding-block: 100px;
}

@media (width < 860px) {
	.bcc-club {
		padding-block: 64px;
	}
}

/**
 * Background photo added 2026-09-21 (Fidel: use a background image on
 * BP Club "or something better than just a yellow bar"): an
 * AI-generated abundant shared-feast photo under a Chicha-purple duotone
 * overlay, replacing the flat Choclo-gold fill. Text below switches from
 * purple-on-gold to gold/quinoa-on-purple to match.
 */
.bcc-club__bg {
	position: absolute;
	inset: 0;
	z-index: 0;
}

.bcc-club__bg::after {
	content: '';
	position: absolute;
	inset: 0;
	background: rgb(72 57 111 / .82);
	mix-blend-mode: multiply;
}

.bcc-club__bg::before {
	content: '';
	position: absolute;
	inset: 0;
	z-index: 1;
	background: linear-gradient(100deg, rgb(27 23 38 / .55) 0%, rgb(27 23 38 / .15) 60%);
}

.bcc-club__bg img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.bcc-club__wrap {
	position: relative;
	z-index: 1;
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
	display: grid;
	grid-template-columns: 1fr auto;
	gap: 40px;
	align-items: center;
}

@media (width < 860px) {
	.bcc-club__wrap {
		grid-template-columns: 1fr;
	}
}

.bcc-club__wrap h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	text-transform: uppercase;
	line-height: .88;
	font-size: clamp(3.5rem, 8vw, 7.5rem);
	margin: 0;
	color: var(--bcc-gold-400) !important;
}

.bcc-club__lede {
	font-size: 21px;
	max-width: 620px;
	margin: 16px 0 0;
}

/**
 * Perk pills (Fidel: "BP club is nice but we can do better"). Was plain
 * inline mono text with no visual weight; now real gold-bordered pills,
 * matching the badge/pill language already used elsewhere (menu.css's
 * .bcc-chip, nutrition.css's .bcc-opt) instead of reading as an
 * afterthought under the headline.
 */
.bcc-club__perks {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin: 24px 0 0;
}

.bcc-club__perks span {
	display: inline-flex;
	align-items: center;
	border: var(--bcc-border-width) solid var(--bcc-gold-400);
	border-radius: var(--bcc-radius-pill);
	padding: 8px 16px;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .03em;
	color: var(--bcc-gold-400);
}

.bcc-club__wrap .bcc-btn--dark {
	box-shadow: 6px 6px 0 var(--bcc-gold-400);
	transition: transform .2s cubic-bezier(.2,.8,.2,1), box-shadow .2s cubic-bezier(.2,.8,.2,1);
}

.bcc-club__wrap .bcc-btn--dark:hover {
	transform: translate(-3px, -3px);
	box-shadow: 9px 9px 0 var(--bcc-gold-400);
}

.bcc-club__form {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.bcc-club__field {
	display: block;
}

.bcc-club__sr {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}

.bcc-club__field input,
.bcc-club__field select {
	width: 100%;
	font-family: var(--bcc-font-body) !important;
	font-size: 14px;
	padding: 9px 12px;
	border-radius: var(--bcc-radius-sm);
	border: 1.5px solid transparent;
	background: #fff;
	color: var(--bcc-ink) !important;
}

/**
 * color: inherit !important added 2026-09-23 -- confirmed live in the
 * popup (staging, forced open): this label's consent text rendered
 * completely invisible, chicha purple (#48396F) on the popup's own
 * purple-900 fill. No color was ever declared here on purpose (see this
 * rule's own docblock below: "adapts to whichever text color each
 * context already sets"), but without !important that unstated
 * inheritance loses to the same Elementor global-kit collision
 * documented repeatedly elsewhere in this codebase (a kit-wide `label`
 * color rule beating this class on specificity) -- so every consumer of
 * this class sitewide (footer newsletter, the popup, club.php's own
 * band) has been silently getting Elementor's own label color instead
 * of its real context's text color this whole time, not just here.
 */
.bcc-club__checkbox {
	display: flex;
	align-items: center;

	/* Tap target >= 44px on phones (audit 2026-10-05, #20). */
	min-height: 44px;
	gap: 8px;
	font-size: var(--fs-legal);
	line-height: 1.4;
	opacity: .85;
	color: inherit !important;
}

/**
 * Custom checkbox added 2026-09-22 (Fidel, footer screenshot: "need love
 * design better layout") -- this label wrapper styled the surrounding
 * text but never the <input> itself, so every consent checkbox sitewide
 * (footer newsletter, club band, the popup that reuses this same class)
 * rendered as the browser's bare native checkbox, clashing with the
 * site's flat-corner hard-border language everywhere else. currentColor
 * border so it adapts to whichever text color each context already sets
 * (quinoa on the footer/club's dark backgrounds, etc.) instead of a
 * hardcoded color that would only work in one place.
 */
.bcc-club__checkbox input[type="checkbox"] {
	appearance: none;
	flex: 0 0 auto;
	width: 18px;
	height: 18px;
	margin: 1px 0 0;
	border: var(--bcc-border-width) solid currentcolor;
	background: transparent;
	cursor: pointer;
	position: relative;
}

.bcc-club__checkbox input[type="checkbox"]:checked {
	background: var(--bcc-gold-400);
	border-color: var(--bcc-gold-400);
}

.bcc-club__checkbox input[type="checkbox"]:checked::after {
	content: "";
	position: absolute;
	left: 4px;
	top: 0;
	width: 5px;
	height: 9px;
	border: solid var(--bcc-purple-900);
	border-width: 0 2px 2px 0;
	transform: rotate(45deg);
}

.bcc-club__checkbox input[type="checkbox"]:focus-visible {
	outline: 2px solid var(--bcc-gold-400);
	outline-offset: 2px;
}

.bcc-club__hp {
	position: absolute;
	left: -9999px;
	width: 1px;
	height: 1px;
	opacity: 0;
}

.bcc-club__form button {
	align-self: flex-start;
	border: none;
	cursor: pointer;
}

.bcc-club__form button:disabled {
	opacity: .6;
	cursor: default;
}

.bcc-club__status {
	font-size: 13px;
	font-weight: 600;
	margin: 0;
	min-height: 1.2em;
}

.bcc-club__status.is-error {
	color: var(--bcc-lucuma);
}

.bcc-club__status.is-ok {
	color: var(--bcc-gold-400);
}

/* bcc-popup */
/**
 * Auto-triggering marketing popup modal (includes/popup.php). Shares
 * field/checkbox/honeypot classes with club.css ([bcc_club]) since it's
 * the same signup, just a timed dialog instead of an inline band -- only
 * the dialog chrome (backdrop, positioning, close button) is new here.
 */
.bcc-popup {
	position: fixed;
	inset: 0;
	z-index: 300;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var(--bcc-space);
}

.bcc-popup[hidden] {
	display: none;
}

.bcc-popup__backdrop {
	position: absolute;
	inset: 0;
	background: rgb(27 23 38 / .6);
}

.bcc-popup__dialog {
	position: relative;
	overflow: hidden;
	width: 100%;
	max-width: 440px;
	padding: calc(var(--bcc-space) * 1.25);
	background: var(--bcc-purple-900);
	color: #fff;
	border: var(--bcc-border-width) solid var(--bcc-gold-400);
	box-shadow: 10px 10px 0 rgb(0 0 0 / .25);
	animation: bcc-popup-in .25s ease;
}

/**
 * Decorative watermark, matching the footer signup card's own tiger
 * mark (includes/footer.php) -- same brand element, same treatment,
 * carried into the popup so the two share a visual language.
 * .bcc-popup__dialog .bcc-popup__mark (not just .bcc-popup__mark) so
 * this absolute positioning beats .grain > *'s own `position: relative`
 * on direct children (tokens.css) at equal specificity.
 */
.bcc-popup__dialog .bcc-popup__mark {
	position: absolute;
	top: -22px;
	right: -22px;
	width: 140px;
	height: auto;
	opacity: .08;
	pointer-events: none;
}

@keyframes bcc-popup-in {
	from {
		opacity: 0;
		transform: translateY(12px);
	}
}

@media (prefers-reduced-motion: reduce) {
	.bcc-popup__dialog {
		animation: none;
	}
}

/**
 * Simplified from a bordered square to a plain ghost glyph -- Fidel:
 * "needs a lot of love for the design". A boxed close button competed
 * visually with the dialog's own hard border right next to it; a bare
 * "×" reads lighter and more premium, same pattern high-end modals use.
 * border: none needs !important -- confirmed live it was still
 * rendering solid without it, the same Elementor kit button-default
 * collision as .bcc-popup__offer's font-size above (a generic
 * `.elementor-kit-18 button` rule beating this class on specificity).
 */
.bcc-popup__close {
	position: absolute;
	top: 14px;
	right: 16px;
	width: 28px;
	height: 28px;
	display: flex;
	align-items: center;
	justify-content: center;
	background: none !important;
	border: none !important;
	color: var(--bcc-cream) !important;
	opacity: .7;
	font-size: 18px;
	line-height: 1;
	cursor: pointer;
	transition: opacity .2s ease;
}

.bcc-popup__close:hover {
	opacity: 1;
}

.bcc-popup__eyebrow {
	position: relative;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: var(--bcc-gold-400);
	margin: 0 0 8px;
	padding-right: 32px;
}

/**
 * !important on color: live screenshot showed this headline -- the
 * popup's whole reason for existing, the welcome offer -- rendering
 * nearly invisible, dark-on-dark against the modal's own purple fill.
 * Elementor's global kit CSS scopes a heading rule to `.elementor-kit-18
 * h2` (the kit class lives on <body>, so it wraps this popup too even
 * though the markup is plugin-rendered), which at (0,1,1) beats this
 * single class at (0,1,0) on specificity alone -- same collision class
 * already fixed repeatedly elsewhere in this codebase (shadows, radii,
 * backgrounds). The sibling .bcc-popup__eyebrow right above renders
 * fine unstyled because Elementor's kit rule only targets headings, not
 * paragraphs.
 *
 * !important on font-size added 2026-09-23: sizing the clamp down (was
 * clamp(1.6rem, 5vw, 2.25rem)) had *no visible effect* live -- the same
 * Elementor kit rule above also sets its own h2 font-size, and without
 * !important that rule's (0,1,1) beat this class's (0,1,0) the exact
 * same way the color did, so the "fix" was silently losing the cascade
 * the whole time. Confirmed live: computed font-size was 60px, nowhere
 * near this rule's 1.85rem (29.6px) ceiling, until !important was added.
 */
.bcc-popup__offer {
	position: relative;
	font-family: var(--bcc-font-display);
	font-weight: 900;
	text-transform: uppercase;
	font-size: clamp(1.5rem, 4vw, 1.85rem) !important;
	line-height: 1.02;
	margin: 0 0 10px;
	color: var(--bcc-gold-400) !important;
}

.bcc-popup__copy {
	position: relative;
	font-size: 14px;
	line-height: 1.4;
	margin: 0 0 18px;
	opacity: .9;
}

/**
 * Separates the offer (pitch) from the form (action) -- previously
 * nothing marked that transition, so the dialog read as one dense stack
 * of copy with a form appended, not two clear sections.
 */
.bcc-popup__rule {
	position: relative;
	height: 1px;
	background: rgb(246 241 228 / .18);
	margin: 0 0 18px;
}

.bcc-popup__form {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 10px;
}

/**
 * Hard-shadow hover, matching the footer signup card's own submit
 * button (footer.css's .bcc-footer__news-row .bcc-hero__cta) -- same
 * punchy interaction language for the two entry points to this same
 * signup, instead of a flat, static button here.
 */
.bcc-popup__form .bcc-hero__cta {
	box-shadow: 6px 6px 0 rgb(0 0 0 / .3);
	transition: transform .2s cubic-bezier(.2,.8,.2,1), box-shadow .2s cubic-bezier(.2,.8,.2,1);
}

.bcc-popup__form .bcc-hero__cta:hover {
	transform: translate(-2px, -2px);
	box-shadow: 8px 8px 0 rgb(0 0 0 / .3);
}

.bcc-popup__status {
	font-size: 13px;
	font-weight: 600;
	margin: 0;
	min-height: 1.2em;
}

.bcc-popup__status.is-error {
	color: var(--bcc-lucuma);
}

.bcc-popup__status.is-ok {
	color: var(--bcc-gold-400);
}

.bcc-popup__skip {
	margin: 10px 0 0;
	text-align: center;
}

/* box-shadow: none !important -- same Elementor-default-shadow leak fixed for .bcc-opt in nutrition.css */
.bcc-popup__skip button {
	background: none !important;
	border: none;
	box-shadow: none !important;
	color: var(--bcc-cream) !important;
	font-size: 13px;
	text-decoration: underline;
	opacity: .75;
	cursor: pointer;
}

body.bcc-popup-open {
	overflow: hidden;
}

/* bcc-comptoirs */
/**
 * [bcc_comptoirs] -- ported verbatim from the reference mockup's
 * #comptoirs section (.locs/.loc). Sits with no top padding of its own,
 * same as the reference's own <section style="padding-top:0"> -- it
 * follows the traiteur band's own bottom padding instead of stacking a
 * second gap on top of it.
 */
.bcc-comptoirs {
	padding-bottom: 100px;

	--bcc-scene-accent: var(--bcc-purple-900); /* M12 -- gold default reads too light on the page's cream background */
}

@media (width < 860px) {
	.bcc-comptoirs {
		padding-bottom: 64px;
	}
}

.bcc-comptoirs__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
}

.bcc-comptoirs__head {
	display: grid;
	grid-template-columns: 1.1fr .9fr;
	gap: 32px;
	align-items: end;
	margin-bottom: 40px;
}

@media (width < 860px) {
	.bcc-comptoirs__head {
		grid-template-columns: 1fr;
	}
}

.bcc-comptoirs__head h2 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	text-transform: uppercase;
	line-height: .88;
	font-size: var(--bcc-h2);
	color: var(--bcc-ink) !important;
	margin: 0;
}

.bcc-comptoirs__head p {
	max-width: 520px;
	color: var(--bcc-muted);
	margin: 0;
	font-size: 19px;
}

.bcc-comptoirs__grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 20px;
}

@media (width < 760px) {
	.bcc-comptoirs__grid {
		grid-template-columns: 1fr;
	}
}

.bcc-comptoir {
	border: var(--bcc-border-width) solid var(--bcc-ink);
	padding: 24px;
	display: flex;
	flex-direction: column;
	gap: 8px;
	background: var(--bcc-cream);
	transition: transform .15s, box-shadow .15s;
}

.bcc-comptoir:hover {
	box-shadow: 8px 8px 0 var(--bcc-gold-400);
	transform: translate(-4px, -4px);
}

@media (prefers-reduced-motion: reduce) {
	.bcc-comptoir {
		transition: none;
	}

	.bcc-comptoir:hover {
		transform: none;
	}
}

.bcc-comptoir__tag {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .03em;
	text-transform: uppercase;
	color: var(--bcc-chicha);
}

/**
 * font-size cut 44px -> clamp(28px, 6vw, 36px) + text-decoration: none
 * added 2026-09-22 (Fidel: "Nos comptoirs better layout") -- at 44px the
 * street address (this card's own h3) wrapped to two lines on every
 * phone width, and live inspection found this h3 and the two spans
 * below it picking up an underline from Elementor's global kit text
 * styles (same collision pattern documented throughout this plugin's own
 * CSS -- none of these three elements are links, so none should ever be
 * underlined).
 */
.bcc-comptoir h3 {
	font-family: var(--bcc-font-display) !important;
	font-weight: 900;
	font-size: clamp(28px, 6vw, 36px);
	text-transform: uppercase;
	line-height: .95;
	margin: 0;
	color: var(--bcc-ink) !important;
	text-decoration: none !important;
}

.bcc-comptoir__addr {
	font-size: 15px;
	color: var(--bcc-muted);
	text-decoration: none !important;
}

.bcc-comptoir__hours {
	font-family: var(--bcc-font-mono);
	font-size: 14px;
	padding-top: 4px;
	border-top: 1px solid rgb(72 57 111 / .15);
	text-decoration: none !important;
}

.bcc-comptoir__cta {
	align-self: flex-start;
	margin-top: 10px;
}

/* bcc-footer */
/**
 * Site-wide marketing footer (includes/footer.php), ported from the
 * reference mockup's <footer>. The newsletter form's field styling
 * reuses club.css's shared .bcc-club__* classes -- only this file's own
 * .bcc-footer__* layout/color rules are new.
 */

/**
 * Hiding the old Elementor footer template (2026-09-20, VERIF_PASS2):
 * header.css already hides the theme's default header and an
 * Elementor Pro *header* template on every page -- but that rule never
 * covered the matching Elementor Pro *footer* template
 * ([data-elementor-type="footer"]), and unlike the header, the front
 * page's own custom template (templates/front-page.php) never renders
 * it at all, so this gap was invisible on `/` and only showed up on
 * the regular WP pages (/menu, /arma-tu-bowl, /emplacements, ...):
 * live-measured two fully *visible* <footer> elements stacked there,
 * the old Elementor one followed by this one. Same fix, same pattern,
 * just the footer side of it.
 */
[data-elementor-type="footer"] {
	display: none !important;
}

/**
 * Visual pass (Fidel: "the footer needs love in the design"), round 2 --
 * round 1 (gold top border, hard-shadow CTA, bolder link typography)
 * wasn't enough; still read flat and under-structured next to every
 * other section. This round adds real structure instead of just type
 * treatment: the sitewide .grain noise texture (tokens.css, already
 * used on other flat-colour sections) for depth on what's otherwise a
 * solid ink fill; a small uppercase label above each link column so the
 * footer reads as organised groups instead of one loose list; a rule
 * separating the signup/links area from the closing wordmark; and the
 * brand's own confirmed signature line (docs/BRAND.md) printed above
 * the wordmark instead of leaving that whole lower third empty.
 */

/**
 * padding-bottom cut 120px -> 56px 2026-09-21 (footer round 3): the NAP
 * address block (includes/locations.php's bcc_print_footer_nap(), styled
 * to match this footer in that same pass -- see locations.css) now
 * prints directly after this <footer>, so the old 120px only added a
 * dead gap between two blocks meant to read as one continuous footer.
 */
.bcc-footer {
	background: var(--bcc-ink);
	color: var(--bcc-quinoa);
	padding: 72px 0 56px;
	border-top: var(--bcc-border-width) solid var(--bcc-gold-400);

	/* The wordmark glow (.bcc-footer__big::before, inset -10%) reaches past
	   the viewport edge on phones and made the whole page ~15px wider than
	   the screen (audit P0-10). clip, not hidden: no scroll container, so
	   nothing sticky inside the footer breaks. */
	overflow-x: clip;
}

.bcc-footer__wrap {
	width: min(1280px, 100% - 40px);
	margin-inline: auto;
}

/**
 * 4 columns (signup + 3 nav groups) 2026-09-23, footer round 4 -- was
 * signup + 2 nav columns, one 7 items tall, one 4 items short, leaving a
 * visible gap of dead space under the short one next to the taller
 * signup card. See includes/footer.php's own docblock for the full
 * "outro of a presentation" rework this is part of.
 *
 * align-items: start added same round -- Fidel, live, still unhappy
 * after the first pass: "I FEEL THE SAME". Root cause: grid's default
 * `stretch` forced every nav column to the signup card's own tall
 * height (it has a form + checkbox copy below its links), so each
 * column's own short link list just sat at the top of a much taller
 * invisible box -- reading as a big dead gap before the divider/tagline/
 * wordmark below, not "sparse nav columns". Sizing each column to its
 * own content removes that gap without changing anything visible about
 * the columns themselves.
 */
.bcc-footer__fw {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 40px;
	align-items: start;
}

/**
 * Newsletter as a full-width horizontal band above the 3 nav columns
 * (2026-09-25, Fidel: "infolettre is too small, maybe should be better
 * longer an horizontal?"). Pitch on the left, email + consent on the
 * right, instead of a narrow card squeezed into the first column.
 */
@media (width < 640px) {
	.bcc-footer__fw {
		grid-template-columns: 1fr;
	}
}

.bcc-footer a {
	color: inherit;
	text-decoration: none;
	opacity: .85;
}

.bcc-footer a:hover {
	opacity: 1;
	text-decoration: underline;
}

/**
 * Round 6 (2026-09-23, Fidel, live: "the infolettre square is not nice
 * eighter we need better structure and design") -- round 4's bordered
 * dark-tinted box (rgb(246 241 228 / .04) on the footer's own ink, i.e.
 * barely-there) still just blended into the rest of the dark footer.
 * Flipped to a solid cream fill -- the same card language the location
 * and restaurant cards already use elsewhere on the site -- so this one
 * card actually pops against the three dark nav columns beside it
 * instead of reading as one more dark shape.
 */
.bcc-footer__signup {
	position: relative;
	overflow: hidden;
	grid-column: 1 / -1;
	margin-bottom: 16px;
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr);
	grid-template-areas: "eyebrow news" "title news" "lede news";
	column-gap: clamp(28px, 5vw, 72px);
	align-items: center;
	background: var(--bcc-cream);
	padding: clamp(28px, 4vw, 48px);
	box-shadow: 8px 8px 0 rgb(0 0 0 / .3);
}

@media (width < 860px) {
	.bcc-footer__signup {
		grid-template-columns: 1fr;
		grid-template-areas: "eyebrow" "title" "lede" "news";
		row-gap: 12px;
	}
}

/**
 * Watermark now tigre-chicha.webp (purple), not tigre-quinoa.webp (near-
 * white) -- the quinoa version was designed for a dark card and would
 * have vanished into this new light one.
 */
.bcc-footer__signup-mark {
	position: absolute;
	top: -18px;
	right: -18px;
	width: 120px;
	height: auto;
	opacity: .1;
	pointer-events: none;
}

.bcc-footer__eyebrow {
	grid-area: eyebrow;
	position: relative;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--bcc-chicha);
	margin: 0 0 10px;
}

.bcc-footer__title {
	grid-area: title;
	position: relative;
	font-family: var(--bcc-font-display);
	font-weight: 900;
	text-transform: uppercase;
	line-height: .88;
	font-size: clamp(38px, 4.4vw, 60px);
	color: var(--bcc-ink) !important;
	margin: 0;
}

.bcc-footer__lede {
	grid-area: lede;
	position: relative;
	color: var(--bcc-muted);
	max-width: 420px;
	margin: 8px 0 0;
}

.bcc-footer__news {
	grid-area: news;
	position: relative;
}

.bcc-footer__news-row {
	display: flex;
	gap: 10px;
}

.bcc-footer__news-row input {
	width: 100%;
	min-height: 50px;
	border: var(--bcc-border-width) solid var(--bcc-purple-900);
	background: #fff;
	color: var(--bcc-ink);
	padding: 10px 14px;
	font-size: 16px;
}

.bcc-footer__news-row input::placeholder {
	color: var(--bcc-muted);
}

.bcc-footer__news-row .bcc-hero__cta {
	flex: 0 0 auto;
	box-shadow: 6px 6px 0 var(--bcc-purple-900);
	transition: transform .2s cubic-bezier(.2,.8,.2,1), box-shadow .2s cubic-bezier(.2,.8,.2,1);
}

.bcc-footer__news-row .bcc-hero__cta:hover {
	transform: translate(-2px, -2px);
	box-shadow: 8px 8px 0 var(--bcc-purple-900);
}

@media (width < 480px) {
	.bcc-footer__news-row {
		flex-direction: column;
	}
}

/* club.css's .bcc-club__checkbox forces `color: inherit !important`,
   which inherited the footer's light text onto the cream card --
   near-invisible. Scoped + !important to win back readable ink. */
.bcc-footer .bcc-footer__consent {
	position: relative;
	margin-top: 12px;
	font-size: 13px;
	color: var(--bcc-muted) !important;
	opacity: 1;
}

.bcc-footer__col-title {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--bcc-gold-400);
	margin: 0 0 14px;
	opacity: .9;
}

.bcc-footer__links {
	display: grid;
	gap: 0;
	align-content: start;
	font-family: var(--bcc-font-display);
	font-weight: 700;
	font-size: 16px;
	text-transform: uppercase;
	letter-spacing: .02em;

	/* One-line links, each a 44px-tall tap target (audit 2026-10-05, #20). */
	line-height: 44px;
}

/**
 * Closing block, footer round 4 -- Fidel: "its like an outro of a
 * presentation". Was a single small signature line then the wordmark
 * sitting flat on the page; the brand's own seal (a stamp/badge motif)
 * now closes the signature line like an actual seal on a closing
 * statement, and the signature itself is bigger/more deliberate instead
 * of reading as a footnote.
 */
.bcc-footer__sign {
	display: flex;
	align-items: center;
	gap: 20px;
	margin-top: 64px;
	padding-top: 32px;
	border-top: var(--bcc-border-width) solid rgb(246 241 228 / .18);
}

.bcc-footer__seal {
	flex: none;
	width: 64px;
	height: 64px;
	opacity: .9;
}

.bcc-footer__signature {
	margin: 0;
	font-family: var(--bcc-font-mono);
	font-size: 16px;
	letter-spacing: .04em;
	color: rgb(246 241 228 / .85);
}

@media (width < 640px) {
	.bcc-footer__seal {
		width: 48px;
		height: 48px;
	}

	.bcc-footer__signature {
		font-size: 14px;
	}
}

/**
 * A soft radial glow behind the wordmark lifts it off the flat ink fill
 * instead of the type just sitting on a solid background -- no new
 * imagery, a CSS gradient only. data-reveal (includes/footer.php) gives
 * it the same scroll-in entrance as every other [data-reveal] element
 * sitewide (assets/css/motion.css's M2), an actual "reveal" for the
 * page's closing moment.
 */
.bcc-footer__big {
	position: relative;
	margin-top: 20px;
}

.bcc-footer__big::before {
	content: "";
	position: absolute;
	inset: -20% -10%;
	background: radial-gradient(ellipse at center, rgb(72 57 111 / .55) 0%, transparent 70%);
	z-index: 0;
	pointer-events: none;
}

.bcc-footer__big img {
	position: relative;
	z-index: 1;
	width: 100%;
	height: auto;
	opacity: .95;
}

/* Legal bar (audit §2.3): company line, privacy policy and a way to
   reopen the cookie choice (Law 25). Explicit colours + !important on the
   button: Elementor's kit styles every <button> (see tokens.css). */
.bcc-footer__legal {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 8px 24px;
	margin-top: 24px;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	color: rgb(246 241 228 / .8);
}

.bcc-footer__legal p {
	margin: 0;
}

.bcc-footer__legal nav {
	display: flex;
	flex-wrap: wrap;
	gap: 0 20px;
}

.bcc-footer__legal-btn {
	display: inline-flex !important;
	align-items: center;
	min-height: 44px;
	padding: 0 !important;
	border: 0 !important;
	background: none !important;
	box-shadow: none !important;
	color: var(--bcc-quinoa) !important;
	font: inherit !important;
	text-decoration: underline !important;
	text-underline-offset: 3px;
	cursor: pointer;
}

/* Audit 2026-10-05: the privacy link in the newsletter card inherited
   the footer's cream text on the card's cream fill (1.1:1). Ink on cream
   now, underlined (a link must not rely on colour alone). */
.bcc-footer .bcc-form-privacy a {
	color: var(--bcc-ink) !important;
	opacity: 1;
	text-decoration: underline;
	text-underline-offset: 2px;
}

/* bcc-dish-page */
/**
 * [bcc_dish] individual dish pages + [bcc_livraison_landing]. New pages
 * (docs/BRIEF.md Phase 3), so built straight to the current brand rules
 * (square corners, 2px ink borders, IBM Plex Mono data) rather than
 * reusing .bcc-dish's grid-card look, which is tuned for a 3-column grid
 * and would fight a single full-width page layout.
 */
.bcc-dish-page__crumb {
	display: flex;
	gap: 8px;
	align-items: center;
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	color: var(--bcc-muted);
	margin: 0 0 24px;
}

.bcc-dish-page__crumb a {
	color: var(--bcc-ink);
}

.bcc-dish-page__wrap {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 40px;
	align-items: start;
}

@media (width < 760px) {
	.bcc-dish-page__wrap {
		grid-template-columns: 1fr;
	}
}

.bcc-dish-page__vis {
	aspect-ratio: 1;
	overflow: hidden;
	border: var(--bcc-border-width) solid var(--bcc-ink);
}

.bcc-dish-page__vis img,
.bcc-dish-page__art svg {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.bcc-dish-page__body h1 {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	text-transform: uppercase;
	line-height: .9;
	font-size: clamp(2.5rem, 5vw, 4rem);
	margin: 0 0 8px;
	color: var(--bcc-ink);
}

.bcc-dish-page__price {
	font-family: var(--bcc-font-mono);
	font-size: 24px;
	color: var(--bcc-chicha);
	margin: 0 0 16px;
}

.bcc-dish-page__desc {
	font-size: 18px;
	line-height: 1.4;
	margin: 0 0 8px;
}

.bcc-dish-page__hook {
	font-size: 15px;
	color: var(--bcc-muted);
	margin: 0 0 20px;
}

.bcc-dish-page__facts {
	display: flex;
	gap: 24px;
	margin: 0 0 16px;
	padding: 16px 0;
	border-top: var(--bcc-border-width) solid var(--bcc-ink);
	border-bottom: var(--bcc-border-width) solid var(--bcc-ink);
}

.bcc-dish-page__facts dt {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	text-transform: uppercase;
	color: var(--bcc-muted);
}

.bcc-dish-page__facts dd {
	margin: 0;
	font-family: var(--bcc-font-mono);
	font-size: 20px;
	font-weight: 700;
	color: var(--bcc-ink);
}

.bcc-dish-page__allergens,
.bcc-dish-page__note {
	font-size: 13px;
	color: var(--bcc-muted);
	margin: 0 0 20px;
}

.bcc-dish-page__related {
	margin-top: 56px;
	padding-top: 24px;
	border-top: var(--bcc-border-width) solid var(--bcc-ink);
}

.bcc-dish-page__related h2 {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	text-transform: uppercase;
	font-size: 20px;
	margin: 0 0 12px;
}

.bcc-dish-page__related ul {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 16px;
	padding: 0;
	margin: 0;
}

.bcc-dish-page__related a {
	font-family: var(--bcc-font-mono);
	font-size: 14px;
	color: var(--bcc-chicha);
	text-decoration: underline;
}

/* ===== Livraison landing ===== */

.bcc-livraison-landing {
	max-width: 900px;
}

.bcc-livraison-landing h1 {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	text-transform: uppercase;
	line-height: .9;
	font-size: clamp(2.5rem, 6vw, 4.5rem);
	margin: 0 0 16px;
}

.bcc-livraison-landing__lede {
	font-size: 18px;
	max-width: 640px;
	margin: 0 0 32px;
}

.bcc-livraison-landing__locations {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 24px;
	margin-bottom: 32px;
}

@media (width < 620px) {
	.bcc-livraison-landing__locations {
		grid-template-columns: 1fr;
	}
}

.bcc-livraison-landing__loc {
	padding: var(--bcc-space);
	border: var(--bcc-border-width) solid var(--bcc-ink);
	background: var(--bcc-cream);
}

.bcc-livraison-landing__loc h2 {
	font-family: var(--bcc-font-display);
	font-weight: 900;
	text-transform: uppercase;
	font-size: 22px;
	margin: 0 0 8px;
}

.bcc-livraison-landing__channels {
	font-family: var(--bcc-font-mono);
	font-size: 13px;
	color: var(--bcc-muted);
	margin: 8px 0 16px;
}

.bcc-livraison-landing__menu-link a {
	font-family: var(--bcc-font-mono);
	font-size: 15px;
	color: var(--bcc-chicha);
	text-decoration: underline;
}

/* bcc-legal */
/**
 * Legal pages ([bcc_privacy_policy], includes/privacy.php): one readable
 * column, brand type, explicit colours (Elementor's kit styles win over
 * inherited ones, see tokens.css).
 */
.bcc-legal {
	width: min(760px, 100% - 32px);
	margin: 48px auto 80px;
	color: var(--bcc-ink);
	line-height: 1.6;
}

.bcc-legal__title {
	margin: 0 0 8px;
	font-family: var(--bcc-font-display);
	font-weight: 900;
	font-size: clamp(2.5rem, 7vw, 4rem);
	line-height: .95;
	text-transform: uppercase;
	color: var(--bcc-chicha);
}

.bcc-legal__updated {
	margin: 0 0 32px;
	font-family: var(--bcc-font-mono);
	font-size: .85rem;
	color: var(--bcc-muted);
}

.bcc-legal__section {
	padding-top: 24px;
	border-top: var(--bcc-border-width) solid var(--bcc-rule);
	margin-top: 24px;
}

.bcc-legal__section h2 {
	margin: 0 0 12px;
	font-family: var(--bcc-font-display);
	font-weight: 700;
	font-size: 1.6rem;
	line-height: 1.1;
	text-transform: uppercase;
	color: var(--bcc-ink);
}

.bcc-legal__section p,
.bcc-legal__section li {
	color: var(--bcc-ink);
	font-size: 1rem;
}

.bcc-legal__section ul {
	padding-left: 1.2em;
}

.bcc-legal__section li + li {
	margin-top: 8px;
}

.bcc-legal a {
	color: var(--bcc-chicha);
	text-decoration: underline;
	text-underline-offset: 2px;
}

/* hello-elementor-child-style */
/* 
Theme Name: Hello Elementor Child
Theme URI: https://github.com/elementor/hello-theme-child/
Description: Hello Elementor Child is a child theme of Hello Elementor, created by Elementor team
Author: Elementor Team
Author URI: https://elementor.com/
Template: hello-elementor
Version: 2.0.0
Text Domain: hello-elementor-child
License: GNU General Public License v3 or later.
License URI: https://www.gnu.org/licenses/gpl-3.0.html
Tags: flexible-header, custom-colors, custom-menu, custom-logo, editor-style, featured-images, rtl-language-support, threaded-comments, translation-ready
*/

/* Add your custom styles here */

