Files
shopwisdom-site/index.html
T
Michael Victory 925733a894 Point lead form to unified n8n webhook /webhook/lead
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 21:47:57 -07:00

415 lines
29 KiB
HTML

<!DOCTYPE html>
<html lang="en-CA">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Shop Wisdom | Keep What Your Best People Know — for Canadian Manufacturers</title>
<meta name="description" content="Your best people are retiring. Shop Wisdom helps Canadian manufacturers and production shops capture the know-how that lives in a few heads and turn it into systems the whole shop can use — before it walks out the door. You own everything we build.">
<link rel="stylesheet" href="style.css">
<meta name="robots" content="index,follow">
<meta name="theme-color" content="#faf7f2">
<link rel="canonical" href="https://shopwisdom.ca/">
<link rel="icon" href="favicon.svg" type="image/svg+xml">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Shop Wisdom">
<meta property="og:title" content="Shop Wisdom — keep what your best people know">
<meta property="og:description" content="Your best people are retiring. We help Canadian manufacturers capture the know-how that lives in a few heads and turn it into systems the whole shop can use — before it walks out the door.">
<meta property="og:url" content="https://shopwisdom.ca/">
<meta property="og:locale" content="en_CA">
<meta property="og:image" content="https://shopwisdom.ca/og-card.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Shop Wisdom — your best people are retiring. Their know-how doesn't have to.">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Shop Wisdom — keep what your best people know">
<meta name="twitter:description" content="Knowledge continuity for Canadian manufacturers — before it walks out the door.">
<meta name="twitter:image" content="https://shopwisdom.ca/og-card.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "Shop Wisdom",
"url": "https://shopwisdom.ca/",
"logo": "https://shopwisdom.ca/favicon.svg",
"description": "Knowledge continuity for Canadian manufacturers — capturing veteran know-how and turning it into systems the whole shop can use, before it walks out the door.",
"areaServed": { "@type": "Country", "name": "Canada" },
"founder": { "@type": "Person", "name": "Michael Victory" },
"telephone": "+1-778-985-6736",
"email": "michael@opencommunications.consulting",
"address": { "@type": "PostalAddress", "addressRegion": "British Columbia", "addressCountry": "CA" },
"sameAs": ["https://www.opencommunications.consulting/"],
"knowsAbout": ["knowledge capture", "succession planning", "business continuity", "standard operating procedures", "manufacturing", "AI tools for business"]
}
</script>
</head>
<body>
<header class="site-header">
<div class="wrap header-row">
<a class="wordmark" href="#top">Shop<span>Wisdom</span></a>
<nav class="site-nav" aria-label="Main">
<a href="#work">The work</a>
<a href="#results">Client results</a>
<a href="#process">How it works</a>
<a href="#about">About</a>
<a class="tel nav-phone" data-p1="778" data-p2="985" data-p3="6736" href="#contact" aria-label="Call Shop Wisdom">778&#8209;985&#8209;OPEN</a>
<a class="nav-cta" href="https://cal.shopwisdom.ca/michaelvictory/20-min-shop-wise-meeting" data-cal-link="michaelvictory/20-min-shop-wise-meeting" data-cal-origin="https://cal.shopwisdom.ca" data-cal-config='{"theme":"light"}'>Book a call</a>
</nav>
<button class="nav-toggle" id="navToggle" aria-label="Open menu" aria-expanded="false">
<svg class="nav-toggle-icon" viewBox="0 0 32 32" aria-hidden="true">
<line class="bar bar-top" x1="6" y1="10" x2="26" y2="10"/>
<line class="bar bar-mid" x1="6" y1="16" x2="26" y2="16"/>
<line class="bar bar-bot" x1="6" y1="22" x2="26" y2="22"/>
</svg>
</button>
</div>
</header>
<div class="nav-mobile-menu" id="navMobileMenu">
<a href="#work">The work</a>
<a href="#results">Client results</a>
<a href="#process">How it works</a>
<a href="#about">About</a>
<a class="tel" data-p1="778" data-p2="985" data-p3="6736" href="#contact">Call 778&#8209;985&#8209;OPEN (6736)</a>
<a class="nav-cta" href="https://cal.shopwisdom.ca/michaelvictory/20-min-shop-wise-meeting" data-cal-link="michaelvictory/20-min-shop-wise-meeting" data-cal-origin="https://cal.shopwisdom.ca" data-cal-config='{"theme":"light"}'>Book a call</a>
</div>
<main id="top">
<section class="hero">
<div class="wrap">
<p class="eyebrow">For Canadian manufacturers &amp; production shops</p>
<h1>Your best people are retiring. Their know&#8209;how doesn't have to.</h1>
<p class="hero-sub">Before your veterans walk out the door, we turn what's in their heads into systems your whole shop can use.</p>
<div class="hero-actions">
<a class="btn" href="https://cal.shopwisdom.ca/michaelvictory/20-min-shop-wise-meeting" data-cal-link="michaelvictory/20-min-shop-wise-meeting" data-cal-origin="https://cal.shopwisdom.ca" data-cal-config='{"theme":"light"}'>Book a fit call — free, no pitch</a>
<a class="btn ghost" href="#results">See client results</a>
</div>
<p class="hero-call">or call <a class="tel" data-p1="778" data-p2="985" data-p3="6736" href="#contact">778&#8209;985&#8209;OPEN (6736)</a></p>
</div>
</section>
<section class="moment">
<div class="wrap narrow">
<h2>The moment your shop is in</h2>
<p>The real work runs on knowledge that lives in one or two heads — the veteran who knows which machine runs hot, how to save a bad batch, what the customer really meant. It's never been written down. And those heads are heading for retirement.</p>
<p>Here's the part nobody likes to say out loud: a business that lives in a few people's heads is worth less the day you go to sell it. Buyers see the risk even when you don't. So do your best customers — the first time a job goes sideways after someone walks out the door.</p>
<p class="pull">This isn't a technology problem. It's a continuity problem — and it's fixable.</p>
</div>
</section>
<section class="principles">
<div class="wrap">
<h2>We work differently</h2>
<p class="section-intro">The default approach — automation for cost reduction, AI as a sales pitch, delivered through tools you'll never own — leaves businesses anxious and people sidelined.</p>
<div class="grid four">
<div class="card">
<h3>People stay essential</h3>
<p>Used well, modern tools make your people more capable, not less needed. We design systems that respect the judgment your team has earned.</p>
</div>
<div class="card">
<h3>Wisdom over speed</h3>
<p>Wisdom is a slower technology than intelligence. We work at the pace good work requires, not the pace the hype cycle demands.</p>
</div>
<div class="card">
<h3>You own everything</h3>
<p>Every tool we build, every system we design — you own it completely. No retainers, no lock&#8209;in, no subscriptions you can't escape.</p>
</div>
<div class="card">
<h3>One person, accountable</h3>
<p>The person you talk to is the person doing the work. No pipelines, no account managers, no chatbots between you and the help you need.</p>
</div>
</div>
</div>
</section>
<section class="services" id="work">
<div class="wrap">
<h2>The work</h2>
<p class="section-intro">It starts with keeping what your best people know — then turning it into tools the whole shop can use. Every engagement begins with understanding your actual problem before suggesting a solution.</p>
<div class="service flagship">
<h3>Wisdom preservation <span class="tag">Knowledge transfer · Succession</span></h3>
<p>Before your best people retire — or before you sell the business — encode the judgment that lives in their heads. The shortcuts. The warnings. The feel for when something's off. The institutional knowledge that exists nowhere else. We document that expertise and build it into tools your team can use long after the experts are gone — decision guides, diagnostic tools, training systems.</p>
<p>The value of a business isn't just its revenue — it's the knowledge that makes the revenue possible. We help you capture that before the transition, so the business retains its value after you step away. <strong>For owners thinking about exit: this work is one of the most direct ways to protect the value of what you've built.</strong></p>
<p class="service-cta"><a href="continuity-audit.html">Start with a Continuity Audit — find out where you're exposed →</a></p>
</div>
<div class="handoff">
<p>The hardest part of capturing what someone knows is getting them to share it — and getting a shop to actually change how it works. That's a people problem, not a paperwork one — and it's exactly what our sister practice, <a href="https://opencommunications.consulting">Open Communications →</a>, is built for.</p>
</div>
<div class="service">
<h3>From static to smart</h3>
<p>Most shops are running on processes built for a world a decade behind. Pricelists in Excel. Catalogues in PDF. Order forms printed and faxed. These tools work — until they don't, and until the person who knows how to use them isn't there. We take what you have and turn it into a searchable, shareable, hosted web tool your team and customers can access from anywhere. The logic stays the same. The friction disappears.</p>
</div>
<div class="service">
<h3>Custom web tools</h3>
<p>Phone&#8209;tag quoting. Email&#8209;chain approvals. Clipboard scheduling. These workflows depend on one person knowing where everything is — and they break the moment that person is unavailable. We replace them with guided online systems that get the right answer without back&#8209;and&#8209;forth. Your customers and partners self&#8209;serve. Your staff focus on work that actually needs them.</p>
</div>
<div class="service">
<h3>Measured AI integration <span class="tag">No hype · No lock&#8209;in</span></h3>
<p>AI is genuinely useful in a narrow set of situations. It's also genuinely overhyped in most others. I'll tell you which is which before we start — and I'll tell you what it can't do, not just what it can. We add AI to your existing tools only where it saves real time, makes real decisions clearer, or protects work your team is already doing well. No proprietary platforms. No black boxes.</p>
</div>
<div class="service">
<h3>Personal AI practice</h3>
<p>Most AI advice is written for people who already understand the tools. This isn't that. A personal session designed around your specific work and what you're trying to do — whether you're a business owner, a professional, or someone who just wants to stop feeling behind. We figure out where AI genuinely helps you, what tools fit how you actually think, and what habits will stick. Includes a 30&#8209;day follow&#8209;up to see what stuck, what didn't, and what to adjust.</p>
</div>
<p class="reassure">All projects include full documentation and a handover session. You will never be dependent on me to keep your tool running.</p>
</div>
</section>
<section class="results" id="results">
<div class="wrap">
<h2>Client results</h2>
<p class="section-intro">Real projects. Real clients. The before and after of replacing manual processes with intelligent web tools.</p>
<div class="case">
<h3>Dealer pricing: from emailed workbook to live catalog</h3>
<p><strong>Before —</strong> dealer pricing lived in a multi&#8209;tab Excel workbook that was emailed to resellers on request. Dealers had to manually calculate their own pricing, and any discount change meant redistributing the file. Staff spent significant time fielding calls from dealers who couldn't find what they needed.</p>
<p><strong>After —</strong> a hosted dealer pricing tool with real&#8209;time discount logic, profile&#8209;based pricing tiers, product filtering, and a built&#8209;in order builder with export and email summary. Dealers access it directly — no file to download, no call required.</p>
<div class="case-shots">
<figure class="case-shot">
<figcaption class="case-shot-label">Before — Excel workbook</figcaption>
<div class="case-shot-frame"><img src="assets/work/ias-before.png" alt="Dealer pricing before: a multi-tab Excel workbook with manual price columns" width="1735" height="808" loading="lazy" decoding="async"></div>
</figure>
<figure class="case-shot">
<figcaption class="case-shot-label">After — Hosted web app</figcaption>
<div class="case-shot-frame"><img src="assets/work/ias-after.png" alt="Dealer pricing after: a filterable product catalog with live discount logic and order export" width="1919" height="953" loading="lazy" decoding="async"></div>
</figure>
</div>
<blockquote>
<p>"We've been imagining something like this for years. Our catalog used to live in a spreadsheet we'd email back and forth — now our dealers can filter products, build orders in their own pricing, and send them through electronically. Mike built exactly what we needed."</p>
<footer class="case-cite">
<span class="case-headshot"><img src="assets/people/fred-hobeyn.webp" alt="Fred Hobeyn" width="160" height="160" loading="lazy" decoding="async"></span>
<span class="case-cite-text"><span class="case-name">Fred Hobeyn</span><span class="case-role">Owner — Innovative Aluminum Systems</span></span>
</footer>
</blockquote>
</div>
<div class="case">
<h3>Order forms: from printed sheet to guided system</h3>
<p><strong>Before —</strong> the customer order form was a printed Excel sheet with basic formulas. Sales reps filled it in manually, calculated totals by hand, and emailed or faxed it in. The process was error&#8209;prone, slow, and entirely dependent on one person knowing where everything was.</p>
<p><strong>After —</strong> a hosted web order form with multiple pricing tiers, a pattern selector with live unit pricing, cut&#8209;length calculators, and a print&#8209;ready summary. Orders are submitted electronically — no phone call, no fax, no manual calculation.</p>
<div class="case-shots">
<figure class="case-shot">
<figcaption class="case-shot-label">Before — Printed Excel sheet</figcaption>
<div class="case-shot-frame"><img src="assets/work/ondek-before.png" alt="Order form before: a printed Excel sheet with manual product and quantity columns" width="895" height="715" loading="lazy" decoding="async"></div>
</figure>
<figure class="case-shot">
<figcaption class="case-shot-label">After — Web order form</figcaption>
<div class="case-shot-frame"><img src="assets/work/ondek-after.png" alt="Order form after: a web-based order form with price tiers, pattern selector, and live totals" width="1546" height="806" loading="lazy" decoding="async"></div>
</figure>
</div>
<blockquote>
<p>"I've been in this industry long enough to be skeptical of tech promises. This wasn't that. Michael took the time to understand our process first, then built something that fits. It's a massive leap forward for us."</p>
<footer class="case-cite">
<span class="case-headshot"><img src="assets/people/jim-szlabon.webp" alt="Jim Szlabon" width="160" height="160" loading="lazy" decoding="async"></span>
<span class="case-cite-text"><span class="case-name">Jim Szlabon</span><span class="case-role">Senior Sales — OnDek Vinyl Worx</span></span>
</footer>
</blockquote>
</div>
<p class="reassure">Have a spreadsheet or process that needs the same treatment? <a href="#contact">Start with a conversation.</a></p>
</div>
</section>
<section class="process" id="process">
<div class="wrap narrow">
<h2>How it works</h2>
<p class="section-intro">Every step explained. Every decision yours to approve. No black boxes, no surprises — a transparent process from first call to final handoff.</p>
<ol class="steps">
<li>
<h3>A free fit call</h3>
<p>A short conversation to see if there's a match. You describe what's slowing you down. I give you an honest read on whether I can help. No pitch, no obligation. If it's not the right match, I'll tell you honestly and point you somewhere that can help.</p>
</li>
<li>
<h3>A paid discovery session</h3>
<p>If there's a fit, a focused 90&#8209;minute working meeting where we map the real problem, identify what's worth solving first, and outline what a solution would look like. You leave with a written recommendation, whether or not we work together further.</p>
</li>
<li>
<h3>A fixed&#8209;scope proposal</h3>
<p>You know exactly what gets built, what it costs, and what you own at the end — before any work begins. The proposal is written in plain language, not technical jargon. Scope changes are a conversation, not a surprise invoice.</p>
</li>
<li>
<h3>A deliverable you own</h3>
<p>The work moves in iterative cycles with regular review meetings. At the end: hosted, documented, and yours. Full documentation and a walkthrough session. Update it, share it, use it — without ever calling me again. Unless you want to. Ongoing support is available, but never required.</p>
</li>
</ol>
</div>
</section>
<section class="about" id="about">
<div class="wrap narrow">
<h2>About</h2>
<p class="about-name">Michael Victory — Principal, Shop Wisdom</p>
<p>I've spent 25 years inside small and mid&#8209;sized businesses, including 13 years building long&#8209;term partnerships across a dealer network, and the last several years training non&#8209;technical people to use modern tools well. I know what it looks like when good people are slowed down by tools that were never built for how they actually work — and what it costs a shop when the person who knew how everything worked finally retires.</p>
<p>I started this practice because I kept seeing the same gap: the distance between what a business needs and what technology vendors were willing to build honestly and affordably. Most consultants either over&#8209;engineer the solution or under&#8209;explain the cost. I've been on the receiving end of both.</p>
<p>I use modern tools — including AI — to build faster and at lower cost than traditional development. I'll always tell you how something was built and what it can't do. No mystification, no inflated promises. And I'll tell you if you don't need me. That conversation costs nothing and saves everyone time.</p>
</div>
</section>
<section class="fit" id="fit">
<div class="wrap narrow">
<h2>Honest about fit</h2>
<p class="section-intro">Shop Wisdom isn't for everyone. We're probably not the right fit for:</p>
<ul class="notfor">
<li><strong>Businesses looking to cut headcount through automation.</strong> AI used to make people redundant isn't what we do.</li>
<li><strong>Anyone who wants a vendor forever.</strong> If you want to pay someone monthly to keep your system running, there are plenty of SaaS products. We're not one of them.</li>
<li><strong>Anyone looking for a Super Bowl AI strategy.</strong> No hype, no transformation slides, no buzzwords. Just specific work with measurable outcomes.</li>
<li><strong>Businesses where the people problems run deeper than systems.</strong> Tools amplify what's already there. If trust is missing, software won't fix it — though that's exactly the kind of work our sister practice, <a href="https://opencommunications.consulting">Open Communications</a>, takes on.</li>
</ul>
<p>If any of that describes you, we're probably not the right fit — and being honest now saves us both time.</p>
</div>
</section>
<section class="contact" id="contact">
<div class="wrap narrow">
<h2>Start with a conversation</h2>
<p>No pitch. No proposal until we've had a real conversation. Describe the friction — even roughly. The more context you share, the more useful our first conversation will be.</p>
<p>I read every message personally and usually reply within one business day. If your problem isn't something I can help with, I'll tell you honestly — and point you somewhere that can.</p>
<form class="lf" data-endpoint="https://n8n.shopwisdom.ca/webhook/lead" data-source="shopwisdom" novalidate>
<div class="lf-progress" aria-hidden="true"><span class="lf-dot is-active"></span><span class="lf-dot"></span><span class="lf-dot"></span></div>
<fieldset class="lf-step is-active" data-step="1">
<legend class="lf-q">What's the situation in your shop?</legend>
<div class="lf-choices">
<label class="lf-choice"><input type="radio" name="topic" value="A key person is retiring soon" required> A key person is retiring soon</label>
<label class="lf-choice"><input type="radio" name="topic" value="Know-how lives in a few heads"> Know-how lives in just a few heads</label>
<label class="lf-choice"><input type="radio" name="topic" value="A process or tool needs building"> A process or tool needs building</label>
<label class="lf-choice"><input type="radio" name="topic" value="Just exploring"> Just exploring for now</label>
</div>
<div class="lf-nav"><button type="button" class="btn lf-next" data-next>Continue →</button></div>
</fieldset>
<fieldset class="lf-step" data-step="2">
<legend class="lf-q">Anything you want me to know? <span class="lf-opt">(optional)</span></legend>
<textarea class="lf-input" name="detail" rows="3" placeholder="Even a rough sentence helps."></textarea>
<div class="lf-nav"><button type="button" class="btn ghost lf-back" data-back>← Back</button><button type="button" class="btn lf-next" data-next>Continue →</button></div>
</fieldset>
<fieldset class="lf-step" data-step="3">
<legend class="lf-q">Where do I reach you?</legend>
<input class="lf-input" type="text" name="name" placeholder="Your name" required autocomplete="name">
<input class="lf-input" type="email" name="email" placeholder="Email" required autocomplete="email">
<input class="lf-input" type="tel" name="phone" placeholder="Phone (optional)" autocomplete="tel">
<input type="text" name="company_website" class="lf-hp" tabindex="-1" autocomplete="off" aria-hidden="true">
<div class="lf-nav"><button type="button" class="btn ghost lf-back" data-back>← Back</button><button type="submit" class="btn lf-submit">Send it →</button></div>
<p class="lf-err" hidden>Hmm — that didn't go through. Please <a href="mailto:michael@opencommunications.consulting">email me directly</a> and I'll get right back to you.</p>
</fieldset>
<div class="lf-done" hidden><p class="lf-done-msg">Got it — thanks. I read every message personally and usually reply within a business day.</p></div>
</form>
<p class="lf-alt">Prefer to reach out directly?</p>
<p class="contact-action">
<a class="btn" href="mailto:michael@opencommunications.consulting?subject=Fit%20call%20—%20Shop%20Wisdom">Email Michael</a>
<a class="btn ghost tel" data-p1="778" data-p2="985" data-p3="6736" href="mailto:michael@opencommunications.consulting">Call 778&#8209;985&#8209;OPEN (6736)</a>
</p>
<p class="contact-promise">The first call is free and commits you to nothing.</p>
</div>
</section>
</main>
<footer class="site-footer">
<div class="wrap">
<p class="footer-brand">Shop<span>Wisdom</span></p>
<p>Built with care and AI · Work owned by its clients</p>
<p>Hosted in Beauharnois, Québec — your data stays in Canada.</p>
<p class="footer-call"><a class="tel" data-p1="778" data-p2="985" data-p3="6736" href="mailto:michael@opencommunications.consulting">778&#8209;985&#8209;OPEN (6736)</a></p>
<p class="footer-legal">Shop Wisdom and Open Communications are practices of Open Communications, owned and operated by Michael Victory · British Columbia, Canada</p>
</div>
</footer>
<script>
(function () {
var links = document.querySelectorAll('a.tel');
for (var i = 0; i < links.length; i++) {
var el = links[i];
el.setAttribute('href', 'tel:+1' + el.dataset.p1 + el.dataset.p2 + el.dataset.p3);
}
var toggle = document.getElementById('navToggle');
var menu = document.getElementById('navMobileMenu');
function closeMenu() {
menu.classList.remove('open');
toggle.classList.remove('open');
toggle.setAttribute('aria-label', 'Open menu');
toggle.setAttribute('aria-expanded', 'false');
}
if (toggle && menu) {
toggle.addEventListener('click', function () {
var open = !menu.classList.contains('open');
menu.classList.toggle('open', open);
toggle.classList.toggle('open', open);
toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
});
var mlinks = menu.querySelectorAll('a');
for (var j = 0; j < mlinks.length; j++) { mlinks[j].addEventListener('click', closeMenu); }
}
})();
</script>
<!-- Lead form: 3-step navigation + submit to the n8n webhook (honeypot-protected) -->
<script>
(function () {
document.querySelectorAll('form.lf').forEach(function (form) {
var steps = [].slice.call(form.querySelectorAll('.lf-step'));
var dots = [].slice.call(form.querySelectorAll('.lf-dot'));
var done = form.querySelector('.lf-done');
var err = form.querySelector('.lf-err');
var progress = form.querySelector('.lf-progress');
var cur = 0;
function show(i) {
steps.forEach(function (s, k) { s.classList.toggle('is-active', k === i); });
dots.forEach(function (d, k) { d.classList.toggle('is-active', k <= i); });
cur = i;
var fld = steps[i].querySelector('input:not([type=radio]),textarea'); if (fld) { try { fld.focus(); } catch (e) {} }
}
function valid(i) {
var reqs = steps[i].querySelectorAll('[required]');
for (var j = 0; j < reqs.length; j++) { if (!reqs[j].checkValidity()) { reqs[j].reportValidity(); return false; } }
return true;
}
form.addEventListener('click', function (e) {
if (e.target.closest('[data-next]')) { if (valid(cur)) show(Math.min(cur + 1, steps.length - 1)); }
else if (e.target.closest('[data-back]')) { show(Math.max(cur - 1, 0)); }
});
form.addEventListener('submit', function (e) {
e.preventDefault();
if (!valid(cur)) return;
var hp = form.querySelector('.lf-hp');
if (hp && hp.value) { return; }
if (err) err.hidden = true;
var data = {};
new FormData(form).forEach(function (v, k) { if (k !== 'company_website') data[k] = v; });
data.source = form.getAttribute('data-source') || location.hostname;
data.submittedAt = new Date().toISOString();
var btn = form.querySelector('.lf-submit'); var label = btn.textContent;
btn.disabled = true; btn.textContent = 'Sending…';
fetch(form.getAttribute('data-endpoint'), {
method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data)
}).then(function (r) {
if (!r.ok) throw new Error('status ' + r.status);
steps.forEach(function (s) { s.style.display = 'none'; });
if (progress) progress.style.display = 'none';
if (done) done.hidden = false;
}).catch(function () {
btn.disabled = false; btn.textContent = label;
if (err) err.hidden = false;
});
});
});
})();
</script>
<!-- Cal.com booking embed (opens the booking popup on-brand; href is the no-JS fallback) -->
<script>
(function (C, A, L) { let p = function (a, ar) { a.q.push(ar); }; let d = C.document; C.Cal = C.Cal || function () { let cal = C.Cal; let ar = arguments; if (!cal.loaded) { cal.ns = {}; cal.q = cal.q || []; d.head.appendChild(d.createElement("script")).src = A; cal.loaded = true; } if (ar[0] === L) { const api = function () { p(api, arguments); }; const namespace = ar[1]; api.q = api.q || []; if (typeof namespace === "string") { cal.ns[namespace] = cal.ns[namespace] || api; p(cal.ns[namespace], ar); p(cal, ["initNamespace", namespace]); } else p(cal, ar); return; } p(cal, ar); }; })(window, "https://cal.shopwisdom.ca/embed/embed.js", "init");
Cal("init", { origin: "https://cal.shopwisdom.ca" });
</script>
</body>
</html>