/* Native Astro interactions. Original presentation styles are preserved in assets/. */
/* Footer quick-link font-size for "Sklep"/"Mój Świat": in the original site
   this rule lived only in the footer's own inline <style> (appended later
   in Elementor, after the per-page bundled CSS in assets/ was generated),
   not in the per-page stylesheets every other footer rule already comes
   from — so it has to live somewhere that's actually linked on every page. */
.elementor-381 .elementor-element.elementor-element-posladki1 .elementor-heading-title,
.elementor-381 .elementor-element.elementor-element-blog1 .elementor-heading-title { font-family: "Open Sans", Sans-serif; font-size: 14px; font-weight: 400; color: #ddd; }
html { scroll-behavior: smooth; }
#masthead { position: sticky; top: 0; z-index: 1000; }
[hidden] { display: none !important; }
.elementor-invisible { visibility: visible; }
.ast-header-break-point #ast-mobile-header .migration-menu-open { display: block; }
/* Elementor's social-icons grid spaces its items with the `.elementor-grid`
   class's `display: inline-block` + `word-spacing: var(--grid-column-gap)`
   trick: the gap comes from CSS word-spacing acting on the whitespace TEXT
   NODE between each inline-block `<span class="elementor-grid-item">`, not
   from a real `gap` property. Astro's compiler doesn't preserve that
   whitespace between tags the way the original scraped markup did, so the
   icons render with zero gap (footer, /o-mnie, /strefa-bikini). Force a
   real flex gap instead of depending on that whitespace.
   `justify-content: flex-start` is needed too: other (non-!important)
   `.elementor-grid` rules set `justify-content: var(--justify-content, center)`,
   which had no visual effect while display was inline-block but centers the
   icons the moment display becomes flex - this page never sets
   --justify-content (the e-grid-align-left class controls text-align, not
   flex alignment), so it was falling back to that "center" default. */
.elementor-social-icons-wrapper { display: inline-flex !important; flex-wrap: wrap; justify-content: flex-start !important; gap: var(--grid-row-gap, 5px) var(--grid-column-gap, 10px); }
.migration-testimonials { display: flex; overflow: hidden; align-items: stretch; gap: 24px; }
.migration-testimonials > .wpr-testimonial-item { flex: 0 0 calc(50% - 12px); min-width: 0; }
/* Vendor arrow is vertically centered on the whole carousel (top: 52%), so it
   overlaps text whenever one card is taller than the other. Pin it to the
   bottom instead, independent of card height. */
.wpr-testimonial-arrow { top: auto !important; bottom: 8px !important; }
.wpr-testimonial-prev-arrow { transform: none !important; }
.wpr-testimonial-next-arrow { transform: rotate(180deg) !important; }
.wpr-testimonial-arrow, .cmplz-close, .cmplz-manage-consent { cursor: pointer; }
.migration-carousel { overflow: hidden; position: relative; }
.migration-carousel .swiper-wrapper { display: flex; transition: transform .5s ease; }
.migration-carousel .swiper-slide { min-width: 0; }
.swiper-lazy-preloader { display: none; }
/* Vendor JS (never loaded here) normally flips `.wpr-grid{opacity:0}` and
   `.wpr-grid-item{opacity:0}` to 1 after computing the masonry layout —
   without it the whole grid, container included, stays invisible forever.
   CSS multi-column (`columns:4`) was tried instead of a plain grid to get a
   masonry look, but its auto-balancing is non-deterministic for a handful
   of uneven-height images — it can collapse to 2 columns with blank space.
   A plain grid gives up the masonry packing but renders the same way
   every time. */
.wpr-grid.wpr-media-grid { display: grid !important; grid-template-columns: repeat(4, 1fr); gap: 10px; height: auto !important; opacity: 1 !important; }
.wpr-grid.wpr-media-grid > .wpr-grid-item { position: relative !important; inset: auto !important; width: 100% !important; margin: 0 !important; display: block; opacity: 1 !important; transform: none !important; }
.wpr-grid-image-wrap { cursor: zoom-in; }
#image-lightbox { border: 0; padding: 0; background: transparent; overflow: visible; max-width: 94vw; max-height: 94vh; }
#image-lightbox::backdrop { background: #000e; }
#image-lightbox img { max-height: 88vh; max-width: 90vw; width: auto; display: block; object-fit: contain; }
#image-lightbox button { position: absolute; right: 0; top: -40px; background: transparent; color: white; border: 0; padding: 0 10px; font-size: 32px; cursor: pointer; }
/* `.elementor-wrapper` sizes itself via `aspect-ratio` (per-widget
   `--video-aspect-ratio`, set inline per element), but this inner box had
   no `height` of its own — it collapsed to its `min-height` floor instead
   of filling that square/16:9 box, leaving empty background below the
   video in two-column sections ("Dlaczego warto?", "Pozowanie to sztuka"
   on /strefa-bikini/). */
.elementor-video { position: relative; height: 100%; background-color: #101114; }
.migration-video-play { position: absolute; inset: 0; margin: auto; width: 76px; height: 76px; border-radius: 50%; background: rgba(16,17,20,.72); color: #fff; border: 0; font-size: 28px; line-height: 76px; text-align: center; padding: 0 0 0 6px; cursor: pointer; }
.elementor-video iframe { width: 100%; height: 100%; border: 0; }
.forminator-ui select { width: 100%; height: 44px; min-height: 44px; padding: 6px 8px; background: #ededed; color: #333; border: 3px solid #777771; }
form.forminator-ui { margin: 0 !important; }
.elementor-shortcode:has(form.forminator-ui) { padding-bottom: 30px; }
.forminator-response-message:not(:empty) { padding: 16px; background: #fff; color: #333; border-left: 3px solid #049bd3; margin-bottom: 20px; }
@media (max-width: 1024px) { .wpr-grid.wpr-media-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 767px) { .migration-testimonials > .wpr-testimonial-item { flex-basis: 100%; } .wpr-grid.wpr-media-grid { grid-template-columns: repeat(2, 1fr); } }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *,*::before,*::after { animation-duration: .01ms !important; transition-duration: .01ms !important; } }
