/* ============================================================
   PROBITY & ETHICS — BULK BUY SELECTOR
   Classes prefixed .pe- and scoped to #pe-bulkbuy so nothing can
   collide with Betheme / WPBakery styles.
   ============================================================ */
#pe-bulkbuy{
  --pe-blue-900:#12296B; --pe-blue-800:#1B44A5; --pe-blue-600:#2563D9;
  --pe-blue:#1E5FD0; --pe-blue-dark:#164AA8; --pe-blue-soft:#EAF1FC; --pe-blue-line:#C7D8F2;
  --pe-ink:#0F1B33; --pe-ink-2:#54637C; --pe-ink-3:#8895A9;
  --pe-paper:#F5F8FC; --pe-surface:#FFFFFF; --pe-rule:#DDE5F1; --pe-rule-2:#EDF1F8;
  --pe-save:#0F7B5A;
  --pe-warn:#B4472B;
  --pe-font-display:"Playfair Display",Georgia,serif;
  --pe-font-body:"Mulish",system-ui,-apple-system,sans-serif;
  --pe-r:10px; --pe-shadow:0 1px 2px rgba(15,27,51,.05),0 8px 26px rgba(15,27,51,.07);
  --pe-rail-w:340px;
  --pe-header-h:0px;
  /*
   * NO container-type here, deliberately.
   *
   * container-type:inline-size implies contain:inline-size, and a contained
   * element may not size its inline axis from its content. Put that in any
   * shrink-to-fit context - a flex item, a float, an inline-block - and it
   * collapses to min-content. On this site it produced a 90px column.
   *
   * The layout is intrinsically responsive instead: flex-wrap and auto-fit
   * grids reflow on the space available, with no query and no containment, so
   * nothing can collapse whatever wrapper a theme hands us.
   */
  display:block;
  width:100%;
  max-width:100%;
  min-width:0;
  background:var(--pe-paper); color:var(--pe-ink);
  font-family:var(--pe-font-body); font-size:16px; line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
#pe-bulkbuy *,#pe-bulkbuy *::before,#pe-bulkbuy *::after{box-sizing:border-box}
#pe-bulkbuy h1,#pe-bulkbuy h2,#pe-bulkbuy h3{margin:0;font-family:var(--pe-font-display);font-weight:500;letter-spacing:-.01em;line-height:1.18}
#pe-bulkbuy p{margin:0}
#pe-bulkbuy ul,#pe-bulkbuy ol{list-style:none;margin:0;padding:0}
#pe-bulkbuy button{font:inherit;color:inherit;margin:0;-webkit-appearance:none;appearance:none;background:none;border:0;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
#pe-bulkbuy :focus-visible{outline:2px solid var(--pe-blue);outline-offset:3px;border-radius:4px}
#pe-bulkbuy .pe-wrap{max-width:1180px;margin:0 auto;padding:0 24px}
#pe-bulkbuy .pe-form{margin:0;padding:0;border:0}

/* progress rail */
#pe-bulkbuy .pe-progress{position:sticky;top:var(--pe-header-h);z-index:60;background:var(--pe-surface);border-bottom:1px solid var(--pe-rule)}
#pe-bulkbuy .pe-progress__bar{height:3px;background:var(--pe-rule-2)}
#pe-bulkbuy .pe-progress__fill{height:100%;width:0;background:var(--pe-blue);transition:width .35s cubic-bezier(.4,0,.2,1)}
#pe-bulkbuy .pe-progress__inner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 24px;max-width:1180px;margin:0 auto;font-size:13.5px}
#pe-bulkbuy .pe-progress__label{color:var(--pe-ink-2)}
#pe-bulkbuy .pe-progress__label b{color:var(--pe-ink);font-weight:700}
#pe-bulkbuy .pe-progress__total{font-weight:700;font-size:15px}

