/* =====================================================================================================================
   batida-base.css (8.10.2026, Horizon P0): the ONE stylesheet every Batida page loads (layout: snippets/batida-head-assets).
   D9 (speed first): only what all pages share - design tokens, the Pipeline reset the v7 sections were written against,
   the type roles and the button system. Every page's own CSS (batida-v7-onas.css, ...) loads with its section.
   Replaces, on Horizon, these live files (b2c-redesign @ 5f795af): theme.css (Pipeline, 560 KB) + custom.css (143 KB) +
   batida-b2b.css / batida-b2c.css (shared typography) + the shared head and button blocks of batida-v7.css (100 KB).
   Where each block comes from is written above it. The live `html.v7 ...` rules stay byte-for-byte (same selectors, same
   specificity), so the copied v7 section CSS cascades exactly as on the live site.
   ===================================================================================================================== */

/* ---------------------------------------------------------------------------------------------------------------------
   1. Design tokens - live batida-v7.css lines 8-24 (Aleksandra's prototype, 27.09)
   --------------------------------------------------------------------------------------------------------------------- */
html.v7 {
  --v7-ink: #1A1512;        /* text, dark buttons */
  --v7-bg: #FAF9F7;         /* page */
  --v7-sand: #F1EFEC;       /* chips, soft sections */
  --v7-line: #E7E2DC;       /* borders, dividers */
  --v7-muted: #6B625B;      /* secondary text */
  --v7-rasp: #B84A52;       /* accent: italic words, prices, main button */
  --v7-pink: #EFBDB8;       /* badges, coffee card */
  --v7-pink-soft: #F6CFCB;  /* top strip */
  --v7-pink-pale: #F8E0DC;  /* small tags */
  --v7-green: #4E7A55;      /* "za darmo" */
  --v7-toggle: #E2DDD6;     /* switch off */
  --v7-display: 'Batida Display', 'Archivo', 'Arial Narrow', sans-serif;
  --v7-serif: 'Instrument Serif', Georgia, serif;
  --v7-body: 'Outfit', 'Lato', system-ui, sans-serif;
}
html.v7 body { background: var(--v7-bg); color: var(--v7-ink); }
html.v7 body { background: var(--v7-bg); color: var(--v7-ink); }

/* ---------------------------------------------------------------------------------------------------------------------
   2. Pipeline variables and root sizes the v7 CSS was written against (values measured on batida.pl 8.10, 3 breakpoints):
   --gutter / --outer / --inner / --text / --bg / --border, the body text size (13 / 13.5 / 14.5 px), the rem base (14 / 15 / 16 px).
   Plan 2.1: the Batida CSS itself reads only --gutter, --header-height (Horizon's header.js sets it on <body>), --full-screen
   (snippets/batida-theme-shim), --menu-height-sticky (= the measured sticky header height) and --FONT-WEIGHT-ACCENT-BOLD.
   --------------------------------------------------------------------------------------------------------------------- */
html.v7 {
  --gutter: max(calc(20px * .6), 16px); --outer: 16px; --inner: 16px; --fs-body: 13px; --fs-small: 12px; --fs-quote: 15.5px;
  --text: #2E3438; --bg: #FAF7F2; --border: rgba(66, 66, 66, 0.2);
  --FONT-WEIGHT-ACCENT-BOLD: 500; --FONT-WEIGHT-BODY-BOLD: 600;
  font-size: 14px;
  /* Horizon-native parts (cart drawer, search, forms) speak the Batida fonts: every Horizon font variable -> the self-hosted set */
  --font-body--family: var(--v7-body);
  --font-subheading--family: var(--v7-body);
  --font-heading--family: var(--v7-display);
  --font-accent--family: var(--v7-serif);
  --font-body--style: normal;
  --font-paragraph--weight: 500;
  --font-paragraph--size: var(--fs-body);
  --font-paragraph--line-height: 1.5;
  --pl-h1: 32px; --pl-h2: 27px; --pl-h3: 23.5px; --pl-h4: 20px; --pl-h5: 17px; --pl-h6: 15.5px;
}
@media (min-width: 480px) {
  html.v7 { --gutter: calc(20px * .6); --outer: calc(36px * .6); --fs-body: 13.5px; --fs-small: 12.5px; --fs-quote: 16px; font-size: 15px;
    --pl-h1: 34px; --pl-h2: 29px; --pl-h3: 25px; --pl-h4: 21px; --pl-h5: 18px; --pl-h6: 16px; }
}
@media (min-width: 768px) {
  html.v7 { --gutter: calc(20px * .8); --outer: calc(36px * .8); --inner: 18px; font-size: 16px; }
}
@media (min-width: 1100px) {
  html.v7 { --gutter: 20px; --outer: 36px; --inner: 20px; --fs-body: 14.5px; --fs-small: 13px; --fs-quote: 17.5px;
    --pl-h1: 48px; --pl-h2: 39px; --pl-h3: 32px; --pl-h4: 26px; --pl-h5: 22px; --pl-h6: 17.5px; }
}
html.v7 body { --menu-height-sticky: var(--header-height, 0px); }

