/* =====================================================================
   Promo page (promo.html): Black Friday, HPLC peptide tests at the offer price.
   Built from the components in style.css (see DESIGN-SYSTEM.md); this file only adds the few
   things the page needs on top. Temporary campaign: delete together with promo.html and assets/js/promo.js.
   ===================================================================== */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.promo-page [id] { scroll-margin-top: calc(var(--header-h) + 16px); }
.promo-page :is(a, button, input, textarea):focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.pr-ended [data-live], .pr-ended [data-countdown] { display: none !important; }

/* hero: .page-hero.photo with the offer, buttons and countdown */
.pr-hero h1 span { color: var(--accent); white-space: nowrap; }
.pr-hero .chip { margin-bottom: 20px; }
.pr-hero .chip:hover { background: var(--light); color: inherit; }
@media (min-width: 1024px) { .pr-hero .hero-body { max-width: 660px; } }
/* on phones and tablets the text sits over the photo: fade it further */
@media (max-width: 1023px) {
  .page-hero.photo.pr-hero { background-image: linear-gradient(rgba(246, 251, 255, .88), rgba(246, 251, 255, .88)), var(--hero-img, none); }
}
.pr-cta { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 30px; }
.pr-cta .button { padding-left: 40px; padding-right: 40px; }
@media (max-width: 639px) { .pr-cta .button { width: 100%; } }
.pr-count { margin-top: 40px; }
.pr-count-label { margin: 0 0 10px; font-weight: 700; }
.pr-count-boxes { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; max-width: 440px; }
.pr-count-boxes > div { display: flex; flex-direction: column; align-items: center; padding: 12px 6px 10px; }
.pr-count-boxes b { font-size: 28px; line-height: 34px; font-weight: 700; font-variant-numeric: tabular-nums; }
@media (min-width: 640px) { .pr-count-boxes b { font-size: 36px; line-height: 44px; } }
.pr-count-boxes span { font-size: 13px; line-height: 19.5px; }
.pr-count-date { margin: 10px 0 0; font-size: 13px; line-height: 19.5px; }

/* centred section header: ornament, display-1, subtitle */
.pr-head { margin-bottom: 40px; }
.pr-head h1 { margin-top: 20px; }
.pr-head h3 { max-width: 880px; margin: 20px auto 0; }
@media (min-width: 1024px) { .pr-head { margin-bottom: 60px; } }

/* prices: regular crossed out, offer price in the accent colour */
.pr-old { margin-right: 8px; font-weight: 500; color: var(--gray); }
.pr-new { color: var(--accent); }

/* batch controls: .sort-btn to add, the cart's .ct-qty once added */
.promo-page .ct-qty { width: 110px; }
.pr-in { display: flex; align-items: center; gap: 14px; }
.pr-remove { font-size: 13px; line-height: 19.5px; font-weight: 700; text-decoration: underline; }
.pr-remove:hover { color: var(--primary); }
.p-card .pr-in { min-height: 54px; }

/* all tests: search + filters + the cart table with compact rows */
.pr-filter { display: flex; flex-direction: column; gap: 20px; margin-bottom: 30px; }
@media (min-width: 1024px) { .pr-filter { flex-direction: row; align-items: center; justify-content: space-between; } }
.pr-filter .sort-row { margin-top: 0; }
.pr-filter .sort-btn small { margin-left: 4px; font-size: inherit; opacity: .6; }
.pr-search { position: relative; display: block; }
@media (min-width: 1024px) { .pr-search { flex: 0 1 460px; } }
.pr-search .search-input { padding-right: 56px; }
.pr-search svg { position: absolute; right: 18px; top: 50%; width: 22px; height: 22px; transform: translateY(-50%); fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; pointer-events: none; }
.pr-count-line { margin: 0 0 10px; font-size: 13px; line-height: 19.5px; color: var(--gray); }
.pr-count-line:empty { display: none; }
.pr-table td { padding-top: 14px; padding-bottom: 14px; }
.pr-table th:nth-child(2), .pr-table td:nth-child(2), .pr-table th:last-child, .pr-table td:last-child { width: 1%; white-space: nowrap; }
.pr-table td:last-child { text-align: right; }
.pr-table tbody tr { transition: background .3s var(--ease); }
.pr-table tbody tr.is-on { background: rgba(9, 173, 157, .08); }
.pr-table .ci-name small { display: block; font-size: 13px; line-height: 19.5px; font-weight: 500; color: var(--gray); }
.pr-table .cart-item:hover .pr-name { text-decoration: underline; }
.pr-table .pr-old { display: block; margin: 0; font-size: 13px; line-height: 19.5px; }
.pr-table .pr-new { font-weight: 700; }
.pr-table .ci-name { overflow-wrap: anywhere; }
/* phones: each row on two lines (name; price + batches) instead of a sideways-scrolling table */
@media (max-width: 639px) {
  .pr-table, .pr-table tbody { display: block; }
  .pr-table thead, .pr-table .ci-img { display: none; }
  .pr-table tbody tr { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name name" "price act"; align-items: center; gap: 10px 16px; padding: 16px 0; }
  .cart-table.pr-table td { width: auto; padding: 0; }
  .pr-table td:nth-child(1) { grid-area: name; }
  .pr-table td:nth-child(2) { grid-area: price; }
  .pr-table td:nth-child(3) { grid-area: act; }
  .pr-table .pr-old { display: inline; margin-right: 8px; }
}
.pr-empty { margin: 20px 0 0; }
.pr-more { margin-top: 30px; text-align: center; }
.pr-more .button { padding-left: 60px; padding-right: 60px; }
.pr-fine { margin: 30px 0 0; font-size: 13px; line-height: 19.5px; color: var(--gray); }

/* how to claim: the steps panel, laid out in a row from 1024px */
@media (min-width: 1024px) {
  .pr-steps { display: grid; grid-template-columns: minmax(0, 1fr) 330px; grid-template-areas: "title photo" "row photo"; column-gap: 20px; padding: 40px 0 0 50px; }
  .pr-steps .steps-title { grid-area: title; margin-bottom: 30px; text-align: left; }
  .pr-steps-row { grid-area: row; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); padding-bottom: 50px; }
  .pr-steps .step { padding: 0 24px; border-top: 0; border-left: 1px solid rgba(255, 255, 255, .4); text-align: left; }
  .pr-steps .step:first-of-type { padding-left: 0; border-left: 0; }
  .pr-steps .steps-photo { grid-area: photo; align-self: end; margin: 0; }
}

