/*bizco-head:bizco-stocklim-css*/

/* bizco-stocklim v1: the site's own error alert (snippet 172), placed under the quantity it is about */
.bizco-alert.bizco-stocklim{margin:10px 0 0 !important}
/* shop cards: a sibling right under the price / quantity row (that row does not wrap on phones), compact */
li.product > .bizco-alert.bizco-stocklim{width:100%;box-sizing:border-box;margin:8px 0 0 !important}
li.product > .bizco-alert.bizco-stocklim .bizco-alert__mark{width:34px}
li.product > .bizco-alert.bizco-stocklim .bizco-alert__mark::after{width:18px;height:18px}
li.product > .bizco-alert.bizco-stocklim .bizco-alert__in{padding:9px 11px}
li.product > .bizco-alert.bizco-stocklim .bizco-alert__tx{min-width:0}
li.product > .bizco-alert.bizco-stocklim .bizco-alert__t{font-size:13.5px}
.bizco-rr-row > .bizco-alert.bizco-stocklim{grid-column:1 / -1;margin:2px 0 0 !important}
body.woocommerce-cart .shop_table tr.woocommerce-cart-form__cart-item > td.bizco-stocklim-cell{grid-column:1 / -1;display:block}
body.woocommerce-cart .shop_table td.bizco-stocklim-cell > .bizco-alert.bizco-stocklim{margin:6px 0 0 !important}
/* The Place Order line on the cart and Rapid Restock pages (snippets 145, 147) was plain red text. Owner 2026-09-16:
   every refusal wears the same red alert with the ! as the rest of the site. Same values as snippet 172's legacy
   notice skin; the line's own writers are untouched (they set its text), the green info variant (is-info) is kept. */
p.bizco-cart-payerr:not(.is-info){position:relative;display:block;overflow:hidden;background:#fff;
	border:1px solid #E4EAE6;border-radius:12px;box-shadow:0 1px 2px rgba(22,33,27,.05);
	font-family:'Outfit',system-ui,sans-serif;font-size:15px;font-weight:700;line-height:1.35;color:#8C1D16;
	min-height:48px;padding:14px 18px 14px 66px;text-align:left}