/* hero */
#pe-bulkbuy .pe-hero{background:linear-gradient(105deg,var(--pe-blue-900) 0%,var(--pe-blue-800) 55%,var(--pe-blue-600) 100%);color:#fff;padding:60px 0 54px}
#pe-bulkbuy .pe-eyebrow{font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#A9C4F2;margin-bottom:20px}
#pe-bulkbuy .pe-hero h1{font-size:clamp(1.95rem,4.6vw,3.35rem);max-width:15ch;color:#fff}
#pe-bulkbuy .pe-hero h1 em{font-style:italic;font-weight:400}
#pe-bulkbuy .pe-hero__lede{margin-top:20px;max-width:56ch;color:#D3E1F8;font-size:17px}
#pe-bulkbuy .pe-pricebox{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-top:32px}
#pe-bulkbuy .pe-pricebox__now{font-family:var(--pe-font-display);font-size:2.7rem;line-height:1;color:#fff}
#pe-bulkbuy .pe-pricebox__note{font-size:14.5px;color:#C2D5F4}
#pe-bulkbuy .pe-pricebox__was{color:#8FAEE0;text-decoration:line-through;margin-left:6px}
#pe-bulkbuy .pe-assure{display:flex;flex-wrap:wrap;gap:9px;margin-top:28px}
#pe-bulkbuy .pe-assure li{font-size:13px;color:#E2EBFA;border:1px solid rgba(255,255,255,.28);border-radius:100px;padding:6px 15px;background:rgba(255,255,255,.08)}

/* layout */
/*
 * flex-wrap achieves what the container query was reaching for, without the
 * risk: the rail sits beside the content while there is room for both and drops
 * below when there is not. No breakpoint, so it is right at any container width.
 */
#pe-bulkbuy .pe-layout{display:flex;flex-wrap:wrap;align-items:flex-start;gap:48px;padding:48px 0 40px}
#pe-bulkbuy .pe-layout > main{flex:1 1 480px;min-width:0;max-width:100%}
#pe-bulkbuy .pe-layout > .pe-rail{flex:0 1 var(--pe-rail-w);width:var(--pe-rail-w);min-width:0;max-width:100%}
#pe-bulkbuy .pe-step{scroll-margin-top:80px}
#pe-bulkbuy .pe-step + .pe-step{margin-top:56px}
#pe-bulkbuy .pe-step__head{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
#pe-bulkbuy .pe-step__num{font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--pe-blue)}
#pe-bulkbuy .pe-step h2{font-size:1.75rem}
#pe-bulkbuy .pe-h2note{font-family:var(--pe-font-body);font-size:.95rem;font-weight:400;color:var(--pe-ink-2);letter-spacing:0}
#pe-bulkbuy .pe-optional{font-size:11.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--pe-blue);border:1px solid var(--pe-blue-line);border-radius:100px;padding:3px 10px;background:var(--pe-blue-soft)}
#pe-bulkbuy .pe-optnote{width:100%;margin:12px 0 0;font-size:14.5px;color:var(--pe-ink-2)}
#pe-bulkbuy .pe-optnote b{color:var(--pe-ink);font-weight:700}

/* course cards — the <button> is display:block, NOT flex. iOS Safari does
   not reliably render buttons as flex containers. */
/* auto-fit + minmax, never repeat(2,1fr): a fixed column count in a narrow
   container produces 30px-wide cards and one letter per line. */
#pe-bulkbuy .pe-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));gap:12px;margin:26px 0 0;align-items:stretch}
/* The li is a flex container and the button fills it, so every card in a row is
   the same height however long its title runs. */
#pe-bulkbuy .pe-grid > li{display:flex}
#pe-bulkbuy .pe-shops > li{display:flex;flex-direction:column}
#pe-bulkbuy .pe-card{position:relative;display:block;width:100%;height:100%;text-align:left;background:var(--pe-surface);border:1px solid var(--pe-rule);border-radius:var(--pe-r);padding:17px 17px 15px;cursor:pointer;transition:border-color .15s,box-shadow .15s,background .15s}
/* The meta line is pushed to the bottom so the tick and the price sit on a
   consistent baseline across the row, rather than floating up under short
   titles. The button stays display:block - iOS Safari will not reliably flex
   a <button> - so the inner span does the work. */