/* quick checkout: the payment page's checkout as is (assets/js/checkout.js); only the section spacing here */
.pr-checkout .pr-head { padding-top: 50px; }
@media (min-width: 1024px) { .pr-checkout .pr-head { padding-top: 100px; } }

/* sticky cart bar: same look as the toast */
.pr-sticky {
  position: fixed;
  left: 50%;
  bottom: 24px;
  z-index: 9980;
  display: flex;
  align-items: center;
  gap: 20px;
  width: min(760px, calc(100% - 32px));
  padding: 10px 10px 10px 24px;
  border-radius: var(--radius);
  background: var(--dark);
  color: #fff;
  transform: translate(-50%, calc(100% + 48px));
  transition: transform .3s var(--ease);
}
body.pr-sticky-on .pr-sticky { transform: translate(-50%, 0); }
body.menu-open .pr-sticky { display: none; }
.pr-sticky-timer { display: none; padding-right: 20px; border-right: 1px solid rgba(255, 255, 255, .25); font-size: 14px; font-weight: 700; white-space: nowrap; }
@media (min-width: 768px) { .pr-sticky-timer { display: block; } }
.pr-sticky-sel { display: flex; flex: 1; flex-direction: column; min-width: 0; }
.pr-sticky-sel b { overflow: hidden; font-size: 14px; line-height: 20px; white-space: nowrap; text-overflow: ellipsis; }
.pr-sticky-sel small { font-size: 12px; line-height: 18px; opacity: .7; }
.pr-sticky .button { flex-shrink: 0; min-height: 44px; padding: 0 22px; font-size: 14px; }
@media (max-width: 639px) {
  .pr-sticky { bottom: 0; width: 100%; border-radius: 0; padding-bottom: calc(10px + env(safe-area-inset-bottom)); }
}
@media (prefers-reduced-motion: reduce) { .pr-sticky { transition: none; } }

/* =====================================================================
   Home banner (index.html): Black Friday, laid out like the home "Free shipping" banner
   (white card above the Live Operations Snapshot). Shown by index.html only while the sale runs.
   Font: Plus Jakarta Sans (Google Fonts, loaded in index.html) — the closest free match to the
   banner's lettering (Gilroy / Proxima Nova style).
   ===================================================================== */