/* ---------------------------------------------------------------------------------------------------------------------
   3. Scroll model + the body. Upstream Horizon scrolls `.page-wrapper` on desktop (squeeze layout, >= 990px); Batida pages
   are long documents and the v7 scripts use window scroll. assets/scroll-container.js is patched to match (document scroll).
   The live body is Pipeline's: flex column, Outfit 500, 1.5 line height, size = --fs-body; <main> = --text on --bg.
   --------------------------------------------------------------------------------------------------------------------- */
@media (min-width: 990px) {
  html:has(.page-wrapper),
  html:has(.page-wrapper) body { height: auto; overflow: visible; }
  .page-wrapper { height: auto; overflow-y: visible; }
}
html.v7 body { font-family: Outfit, Lato, sans-serif; font-size: var(--fs-body); font-weight: 500; line-height: 1.5; -webkit-text-size-adjust: 100%; }
/* html / body details of the Tailwind preflight that Horizon's base.css changes: no "slnt" variation axis, tab size, tap highlight, classic scrollbars (Horizon: thin) */
html.v7 { font-feature-settings: normal; font-variation-settings: normal; tab-size: 4; -webkit-tap-highlight-color: transparent; scrollbar-width: auto; scrollbar-color: auto; }
html.v7 body { font-variation-settings: normal; }
html.v7 #MainContent { color: var(--text); background-color: var(--bg); }

/* ---------------------------------------------------------------------------------------------------------------------
   4. Reset shim = Pipeline's reset, Tailwind CSS v3.4.3 "preflight" (live theme.css, the block that starts with
   "! tailwindcss v3.4.3"), 1:1 except for the scope: it applies inside the Batida regions of the page only (#MainContent,
   the header group, the footer, P4: the slide-in cart #batida-cart-drawer) and with :where() so its specificity stays exactly that of the original element
   selectors (0,0,0 / 0,0,1) - the live class rules keep winning over it. Horizon's own widgets (cart drawer, search modal,
   dialogs) outside those regions keep Horizon's reset. Not copied: the html/:host and body rules (section 3 does the
   equivalent), the :root --space-* scale (no Batida file uses it).
   --------------------------------------------------------------------------------------------------------------------- */
