/* ==========================================================================
   Boduo Site Builder — visual system
   Palette:  #0B1F3A (navy) / #14456B (steel) / #2E7CD6 (signal blue)
             #4B5563 (slate text) / #F5F7FA (page bg) / #D7DEE5 (hairline)
   Type:     system UI stack only — no external font requests.
   Signature: engineering "tick-rule" dividers + corner-bracket cards,
              standing in for the schematic/spec-sheet vocabulary of a
              sourcing & logistics operation — no icons, no illustration.
   ========================================================================== */

:root {
	--bsb-navy: #0b1f3a;
	--bsb-steel: #14456b;
	--bsb-signal: #2e7cd6;
	--bsb-slate: #4b5563;
	--bsb-bg: #f5f7fa;
	--bsb-line: #d7dee5;
	--bsb-ink: #0f1f33;
	--bsb-white: #ffffff;
	--bsb-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
	--bsb-radius: 2px;
	--bsb-max-width: 1120px;
}

.bsb-hero,
.bsb-page-content,
.bsb-products,
.bsb-feature-grid,
.bsb-service-grid,
.bsb-category-grid {
	box-sizing: border-box;
}

.bsb-hero *,
.bsb-page-content *,
.bsb-products *,
.bsb-feature-grid *,
.bsb-service-grid *,
.bsb-category-grid * {
	box-sizing: border-box;
}

/* ---------- Hero ---------- */

.bsb-hero {
	max-width: var(--bsb-max-width);
	margin: 0 auto;
	padding: 4rem 1.5rem 3rem;
	background: var(--bsb-bg);
	font-family: var(--bsb-font);
	position: relative;
}

.bsb-hero::before {
	content: "";
	display: block;
	width: 64px;
	height: 3px;
	background: var(--bsb-signal);
	margin-bottom: 1.5rem;
}

.bsb-eyebrow {
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--bsb-steel);
	margin: 0 0 0.75rem;
}

.bsb-h1 {
	font-size: clamp(2rem, 4vw, 3rem);
	line-height: 1.1;
	font-weight: 800;
	letter-spacing: -0.02em;
	color: var(--bsb-navy);
	margin: 0 0 1rem;
}

.bsb-lede {
	font-size: 1.125rem;
	line-height: 1.6;
	color: var(--bsb-slate);
	max-width: 62ch;
	margin: 0 0 1.5rem;
}

.bsb-service-line {
	font-size: 0.95rem;
	font-weight: 600;
	color: var(--bsb-steel);
	border-top: 1px solid var(--bsb-line);
	border-bottom: 1px solid var(--bsb-line);
	padding: 0.85rem 0;
	margin: 0 0 2rem;
}

.bsb-cta-row {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
}

/* ---------- Buttons ---------- */

.bsb-btn {
	display: inline-block;
	font-family: var(--bsb-font);
	font-weight: 700;
	font-size: 0.95rem;
	text-decoration: none;
	padding: 0.85rem 1.5rem;
	border-radius: var(--bsb-radius);
	border: 2px solid transparent;
	transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.bsb-btn-primary {
	background: var(--bsb-navy);
	color: var(--bsb-white);
	border-color: var(--bsb-navy);
}

.bsb-btn-primary:hover,
.bsb-btn-primary:focus-visible {
	background: var(--bsb-steel);
	border-color: var(--bsb-steel);
	color: var(--bsb-white);
}

.bsb-btn-secondary {
	background: transparent;
	color: var(--bsb-navy);
	border-color: var(--bsb-navy);
}

.bsb-btn-secondary:hover,
.bsb-btn-secondary:focus-visible {
	background: var(--bsb-navy);
	color: var(--bsb-white);
}

.bsb-btn:focus-visible {
	outline: 3px solid var(--bsb-signal);
	outline-offset: 2px;
}

/* ---------- Feature / service / category grids (corner-bracket cards) ---------- */

.bsb-feature-grid,
.bsb-service-grid {
	max-width: var(--bsb-max-width);
	margin: 0 auto;
	padding: 0 1.5rem 4rem;
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 1.25rem;
	font-family: var(--bsb-font);
}

.bsb-service-grid {
	grid-template-columns: repeat(3, 1fr);
}

.bsb-feature-card,
.bsb-service-item,
.bsb-category-card {
	position: relative;
	background: var(--bsb-white);
	border: 1px solid var(--bsb-line);
	padding: 1.5rem 1.5rem 1.75rem;
}

.bsb-feature-card::before,
.bsb-feature-card::after,
.bsb-service-item::before,
.bsb-service-item::after,
.bsb-category-card::before,
.bsb-category-card::after {
	content: "";
	position: absolute;
	width: 10px;
	height: 10px;
	border-color: var(--bsb-signal);
	border-style: solid;
}

.bsb-feature-card::before,
.bsb-service-item::before,
.bsb-category-card::before {
	top: -1px;
	left: -1px;
	border-width: 2px 0 0 2px;
}

.bsb-feature-card::after,
.bsb-service-item::after,
.bsb-category-card::after {
	bottom: -1px;
	right: -1px;
	border-width: 0 2px 2px 0;
}

.bsb-feature-card h3,
.bsb-service-item h3,
.bsb-category-card h3 {
	font-size: 1.05rem;
	font-weight: 700;
	color: var(--bsb-navy);
	margin: 0 0 0.5rem;
	letter-spacing: -0.01em;
}

.bsb-feature-card p,
.bsb-service-item p,
.bsb-category-card p {
	font-size: 0.95rem;
	color: var(--bsb-slate);
	line-height: 1.55;
	margin: 0;
}

/* ---------- Generic page content ---------- */

.bsb-page-content {
	max-width: var(--bsb-max-width);
	margin: 0 auto;
	padding: 3rem 1.5rem 4rem;
	font-family: var(--bsb-font);
	color: var(--bsb-ink);
}

.bsb-page-content p {
	font-size: 1.05rem;
	line-height: 1.7;
	color: var(--bsb-slate);
	max-width: 68ch;
}

.bsb-list {
	margin: 1rem 0 1.5rem;
	padding-left: 1.25rem;
	color: var(--bsb-slate);
	line-height: 1.8;
}

/* ---------- Products / category grid ---------- */

.bsb-products {
	max-width: var(--bsb-max-width);
	margin: 0 auto;
	padding: 3rem 1.5rem 4rem;
	font-family: var(--bsb-font);
}

.bsb-category-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 1.25rem;
	margin-top: 2rem;
}

.bsb-category-image-placeholder {
	width: 100%;
	height: 140px;
	background: linear-gradient(135deg, var(--bsb-bg) 25%, var(--bsb-line) 25%, var(--bsb-line) 50%, var(--bsb-bg) 50%, var(--bsb-bg) 75%, var(--bsb-line) 75%);
	background-size: 24px 24px;
	margin-bottom: 1rem;
	border: 1px solid var(--bsb-line);
}

.bsb-category-card .bsb-cta-row {
	margin-top: 1rem;
}

/* ---------- Request-a-quote form ---------- */

.bsb-quote-form {
	display: flex;
	flex-direction: column;
	gap: 1.1rem;
	max-width: 640px;
	margin-top: 1.5rem;
	font-family: var(--bsb-font);
}

.bsb-quote-form label {
	display: flex;
	flex-direction: column;
	gap: 0.4rem;
	font-size: 0.9rem;
	font-weight: 600;
	color: var(--bsb-navy);
}

.bsb-quote-form input,
.bsb-quote-form select,
.bsb-quote-form textarea {
	font-family: var(--bsb-font);
	font-size: 1rem;
	font-weight: 400;
	color: var(--bsb-ink);
	padding: 0.7rem 0.85rem;
	border: 1px solid var(--bsb-line);
	border-radius: var(--bsb-radius);
	background: var(--bsb-white);
}

.bsb-quote-form input:focus-visible,
.bsb-quote-form select:focus-visible,
.bsb-quote-form textarea:focus-visible {
	outline: 3px solid var(--bsb-signal);
	outline-offset: 1px;
	border-color: var(--bsb-signal);
}

.bsb-quote-form button {
	align-self: flex-start;
	cursor: pointer;
}

