259ecf28fd
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
414 lines
29 KiB
HTML
414 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">
|
|
<meta name="theme-color" content="#f5f2ec">
|
|
<title>Open Communications | The Human Side of Change — for Canadian Manufacturers</title>
|
|
<meta name="description" content="The systems are the easy part. Open Communications helps the people in your shop trust the change, share what they know, and lead through it — so the work actually sticks. The human side of ShopWisdom.">
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Lora:ital,wght@0,400;0,500;1,400&family=Playfair+Display:ital,wght@0,400;0,700;1,400&display=swap">
|
|
<link rel="stylesheet" href="style.css">
|
|
<meta name="robots" content="index,follow">
|
|
<link rel="canonical" href="https://www.opencommunications.consulting/">
|
|
<link rel="icon" href="favicon.svg" type="image/svg+xml">
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:site_name" content="Open Communications">
|
|
<meta property="og:title" content="Open Communications — the human side of change">
|
|
<meta property="og:description" content="The human side of change for Canadian manufacturers. We help your people trust the change, share what they know, and lead through it — so the work actually sticks.">
|
|
<meta property="og:url" content="https://www.opencommunications.consulting/">
|
|
<meta property="og:locale" content="en_CA">
|
|
<meta property="og:image" content="https://www.opencommunications.consulting/assets/og-card.png">
|
|
<meta property="og:image:width" content="1200">
|
|
<meta property="og:image:height" content="630">
|
|
<meta property="og:image:alt" content="Open Communications — the systems are the easy part. The human side of change.">
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:title" content="Open Communications — the human side of change">
|
|
<meta name="twitter:description" content="The human side of change for Canadian manufacturers. The people side of ShopWisdom.">
|
|
<meta name="twitter:image" content="https://www.opencommunications.consulting/assets/og-card.png">
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "ProfessionalService",
|
|
"name": "Open Communications",
|
|
"url": "https://www.opencommunications.consulting/",
|
|
"logo": "https://www.opencommunications.consulting/assets/brand/oc-logo.svg",
|
|
"description": "Change management and leadership coaching for Canadian manufacturers — the human side of organizational change. The people side of ShopWisdom.",
|
|
"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://shopwisdom.ca"],
|
|
"knowsAbout": ["change management", "leadership coaching", "organizational change", "manufacturing succession", "knowledge transfer"]
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
|
|
<header class="nav" id="nav">
|
|
<a class="nav-logo" href="#top" aria-label="Open Communications — home">
|
|
<img class="nav-logo-img" src="assets/brand/oc-logo.svg" alt="Open Communications">
|
|
</a>
|
|
<nav class="nav-links-desktop" aria-label="Main">
|
|
<a href="#problem">The problem</a>
|
|
<a href="#work">How we work</a>
|
|
<a href="#who">Who we are</a>
|
|
<a class="nav-cta" href="https://cal.shopwisdom.ca/michaelvictory/20min-opencommunications-meeting" data-cal-link="michaelvictory/20min-opencommunications-meeting" data-cal-origin="https://cal.shopwisdom.ca" data-cal-config='{"theme":"light"}'>Book a conversation</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"/>
|
|
<circle class="o-ring" cx="16" cy="16" r="9"/>
|
|
</svg>
|
|
</button>
|
|
</header>
|
|
<div class="nav-mobile-menu" id="navMobileMenu">
|
|
<a href="#problem">The problem</a>
|
|
<a href="#work">How we work</a>
|
|
<a href="#who">Who we are</a>
|
|
<a class="nav-cta" href="https://cal.shopwisdom.ca/michaelvictory/20min-opencommunications-meeting" data-cal-link="michaelvictory/20min-opencommunications-meeting" data-cal-origin="https://cal.shopwisdom.ca" data-cal-config='{"theme":"light"}'>Book a conversation</a>
|
|
</div>
|
|
|
|
<main id="top">
|
|
|
|
<section class="hero" data-bg="light">
|
|
<div class="wrap"><div class="hero-col">
|
|
<p class="eyebrow">The human side of change · for Canadian manufacturers</p>
|
|
<h1>The systems are the <em>easy part.</em></h1>
|
|
<p class="lead">Getting your people to trust the change, share what they know, and lead through it — that's what decides whether any of it sticks. That's our work.</p>
|
|
<div class="actions">
|
|
<a class="btn" href="https://cal.shopwisdom.ca/michaelvictory/20min-opencommunications-meeting" data-cal-link="michaelvictory/20min-opencommunications-meeting" data-cal-origin="https://cal.shopwisdom.ca" data-cal-config='{"theme":"light"}'>Book a conversation</a>
|
|
<a class="btn link" href="#work">See how we work</a>
|
|
</div>
|
|
<p class="call">or call <a class="tel" data-p1="778" data-p2="985" data-p3="6736" href="#contact">778‑985‑OPEN (6736)</a></p>
|
|
</div></div>
|
|
</section>
|
|
|
|
<section class="band dark statement" data-bg="dark" id="problem">
|
|
<div class="motif" aria-hidden="true"></div>
|
|
<div class="wrap narrow">
|
|
<p class="eyebrow">The part most consultants skip</p>
|
|
<h2 class="statement-line">You can buy the software. You can write the procedures. And still watch the whole thing <em>quietly fall apart.</em></h2>
|
|
<p>Because the new way asks people to change — and people don't resist change to be difficult. They resist it because it threatens something: their standing, their habits, the thing that's made them the one everyone relies on. The veteran who won't quite share what he knows. The supervisor who nods in the meeting and does it the old way Monday morning. The blame that starts flying the first time something goes wrong.</p>
|
|
<p class="emph">None of that is a character flaw. It's how people work — and it's the part that decides whether your investment pays off or sits on a shelf.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light" data-bg="light">
|
|
<div class="wrap narrow">
|
|
<p class="eyebrow">One business, two sides</p>
|
|
<h2>The human side of <em>ShopWisdom.</em></h2>
|
|
<p>Open Communications is the human side of <strong>ShopWisdom</strong>. ShopWisdom builds the systems that keep a shop running when your best people leave. We make sure the people actually use them — and come through the change stronger, not fractured.</p>
|
|
<p>Same business. Same straight talk. One side works on the shop; the other works with the crew.</p>
|
|
<p class="bridge-link"><a href="https://shopwisdom.ca">See the systems side — ShopWisdom →</a></p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light services" data-bg="light" id="work">
|
|
<div class="wrap">
|
|
<p class="eyebrow">How we work</p>
|
|
<h2>Clear models, <em>not vague advice.</em></h2>
|
|
<p class="section-intro">The kind you can use in a hallway conversation, not just a workshop.</p>
|
|
<div class="cards">
|
|
<article class="card">
|
|
<p class="card-tag">A shared lens</p>
|
|
<h3>A shared language</h3>
|
|
<p>In any tense moment, you're either <strong>above the line</strong> — open, curious, willing to learn — or <strong>below it</strong> — closed, defensive, out to be right. Once a team can name where they are, the hard conversations get easier overnight.</p>
|
|
<p class="outcome">A shared, plain-spoken way to handle friction.</p>
|
|
</article>
|
|
<article class="card feature">
|
|
<p class="card-tag">The core shift</p>
|
|
<h3>Breaking the blame game</h3>
|
|
<p>Every shop runs the drama triangle: someone stuck as the <strong>victim</strong>, someone <strong>persecuting</strong> and blaming, someone <strong>rescuing</strong> and burning out. It kills change. We move people into the empowered version — a <strong>creator</strong> who owns the outcome, a <strong>challenger</strong> who calls it straight, a <strong>coach</strong> who builds others up.</p>
|
|
<p class="outcome">Stop the blame cycles that stall every change.</p>
|
|
</article>
|
|
<article class="card">
|
|
<p class="card-tag">Coaching · succession</p>
|
|
<h3>The people at the center</h3>
|
|
<p>One-to-one coaching for the people carrying the weight: the owner planning his exit, the successor stepping into big shoes, the veteran working out what it means to let go. Booked in single sessions, around your calendar.</p>
|
|
<p class="outcome">The people at the center don't crack under it.</p>
|
|
</article>
|
|
</div>
|
|
<p class="reassure">Every engagement is built around coordinated hours — never a stretch of days that swallows your week.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light diagram" data-bg="light">
|
|
<div class="wrap">
|
|
<p class="eyebrow">Where it starts</p>
|
|
<h2>Above the line, or <em>below it?</em></h2>
|
|
<p class="section-intro">Every hard conversation starts here. In any tense moment you're either open and curious — or closed and out to be right. Naming where you're standing is half the work.</p>
|
|
<svg class="line-graphic" viewBox="0 0 720 360" role="img" aria-labelledby="line-title line-desc">
|
|
<title id="line-title">Above and below the line</title>
|
|
<desc id="line-desc">A horizontal line divides two states. Above the line: open, curious, willing to learn — a “by me” stance. Below the line: closed, defensive, out to be right — a “to me” stance.</desc>
|
|
<rect x="0" y="0" width="720" height="180" fill="rgba(232,155,28,0.05)"/>
|
|
<rect x="0" y="180" width="720" height="180" fill="rgba(15,23,41,0.04)"/>
|
|
<path d="M345,52 L360,38 L375,52" fill="none" stroke="#c47f12" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
<text x="360" y="92" text-anchor="middle" font-family="'DM Sans',sans-serif" font-size="19" font-weight="700" letter-spacing="2" fill="#c47f12">ABOVE THE LINE</text>
|
|
<text x="360" y="119" text-anchor="middle" font-family="'Lora',Georgia,serif" font-size="15" fill="#4a5468">Open · curious · willing to learn</text>
|
|
<text x="360" y="143" text-anchor="middle" font-family="'DM Sans',sans-serif" font-size="12.5" font-style="italic" fill="#9a8048">“by me” — I can shape what happens here</text>
|
|
<line x1="48" y1="180" x2="672" y2="180" stroke="#0f1729" stroke-width="2"/>
|
|
<rect x="316" y="168" width="88" height="24" fill="#f7f4ef"/>
|
|
<text x="360" y="184" text-anchor="middle" font-family="'DM Sans',sans-serif" font-size="11" letter-spacing="3" fill="#0f1729">THE LINE</text>
|
|
<text x="360" y="246" text-anchor="middle" font-family="'DM Sans',sans-serif" font-size="19" font-weight="700" letter-spacing="2" fill="#5b626d">BELOW THE LINE</text>
|
|
<text x="360" y="273" text-anchor="middle" font-family="'Lora',Georgia,serif" font-size="15" fill="#4a5468">Closed · defensive · out to be right</text>
|
|
<text x="360" y="297" text-anchor="middle" font-family="'DM Sans',sans-serif" font-size="12.5" font-style="italic" fill="#6b7280">“to me” — this is happening to me</text>
|
|
<path d="M345,322 L360,336 L375,322" fill="none" stroke="#5b626d" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
</svg>
|
|
<p class="diagram-credit">The “above / below the line” model is from The Conscious Leadership Group — Jim Dethmer, Diana Chapman & Kaley Warner Klemp, <em>The 15 Commitments of Conscious Leadership</em> (2014).</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light diagram" data-bg="light">
|
|
<div class="wrap">
|
|
<p class="eyebrow">The pattern underneath</p>
|
|
<h2>From drama to <em>empowerment.</em></h2>
|
|
<p class="section-intro">Not a workshop you sit through — a lens for what's happening in the room. Under pressure, people fall into three roles that stall change. The work is moving them into the three that carry it.</p>
|
|
<svg class="triangles" viewBox="0 0 760 330" role="img" aria-labelledby="tri-title tri-desc">
|
|
<title id="tri-title">From the drama triangle to the empowerment dynamic</title>
|
|
<desc id="tri-desc">Two separate triangles. On the left the drama triangle points down: Persecutor and Rescuer at the top corners, Victim at the bottom point. On the right the empowerment dynamic points up: Creator at the top point, Challenger and Coach at the bottom corners. An arrow between them marks the shift: Victim becomes Creator, Persecutor becomes Challenger, Rescuer becomes Coach.</desc>
|
|
<text x="220" y="40" text-anchor="middle" font-family="'DM Sans',sans-serif" font-size="12" font-weight="700" letter-spacing="2" fill="#5b626d">THE DRAMA TRIANGLE</text>
|
|
<text x="540" y="40" text-anchor="middle" font-family="'DM Sans',sans-serif" font-size="12" font-weight="700" letter-spacing="2" fill="#c47f12">THE EMPOWERMENT DYNAMIC</text>
|
|
<polygon points="140,105 300,105 220,270" fill="rgba(107,114,128,0.16)" stroke="#6b7280" stroke-width="1.5"/>
|
|
<g fill="#6b7280"><circle cx="140" cy="105" r="4"/><circle cx="300" cy="105" r="4"/><circle cx="220" cy="270" r="4"/></g>
|
|
<polygon points="540,105 460,270 620,270" fill="rgba(232,155,28,0.18)" stroke="#c47f12" stroke-width="1.5"/>
|
|
<g fill="#c47f12"><circle cx="540" cy="105" r="4"/><circle cx="460" cy="270" r="4"/><circle cx="620" cy="270" r="4"/></g>
|
|
<g stroke="#0f1729" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
<line x1="332" y1="188" x2="424" y2="188"/>
|
|
<path d="M414,180 L426,188 L414,196"/>
|
|
</g>
|
|
<text x="378" y="171" text-anchor="middle" font-family="'DM Sans',sans-serif" font-size="10.5" font-weight="700" letter-spacing="2" fill="#c47f12">THE SHIFT</text>
|
|
<g font-family="'DM Sans',sans-serif">
|
|
<text x="140" y="84" text-anchor="middle" fill="#4a5468" font-size="13" font-weight="700" letter-spacing="0.5">PERSECUTOR</text>
|
|
<text x="140" y="98" text-anchor="middle" fill="#6b7280" font-size="10.5">blaming · “I'm right”</text>
|
|
<text x="300" y="84" text-anchor="middle" fill="#4a5468" font-size="13" font-weight="700" letter-spacing="0.5">RESCUER</text>
|
|
<text x="300" y="98" text-anchor="middle" fill="#6b7280" font-size="10.5">rescuing · “I'm good”</text>
|
|
<text x="220" y="292" text-anchor="middle" fill="#4a5468" font-size="13" font-weight="700" letter-spacing="0.5">VICTIM</text>
|
|
<text x="220" y="306" text-anchor="middle" fill="#6b7280" font-size="10.5">powerless · “I'm blameless”</text>
|
|
<text x="540" y="84" text-anchor="middle" fill="#c47f12" font-size="13" font-weight="700" letter-spacing="0.5">CREATOR</text>
|
|
<text x="540" y="98" text-anchor="middle" fill="#6b7280" font-size="10.5">responsible · visionary</text>
|
|
<text x="460" y="292" text-anchor="middle" fill="#c47f12" font-size="13" font-weight="700" letter-spacing="0.5">CHALLENGER</text>
|
|
<text x="460" y="306" text-anchor="middle" fill="#6b7280" font-size="10.5">accountable · assertive</text>
|
|
<text x="620" y="292" text-anchor="middle" fill="#c47f12" font-size="13" font-weight="700" letter-spacing="0.5">COACH</text>
|
|
<text x="620" y="306" text-anchor="middle" fill="#6b7280" font-size="10.5">supportive · encouraging</text>
|
|
</g>
|
|
</svg>
|
|
<ul class="shift-legend" aria-label="How each role shifts">
|
|
<li><span class="from">Victim</span> <span class="arr">→</span> <span class="to">Creator</span></li>
|
|
<li><span class="from">Persecutor</span> <span class="arr">→</span> <span class="to">Challenger</span></li>
|
|
<li><span class="from">Rescuer</span> <span class="arr">→</span> <span class="to">Coach</span></li>
|
|
</ul>
|
|
<p class="diagram-credit">The Drama Triangle is the work of Dr. Stephen Karpman (1968). The Empowerment Dynamic (TED*) is the work of David Emerald.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light who" data-bg="light" id="who">
|
|
<div class="wrap narrow">
|
|
<p class="eyebrow">Who we are</p>
|
|
<h2>Rigor <em>and soul.</em></h2>
|
|
<p class="section-intro">Our change practice is led by Michael Victory, with Inga Michaelsen as co-facilitator.</p>
|
|
<div class="people">
|
|
<div class="person">
|
|
<p class="person-name">Michael Victory</p>
|
|
<p>Michael carries the through-line across both sides of the business — he knows the shop and the crew, and brings the same rigor to people that ShopWisdom brings to systems.</p>
|
|
</div>
|
|
<div class="person">
|
|
<p class="person-name">Inga Michaelsen</p>
|
|
<p>A Professional Certified Coach (PCC) and Team Coach (ACTC) with the International Coaching Federation, Inga designs experiential leadership work at Royal Roads University. Her depth in trauma-informed, systems-aware coaching is the backbone of how we work.</p>
|
|
<p><a href="https://www.ingamichaelsen.com/">More about Inga →</a></p>
|
|
</div>
|
|
</div>
|
|
<blockquote class="creed">The rigor to build something that works. The soul to make people actually want to use it.</blockquote>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light contact" data-bg="light" id="contact">
|
|
<div class="wrap narrow">
|
|
<p class="eyebrow">Start a conversation</p>
|
|
<h2>The people part doesn't have to be <em>a mystery.</em></h2>
|
|
<p>No pitch, no program to sign up for. Just a straight talk about what's getting in the way and whether we can help.</p>
|
|
|
|
<form class="lf" data-endpoint="https://n8n.shopwisdom.ca/webhook/lead" data-source="open-communications" 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 getting in the way?</legend>
|
|
<div class="lf-choices">
|
|
<label class="lf-choice"><input type="radio" name="topic" value="A change isn't sticking" required> A change that won't stick</label>
|
|
<label class="lf-choice"><input type="radio" name="topic" value="Team friction or resistance"> Team friction or resistance</label>
|
|
<label class="lf-choice"><input type="radio" name="topic" value="Succession or leadership transition"> Succession / a leadership handoff</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="A sentence or two is plenty."></textarea>
|
|
<div class="lf-nav"><button type="button" class="btn link 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 link 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 — thank you. I'll be in touch personally, usually within a business day.</p></div>
|
|
</form>
|
|
|
|
<p class="lf-alt">Prefer to reach out directly?</p>
|
|
<p class="actions center">
|
|
<a class="btn link" href="mailto:michael@opencommunications.consulting?subject=A%20conversation%20—%20Open%20Communications">Email Michael</a>
|
|
<a class="btn link tel" data-p1="778" data-p2="985" data-p3="6736" href="mailto:michael@opencommunications.consulting">Call 778‑985‑OPEN (6736)</a>
|
|
</p>
|
|
<p class="promise">The first conversation is free and commits you to nothing.</p>
|
|
</div>
|
|
</section>
|
|
|
|
</main>
|
|
|
|
<footer class="site-footer" data-bg="dark">
|
|
<div class="footer-bg" aria-hidden="true">
|
|
<svg class="footer-bg-img" viewBox="0 0 1267.11 316.97" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
<path d="M792.41,174.06c-8.6,0-15.57-6.97-15.57-15.57s6.97-15.57,15.57-15.57h157.73C942.31,62.69,874.69,0,792.42,0c-87.53,0-158.48,70.96-158.48,158.48s70.96,158.48,158.48,158.48c82.27,0,149.9-62.69,157.72-142.91h-157.73Z"/>
|
|
<path d="M1108.62.38c-.54,0-1.08.02-1.61.02v-.02s-156.87,0-156.87,0v158.1h0c0,.13,0,.25,0,.38,0,82.27,62.69,149.9,142.91,157.72v-157.73c0-8.6,6.97-15.57,15.57-15.57s15.57,6.97,15.57,15.57v157.73c80.22-7.83,142.91-75.45,142.91-157.72,0-87.53-70.96-158.48-158.48-158.48Z"/>
|
|
<path d="M158.48,0C70.96,0,0,70.96,0,158.48s70.96,158.48,158.48,158.48,158.48-70.96,158.48-158.48S246.01,0,158.48,0ZM162.61,209.89c-28.39,0-51.41-23.02-51.41-51.41s23.02-51.41,51.41-51.41,51.41,23.02,51.41,51.41-23.02,51.41-51.41,51.41Z"/>
|
|
<path d="M475.45,0C387.92,0,316.97,70.96,316.97,158.48v158.48h110.07v-158.86c0-28.39,23.02-51.41,51.41-51.41s51.41,23.02,51.41,51.41-23.02,51.41-51.41,51.41h-20.26v107.46h17.26c87.53,0,158.48-70.96,158.48-158.48S562.98,0,475.45,0Z"/>
|
|
</svg>
|
|
</div>
|
|
<div class="footer-content">
|
|
<div class="footer-block">
|
|
<div class="footer-logo"><img class="footer-logo-img" src="assets/brand/oc-logo-wh.svg" alt="Open Communications"></div>
|
|
<nav class="footer-links" aria-label="Footer">
|
|
<a href="#problem">The problem</a>
|
|
<a href="#work">How we work</a>
|
|
<a href="#who">Who we are</a>
|
|
<a href="https://shopwisdom.ca">ShopWisdom</a>
|
|
</nav>
|
|
<p class="footer-copy">Open Communications and ShopWisdom are practices of Open Communications, owned and operated by Michael Victory · British Columbia, Canada</p>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
<script>
|
|
(function () {
|
|
for (var l of document.querySelectorAll('a.tel')) {
|
|
l.setAttribute('href', 'tel:+1' + l.dataset.p1 + l.dataset.p2 + l.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');
|
|
updateNavTheme();
|
|
});
|
|
for (var a of menu.querySelectorAll('a')) { a.addEventListener('click', closeMenu); }
|
|
}
|
|
var nav = document.getElementById('nav');
|
|
var sections = Array.prototype.slice.call(document.querySelectorAll('[data-bg]'));
|
|
function darkBehind(y) {
|
|
for (var i = 0; i < sections.length; i++) {
|
|
var r = sections[i].getBoundingClientRect();
|
|
if (r.top <= y && r.bottom > y) return sections[i].dataset.bg === 'dark';
|
|
}
|
|
return false;
|
|
}
|
|
function updateNavTheme() {
|
|
var nr = nav.getBoundingClientRect();
|
|
nav.classList.toggle('on-dark', darkBehind((nr.top + nr.bottom) / 2));
|
|
if (menu && menu.classList.contains('open')) {
|
|
// Flip the menu when the dark boundary reaches its TEXT — the lowest link's
|
|
// leading edge — not the panel's midpoint. The links are top-anchored, so the
|
|
// midpoint sits well below them: by the time dark reached it, the text had
|
|
// already been over dark. Probing the lowest link makes the switch land as the
|
|
// boundary enters the text, just like the (thin) nav bar flips at its content.
|
|
var links = menu.querySelectorAll('a');
|
|
var probe = links.length
|
|
? links[links.length - 1].getBoundingClientRect().bottom
|
|
: (function () { var mr = menu.getBoundingClientRect(); return (mr.top + mr.bottom) / 2; })();
|
|
menu.classList.toggle('on-dark', darkBehind(probe));
|
|
}
|
|
}
|
|
updateNavTheme();
|
|
window.addEventListener('scroll', function () { window.requestAnimationFrame(updateNavTheme); }, { passive: true });
|
|
window.addEventListener('resize', updateNavTheme);
|
|
})();
|
|
</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>
|