.bf-banner {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1.3fr) minmax(0, .7fr);
  overflow: hidden;
  margin-bottom: 10px;
  border: 1px solid #E1E5E7;
  border-radius: 12px;
  background: #fff;
  box-shadow: 0 8px 28px rgba(20, 35, 45, .06);
  color: #2C3A44;
  font-family: 'Plus Jakarta Sans', 'Syne', sans-serif;
  transition: box-shadow .3s var(--ease);
}
.bf-banner[hidden] { display: none; }
.bf-banner:hover { box-shadow: 10px 10px 15px 0 rgba(14, 58, 47, .2); }
.bf-copy { position: relative; z-index: 2; padding: 24px 0 24px 50px; }
.bf-brand b { display: block; font-size: 32px; line-height: 34px; font-weight: 800; letter-spacing: .01em; }
.bf-brand b span { color: var(--primary); }
.bf-brand small { display: block; margin: 2px 0 0 2px; font-size: 11px; line-height: 14px; letter-spacing: .45em; text-transform: uppercase; color: var(--gray); }
.bf-title { margin-top: 16px; font-size: 86px; line-height: .9; font-weight: 800; letter-spacing: -.015em; text-transform: uppercase; color: var(--primary); }
.bf-sub { margin: 2px 0 0; font-size: 58px; line-height: 1.02; font-weight: 700; letter-spacing: -.01em; }
.bf-pill { display: inline-flex; align-items: center; gap: 20px; margin-top: 14px; padding: 6px 30px 6px 24px; border-radius: 12px; background-image: linear-gradient(#F9A63E, #F28A17); color: #fff; font-size: 32px; line-height: 42px; font-weight: 300; box-shadow: 0 6px 14px rgba(242, 138, 23, .25); }
.bf-pill svg { flex-shrink: 0; width: 42px; height: 34px; }
.bf-pill i { align-self: stretch; width: 1px; background: rgba(255, 255, 255, .7); }
.bf-pill b { font-weight: 800; }
.bf-box { display: flex; align-items: center; gap: 22px; max-width: 560px; margin-top: 10px; padding: 10px 26px; border-radius: 10px; background: #F1F5F7; }
.bf-box svg { flex-shrink: 0; width: 40px; height: 40px; color: #4B5563; }
.bf-box span { display: block; font-size: 21px; line-height: 26px; color: #4B5563; }
.bf-box b { display: block; font-size: 25px; line-height: 30px; font-weight: 800; color: var(--primary); }
.bf-note { display: flex; align-items: center; gap: 12px; margin: 12px 0 0; font-size: 16px; line-height: 22px; color: var(--gray); }
.bf-note svg { flex-shrink: 0; width: 24px; height: 24px; }
.bf-visual { position: relative; min-height: 220px; }
.bf-photo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 70%; }
.bf-visual::before { content: ''; position: absolute; inset: 0; z-index: 1; background: linear-gradient(90deg, #fff 0%, rgba(255, 255, 255, .7) 22%, rgba(255, 255, 255, 0) 60%); }
.bf-mol { position: absolute; z-index: 2; right: -40px; top: -40px; width: 210px; opacity: .8; }
.bf-sticker { position: absolute; z-index: 3; left: 22%; top: 50%; display: grid; place-content: center; width: 196px; height: 196px; border-radius: 50%; background-image: var(--grad-btn); color: #fff; text-align: center; transform: translateY(-50%) rotate(-8deg); box-shadow: 0 18px 40px rgba(0, 87, 88, .35); }
.bf-sticker b { font-size: 54px; line-height: 1; font-weight: 800; letter-spacing: -.03em; }
.bf-sticker small { margin-top: 6px; font-size: 14px; line-height: 18px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; }
@media (max-width: 1279px) {
  .bf-copy { padding-left: 36px; }
  .bf-title { font-size: 66px; }
  .bf-sub { font-size: 44px; }
  .bf-pill { font-size: 26px; line-height: 36px; }
  .bf-sticker { width: 164px; height: 164px; left: 14%; }
  .bf-sticker b { font-size: 44px; }
}
@media (max-width: 1023px) {
  .bf-title { font-size: 52px; }
  .bf-sub { font-size: 34px; }
  .bf-pill { gap: 12px; padding: 8px 20px; font-size: 19px; line-height: 28px; }
  .bf-pill svg { width: 32px; height: 26px; }
  .bf-box { gap: 14px; padding: 10px 18px; }
  .bf-box span { font-size: 15px; line-height: 20px; }
  .bf-box b { font-size: 18px; line-height: 24px; }
  .bf-note { font-size: 13px; line-height: 19px; }
  .bf-sticker { width: 136px; height: 136px; left: 10%; }
  .bf-sticker b { font-size: 36px; }
  .bf-sticker small { font-size: 11px; line-height: 14px; }
}
/* phones and small tablets: photo with the sticker on top, text below */
@media (max-width: 767px) {
  .bf-banner { grid-template-columns: minmax(0, 1fr); }
  .bf-visual { order: -1; min-height: 170px; }
  .bf-visual::before { background: linear-gradient(0deg, #fff 0%, rgba(255, 255, 255, .5) 30%, rgba(255, 255, 255, 0) 70%); }
  .bf-mol { width: 140px; right: -30px; top: -30px; }
  .bf-sticker { left: auto; right: 22px; top: 22px; width: 116px; height: 116px; transform: rotate(-8deg); }
  .bf-sticker b { font-size: 30px; }
  .bf-sticker small { margin-top: 2px; font-size: 10px; line-height: 14px; }
  .bf-copy { padding: 8px 20px 22px; }
  .bf-brand b { font-size: 24px; line-height: 26px; }
  .bf-title { margin-top: 14px; font-size: 46px; }
  .bf-sub { font-size: 30px; }
  .bf-pill { display: flex; gap: 10px; padding: 8px 16px; font-size: 16px; line-height: 24px; white-space: nowrap; }
  .bf-pill svg { width: 28px; height: 22px; }
  .bf-pill i { display: none; }
}
@media (max-width: 359px) { .bf-pill svg { display: none; } }