#pe-bulkbuy .pe-card__inner{display:flex;flex-direction:column;height:100%;gap:9px}
#pe-bulkbuy .pe-card__meta{margin-top:auto}
#pe-bulkbuy .pe-card:hover{border-color:var(--pe-blue-line);box-shadow:var(--pe-shadow)}
#pe-bulkbuy .pe-card[aria-pressed="true"]{border-color:var(--pe-blue);background:var(--pe-blue-soft);box-shadow:inset 0 0 0 1px var(--pe-blue)}
#pe-bulkbuy .pe-card.pe-is-locked{opacity:.42;cursor:not-allowed}
#pe-bulkbuy .pe-card.pe-is-locked:hover{border-color:var(--pe-rule);box-shadow:none}
#pe-bulkbuy .pe-card__top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
#pe-bulkbuy .pe-card__title{font-size:15px;font-weight:600;line-height:1.35;min-width:0;overflow-wrap:break-word;word-break:normal;hyphens:none}
#pe-bulkbuy .pe-card__tick{flex:0 0 auto;width:21px;height:21px;border-radius:50%;border:1.5px solid var(--pe-rule);display:block;position:relative;transition:background .15s,border-color .15s}
#pe-bulkbuy .pe-card[aria-pressed="true"] .pe-card__tick{background:var(--pe-blue);border-color:var(--pe-blue)}
#pe-bulkbuy .pe-card__tick svg{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:11px;height:11px;stroke:#fff;stroke-width:2.5;fill:none;opacity:0;transition:opacity .15s}
#pe-bulkbuy .pe-card[aria-pressed="true"] .pe-card__tick svg{opacity:1}
#pe-bulkbuy .pe-card__meta{display:block;font-size:12.5px;color:var(--pe-ink-3)}
#pe-bulkbuy .pe-card__meta .woocommerce-Price-amount{color:inherit;font-size:inherit}

/* face-to-face */
#pe-bulkbuy .pe-shops{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:12px;margin:26px 0 0}
#pe-bulkbuy .pe-shop{flex:1;background:var(--pe-surface);border:1px solid var(--pe-rule);border-radius:var(--pe-r);padding:19px;transition:border-color .15s,background .15s}
#pe-bulkbuy .pe-shop.pe-is-on{border-color:var(--pe-blue);background:var(--pe-blue-soft)}
#pe-bulkbuy .pe-shop h3{font-size:16px;font-family:var(--pe-font-body);font-weight:700;line-height:1.35}
#pe-bulkbuy .pe-shop__when{font-size:13.5px;color:var(--pe-ink-2);margin-top:9px}
#pe-bulkbuy .pe-shop__none{font-size:13.5px;color:var(--pe-ink-3);margin-top:12px}
#pe-bulkbuy .pe-shop__dates{display:flex;gap:8px;flex-wrap:wrap;margin-top:15px}
#pe-bulkbuy .pe-date{border:1px solid var(--pe-rule);border-radius:6px;padding:8px 13px;font-size:13px;font-weight:600;cursor:pointer;color:var(--pe-ink-2);transition:border-color .15s,background .15s,color .15s}
#pe-bulkbuy .pe-date:hover{border-color:var(--pe-blue-line);color:var(--pe-ink)}
#pe-bulkbuy .pe-date[aria-pressed="true"]{background:var(--pe-blue);border-color:var(--pe-blue);color:#fff}
#pe-bulkbuy .pe-date__left{display:block;font-size:11px;font-weight:600;color:var(--pe-ink-3);margin-top:2px}
#pe-bulkbuy .pe-date__left--low{color:var(--pe-warn)}
#pe-bulkbuy .pe-date[aria-pressed="true"] .pe-date__left{color:#C8DCFA}
#pe-bulkbuy .pe-date[aria-pressed="true"] .pe-date__left--low{color:#FFD9CF}
#pe-bulkbuy .pe-skip{margin-top:16px;padding:8px 0;font-size:13.5px;color:var(--pe-ink-2);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
#pe-bulkbuy .pe-skip:hover{color:var(--pe-ink)}