/* Honeypot — hidden from sighted users and screen readers alike. */
.bsb-hp-field {
	position: absolute !important;
	left: -9999px !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

.bsb-notice {
	font-family: var(--bsb-font);
	font-size: 0.95rem;
	font-weight: 600;
	padding: 0.9rem 1.1rem;
	border-left: 4px solid;
	margin: 1.5rem 0;
}

.bsb-notice-success {
	background: #eaf3ec;
	border-color: #2f7a43;
	color: #1f5330;
}

.bsb-notice-error {
	background: #fbeaea;
	border-color: #b3352c;
	color: #7a231d;
}

/* ---------- Responsive ---------- */

@media (max-width: 900px) {
	.bsb-feature-grid {
		grid-template-columns: repeat(2, 1fr);
	}
	.bsb-service-grid,
	.bsb-category-grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (max-width: 600px) {
	.bsb-feature-grid,
	.bsb-service-grid,
	.bsb-category-grid {
		grid-template-columns: 1fr;
	}
	.bsb-cta-row {
		flex-direction: column;
		align-items: stretch;
	}
	.bsb-btn {
		text-align: center;
	}
}

/* ---------- Reduced motion ---------- */

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

/* ==========================================================================
   v1.2 — Block-theme header/footer replacement and conversion-focused layout
   ========================================================================== */
body.bsb-managed-page{background:#fff;color:var(--bsb-ink)}
body.bsb-managed-page .wp-site-blocks{padding:0}
body.bsb-managed-page main{margin:0!important}
body.bsb-managed-page .wp-block-post-content{margin:0!important;padding:0!important}

.bsb-site-header{position:sticky;top:0;z-index:999;background:rgba(255,255,255,.97);border-bottom:1px solid var(--bsb-line);backdrop-filter:blur(10px);font-family:var(--bsb-font)}
.admin-bar .bsb-site-header{top:32px}
.bsb-header-inner{width:min(1240px,94%);min-height:76px;margin:auto;display:flex;align-items:center;gap:24px}
.bsb-brand{font-size:1.25rem;font-weight:900;letter-spacing:.03em;color:var(--bsb-navy);text-decoration:none;white-space:nowrap}
.bsb-brand span{font-size:.65rem;letter-spacing:.12em;color:var(--bsb-signal);display:block}
.bsb-nav{display:flex;align-items:center;justify-content:center;gap:20px;flex:1}
.bsb-nav a{font-size:.9rem;font-weight:700;color:var(--bsb-ink);text-decoration:none;white-space:nowrap}
.bsb-nav a:hover,.bsb-nav a:focus{color:var(--bsb-signal)}
.bsb-header-actions{display:flex;align-items:center;gap:10px}
.bsb-header-quote,.bsb-cart-link{padding:.7rem .9rem;border-radius:3px;text-decoration:none;font-weight:800;font-size:.86rem}
.bsb-header-quote{background:var(--bsb-navy);color:#fff}
.bsb-cart-link{border:1px solid var(--bsb-line);color:var(--bsb-navy)}

.bsb-site-footer{background:var(--bsb-navy);color:#dfe8f3;font-family:var(--bsb-font);padding:58px 4% 22px}
.bsb-footer-grid{width:min(1180px,100%);margin:auto;display:grid;grid-template-columns:1.4fr repeat(3,1fr);gap:40px}
.bsb-site-footer h3{font-size:.8rem;text-transform:uppercase;letter-spacing:.13em;color:#fff;margin:0 0 14px}
.bsb-site-footer a,.bsb-site-footer span{display:block;color:#c5d2e1;text-decoration:none;margin:.5rem 0;font-size:.92rem}
.bsb-site-footer a:hover{color:#fff}
.bsb-footer-brand{font-size:1.15rem;font-weight:900;color:#fff;letter-spacing:.06em}
.bsb-site-footer p{color:#aebed1;max-width:34ch}
.bsb-footer-bottom{width:min(1180px,100%);margin:36px auto 0;padding-top:18px;border-top:1px solid rgba(255,255,255,.15);font-size:.78rem;color:#93a7bd}

.bsb-home{font-family:var(--bsb-font)}
.bsb-hero-final{max-width:none;background:linear-gradient(128deg,#06162b 0%,#0b3264 64%,#1256a2 100%);color:#fff;padding:88px max(4%,calc((100vw - 1180px)/2));display:grid;grid-template-columns:1.35fr .65fr;gap:48px;align-items:center}
.bsb-hero-final::before{display:none}
.bsb-hero-final .bsb-eyebrow,.bsb-dark-section .bsb-eyebrow{color:#a9d1ff}
.bsb-hero-final .bsb-h1{color:#fff;font-size:clamp(2.8rem,5.2vw,5.2rem);max-width:14ch}
.bsb-hero-final .bsb-lede{color:#d8e5f4;font-size:1.2rem;max-width:62ch}
.bsb-hero-final .bsb-btn-secondary{color:#fff;border-color:#fff}
.bsb-market-line{margin-top:22px;font-size:.86rem;letter-spacing:.06em;color:#a9c4e3}
.bsb-hero-side{display:grid;gap:12px}
.bsb-hero-side div{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);padding:18px;border-radius:5px}
.bsb-hero-side strong,.bsb-hero-side span{display:block}
.bsb-hero-side strong{font-size:1rem;color:#fff}
.bsb-hero-side span{font-size:.85rem;color:#bed0e5;margin-top:4px}

.bsb-section{max-width:none;padding:76px max(4%,calc((100vw - 1180px)/2));font-family:var(--bsb-font)}
.bsb-section-soft{background:var(--bsb-bg)}
.bsb-section-heading{margin-bottom:28px}
.bsb-section h2{font-size:clamp(2rem,3.6vw,3.4rem);line-height:1.12;color:var(--bsb-navy);margin:.2rem 0}
.bsb-home-categories{max-width:none;padding:0}
.bsb-category-color-card{min-height:220px;background:linear-gradient(145deg,#fff,#eef5fc);display:flex;flex-direction:column;justify-content:flex-end}
.bsb-category-color-card:nth-child(2n){background:linear-gradient(145deg,#fff,#edf7f5)}
.bsb-category-color-card:nth-child(3n){background:linear-gradient(145deg,#fff,#f5f1fb)}
.bsb-category-label{font-size:.67rem;letter-spacing:.13em;font-weight:900;color:var(--bsb-signal);margin-bottom:auto}
.bsb-category-color-card a{font-weight:800;color:var(--bsb-signal);text-decoration:none;margin-top:14px}
.bsb-structure-grid{max-width:none;padding:0}
.bsb-two-paths{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.bsb-path-card{border:1px solid var(--bsb-line);padding:36px;background:#fff}
.bsb-path-card a{font-weight:800;color:var(--bsb-signal);text-decoration:none}
.bsb-dark-section{background:var(--bsb-navy);color:#fff}
.bsb-dark-section h2{color:#fff}
/* .bsb-process card styling fully redefined under "Part 3 — Homepage
   Supply Chain Flow (v1.9 redesign)" further down this file. */
.bsb-final-cta{display:flex;align-items:center;justify-content:space-between;gap:36px}

.bsb-products .bsb-category-image-placeholder{display:none}
.bsb-products .bsb-category-card{min-height:240px;background:linear-gradient(145deg,#fff,#f1f6fb);display:flex;flex-direction:column}
.bsb-products .bsb-category-card .bsb-cta-row{margin-top:auto;padding-top:18px}

.bsb-contact-page .bsb-service-grid{padding:24px 0 36px;max-width:none}
.bsb-quote-form{display:grid;grid-template-columns:1fr 1fr;gap:18px 24px;max-width:900px}
.bsb-quote-form>label{display:flex;flex-direction:column;gap:7px;font-weight:700;color:var(--bsb-navy)}
.bsb-quote-form>label:nth-last-of-type(-n+2){grid-column:1/-1}
.bsb-quote-form input,.bsb-quote-form select,.bsb-quote-form textarea{width:100%;border:1px solid #c9d4df;background:#fff;padding:13px 14px;border-radius:3px;font:inherit}
.bsb-quote-form textarea{min-height:150px}
.bsb-quote-form button{grid-column:1/-1;justify-self:start}
.bsb-hp-field{position:absolute!important;left:-9999px!important}

@media(max-width:1080px){
 .bsb-nav{display:none}
 .bsb-header-inner{justify-content:space-between}
 .bsb-hero-final{grid-template-columns:1fr}
 .bsb-hero-side{grid-template-columns:repeat(2,1fr)}
 .bsb-footer-grid{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:782px){.admin-bar .bsb-site-header{top:46px}}
@media(max-width:700px){
 .bsb-header-quote{display:none}
 .bsb-header-inner{min-height:64px}
 .bsb-hero-final{padding:60px 5%}
 .bsb-hero-final .bsb-h1{font-size:2.7rem}
 .bsb-hero-side,.bsb-two-paths,.bsb-footer-grid,.bsb-quote-form{grid-template-columns:1fr}
 .bsb-section{padding:56px 5%}
 .bsb-final-cta{align-items:flex-start;flex-direction:column}
 .bsb-quote-form>label:nth-last-of-type(-n+2){grid-column:auto}
 .bsb-quote-form button{grid-column:auto}
}

/* ==========================================================================
   v1.3 — Full-bleed compatibility fix for constrained block themes
   ========================================================================== */
body.bsb-managed-page,
body.bsb-managed-page .wp-site-blocks,
body.bsb-managed-page main,
body.bsb-managed-page .wp-block-post-content,
body.bsb-managed-page .entry-content {
	max-width: none !important;
	width: 100% !important;
	padding-left: 0 !important;
	padding-right: 0 !important;
	overflow: visible !important;
}

body.bsb-managed-page .wp-block-post-content > .bsb-home,
body.bsb-managed-page .entry-content > .bsb-home,
body.bsb-managed-page .bsb-home {
	display: block !important;
	width: 100vw !important;
	max-width: 100vw !important;
	margin-left: calc(50% - 50vw) !important;
	margin-right: calc(50% - 50vw) !important;
	padding: 0 !important;
	overflow-x: clip !important;
}

body.bsb-managed-page .bsb-hero-final {
	display: grid !important;
	grid-template-columns: minmax(0, 1.3fr) minmax(300px, .7fr) !important;
	align-items: center !important;
	gap: clamp(28px, 5vw, 72px) !important;
	width: 100vw !important;
	max-width: 100vw !important;
	min-height: 650px !important;
	margin: 0 !important;
	padding: clamp(70px, 8vw, 112px) max(5vw, calc((100vw - 1180px) / 2)) !important;
	background: linear-gradient(128deg, #06162b 0%, #0b3264 58%, #1256a2 100%) !important;
	color: #fff !important;
	position: relative !important;
	isolation: isolate !important;
}

body.bsb-managed-page .bsb-hero-final::after {
	content: "";
	position: absolute;
	inset: 0;
	background: radial-gradient(circle at 82% 35%, rgba(255,255,255,.12), transparent 34%);
	pointer-events: none;
	z-index: -1;
}

body.bsb-managed-page .bsb-hero-copy,
body.bsb-managed-page .bsb-hero-side {
	min-width: 0 !important;
	width: 100% !important;
	position: relative;
	z-index: 1;
}

body.bsb-managed-page .bsb-hero-final .bsb-h1 {
	color: #fff !important;
	font-family: var(--bsb-font) !important;
	font-size: clamp(3rem, 5.4vw, 5.6rem) !important;
	line-height: 1.02 !important;
	letter-spacing: -.045em !important;
	max-width: 12.5ch !important;
	margin: 0 0 1.4rem !important;
	word-break: normal !important;
	overflow-wrap: normal !important;
	hyphens: none !important;
}

body.bsb-managed-page .bsb-hero-final .bsb-lede {
	color: #dbe9f8 !important;
	font-size: clamp(1.05rem, 1.45vw, 1.25rem) !important;
	line-height: 1.65 !important;
	max-width: 62ch !important;
}

body.bsb-managed-page .bsb-hero-final .bsb-eyebrow,
body.bsb-managed-page .bsb-hero-final .bsb-market-line {
	color: #b9d9ff !important;
}

body.bsb-managed-page .bsb-hero-side {
	display: grid !important;
	grid-template-columns: 1fr !important;
	gap: 14px !important;
}

body.bsb-managed-page .bsb-hero-side > div {
	display: block !important;
	background: rgba(255,255,255,.11) !important;
	border: 1px solid rgba(255,255,255,.24) !important;
	box-shadow: 0 12px 34px rgba(0,0,0,.14) !important;
	padding: 20px 22px !important;
	border-radius: 7px !important;
	color: #fff !important;
}
body.bsb-managed-page .bsb-hero-side strong { color:#fff !important; font-size:1rem !important; }
body.bsb-managed-page .bsb-hero-side span { color:#cbdcf0 !important; font-size:.88rem !important; }

body.bsb-managed-page .bsb-section {
	width: 100vw !important;
	max-width: 100vw !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
}

@media (max-width: 1080px) {
	body.bsb-managed-page .bsb-hero-final {
		grid-template-columns: 1fr !important;
		min-height: 0 !important;
	}
	body.bsb-managed-page .bsb-hero-side {
		grid-template-columns: repeat(2, minmax(0,1fr)) !important;
	}
	body.bsb-managed-page .bsb-hero-final .bsb-h1 { max-width: 15ch !important; }
}

@media (max-width: 700px) {
	body.bsb-managed-page .bsb-home {
		margin-left: calc(50% - 50vw) !important;
		margin-right: calc(50% - 50vw) !important;
	}
	body.bsb-managed-page .bsb-hero-final {
		padding: 58px 6% !important;
		gap: 34px !important;
	}
	body.bsb-managed-page .bsb-hero-final .bsb-h1 {
		font-size: clamp(2.55rem, 13vw, 3.8rem) !important;
		max-width: none !important;
	}
	body.bsb-managed-page .bsb-hero-side {
		grid-template-columns: 1fr !important;
	}
}


/* v1.4 — Toronto-led North American operations */
.bsb-contact-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  margin-bottom: 30px;
}
.bsb-contact-grid .bsb-service-item {
  min-height: 210px;
}
.bsb-contact-grid .bsb-service-item strong {
  color: #0c3f92;
}
@media (max-width: 760px) {
  .bsb-contact-grid {
    grid-template-columns: 1fr;
  }
  .bsb-contact-grid .bsb-service-item {
    min-height: 0;
  }
}


/* ==========================================================================
   v1.5 — Precision alignment and overflow correction
   ========================================================================== */

/* The home wrapper remains full-bleed, while each section stays inside the
   viewport. This prevents 100vw + horizontal padding from creating overflow. */
body.bsb-managed-page .bsb-section {
	width: 100% !important;
	max-width: 100% !important;
	box-sizing: border-box !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
	overflow: hidden !important;
}

/* All homepage grids must calculate columns inside the available width. */
body.bsb-managed-page .bsb-home-categories,
body.bsb-managed-page .bsb-structure-grid,
body.bsb-managed-page .bsb-two-paths {
	width: 100% !important;
	max-width: 1180px !important;
	margin-left: auto !important;
	margin-right: auto !important;
	box-sizing: border-box !important;
}

body.bsb-managed-page .bsb-home-categories {
	grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
}

body.bsb-managed-page .bsb-structure-grid {
	grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
}

body.bsb-managed-page .bsb-two-paths {
	grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}

body.bsb-managed-page .bsb-category-card,
body.bsb-managed-page .bsb-feature-card,
body.bsb-managed-page .bsb-path-card {
	min-width: 0 !important;
	width: auto !important;
	max-width: 100% !important;
	box-sizing: border-box !important;
	overflow-wrap: anywhere !important;
}

body.bsb-managed-page .bsb-path-card h2,
body.bsb-managed-page .bsb-category-card h3,
body.bsb-managed-page .bsb-feature-card h3 {
	max-width: 100% !important;
	overflow-wrap: normal !important;
	word-break: normal !important;
}

/* Products and service grids receive the same safe column calculation. */
body.bsb-managed-page .bsb-products .bsb-category-grid,
body.bsb-managed-page .bsb-page-content .bsb-service-grid {
	grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
	width: 100% !important;
	max-width: 1180px !important;
	box-sizing: border-box !important;
}

/* Toronto contact layout remains two columns. */
body.bsb-managed-page .bsb-contact-grid {
	grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}

/* Keep the CTA inside the viewport and allow buttons to wrap cleanly. */
body.bsb-managed-page .bsb-final-cta {
	max-width: 100% !important;
	box-sizing: border-box !important;
}
body.bsb-managed-page .bsb-final-cta .bsb-cta-row {
	flex-shrink: 0;
	flex-wrap: wrap;
}

/* Responsive precision. */
@media (max-width: 1080px) {
	body.bsb-managed-page .bsb-home-categories,
	body.bsb-managed-page .bsb-structure-grid,
	body.bsb-managed-page .bsb-products .bsb-category-grid,
	body.bsb-managed-page .bsb-page-content .bsb-service-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
	}
	body.bsb-managed-page .bsb-two-paths {
		grid-template-columns: 1fr !important;
	}
}

@media (max-width: 700px) {
	body.bsb-managed-page .bsb-home-categories,
	body.bsb-managed-page .bsb-structure-grid,
	body.bsb-managed-page .bsb-two-paths,
	body.bsb-managed-page .bsb-products .bsb-category-grid,
	body.bsb-managed-page .bsb-page-content .bsb-service-grid,
	body.bsb-managed-page .bsb-contact-grid {
		grid-template-columns: 1fr !important;
	}
}


/* ==========================================================================
   v1.6 — Full-bleed section correction
   The two-path section is itself a grid. It must not inherit the inner-grid
   max-width rule, otherwise the theme content wrapper compresses both cards.
   ========================================================================== */

body.bsb-managed-page .bsb-section {
	width: 100vw !important;
	max-width: none !important;
	margin-left: calc(50% - 50vw) !important;
	margin-right: calc(50% - 50vw) !important;
	padding-left: max(4%, calc((100vw - 1180px) / 2)) !important;
	padding-right: max(4%, calc((100vw - 1180px) / 2)) !important;
	box-sizing: border-box !important;
	overflow: hidden !important;
}

/* Inner grids—not the section itself—use the 1180px content limit. */
body.bsb-managed-page .bsb-home-categories,
body.bsb-managed-page .bsb-structure-grid {
	width: 100% !important;
	max-width: 1180px !important;
	margin-left: auto !important;
	margin-right: auto !important;
}

/* Two business paths: full content width, equal columns, no compression. */
body.bsb-managed-page section.bsb-two-paths {
	width: 100vw !important;
	max-width: none !important;
	margin-left: calc(50% - 50vw) !important;
	margin-right: calc(50% - 50vw) !important;
	grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
	gap: 24px !important;
}

body.bsb-managed-page section.bsb-two-paths .bsb-path-card {
	width: 100% !important;
	min-width: 0 !important;
	max-width: none !important;
	padding: clamp(28px, 3vw, 44px) !important;
}

body.bsb-managed-page section.bsb-two-paths .bsb-path-card h2 {
	font-size: clamp(2rem, 3.4vw, 3.35rem) !important;
	line-height: 1.1 !important;
	white-space: normal !important;
	overflow-wrap: normal !important;
	word-break: normal !important;
}

/* Other inner grids stay centered and fully visible. */
body.bsb-managed-page .bsb-products .bsb-category-grid,
body.bsb-managed-page .bsb-page-content .bsb-service-grid {
	width: 100% !important;
	max-width: 1180px !important;
	margin-left: auto !important;
	margin-right: auto !important;
}

/* Do not let the desktop header create a small horizontal overflow. */
body.bsb-managed-page .bsb-site-header,
body.bsb-managed-page .bsb-site-footer {
	width: 100% !important;
	max-width: 100% !important;
	box-sizing: border-box !important;
}

@media (max-width: 1080px) {
	body.bsb-managed-page section.bsb-two-paths {
		grid-template-columns: 1fr !important;
	}
}

@media (max-width: 700px) {
	body.bsb-managed-page .bsb-section,
	body.bsb-managed-page section.bsb-two-paths {
		padding-left: 5% !important;
		padding-right: 5% !important;
	}
}


/* v1.7 Products & Ordering module */
.bsb-bulk-pricing-cta {
	margin: 1rem 0 0;
}

.bsb-bulk-btn {
	background: var(--bsb-signal);
	border-color: var(--bsb-signal);
}

.bsb-bulk-btn:hover,
.bsb-bulk-btn:focus-visible {
	background: var(--bsb-steel);
	border-color: var(--bsb-steel);
}

/* Quote-form product-context banner */
.bsb-notice-context {
	background: var(--bsb-bg);
	border-color: var(--bsb-signal);
	color: var(--bsb-ink);
}

/* B2B product info table on the single product page */
.bsb-product-info {
	padding-top: 0;
}

.bsb-h2 {
	font-size: 1.4rem;
	font-weight: 700;
	color: var(--bsb-navy);
	letter-spacing: -0.01em;
	margin: 0 0 1rem;
}

.bsb-info-table {
	width: 100%;
	max-width: 640px;
	border-collapse: collapse;
	font-family: var(--bsb-font);
	font-size: 0.95rem;
	margin-bottom: 1.25rem;
}

.bsb-info-table th,
.bsb-info-table td {
	text-align: left;
	padding: 0.65rem 0.9rem;
	border-bottom: 1px solid var(--bsb-line);
}

.bsb-info-table th {
	width: 40%;
	font-weight: 600;
	color: var(--bsb-navy);
	background: var(--bsb-bg);
}

.bsb-info-table td {
	color: var(--bsb-slate);
}

.bsb-spec-sheet-link {
	margin: 0;
}

@media (max-width: 600px) {
	.bsb-info-table th,
	.bsb-info-table td {
		display: block;
		width: 100%;
		padding: 0.5rem 0.75rem;
	}
	.bsb-info-table th {
		border-bottom: none;
		padding-bottom: 0.2rem;
	}
	.bsb-info-table tr {
		display: block;
		margin-bottom: 0.5rem;
		border-bottom: 1px solid var(--bsb-line);
	}
}

/* Compact shop/category-card CTA (item 6) — deliberately small so cards
   don't get overcrowded next to WooCommerce's own add-to-cart markup. */
.bsb-btn-compact {
	display: inline-block;
	margin-top: 0.4rem;
	padding: 0.45rem 0.9rem;
	font-size: 0.8rem;
}

/* Category-page product preview grid (item 7) */
.bsb-category-products {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 0.6rem;
	margin-top: 1rem;
	padding-top: 1rem;
	border-top: 1px solid var(--bsb-line);
}

.bsb-category-product-item {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: 0.4rem;
	font-size: 0.78rem;
	color: var(--bsb-ink);
	text-decoration: none;
}

.bsb-category-product-item img {
	width: 100%;
	height: auto;
	border: 1px solid var(--bsb-line);
}

.bsb-category-product-item:hover span,
.bsb-category-product-item:focus-visible span {
	color: var(--bsb-signal);
}

@media (max-width: 600px) {
	.bsb-category-products {
		grid-template-columns: repeat(2, 1fr);
	}
}

/* ==========================================================================
   v1.8 — WooCommerce Template Integration (additive only; nothing above
   this line is modified from the approved v1.7 design system).
   All rules below are scoped to Boduo's own body classes, so nothing here
   can affect unrelated posts/pages, wp-admin, or non-WooCommerce content.
   No dynamic/inline styles are used anywhere — everything here is static
   and safe to cache (LiteSpeed, Hostinger, or otherwise).
   ========================================================================== */

/* Shared content wrapper around WooCommerce's own wrapper (item 4) */
body.bsb-woocommerce .bsb-woo-wrap {
	max-width: var(--bsb-max-width);
	margin: 0 auto;
	padding: 2rem 1.5rem 4rem;
	font-family: var(--bsb-font);
	color: var(--bsb-ink);
}

/* Breadcrumbs (item 11) */
body.bsb-woocommerce .woocommerce-breadcrumb {
	font-size: 0.85rem;
	color: var(--bsb-slate);
	margin: 0 0 1.5rem;
	padding-bottom: 0.75rem;
	border-bottom: 1px solid var(--bsb-line);
}

body.bsb-woocommerce .woocommerce-breadcrumb a {
	color: var(--bsb-steel);
	text-decoration: none;
}

body.bsb-woocommerce .woocommerce-breadcrumb a:hover {
	color: var(--bsb-signal);
}

/* Page heading (Shop / category title) kept, just restyled */
body.bsb-woocommerce .page-title,
body.bsb-woocommerce h1.woocommerce-products-header__title {
	font-size: clamp(1.7rem, 3vw, 2.4rem);
	font-weight: 800;
	letter-spacing: -0.02em;
	color: var(--bsb-navy);
	margin: 0 0 1rem;
}

/* Result count / ordering row */
body.bsb-woocommerce .woocommerce-result-count,
body.bsb-woocommerce .woocommerce-ordering {
	font-size: 0.9rem;
	color: var(--bsb-slate);
}

body.bsb-woocommerce .woocommerce-ordering select {
	font-family: var(--bsb-font);
	padding: 0.5rem 0.75rem;
	border: 1px solid var(--bsb-line);
	border-radius: var(--bsb-radius);
}

/* ---------- Shop / category / tag product grid (v1.9.5 — consolidated) ----------
   Single source of truth for the archive product grid. Previously this
   ruleset was overridden by three later, competing !important patches
   (v1.9.2/1.9.3/1.9.4) that fought each other and one of which hid the
   duplicate button with CSS instead of fixing it at the hook level. All
   three are removed; this is the only grid/card ruleset now.

   CSS Grid with auto-fit centers 1-2 products instead of stretching them
   or leaving them pinned left, and never grows a card wider than 340px.
   Selectors are duplicated across body.bsb-woocommerce AND WordPress/
   WooCommerce's own native body classes (woocommerce-shop, tax-
   product_cat, post-type-archive-product) so the layout still works even
   if Boduo's own context detection is ever bypassed. */

body.bsb-woocommerce ul.products,
body.woocommerce-shop ul.products,
body.tax-product_cat ul.products,
body.post-type-archive-product ul.products {
	display: grid !important;
	grid-template-columns: repeat(auto-fit, minmax(260px, 340px)) !important;
	justify-content: center !important;
	align-items: stretch !important;
	gap: 1.5rem !important;
	margin: 1.5rem 0 !important;
	padding: 0 !important;
	list-style: none !important;
}

body.bsb-woocommerce ul.products li.product,
body.woocommerce-shop ul.products li.product,
body.tax-product_cat ul.products li.product,
body.post-type-archive-product ul.products li.product {
	position: relative;
	width: 100% !important;
	max-width: 340px !important;
	min-width: 0 !important;
	margin: 0 !important;
	padding: 1.25rem 1.25rem 1.5rem !important;
	background: var(--bsb-white);
	border: 1px solid var(--bsb-line);
	box-sizing: border-box;
	overflow: hidden; /* prevents text/image overflow, no absolute positioning used */
	float: none !important;
	display: flex;
	flex-direction: column;
	justify-self: center;
}

body.bsb-woocommerce ul.products li.product::before,
body.bsb-woocommerce ul.products li.product::after {
	content: "";
	position: absolute;
	width: 10px;
	height: 10px;
	border-color: var(--bsb-signal);
	border-style: solid;
}

body.bsb-woocommerce ul.products li.product::before {
	top: -1px;
	left: -1px;
	border-width: 2px 0 0 2px;
}

body.bsb-woocommerce ul.products li.product::after {
	bottom: -1px;
	right: -1px;
	border-width: 0 2px 2px 0;
}

/* ---------- Product card image area (item 2) ----------
   Controlled height with object-fit: contain — portrait/label images are
   never cropped and never stretch the card tall; a neutral background
   fills the unused space around a contained image. */

body.bsb-woocommerce ul.products li.product a img,
body.bsb-woocommerce ul.products li.product img {
	width: 100%;
	height: 200px;
	max-height: 200px;
	object-fit: contain;
	object-position: center;
	display: block;
	margin: 0 0 1rem;
	background: var(--bsb-bg);
	border: 1px solid var(--bsb-line);
}

body.bsb-woocommerce ul.products li.product .woocommerce-loop-product__title {
	font-size: 1rem;
	font-weight: 700;
	color: var(--bsb-navy);
	margin: 0 0 0.4rem;
	line-height: 1.35;
	overflow-wrap: break-word;
}

body.bsb-woocommerce ul.products li.product .price {
	font-size: 0.95rem;
	color: var(--bsb-slate);
	margin: 0 0 0.75rem;
	display: block;
}

/* ---------- Card action group (v1.9.6 — Request Quote only) ----------
   The duplicate "Read more" was traced to the WooCommerce Product Button
   Block (wp-block-woocommerce-product-button), which renders and owns the
   native CTA independently. Boduo no longer renders any native CTA of its
   own — .bsb-card-actions now holds only the Request Quote link. These
   rules group it visually with the Product Button Block so both read as
   one action cluster at the bottom of the card. No JavaScript, no
   absolute positioning. */

body.bsb-woocommerce ul.products li.product .wp-block-woocommerce-product-button {
	margin-top: auto;
	width: 100%;
}

body.bsb-woocommerce ul.products li.product .wp-block-woocommerce-product-button + .bsb-card-actions,
body.bsb-woocommerce ul.products li.product .bsb-card-actions {
	margin-top: 0.6rem;
	padding-top: 0;
	width: 100%;
}

/* If the Product Button Block isn't present for some reason (e.g. a
   classic template), .bsb-card-actions still anchors to the bottom. */
body.bsb-woocommerce ul.products li.product:not(:has(.wp-block-woocommerce-product-button)) .bsb-card-actions {
	margin-top: auto;
}

body.bsb-woocommerce ul.products li.product .wp-block-woocommerce-product-button .wp-block-button__link,
body.bsb-woocommerce ul.products li.product .wp-block-woocommerce-product-button .button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	min-height: 2.6rem;
	margin: 0;
	padding: 0.6rem 0.9rem;
	box-sizing: border-box;
	white-space: normal;
	text-align: center;
}

body.bsb-woocommerce ul.products li.product .bsb-card-actions {
	display: grid;
	grid-template-columns: 1fr;
	gap: 0.6rem;
}

body.bsb-woocommerce ul.products li.product .bsb-card-actions > .bsb-loop-quote-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	min-height: 2.6rem;
	margin: 0;
	padding: 0.6rem 0.9rem;
	box-sizing: border-box;
	white-space: normal;
	text-align: center;
}

@media (max-width: 600px) {
	body.bsb-woocommerce ul.products,
	body.woocommerce-shop ul.products,
	body.tax-product_cat ul.products,
	body.post-type-archive-product ul.products {
		grid-template-columns: minmax(0, 1fr) !important;
	}
	body.bsb-woocommerce ul.products li.product,
	body.woocommerce-shop ul.products li.product,
	body.tax-product_cat ul.products li.product,
	body.post-type-archive-product ul.products li.product {
		max-width: 420px !important;
	}
}

/* ---------- No-results / empty states (item 10) ---------- */

body.bsb-woocommerce .woocommerce-info,
body.bsb-woocommerce p.cart-empty,
body.bsb-woocommerce .woocommerce-message,
body.bsb-woocommerce .woocommerce-error,
body.bsb-woocommerce .woocommerce-noreviews {
	font-family: var(--bsb-font);
	font-size: 0.95rem;
	padding: 1rem 1.25rem;
	border-left: 4px solid var(--bsb-signal);
	background: var(--bsb-bg);
	color: var(--bsb-ink);
	list-style: none;
	margin: 0 0 1.5rem;
}

body.bsb-woocommerce .woocommerce-error {
	border-left-color: #b3352c;
}

/* ---------- Single product (v1.9 refined — items 3-8) ---------- */

body.bsb-single-product div.product {
	max-width: 1220px;
	margin: 0 auto;
	font-family: var(--bsb-font);
	display: grid;
	grid-template-columns: 48% 1fr;
	gap: 2.5rem;
	align-items: start;
}

/* Everything inside div.product spans full width by default (tabs,
   Boduo info table, related products); the gallery and summary below
   are the only two children pulled into the two-column row. */
body.bsb-single-product div.product > * {
	grid-column: 1 / -1;
}

body.bsb-single-product div.product > .woocommerce-product-gallery {
	grid-column: 1;
	max-width: 100%;
}

body.bsb-single-product div.product > .summary {
	grid-column: 2;
	max-width: 100%;
}

/* Gallery (item 4) */
body.bsb-single-product .woocommerce-product-gallery__image img,
body.bsb-single-product .woocommerce-product-gallery img {
	max-height: 520px;
	width: 100%;
	object-fit: contain;
	object-position: center;
	background: var(--bsb-bg);
	margin: 0 auto;
	display: block;
}

body.bsb-single-product .flex-control-thumbs img {
	object-fit: contain;
	background: var(--bsb-bg);
}

/* Summary (item 5) */
body.bsb-single-product .summary .product_title {
	font-size: clamp(1.5rem, 2.6vw, 2.1rem);
	font-weight: 800;
	color: var(--bsb-navy);
	letter-spacing: -0.01em;
	margin: 0 0 0.75rem;
}

body.bsb-single-product .summary .price {
	font-size: 1.25rem;
	color: var(--bsb-navy);
	margin: 0 0 1rem;
}

body.bsb-single-product .summary .stock {
	font-size: 0.9rem;
	margin: 0 0 1rem;
}

body.bsb-single-product .summary .woocommerce-product-details__short-description {
	max-width: 60ch;
	color: var(--bsb-slate);
	line-height: 1.65;
	margin: 0 0 1.25rem;
}

body.bsb-single-product .summary .cart {
	margin: 0 0 1rem;
}

body.bsb-single-product .summary .bsb-bulk-pricing-cta {
	margin: 0.5rem 0 1.25rem;
}

body.bsb-single-product .summary .product_meta {
	font-size: 0.85rem;
	color: var(--bsb-slate);
	padding-top: 1rem;
	border-top: 1px solid var(--bsb-line);
}

body.bsb-single-product .summary .product_meta > span {
	display: block;
	margin-bottom: 0.35rem;
}

/* Product Information table (item 6) — wider, clearer two-column layout */
body.bsb-single-product .bsb-info-table {
	width: 100%;
	max-width: none;
}

body.bsb-single-product .bsb-info-table th {
	width: 30%;
}

body.bsb-single-product .bsb-info-table td {
	width: 70%;
	overflow-wrap: break-word;
}

/* Tabs (item 7) */
body.bsb-single-product .woocommerce-tabs {
	margin-top: 2rem;
	padding-top: 1.5rem;
	border-top: 1px solid var(--bsb-line);
}

body.bsb-single-product .woocommerce-tabs ul.tabs {
	display: flex;
	flex-wrap: wrap;
	gap: 1.5rem;
	list-style: none;
	margin: 0 0 1.25rem;
	padding: 0;
	border-bottom: 1px solid var(--bsb-line);
}

body.bsb-single-product .woocommerce-tabs ul.tabs li {
	margin: 0;
	padding: 0 0 0.75rem;
}

body.bsb-single-product .woocommerce-tabs ul.tabs li a {
	color: var(--bsb-slate);
	font-weight: 600;
	text-decoration: none;
}

body.bsb-single-product .woocommerce-tabs ul.tabs li.active a {
	color: var(--bsb-navy);
}

body.bsb-single-product .woocommerce-tabs .panel {
	max-width: 78ch;
	line-height: 1.7;
	color: var(--bsb-slate);
}

/* Related products (item 8) — same card system as the main product grid */
body.bsb-single-product .related.products {
	margin-top: 3rem;
	padding-top: 2rem;
	border-top: 1px solid var(--bsb-line);
}

body.bsb-single-product .related.products > h2 {
	font-size: 1.4rem;
	font-weight: 700;
	color: var(--bsb-navy);
	margin: 0 0 1rem;
}

@media (max-width: 1080px) {
	body.bsb-single-product div.product {
		grid-template-columns: 44% 1fr;
		gap: 2rem;
	}
}

@media (max-width: 900px) {
	body.bsb-single-product div.product {
		grid-template-columns: 1fr 1fr;
		gap: 1.5rem;
	}
}

@media (max-width: 700px) {
	body.bsb-single-product div.product {
		grid-template-columns: 1fr;
	}
	body.bsb-single-product div.product > .woocommerce-product-gallery,
	body.bsb-single-product div.product > .summary {
		grid-column: 1;
	}
	body.bsb-single-product .woocommerce-product-gallery__image img,
	body.bsb-single-product .woocommerce-product-gallery img {
		max-height: 360px;
	}
}

body.bsb-cart table.shop_table {
	width: 100%;
	border-collapse: collapse;
	font-family: var(--bsb-font);
	font-size: 0.95rem;
}

body.bsb-cart table.shop_table th,
body.bsb-cart table.shop_table td {
	padding: 0.85rem 0.75rem;
	border-bottom: 1px solid var(--bsb-line);
	text-align: left;
}

body.bsb-cart .cart-collaterals .cart_totals {
	border: 1px solid var(--bsb-line);
	padding: 1.25rem;
	max-width: 420px;
	margin-left: auto;
}

body.bsb-cart .wc-proceed-to-checkout .checkout-button {
	width: 100%;
	text-align: center;
	display: block;
}

/* ---------- Checkout (item 8) ---------- */

body.bsb-checkout form.checkout {
	font-family: var(--bsb-font);
}

body.bsb-checkout #customer_details,
body.bsb-checkout #order_review {
	border: 1px solid var(--bsb-line);
	padding: 1.5rem;
	margin-bottom: 1.5rem;
}

body.bsb-checkout .form-row input.input-text,
body.bsb-checkout .form-row select {
	font-family: var(--bsb-font);
	padding: 0.7rem 0.85rem;
	border: 1px solid var(--bsb-line);
	border-radius: var(--bsb-radius);
	width: 100%;
	box-sizing: border-box;
}

body.bsb-checkout #place_order {
	width: 100%;
}

/* ---------- My Account (item 9) ---------- */

body.bsb-account .woocommerce-MyAccount-navigation ul {
	list-style: none;
	margin: 0;
	padding: 0;
	border: 1px solid var(--bsb-line);
}

body.bsb-account .woocommerce-MyAccount-navigation li {
	border-bottom: 1px solid var(--bsb-line);
}

body.bsb-account .woocommerce-MyAccount-navigation li:last-child {
	border-bottom: none;
}

body.bsb-account .woocommerce-MyAccount-navigation a {
	display: block;
	padding: 0.75rem 1rem;
	color: var(--bsb-navy);
	text-decoration: none;
	font-weight: 600;
	font-size: 0.9rem;
}

body.bsb-account .woocommerce-MyAccount-navigation li.is-active a {
	color: var(--bsb-signal);
}

body.bsb-account .woocommerce-MyAccount-content table.shop_table {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.9rem;
}

body.bsb-account .woocommerce-MyAccount-content table.shop_table th,
body.bsb-account .woocommerce-MyAccount-content table.shop_table td {
	padding: 0.75rem;
	border-bottom: 1px solid var(--bsb-line);
}

body.bsb-account form.login,
body.bsb-account form.register,
body.bsb-account .woocommerce-EditAccountForm,
body.bsb-account .woocommerce-Address-title {
	font-family: var(--bsb-font);
}

body.bsb-account .woocommerce-Button,
body.bsb-account button.button {
	font-family: var(--bsb-font);
}

/* ---------- Classic (non-block) theme fallback (defensive only) ----------
   Inert while the active theme is a block theme. If the theme is ever
   switched to a classic theme, body.bsb-classic-fallback is added and
   these best-effort selectors hide the theme's own header/footer so the
   Boduo header/footer injected via wp_body_open/wp_footer isn't doubled.
   These selectors are intentionally broad/generic; verify visually
   against the actual classic theme in use before relying on this path. */

body.bsb-classic-fallback header.site-header,
body.bsb-classic-fallback #masthead,
body.bsb-classic-fallback .site-header,
body.bsb-classic-fallback footer.site-footer,
body.bsb-classic-fallback #colophon,
body.bsb-classic-fallback .site-footer {
	display: none !important;
}

/* ---------- Responsive: tablet-specific tweaks (items covered above
   already include tablet breakpoints per component) ---------- */

@media (max-width: 782px) {
	body.bsb-woocommerce .cart-collaterals .cart_totals {
		max-width: 100%;
	}
}


/* v1.8 carried-forward correction (still valid in v1.9) */
body.bsb-woocommerce .woocommerce-pagination { clear: both; margin: 2rem 0 0; }
body.bsb-woocommerce .woocommerce-pagination ul.page-numbers { display: flex; flex-wrap: wrap; gap: .4rem; border: 0; }
body.bsb-woocommerce .woocommerce-pagination ul.page-numbers li { border: 0; }

/* ==========================================================================
   v1.9 — Product, Cart and Supply Chain Flow Refinement (additive only;
   nothing above this line is modified beyond the two corrections noted).
   ========================================================================== */

/* ---------- Part 2: Empty cart (v1.9.7 — corrected block-grid targeting) ----------
   Root cause: the "New in store" recommendations render via WooCommerce
   Blocks' Product Grid (.wc-block-grid__products / .wc-block-grid__product),
   not the classic ul.products/li.product archive markup. The v1.9 rule
   below targeting ul.products never matched this content at all, which is
   why centering/sizing never applied. Replaced with rules that target the
   real block markup, scoped entirely to body.bsb-cart. */

body.bsb-cart {
	overflow-x: hidden; /* safety net only — see below for the actual fix */
}

body.bsb-cart .bsb-woo-wrap {
	max-width: 1220px;
	width: 100%;
	margin-inline: auto;
	padding-inline: 1.5rem;
	box-sizing: border-box;
	min-height: 0;
}

body.bsb-cart .bsb-empty-cart-cta {
	text-align: center;
	max-width: 640px;
	width: 100%;
	margin: 1.25rem auto 2rem;
	padding: 0 1rem;
	box-sizing: border-box;
}

body.bsb-cart .bsb-empty-cart-cta p {
	color: var(--bsb-slate);
	font-size: 1.05rem;
	margin: 0 0 1.5rem;
}

body.bsb-cart .bsb-empty-cart-cta .bsb-cta-row {
	justify-content: center;
}

/* WooCommerce's own empty-cart icon + "Your cart is currently empty!"
   message — centered and tightened so it reads as one section with the
   Boduo actions above and the recommendations below, not three
   disconnected blocks. Boduo does not add a second heading here. */
body.bsb-cart p.cart-empty.woocommerce-info,
body.bsb-cart .wc-block-cart-empty,
body.bsb-cart .wc-empty-cart-block {
	max-width: 640px;
	width: 100%;
	margin: 1.5rem auto 0.5rem;
	text-align: center;
	border-left: none;
	background: transparent;
	padding: 0;
	font-size: 1.05rem;
	box-sizing: border-box;
}

body.bsb-cart .wc-block-cart-empty svg,
body.bsb-cart .wc-block-cart-empty img {
	margin-inline: auto;
}

/* ---- WooCommerce Blocks Product Grid ("New in store") ---- */

/* The actual overflow source: WC Blocks' own .wc-block-grid__products
   ships negative left/right margins (a gutter technique meant to offset
   each .wc-block-grid__product's padding). Inside Boduo's own padded
   wrapper, that negative margin pushed the grid past the container's
   edge, which is what produced the horizontal scrollbar — not a viewport
   unit or fixed width anywhere in Boduo's own CSS. Zeroing it out here
   removes the overflow at its source; overflow-x: hidden above is a
   backup only, not the fix itself. */
body.bsb-cart .wc-block-grid__products {
	display: grid !important;
	grid-template-columns: repeat(auto-fit, minmax(240px, 320px)) !important;
	justify-content: center !important;
	gap: 24px !important;
	width: 100% !important;
	max-width: 100% !important;
	margin: 1.5rem 0 0 !important;
	padding: 2rem 0 0 !important;
	border-top: 1px solid var(--bsb-line);
	box-sizing: border-box;
	list-style: none;
}

body.bsb-cart .wc-block-grid__products::before,
body.bsb-cart .wc-block-grid__products::after {
	display: none !important;
	content: none !important;
}

body.bsb-cart .wc-block-grid__product {
	float: none !important;
	width: 100% !important;
	max-width: 320px !important;
	margin: 0 auto !important;
	padding: 0 !important;
	box-sizing: border-box;
	text-align: center;
	display: flex;
	flex-direction: column;
	align-items: center;
}

body.bsb-cart .wc-block-grid__product-image {
	width: 100%;
	max-width: 100%;
	margin: 0 auto 0.85rem;
}

body.bsb-cart .wc-block-grid__product-image img {
	width: 100%;
	height: auto;
	max-height: 280px;
	object-fit: contain;
	object-position: center;
	display: block;
	margin: 0 auto;
	background: var(--bsb-bg);
	border: 1px solid var(--bsb-line);
	box-sizing: border-box;
}

body.bsb-cart .wc-block-grid__product-title {
	font-size: 1rem;
	font-weight: 700;
	color: var(--bsb-navy);
	line-height: 1.4;
	margin: 0 0 0.75rem;
	max-width: 100%;
	overflow-wrap: break-word;
	text-align: center;
}

/* Button — v1.9.6 confirmed the underlying WooCommerce/theme output uses
   the Gutenberg button-block markup and/or the classic .button class
   inside these grid blocks; both are covered rather than assumed to be
   only one of them. */
body.bsb-cart .wc-block-grid__product .wp-block-button__link,
body.bsb-cart .wc-block-grid__product .wc-block-grid__product-add-to-cart .button,
body.bsb-cart .wc-block-grid__product a.button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	max-width: 100%;
	min-height: 2.75rem;
	margin: 0;
	padding: 0.6rem 1rem;
	box-sizing: border-box;
	white-space: normal;
	text-align: center;
}

@media (max-width: 900px) {
	body.bsb-cart .wc-block-grid__products {
		grid-template-columns: repeat(auto-fit, minmax(220px, 300px)) !important;
	}
}

@media (max-width: 600px) {
	body.bsb-cart .wc-block-grid__products {
		grid-template-columns: minmax(0, 340px) !important;
	}
	body.bsb-cart .wc-block-grid__product {
		max-width: 100% !important;
	}
	body.bsb-cart .bsb-empty-cart-cta .bsb-cta-row .bsb-btn {
		width: 100%;
	}
}

/* ---------- Part 2: Non-empty cart (items 13-14) ---------- */

body.bsb-cart table.shop_table td.product-thumbnail img {
	max-width: 90px;
	height: auto;
	object-fit: contain;
	background: var(--bsb-bg);
	border: 1px solid var(--bsb-line);
}

body.bsb-cart table.shop_table td.product-name {
	font-weight: 600;
	color: var(--bsb-navy);
}

body.bsb-cart .quantity input.qty {
	width: 4.2rem;
	padding: 0.5rem;
	border: 1px solid var(--bsb-line);
	border-radius: var(--bsb-radius);
	font-family: var(--bsb-font);
}

body.bsb-cart .coupon {
	display: flex;
	flex-wrap: wrap;
	gap: 0.6rem;
	align-items: center;
	margin: 1rem 0;
}

body.bsb-cart .coupon .input-text {
	padding: 0.6rem 0.75rem;
	border: 1px solid var(--bsb-line);
	border-radius: var(--bsb-radius);
	font-family: var(--bsb-font);
}

@media (max-width: 900px) {
	body.bsb-cart table.shop_table {
		display: block;
		overflow-x: visible;
	}
	body.bsb-cart table.shop_table td.product-thumbnail img {
		max-width: 64px;
	}
}

@media (max-width: 600px) {
	body.bsb-cart .cart_totals,
	body.bsb-cart .wc-proceed-to-checkout .checkout-button {
		width: 100%;
		max-width: 100%;
	}
	body.bsb-cart table.shop_table th:not(:first-child):not(.product-remove),
	body.bsb-cart table.shop_table {
		font-size: 0.9rem;
	}
}

/* ==========================================================================
   Part 3 — Homepage Supply Chain Flow (final visual correction).
   Scoped entirely to .bsb-flow-section / .bsb-process — no other homepage
   section is touched. Same five approved stages, order, wording, icons,
   and dark navy background — layout/visual treatment only.
   ========================================================================== */

.bsb-flow-section .bsb-process {
	display: grid;
	grid-template-columns: repeat(5, 1fr);
	gap: 18px;
	margin-top: 32px;
	list-style: none;
	padding: 0;
}

.bsb-process-step {
	position: relative;
	min-height: 220px;
	background: rgba(255, 255, 255, 0.045);
	border: 1px solid rgba(255, 255, 255, 0.16);
	box-shadow: 0 6px 18px rgba(2, 10, 26, 0.28);
	border-radius: 3px;
	padding: 22px 20px;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	text-align: left;
	gap: 12px;
	transition: transform 0.15s ease, background 0.15s ease, box-shadow 0.15s ease;
}

.bsb-process-num {
	display: block;
	font-size: 0.75rem;
	font-weight: 800;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--bsb-signal);
}

.bsb-process-icon {
	display: block;
	width: 28px;
	height: 28px;
	color: #a9d1ff;
}

.bsb-process-icon svg {
	display: block;
	width: 100%;
	height: 100%;
}

.bsb-process-title {
	font-size: 1.1rem;
	font-weight: 600;
	color: #fff;
	margin: 0;
	letter-spacing: -0.01em;
	line-height: 1.3;
}

.bsb-process-desc {
	font-size: 0.9rem;
	line-height: 1.6;
	color: #cbdcf0;
	margin: 0;
}

/* Delivery — highlighted as the completion point via border/gradient only;
   grid keeps every card the exact same width. */
.bsb-process-step-final {
	background: linear-gradient(160deg, rgba(46, 124, 214, 0.22), rgba(255, 255, 255, 0.045));
	border-color: rgba(120, 185, 240, 0.75);
	box-shadow: 0 6px 20px rgba(46, 124, 214, 0.25);
}

.bsb-process-step-final .bsb-process-num,
.bsb-process-step-final .bsb-process-icon {
	color: #fff;
}

@media (hover: hover) {
	.bsb-process-step:hover,
	.bsb-process-step:focus-within {
		transform: translateY(-3px);
		background: rgba(255, 255, 255, 0.08);
		box-shadow: 0 10px 24px rgba(2, 10, 26, 0.35);
	}
	.bsb-process-step-final:hover,
	.bsb-process-step-final:focus-within {
		background: linear-gradient(160deg, rgba(46, 124, 214, 0.3), rgba(255, 255, 255, 0.08));
	}
}

@media (prefers-reduced-motion: reduce) {
	.bsb-process-step {
		transition: none;
	}
}

/* ---------- Connectors: short segments living in the grid gutter only —
   never drawn across card content, icons, or text. ---------- */

.bsb-process-step:not(:last-child)::after {
	content: "";
	position: absolute;
	top: 50%;
	right: -18px;
	width: 9px;
	height: 9px;
	border-top: 2px solid var(--bsb-signal);
	border-right: 2px solid var(--bsb-signal);
	transform: translate(50%, -50%) rotate(45deg);
	z-index: 2;
	pointer-events: none;
}

/* ---------- Tablet — 3 cards row 1, 2 centered cards row 2 ---------- */
@media (max-width: 1080px) and (min-width: 701px) {
	.bsb-flow-section .bsb-process {
		grid-template-columns: repeat(6, 1fr);
		row-gap: 18px;
	}
	.bsb-process-step:nth-child(1) { grid-column: 1 / span 2; }
	.bsb-process-step:nth-child(2) { grid-column: 3 / span 2; }
	.bsb-process-step:nth-child(3) { grid-column: 5 / span 2; }
	.bsb-process-step:nth-child(4) { grid-column: 2 / span 2; }
	.bsb-process-step:nth-child(5) { grid-column: 4 / span 2; }

	/* No horizontal connectors between wrapped rows at this breakpoint. */
	.bsb-process-step:not(:last-child)::after {
		display: none;
	}
}

/* ---------- Mobile — one card per row, short vertical connector ---------- */
@media (max-width: 700px) {
	.bsb-flow-section .bsb-process {
		grid-template-columns: 1fr;
		row-gap: 30px;
	}
	.bsb-process-step {
		min-height: 0;
	}
	.bsb-process-step:not(:last-child)::after {
		display: block;
		top: auto;
		right: auto;
		bottom: -19px;
		left: 50%;
		transform: translate(-50%, 0) rotate(135deg);
	}
}

/* ==========================================================================
   v2.0 — Freight Quote System (additive only; nothing above this line is
   modified). Reuses existing tokens, buttons, .bsb-page-content, .bsb-h1,
   .bsb-h2, .bsb-notice, .bsb-cta-row, .bsb-hp-field from earlier releases.
   ========================================================================== */

.bsb-freight-page .bsb-lede {
	max-width: 78ch;
}

.bsb-freight-info-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 1.25rem;
	margin: 1.5rem 0 2rem;
}

.bsb-freight-info-grid > div {
	border: 1px solid var(--bsb-line);
	padding: 1.1rem 1.25rem;
	background: var(--bsb-white);
}

.bsb-freight-info-grid h3 {
	font-size: 1rem;
	color: var(--bsb-navy);
	margin: 0 0 0.4rem;
}

.bsb-freight-info-grid p {
	font-size: 0.9rem;
	color: var(--bsb-slate);
	line-height: 1.55;
	margin: 0;
}

.bsb-freight-cart-summary {
	max-width: 720px;
	margin: 0 0 1.5rem;
	padding: 1rem 1.25rem;
	background: var(--bsb-bg);
	border: 1px solid var(--bsb-line);
}

.bsb-freight-cart-summary pre {
	white-space: pre-wrap;
	font-family: var(--bsb-font);
	font-size: 0.9rem;
	color: var(--bsb-ink);
	margin: 0.5rem 0 0;
}

.bsb-freight-form {
	max-width: 1180px;
}

.bsb-freight-fieldset {
	border: 1px solid var(--bsb-line);
	padding: 1.25rem 1.5rem 1.5rem;
	margin: 0 0 1.5rem;
}

.bsb-freight-fieldset legend {
	font-weight: 700;
	color: var(--bsb-navy);
	padding: 0 0.5rem;
}

.bsb-freight-grid-2 {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 1rem 1.5rem;
}

.bsb-freight-grid-2 label,
.bsb-freight-full {
	display: flex;
	flex-direction: column;
	gap: 0.4rem;
	font-size: 0.9rem;
	font-weight: 600;
	color: var(--bsb-navy);
	margin-top: 0.75rem;
}

.bsb-freight-fieldset input,
.bsb-freight-fieldset select,
.bsb-freight-fieldset textarea {
	font-family: var(--bsb-font);
	font-size: 1rem;
	font-weight: 400;
	color: var(--bsb-ink);
	padding: 0.65rem 0.8rem;
	border: 1px solid var(--bsb-line);
	border-radius: var(--bsb-radius);
	background: var(--bsb-white);
	width: 100%;
	box-sizing: border-box;
}

.bsb-freight-fieldset input:focus-visible,
.bsb-freight-fieldset select:focus-visible,
.bsb-freight-fieldset textarea:focus-visible {
	outline: 3px solid var(--bsb-signal);
	outline-offset: 1px;
	border-color: var(--bsb-signal);
}

.bsb-freight-faq {
	margin-top: 2.5rem;
	padding-top: 1.5rem;
	border-top: 1px solid var(--bsb-line);
	max-width: 78ch;
}

.bsb-freight-faq h3 {
	font-size: 1rem;
	color: var(--bsb-navy);
	margin: 1rem 0 0.35rem;
}

.bsb-freight-faq p {
	color: var(--bsb-slate);
	margin: 0;
	line-height: 1.6;
}

.bsb-freight-ref {
	font-size: 1rem;
}

.bsb-freight-social {
	margin-top: 1.5rem;
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
	align-items: center;
}

.bsb-freight-wechat {
	font-size: 0.9rem;
	color: var(--bsb-slate);
}

.bsb-freight-wechat-qr {
	max-width: 140px;
	height: auto;
	display: block;
	margin-top: 0.5rem;
	border: 1px solid var(--bsb-line);
}

/* Product-page freight section */
.bsb-freight-product-cta {
	margin: 1.25rem 0;
	padding: 1rem 1.25rem;
	border: 1px solid var(--bsb-line);
	background: var(--bsb-bg);
}

.bsb-freight-product-cta h3 {
	font-size: 1rem;
	color: var(--bsb-navy);
	margin: 0 0 0.4rem;
}

.bsb-freight-product-cta p {
	font-size: 0.9rem;
	color: var(--bsb-slate);
	margin: 0 0 0.75rem;
}

/* Cart CTA (non-empty) */
.bsb-freight-cart-cta {
	margin: 1.5rem 0;
	padding: 1rem 1.25rem;
	border: 1px solid var(--bsb-line);
	background: var(--bsb-bg);
	max-width: 640px;
}

.bsb-freight-cart-cta h3 {
	font-size: 1rem;
	color: var(--bsb-navy);
	margin: 0 0 0.4rem;
}

.bsb-freight-cart-cta p {
	font-size: 0.9rem;
	color: var(--bsb-slate);
	margin: 0 0 0.75rem;
}

/* Empty-cart secondary link — sits below the existing approved CTA block,
   never merged into .bsb-empty-cart-actions. */
.bsb-freight-empty-cart-link {
	text-align: center;
	margin: 0.5rem auto 2rem;
}

/* Checkout notice */
.bsb-freight-checkout-notice {
	margin: 1.25rem 0;
	padding: 0.9rem 1.1rem;
	border-left: 4px solid var(--bsb-signal);
	background: var(--bsb-bg);
	font-size: 0.9rem;
}

.bsb-freight-checkout-notice p {
	margin: 0 0 0.6rem;
	color: var(--bsb-ink);
}

@media (max-width: 900px) {
	.bsb-freight-info-grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (max-width: 700px) {
	.bsb-freight-grid-2 {
		grid-template-columns: 1fr;
	}
	.bsb-freight-info-grid {
		grid-template-columns: 1fr;
	}
	.bsb-freight-form .bsb-btn,
	.bsb-freight-fieldset button {
		width: 100%;
	}
}

/* ==========================================================================
   v2.0.3 — Freight Package Dimensions and Weight (additive only).
   ========================================================================== */

.bsb-package-help {
	font-size: 0.85rem;
	color: var(--bsb-slate);
	margin: 0 0 1rem;
	max-width: 70ch;
}

.bsb-package-row {
	border: 1px solid var(--bsb-line);
	background: var(--bsb-bg);
	padding: 1rem 1.25rem 1.25rem;
	margin: 0 0 1.25rem;
	position: relative;
}

.bsb-package-row legend {
	font-weight: 700;
	color: var(--bsb-navy);
	padding: 0 0.5rem;
}

.bsb-freight-grid-3 {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 1rem 1.5rem;
	margin-top: 0.75rem;
}

.bsb-freight-grid-3 label {
	display: flex;
	flex-direction: column;
	gap: 0.4rem;
	font-size: 0.9rem;
	font-weight: 600;
	color: var(--bsb-navy);
}

.bsb-package-row input,
.bsb-package-row select {
	font-family: var(--bsb-font);
	font-size: 1rem;
	padding: 0.6rem 0.75rem;
	border: 1px solid var(--bsb-line);
	border-radius: var(--bsb-radius);
	background: var(--bsb-white);
	width: 100%;
	box-sizing: border-box;
}

.bsb-package-row input:focus-visible,
.bsb-package-row select:focus-visible {
	outline: 3px solid var(--bsb-signal);
	outline-offset: 1px;
	border-color: var(--bsb-signal);
}

.bsb-remove-package {
	margin-top: 1rem;
}

#bsb-add-package {
	margin-top: 0.25rem;
}

#bsb-add-package:disabled {
	opacity: 0.55;
	cursor: not-allowed;
}

.bsb-package-noscript-note {
	font-size: 0.78rem;
	color: var(--bsb-slate);
	margin: 0.6rem 0 0;
}

@media (max-width: 700px) {
	.bsb-freight-grid-3 {
		grid-template-columns: 1fr 1fr;
	}
	.bsb-package-row {
		padding: 0.85rem 1rem 1rem;
	}
	.bsb-remove-package,
	#bsb-add-package {
		width: 100%;
	}
}

@media (max-width: 480px) {
	.bsb-freight-grid-3 {
		grid-template-columns: 1fr;
	}
}

/* ==========================================================================
   v2.0.5 — Optional package-row validation fix; cart context and preferred contact preserved.
   ========================================================================== */

.bsb-freight-contact-method {
	border: none;
	padding: 0;
	margin: 1rem 0 0;
}

.bsb-freight-contact-method legend {
	font-size: 0.9rem;
	font-weight: 600;
	color: var(--bsb-navy);
	padding: 0;
	margin-bottom: 0.5rem;
}

.bsb-radio-label {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	font-weight: 400;
	margin-right: 1.25rem;
	margin-bottom: 0.5rem;
	color: var(--bsb-ink);
}

.bsb-radio-label input[type="radio"] {
	width: auto;
}

.bsb-readonly-field {
	display: flex;
	flex-direction: column;
	gap: 0.3rem;
}

.bsb-readonly-label {
	font-size: 0.85rem;
	font-weight: 600;
	color: var(--bsb-navy);
}

.bsb-readonly-value {
	padding: 0.6rem 0.75rem;
	background: var(--bsb-white);
	border: 1px solid var(--bsb-line);
	border-radius: var(--bsb-radius);
	color: var(--bsb-ink);
}

@media (max-width: 700px) {
	.bsb-radio-label {
		display: flex;
		margin-right: 0;
	}
}