p.bizco-cart-payerr:not(.is-info)[hidden]{display:none}
p.bizco-cart-payerr:not(.is-info)::before{content:"";position:absolute;left:0;top:0;bottom:0;width:48px;
	background-color:#C6382C;background-repeat:no-repeat;background-position:center;background-size:22px 22px;
	background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M12 6v7'/%3E%3Ccircle cx='12' cy='17.4' r='1.35' fill='%23fff' stroke='none'/%3E%3C/svg%3E")}

/*bizco-head:bizco-ilink*/

	.bizco-ft-keepbtn,.bizco-ft-locadd,.bizco-mxadd-changecard,.bizco-mxadd-addcard,
	.bizco-ft-entcard-pm a,.bizco-ft-entcard-pm-warn a,
	.bizco-acct-link,.bizco-ref-copylink,.bizco-lostpw-link,.bizco-auth-link,.bizco-wl-toggle,
	.bizco-mh-textbtn,.bizco-mh-sectlink,.bizco-mh-statlink,.bizco-mh-bizmore a,.bizco-mh-locadd,
	.bizco-mh-bizline a,.bizco-ntf-more a,.bizco-ntf-markall,.bizco-inv-toast-link,.bizco-cart-addcard,a.bizco-ilink,button.bizco-ilink{
		font-family:Outfit,sans-serif !important;font-size:13px !important;font-weight:700 !important;
		color:#0C7A47 !important;text-decoration:none !important;background:transparent !important;
		transform:none !important;box-shadow:none !important;cursor:pointer}
	.bizco-ft-keepbtn:hover,.bizco-ft-locadd:hover,.bizco-mxadd-changecard:hover,.bizco-mxadd-addcard:hover,.bizco-ft-entcard-pm a:hover,.bizco-ft-entcard-pm-warn a:hover,.bizco-acct-link:hover,.bizco-ref-copylink:hover,.bizco-lostpw-link:hover,.bizco-auth-link:hover,.bizco-wl-toggle:hover,.bizco-mh-textbtn:hover,.bizco-mh-sectlink:hover,.bizco-mh-statlink:hover,.bizco-mh-bizmore a:hover,.bizco-mh-locadd:hover,.bizco-mh-bizline a:hover,.bizco-ntf-more a:hover,.bizco-ntf-markall:hover,.bizco-inv-toast-link:hover,.bizco-cart-addcard:hover,a.bizco-ilink:hover,button.bizco-ilink:hover{
		color:#0F5230 !important;text-decoration:underline !important;text-underline-offset:2px !important;
		background:transparent !important;transform:none !important;box-shadow:none !important}
	
/*bizco-head:bizco-prompt-css*/

	body.bizco-noann .ct-header [data-device="desktop"] [data-row="top"],
	body.bizco-noann .ct-header [data-device="mobile"] [data-row="bottom"]{display:none}
	.bizco-footer-banner__cta{white-space:nowrap}
	/* The hold banner swaps the wordmark for the warning mark, so it needs its
	   own box: the img rules are all img-typed and will not reach a span. */
	/* Sized against the banner, not the old wordmark box: the brand rules in
	   post 89 are img-typed but some are not, so this states its own size. */
	.bizco-footer-banner .bizco-footer-banner__brand--warn{
		display:block;width:104px;height:104px;flex:0 0 auto;max-width:none
	}
	.bizco-footer-banner__brand--warn svg{width:100%;height:100%;display:block}
	@media (max-width:1317px){.bizco-footer-banner .bizco-footer-banner__brand--warn{width:88px;height:88px}}
	@media (max-width:767px){.bizco-footer-banner .bizco-footer-banner__brand--warn{width:76px;height:76px;margin-inline:auto}}
	/* Amber CTA to match the mark, dark text because yellow cannot carry white. */
	.bizco-footer-banner--hold .bizco-footer-banner__cta,
	.bizco-footer-banner--past-due .bizco-footer-banner__cta{
		background:#F7DE9A !important;color:#3B2F07 !important;border-color:#E3C878 !important;
	}
	.bizco-footer-banner--hold .bizco-footer-banner__cta:hover,
	.bizco-footer-banner--past-due .bizco-footer-banner__cta:hover{background:#F2D078 !important}
	/* The rule beside the mark is brand green everywhere else; on the hold
	   banner it sits next to an amber mark and an amber button, so it moves too.
	   Both forms are covered: a grid item in the 768-1317 band, a left border
	   on the copy elsewhere. */
	.bizco-footer-banner--past-due .bizco-footer-banner__inner::before{background:#E3C878 !important}
	.bizco-footer-banner--past-due .bizco-footer-banner__copy{border-left-color:#E3C878 !important}
	/* A cancellation is not a warning to act on a deadline, it has already
	   happened, so it reads red rather than amber. */
	body.bizco-cancelled-notice .ct-header [data-device="desktop"] [data-row="top"],
	body.bizco-cancelled-notice .ct-header [data-device="mobile"] [data-row="bottom"]{
		background-color:#F6D2CF !important;
	}
	body.bizco-cancelled-notice .ct-header [data-device="desktop"] [data-row="top"] :is(p,span,a),
	body.bizco-cancelled-notice .ct-header [data-device="mobile"] [data-row="bottom"] :is(p,span,a){
		color:#6B1512 !important;
	}
	.bizco-footer-banner--cancelled .bizco-footer-banner__cta{
		background:#F6D2CF !important;color:#6B1512 !important;border-color:#E0A9A4 !important;
	}
	.bizco-footer-banner--cancelled .bizco-footer-banner__cta:hover{background:#F0BFBA !important}
	.bizco-footer-banner--cancelled .bizco-footer-banner__inner::before{background:#E0A9A4 !important}
	.bizco-footer-banner--cancelled .bizco-footer-banner__copy{border-left-color:#E0A9A4 !important}
	/* bizco-dispute-hold v3b: width (owner 2026-09-28). The long cancelled line wraps under the title instead of stretching the card to 90% of the page. */
	.bizco-footer-banner--cancelled .bizco-footer-banner__subtext,
	.bizco-home-cta--cancelled .bizco-footer-banner__subtext{max-width:460px}
	/* AN ACCOUNT ON HOLD GETS A WARNING BAR, NOT THE BRAND GREEN ONE.
	   past_due is the only state where every membership is frozen, so it is the
	   only one that earns the colour change. Both header rows are covered: the
	   desktop announcement lives in [data-row=top], the phone one in
	   [data-row=bottom], and post 89 paints the whole mobile header green with
	   !important, so the row override needs it too. */
	body.bizco-state-past_due .ct-header [data-device="desktop"] [data-row="top"],
	body.bizco-partial-hold .ct-header [data-device="desktop"] [data-row="top"],
	body.bizco-state-past_due .ct-header [data-device="mobile"] [data-row="bottom"],
	body.bizco-partial-hold .ct-header [data-device="mobile"] [data-row="bottom"]{
		background-color:#F7DE9A !important;
	}
	body.bizco-state-past_due .ct-header [data-device="desktop"] [data-row="top"] :is(p,span,a),
	body.bizco-partial-hold .ct-header [data-device="desktop"] [data-row="top"] :is(p,span,a),
	body.bizco-state-past_due .ct-header [data-device="mobile"] [data-row="bottom"] :is(p,span,a),
	body.bizco-partial-hold .ct-header [data-device="mobile"] [data-row="bottom"] :is(p,span,a){
		color:#3B2F07 !important;
	}
	body.bizco-state-past_due .ct-header [data-device="desktop"] [data-row="top"] a,
	body.bizco-state-past_due .ct-header [data-device="mobile"] [data-row="bottom"] a{
		text-decoration-color:#8A6D1A !important;
	}
	/* THE ANNOUNCEMENT NEVER OVERFLOWS ITS BAR.
	   text-align:center cannot centre a line wider than its box - the excess
	   all goes to the right - so the guarantee has to be that no tier is ever
	   wider than the container. These are the no-JS defaults, deliberately
	   conservative; the fit script upgrades a tier whenever there is room. */
	.bizco-ann{white-space:nowrap;text-align:center;margin:0}
	/* THE BAR MUST NOT BE ABLE TO WIDEN THE PAGE. On the phone row the copy is
	   nowrap, so a tier that does not fit pushed the document wider, which
	   changed the bar's OWN clientWidth, which changed which tier fits, which
	   changed the width again. Below ~300px that settled into a permanent
	   two-state oscillation and the whole page shook. Clipped here, the
	   available width is a constant and the fit converges in one pass. */
	/* THE BAR IS A FLEX ITEM SIZED BY ITS OWN CONTENT, which is the whole bug:
	   measured at 300px its clientWidth swung between 244 and 264 depending on
	   which tier was showing, with the document a constant 300 and not one
	   window resize event. A wide tier grew the bar, the bigger bar made the
	   wide tier fit, the narrow tier shrank it again: a loop with no outside
	   cause, which is why it only appeared once nothing fit.
	   flex:1 1 0 with min-width:0 takes the width from the ROW instead, so the
	   available space is a constant and the fit converges in one pass. */
	/* THE FLEX ITEM IS BLOCKSY'S .ct-header-text, NOT this paragraph, which is
	   why sizing .bizco-ann changed nothing. Walking the chain at 300px:
	     p.bizco-ann        244 / 264
	     .entry-content     244 / 264
	     .ct-header-text    244 / 264   <- flex item, hugs its content
	     (its parent)       264         <- constant
	   A wide tier grew that item, the bigger box made the wide tier fit, the
	   narrow tier shrank it again. No window resize, no outside cause: the
	   copy was sizing the box that decides which copy fits. min-width:0 with
	   flex:1 1 0 takes the width from the ROW, so it is a constant.
	   Scoped with :has() so other header-text elements are untouched.
	   flex-basis:100% rather than 0 so it claims the whole row: at basis 0 it
	   settled on 244 of an available 264 and wrapped sooner than it had to. */
	.ct-header-text:has(.bizco-ann){min-width:0;flex:1 1 100%}
	.bizco-ann{overflow:hidden;max-width:100%;min-width:0}
	.bizco-ann-full,.bizco-ann-med,.bizco-ann-short,.bizco-ann-xs{display:none}
	.bizco-ann-full{display:inline}
	@media (max-width:999.98px){.bizco-ann-full{display:none}.bizco-ann-med{display:inline}}
	@media (max-width:620px){.bizco-ann-med{display:none}.bizco-ann-short{display:inline}}
	@media (max-width:359.98px){.bizco-ann-short{display:none}.bizco-ann-xs{display:inline}}
	/* Once the script has measured, its pick wins at every width. */
	.bizco-ann[data-tier] .bizco-ann-full,
	.bizco-ann[data-tier] .bizco-ann-med,
	.bizco-ann[data-tier] .bizco-ann-short,
	.bizco-ann[data-tier] .bizco-ann-xs{display:none}
	.bizco-ann[data-tier="full"] .bizco-ann-full,
	.bizco-ann[data-tier="med"] .bizco-ann-med,
	.bizco-ann[data-tier="short"] .bizco-ann-short,
	.bizco-ann[data-tier="xs"] .bizco-ann-xs{display:inline}
	/* Last resort: even the shortest string is wider than the bar. Wrapping
	   keeps it centred; overflowing does not. Outguns post 89's mobile
	   white-space:nowrap !important, which is 0,4,0. */
	.ct-header [data-device] [data-row] .entry-content p.bizco-ann-wrap{white-space:normal !important}
	/* One mark per row. Both bars are light now (grey #e9e9e9), so both take
	   the green pill; the white "inverted" one belonged to the old green phone
	   header and would float as a white badge on grey. Warning bars emit a
	   single green mark and skip this. */
	.bizco-ann-mk--m{display:none}
	.ct-header [data-device="mobile"] .bizco-ann-mk--d{display:none}
	.ct-header [data-device="mobile"] .bizco-ann-mk--m{display:inline}
	/* Optional clauses, each named for the width it disappears at. The
	   announcement row is nowrap, so every phone string has to fit inside
	   .ct-container, which is 88% of the viewport. */
	@media (max-width:399.98px){.bizco-ann-hide-400{display:none}}
	@media (max-width:389.98px){.bizco-ann-hide-390{display:none}}
	@media (max-width:379.98px){.bizco-ann-hide-380{display:none}}
	@media (max-width:359.98px){.bizco-cta-hide-360{display:none}}
	@media (max-width:329.98px){.bizco-ann-hide-330{display:none}}
	@media (max-width:349.98px){.bizco-ann-hide-350{display:none}}
	
/*bizco-head:bizco-req*/
.required,abbr.required,span.required,.woocommerce form .form-row .required,.wc-block-components-label .required,.wpforms-required-label{color:#0F9558 !important;text-decoration:none;border:0 !important}