/* rail / tray */
#pe-bulkbuy .pe-rail{position:static}
#pe-bulkbuy .pe-tray{background:var(--pe-surface);border:1px solid var(--pe-rule);border-radius:var(--pe-r);box-shadow:var(--pe-shadow);overflow:hidden}
#pe-bulkbuy .pe-tray__head{padding:16px 18px 13px;border-bottom:1px solid var(--pe-rule-2)}
#pe-bulkbuy .pe-tray__title{font-family:var(--pe-font-display);font-size:1.15rem}
#pe-bulkbuy .pe-tray__count{font-size:13px;color:var(--pe-ink-2);margin-top:3px}
#pe-bulkbuy .pe-tray__count.pe-is-full{color:var(--pe-blue);font-weight:600}
#pe-bulkbuy .pe-slots{padding:8px 8px 6px}
#pe-bulkbuy .pe-slots + .pe-slots{padding-top:0;border-top:1px solid var(--pe-rule-2);margin-top:4px}
#pe-bulkbuy .pe-slot{display:flex;align-items:center;gap:11px;padding:6px 10px;border-radius:6px;font-size:13px;min-height:33px}
#pe-bulkbuy .pe-slot__n{font-size:11.5px;font-weight:700;color:var(--pe-ink-3);flex:0 0 18px;font-variant-numeric:tabular-nums}
#pe-bulkbuy .pe-slot__name{flex:1;line-height:1.3;min-width:0;overflow-wrap:break-word;word-break:normal}
#pe-bulkbuy .pe-slot--empty .pe-slot__name{height:1px;background:repeating-linear-gradient(90deg,var(--pe-rule) 0 5px,transparent 5px 10px)}
#pe-bulkbuy .pe-slot--filled{background:var(--pe-blue-soft)}
#pe-bulkbuy .pe-slot--filled .pe-slot__n{color:var(--pe-blue)}
#pe-bulkbuy .pe-slot__x{padding:4px 6px;cursor:pointer;color:var(--pe-ink-3);font-size:15px;line-height:1;flex:0 0 auto}
#pe-bulkbuy .pe-slot__x:hover{color:var(--pe-ink)}
#pe-bulkbuy .pe-tray__lines{border-top:1px solid var(--pe-rule-2);padding:14px 18px;font-size:13.5px}
#pe-bulkbuy .pe-line{display:flex;justify-content:space-between;gap:12px;color:var(--pe-ink-2)}
#pe-bulkbuy .pe-line + .pe-line{margin-top:8px}
#pe-bulkbuy .pe-line span:last-child{color:var(--pe-ink);font-weight:600}
#pe-bulkbuy .pe-line--muted span:last-child{color:var(--pe-ink-3);font-weight:400}
#pe-bulkbuy .pe-line__opt{font-size:12px;font-weight:400;color:var(--pe-ink-3);margin-left:6px}
#pe-bulkbuy .pe-was{color:var(--pe-ink-3);font-weight:400;margin-right:5px}
#pe-bulkbuy .pe-line--save{color:var(--pe-save)}
#pe-bulkbuy .pe-line--save span:last-child{color:var(--pe-save);font-weight:700}
#pe-bulkbuy .pe-line--save[hidden]{display:none}
#pe-bulkbuy .pe-line--total{border-top:1px solid var(--pe-rule-2);margin-top:13px;padding-top:13px;font-size:16px;color:var(--pe-ink);font-weight:600}
#pe-bulkbuy .pe-line--total span:last-child{font-family:var(--pe-font-display);font-size:1.55rem;font-weight:500}
#pe-bulkbuy .pe-tray__foot{padding:0 18px 18px}
#pe-bulkbuy .pe-cta{display:block;width:100%;background:var(--pe-blue);color:#fff;border-radius:8px;padding:14px;font-size:15px;font-weight:700;cursor:pointer;transition:background .15s}
#pe-bulkbuy .pe-cta:hover:not(:disabled){background:var(--pe-blue-dark)}
#pe-bulkbuy .pe-cta:disabled{background:#D5DCE8;color:#8B97A8;cursor:not-allowed}
#pe-bulkbuy .pe-tray__hint{font-size:12px;color:var(--pe-ink-3);text-align:center;margin-top:10px;line-height:1.4}