/* 9.10 (P7): scope also covers the elements the loyalty / account scripts append to <body> (#loy-panel, #loy-launch = assets/batida-loyalty.js, .v7k-toast = batida-konto.js, .v7k-qm = batida-konto-quiz.js modal): on Pipeline the reset + element defaults applied to the whole page (loyalty panel list rows 3.5 px lower, svg baseline, button font) */
:where(#MainContent, #header-group, #footer-group, #shopify-section-batida-free-delivery-bar, .search--popdown, #batida-cart-drawer, #loy-panel, #loy-launch, .v7k-toast, .v7k-qm) {
  & *, & *::before, & *::after { box-sizing: border-box; border-width: 0; border-style: solid; border-color: currentColor; }
  & *::before, & *::after { --tw-content: ''; }
  & hr { height: 0; color: inherit; border-top-width: 1px; }
  & abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; }
  & h1, & h2, & h3, & h4, & h5, & h6 { font-size: inherit; font-weight: inherit; }
  & a { color: inherit; text-decoration: inherit; }
  & b, & strong { font-weight: bolder; }
  & code, & kbd, & samp, & pre { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 1em; }
  & small { font-size: 80%; }
  & sub, & sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
  & sub { bottom: -0.25em; }
  & sup { top: -0.5em; }
  & table { text-indent: 0; border-color: inherit; border-collapse: collapse; }
  & button, & input, & optgroup, & select, & textarea { font-family: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 100%; font-weight: inherit; line-height: inherit; letter-spacing: inherit; color: inherit; margin: 0; padding: 0; }
  & button, & select { text-transform: none; }
  & button, & input:where([type='button']), & input:where([type='reset']), & input:where([type='submit']) { -webkit-appearance: button; background-color: transparent; background-image: none; }
  & :-moz-focusring { outline: auto; }
  & :-moz-ui-invalid { box-shadow: none; }
  & progress { vertical-align: baseline; }
  & *::-webkit-inner-spin-button, & *::-webkit-outer-spin-button { height: auto; }
  & [type='search'] { -webkit-appearance: textfield; outline-offset: -2px; }
  & *::-webkit-search-decoration { -webkit-appearance: none; }
  & *::-webkit-file-upload-button { -webkit-appearance: button; font: inherit; }
  & summary { display: list-item; }
  /* 9.10 (P7): Pipeline theme.css 5033 `blockquote, dl, main, nav, section, summary { display: block }` comes AFTER the preflight line above (3045), so a live <summary> is a plain block (no disclosure marker) - measured live vs dev on Moje konto ("Pokaż całe menu"): live block, dev list-item */
  & summary { display: block; }
  & blockquote, & dl, & dd, & h1, & h2, & h3, & h4, & h5, & h6, & hr, & figure, & p, & pre { margin: 0; }
  & fieldset { margin: 0; padding: 0; }
  & legend { padding: 0; }
  & ol, & ul, & menu { list-style: none; margin: 0; padding: 0; }
  & dialog { padding: 0; }
  & textarea { resize: vertical; }
  & input::-moz-placeholder, & textarea::-moz-placeholder { opacity: 1; color: #9ca3af; }
  & input::placeholder, & textarea::placeholder { opacity: 1; color: #9ca3af; }
  & button, & [role="button"] { cursor: pointer; }
  & :disabled { cursor: default; }
  & img, & svg, & video, & canvas, & audio, & iframe, & embed, & object { display: block; vertical-align: middle; }
  & img, & video { max-width: 100%; height: auto; }
  & [hidden] { display: none; }
}

/* ---------------------------------------------------------------------------------------------------------------------
   4b. Pipeline's element defaults (live theme.css "#HTML Standard Elements", "Lists", forms) - what a bare <h2>, <p>, <ul>,
   <input> looks like inside the Batida regions, measured 1:1 on batida.pl (probe script in docs/horizon/README.md). Same scope and
   specificity as the reset. Plus three neutralisers for Horizon's own element rules (img {width:100%}, svg {max-width},
   picture {display:block}), which the Pipeline pages never had.
   --------------------------------------------------------------------------------------------------------------------- */
:where(#MainContent, #header-group, #footer-group, #shopify-section-batida-free-delivery-bar, .search--popdown, #batida-cart-drawer, #loy-panel, #loy-launch, .v7k-toast, .v7k-qm) {
  & h1, & h2, & h3, & h4, & h5, & h6 { font-family: Archivo, Outfit, sans-serif; font-style: normal; font-weight: 500; letter-spacing: .01em; text-transform: uppercase; margin: 0 0 .75em; }
  & h1 { font-size: var(--pl-h1); line-height: 1.25; }
  & h2 { font-size: var(--pl-h2); line-height: 1.25; }
  & h3 { font-size: var(--pl-h3); line-height: 1.25; }
  & h4 { font-size: var(--pl-h4); line-height: 1.375; }
  & h5 { font-size: var(--pl-h5); line-height: 1.375; }
  & h6 { font-size: var(--pl-h6); line-height: 1.375; }
  & h1 a, & h2 a, & h3 a, & h4 a, & h5 a, & h6 a { text-decoration: none; font-weight: inherit; }
  & p { margin: 0; }
  & em { font-style: italic; }
  & b, & strong { font-weight: var(--FONT-WEIGHT-BODY-BOLD); }
  & small { font-size: var(--fs-small); line-height: 1.5; }
  & sup, & sub { position: relative; font-size: 10px; line-height: 1.625; vertical-align: baseline; }
  & sup { top: -.5em; }
  & sub { bottom: -.5em; }
  & s { text-decoration: line-through; opacity: .5; }
  & blockquote { font-size: var(--fs-quote); line-height: 1.375; font-style: italic; margin: 0 0 var(--gutter); padding: 0 var(--gutter); border-inline-start: 1px solid var(--border); }
  & hr { margin: var(--gutter) 0; border-top: 1px solid var(--border); }
  & ul, & ol { margin: 0 0 var(--gutter); padding: 0; }
  & ul { list-style: none outside; }
  & ol { list-style: decimal; margin-left: var(--gutter); }
  & li { margin-bottom: .25em; }
  & label { display: block; }
  /* 8.10 (P2/P5): exactly the input types Pipeline styled (theme.css "Input width and border": text, search, password, email, file, number, tel, url, date) - a range slider (paczka), colour, hidden ... stay as the browser draws them */
  & input:is([type=text], [type=search], [type=password], [type=email], [type=file], [type=number], [type=tel], [type=url], [type=date]), & textarea, & select {
    display: block; width: 100%; max-width: 100%; margin: 0 0 1em; padding: 8px 10px; font-size: var(--fs-body); line-height: 1.42; color: #1F4054;
    background: transparent; border: 1px solid var(--border); border-radius: 3px; -webkit-appearance: none; appearance: none; }
  & textarea { min-height: 100px; }
  & select { padding-right: 28px; cursor: pointer; }
  /* 9.10 (P7): width / height `revert` instead of 13px: Pipeline set none, the native box is 13px by itself, and a rule with inset (Moje konto toggle `.v7k-switch input` { position: absolute; inset: 0 } = 46 x 26 click area) must still stretch; 13px stopped it (live 46x26, dev 13x13) */
  & input[type=checkbox], & input[type=radio] { width: revert; height: revert; -webkit-appearance: auto; appearance: auto; border-style: none;
    /* 8.10 (P2/P5): Horizon's own checkbox / radio rules (base.css, :where()) - positioned, centred, square, background - undone: Pipeline drew the native control */
    position: static; vertical-align: baseline; aspect-ratio: auto; background-color: transparent; }
  & button, & input[type=submit] { white-space: nowrap; text-overflow: ellipsis; color: inherit; -webkit-appearance: none; appearance: none; }
  & table { width: 100%; }
  & th { padding: 20px 20px 20px 0; text-align: start; }
  & td { padding: 20px 0 20px 20px; }
  /* 8.10 (P2/P5): Pipeline had NO width rule on img, so the HTML width="362" of a picture in a text (collection description) counted;
     Horizon's base.css img { width: 100% } beats that attribute, and "width: auto" would ignore it too. attr() hands the attribute back
     (Chrome 133+); older browsers get auto (natural size, clamped by max-width) */
  & img { border-style: none; width: auto; }
  @supports (width: attr(width px, auto)) { & img[width] { width: attr(width px, auto); } }
  & svg { max-width: none; }
  & picture { display: inline; }
  /* 8.10 (P2/P5): Horizon's base.css styles every <summary> (flex, centred, padding-block, colour on hover); on Pipeline a <summary> was a plain block with the section's own rules (FAQ rows, "Wszystkie kategorie") */
  & summary { align-items: normal; padding-block: 0; }
  & summary:hover { color: inherit; }
  /* 9.10 (P4, the cart): more Pipeline element defaults the cart (and any v7 form) was built against, measured live vs dev on /cart with compare-cart.js --styles:
     forms keep Pipeline's bottom margin (theme.css `form { margin-bottom: var(--gutter) } form:last-child { margin-bottom: 0 }`, as P1 did for the chrome),
     inputs / textareas / selects never overflow their box (max-width 100%, also the ones without a type attribute), an empty <p> still takes its box (Horizon: display none), the checkbox / radio line height + colour + cursor (Horizon: pointer), <option> colours (black on white) */
  & form { margin-bottom: var(--gutter); }
  & form:last-child { margin-bottom: 0; }
  & input, & textarea, & select { max-width: 100%; }
  & p:empty { display: block; }
  & p:empty[hidden] { display: none; } /* 9.10 (P6): a hidden empty status line (kariera CV message) stays hidden, as on live */
  & input[type=checkbox], & input[type=radio] { color: var(--text); line-height: 1.42; cursor: default; }
  & select option { color: #000; background-color: #fff; }
}

/* 8.10 (P2/P5): live batida-b2c.css lines 88-100 + 171. The "rounded pills" rule of the old theme matches every link / button whose class
   LIST contains "btn--" - also the v7 ones (v7h-btn--dark, v7h-h2x__btn--dark ...): 999px corners, Outfit 700, .06em, hover lift.
   The v7 button system below overrides most of it, but not on every button (the Halloween slide's two buttons keep .06em / 999px). Kept 1:1. */
html.is-b2c-host .btn,
html.is-b2c-host a[class*="btn--"],
html.is-b2c-host button[class*="btn--"] {
  border-radius: 999px;
  font-family: 'Outfit', 'Lato', sans-serif;
  font-weight: 700;
  letter-spacing: .06em;
  transition: transform .25s ease, background-color .25s ease, color .25s ease, border-color .25s ease;
}
html.is-b2c-host .btn:hover,
html.is-b2c-host a[class*="btn--"]:hover { transform: translateY(-2px); }
/* Instafeed tiles (home): live batida-b2c.css line 171 */
html.is-b2c-host .instafeed-new-layout-item { border-radius: 16px; overflow: hidden; }

/* 8.10 (P2/P5): placeholders everywhere - live batida-b2c.css lines 493-495 (upright Outfit, #8C969B; Tailwind's grey above would win otherwise) */
html.v7 input::placeholder,
html.v7 textarea::placeholder { font-family: 'Outfit', 'Lato', sans-serif !important; font-style: normal !important; color: #8C969B; }

/* ---------------------------------------------------------------------------------------------------------------------
   5. Type roles - live batida-v7.css lines 26-33
   --------------------------------------------------------------------------------------------------------------------- */
/* The design's type roles */
html.v7 .v7-accent { font-family: var(--v7-serif); font-style: italic; font-weight: 400; letter-spacing: 0; color: var(--v7-rasp); }
html.v7 .v7-label,
html.v7 .batida-section-label,
html.v7 .batida-transport-label {
  font: 700 12px/1.3 var(--v7-body) !important; letter-spacing: .14em !important; text-transform: uppercase !important; color: var(--v7-muted) !important;
  margin: 0 0 12px !important;
}
/* Visually hidden headings (language h2, search h2 ...) must not pull the Archivo heading font (61 KB) onto B2C pages - live batida-v7.css, one rule */
html.v7 .visually-hidden { font-family: var(--v7-body, "Outfit", sans-serif) !important; }
/* Batida icons (snippets/batida-icon): the solid details never get an outline, whatever a section's CSS sets on the svg (30.09). */
html.v7 svg.bi [fill="currentColor"] { stroke: none !important; }

/* ---------------------------------------------------------------------------------------------------------------------
   6. Button system + "no small labels above headings" - live batida-v7.css, the block "Button system (Aleksandra 30.09)".
   Copied as it is (the class lists name every v7 page's buttons; `html.v7 body` wins over the sections' CSS that loads later).
   The product-card and PDP rules inside that block ship with the card / PDP in P2 / P3.
   --------------------------------------------------------------------------------------------------------------------- */
/* ===================================================================================================================
   Button system (Aleksandra 30.09, "Batida_system_przyciskow.html"). Every button on batida.pl is one of:
   - main: black, filled (max one per section)          - buy: raspberry (only Add to cart and the checkout)
   - secondary: outlined black                          - link: underlined + arrow (the arrow only on links)
   - pill: white with a thin border (categories, filters)
   Sentence case (no capitals, no letter-spacing), 48 px high (38 px on product cards), fully rounded.
   Small labels above headings are gone site-wide (the heading says it). One corner radius for boxes: 18 px.
   `html.v7 body` = wins over the section stylesheets that load later. Revert: delete this block.
   =================================================================================================================== */
html.v7 body :is(.v7h-btn, .v7p-btn, .v7dg-btn, .v7dg-btn2, .v7lb-btn, .v7k-btn, .v7tp-btn, .v7tp-nb, .v7r-btn, .v7pw-btn, .v7pk-btn, .v7o-btn, .v7i-btn, .v7h-cta, .v7h-band__all, .v7cb__btn, .blv__cta, .v7-b2) {
  height: 48px !important; min-height: 48px !important; padding: 0 24px !important; border-radius: 999px !important; display: inline-flex; align-items: center; justify-content: center;
  font-family: var(--v7-body) !important; font-weight: 600 !important; font-size: 15px !important; line-height: 1.1 !important; letter-spacing: 0 !important; text-transform: none !important; white-space: nowrap;
}
html.v7 body :is(.v7k-btn--sm, .v7i-btn--sm, .v7h-band__all, .v7-b2) { height: 38px !important; min-height: 38px !important; padding: 0 16px !important; font-size: 14px !important; }
/* main = black */
html.v7 body .v7h-band__all { background: var(--v7-ink) !important; color: #fff !important; border: 1.5px solid var(--v7-ink) !important; }
html.v7 body .v7h-band__all:hover { background: #3A322E !important; border-color: #3A322E !important; }
/* secondary = outlined */
html.v7 body .v7-b2 { background: transparent !important; color: var(--v7-ink) !important; border: 1.5px solid var(--v7-ink) !important; transition: background-color .2s, color .2s; }
html.v7 body .v7-b2:hover, html.v7 body .v7h-occ__b2b:hover .v7-b2 { background: var(--v7-ink) !important; color: #fff !important; }
html.v7 body :is(.v7h-btn, .v7p-btn, .v7o-btn, .v7i-btn, .v7k-btn, .v7r-btn, .v7lb-btn, .v7pk-btn, .v7dg-btn, .v7tp-btn) * { letter-spacing: 0 !important; text-transform: none !important; }
/* pills: white with a thin border */
html.v7 body .v7h-pill { height: 38px; padding: 0 16px; background: #fff; border: 1px solid var(--v7-line); font-size: 14px; font-weight: 500; }
html.v7 body .v7h-pill:hover { border-color: var(--v7-ink); }
/* "Więcej w menu:" = plain text */
html.v7 body .v7h-band__lab { font: 600 15px/1.2 var(--v7-body) !important; letter-spacing: 0 !important; text-transform: none !important; margin-right: 6px; }
/* B2B banner: 18 px corners like every box, outlined button on the right */
html.v7 body .v7h-occ__b2b { border-radius: 18px; border-color: var(--v7-line); background: #fff; }
/* no small labels above headings (an H1 used as a label stays - it is the page's SEO heading) */
html.v7 body :is(.v7h-kicker, .v7i-kicker, .v7o-kicker, .v7r-kicker, .v7p-kicker, .v7-coffee__kicker, .v7pw-kick, .v7pw-k, .v7cart-pairs__k, .v7k-kicker, .v7k-inc__kicker):not(h1):not(.v7m-hero__note):not(.v7f-hero__label) { display: none !important; }

/* ---------------------------------------------------------------------------------------------------------------------
   P4 (9.10): the slide-in cart (assets/batida-drawer.js builds it, assets/batida-v7-drawer.css styles it - both copied from live).
   Three Pipeline leftovers measured live vs dev with compare-cart.js --styles (the rest of the drawer matches 1:1 through the reset shim above):
   the quantity field has no bottom margin and sits in the middle of the line, the empty drawer's "Kontynuuj zakupy" is at most 240 px wide
   (Pipeline's .btn rule), the "Przejdź dalej" button is positioned (its arrow).
   --------------------------------------------------------------------------------------------------------------------- */
#batida-cart-drawer .batida-cart-drawer__line__qty input { margin: 0; vertical-align: middle; }
#batida-cart-drawer .batida-cart-drawer__empty .batida-cart-drawer__cta-secondary { max-width: 240px; }
#batida-cart-drawer .batida-cart-drawer__cta-primary { position: relative; }
