/* Lekker Peptides overrides. Printed last in the head via Additional CSS.
   Breakpoints match Astra: 921px tablet, 544px mobile. */

/* --- Mobile menu drawer: remove the white bands behind the menu --- */
#ast-mobile-popup .ast-mobile-popup-inner,
#ast-mobile-popup .ast-mobile-popup-content { background-color: #12266B !important; }
#ast-mobile-popup .ast-builder-menu,
#ast-mobile-popup .ast-builder-menu *,
#ast-mobile-popup .main-header-menu,
#ast-mobile-popup .main-header-menu *,
#ast-mobile-popup .ast-nav-menu,
#ast-mobile-popup .ast-nav-menu * { background-color: transparent !important; }
#ast-mobile-popup .menu-item > .menu-link,
#ast-mobile-popup .menu-item > a { color: #FFFFFF !important; padding: 11px 18px !important; font-size: 0.9rem !important; }
#ast-mobile-popup .menu-item { border-bottom: 1px solid rgba(255,255,255,0.12) !important; }
#ast-mobile-popup .menu-item:last-child { border-bottom: 0 !important; }
#ast-mobile-popup .current-menu-item > .menu-link { color: #7FA6F2 !important; background-color: rgba(255,255,255,0.08) !important; }
#ast-mobile-popup .menu-toggle-close,
#ast-mobile-popup .menu-toggle-close svg { color: #FFFFFF !important; fill: #FFFFFF !important; }
#ast-mobile-popup .ast-mobile-popup-header { padding: 4px 10px 0 !important; min-height: 0 !important; }