/* mobile action bar — only shown once JS confirms it works */
#pe-bulkbuy .pe-mobilebar{display:none;position:fixed;left:0;right:0;bottom:0;z-index:70;background:var(--pe-surface);border-top:1px solid var(--pe-rule);padding:11px 18px calc(11px + env(safe-area-inset-bottom));align-items:center;justify-content:space-between;gap:14px;box-shadow:0 -6px 20px rgba(15,27,51,.09)}
#pe-bulkbuy .pe-mobilebar__meta{font-size:12.5px;color:var(--pe-ink-2)}
#pe-bulkbuy .pe-mobilebar__total{font-family:var(--pe-font-display);font-size:1.35rem;display:block;color:var(--pe-ink)}
#pe-bulkbuy .pe-mobilebar .pe-cta{width:auto;padding:12px 20px;white-space:nowrap}

/* Interactive chrome is hidden until JS runs, so a no-JS visitor sees a
   clean readable list instead of dead controls. */
#pe-bulkbuy .pe-jsonly{display:none}
#pe-bulkbuy.pe-live .pe-jsonly{display:block}
#pe-bulkbuy .pe-nojs{margin:26px 0 0;padding:15px 17px;border-radius:var(--pe-r);background:#FFF6E5;border:1px solid #F0DCB0;color:#6B5320;font-size:14.5px}
#pe-bulkbuy.pe-live .pe-nojs{display:none}

/*
 * Full-bleed escape hatch.
 *
 * Applied by JavaScript, and only when it has measured the block as genuinely
 * narrower than the document. Themes that bypass wc_get_template_part - Betheme
 * among them - render the selector inside their own product summary column, and
 * there is no server-side way to know that has happened.
 *
 * Deliberately not 100vw: that includes the scrollbar and creates a horizontal
 * one on most sites. The JS sets the pixel width from
 * document.documentElement.clientWidth, which does not.
 */
#pe-bulkbuy.pe-fullbleed{max-width:none}

/* The theme's product wrapper. Our template part removes the gallery and the
   summary column, but a theme can still constrain or pad div.product, so
   neutralise it for bundle pages only. */
.pecb-bundle-page div.product.pecb-product{max-width:none;width:100%;margin:0;padding:0;display:block;float:none;flex:1 1 100%;min-width:0}
.pecb-bundle-page div.product.pecb-product::before,
.pecb-bundle-page div.product.pecb-product::after{display:none}
.pecb-bundle-page div.product.pecb-product > .woocommerce-product-gallery,
.pecb-bundle-page div.product.pecb-product > .summary,
.pecb-bundle-page div.product.pecb-product > .entry-summary{display:none}

/* WooCommerce notices dropped inside our wrapper */
#pe-bulkbuy .woocommerce-error,#pe-bulkbuy .woocommerce-message,#pe-bulkbuy .woocommerce-info{max-width:1180px;margin:24px auto 0;padding:0 24px}

/* The fixed bottom bar is a viewport concern, not a container one. */
#pe-bulkbuy.pe-live .pe-mobilebar{display:flex}
#pe-bulkbuy.pe-live{padding-bottom:84px}

@media (min-width:1021px){
  /* Sticky only where there is vertical room for it to earn its keep. If a
     theme has constrained us the rail has already wrapped below, and sticky on
     a full-width item is harmless. */
  #pe-bulkbuy .pe-rail{position:sticky;top:calc(var(--pe-header-h) + 76px)}
  #pe-bulkbuy.pe-live .pe-mobilebar{display:none}
  #pe-bulkbuy.pe-live{padding-bottom:0}
  #pe-bulkbuy .pe-layout{padding-bottom:96px}
}

