/* Floating WhatsApp and accessibility buttons.
   Split out of widgets.ts so it is fetched once and cached, instead of being
   inlined on every page — and then paid for a second time inside the RSC
   payload, which is where an inlined string really costs. */
/* The artwork is a finished circular badge, so the button itself is just a
     transparent box — no gradient, border or glass behind it to peek out
     from under the icon's own edge. Size and inset are custom properties
     because the consent bubble sits in the gap between the two buttons and has
     to know how much room they take. */
  .vn-fab{position:fixed;bottom:var(--vn-fab-bottom,22px);width:var(--vn-fab-size,58px);height:var(--vn-fab-size,58px);border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:5;border:0;padding:0;background:none;-webkit-tap-highlight-color:transparent;filter:drop-shadow(0 6px 16px rgba(0,0,0,.22));transition:opacity .2s ease,filter .28s ease,transform .2s cubic-bezier(.34,1.56,.64,1),bottom .35s cubic-bezier(.34,1.3,.64,1)}
  /* Layers are placed by percentage of the button, mirroring where the source
     artwork sits on its own 2900-unit canvas, so the fill lines up inside the
     outline at any size. */
  .vn-fab__layer{position:absolute;display:block;pointer-events:none;transition:transform .28s cubic-bezier(.34,1.4,.64,1)}
  .vn-fab__layer--full{inset:0;width:100%;height:100%;object-fit:contain}
  .vn-fab__layer--fill{left:10.034%;top:7.862%;width:81.724%;height:81.69%}
  .vn-fab__layer--mark{left:.517%;top:0;width:99.034%;height:100%}
  /* A ring that blooms out from under the badge on hover — the whole effect is
     one soft pulse plus a small lift, nothing that jumps. */
  .vn-fab::after{content:'';position:absolute;inset:-2px;border-radius:50%;border:2px solid var(--vn-fab-ring,rgba(255,255,255,.7));opacity:0;transform:scale(.9);transition:opacity .3s ease,transform .45s cubic-bezier(.22,1,.36,1);pointer-events:none}
  .vn-fab:hover{filter:drop-shadow(0 12px 24px var(--vn-fab-glow,rgba(0,0,0,.28)))}
  .vn-fab:hover .vn-fab__layer{transform:translateY(-3px) scale(1.06)}
  .vn-fab:hover::after{opacity:.55;transform:scale(1.18)}
  .vn-fab:focus-visible{outline:none}
  .vn-fab:focus-visible::after{opacity:.9;transform:scale(1.12);border-width:3px}
  @media (prefers-reduced-motion:reduce){
    .vn-fab__layer,.vn-fab::after{transition:none}
    .vn-fab:hover .vn-fab__layer{transform:none}
    .vn-fab:hover::after{opacity:0}
  }
  /* The product page's sticky buy bar slides up from the bottom on the same
     corner these float in. Without this the WhatsApp button sits on top of
     the add-to-cart button — the two things a shopper most wants to press. */
  body{--vn-fab-bottom:22px;--vn-fab-size:58px;--vn-fab-inset:22px}
  body.vn-buybar-up{--vn-fab-bottom:6.4rem}
  /* Out of the way while the keyboard is up.

     These are fixed to the bottom of the screen, and iOS pins fixed elements
     to the visual viewport once the keyboard opens — so instead of staying at
     the foot of the page they ride up with it and land in the middle of the
     form being filled in. Faded rather than removed, so they slide back on the
     same transition they left on; `pointer-events` is what actually matters,
     since a badge at 0 opacity still swallows the tap under it.
     `body.vn-keyboard-open` is set in widgets.js. */
  body.vn-keyboard-open .vn-fab{opacity:0;pointer-events:none;transform:translateY(0.75rem)}
  /* On a phone the badges are pulled in and down a size, and let a little of
     the page through, so the consent bubble has room between them and the pair
     reads as chrome rather than as two more things competing for a tap. */
  @media (max-width:34rem){
    body{--vn-fab-size:48px;--vn-fab-inset:16px}
    .vn-fab{opacity:.82}
  }
  /* The `<aside>` that names these as a landmark takes no room of its own —
     everything inside it is fixed — so it is left as a plain block and never
     given a transform or a filter, either of which would make it the
     containing block for the fixed children and drop them into the flow. */
  .vn-shortcuts{display:block}
  /* Fixed buttons cover whatever the last screenful puts under them. At 390px
     that was the comparison table's footnote, the end of the reviews and the
     checkout's totals. The height they occupy is reserved at the end of the
     document, and only on pages that actually get them. */
  body{--vn-fab-safe:calc(var(--vn-fab-bottom,22px) + var(--vn-fab-size,58px) + 1rem)}
  body:has(.vn-shortcuts) .site-footer{padding-block-end:calc(2.25rem + var(--vn-fab-safe))}
  body:has(.vn-shortcuts) .co{padding-block-end:var(--vn-fab-safe)}
  /* ── The one place layers are decided ────────────────────────────────────
     Everything the shop can draw over the page, in order:

       9   the drawers and their overlay      55  the sticky buy bar
       10  the site header                    60  the offer popup
                                              80  the bundle chooser

     Accessibility sits above all of it, because a control that exists so the
     site can be used at all cannot be the thing a drawer buries. The menu
     drawer already keeps its last 96px clear for exactly this, so the badge
     lands on empty glass rather than on a link.

     The panel and not only the badge. The badge was already at 11 and the
     panel was set here to 12 — and then set again to 6, further down, in the
     block that lays the panel out. Same specificity, later in the file, so 6
     won: pressing the badge over an open menu opened a panel *underneath* the
     menu. Nothing about it looked broken, because the badge on top is the part
     you watch. That is why the numbers live here and nowhere else, and why the
     layout block below sets no z-index at all.

     The full-screen image viewer is the deliberate exception and stays above
     (see product.css) — it is a mode the shopper opened and can close, and it
     owns the screen while it is open.

     WhatsApp keeps its old rank rather than riding along: it is a sales
     channel, not an accessibility control. It still clears the drawers, and it
     still steps aside for the cart drawer, which opens on its side and would
     otherwise put it over the checkout button. */
  .vn-a11y-btn{z-index:90}
  .vn-a11y-panel{z-index:91}
  .vn-wa{z-index:11}
  body:has(.cart-drawer.is-open) .vn-wa{opacity:0;pointer-events:none;transform:translateY(10px)}
  .vn-fab:active{transform:scale(.96)}
  /* Each badge glows in its own hue rather than a generic grey shadow. */
  .vn-wa{inset-inline-end:var(--vn-fab-inset,22px);--vn-fab-ring:rgba(37,211,102,.75);--vn-fab-glow:rgba(37,211,102,.42)}
  .vn-a11y-btn{inset-inline-start:var(--vn-fab-inset,22px);--vn-fab-ring:rgba(43,124,193,.75);--vn-fab-glow:rgba(43,124,193,.42)}
  .vn-a11y-panel{position:fixed;bottom:calc(var(--vn-fab-bottom,22px) + var(--vn-fab-size,58px) + .65rem);transition:bottom .35s cubic-bezier(.34,1.3,.64,1);inset-inline-start:var(--vn-fab-inset,22px);width:274px;background:rgba(255,255,255,.72);-webkit-backdrop-filter:blur(22px) saturate(180%);backdrop-filter:blur(22px) saturate(180%);border:1px solid rgba(255,255,255,.6);border-radius:20px;box-shadow:0 18px 50px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.7);padding:18px;display:none;font-family:'Assistant',sans-serif;direction:rtl}
  .vn-a11y-panel.is-open{display:block}
  .vn-a11y-panel h2{margin:0 0 12px;font-size:var(--fs-body);font-weight:700;color:#23201c}
  .vn-a11y-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .vn-a11y-opt{display:flex;flex-direction:column;align-items:center;gap:5px;padding:11px 6px;border:1px solid rgba(255,255,255,.6);border-radius:13px;background:rgba(255,255,255,.55);cursor:pointer;font:inherit;font-size:var(--fs-small);font-weight:600;color:#23201c;text-align:center;transition:all .15s ease;box-shadow:inset 0 1px 0 rgba(255,255,255,.6)}
  .vn-a11y-opt:hover{border-color:#005464}
  .vn-a11y-opt.is-active{background:#005464;color:#fff;border-color:#005464}
  .vn-a11y-opt svg{width:20px;height:20px}
  .vn-a11y-reset{grid-column:1/-1;background:none;border:0;color:#b3261e;font:inherit;font-size:var(--fs-small);font-weight:600;cursor:pointer;padding:6px;text-decoration:underline}
  html.vn-contrast{filter:contrast(1.35) saturate(1.2)}
  html.vn-links a{text-decoration:underline !important;text-underline-offset:2px}
  html.vn-readable *{font-family:Arial,'Assistant',sans-serif !important;letter-spacing:.01em}
  html.vn-nomotion *{animation:none !important;transition:none !important;scroll-behavior:auto !important}