/* --- FAQ page --- */
.lpb-faq-nav { display: flex !important; flex-wrap: wrap; gap: 8px; margin: 0 0 26px !important; }
.lpb-faq-nav a { display: inline-block !important; padding: 7px 14px !important; background: #FFFFFF !important; color: #0B1B3A !important; border: 1px solid #D6DEEC !important; border-radius: 999px !important; font-size: 0.8rem !important; font-weight: 700 !important; text-decoration: none !important; }
.lpb-faq-lead { font-size: 1rem !important; line-height: 1.65 !important; color: #54658A !important; max-width: 68ch; }
.wp-block-details { background: #FFFFFF !important; border: 1px solid #D6DEEC !important; border-radius: 4px !important; margin: 0 0 8px !important; padding: 0 !important; overflow: hidden; }
.wp-block-details[open] { border-color: #2B4ACB !important; }
.wp-block-details summary { list-style: none !important; cursor: pointer; position: relative; padding: 15px 46px 15px 18px !important; font-weight: 700 !important; color: #0B1B3A !important; }
.wp-block-details summary::-webkit-details-marker { display: none !important; }
.wp-block-details summary::marker { content: "" !important; }
.wp-block-details summary::after { content: ""; position: absolute; right: 20px; top: 50%; width: 8px; height: 8px; margin-top: -6px; border-right: 2px solid #2B4ACB; border-bottom: 2px solid #2B4ACB; transform: rotate(45deg); }
.wp-block-details[open] summary::after { transform: rotate(-135deg); margin-top: -2px; }
.wp-block-details > :not(summary) { padding-left: 18px !important; padding-right: 18px !important; color: #54658A; }
.wp-block-details p { margin: 0 0 12px !important; line-height: 1.65; }
.wp-block-details > p:last-child { padding-bottom: 16px !important; }

/* --- Headings: cap the size on anything narrower than a desktop --- */
@media (max-width: 921px) {
  h1, .entry-content h1, .entry-title, .page-title { font-size: 28px !important; line-height: 1.25 !important; }
  h2, .entry-content h2 { font-size: 22px !important; line-height: 1.3 !important; }
  h3, .entry-content h3 { font-size: 18px !important; line-height: 1.35 !important; }
  h4, .entry-content h4 { font-size: 17px !important; }
  .entry-content h2.wp-block-heading { margin: 26px 0 12px !important; padding-top: 14px !important; border-top: 2px solid #0B1B3A; scroll-margin-top: 90px; }
  .entry-content h2.wp-block-heading:first-of-type { margin-top: 0 !important; }
}

/* --- Footer: two columns and tight spacing on tablet and phone --- */
@media (max-width: 921px) {
  .site-primary-footer-wrap .ast-builder-grid-row { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; grid-column-gap: 14px !important; grid-row-gap: 16px !important; }
  .site-primary-footer-wrap[data-section] { padding-top: 22px !important; padding-bottom: 22px !important; }
  .site-primary-footer-wrap .footer-widget-area { margin: 0 !important; }
  .site-primary-footer-wrap .widget { margin-bottom: 0 !important; }
  .site-primary-footer-wrap .widget-title,
  .site-primary-footer-wrap h2.widget-title,
  .site-primary-footer-wrap .footer-widget-area h2 { font-size: 12px !important; line-height: 1.3 !important; font-weight: 700 !important; letter-spacing: 0.1em !important; text-transform: uppercase !important; margin: 0 0 5px !important; color: #0B1B3A !important; }
  .site-primary-footer-wrap .menu { margin: 0 !important; padding: 0 !important; }
  .site-primary-footer-wrap .menu li { margin: 0 !important; }
  .site-primary-footer-wrap .menu a,
  .site-primary-footer-wrap .menu .menu-link { display: block !important; padding: 1px 0 !important; font-size: 13px !important; line-height: 1.45 !important; }
  .site-below-footer-wrap { min-height: 0 !important; }
  .site-below-footer-wrap[data-section] { padding-top: 12px !important; padding-bottom: 12px !important; }
  .site-below-footer-wrap .ast-footer-copyright p { font-size: 12px !important; line-height: 1.45 !important; margin: 0 !important; }
}

/* --- Drawer refinement: Astra gives mobile menu links a 3em line-height,
       which is what made every row about 65px tall. ------------------------- */
#ast-mobile-popup .ast-mobile-popup-content { padding: 0 !important; }
#ast-mobile-popup .ast-mobile-popup-header { padding: 4px 6px 0 !important; min-height: 0 !important; }
#ast-mobile-popup .ast-mobile-popup-content > *,
#ast-mobile-popup .ast-builder-layout-element,
#ast-mobile-popup .site-header-section { margin: 0 !important; padding: 0 !important; min-height: 0 !important; }
#ast-mobile-popup .menu-item > .menu-link,
#ast-mobile-popup .menu-item > a {
  line-height: 1.25 !important; min-height: 0 !important; height: auto !important;
  padding: 14px 20px !important; font-size: 0.95rem !important; font-weight: 600 !important;
  letter-spacing: 0.04em !important;
}
#ast-mobile-popup .menu-item { border-bottom: 1px solid rgba(255,255,255,0.13) !important; }
#ast-mobile-popup .sub-menu .menu-item > .menu-link { padding-left: 34px !important; font-size: 0.88rem !important; font-weight: 400 !important; color: #C7D6F7 !important; }
#ast-mobile-popup .ast-header-account { padding: 0 !important; margin: 0 !important; }
#ast-mobile-popup .ast-header-account-wrap { width: 100% !important; }
#ast-mobile-popup .ast-header-account-link {
  display: flex !important; align-items: center; gap: 10px;
  padding: 12px 20px !important; color: #7FA6F2 !important;
  font-size: 0.72rem !important; font-weight: 700 !important;
  letter-spacing: 0.12em !important; text-transform: uppercase !important;
  border-bottom: 1px solid rgba(255,255,255,0.13) !important;
}
#ast-mobile-popup .ast-header-account-link img,
#ast-mobile-popup .ast-header-account-link svg { width: 18px !important; height: 18px !important; }
#ast-mobile-popup .ast-header-account-link::after { content: "My account"; }
#ast-mobile-popup .menu-toggle-close { font-size: 18px !important; padding: 8px !important; }

/* --- Shop archive: lift the filters above the grid on small screens ------- */
.lp-filters { border: 0; margin: 0; padding: 0; }
.lp-filters > .lp-filters__toggle { display: none; }

@media (max-width: 921px) {
  /* Astra stacks the sidebar after the content, so re-order the column. */
  .woocommerce.archive .ast-container,
  .post-type-archive-product .ast-container,
  .tax-product_cat .ast-container { display: flex !important; flex-direction: column !important; }
  .woocommerce.archive #secondary,
  .post-type-archive-product #secondary,
  .tax-product_cat #secondary { order: -1 !important; width: 100% !important; margin: 0 0 14px !important; padding: 0 !important; }
  .woocommerce.archive #primary,
  .post-type-archive-product #primary,
  .tax-product_cat #primary { order: 0 !important; width: 100% !important; margin: 0 !important; }

  #secondary .widget { background: transparent !important; border: 0 !important; padding: 0 !important; margin: 0 !important; box-shadow: none !important; }
  #secondary .lp-filters { background: #FFFFFF; border: 1px solid #D6DEEC; border-radius: 6px; overflow: hidden; }
  #secondary .lp-filters > .lp-filters__toggle {
    display: flex !important; align-items: center; justify-content: space-between;
    list-style: none; cursor: pointer; padding: 12px 16px;
    font-size: 12px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;
    color: #0B1B3A; background: #FFFFFF;
  }
  #secondary .lp-filters > .lp-filters__toggle::-webkit-details-marker { display: none; }
  #secondary .lp-filters > .lp-filters__toggle::marker { content: ""; }
  #secondary .lp-filters > .lp-filters__toggle::after {
    content: ""; width: 8px; height: 8px; margin-left: 12px;
    border-right: 2px solid #2B4ACB; border-bottom: 2px solid #2B4ACB;
    transform: rotate(45deg) translateY(-2px);
  }
  #secondary .lp-filters[open] > .lp-filters__toggle::after { transform: rotate(-135deg) translateY(-2px); }
  #secondary .lp-filters[open] > .lp-filters__toggle { border-bottom: 1px solid #D6DEEC; }
  #secondary .lp-filters__body { padding: 14px 16px 16px; }

  #secondary .widget + .widget { margin-top: 16px !important; }
  #secondary .widget-title, #secondary .widgettitle, #secondary h2 {
    font-size: 11px !important; font-weight: 700 !important; letter-spacing: 0.1em !important;
    text-transform: uppercase !important; color: #54658A !important; margin: 0 0 8px !important;
  }

  /* Categories as a two-up list rather than one long column. */
  #secondary .product-categories { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2px 12px; margin: 0; padding: 0; list-style: none; }
  #secondary .product-categories li { margin: 0 !important; padding: 0 !important; border: 0 !important; }
  #secondary .product-categories a { font-size: 13px; line-height: 1.6; }
  #secondary .product-categories .count { color: #54658A; font-size: 12px; }

  #secondary .price_slider_wrapper { margin: 0; }
  #secondary .price_slider_amount { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 10px; font-size: 13px; }
  #secondary .price_slider_amount .button { padding: 7px 16px !important; font-size: 12px !important; letter-spacing: 0.08em; }
  #secondary .price_slider_amount .price_label { font-size: 12px; color: #54658A; }
}

/* ==========================================================================
   Stage 1: green accents on the navy base, announcement bar, dark footer.
   Lime is used only as a background behind dark text or as a small accent.
   It is never used for body-copy links: #8CC63F on white is about 1.9:1.
   ========================================================================== */
:root {
  --lp-lime: #8CC63F;
  --lp-lime-d: #74A82F;
  --lp-lime-pale: #EEF6E0;
  --lp-navy: #12266B;
  --lp-ink: #0B1B3A;
  --lp-ink-deep: #08142B;
  --lp-sky: #7FA6F2;
  --lp-line: #D6DEEC;
}

/* --- Header --------------------------------------------------------------- */
.main-header-menu .menu-item > .menu-link { position: relative; }
.ast-desktop .main-header-menu > .menu-item > .menu-link::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 2px; height: 2px;
  background: var(--lp-lime); transform: scaleX(0); transform-origin: left;
  transition: transform 0.18s ease;
}
.ast-desktop .main-header-menu > .menu-item:hover > .menu-link::after,
.ast-desktop .main-header-menu > .current-menu-item > .menu-link::after,
.ast-desktop .main-header-menu > .current-menu-ancestor > .menu-link::after { transform: scaleX(1); }
.ast-desktop .main-header-menu > .menu-item:hover > .menu-link,
.ast-desktop .main-header-menu > .current-menu-item > .menu-link { color: var(--lp-lime) !important; }
.ast-header-woo-cart .ast-cart-menu-wrap .ast-count { background: var(--lp-lime) !important; color: var(--lp-ink) !important; }

/* --- Buttons: lime with ink text, the mockup's primary action ------------- */
.ast-button, .button, .wp-block-button__link, input[type="submit"],
.woocommerce a.button, .woocommerce button.button, .woocommerce input.button,
.woocommerce .single_add_to_cart_button, .woocommerce a.checkout-button,
.wc-block-components-button, .lpb-news button, .lp-contact-form button {
  background-color: var(--lp-lime) !important;
  border-color: var(--lp-lime) !important;
  color: var(--lp-ink) !important;
  font-weight: 700 !important;
  letter-spacing: 0.04em;
  border-radius: 999px !important;
}
.ast-button:hover, .button:hover, .wp-block-button__link:hover, input[type="submit"]:hover,
.woocommerce a.button:hover, .woocommerce button.button:hover, .woocommerce input.button:hover,
.woocommerce .single_add_to_cart_button:hover, .woocommerce a.checkout-button:hover,
.wc-block-components-button:hover, .lpb-news button:hover, .lp-contact-form button:hover {
  background-color: var(--lp-lime-d) !important;
  border-color: var(--lp-lime-d) !important;
  color: #FFFFFF !important;
}
/* Secondary action keeps the navy outline of the mockup's second button. */
.woocommerce a.button.added_to_cart, .ast-outline-button {
  background: transparent !important; color: var(--lp-navy) !important;
  border: 1px solid var(--lp-navy) !important;
}

/* --- Small accents -------------------------------------------------------- */
.woocommerce .stock.in-stock { color: var(--lp-lime-d) !important; font-weight: 600; }
.woocommerce .stock.in-stock::before { content: "\25CF"; margin-right: 6px; color: var(--lp-lime); }
.woocommerce span.onsale { background: var(--lp-lime) !important; color: var(--lp-ink) !important; }
.wp-block-details[open], .lp-filters[open] { border-color: var(--lp-lime) !important; }
.wp-block-details summary::after { border-color: var(--lp-lime-d) !important; }
.lpb-faq-nav a:hover, .lpb-faq-nav a:focus { border-color: var(--lp-lime) !important; color: var(--lp-lime-d) !important; }

/* --- Footer: dark navy, the mockup's anchor band -------------------------- */
.site-footer { background-color: var(--lp-ink) !important; }
.site-primary-footer-wrap[data-section],
.site-above-footer-wrap[data-section] { background-color: var(--lp-ink) !important; border-top-color: rgba(255,255,255,0.10) !important; }
.site-below-footer-wrap[data-section] { background-color: var(--lp-ink-deep) !important; border-top: 1px solid rgba(255,255,255,0.08) !important; }

.site-primary-footer-wrap .widget-title,
.site-primary-footer-wrap h2.widget-title,
.site-primary-footer-wrap .footer-widget-area h2 { color: var(--lp-lime) !important; }
.site-primary-footer-wrap .footer-widget-area-inner,
.site-primary-footer-wrap .menu a,
.site-primary-footer-wrap .menu .menu-link { color: #C7D6F7 !important; }
.site-primary-footer-wrap .menu a:hover,
.site-primary-footer-wrap .menu .menu-link:hover { color: var(--lp-lime) !important; }
.site-below-footer-wrap .ast-footer-copyright p,
.site-below-footer-wrap .ast-footer-copyright { color: #8FA3C9 !important; }
.site-below-footer-wrap a { color: #C7D6F7 !important; }

/* Newsletter strip sitting above the footer columns. */
.site-above-footer-wrap[data-section] { padding-top: 30px !important; padding-bottom: 30px !important; }
.site-above-footer-wrap .lpb-news { background: var(--lp-navy) !important; border: 1px solid rgba(255,255,255,0.10); }
@media (max-width: 921px) {
  .site-above-footer-wrap[data-section] { padding-top: 20px !important; padding-bottom: 20px !important; padding-left: 18px !important; padding-right: 18px !important; }
  .site-above-footer-wrap .lpb-news { padding: 20px 18px !important; }
  .site-above-footer-wrap .lpb-news h2 { font-size: 18px !important; margin-bottom: 6px !important; }
  .site-above-footer-wrap .lpb-news p { font-size: 13px !important; margin-bottom: 12px !important; }
  .site-above-footer-wrap .lpb-news form { gap: 8px !important; }
}

/* ===== Stage 2: category tiles and product cards ===== */

/* --- Category carousel (Stage 58) ---------------------------------------- */
.lp-carousel { position: relative; }
.lp-carousel__nav[hidden] { display: none !important; }
.lp-carousel__nav {
  position: absolute; top: 36px; z-index: 3; padding: 0; cursor: pointer;
  width: 40px; height: 40px; border-radius: 50%; border: 1px solid #D6DEEC;
  background: #FFFFFF; color: #12266B;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 6px 18px rgba(11, 27, 58, 0.12);
  transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease, color 0.18s ease;
}
.lp-carousel__nav svg { width: 18px; height: 18px; }
.lp-carousel__nav--prev { left: -18px; }
.lp-carousel__nav--next { right: -18px; }
.lp-carousel__nav:hover { background: #2B4ACB; border-color: #2B4ACB; color: #FFFFFF; transform: scale(1.06); }
.lp-carousel__nav:disabled { opacity: 0; pointer-events: none; }
.lp-carousel__nav:focus-visible { outline: 2px solid #2B4ACB; outline-offset: 2px; }
.lp-carousel__play[hidden] { display: none !important; }
.lp-carousel__play {
  position: absolute; right: 0; bottom: -2px; z-index: 3; padding: 0; cursor: pointer;
  width: 30px; height: 30px; border-radius: 50%; border: 1px solid #D6DEEC;
  background: #FFFFFF; color: #54658A; opacity: 0.5;
  display: flex; align-items: center; justify-content: center;
  transition: opacity 0.18s ease, color 0.18s ease, border-color 0.18s ease;
}
.lp-carousel:hover .lp-carousel__play, .lp-carousel__play:hover { opacity: 1; color: #2B4ACB; border-color: #2B4ACB; }
.lp-carousel__play:focus-visible { opacity: 1; outline: 2px solid #2B4ACB; outline-offset: 2px; }
.lp-carousel__play svg { width: 13px; height: 13px; }
.lp-carousel__ico--play { display: none; fill: currentColor; stroke: none; }
.lp-carousel.is-paused .lp-carousel__ico--play { display: block; }
.lp-carousel.is-paused .lp-carousel__ico--pause { display: none; }
.lp-carousel.is-paused .lp-carousel__play { opacity: 1; }
.lp-tiles {
  display: flex; gap: 18px; overflow-x: auto; overflow-y: hidden;
  scroll-snap-type: x proximity; scroll-behavior: smooth;
  padding: 14px 2px 26px; margin: -14px -2px -18px;
  -webkit-overflow-scrolling: touch; scrollbar-width: none; -ms-overflow-style: none;
  transition: -webkit-mask-image 0.2s ease, mask-image 0.2s ease;
}
.lp-tiles::-webkit-scrollbar { display: none; }
.lp-carousel.is-scrollable .lp-tiles {
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 44px, #000 calc(100% - 52px), transparent 100%);
  mask-image: linear-gradient(90deg, transparent 0, #000 44px, #000 calc(100% - 52px), transparent 100%);
}
.lp-carousel.is-scrollable.at-start .lp-tiles {
  -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 52px), transparent 100%);
  mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 52px), transparent 100%);
}
.lp-carousel.is-scrollable.at-end .lp-tiles {
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 44px, #000 100%);
  mask-image: linear-gradient(90deg, transparent 0, #000 44px, #000 100%);
}
.lp-tile {
  flex: 0 0 calc((100% - 72px) / 5); scroll-snap-align: start;
  display: flex; flex-direction: column; align-items: center; gap: 10px; text-decoration: none;
}
.lp-tile__disc {
  width: 84px; height: 84px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  transition: transform 0.25s cubic-bezier(0.2, 0.7, 0.3, 1), box-shadow 0.25s ease;
}
.lp-tile__disc svg { width: 36px; height: 36px; }
.lp-tile:hover .lp-tile__disc { transform: translateY(-5px) scale(1.04); box-shadow: 0 10px 22px rgba(11, 27, 58, 0.14); }
.lp-tile--0 .lp-tile__disc { background: #DCEFB0; color: #4A7C2B; }
.lp-tile--1 .lp-tile__disc { background: #FBE7B6; color: #8A6A2F; }
.lp-tile--2 .lp-tile__disc { background: #BFEFE4; color: #17705E; }
.lp-tile--3 .lp-tile__disc { background: #CDE9B4; color: #3F6E2A; }
.lp-tile--4 .lp-tile__disc { background: #CADCF8; color: #2B4ACB; }
.lp-tile__name { font-size: 0.95rem; font-weight: 600; color: #0B1B3A; text-align: center; line-height: 1.3; }
.lp-tile__arrow { color: #74A82F; margin-left: 6px; }
.lp-tile__count { font-size: 0.72rem; color: #54658A; letter-spacing: 0.02em; }
.lp-tile:hover .lp-tile__name { color: #74A82F; }
@keyframes lp-tile-in { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
.lp-carousel--anim .lp-tile { opacity: 0; }
.lp-carousel--anim.is-in .lp-tile {
  animation: lp-tile-in 0.5s cubic-bezier(0.2, 0.7, 0.3, 1) both;
  animation-delay: calc(var(--lp-tile-i, 0) * 70ms);
}
@media (max-width: 1100px) { .lp-tile { flex: 0 0 calc((100% - 54px) / 4); } }
@media (max-width: 921px) {
  .lp-tiles { gap: 14px; }
  .lp-tile { flex: 0 0 calc((100% - 28px) / 3); gap: 8px; }
  .lp-tile__disc { width: 64px; height: 64px; }
  .lp-tile__disc svg { width: 28px; height: 28px; }
  .lp-tile__name { font-size: 0.78rem; }
  .lp-tile__arrow { display: none; }
  .lp-tile__count { font-size: 0.66rem; }
  .lp-carousel__nav { display: none !important; }
}
@media (max-width: 544px) { .lp-tile { flex: 0 0 calc((100% - 28px) / 2.4); } }
@media (prefers-reduced-motion: reduce) {
  .lp-tiles { scroll-behavior: auto; }
  .lp-carousel--anim .lp-tile { opacity: 1; animation: none; }
  .lp-tile:hover .lp-tile__disc { transform: none; }
}

/* --- Product cards: home row and the shop archive share one look ---------- */
.lp-cards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
.lp-card {
  display: flex; flex-direction: column; background: #FFFFFF;
  border: 1px solid #D6DEEC; border-radius: 8px; padding: 14px;
  transition: border-color 0.18s ease, box-shadow 0.18s ease;
}
.lp-card:hover { border-color: #8CC63F; box-shadow: 0 6px 18px rgba(11,27,58,0.07); }
.lp-card__art { display: block; margin-bottom: 12px; }
.lp-card__art img { width: 100%; height: auto; aspect-ratio: 1 / 1; object-fit: cover; border-radius: 6px; display: block; }
.lp-card__name { font-size: 0.95rem; font-weight: 700; line-height: 1.3; color: #0B1B3A !important; text-decoration: none; }
.lp-card__name:hover { color: #2B4ACB !important; }
.lp-card__sub { font-size: 0.78rem; line-height: 1.45; color: #54658A; margin: 5px 0 0; }
.lp-card__price { font-size: 1rem; font-weight: 700; color: #0B1B3A; margin: 10px 0 0; }
.lp-card__price del { font-weight: 400; color: #54658A; font-size: 0.85rem; margin-right: 6px; }
.lp-card__stock { font-size: 0.75rem; margin: 4px 0 0; font-weight: 600; }
.lp-card__stock.is-in { color: #4A7C2B; }
.lp-card__stock.is-in::before { content: "\25CF"; margin-right: 6px; color: #8CC63F; }
.lp-card__stock.is-out { color: #A33; }
.lp-card__buy { display: flex; gap: 8px; margin-top: auto; padding-top: 12px; }
.lp-card__buy input[type="number"] {
  width: 58px; flex: 0 0 58px; padding: 7px 8px; font-size: 0.85rem; text-align: center;
  border: 1px solid #D6DEEC; border-radius: 6px; background: #FFFFFF; color: #0B1B3A;
}
.lp-card__buy button { flex: 1 1 auto; padding: 8px 10px !important; font-size: 0.78rem !important; white-space: nowrap; }
.lp-card__view { margin-top: auto; padding-top: 12px; font-size: 0.8rem; font-weight: 700; color: #2B4ACB; }

@media (max-width: 921px) { .lp-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } }
@media (max-width: 480px) {
  .lp-card { padding: 10px; }
  .lp-card__name { font-size: 0.85rem; }
  .lp-card__sub { display: none; }
  .lp-card__price { font-size: 0.92rem; }
  .lp-card__buy { flex-direction: column; gap: 6px; }
  .lp-card__buy input[type="number"] { width: 100%; flex: 1 1 auto; }
}

/* ===== Stage 3: shop archive cards ===== */

/* --- Shop archive cards, matched to the home row -------------------------- */
.woocommerce ul.products li.product .lp-loop-buy { display: flex; gap: 8px; margin: 10px 0 0; }
.woocommerce ul.products li.product .lp-loop-buy input[type="number"] {
  width: 56px; flex: 0 0 56px; padding: 7px 6px; font-size: 0.85rem; text-align: center;
  border: 1px solid #D6DEEC; border-radius: 6px; background: #FFFFFF; color: #0B1B3A;
}
.woocommerce ul.products li.product .lp-loop-buy button {
  flex: 1 1 auto; padding: 8px 10px !important; font-size: 0.78rem !important;
  white-space: nowrap; margin: 0 !important;
}
.woocommerce ul.products li.product .ast-shop-product-out-of-stock { border-radius: 6px; }
.woocommerce ul.products li.product {
  background: #FFFFFF; border: 1px solid #D6DEEC; border-radius: 8px; padding: 14px;
  transition: border-color 0.18s ease, box-shadow 0.18s ease;
}
.woocommerce ul.products li.product:hover { border-color: #8CC63F; box-shadow: 0 6px 18px rgba(11,27,58,0.07); }
.woocommerce ul.products li.product img { border-radius: 6px; aspect-ratio: 1 / 1; object-fit: cover; }
.woocommerce ul.products li.product .woocommerce-loop-product__title {
  font-size: 0.95rem !important; font-weight: 700 !important; line-height: 1.3 !important;
  color: #0B1B3A !important; padding: 10px 0 0 !important;
}
.woocommerce ul.products li.product .price { font-size: 1rem !important; font-weight: 700 !important; color: #0B1B3A !important; margin: 6px 0 0 !important; }
.woocommerce ul.products li.product .price del { font-weight: 400; color: #54658A; font-size: 0.85rem; }

@media (max-width: 480px) {
  .woocommerce ul.products li.product { padding: 10px; }
  .woocommerce ul.products li.product .woocommerce-loop-product__title { font-size: 0.82rem !important; }
  .woocommerce ul.products li.product .price { font-size: 0.9rem !important; }
  .woocommerce ul.products li.product .lp-loop-buy { flex-direction: column; gap: 6px; }
  .woocommerce ul.products li.product .lp-loop-buy input[type="number"] { width: 100%; flex: 1 1 auto; }
}

/* One add to cart per card. Astra's modern style also paints a button over the
   image, which gave every product two competing actions. */
.woocommerce ul.products li.product .ast-on-card-button { display: none !important; }
.woocommerce ul.products li.product .astra-shop-thumbnail-wrap { margin-bottom: 0; }
.woocommerce ul.products li.product .lp-loop-view {
  display: inline-block; margin-top: 10px; font-size: 0.8rem; font-weight: 700; color: #2B4ACB;
}

/* ===== Stage 4: hero ===== */
.lp-hero {
  display: grid; align-items: center; gap: 28px;
  grid-template-columns: minmax(0,0.9fr) minmax(0,1.35fr) minmax(0,0.7fr);
  background: linear-gradient(180deg,#BFDEF5 0%,#DCEBF6 45%,#F3ECE0 100%);
  border-radius: 10px; padding: 0 34px 0 0; overflow: hidden;
}
.lp-hero__art { align-self: end; }
.lp-hero__art img { display: block; width: 100%; height: auto; }
.lp-hero__art--empty { min-height: 300px; background: linear-gradient(180deg,#CBE0F2,#E8DFD0); }
.lp-hero__title { margin: 0; font-weight: 700; line-height: 1.02; letter-spacing: -0.02em; color: #0B1B3A; font-size: clamp(30px, 4.6vw, 62px); }
.lp-hero__title span { display: block; color: #8CC63F; }
.lp-hero__sub { margin: 14px 0 0; color: #234; line-height: 1.5; font-size: clamp(14px, 1.35vw, 18px); max-width: 34ch; }
.lp-hero__cta { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 20px; }
.lp-hero__btn { display: inline-block; padding: 11px 22px; border-radius: 999px; font-weight: 700; font-size: 0.9rem; background: #8CC63F; color: #0B1B3A !important; text-decoration: none; }
.lp-hero__btn:hover { background: #74A82F; color: #FFFFFF !important; }
.lp-hero__btn--ghost { background: transparent; border: 1px solid #12266B; color: #12266B !important; }
.lp-hero__btn--ghost:hover { background: #12266B; color: #FFFFFF !important; }
.lp-hero__marks { list-style: none; margin: 0; padding: 0 0 0 22px; border-left: 1px solid rgba(11,27,58,0.18); display: grid; gap: 16px; }
.lp-hero__mark { display: flex; align-items: center; gap: 11px; font-size: 0.9rem; color: #0B1B3A; margin: 0; }
.lp-hero__disc { flex: 0 0 auto; width: 40px; height: 40px; border-radius: 50%; background: #CFE9A0; color: #3F6E2A; display: flex; align-items: center; justify-content: center; }
.lp-hero__disc svg { width: 20px; height: 20px; }

@media (max-width: 921px) {
  .lp-hero { grid-template-columns: 1fr; gap: 0; padding: 0; border-radius: 8px; }
  .lp-hero__art { order: 1; max-height: 260px; overflow: hidden; display: flex; align-items: flex-end; }
  .lp-hero__art img { object-fit: cover; object-position: 50% 22%; height: 260px; }
  .lp-hero__art--empty { min-height: 200px; }
  .lp-hero__copy { order: 2; padding: 20px 18px 0; }
  .lp-hero__sub { max-width: none; }
  .lp-hero__marks { order: 3; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 12px;
    border-left: 0; border-top: 1px solid rgba(11,27,58,0.14);
    margin: 20px 18px 0; padding: 18px 0 20px; }
  .lp-hero__mark { font-size: 0.8rem; gap: 9px; }
  .lp-hero__disc { width: 34px; height: 34px; }
  .lp-hero__disc svg { width: 17px; height: 17px; }
  .lp-hero__cta { margin-top: 16px; }
  .lp-hero__btn { padding: 10px 18px; font-size: 0.85rem; }
}
@media (max-width: 400px) {
  .lp-hero__marks { grid-template-columns: 1fr; gap: 10px; }
  .lp-hero__cta { flex-direction: column; }
  .lp-hero__btn { text-align: center; }
}

/* ===== Stage 5: newsletter, tightened ===== */
.lpb-news { padding: 26px 26px !important; border-radius: 8px; }
.lpb-news h2 { font-size: 20px !important; line-height: 1.25 !important; margin: 0 0 6px !important; font-weight: 700; color: #FFFFFF !important; }
.lpb-news p { font-size: 14px !important; line-height: 1.5 !important; color: #9DB6E8 !important; margin: 0 0 14px !important; max-width: 46ch; }
.lpb-news form { display: flex; flex-wrap: nowrap; gap: 8px; max-width: 440px; margin: 0; }
.lpb-news input[type="email"] { flex: 1 1 auto; min-width: 0; padding: 11px 14px !important; font-size: 14px !important; border-radius: 6px !important; }
.lpb-news button { flex: 0 0 auto; padding: 11px 20px !important; font-size: 13px !important; letter-spacing: 0.06em; }
.lpb-news__done { color: #CFE9A0 !important; font-weight: 600; margin: 0 !important; }

.site-above-footer-wrap .lpb-news { padding: 22px 22px !important; }

@media (max-width: 921px) {
  .lpb-news { padding: 20px 18px !important; }
  .lpb-news h2 { font-size: 17px !important; }
  .lpb-news p { font-size: 13px !important; margin: 0 0 12px !important; }
  .lpb-news form { gap: 7px; }
  .lpb-news input[type="email"] { padding: 10px 12px !important; font-size: 13px !important; }
  .lpb-news button { padding: 10px 14px !important; font-size: 12px !important; }
  .site-above-footer-wrap .lpb-news { padding: 18px 16px !important; }
}
@media (max-width: 380px) {
  .lpb-news form { flex-wrap: wrap; }
  .lpb-news input[type="email"], .lpb-news button { flex: 1 1 100%; }
}

/* ===== Stage 6: four-up alignment, desktop only ===== */
/* Scoped to min-width so the mobile stack is untouched. Column four wraps to a
   second line, which pushed its body copy out of step with the other three. */
@media (min-width: 922px) {
  .elementor-element-2b0108 { align-items: flex-start !important; }
  .elementor-element-2b0108 > .e-con { justify-content: flex-start !important; }
  .elementor-element-2b0108 .elementor-widget-heading .elementor-heading-title {
    min-height: 2.6em;
    display: block;
  }
  .elementor-element-2b0108 .elementor-widget-text-editor p { margin-top: 0; }
}

/* ===== Stage 7: announcement bar ===== */
/* Astra wraps the HTML widget content in a <p>, so the flex container has to be
   that paragraph. Putting it on .ast-builder-html-element made the <p> a single
   flex item and left the three spans running together. */
.ast-above-header-wrap .ast-grid-section-center { flex: 1 1 auto; }
.ast-above-header-wrap .ast-header-html-1,
.ast-above-header-wrap .ast-header-html,
.ast-above-header-wrap .ast-builder-html-element { width: 100%; display: block; }
.ast-above-header-wrap .ast-builder-html-element > p {
  display: flex; align-items: center; justify-content: space-between;
  gap: 24px; margin: 0; width: 100%; max-width: 1200px; margin-left: auto; margin-right: auto;
}
.lp-ann__i { font-size: 12px; line-height: 1.3; letter-spacing: 0.02em; color: #0B1B3A; white-space: nowrap; }
.lp-ann__i--del::before { content: "\2713"; margin-right: 7px; color: #74A82F; font-weight: 700; }
.lp-ann__i--mid { letter-spacing: 0.14em; text-transform: uppercase; font-weight: 700; font-size: 11px; color: #74A82F; }
.lp-ann__i--sa::before { content: "\2022"; margin-right: 7px; color: #74A82F; font-weight: 700; }

@media (max-width: 921px) {
  .ast-above-header-wrap .ast-builder-html-element > p { justify-content: center; gap: 0; }
  .lp-ann__i--mid, .lp-ann__i--sa { display: none; }
  .lp-ann__i { font-size: 11px; }
}

/* ===== Stage 8: brand video ===== */
.lp-brandvid { text-align: center; line-height: 0; }
.lp-brandvid video { width: 100%; max-width: 438px; height: auto; display: inline-block; border-radius: 10px; background: #F4F6FB; }
@media (max-width: 600px) { .lp-brandvid video { max-width: 313px; } }


/* ===== Stage 9: checkout coupon box ===== */
.lp-coupon { margin: 0 0 18px; padding: 4px 0 0; }

/* An author rule of display:flex beats the browser [hidden] rule, so the
   closed state has to be stated explicitly or the drawer never shuts. */
.lp-coupon__row { display: flex; gap: 8px; margin-top: 12px; }
.lp-coupon__row[hidden] { display: none !important; }

.lp-coupon__toggle,
.lp-coupon__toggle:hover,
.lp-coupon__toggle:focus {
  display: inline-flex !important; align-items: center; gap: 8px;
  background: none !important; border: 0 !important; box-shadow: none !important;
  padding: 0 !important; margin: 0 !important; border-radius: 0 !important;
  color: #2B4ACB !important; font-size: 0.88rem !important; font-weight: 700 !important;
  letter-spacing: 0 !important; text-transform: none !important; text-decoration: none !important;
  line-height: 1.4 !important; cursor: pointer; width: auto !important; min-height: 0 !important;
}
.lp-coupon__toggle:hover { color: #74A82F !important; }
.lp-coupon__toggle::after {
  content: ""; width: 7px; height: 7px; margin-top: -3px;
  border-right: 2px solid currentColor; border-bottom: 2px solid currentColor;
  transform: rotate(45deg); transition: transform 0.18s ease;
}
.lp-coupon.is-open .lp-coupon__toggle::after { transform: rotate(-135deg); margin-top: 2px; }

.lp-coupon__input {
  flex: 1 1 auto; min-width: 0; margin: 0 !important;
  padding: 11px 13px !important; font-size: 0.9rem !important; line-height: 1.3 !important;
  height: auto !important; min-height: 0 !important;
  border: 1px solid #D6DEEC !important; border-radius: 6px !important;
  background: #FFFFFF !important; color: #0B1B3A !important;
}
.lp-coupon__apply,
.lp-coupon__apply:hover,
.lp-coupon__apply:focus {
  flex: 0 0 auto; width: auto !important; margin: 0 !important;
  padding: 11px 22px !important; font-size: 0.8rem !important; line-height: 1.2 !important;
  height: auto !important; min-height: 0 !important; white-space: nowrap;
  background-color: #8CC63F !important; border: 1px solid #8CC63F !important;
  color: #0B1B3A !important; font-weight: 700 !important; letter-spacing: 0.04em !important;
  text-transform: none !important; border-radius: 999px !important; cursor: pointer;
}
.lp-coupon__apply:hover { background-color: #74A82F !important; border-color: #74A82F !important; color: #FFFFFF !important; }
.lp-coupon__apply[disabled] { opacity: 0.55; cursor: default; }

.lp-coupon__list { list-style: none; margin: 0 0 10px; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.lp-coupon__list li {
  display: inline-flex; align-items: center; gap: 8px; margin: 0;
  background: #EEF6E0; border: 1px solid #CFE9A0; border-radius: 999px; padding: 5px 8px 5px 12px;
  font-size: 0.76rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: #3F6E2A;
}
.lp-coupon__remove,
.lp-coupon__remove:hover {
  background: none !important; border: 0 !important; box-shadow: none !important;
  padding: 0 4px !important; margin: 0 !important; border-radius: 0 !important;
  color: #54658A !important; font-size: 0.68rem !important; font-weight: 400 !important;
  text-transform: none !important; letter-spacing: 0 !important; text-decoration: underline;
  cursor: pointer; width: auto !important; min-height: 0 !important;
}
.lp-coupon__remove:hover { color: #A33 !important; }

.lp-coupon__msg { font-size: 0.8rem; line-height: 1.5; }
.lp-coupon__msg:not(:empty) { margin-top: 10px; }
.lp-coupon__msg .woocommerce-error,
.lp-coupon__msg .woocommerce-message {
  margin: 0 !important; padding: 8px 12px !important; font-size: 0.8rem !important; list-style: none;
}

@media (max-width: 420px) {
  .lp-coupon__row { flex-wrap: wrap; }
  .lp-coupon__input { flex: 1 1 100%; }
  .lp-coupon__apply { flex: 1 1 100%; text-align: center; }
}
/* ===== Stage 10: newsletter name field ===== */
/* The direct-child selector keeps the off-screen honeypot out of this. */
.lpb-news form > input[type="text"],
.lpb-news input[type="email"] {
  padding: 11px 14px !important; font-size: 14px !important; line-height: 1.3 !important;
  height: auto !important; min-height: 0 !important;
  border: 1px solid #FFFFFF !important; border-radius: 6px !important;
  background: #FFFFFF; color: #0B1B3A; margin: 0 !important;
}
.lpb-news form { display: flex; flex-wrap: wrap; gap: 8px; max-width: 460px; margin: 0; }
.lpb-news form > input[type="text"] { flex: 1 1 130px; min-width: 0; }
.lpb-news input[type="email"] { flex: 2 1 180px; min-width: 0; }
.lpb-news button { flex: 0 0 auto; }

@media (max-width: 921px) {
  .lpb-news form > input[type="text"],
  .lpb-news input[type="email"] { padding: 10px 12px !important; font-size: 13px !important; }
  .lpb-news form > input[type="text"] { flex: 1 1 100%; }
  .lpb-news input[type="email"] { flex: 1 1 auto; }
}
@media (max-width: 380px) {
  .lpb-news form > input[type="text"],
  .lpb-news input[type="email"],
  .lpb-news button { flex: 1 1 100%; }
}


/* --- Stage 11: shop archive header band, handsets only ------------------
   Astra sets .ast-separate-container #primary { padding: 4em 0 } and below
   993px only zeroes the left/right halves of that shorthand, so a 64px
   padding-top survived and sat as dead grey between the collapsed filter
   and the Store card. Desktop resolves to padding: 0 through Astra's own
   min-width:993px rule, so everything below is mobile-only by construction.
   ---------------------------------------------------------------------- */
@media (max-width: 921px) {
  .post-type-archive-product #primary,
  .tax-product_cat #primary {
    padding-top: 0 !important;
    padding-bottom: 1.8em !important;
  }

  .post-type-archive-product #secondary,
  .tax-product_cat #secondary { margin: 0 0 10px !important; }

  /* The title panel and the product panel are separate white boxes that meet
     with no margin, so they read as a single card. Trim the seam. */
  .post-type-archive-product .ast-archive-description,
  .tax-product_cat .ast-archive-description { padding: 16px 16px 0 !important; }

  .post-type-archive-product .ast-archive-description .ast-archive-title,
  .tax-product_cat .ast-archive-description .ast-archive-title {
    margin-bottom: 0 !important;
    font-size: 24px !important;
    line-height: 1.2 !important;
  }

  .post-type-archive-product .ast-woocommerce-container,
  .tax-product_cat .ast-woocommerce-container { padding-top: 12px !important; }

  .woocommerce-products-header:empty { margin: 0 !important; padding: 0 !important; }

  .post-type-archive-product .woocommerce-result-count,
  .tax-product_cat .woocommerce-result-count { margin: 0 0 8px !important; font-size: 13px !important; }

  .post-type-archive-product .woocommerce-ordering,
  .tax-product_cat .woocommerce-ordering { margin: 0 0 14px !important; }
}


/* --- Stage 12: add-to-home-screen banner -------------------------------
   Shown only from a visitor's second session, never on cart or checkout.
   Modern Cart parks a fixed bubble at bottom 70px / z-index 9999, so the
   bubble is hidden while the banner is up rather than left to overlap it.
   ---------------------------------------------------------------------- */
.lp-install {
  position: fixed;
  left: 12px;
  right: 12px;
  bottom: 12px;
  z-index: 10001;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding: 12px 14px;
  background: #FFFFFF;
  border: 1px solid #D6DEEC;
  border-radius: 10px;
  box-shadow: 0 8px 26px rgba(11, 27, 58, 0.18);
  animation: lp-install-in 0.22s ease-out both;
}

@keyframes lp-install-in {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: none; }
}

.lp-install__copy { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.lp-install__copy strong { font-size: 13px; font-weight: 700; color: #0B1B3A; line-height: 1.3; }
.lp-install__copy span { font-size: 12px; color: #54658A; line-height: 1.35; }

.lp-install__row { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }

.lp-install__go {
  border: 0;
  border-radius: 6px;
  padding: 9px 16px;
  background: #8CC63F;
  color: #14300A;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  cursor: pointer;
}
.lp-install__go:hover { background: #74A82F; }

.lp-install__no {
  border: 0;
  background: none;
  padding: 9px 6px;
  color: #54658A;
  font-size: 12px;
  cursor: pointer;
}

body.lp-install-open #moderncart-floating-cart { display: none !important; }

@media (max-width: 420px) {
  .lp-install { flex-direction: column; align-items: stretch; gap: 10px; }
  .lp-install__row { justify-content: flex-end; }
}


/* --- Stage 13: Where to Inject -----------------------------------------
   Every rule is scoped to .lp-inject so nothing here can reach the shop or
   any other page. Site cards use auto-fit so the three-up collapses to one
   column on a handset without a second breakpoint.
   ---------------------------------------------------------------------- */
.lp-inject { color: #0B1B3A; }
.lp-inject h2 { font-size: 21px !important; line-height: 1.25 !important; margin: 2.2em 0 .6em !important; padding-bottom: .4em; border-bottom: 2px solid #D6DEEC; }
.lp-inject h2:first-of-type { margin-top: 1.4em !important; }
.lp-inject p { line-height: 1.65; }
.lp-inject .lp-lede { color: #54658A; margin-top: 0; }
.lp-inject .lp-small { font-size: 13px; color: #54658A; }

.lp-note { background: #F4F6FB; border-left: 4px solid #2B4ACB; border-radius: 0 6px 6px 0; padding: 14px 16px; font-size: 14px; line-height: 1.6; color: #12266B; }

.lp-pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 12px; }
.lp-pair__item { background: #FFF; border: 1px solid #D6DEEC; border-radius: 8px; padding: 14px 16px; }
.lp-pair__item p { margin: 8px 0 0; font-size: 14px; line-height: 1.55; }
.lp-tag { display: inline-block; padding: 4px 10px; border-radius: 3px; background: #12266B; color: #FFF; font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.lp-tag--alt { background: #54658A; }

.lp-sites { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 16px; margin: 1.2em 0; }
.lp-site { margin: 0; background: #FFF; border: 1px solid #D6DEEC; border-radius: 10px; overflow: hidden; display: flex; flex-direction: column; }
.lp-site img { display: block; width: 100%; height: auto; background: #F4F6FB; }
.lp-site figcaption { padding: 14px 16px 16px; position: relative; }
.lp-site figcaption strong { display: block; font-size: 15px; margin-bottom: 4px; padding-right: 34px; }
.lp-site figcaption span:not(.lp-site__n) { display: block; font-size: 13px; line-height: 1.55; color: #54658A; }
.lp-site__n { position: absolute; top: 12px; right: 14px; width: 24px; height: 24px; border-radius: 50%; background: #8CC63F; color: #14300A; font-size: 12px; font-weight: 700; display: flex; align-items: center; justify-content: center; }

.lp-rule { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 12px; margin: 1em 0; }
.lp-rule__i { background: #EEF6E0; border: 1px solid #C9E29A; border-radius: 8px; padding: 12px 14px; }
.lp-rule__i span { display: block; font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #4A7016; margin-bottom: 4px; }
.lp-rule__i p { margin: 0; font-size: 14px; line-height: 1.5; }

.lp-inject ul.lp-avoid, .lp-inject ul.lp-flag { list-style: none; margin: 1em 0; padding: 0; display: grid; gap: 8px; }
.lp-inject ul.lp-avoid li, .lp-inject ul.lp-flag li { position: relative; margin: 0; padding: 10px 14px 10px 40px; border-radius: 6px; font-size: 14px; line-height: 1.5; }
.lp-inject ul.lp-avoid li { background: #FDF2F2; border: 1px solid #F2CFCF; }
.lp-inject ul.lp-avoid li::before { content: ""; position: absolute; left: 14px; top: 50%; width: 13px; height: 2px; background: #B3261E; transform: translateY(-50%); }
.lp-inject ul.lp-flag li { background: #FFF8E8; border: 1px solid #F0DCA8; }
.lp-inject ul.lp-flag li::before { content: "!"; position: absolute; left: 14px; top: 50%; transform: translateY(-50%); width: 16px; height: 16px; border-radius: 50%; background: #9A5B00; color: #FFF; font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center; }

.lp-inject ol.lp-steps { list-style: none; margin: 1.2em 0; padding: 0; counter-reset: lpstep; display: grid; gap: 8px; }
.lp-inject ol.lp-steps li { counter-increment: lpstep; position: relative; margin: 0; padding: 12px 16px 12px 52px; background: #FFF; border: 1px solid #D6DEEC; border-radius: 8px; font-size: 14px; line-height: 1.55; color: #54658A; }
.lp-inject ol.lp-steps li strong { color: #0B1B3A; }
.lp-inject ol.lp-steps li::before { content: counter(lpstep); position: absolute; left: 14px; top: 12px; width: 24px; height: 24px; border-radius: 50%; background: #2B4ACB; color: #FFF; font-size: 12px; font-weight: 700; display: flex; align-items: center; justify-content: center; }

.lp-alert { background: #FFF8E8; border: 1px solid #F0DCA8; border-left: 4px solid #9A5B00; border-radius: 0 8px 8px 0; padding: 14px 16px; }
.lp-alert strong { display: block; color: #6E4100; margin-bottom: 6px; }
.lp-alert p { margin: 0; font-size: 14px; line-height: 1.6; }

.lp-final { margin-top: 2.4em !important; padding-top: 1em; border-top: 1px solid #D6DEEC; font-size: 13px; font-style: italic; color: #54658A; }

@media (max-width: 544px) {
  .lp-inject h2 { font-size: 19px !important; margin-top: 1.8em !important; }
  .lp-sites { gap: 12px; }
}


/* --- Stage 13b: bullets inside site cards and steps, plus the tips grid -- */
.lp-inject .lp-site figcaption ul { list-style: none; margin: 6px 0 0; padding: 0; }
.lp-inject .lp-site figcaption ul li { position: relative; margin: 0 0 5px; padding-left: 14px; font-size: 13px; line-height: 1.5; color: #54658A; }
.lp-inject .lp-site figcaption ul li:last-child { margin-bottom: 0; }
.lp-inject .lp-site figcaption ul li::before { content: ""; position: absolute; left: 0; top: .6em; width: 5px; height: 5px; border-radius: 50%; background: #8CC63F; }
.lp-inject .lp-site figcaption ul li strong { display: inline; color: #0B1B3A; padding: 0; }

.lp-inject ol.lp-steps li ul { list-style: none; margin: 7px 0 0; padding: 0; }
.lp-inject ol.lp-steps li ul li { position: relative; margin: 0 0 5px; padding: 0 0 0 14px; background: none; border: 0; border-radius: 0; font-size: 13px; line-height: 1.55; }
.lp-inject ol.lp-steps li ul li:last-child { margin-bottom: 0; }
.lp-inject ol.lp-steps li ul li::before { content: ""; position: absolute; left: 0; top: .62em; width: 5px; height: 5px; border-radius: 50%; background: #7FA6F2; counter-increment: none; }
.lp-inject ol.lp-steps li > strong { display: block; color: #0B1B3A; font-size: 14px; }

.lp-tips { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; margin: 1.2em 0; }
.lp-tip { background: #FFF; border: 1px solid #D6DEEC; border-left: 3px solid #2B4ACB; border-radius: 0 8px 8px 0; padding: 12px 14px; }
.lp-tip span { display: block; font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #12266B; margin-bottom: 5px; }
.lp-tip p { margin: 0; font-size: 13px; line-height: 1.55; color: #54658A; }


/* --- Stage 14: page header for Where to Inject --------------------------
   Astra keeps padding: 4em 0 on #primary below 993px (only the left and
   right halves of the shorthand get zeroed), which left 64px of dead grey
   above the card. Desktop already resolves to 0 via Astra's min-width rule.

   Targeted two ways on purpose: the page id is exact but breaks if the page
   is ever recreated, and :has() keeps working in that case. They are kept as
   separate rules because one invalid selector would void a shared list.
   ---------------------------------------------------------------------- */
@media (max-width: 992px) {
  .page-id-7885 #primary { padding-top: 0 !important; padding-bottom: 1.8em !important; }
}
@media (max-width: 992px) {
  body:has(.lp-inject) #primary { padding-top: 0 !important; padding-bottom: 1.8em !important; }
}

.page-id-7885 .entry-header { text-align: center; margin-bottom: 0 !important; }
body:has(.lp-inject) .entry-header { text-align: center; margin-bottom: 0 !important; }

.page-id-7885 .entry-title { margin-bottom: 0 !important; letter-spacing: -0.01em; }
body:has(.lp-inject) .entry-title { margin-bottom: 0 !important; letter-spacing: -0.01em; }

/* Centred subtitle, with a short lime rule above it as the only ornament. */
.lp-inject .lp-kicker {
  position: relative;
  margin: 18px 0 22px !important;
  padding-top: 16px;
  text-align: center;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #54658A;
}
.lp-inject .lp-kicker::before {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 44px;
  height: 3px;
  border-radius: 2px;
  background: #8CC63F;
}

/* The lede is now the first thing read, so it carries ink, not grey. */
.lp-inject .lp-lede {
  margin: 0 0 16px !important;
  font-size: 16px;
  line-height: 1.6;
  color: #0B1B3A;
}

/* Demoted: the full disclaimer still sits at the foot of the page, so this
   one only has to carry the point, not the whole of it. */
p.lp-note {
  margin: 0 0 8px !important;
  padding: 10px 12px;
  background: #F4F6FB;
  border-left: 3px solid #7FA6F2;
  border-radius: 0 5px 5px 0;
  font-size: 12.5px;
  line-height: 1.5;
  color: #54658A;
}
p.lp-note strong { color: #12266B; }

@media (max-width: 544px) {
  .page-id-7885 .entry-title, body:has(.lp-inject) .entry-title { font-size: 26px !important; }
  .lp-inject .lp-kicker { font-size: 12px; margin: 16px 0 20px !important; }
  .lp-inject .lp-lede { font-size: 15px; }
}


/* --- Stage 15: the two floating buttons ---------------------------------
   Both ship from their plugins oversized and in their own brand colours,
   and both sat on top of page content. Colours are set in each plugin's
   own options where possible; this handles size, position and weight.

   The cart bubble is hidden until it actually holds something, so the common
   case is no floating furniture over the page at all.
   ---------------------------------------------------------------------- */
#moderncart-floating-cart {
  height: 48px !important;
  bottom: 18px !important;
  right: 16px !important;
  box-shadow: 0 4px 14px rgba(11, 27, 58, 0.22) !important;
}
#moderncart-floating-cart .moderncart-floating-cart-icon svg,
#moderncart-floating-cart .moderncart-floating-cart-icon img { width: 22px !important; height: 22px !important; }

/* Empty cart: no bubble. lp-cart-empty is set by the snippet in brand.php. */
#moderncart-floating-cart.lp-cart-empty { display: none !important; }

.moderncart-floating-cart-count {
  font-size: 11px !important;
  font-weight: 700 !important;
  min-width: 18px !important;
  height: 18px !important;
  line-height: 18px !important;
}

/* Cookie re-consent: legally required, rarely wanted. Small and quiet. */
button.cookieadmin_re_consent {
  height: 38px !important;
  width: 38px !important;
  bottom: 16px !important;
  left: 16px !important;
  background-color: #54658A !important;
  opacity: .55;
  box-shadow: 0 3px 10px rgba(11, 27, 58, 0.25) !important;
  transition: opacity .18s ease;
}
button.cookieadmin_re_consent:hover,
button.cookieadmin_re_consent:focus-visible { opacity: 1; }
button.cookieadmin_re_consent img,
button.cookieadmin_re_consent svg { width: 20px !important; height: 20px !important; }

@media (max-width: 544px) {
  #moderncart-floating-cart { height: 44px !important; bottom: 14px !important; right: 12px !important; }
  button.cookieadmin_re_consent { height: 34px !important; width: 34px !important; bottom: 12px !important; left: 12px !important; }
}


/* --- Stage 16: ask about this product, phone field, returns page --------- */
.lp-ask {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin: 4px 0 14px;
  font-size: 13px;
  font-weight: 600;
  color: #2B4ACB;
  text-decoration: none;
  border-bottom: 1px solid rgba(43, 74, 203, .35);
  padding-bottom: 1px;
}
.lp-ask::before { content: ""; width: 15px; height: 15px; flex: none; border-radius: 50%; border: 1.5px solid currentColor; background: none; }
.lp-ask:hover { color: #12266B; border-bottom-color: #12266B; }

/* Named product carried over from a product page. */
.lp-about {
  margin: 0 0 18px !important;
  padding: 11px 14px;
  background: #EEF6E0;
  border: 1px solid #C9E29A;
  border-radius: 6px;
  font-size: 14px;
  line-height: 1.5;
}
.lp-about span { display: block; font-size: 11px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: #4A7016; margin-bottom: 2px; }
.lp-about a { color: #0B1B3A; font-weight: 600; }

/* Statutory-rights block on the returns page. */
.lp-note-block { background: #F4F6FB; border-left: 4px solid #2B4ACB; border-radius: 0 6px 6px 0; padding: 13px 16px; margin: 1em 0; }
.lp-note-block p { margin: 0; font-size: 13.5px; line-height: 1.6; color: #54658A; }


/* --- Stage 17: peptide calculator page ---------------------------------
   A positive checklist, as opposed to .lp-avoid which is the red do-not
   list. Same shape so the two read as a pair, opposite signal.
   ---------------------------------------------------------------------- */
.lp-inject ul.lp-check { list-style: none; margin: 1em 0; padding: 0; display: grid; gap: 8px; }
.lp-inject ul.lp-check li { position: relative; margin: 0; padding: 10px 14px 10px 40px; border-radius: 6px; font-size: 14px; line-height: 1.5; background: #F7FBF0; border: 1px solid #C9E29A; }
.lp-inject ul.lp-check li::before { content: ""; position: absolute; left: 15px; top: 50%; width: 11px; height: 6px; border-left: 2px solid #4A7016; border-bottom: 2px solid #4A7016; transform: translateY(-70%) rotate(-45deg); }

/* The calculator sets its own type scale, so keep the page wrapper out. */
.lp-inject #lkp-calc { margin: 26px auto 30px; }
.lp-inject #lkp-calc p { line-height: 1.5; }
.lp-inject #lkp-calc label { margin: 0; }


/* --- Stage 18: global search overlay -----------------------------------
   Sits above the install banner (10001) and the cart bubble (9999) so it is
   never partly covered. Astra's own slide-out field is hidden, since the
   icon now opens this instead and two search boxes would be confusing.
   ---------------------------------------------------------------------- */
.ast-search-menu-icon .search-form { display: none !important; }
.ast-search-icon { display: block; }
.astra-search-icon { cursor: pointer; }

.lp-search {
  position: fixed;
  inset: 0;
  z-index: 10050;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 12vh 16px 16px;
  background: rgba(11, 27, 58, .55);
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
  animation: lp-search-in .16s ease-out both;
}
.lp-search[hidden] { display: none !important; }
body.lp-search-open { overflow: hidden; }

@keyframes lp-search-in { from { opacity: 0 } to { opacity: 1 } }

.lp-search__card {
  position: relative;
  width: 100%;
  max-width: 560px;
  background: #FFFFFF;
  border-radius: 12px;
  padding: 22px 20px 18px;
  box-shadow: 0 18px 50px rgba(11, 27, 58, .32);
}

.lp-search__label {
  display: block;
  margin: 0 0 10px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: #54658A;
}

.lp-search__row { display: flex; gap: 8px; }

.lp-search__input {
  flex: 1;
  min-width: 0;
  font-size: 16px;
  padding: 12px 14px;
  color: #0B1B3A;
  background: #FFFFFF;
  border: 1px solid #D6DEEC;
  border-radius: 7px;
}
.lp-search__input:focus { outline: 2px solid #2B4ACB; outline-offset: 1px; border-color: #2B4ACB; }

.lp-search__go {
  flex: none;
  border: 0;
  border-radius: 7px;
  padding: 12px 20px;
  background: #2B4ACB;
  color: #FFFFFF;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: .05em;
  text-transform: uppercase;
  cursor: pointer;
}
.lp-search__go:hover { background: #12266B; }

.lp-search__hint { margin: 10px 0 0 !important; font-size: 12.5px; color: #54658A; }

.lp-search__close {
  position: absolute;
  top: 6px;
  right: 10px;
  border: 0;
  background: none;
  font-size: 26px;
  line-height: 1;
  color: #54658A;
  cursor: pointer;
  padding: 4px 8px;
}
.lp-search__close:hover { color: #0B1B3A; }

@media (max-width: 544px) {
  .lp-search { padding-top: 8vh; }
  .lp-search__card { padding: 18px 16px 16px; }
  .lp-search__row { flex-direction: column; }
  .lp-search__go { width: 100%; padding: 13px 20px; }
}


/* --- Stage 19: guided dropdowns on the calculator ------------------------
   Each guided field is a select plus the original number input. The input
   stays in the DOM because the calculations read it; it is only revealed
   when Other is chosen, and the unit suffix hides with it so the row does
   not read as two separate questions.
   ---------------------------------------------------------------------- */
#lkp-calc .lkp-guide { max-width: 148px; }

#lkp-calc .lkp-field > input[type=number] { display: none; }
#lkp-calc .lkp-field > .lkp-sfx { display: none; }

/* Fields with no dropdown (price) keep their input and suffix. */
#lkp-calc .lkp-field:not(:has(select[data-target])) > input[type=number],
#lkp-calc .lkp-field:not(:has(select[data-target])) > .lkp-sfx { display: block; }

#lkp-calc .lkp-field.is-other > input[type=number] { display: block; width: 92px; }
#lkp-calc .lkp-field.is-other > .lkp-sfx { display: block; }
#lkp-calc .lkp-field.is-other > select[data-target] { max-width: 104px; }

@media (max-width: 420px) {
  #lkp-calc .lkp-guide { max-width: 128px; font-size: 14px; }
  #lkp-calc .lkp-field.is-other > select[data-target] { max-width: 88px; }
  #lkp-calc .lkp-field.is-other > input[type=number] { width: 74px; }
}


/* --- Stage 20: contact form density, handsets only ----------------------
   The form ships at padding:14px 16px with gap:8px and margin-bottom:20px,
   which is roughly 96px per field before the label. On a phone that put two
   and a half fields on a screen. Everything below is inside a 544px query,
   so tablet and desktop keep the roomier spacing.

   The input font stays at 16px on purpose: iOS zooms the whole page when a
   focused field is smaller than that, which is far worse than a tall box.
   ---------------------------------------------------------------------- */
@media (max-width: 544px) {
  .lp-contact-form .lp-field { gap: 5px !important; margin-bottom: 12px !important; }

  .lp-contact-form .lp-field > label { font-size: 14px !important; line-height: 1.3 !important; margin: 0 !important; }

  .lp-contact-form .lp-field input,
  .lp-contact-form .lp-field textarea {
    padding: 10px 12px !important;
    font-size: 16px !important;
    line-height: 1.35 !important;
    border-radius: 6px !important;
  }

  .lp-contact-form .lp-field textarea { min-height: 112px !important; }

  .lp-contact-form button { width: 100%; margin-top: 2px !important; padding: 13px 20px !important; }

  /* The trailing medical-advice note does not need body-copy spacing. */
  .lp-contact-form > p { margin-top: .75rem !important; font-size: .72rem !important; line-height: 1.55 !important; }
}

/* Same Astra padding:4em 0 on #primary that the other pages hit: below 993px
   only the left and right halves get zeroed, leaving 64px of dead grey above
   the card. Targeted by id and by :has so it survives a page rebuild. */
@media (max-width: 992px) {
  .page-id-152 #primary { padding-top: 0 !important; padding-bottom: 1.8em !important; }
}
@media (max-width: 992px) {
  body:has(.lp-contact-form) #primary { padding-top: 0 !important; padding-bottom: 1.8em !important; }
}


/* --- Stage 21: calculator polish ----------------------------------------
   Astra styles every button on the site in uppercase with letter-spacing,
   and that was leaking into the tab strip. The calculator never asked for
   it, and caps plus tracking made each tab wide enough to push the strip
   off screen. Undoing it is what makes the rest of this fit.
   ---------------------------------------------------------------------- */
#lkp-calc .lkp-tabs button,
#lkp-calc .lkp-modes button {
  text-transform: none !important;
  letter-spacing: 0 !important;
  font-weight: 500 !important;
  border-radius: 999px;
}
#lkp-calc .lkp-modes button { border-radius: 0; }

/* A three-cell grid in two columns leaves a grey gap where the grid shows
   through. Let the last one span the row instead. */
#lkp-calc .lkp-grid > .lkp-cell:nth-child(3):last-child { grid-column: 1 / -1; }

/* Currency and amount are one value, so they should read as one control. */
#lkp-calc #c_cur {
  max-width: 58px;
  min-width: 0;
  text-align: center;
  border-radius: 8px 0 0 8px;
  border-right: 0;
  padding-left: 6px;
  padding-right: 6px;
}
#lkp-calc #c_price { border-radius: 0 8px 8px 0; }
#lkp-calc #c_cur + input { margin-left: -1px; }

@media (max-width: 540px) {
  /* All four tabs visible at once beats a strip that scrolls off the edge. */
  #lkp-calc .lkp-tabs {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 6px;
    overflow: visible;
    padding-bottom: 14px;
  }
  #lkp-calc .lkp-tabs button { width: 100%; text-align: center; font-size: 13px; padding: 10px 6px; }

  #lkp-calc .lkp-stage { padding: 16px 14px 12px; }
  #lkp-calc .lkp-big { line-height: .95; }
  #lkp-calc .lkp-word { font-size: 15px; }
  #lkp-calc .lkp-sub { font-size: 13px; }

  #lkp-calc .lkp-row { padding: 11px 2px; gap: 10px; }
  #lkp-calc .lkp-row label { font-size: 14px; }
  #lkp-calc .lkp-hint { font-size: 12px; }

  /* One width for every control so the right edge is a straight line. */
  #lkp-calc .lkp-row select:not(#c_cur) { min-width: 124px; max-width: 124px; }
  #lkp-calc .lkp-field { justify-content: flex-end; }
  #lkp-calc #c_price { width: 100%; min-width: 0; }
  #lkp-calc .lkp-field:has(#c_cur) { flex: 1; max-width: 182px; }

  #lkp-calc .lkp-cell { padding: 11px 12px; }
  #lkp-calc .lkp-v { font-size: 18px; }
  #lkp-calc .lkp-k { font-size: 12px; line-height: 1.35; }

  #lkp-calc .lkp-note, #lkp-calc .lkp-foot { font-size: 13px; }
  /* Clear of the cookie button parked bottom-left. */
  #lkp-calc .lkp-foot { padding-bottom: 8px; }
}


/* --- Stage 22: mobile spacing, sitewide --------------------------------- */

/* 1. The dead grey band above every card.
   Astra sets .ast-separate-container #primary { padding: 4em 0 } and below
   993px zeroes only the left and right halves of that shorthand, leaving
   64px of empty ground above the content on every page. Fixed here once
   instead of page by page; desktop resolves to 0 via Astra's own rule. */
@media (max-width: 992px) {
  .ast-separate-container #primary { padding-top: 0 !important; padding-bottom: 1.8em !important; }
}

/* 2. The real cause of the white void in the blog cards.
   .lpb-posts carries grid-auto-rows: 1fr for the two-column desktop layout.
   The single-column breakpoint never reset it, so every card was stretched
   to match the tallest one and short excerpts left a gap before the link. */
@media (max-width: 880px) {
  .lpb-posts { grid-auto-rows: auto !important; }
  .lpb-post { height: auto !important; }
}

@media (max-width: 544px) {
  /* 3. Blog cards: 26px of body padding is a desktop measure. */
  .lpb-posts { gap: 14px !important; }
  .lpb-post__body { padding: 15px 16px 17px !important; gap: 7px !important; }
  .lpb-post__art img,
  .lpb-posts > *:first-child .lpb-post__art img { height: 150px !important; }
  .lpb-post__title { font-size: 1.05rem !important; line-height: 1.25 !important; }
  .lpb-posts > *:first-child .lpb-post__title { font-size: 1.12rem !important; }
  .lpb-post__excerpt { font-size: .875rem !important; line-height: 1.55 !important; }
  .lpb-post__date { font-size: .7rem !important; }
  .lpb-post__more { padding-top: 6px !important; font-size: .85rem !important; }

  /* 4. FAQ accordion: rows were 18px/22px padded on a 412px screen. */
  .lpb-hl details { margin-bottom: 7px !important; }
  .lpb-hl summary { padding: 13px 44px 13px 15px !important; font-size: .95rem !important; line-height: 1.35 !important; }
  .lpb-hl summary::after { right: 18px !important; }
  .lpb-hl .lpb-hl__a { padding: 0 15px 15px !important; font-size: .875rem !important; line-height: 1.6 !important; }

  /* 5. A heading and the small link under it are one unit, not two blocks.
     Elementor stacks them as separate child containers on a handset, which
     is where the long drop between them came from. */
  .elementor-element-2b018c,
  .elementor-element-2b013f { padding: 0 !important; margin: 2px 0 0 !important; }
  .elementor-element-2b018c p,
  .elementor-element-2b013f p { margin: 0 !important; text-align: left !important; font-size: .9rem !important; }
  .elementor-element-2b01a2,
  .elementor-element-2b0155 { margin-top: 12px !important; }
}


/* --- Stage 23: page height, FAQ on handsets, blog header ---------------- */

/* 23a. Dead space between the last line of content and the footer.
   Three boxes stack their bottom padding there: #primary, the .ast-container
   inside it, and the article card itself. On a phone that was
   28.8 + 16 + 20.8 = 65px of empty white. Trimmed, not removed. */
@media (max-width: 921px) {
  .ast-separate-container #primary { padding-bottom: 1.1em !important; }
  body.ast-separate-container .site-content > .ast-container {
    padding-top: 1.1rem !important;
    padding-bottom: 0.7rem !important;
  }
}

@media (max-width: 600px) {
  .ast-separate-container #primary { padding-bottom: 0.75em !important; }
  body.ast-separate-container .site-content > .ast-container {
    padding-top: 0.65rem !important;
    padding-bottom: 0.4rem !important;
  }
  body.ast-separate-container .ast-article-single,
  body.ast-separate-container .ast-article-post,
  body.woocommerce.ast-separate-container .ast-woocommerce-container,
  body.ast-separate-container .ast-archive-description { padding: 1.15em 1.05em !important; }

  /* 23b. Vertical rhythm inside the article body. */
  body.ast-separate-container .entry-header { margin-bottom: 0.6em !important; }
  body .entry-title,
  body h1.entry-title,
  body .ast-archive-description .ast-archive-title { font-size: 1.65rem !important; line-height: 1.2 !important; }
  body .entry-content p,
  body .entry-content ul,
  body .entry-content ol { margin-bottom: 0.85em !important; }
  body .entry-content h2 { margin-top: 1.15em !important; margin-bottom: 0.4em !important; }
  body .entry-content h3 { margin-top: 1em !important; margin-bottom: 0.3em !important; }
  body .entry-content h2.wp-block-heading { margin: 22px 0 10px !important; padding-top: 12px !important; font-size: 1.25rem !important; }
  body .entry-content li { margin-bottom: 0.3em !important; }
}

/* 23c. The FAQ page had no handset treatment at all: six filter pills at
   desktop size, 15px/18px accordion rows and desktop body copy. The heading,
   lead and pill row are centred here to match the other page tops; the
   answers stay left aligned because centred paragraphs are hard to read. */
@media (max-width: 600px) {
  .page-id-150 .entry-header,
  .page-id-150 .entry-title { text-align: center !important; }
  .lpb-faq-lead {
    font-size: 0.925rem !important;
    line-height: 1.6 !important;
    text-align: center !important;
    margin: 0 auto 14px !important;
  }
  .lpb-faq-nav {
    justify-content: center !important;
    gap: 6px !important;
    margin: 0 0 18px !important;
  }
  .lpb-faq-nav a { padding: 6px 11px !important; font-size: 0.75rem !important; }

  .wp-block-details { margin: 0 0 7px !important; }
  .wp-block-details summary {
    padding: 12px 40px 12px 14px !important;
    font-size: 0.95rem !important;
    line-height: 1.35 !important;
  }
  .wp-block-details summary::after { right: 16px !important; }
  .wp-block-details > :not(summary) { padding-left: 14px !important; padding-right: 14px !important; }
  .wp-block-details p { font-size: 0.875rem !important; line-height: 1.6 !important; margin: 0 0 10px !important; }
  .wp-block-details > p:last-child { padding-bottom: 13px !important; }
  .wp-block-details ul,
  .wp-block-details ol { font-size: 0.875rem !important; line-height: 1.6 !important; }
}

/* 23d. Header band on the posts page. Astra renders no title at all for the
   blog index, so lp_blog_header() prints one; this gives it the same
   measure and colour as the archive headers elsewhere. */
.lp-blog-head .page-title { margin: 0 0 8px !important; }
.lp-blog-head__lead {
  margin: 0 !important;
  max-width: 68ch;
  color: #54658A;
  font-size: 1rem;
  line-height: 1.65;
}
.lp-blog-head { margin-bottom: 1.2em !important; }

@media (max-width: 600px) {
  .lp-blog-head { margin-bottom: 0.8em !important; text-align: center; }
  .lp-blog-head .page-title { margin: 0 0 6px !important; }
  .lp-blog-head__lead { font-size: 0.9rem; line-height: 1.6; margin: 0 auto !important; }
}


/* --- Stage 24: the invisible Learn dropdown, and the brands panel -------- */

/* 24a. Two rules were fighting and nobody won.
   Astra's main.min.css paints every desktop dropdown white:
     .main-header-menu .sub-menu { background: #fff }
   while the header menu colour set in the Customizer paints every link,
   top level and sub level alike, white too:
     .ast-builder-menu-1 .main-header-menu .menu-item > .menu-link { color: #FFFFFF }
   So the Learn panel opened correctly and rendered white text on white, and
   only became readable on hover, where the colour flips to #7FA6F2. The panel
   is given the header's own navy here instead, so the existing white links are
   legible without touching the Customizer setting the top level relies on. */
.ast-desktop .ast-builder-menu-1 .sub-menu,
.ast-desktop .main-header-menu .sub-menu {
  background-color: #12266B !important;
  border-color: #2B4ACB !important;
  box-shadow: 0 10px 28px rgba(11, 27, 58, 0.28);
  border-radius: 0 0 4px 4px;
  overflow: hidden;
}

.ast-desktop .ast-builder-menu-1 .sub-menu .menu-item > .menu-link,
.ast-desktop .main-header-menu .sub-menu .menu-item > .menu-link {
  color: #FFFFFF !important;
  border-bottom-color: rgba(255, 255, 255, 0.12) !important;
  font-size: 0.88rem;
}

.ast-desktop .ast-builder-menu-1 .sub-menu .menu-item:last-child > .menu-link,
.ast-desktop .main-header-menu .sub-menu .menu-item:last-child > .menu-link {
  border-bottom-width: 0 !important;
}

.ast-desktop .ast-builder-menu-1 .sub-menu .menu-item > .menu-link:hover,
.ast-desktop .ast-builder-menu-1 .sub-menu .menu-item:hover > .menu-link,
.ast-desktop .ast-builder-menu-1 .sub-menu .current-menu-item > .menu-link,
.ast-desktop .main-header-menu .sub-menu .menu-item > .menu-link:hover,
.ast-desktop .main-header-menu .sub-menu .current-menu-item > .menu-link {
  color: var(--lp-lime) !important;
  background-color: rgba(255, 255, 255, 0.07) !important;
}

/* The lime underline in Stage 1 is a top level device. Keep it off the panel. */
.ast-desktop .main-header-menu .sub-menu .menu-link::after { content: none !important; }

/* 24b. Brands panel. It reuses the Categories widget markup so it inherits the
   existing box styling; only the current-brand state is new. */
.widget_product_brands .product-brands { list-style: none; margin: 0; padding: 0; }
.widget_product_brands .product-brands li { margin: 0; padding: 0; }
.widget_product_brands .current-brand > a { font-weight: 700; color: var(--lp-lime-d) !important; }
.widget_product_brands .brand-item--all > a { font-size: 0.85em; }


/* --- Stage 25: desktop spacing, shop header, featured card -------------- */

/* 25a. The grey band above every page on desktop.
   Astra sets .ast-separate-container #primary { padding: 4em 0 }, which is
   64px above the first card, on top of the 38px the container already adds.
   Stage 22 zeroed it below 993px only, so desktop kept the full 4em. */
@media (min-width: 993px) {
  .ast-separate-container #primary { padding-bottom: 2em; }
}

/* 25b. Shop header. It was a single word on a white card with nothing under it.
   lp_shop_archive_lead() supplies the sentence; this gives the pair a shape. */
.post-type-archive-product .ast-archive-description,
.tax-product_cat .ast-archive-description,
.tax-product_brand .ast-archive-description {
  border-left: 4px solid var(--lp-lime);
}

/* WooCommerce renders <header class="woocommerce-products-header"> whether or
   not anything goes in it. Empty, it was still taking up room. */
.woocommerce-products-header { margin: 0; padding: 0; }
.woocommerce-products-header:empty { display: none; }

@media (min-width: 993px) {
  .post-type-archive-product .ast-archive-description,
  .tax-product_cat .ast-archive-description,
  .tax-product_brand .ast-archive-description { padding: 1.5em 2em 1.5em 1.8em !important; }

  body.archive .ast-archive-description .ast-archive-title,
  body.archive .ast-archive-description .ast-archive-title * { font-size: 2rem !important; }

  body.woocommerce.ast-separate-container .ast-woocommerce-container { padding-top: 1.6em; }
}

/* 25c. The featured article card stretches to two grid rows, so a short
   excerpt left empty white above 'Read the article'. Letting the card size to
   its own content is enough; an earlier attempt stretched the photograph to
   fill instead, which showed the placeholder tint under the image and looked
   worse than the gap it replaced. */
@media (min-width: 881px) {
  .lpb-post:first-child { align-self: start; }
}


/* --- Stage 26: column alignment, home page section gap ------------------ */

/* 26a. Stage 25a put the desktop top space on #primary, which is only the
   main column. The sidebar is its sibling, so the two tops stopped lining
   up. The space belongs on the container that holds both. */
@media (min-width: 993px) {
  body.ast-separate-container .site-content > .ast-container { padding-top: 2.2rem !important; }
}

/* 26b. The home page ran 63px of bottom padding into 63px of top padding
   between every section, so 126px of empty white sat between "Why choose"
   and "Latest from the blog". Halved on desktop; the tablet and handset
   values Elementor already steps down to are left alone. */
@media (min-width: 993px) {
  .elementor-4389 .elementor-element.elementor-element-2b0113,
  .elementor-4389 .elementor-element.elementor-element-2b0160 {
    --padding-top: 30px;
    --padding-bottom: 30px;
  }
  .elementor-4389 .elementor-element.elementor-element-2b006e { --padding-bottom: 26px; }
  .elementor-4389 .elementor-element.elementor-element-2b01ad { --padding-bottom: 34px; }
}


/* --- Stage 27: product card white space --------------------------------- */

/* The gap between "In stock" and "Add to Cart" is not padding. .lp-card__buy
   carries margin-top:auto so every button sits on the same line, and the grid
   makes all four cards as tall as the tallest. Two of the four products carry
   a short description and two do not, so the two without one had the whole
   difference dumped into empty white above their button.

   Dropping the description from this four-up row makes every card hold exactly
   the same blocks, so the row height is set by content rather than by whichever
   product happened to have copy, and the void closes. The description still
   shows on the product page and in the shop grid. */
.lp-card__sub { display: none; }

/* With the rows now even, the remaining rhythm can tighten a little. */
.lp-card__art { margin-bottom: 10px; }
.lp-card__price { margin-top: 8px; }
.lp-card__buy { padding-top: 10px; }
.lp-card__view { padding-top: 10px; }


/* --- Stage 28: sidebar and content column tops -------------------------- */

/* Stage 25a and 26a both tried to balance the two columns by adjusting
   #primary's padding and #secondary's margin separately. That only works if
   you know every rule feeding each one, and on this install the column tops
   kept drifting apart.

   This stops trying to match two numbers. Both columns, and the first child
   inside each, are pinned to zero at the top, so whatever Astra, WooCommerce
   or a widget wrapper contributes, the two tops resolve to the same line. All
   of the page's top spacing lives on .ast-container, which wraps both, so it
   cannot favour one column over the other. Two classes plus an id outranks
   everything either theme or plugin sets here. */
@media (min-width: 993px) {
  .ast-separate-container.ast-two-container #primary,
  .ast-separate-container.ast-two-container #secondary {
    margin-top: 0 !important;
    padding-top: 0 !important;
  }

  .ast-separate-container.ast-two-container #primary > *:first-child,
  .ast-separate-container.ast-two-container #secondary > *:first-child,
  .ast-separate-container.ast-two-container #secondary .sidebar-main,
  .ast-separate-container.ast-two-container #secondary .lp-filters,
  .ast-separate-container.ast-two-container #secondary .lp-filters__body,
  .ast-separate-container.ast-two-container #secondary .ast-filter-wrap,
  .ast-separate-container.ast-two-container #secondary .ast-filter-wrap > .widget:first-child {
    margin-top: 0 !important;
    padding-top: 0 !important;
  }

  /* The widget card keeps its own internal padding; only the top offset of the
     wrapper chain above it is being flattened. */
  .ast-separate-container.ast-two-container #secondary .widget { padding-top: 2em !important; }
}


/* --- Stage 29: mobile alignment, three places --------------------------- */

/* 29a. Shop sidebar. The Brands panel reuses the Categories widget markup but
   the handset rules in the filters block target .product-categories by name,
   so Brands never picked them up and rendered at full desktop size in a single
   column while Categories sat in a small two-up grid. Both lists are driven
   from one place here. Each row is a flex line so the label and its count
   share a baseline instead of the count floating off the end of a long name. */
@media (max-width: 921px) {
  #secondary .product-categories,
  #secondary .product-brands {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 2px 12px;
    margin: 0;
    padding: 0;
    list-style: none;
  }

  #secondary .product-categories li,
  #secondary .product-brands li {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 6px;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
  }

  #secondary .product-categories a,
  #secondary .product-brands a {
    font-size: 13px;
    line-height: 1.7;
    min-width: 0;
  }

  #secondary .product-categories .count,
  #secondary .product-brands .count {
    flex: 0 0 auto;
    color: #54658A;
    font-size: 12px;
  }

  /* BRANDS was sitting hard against the last category row. */
  #secondary .widget + .widget { margin-top: 18px !important; }
}

/* 29b. Store header. "Store" sat 4px to the right of "Showing 1-12 of ...",
   because the lime rule added in Stage 25b is a border, and a border adds to
   the padding rather than replacing part of it. The heading's padding is
   reduced by the border width so both lines start on the same pixel. */
@media (max-width: 921px) {
  .post-type-archive-product .ast-archive-description,
  .tax-product_cat .ast-archive-description,
  .tax-product_brand .ast-archive-description {
    padding: 14px 1.05em 0 calc(1.05em - 4px) !important;
  }

  .post-type-archive-product .ast-woocommerce-container,
  .tax-product_cat .ast-woocommerce-container,
  .tax-product_brand .ast-woocommerce-container {
    padding-left: 1.05em !important;
    padding-right: 1.05em !important;
  }

  /* The result count and the sort control were colliding on a narrow screen. */
  .woocommerce .woocommerce-result-count { float: none !important; width: 100% !important; }
  .woocommerce .woocommerce-ordering { float: none !important; width: 100% !important; margin: 0 0 14px !important; }
  .woocommerce .woocommerce-ordering select {
    width: 100% !important;
    max-width: 100% !important;
    font-size: 14px !important;
    padding: 8px 10px !important;
  }

  /* Stage 11 predates the brand archive; give it the same treatment. */
  .tax-product_brand #primary { padding-top: 0 !important; padding-bottom: 1.8em !important; }
  .tax-product_brand #secondary { margin: 0 0 10px !important; }
  .tax-product_brand .ast-archive-description .ast-archive-title {
    margin-bottom: 0 !important;
    font-size: 24px !important;
    line-height: 1.2 !important;
  }
}

/* 29c. Home page "Common questions" and "Latest from the blog".
   Each is a heading container and a link container nested inside a row
   container, which stacks on a handset. The nesting meant the heading, the
   link and the cards below all resolved to different left edges, and the
   container gaps stacked into large empty bands. Everything is flattened to
   the section's own inner padding so the three line up, and the gaps are set
   once here rather than inherited from three levels of container. */
@media (max-width: 767px) {
  .elementor-4389 .elementor-element.elementor-element-2b0197,
  .elementor-4389 .elementor-element.elementor-element-2b014a {
    --gap: 4px 4px;
    --row-gap: 4px;
    --column-gap: 4px;
    --padding-top: 0px;
    --padding-bottom: 0px;
    --padding-left: 0px;
    --padding-right: 0px;
  }

  .elementor-4389 .elementor-element.elementor-element-2b0176,
  .elementor-4389 .elementor-element.elementor-element-2b018c,
  .elementor-4389 .elementor-element.elementor-element-2b0129,
  .elementor-4389 .elementor-element.elementor-element-2b013f {
    --gap: 0px 0px;
    --row-gap: 0px;
    --column-gap: 0px;
    --padding-top: 0px;
    --padding-bottom: 0px;
    --padding-left: 0px;
    --padding-right: 0px;
    --align-items: stretch;
    width: 100% !important;
  }

  .elementor-4389 .elementor-element.elementor-element-2b0176 .elementor-widget-container,
  .elementor-4389 .elementor-element.elementor-element-2b018c .elementor-widget-container,
  .elementor-4389 .elementor-element.elementor-element-2b0129 .elementor-widget-container,
  .elementor-4389 .elementor-element.elementor-element-2b013f .elementor-widget-container {
    margin: 0 !important;
    padding: 0 !important;
  }

  .elementor-4389 .elementor-element.elementor-element-2b016b .elementor-heading-title,
  .elementor-4389 .elementor-element.elementor-element-2b011e .elementor-heading-title {
    margin: 0 !important;
    font-size: 1.4rem !important;
    line-height: 1.25 !important;
    text-align: left !important;
  }

  .elementor-4389 .elementor-element.elementor-element-2b0181 p,
  .elementor-4389 .elementor-element.elementor-element-2b013f p {
    margin: 4px 0 0 !important;
    text-align: left !important;
    font-size: 0.9rem !important;
  }

  /* The accordion and the card grid are siblings of the heading row, so this
     is the only gap that needs to exist between the two blocks. */
  .elementor-4389 .elementor-element.elementor-element-2b01a2,
  .elementor-4389 .elementor-element.elementor-element-2b0155 {
    margin-top: 14px !important;
  }

  .elementor-4389 .elementor-element.elementor-element-2b01ad,
  .elementor-4389 .elementor-element.elementor-element-2b0160 {
    --padding-top: 26px;
    --padding-bottom: 26px;
  }

  /* The accordion set its own max-width for desktop reading measure. */
  .lpb-hl { max-width: none; }
}

/* 29d. Two arrows on Learn in the mobile menu.
   Astra prints two separate controls for a parent item: an .icon-arrow inside
   the link itself, wrapped in .ast-header-navigation-arrow, and a separate
   <button class="ast-menu-toggle"> that actually opens the submenu. On the
   desktop dropdown only one is visible; in the mobile popup both render and
   land on top of each other. The one inside the link is decorative and is not
   the control that opens anything, so it goes. */
@media (max-width: 921px) {
  #ast-mobile-popup .menu-item-has-children > .menu-link .ast-header-navigation-arrow,
  #ast-mobile-popup .menu-item-has-children > .menu-link > .dropdown-menu-toggle {
    display: none !important;
  }

  #ast-mobile-popup .ast-menu-toggle { outline-offset: -2px; }
}


/* --- Stage 30: space above the Brands panel ---------------------------- */

/* Stage 29a added #secondary .widget + .widget { margin-top: 18px } and it did
   nothing, because the Brands panel is not a sibling of the Categories widget.
   Astra wraps its own sidebar widgets in .ast-filter-wrap, and lp_shop_brands()
   prints after that wrapper closes, so the adjacent sibling selector never
   matched. Targeted directly here instead.

   The hairline is there because the two lists now look identical by design, so
   space alone reads as a gap rather than as two groups. Say if you want it gone. */
@media (max-width: 921px) {
  #secondary .widget_product_brands {
    margin-top: 16px !important;
    padding-top: 14px !important;
    border-top: 1px solid #D6DEEC !important;
  }
}


/* --- Stage 31: the second arrow on Learn ------------------------------- */

/* Stage 29d hid .ast-header-navigation-arrow, which changed nothing because
   in the mobile popup that span is rendered empty - it carries no icon. The
   chevron on every row comes from a rule of our own:

     #ast-mobile-popup .ast-builder-menu-1 .menu-item > .menu-link::after

   which draws a right facing chevron for every item. A parent item also gets
   Astra's <button class="ast-menu-toggle"> with its own down chevron, so Learn
   carried both. The decorative one is suppressed on parent rows only; the
   down chevron stays, because that is the control that actually opens the
   submenu and it rotates when expanded. */
#ast-mobile-popup .ast-builder-menu-1 .menu-item-has-children > .menu-link::after {
  content: none !important;
}

/* Give the toggle the same muted weight as the chevrons it sits beside. */
#ast-mobile-popup .ast-builder-menu-1 .ast-menu-toggle { color: rgba(255, 255, 255, 0.50) !important; }
#ast-mobile-popup .ast-builder-menu-1 .ast-submenu-expanded > .ast-menu-toggle { color: #7FA6F2 !important; }


/* --- Stage 32: footer height -------------------------------------------- */

/* Astra sets a min-height in two places for each footer row, on the wrap and
   again on .ast-builder-grid-row inside it: 100px for the newsletter row and
   80px for the copyright row. An earlier rule zeroed the wrap only, so the
   grid row kept holding the footer open at a fixed height regardless of what
   was in it. Both are released here so each row is as tall as its content. */
.site-above-footer-wrap,
.site-below-footer-wrap,
.site-above-footer-wrap[data-section],
.site-below-footer-wrap[data-section],
.site-above-footer-wrap[data-section] .ast-builder-grid-row,
.site-below-footer-wrap[data-section] .ast-builder-grid-row {
  min-height: 0 !important;
}

/* The copyright row is a four column grid with one column used. The three
   empty ones still take a 10px bottom margin each once the row stacks on a
   handset, which is 30px of nothing under the copyright line. */
.site-footer-section:empty { display: none !important; margin: 0 !important; }

.site-below-footer-wrap[data-section] { padding-top: 14px !important; padding-bottom: 14px !important; }

@media (max-width: 921px) {
  .site-below-footer-wrap[data-section] .site-footer-section { margin-bottom: 0 !important; }
}


/* --- Stage 33: formats panel and COA notice ---------------------------- */

.widget_product_formats .product-formats { list-style: none; margin: 0; padding: 0; }
.widget_product_formats .product-formats li { margin: 0; padding: 0; }
.widget_product_formats .current-format > a { font-weight: 700; color: var(--lp-lime-d) !important; }
.widget_product_formats .format-item--all > a { font-size: 0.85em; }

/* The COA line is a trust signal, so it reads as a statement of fact rather
   than a sales badge: lime tick, quiet type, link carrying the weight. */
.lp-coa {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 6px;
  margin: 14px 0 0 !important;
  padding: 10px 12px;
  background: #EEF6E0;
  border-left: 3px solid var(--lp-lime);
  border-radius: 4px;
  font-size: 0.875rem;
  line-height: 1.5;
  color: #3F5A16;
}
.lp-coa__mark { flex: 0 0 auto; }
.lp-coa__mark::before { content: "\2713"; font-weight: 700; color: var(--lp-lime-d); }
.lp-coa__link { font-weight: 700; text-decoration: underline; }

@media (max-width: 921px) {
  #secondary .product-formats { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2px 12px; margin: 0; padding: 0; list-style: none; }
  #secondary .product-formats li { display: flex; align-items: baseline; justify-content: space-between; gap: 6px; margin: 0 !important; padding: 0 !important; border: 0 !important; }
  #secondary .product-formats a { font-size: 13px; line-height: 1.7; min-width: 0; }
  #secondary .product-formats .count { flex: 0 0 auto; color: #54658A; font-size: 12px; }
  #secondary .widget_product_formats { margin-top: 16px !important; padding-top: 14px !important; border-top: 1px solid #D6DEEC !important; }
}


/* --- Stage 34: Learn submenu always open on mobile ---------------------- */

/* Astra collapses every child list in the mobile drawer:

     .ast-mobile-popup-drawer .main-header-bar-navigation
       .menu-item-has-children .sub-menu { display: none }

   and reveals it only when its toggle is tapped. With one parent item and
   three children, that hides half the navigation behind an extra tap for no
   gain. The list is opened permanently here and the toggle removed, because a
   control that cannot change anything is just something else to mis-tap. */
@media (max-width: 921px) {
  .ast-mobile-popup-drawer .main-header-bar-navigation .menu-item-has-children > .sub-menu,
  #ast-mobile-popup .menu-item-has-children > .sub-menu {
    display: block !important;
    height: auto !important;
    visibility: visible !important;
    opacity: 1 !important;
  }

  #ast-mobile-popup .menu-item-has-children > .ast-menu-toggle,
  .ast-mobile-popup-drawer .menu-item-has-children > .ast-menu-toggle {
    display: none !important;
  }

  /* The parent keeps its own link, so give the group a quiet edge rather than
     leaving four rows that read as one flat list. */
  #ast-mobile-popup .menu-item-has-children > .sub-menu {
    border-left: 2px solid rgba(255, 255, 255, 0.12);
    margin-left: 18px;
  }
}


/* --- Stage 35: scroll reveal ------------------------------------------- */

/* .lp-reveal is added by JavaScript, never by the markup, so content is only
   ever hidden when something is running that will show it again. A crawler, a
   failed script or a blocked CDN all see plain visible content. */
.lp-reveal {
  opacity: 0;
  transform: translateY(14px);
  transition: opacity 0.5s cubic-bezier(0.22, 0.61, 0.36, 1),
              transform 0.5s cubic-bezier(0.22, 0.61, 0.36, 1);
  will-change: opacity, transform;
}

.lp-reveal.lp-in {
  opacity: 1;
  transform: none;
}

/* A short stagger across siblings so a row of cards arrives as a sequence
   rather than a single slab. Capped at six; beyond that the last card waits
   long enough to feel broken. */
.lpb-posts > .lp-reveal:nth-child(2),
.lp-cards > .lp-reveal:nth-child(2) { transition-delay: 60ms; }
.lpb-posts > .lp-reveal:nth-child(3),
.lp-cards > .lp-reveal:nth-child(3) { transition-delay: 120ms; }
.lpb-posts > .lp-reveal:nth-child(4),
.lp-cards > .lp-reveal:nth-child(4) { transition-delay: 180ms; }
.lp-cards > .lp-reveal:nth-child(5) { transition-delay: 240ms; }
.lp-cards > .lp-reveal:nth-child(6) { transition-delay: 300ms; }

/* Cards lift slightly on hover. Transform only, so it never triggers layout. */
.lp-card, .lpb-post {
  transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
}
.lp-card:hover, .lpb-post:hover { transform: translateY(-3px); }

/* The one thing that must never move: motion is decoration, and for some
   people it causes nausea. Honour the system setting absolutely. */
@media (prefers-reduced-motion: reduce) {
  .lp-reveal, .lp-reveal.lp-in { opacity: 1 !important; transform: none !important; transition: none !important; }
  .lp-card, .lpb-post { transition: none !important; }
  .lp-card:hover, .lpb-post:hover { transform: none !important; }
}

/* ===================== Stage 36: peptide finder =====================
   Two steps on one page. The goal row is a set of tappable cards rather
   than a select, because on a phone a select hides every option until it
   is opened and the whole point of this page is that the goals are the
   navigation. Server rendered, so each filtered state is a real URL a
   person can send to someone else. */

.lp-finder {
  margin: 0 0 2.4em;
}

.lp-finder__label {
  font-size: 1.05rem;
  font-weight: 700;
  color: #0B1B3A;
  margin: 0 0 0.75em;
  letter-spacing: -0.01em;
}

.lp-finder__goals {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
  gap: 10px;
  margin: 0 0 2em;
}

.lp-finder__goal {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 13px 15px;
  border: 1px solid #D6DEEC;
  border-radius: 10px;
  background: #fff;
  color: #12266B;
  text-decoration: none;
  line-height: 1.25;
  transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
}

.lp-finder__goal:hover,
.lp-finder__goal:focus-visible {
  border-color: #2B4ACB;
  box-shadow: 0 4px 14px rgba(43, 74, 203, 0.12);
  transform: translateY(-2px);
  color: #12266B;
}

.lp-finder__goal.is-on {
  border-color: #2B4ACB;
  background: #2B4ACB;
  color: #fff;
  box-shadow: 0 6px 18px rgba(43, 74, 203, 0.24);
}

.lp-finder__goal-name {
  font-weight: 600;
  font-size: 0.95rem;
}

/* The count is the honest part of the card: it tells someone whether it is
   worth the tap before they spend one. */
.lp-finder__goal-count {
  flex: 0 0 auto;
  min-width: 26px;
  padding: 2px 8px;
  border-radius: 999px;
  background: #F4F6FB;
  color: #54658A;
  font-size: 0.78rem;
  font-weight: 700;
  text-align: center;
}

.lp-finder__goal.is-on .lp-finder__goal-count {
  background: rgba(255, 255, 255, 0.22);
  color: #fff;
}

.lp-finder__results {
  scroll-margin-top: 90px;
}

.lp-finder__hint,
.lp-finder__count {
  font-size: 0.95rem;
  color: #54658A;
  margin: 0 0 1.1em;
}

.lp-finder__count {
  font-weight: 700;
  color: #0B1B3A;
}

.lp-finder__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
  gap: 16px;
}

.lp-finder__card {
  display: flex;
  flex-direction: column;
  border: 1px solid #D6DEEC;
  border-radius: 12px;
  background: #fff;
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
}

.lp-finder__card:hover,
.lp-finder__card:focus-visible {
  border-color: #7FA6F2;
  box-shadow: 0 8px 22px rgba(11, 27, 58, 0.10);
  transform: translateY(-3px);
}

.lp-finder__card img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  background: #F4F6FB;
}

.lp-finder__card-body {
  display: block;
  padding: 12px 13px 14px;
}

.lp-finder__card-name {
  display: block;
  font-size: 0.92rem;
  font-weight: 600;
  color: #0B1B3A;
  line-height: 1.3;
  margin-bottom: 5px;
}

.lp-finder__card-price {
  display: block;
  font-size: 0.9rem;
  font-weight: 700;
  color: #2B4ACB;
}

.lp-finder__card-price del {
  opacity: 0.55;
  font-weight: 500;
  margin-right: 5px;
}

.lp-finder__more {
  margin: 1.4em 0 0;
}

.lp-finder__more a {
  display: inline-block;
  padding: 10px 18px;
  border-radius: 999px;
  background: #8CC63F;
  color: #0B1B3A;
  font-weight: 700;
  font-size: 0.9rem;
  text-decoration: none;
  transition: background 0.18s ease;
}

.lp-finder__more a:hover,
.lp-finder__more a:focus-visible {
  background: #74A82F;
  color: #0B1B3A;
}

/* The disclaimer is deliberately quiet but never hidden. It says the same
   thing as the FAQ, in the same words, one screen away from a buy button. */
.lp-finder__note {
  margin: 2em 0 0;
  padding: 13px 15px;
  border-left: 3px solid #D6DEEC;
  background: #F4F6FB;
  border-radius: 0 8px 8px 0;
  font-size: 0.83rem;
  line-height: 1.55;
  color: #54658A;
}

@media (max-width: 767px) {
  .lp-finder__goals { grid-template-columns: 1fr 1fr; gap: 8px; }
  .lp-finder__goal { padding: 11px 12px; }
  .lp-finder__goal-name { font-size: 0.86rem; }
  .lp-finder__grid { grid-template-columns: 1fr 1fr; gap: 12px; }
  .lp-finder__card-name { font-size: 0.85rem; }
}

@media (max-width: 400px) {
  .lp-finder__goals { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  .lp-finder__goal,
  .lp-finder__card { transition: none !important; }
  .lp-finder__goal:hover,
  .lp-finder__card:hover { transform: none !important; }
}

/* ===================== Stage 37: procedure steps =====================
   The numbers read 1, 4, 7, 10 because counter-increment was set on every li
   inside the list, and each step carries two or three bullets of its own. The
   nested bullets were counting themselves. The earlier attempt put
   counter-increment: none on the ::before, which never held the counter, so it
   changed nothing. Scoping it to the nested li is the actual fix.

   The rest is presentation: the badge lines up with the step title, a rail
   joins one step to the next so the list reads as a sequence rather than a
   stack of boxes, and the bullets tighten up. */

.lp-inject ol.lp-steps ul li { counter-increment: none; }

.lp-inject ol.lp-steps { gap: 10px; }

.lp-inject ol.lp-steps > li {
  padding: 14px 18px 15px 56px;
  border-color: #E1E8F3;
  transition: border-color 0.18s ease, box-shadow 0.18s ease;
}

.lp-inject ol.lp-steps > li:hover {
  border-color: #BFD0EC;
  box-shadow: 0 4px 14px rgba(11, 27, 58, 0.06);
}

.lp-inject ol.lp-steps > li::before {
  left: 16px;
  top: 14px;
  width: 26px;
  height: 26px;
  font-size: 12.5px;
  background: linear-gradient(180deg, #3F5FD6 0%, #2B4ACB 55%, #1E3AAF 100%);
  box-shadow: 0 0 0 3px #EAF0FC;
}

/* The rail runs from under one badge into the gap above the next. */
.lp-inject ol.lp-steps > li::after {
  content: "";
  position: absolute;
  left: 28px;
  top: 44px;
  bottom: -11px;
  width: 2px;
  border-radius: 1px;
  background: #E1E8F3;
}

.lp-inject ol.lp-steps > li:last-child::after { display: none; }

.lp-inject ol.lp-steps > li > strong {
  font-size: 15px;
  font-weight: 700;
  letter-spacing: -0.01em;
  line-height: 1.35;
  margin-bottom: 2px;
}

.lp-inject ol.lp-steps li ul { margin-top: 6px; }

.lp-inject ol.lp-steps li ul li {
  margin-bottom: 4px;
  padding-left: 16px;
  line-height: 1.5;
}

.lp-inject ol.lp-steps li ul li::before {
  top: 0.58em;
  background: #A8C3F6;
}

@media (max-width: 544px) {
  .lp-inject ol.lp-steps > li { padding: 13px 14px 14px 48px; }
  .lp-inject ol.lp-steps > li::before { left: 12px; top: 13px; width: 24px; height: 24px; }
  .lp-inject ol.lp-steps > li::after { left: 23px; top: 41px; }
  .lp-inject ol.lp-steps > li > strong { font-size: 14.5px; }
}


/* ===================== Stage 38: more reveal =====================
   The scroll reveal already existed but was pointed at very little. These are
   the remaining repeated blocks on the site, the places where a row of similar
   things appears and a stagger reads as sequence rather than decoration.

   The delay cycles every third item instead of growing with the index. A
   fourteen step list with a cumulative delay would leave the last card waiting
   most of a second, which stops being an effect and starts being a wait. */

.lp-inject ol.lp-steps > .lp-reveal:nth-child(3n + 2),
.lp-inject .lp-sites > .lp-reveal:nth-child(3n + 2),
.lp-inject .lp-tips > .lp-reveal:nth-child(3n + 2),
.lp-inject .lp-rule > .lp-reveal:nth-child(3n + 2),
.lp-finder__goals > .lp-reveal:nth-child(3n + 2),
.lp-finder__grid > .lp-reveal:nth-child(3n + 2) { transition-delay: 60ms; }

.lp-inject ol.lp-steps > .lp-reveal:nth-child(3n + 3),
.lp-inject .lp-sites > .lp-reveal:nth-child(3n + 3),
.lp-inject .lp-tips > .lp-reveal:nth-child(3n + 3),
.lp-inject .lp-rule > .lp-reveal:nth-child(3n + 3),
.lp-finder__goals > .lp-reveal:nth-child(3n + 3),
.lp-finder__grid > .lp-reveal:nth-child(3n + 3) { transition-delay: 120ms; }

/* A goal chip is a button, so it settles rather than slides: a 12px lift on a
   thing you are about to tap reads as the page still loading. */
.lp-finder__goal.lp-reveal { transform: translateY(6px) scale(0.985); }
.lp-finder__goal.lp-reveal.lp-in { transform: none; }

@media (prefers-reduced-motion: reduce) {
  .lp-inject ol.lp-steps > li { transition: none !important; }
  .lp-inject ol.lp-steps > li:hover { box-shadow: none !important; }
  .lp-finder__goal.lp-reveal,
  .lp-finder__goal.lp-reveal.lp-in { transform: none !important; }
}

/* ===================== Stage 39: mobile-only menu rows =====================
   The desktop header already carries a logo that goes home, so a Home row
   there would be a second link to the same place in a header with no room to
   spare. On a phone the logo is small and the menu is the whole navigation, so
   the row earns its place. */

@media (min-width: 922px) {
  .main-header-menu > .lp-mobile-only,
  .ast-desktop .main-header-menu .lp-mobile-only { display: none !important; }
}

/* In the mobile popup it is the first row, so it gets a little more weight. */
#ast-mobile-popup .lp-mobile-only > .menu-link {
  font-weight: 700;
}

/* ===================== Stage 40: trust strip =====================
   Replaces the three-item bar in the header builder. Same slot, same job,
   more of it, and it moves because seven lines do not fit on a phone.
   The old bar's markup is still in the Customizer, so hiding it here is
   reversible: clear the Above Header HTML widget to remove it for good. */

.lp-ann__i { display: none !important; }

.lp-mq {
  overflow: hidden;
  background: #EEF6E0;
  border-bottom: 1px solid #DCEBC4;
  padding: 7px 0;
}

.lp-mq__track {
  display: flex;
  width: max-content;
  animation: lpMq 42s linear infinite;
}

.lp-mq:hover .lp-mq__track,
.lp-mq:focus-within .lp-mq__track { animation-play-state: paused; }

.lp-mq__run { display: flex; flex: 0 0 auto; }

.lp-mq__item {
  display: inline-flex;
  align-items: center;
  padding: 0 22px;
  font-size: 12px;
  line-height: 1.3;
  letter-spacing: 0.02em;
  color: #2F4A12;
  white-space: nowrap;
}

.lp-mq__item::before {
  content: "\2713";
  margin-right: 8px;
  color: #74A82F;
  font-weight: 700;
}

/* Travels exactly one run, so the second is already in position. */
@keyframes lpMq {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

@media (max-width: 544px) {
  .lp-mq__item { font-size: 11px; padding: 0 16px; }
  .lp-mq__track { animation-duration: 34s; }
}

/* Motion off means it stops and becomes something you can swipe instead. */
@media (prefers-reduced-motion: reduce) {
  .lp-mq { overflow-x: auto; }
  .lp-mq__track { animation: none; }
  .lp-mq__run + .lp-mq__run { display: none; }
}


/* ===================== Stage 41: sticky buy bar =====================
   Phones only, and only while the real button is off screen. It ships hidden
   and the script reveals it, so a page with no script has no bar. */

.lp-buybar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 9000;
  background: #FFFFFF;
  border-top: 1px solid #D6DEEC;
  box-shadow: 0 -6px 20px rgba(11, 27, 58, 0.10);
  padding: 9px 14px calc(9px + env(safe-area-inset-bottom, 0px));
  transform: translateY(110%);
  transition: transform 0.24s ease;
}

.lp-buybar.is-on { transform: none; }

.lp-buybar__in {
  display: flex;
  align-items: center;
  gap: 12px;
  max-width: 760px;
  margin: 0 auto;
}

.lp-buybar__info { min-width: 0; flex: 1 1 auto; display: block; }

.lp-buybar__name {
  display: block;
  font-size: 12.5px;
  font-weight: 600;
  color: #0B1B3A;
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.lp-buybar__price {
  display: block;
  font-size: 14px;
  font-weight: 700;
  color: #2B4ACB;
  line-height: 1.3;
}

.lp-buybar__price del { opacity: 0.5; font-weight: 500; margin-right: 5px; }
.lp-buybar__price ins { text-decoration: none; }

.lp-buybar__btn {
  flex: 0 0 auto;
  border: 0;
  border-radius: 999px;
  background: #8CC63F;
  color: #14300A;
  font-size: 14px;
  font-weight: 700;
  padding: 12px 22px;
  cursor: pointer;
  transition: background 0.18s ease;
}

.lp-buybar__btn:hover,
.lp-buybar__btn:focus-visible { background: #74A82F; }

/* Room to scroll past the footer while the bar is up. */
body.lp-has-buybar { padding-bottom: 68px; }

@media (min-width: 922px) {
  .lp-buybar { display: none !important; }
  body.lp-has-buybar { padding-bottom: 0; }
}

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


/* ===================== Stage 42: build a pack ===================== */

.lp-pack {
  margin: 1.1em 0;
  padding: 13px 15px;
  border: 1px solid #C9E29A;
  border-radius: 10px;
  background: #F7FBEF;
}

.lp-pack__head {
  margin: 0 0 3px;
  font-size: 15px;
  font-weight: 700;
  color: #14300A;
  line-height: 1.3;
}

.lp-pack__sub {
  margin: 0 0 10px;
  font-size: 13px;
  line-height: 1.5;
  color: #4A6B2A;
}

.lp-pack__tiers {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
}

.lp-pack__tiers li {
  display: flex;
  align-items: baseline;
  gap: 5px;
  margin: 0;
  padding: 5px 11px;
  border-radius: 999px;
  background: #FFFFFF;
  border: 1px solid #C9E29A;
}

.lp-pack__q { font-size: 12px; font-weight: 700; color: #0B1B3A; }
.lp-pack__p { font-size: 12px; color: #4A6B2A; }

.lp-pack__nudge {
  margin: 0 0 1.2em;
  padding: 12px 15px;
  border-radius: 8px;
  border: 1px solid #D6DEEC;
  background: #F4F6FB;
  font-size: 14px;
  line-height: 1.5;
  color: #54658A;
}

.lp-pack__nudge.is-on {
  border-color: #C9E29A;
  background: #F7FBEF;
  color: #4A6B2A;
}

.lp-pack__nudge strong { color: #14300A; }

@media (max-width: 544px) {
  .lp-pack { padding: 12px 13px; }
  .lp-pack__head { font-size: 14px; }
}


/* ===================== Stage 43: hero marks stay two up =====================
   They were dropping to a single column on the narrowest phones, which turned
   four short labels into four full rows and pushed everything below the fold. */

@media (max-width: 544px) {
  .lp-hero .lp-hero__marks {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px 10px;
  }
  .lp-hero .lp-hero__mark { font-size: 0.78rem; gap: 8px; }
  .lp-hero .lp-hero__disc { width: 30px; height: 30px; }
  .lp-hero .lp-hero__disc svg { width: 15px; height: 15px; }
}


/* ===================== Stage 44: one page title treatment =====================
   Page titles had accumulated six different sizes across earlier stages, plus
   per-page overrides, so no two templates agreed. This block is the single
   source of truth: same size, weight, colour, spacing and alignment on
   archives, pages and posts. It carries !important because what it overrides
   does too.

   The product title keeps its alignment, because it sits in a column beside
   the gallery rather than across the page, but takes the same size and colour
   so the family still reads as one. */

body .ast-archive-description,
body .ast-article-single > .entry-header,
body .ast-article-post > .entry-header {
  text-align: center !important;
  border-left: 0 !important;
  padding: 1.1em 1.1em 0.9em !important;
  margin-bottom: 1em !important;
}

body .ast-archive-description .ast-archive-title,
body .ast-archive-description .page-title,
body .entry-header .entry-title,
body h1.entry-title,
body h1.page-title {
  font-size: 1.75rem !important;
  font-weight: 700 !important;
  line-height: 1.2 !important;
  letter-spacing: -0.015em !important;
  color: #0B1B3A !important;
  margin: 0 auto !important;
  padding: 0 !important;
  text-align: center !important;
}

/* The one piece of brand on the title, and it is the same everywhere. */
body .ast-archive-description .ast-archive-title::after,
body .entry-header .entry-title::after {
  content: "";
  display: block;
  width: 46px;
  height: 3px;
  border-radius: 2px;
  margin: 10px auto 0;
  background: #8CC63F;
}

/* Archive descriptions sit under the rule, not beside it. */
body .ast-archive-description .archive-description { margin-top: 10px; }

body .product_title.entry-title {
  font-size: 1.75rem !important;
  font-weight: 700 !important;
  line-height: 1.2 !important;
  letter-spacing: -0.015em !important;
  color: #0B1B3A !important;
  text-align: left !important;
}

body .product_title.entry-title::after { content: none !important; }

@media (max-width: 921px) {
  body .ast-archive-description,
  body .ast-article-single > .entry-header,
  body .ast-article-post > .entry-header {
    padding: 0.9em 0.9em 0.75em !important;
    margin-bottom: 0.8em !important;
  }
  body .ast-archive-description .ast-archive-title,
  body .ast-archive-description .page-title,
  body .entry-header .entry-title,
  body h1.entry-title,
  body h1.page-title,
  body .product_title.entry-title { font-size: 1.45rem !important; }

  body .ast-archive-description .ast-archive-title::after,
  body .entry-header .entry-title::after { width: 38px; height: 3px; margin-top: 8px; }
}

/* ===================== Stage 45: hero marks, forced two up =====================
   Stage 43 set grid-template-columns and nothing changed, which rules the
   cascade out: a column count only does anything while the element is still a
   grid. Something later was resetting display on the list, so the track
   definition was being ignored and the items fell back to stacking.

   So this pins display as well as the columns, and pins the items too, at the
   same breakpoint where the hero stacks. The element selector plus !important
   is deliberate: everything it has to beat is already !important. */

@media (max-width: 921px) {
  .lp-hero ul.lp-hero__marks {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 12px 10px !important;
    list-style: none !important;
    padding-left: 0 !important;
  }

  .lp-hero ul.lp-hero__marks > li.lp-hero__mark {
    display: flex !important;
    align-items: center !important;
    width: auto !important;
    max-width: none !important;
    margin: 0 !important;
    float: none !important;
  }
}

@media (max-width: 400px) {
  .lp-hero ul.lp-hero__marks { gap: 10px 8px !important; }
  .lp-hero ul.lp-hero__marks > li.lp-hero__mark { font-size: 0.76rem !important; gap: 7px !important; }
  .lp-hero ul.lp-hero__marks .lp-hero__disc { width: 29px !important; height: 29px !important; }
  .lp-hero ul.lp-hero__marks .lp-hero__disc svg { width: 15px !important; height: 15px !important; }
}

/* ===================== Stage 46: trust strip sizing =====================
   The strip was built for seven long lines and now carries four short ones,
   so everything that was set to fit is now set too small. Larger type, more
   air top and bottom, and more space between items so they read as separate
   claims rather than one run-on line.

   The travel changes with the markup: three runs now, so one run is a third
   of the track, not a half. The duration comes down with it, because a short
   run moving over the old duration crawls. */

.lp-mq { padding: 10px 0; }

.lp-mq__track { animation-duration: 18s; }

.lp-mq__item {
  padding: 0 30px;
  font-size: 13px;
  letter-spacing: 0.015em;
  font-weight: 500;
}

.lp-mq__item::before {
  margin-right: 9px;
  font-size: 12px;
}

@keyframes lpMq {
  from { transform: translateX(0); }
  to   { transform: translateX(-33.3333%); }
}

@media (max-width: 544px) {
  .lp-mq { padding: 9px 0; }
  .lp-mq__track { animation-duration: 15s; }
  .lp-mq__item { font-size: 12px; padding: 0 20px; }
  .lp-mq__item::before { margin-right: 7px; }
}

/* ===================== Stage 47: tier pills on one line =====================
   They were a wrapping flex row, so four pills became three and one, which
   reads as though the last tier is a separate idea. Column auto-flow puts
   every tier on one row whatever the count, so changing the tiers in the
   option cannot break the layout. minmax(0, 1fr) is what lets them shrink
   rather than overflow on a narrow phone. */

.lp-pack__tiers {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  gap: 6px;
}

.lp-pack__tiers li {
  justify-content: center;
  gap: 4px;
  padding: 6px 5px;
  min-width: 0;
}

.lp-pack__q,
.lp-pack__p {
  font-size: 11.5px;
  white-space: nowrap;
}

@media (max-width: 380px) {
  .lp-pack__tiers { gap: 4px; }
  .lp-pack__tiers li { padding: 6px 3px; gap: 3px; }
  .lp-pack__q,
  .lp-pack__p { font-size: 10.5px; }
}

@media (min-width: 783px) {
  .lp-pack__tiers { gap: 8px; }
  .lp-pack__tiers li { padding: 6px 12px; }
  .lp-pack__q,
  .lp-pack__p { font-size: 12.5px; }
}

/* ===================== Stage 48: remove the old bar's empty shell ==========
   Stage 40 hid the spans inside the original announcement bar but left the
   builder row that held them, so an empty, still-padded green band sat between
   the new strip and the header. Hiding the text was never enough: the row has
   its own background and padding and does not collapse when emptied.

   The above header area holds nothing else on this site, so the whole row
   goes. To bring it back, delete this rule and clear the Above Header HTML
   widget in the Customizer instead. */

.ast-above-header-wrap,
.ast-mobile-header-wrap .ast-above-header-wrap,
.ast-desktop .ast-above-header-wrap { display: none !important; }

/* The strip itself was a touch tall for a single line of 13px text. */
.lp-mq { padding: 8px 0; }

@media (max-width: 544px) {
  .lp-mq { padding: 7px 0; }
}

/* ===================== Stage 49: cart badge bump ===================== */

@keyframes lpBump {
  0%   { transform: scale(1); }
  32%  { transform: scale(1.42); }
  62%  { transform: scale(0.92); }
  100% { transform: scale(1); }
}

/* Astra draws the count as a pseudo element on the bag icon, so the class
   lands on the icon and the badge is what actually moves. */
.ast-site-header-cart i.astra-icon.lp-bump::after {
  animation: lpBump 0.42s cubic-bezier(0.34, 1.56, 0.64, 1);
  transform-origin: center center;
}

.moderncart-floating-cart-count.lp-bump {
  animation: lpBump 0.42s cubic-bezier(0.34, 1.56, 0.64, 1);
  transform-origin: center center;
}

@media (prefers-reduced-motion: reduce) {
  .ast-site-header-cart i.astra-icon.lp-bump::after,
  .moderncart-floating-cart-count.lp-bump { animation: none !important; }
}


/* ===================== Stage 50: empty page headers collapse ==============
   Stage 44 gave every page header the same padding so titles would line up.
   On templates that hide their title, the checkout being the one that matters,
   that left a padded, empty block sitting between the page and its first
   field. A header with no title in it has nothing to space out. */

body .entry-header:not(:has(.entry-title)),
body .ast-archive-description:not(:has(.ast-archive-title)) {
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
  min-height: 0 !important;
}

/* Checkout: the login prompt and the first fieldset were a screen apart. */
.woocommerce-checkout .woocommerce-form-login-toggle { margin-bottom: 0.6em !important; }
.woocommerce-checkout form.checkout > #customer_details { margin-top: 0.8em; }
.woocommerce-checkout .woocommerce-form-login[style*="none"] { display: none !important; }

/* ===================== Stage 51: one rule per title =====================
   Pages built on .lp-inject carried their own lime bar above the kicker, from
   before the page titles were standardised. Stage 44 then added the site-wide
   bar under every title, so those pages drew two, one under the heading and
   one further down with a gap between them.

   The title's bar is the one that appears on every template, so it stays and
   the kicker's goes. */

.lp-inject .lp-kicker::before { content: none !important; }

.lp-inject .lp-kicker {
  padding-top: 0 !important;
  margin-top: 0 !important;
}

/* ===================== Stage 52: checkout spacing =====================
   Read off the rendered checkout rather than guessed at. The page prints two
   empty notices wrappers and four empty attribution elements, none of which
   show anything but all of which sit in the flow. The rest is one consistent
   rhythm: headings, fields and sections all spaced from the same few values
   instead of whatever each template happened to carry. */

/* Wrappers that are empty until something goes wrong. They contribute nothing
   themselves and their children space themselves when they appear. */
.woocommerce-checkout .woocommerce-notices-wrapper { margin: 0 !important; padding: 0 !important; }
.woocommerce-checkout .woocommerce-notices-wrapper > * { margin-bottom: 1em; }
.woocommerce-checkout wc-order-attribution-inputs { display: none !important; }

.woocommerce-checkout .lp-pack__nudge { margin: 0 0 1em !important; }

/* The login prompt and the first fieldset were a screen apart. */
.woocommerce-checkout .woocommerce-form-login-toggle { margin: 0 0 0.7em !important; }
.woocommerce-checkout .woocommerce-form-login { margin: 0 0 1.2em !important; }

/* Sections. */
.woocommerce-checkout #customer_details { margin: 0 0 1.4em; }
.woocommerce-checkout #customer_details h3,
.woocommerce-checkout #order_review_heading {
  margin: 0 0 0.7em !important;
  font-size: 1.15rem !important;
  line-height: 1.3 !important;
  font-weight: 700 !important;
  color: #0B1B3A !important;
}
.woocommerce-checkout #order_review_heading { margin-top: 1.6em !important; }
.woocommerce-checkout .woocommerce-additional-fields { margin-top: 1.3em; }
.woocommerce-checkout .woocommerce-additional-fields h3 { margin-top: 0 !important; }
.woocommerce-checkout .woocommerce-shipping-fields { margin-top: 0; }

/* Fields, one rhythm. */
.woocommerce-checkout .form-row { margin: 0 0 0.9em !important; padding: 0 !important; }
.woocommerce-checkout .form-row:last-child { margin-bottom: 0 !important; }
.woocommerce-checkout .form-row label { display: block; margin: 0 0 0.3em; line-height: 1.35; }
.woocommerce-checkout .woocommerce-billing-fields__field-wrapper,
.woocommerce-checkout .shipping_address,
.woocommerce-checkout .woocommerce-additional-fields__field-wrapper { margin: 0; }

/* Order review. */
.woocommerce-checkout #order_review { margin-bottom: 1em; }
.woocommerce-checkout .shop_table { margin: 0 0 1.2em !important; }
.woocommerce-checkout .woocommerce-terms-and-conditions-wrapper { margin: 0 0 1em; }
.woocommerce-checkout .place-order { margin: 0 !important; padding: 0 !important; }

@media (max-width: 921px) {
  /* One column, so the two halves stop fighting for width. */
  .woocommerce-checkout #customer_details .col-1,
  .woocommerce-checkout #customer_details .col-2 {
    width: 100%;
    float: none;
    margin: 0 0 1.3em;
  }
  .woocommerce-checkout #customer_details .col-2 { margin-bottom: 0; }
  .woocommerce-checkout #customer_details h3,
  .woocommerce-checkout #order_review_heading { font-size: 1.08rem !important; }
  .woocommerce-checkout .form-row { margin-bottom: 0.8em !important; }
}

/* ===================== Stage 53: checkout, measured =====================
   Stage 52 aimed at the wrong elements. The space was never on the wrappers
   it targeted. Read off the stylesheet the page actually serves:

     .woocommerce-info/message/error  margin: 0 0 2em;  padding: 1em 2em 1em 3.5em
     #customer_details h3             padding: 20px 0 14px;  margin: 0 0 20px

   The checkout stacks two of those notices at the top, one confirming the add
   and one offering login, so that alone is 4em before the form starts. The
   heading then adds another 34px of padding that Stage 52 left alone, because
   it set margin and not padding.

   The 3.5em left padding is reserving room for an icon that renders as an
   empty box on this install, which is the square sitting before "Returning
   customer?". The icon goes and the padding comes back. */

.woocommerce-checkout .woocommerce-info,
.woocommerce-checkout .woocommerce-message,
.woocommerce-checkout .woocommerce-error,
.woocommerce .woocommerce-info,
.woocommerce .woocommerce-message,
.woocommerce .woocommerce-error {
  margin: 0 0 0.9em !important;
  padding: 0.8em 1.1em !important;
  border-top-width: 2px !important;
  border-top-color: #2B4ACB !important;
  border-radius: 0 0 6px 6px;
  font-size: 0.92rem;
  line-height: 1.5;
}

.woocommerce-checkout .woocommerce-info::before,
.woocommerce-checkout .woocommerce-message::before,
.woocommerce-checkout .woocommerce-error::before,
.woocommerce .woocommerce-info::before,
.woocommerce .woocommerce-message::before,
.woocommerce .woocommerce-error::before {
  content: none !important;
  display: none !important;
}

/* The button inside a notice was dropping to its own line with a top margin. */
.woocommerce-checkout .woocommerce-message a.button,
.woocommerce-checkout .woocommerce-info a.button {
  margin: 0 0 0 0.6em !important;
  padding: 8px 16px !important;
  font-size: 12px !important;
  vertical-align: middle;
}

/* Astra pads every checkout heading and rules it off underneath. Stage 52 set
   the margin but not the padding, so 34px of it survived. */
.woocommerce-checkout #customer_details h3,
.woocommerce-checkout #customer_details h3:not(.elementor-widget-woocommerce-checkout-page h3),
.woocommerce #customer_details h3 {
  padding: 0 0 0.45em !important;
  margin: 0 0 0.85em !important;
}

.woocommerce-checkout #order_review_heading {
  padding: 0 0 0.45em !important;
  margin: 1.3em 0 0.85em !important;
}

/* The login prompt and the form it sits above. */
.woocommerce-checkout .woocommerce-form-login-toggle { margin: 0 !important; }
.woocommerce-checkout form.woocommerce-form-login { margin: 0 0 1em !important; padding: 1em 1.1em !important; }

@media (max-width: 921px) {
  .woocommerce-checkout .woocommerce-info,
  .woocommerce-checkout .woocommerce-message,
  .woocommerce-checkout .woocommerce-error,
  .woocommerce .woocommerce-info,
  .woocommerce .woocommerce-message,
  .woocommerce .woocommerce-error {
    margin: 0 0 0.75em !important;
    padding: 0.7em 0.9em !important;
    font-size: 0.88rem;
  }

  .woocommerce-checkout .woocommerce-message a.button,
  .woocommerce-checkout .woocommerce-info a.button {
    display: inline-block;
    margin: 0.5em 0 0 !important;
  }
}

/* ===================== Stage 54: the rest of the checkout =================
   Found by scanning every stylesheet the checkout actually loads for margins
   and paddings over 1.5em on checkout elements, rather than by eye:

     form #order_review              padding: 0 2em
     .woocommerce-terms-and-conditions  margin-bottom: 1.618em; padding: 1.618em
     .woocommerce-js #customer_details  margin-bottom: 2em

   The first is the worst on a phone: two ems of indent each side of the order
   summary is most of the usable width on a 360px screen. */

.woocommerce-checkout form #order_review,
.woocommerce form #order_review,
.woocommerce-checkout #order_review { padding: 0 !important; }

.woocommerce-checkout #customer_details,
.woocommerce-js #customer_details { margin-bottom: 1.2em !important; }

.woocommerce .woocommerce-terms-and-conditions,
.woocommerce-page .woocommerce-terms-and-conditions,
.woocommerce-checkout .woocommerce-terms-and-conditions {
  margin: 0 0 0.9em !important;
  padding: 0.9em 1em !important;
}

.woocommerce-checkout .woocommerce-terms-and-conditions-checkbox-text { line-height: 1.45; }

@media (max-width: 921px) {
  .woocommerce-checkout #customer_details { margin-bottom: 1em !important; }

  .woocommerce .woocommerce-terms-and-conditions,
  .woocommerce-page .woocommerce-terms-and-conditions,
  .woocommerce-checkout .woocommerce-terms-and-conditions {
    padding: 0.8em 0.85em !important;
    font-size: 0.85rem;
  }
}

/* ===================== Stage 55: the cart count you can read ==============
   Astra resolves the badge to white text on a white background:

     .ast-site-header-cart .ast-addon-cart-wrap i.astra-icon:after
        { color:#ffffff; background-color:#FFFFFF; }

   The count setting is empty, so it falls back to global colour 5, which is
   white on this palette, and the background lands on white too. The number has
   been there the whole time, painted invisible.

   Lime on ink, matching the Add To Cart button, so the badge and the button a
   customer just pressed are obviously the same thing. */

.ast-site-header-cart i.astra-icon::after,
.ast-site-header-cart .ast-addon-cart-wrap i.astra-icon::after,
.ast-theme-transparent-header .ast-site-header-cart .ast-addon-cart-wrap i.astra-icon::after {
  background: #8CC63F !important;
  background-color: #8CC63F !important;
  color: #0B1B3A !important;
  font-weight: 700 !important;
  letter-spacing: 0 !important;
  box-shadow: 0 1px 3px rgba(11, 27, 58, 0.35) !important;
}

.ast-site-header-cart .ast-site-header-cart-li:hover .ast-addon-cart-wrap i.astra-icon::after,
.ast-menu-cart-fill .ast-site-header-cart-li:hover .ast-addon-cart-wrap i.astra-icon::after {
  background: #74A82F !important;
  background-color: #74A82F !important;
  color: #0B1B3A !important;
}

/* An empty cart has nothing to count, so it wears no badge. Going from none to
   one is then the clearest signal on the page, and the bump lands on it. */
.ast-site-header-cart i.astra-icon[data-cart-total="0"]::after { display: none !important; }


/* Stage 56: mobile drawer. Replaces Astra's filled account glyph with a
   stroked mark matching the hero icons, and puts every row on one rhythm.
   Astra sets fill on the svg's path and circle, not the svg, so its colour
   cannot be overridden from the parent -- the glyph is hidden and redrawn. */
#ast-mobile-popup .ast-mobile-popup-header { min-height: 0 !important; padding: 4px 6px 0 !important; }
#ast-mobile-popup .ast-mobile-popup-header .menu-toggle-close { font-size: 19px !important; padding: 0.5em !important; }
#ast-mobile-popup .ast-mobile-popup-content { padding-top: 0 !important; }
#ast-mobile-popup .ast-mobile-popup-content .ast-builder-layout-element { padding: 0 !important; margin: 0 !important; }
#ast-mobile-popup .ast-header-account-wrap { width: 100%; }
#ast-mobile-popup .ast-header-account-link { display: flex !important; align-items: center; gap: 12px; width: 100%; box-sizing: border-box; padding: 14px 18px !important; color: #7FA6F2; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; border-bottom: 1px solid rgba(255,255,255,0.12); }
#ast-mobile-popup .ast-header-account-link .ahfb-svg-iconset, #ast-mobile-popup .ast-header-account-link svg { display: none !important; }
#ast-mobile-popup .ast-header-account-link::before { content: ""; flex: 0 0 auto; width: 19px; height: 19px; background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%237FA6F2%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Ccircle%20cx%3D%2712%27%20cy%3D%278%27%20r%3D%273.6%27%2F%3E%3Cpath%20d%3D%27M4.8%2020a7.2%207.2%200%200%201%2014.4%200%27%2F%3E%3C%2Fsvg%3E"); background-repeat: no-repeat; background-position: center; background-size: contain; }
#ast-mobile-popup .ast-header-account-link::after { content: "My Account"; }
#ast-mobile-popup .ast-builder-menu-1 .menu-item > .menu-link, #ast-mobile-popup .ast-builder-menu-1 .menu-item > a { padding: 14px 18px !important; font-size: 0.88rem; }
#ast-mobile-popup .ast-builder-menu-1 .sub-menu .menu-item > .menu-link { padding: 12px 18px 12px 34px !important; font-size: 0.82rem; color: rgba(255,255,255,0.86); letter-spacing: 0.05em; }
#ast-mobile-popup .ast-builder-menu-1 .sub-menu { margin: 0; padding: 0; background: rgba(0,0,0,0.13); }
#ast-mobile-popup .ast-builder-menu-1 .sub-menu .menu-item:last-child { border-bottom: 0; }
#ast-mobile-popup .ast-builder-menu-1 .menu-item { border-bottom: 1px solid rgba(255,255,255,0.12); }


/* Stage 57: hero video sits in the art panel on exactly the same terms as
   the still it replaces, so the layout does not move when one is uploaded. */
.lp-hero__art video { display: block; width: 100%; height: auto; }
.lp-hero__art--video { position: relative; overflow: hidden; }
@media (max-width: 921px) {
  .lp-hero__art video { object-fit: cover; object-position: 50% 22%; height: 260px; }
}

/* ===== Stage 59: account page vertical rhythm on mobile =====
   Tightens margins and brings the two headings and the field labels down a
   step. Colours, borders and input heights are untouched, so every tap
   target keeps its size. Desktop is unaffected. */
@media (max-width: 921px) {
  .woocommerce-account #content .ast-container { padding-top: 10px !important; }
  .woocommerce-account .entry-header.ast-no-title { display: none !important; }
  .woocommerce-account .entry-content > .woocommerce { margin-top: 0 !important; }
  .woocommerce-account .woocommerce-notices-wrapper:empty { display: none !important; }
  .woocommerce-account #customer_login h2 {
    font-size: 1.5rem !important;
    line-height: 1.25 !important;
    margin: 0 0 10px !important;
  }
  .woocommerce-account #customer_login .u-column2 h2 { margin-top: 22px !important; }
  .woocommerce-account #customer_login .u-column1,
  .woocommerce-account #customer_login .u-column2 { margin: 0 !important; }
  .woocommerce-account form.login,
  .woocommerce-account form.register {
    margin: 0 !important;
    padding: 14px 14px 16px !important;
  }
  .woocommerce-account form.login .form-row,
  .woocommerce-account form.register .form-row {
    margin: 0 0 12px !important;
    padding: 0 !important;
  }
  .woocommerce-account form.login .form-row:last-of-type,
  .woocommerce-account form.register .form-row:last-of-type { margin-bottom: 0 !important; }
  .woocommerce-account form.login label,
  .woocommerce-account form.register label {
    display: block;
    margin: 0 0 4px !important;
    font-size: 0.88rem !important;
    line-height: 1.3 !important;
  }
  .woocommerce-account form.login .woocommerce-form-login__rememberme {
    display: block;
    margin: 0 0 12px !important;
    font-size: 0.88rem !important;
  }
  .woocommerce-account form.login button[type="submit"],
  .woocommerce-account form.register button[type="submit"] { margin: 0 !important; }
  .woocommerce-account .woocommerce-LostPassword { margin: 12px 0 0 !important; }
  .woocommerce-account .woocommerce-privacy-policy-text p,
  .woocommerce-account form.register > p:not(.form-row) {
    margin: 0 0 12px !important;
    font-size: 0.82rem !important;
    line-height: 1.45 !important;
  }
}

/* ===== Stage 60: live price table ===== */
.lp-pricetable { overflow-x: auto; margin: 0 0 8px; -webkit-overflow-scrolling: touch; }
.lp-pricetable table { width: 100%; border-collapse: collapse; font-size: 0.92rem; }
.lp-pricetable th, .lp-pricetable td { padding: 9px 10px; border-bottom: 1px solid #D6DEEC; text-align: left; vertical-align: top; }
.lp-pricetable thead th { background: #F4F6FB; color: #12266B; font-weight: 700; font-size: 0.8rem; letter-spacing: 0.03em; text-transform: uppercase; white-space: nowrap; }
.lp-pricetable td.lp-num, .lp-pricetable th.lp-num { text-align: right; white-space: nowrap; }
.lp-pricetable tbody tr:hover { background: #F9FBFF; }
.lp-pricetable tbody tr:first-child td { font-weight: 600; }
.lp-pricetable a { color: #2B4ACB; text-decoration: none; }
.lp-pricetable a:hover { text-decoration: underline; }
.lp-blend { color: #54658A; font-style: italic; }
.lp-out td { opacity: 0.55; }
.lp-out-tag { font-size: 0.72rem; color: #54658A; white-space: nowrap; }
@media (max-width: 921px) { .lp-pricetable table { font-size: 0.82rem; } .lp-pricetable th, .lp-pricetable td { padding: 7px 8px; } }

/* ===== Stage 61: comparison page link on product pages ===== */
.lp-hublink { margin: 4px 0 14px; }
.lp-hublink a { display: inline-flex; align-items: center; gap: 6px; padding: 8px 12px; border: 1px solid #D6DEEC; border-radius: 8px; background: #F4F6FB; color: #2B4ACB; font-size: 0.88rem; font-weight: 600; text-decoration: none; }
.lp-hublink a:hover { border-color: #2B4ACB; background: #FFFFFF; }

/* ===== Stage 62: Peptides A to Z ===== */
.lp-az__jump { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 22px; }
.lp-az__jump a { min-width: 34px; padding: 6px 8px; border: 1px solid #D6DEEC; border-radius: 6px; background: #FFFFFF; color: #2B4ACB; font-weight: 700; font-size: 0.85rem; text-align: center; text-decoration: none; }
.lp-az__jump a:hover { border-color: #2B4ACB; }
.lp-az__group { margin: 0 0 18px; scroll-margin-top: 90px; }
.lp-az__letter { margin: 0 0 6px !important; padding-bottom: 4px; border-bottom: 2px solid #8CC63F; font-size: 1.2rem !important; color: #12266B; }
.lp-az__list { list-style: none; margin: 0 !important; padding: 0 !important; }
.lp-az__list li { display: flex; align-items: baseline; gap: 10px; padding: 7px 0; border-bottom: 1px solid #EEF1F7; margin: 0 !important; }
.lp-az__list a { flex: 1 1 auto; color: #0B1B3A; font-weight: 600; text-decoration: none; }
.lp-az__list a:hover { color: #2B4ACB; }
.lp-az__fmt { flex: 0 0 auto; font-size: 0.75rem; color: #54658A; }
.lp-az__price { flex: 0 0 auto; min-width: 64px; text-align: right; font-weight: 700; color: #12266B; font-size: 0.9rem; }
@media (max-width: 544px) { .lp-az__fmt { display: none; } }