@media (max-width:620px){
  #pe-bulkbuy .pe-wrap{padding:0 18px}
  #pe-bulkbuy .pe-hero{padding:40px 0 36px}
  #pe-bulkbuy .pe-hero h1{max-width:none}
  #pe-bulkbuy .pe-pricebox__now{font-size:2.2rem}
  #pe-bulkbuy .pe-h2note{display:block;margin-top:4px}
  #pe-bulkbuy .pe-progress__total{display:none}
  #pe-bulkbuy .pe-progress__inner{padding:9px 20px}
}
@media (prefers-reduced-motion:reduce){#pe-bulkbuy *{transition:none !important;animation:none !important}}

/* cart / checkout / order screens */
.pecb-item-list{margin:4px 0 0;padding:0 0 0 16px;list-style:disc}
.pecb-item-list li{margin:0;font-size:.92em;line-height:1.5}

/* Cart and checkout fallbacks, used when a theme's own template does not print
   item data. Styled to sit quietly under the product name rather than compete
   with it. */
.pecb-item-fallback{margin:6px 0 0;font-size:.88em;line-height:1.5}
.pecb-item-fallback dt{float:left;clear:left;margin:0 4px 0 0;font-weight:600}
.pecb-item-fallback dd{margin:0 0 4px}
.pecb-item-fallback ul{margin:0;padding:0 0 0 14px;list-style:disc}
.pecb-mini-summary{display:block;margin-top:3px;font-size:.82em;line-height:1.45;opacity:.8}

/* ============================================================
   Standalone Face-to-Face course pages
   Scoped to .pecb-f2f so it sits inside the theme's own product
   layout rather than replacing it.
   ============================================================ */
.pecb-f2f{margin:18px 0 0}
.pecb-f2f__cpd{
  display:inline-block;
  margin:0 0 14px;
  padding:4px 12px;
  border-radius:100px;
  background:#EAF1FC;
  color:#1E5FD0;
  font-size:12px;
  font-weight:700;
  letter-spacing:.06em;
  text-transform:uppercase;
}
.pecb-f2f__label{margin:0 0 6px}
.pecb-f2f__label label{font-weight:600}
.pecb-f2f__select{
  display:block;
  width:100%;
  max-width:420px;
  padding:11px 13px;
  border:1px solid #DDE5F1;
  border-radius:8px;
  background:#fff;
  font-size:15px;
  line-height:1.4;
  color:#0F1B33;
}
.pecb-f2f__select:focus-visible{outline:2px solid #1E5FD0;outline-offset:2px}
.pecb-f2f__hint{margin:8px 0 0;font-size:13px;color:#54637C}
.pecb-f2f__buy{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:18px}
.pecb-f2f__none{
  margin:16px 0 0;
  padding:14px 16px;
  border-radius:8px;
  background:#FFF6E5;
  border:1px solid #F0DCB0;
  color:#6B5320;
  font-size:14.5px;
}

/* Face-to-Face: validation feedback, since the select carries no `required`
   attribute — see the note in assets/js/pe-f2f.js for why. */
.pecb-f2f__error{
  margin:8px 0 0;
  padding:9px 13px;
  border-radius:6px;
  background:#FDECE7;
  border:1px solid #F3C9BC;
  color:#B4472B;
  font-size:13.5px;
  font-weight:600;
}
.pecb-f2f__error[hidden]{display:none}
.pecb-f2f__select--error{border-color:#B4472B}

/* An empty selection step, so a mis-configured bundle explains itself instead
   of rendering a blank space that looks like a broken plugin. */
#pe-bulkbuy .pe-empty-step{
  margin:26px 0 0;
  padding:15px 17px;
  border-radius:var(--pe-r);
  background:#F4F7FC;
  border:1px dashed var(--pe-rule);
  color:var(--pe-ink-2);
  font-size:14.5px;
}
#pe-bulkbuy .pe-empty-step--warn{background:#FFF6E5;border-color:#F0DCB0;color:#6B5320}
#pe-bulkbuy .pe-empty-step__admin{display:block;margin-top:5px;font-size:13px;color:var(--pe-ink-3)}

/* Mid-submission: the button is disabled, so it must look it. Without this a
   customer sees no response and clicks again. */
.pe-bundle .pe-cta.is-submitting,
.pe-bundle button.is-submitting{
  opacity:.6;
  cursor:progress;
  pointer-events:none;
}
