EMAK Theme System

Style guide

Composable utility classes built on the --kb-* token layer. Every page should consume from this system rather than re-declaring properties.

Foundations

Tokens that everything else is built on. Change a value here and the whole site shifts.

Color tokens

Brand
--kb-color-brand
Brand hover
--kb-color-brand-hover
Brand warm
--kb-color-brand-warm
Brand border
--kb-color-brand-border
Text
--kb-color-text
Text muted
--kb-color-text-muted
Text subtle
--kb-color-text-subtle
Text faint
--kb-color-text-faint
Page bg
--kb-color-page-bg
Page frame
--kb-color-page-frame
Card bg
--kb-color-card-bg
Card border
--kb-color-card-border
Border
--kb-color-border
Border soft
--kb-color-border-soft
Border strong
--kb-color-border-strong
Surface muted
--kb-color-surface-muted

Radii

--kb-radius-xs
4px
--kb-radius-sm
6px
--kb-radius-md
7px
--kb-radius-lg
8px
--kb-radius-xl
10px
--kb-radius-2xl
12px
--kb-radius-3xl
16px — cards / callouts
--kb-radius-full
999px — pills / avatars

Typography

Display sizes for heroes, headings for sections and cards, body scale for everything else. Quo-baselined: medium weight, tight line-height, negative letter-spacing.

.t-display-xl
Send every call to the right person.
.t-display-lg
Don't send customers in circles.
.t-display-md
Stop losing prospects to "let me transfer…"
.t-h-section
Powerful routing, made simple.
.t-h-card
Connect faster
.t-body-lg
Smart call routing eliminates phone tag and cold transfers.
.t-body
A drag-and-drop call flow builder lets you create sophisticated routing rules.
.t-body-sm
Cloud PBX with unlimited Canada/US calling, mobile app, and 40+ features.
.t-eyebrow
Popular features
.t-eyebrow.t-eyebrow--brand
Phone menus & routing
.t-meta
Updated 5 minutes ago

Buttons

.bp-btn + modifier (--primary, --ghost, --secondary, --dark) + optional size (--lg).

Variants

States

Default
Hover
Focus
Active
Disabled
Primary.bp-btn--primary
Ghost.bp-btn--ghost
Dark.bp-btn--dark

Chips / pills

.bp-chip + modifier (--brand, --ghost, --soon). Used as category tags, feature labels, status indicators.

Phone menus & routing Call flow builder Coming soon

Cards

Base .bp-card for plain blocks. .bp-card--feature adds a mocked-product top area for marketing-page feature spotlights.

Basic — .bp-card

Connect faster

Multi-level smart menus get callers to the right destination without sitting through ten options first.

Route calls anywhere

Drag-and-drop builder. Hours, holidays, overflow — all visual, no scripts.

Always have an answer

Hand off to your AI agent for messages, lead qualification, and FAQs.

Feature variant with tone palette — .bp-card--feature + .bp-card-mock--{tone}

Eight tones for the mock area. Every demo shows realistic content so you can see how each tone reads under actual UI. Grid auto-wraps below 240px to protect the mock UI from getting squeezed.

Call received
Press 1
Sales team
Ring 3 agents · 20s

Orange

.bp-card-mock--orange

Today Live
247 calls +12%
94% answered 31s avg

Green

.bp-card-mock--green

Ring group 0:12
AS
Amy
No answer
FJ
Farid
Ringing
DK
David
Answered ✓

Blue

.bp-card-mock--blue

✦ Kori 2 min ago
+1 (438) 555-0124
Asked about pricing for a 6-line plan
Qualified · sent to HubSpot

Purple

.bp-card-mock--purple

3 missed today
Joe Smith 5:42 PM
Anna Lee 4:18 PM
Mark Brown 2:07 PM

Amber

.bp-card-mock--amber

Incoming
MY
Margo Young
Acme Industries · VIP

Rose

.bp-card-mock--rose

New voicemail
0:42 · transcribed

Teal

.bp-card-mock--teal

Sales VIP Renewal
Auto-tagged · 1.2k calls

Slate

.bp-card-mock--slate

Composed feature spotlights — fuller product mocks with body copy + footer chip

3-up grid gives the mocks more room — use this layout when each card needs a richer product moment.

Call received
Press 1
Sales
Ring 3 agents · 20s
Press 2
Support
Ring queue · 30s
If unanswered → ✦ Kori

Guide customers to the right teammate

Team-specific routing means callers reach Sales when they want to buy, Support when they need help.

Phone menus
Call flows 3 saved
Default flow
Live now
Summer hours
Mon–Fri 8–4
Holiday
Inactive
+ New call flow

Multiple flows, zero rebuilding

Different routing configurations for holidays and campaigns — toggle between them without rebuilding.

Call flows
Sales ring group
0:12
AS Amy Smith No answer
FJ Farid Javadi Ringing
DK David Kumar Answered

Keep business running when key people are out

Availability-based routing sends calls to whoever is actually working.

Ring order

Saturated showcase row — .bp-callout.bp-callout--showcase + .bp-card--showcase

Primary usage: a deep-saturated card with a floating UI screenshot, paired with copy in a 50/50 two-column layout. Use .bp-callout--reverse on alternating rows so the visual sits on opposite sides down the page. Reference: quo.com/phone-numbers porting / customizing / carrier-registration sections.

Existing numbers

Port your number for free.

Bring the numbers your customers already know. Our porting team handles the carrier paperwork, the cutover window, and keeps your old line live until the new one's ready.

Port a number
Porting
📞
Support
(385) 154-1736
Requested
📞
Sales
(415) 875-5793
Accepted
🚀
Partnerships
(814) 413-9191
Scheduled for Jan 12
Porting scheduled
Congrats! Porting has been scheduled. Please refrain from cancelling your current carrier just yet.

Number porting

Track every step in real time — request, accept, schedule, switch.

New numbers

Pick a number that feels local.

Search by city or area code — every Canadian region available. Local numbers get answered 4× more often than toll-free.

Browse numbers
Montreal
(514) 555-0142 Montreal
(514) 555-0118 Montreal
(514) 555-0203 Laval
(438) 555-0044 Montreal

Number search

Thousands of local + toll-free numbers, activated the moment you pick.

The pattern: .bp-callout.bp-callout--showcase (50/50, no outer frame) wraps a .bp-callout-copy on one side and a .bp-card.bp-card--showcase.bp-card--showcase-{tone} on the other. Add .bp-callout--reverse on alternating rows so the visual zigzags down the page. Available tones: orange, green, blue, purple, amber, rose, teal, slate.

Showcase cards in 3-up grid (alternative layout)

Same primitive can stack in a 3-up grid for a feature-cluster section.

Customer support
(628) 246-3765
···
View calls
Settings

Number details

Configure each number's name, area, and routing in seconds — no IT ticket required.

Press 1
Ring users
David Kumar · for 30s

Phone menu

Press-1, press-2, press-3 — build the menu callers hear, with a visual editor.

Syncing contacts…
AS DK FJ MC FP +12
HubSpot · 247 contacts synced

Integrations

Sync contacts with HubSpot, Zoho, and Slack — calls auto-log to the right record.

The pattern: .bp-card.bp-card--showcase.bp-card--showcase-{tone} wraps a .bp-card-showcase-mock (product UI floats inside, shadow-elevated) and a .bp-card-showcase-caption (h3 + p sit at the bottom on top of the color). Available tones: orange, green, blue, purple, amber, rose, teal, slate.

Showcase: gradient mock frame + product card

Top-tier pattern from /platform/menu-routing/: a warm-gradient frame lifts a high-fidelity product card off the page. Use as the "killer demo" inside an asymmetric callout — pair with .bp-callout for 2-column copy + mockup layouts.

★ Popular features

Powerful routing, made simple.

  • Ring order

    Ring everyone at once, in sequence, or by team — answered by the first available person.

  • Kori AI fallback

    If no one answers, Kori takes a message, qualifies the lead, and sends a clean summary.

5 users
Rang everyone at once for 30 seconds
AS
Amy Smith You
Inbox was muted
FP
Frances Powell
Was outside their work schedule
MC
Merrit Cooper
Declined the call
FJ
Farid Javadi
Declined the call
DK
David Kumar
Answered the call ✓

The pattern: warm-gradient frame (linear-gradient(135deg, #2a1f10 → #6b4220)) + 1px white card inside with subtle drop shadow. Frame radius --kb-radius-2xl, card radius --kb-radius-xl. Inside the card: header (name + meta) + 5 user rows with avatar + name + tag chip + status indicator.

Layout primitives

Container + section padding tokens. Visual demos show actual spacing.

.bp-page-inner — content container (max 1280px)

viewport
.bp-page-inner — max-width 1280px, horizontal padding clamp(20px, 4vw, 56px)

.bp-section — standard vertical padding

.bp-section · padding clamp(48px, 7vw, 96px)
Section content

.bp-section--lg — hero / testimonial / final-CTA

.bp-section--lg · padding clamp(80px, 11vw, 140px)
Section content

.bp-section--bleed — full viewport breakout

Combine with .bp-section--dark for full-width dark bands. Place .bp-page-inner inside to constrain content. See live demo in Full-bleed bands ↓.

Callout cards

Asymmetric two-column spotlight. Use for the killer-demo moments on a marketing page. .bp-callout + slot classes .bp-callout-copy & .bp-callout-media. Modifier --reverse flips the order.

Stop losing prospects to "let me transfer you… again."

Smart routing gets customers to the right person on the first try, so they don't reach a dead end or hang up out of frustration before you can help them.

Call flow builder
Inbound · +1 (514) 555-0142
Now · 2:14 PM
PRESS 1
Sales team
Ring 3 agents simultaneously · timeout 20s
PRESS 2
Support queue
4 agents online · est. wait 30s
Kori takes a message
If unanswered after 30s
Fallback

Full-bleed bands

Compose .bp-section--bleed + .bp-section--dark for full-width dark bands. Add .bp-page-inner inside to keep band content aligned to the rest of the page.

Dark testimonial band

Faster customer connections

Our customers used to bounce between three reps before reaching the right person. With EMAK's smart routing they get to the right team on the first try — every time.

MT
Marie Tremblay
Owner @ Salon Tremblay

Lighter band variant — bleed only, no --dark

Why EMAK

Built for the way Canadian businesses actually work.

Marketing primitives

Nine shared blocks used by every marketing page. Each renders via a helper in inc/marketing-partials.php so copy lives in one place per page.

.bp-faq — accordion (zero-JS, native <details>)

What is EMAK Telecom?

EMAK is a Canadian VoIP business phone system trusted by 1,000+ businesses. We provide cloud calling, texting, recording, AI transcription, and 40+ features — all included in one plan with no add-ons or contracts.

Can I keep my existing phone number?

Yes. Our porting team transfers your numbers from any Canadian carrier, typically within 7–14 business days. Your service continues uninterrupted during the switch.

How is EMAK different from Bell, Telus, or Rogers?

EMAK includes features that legacy carriers charge extra for — call recording, AI transcription, analytics, business texting, CRM integration. No contracts, no per-feature fees, and a support team that actually answers the phone.

Is my data stored in Canada?

Yes. All call recordings, voicemails, faxes, transcripts, and contact data are stored on Canadian servers. EMAK is built around PIPEDA and Quebec's Loi 25 privacy frameworks.

.bp-steps-3 — "Get started in 3 steps" block

Choose your numbers

Pick local or toll-free numbers, or port your existing ones from any carrier.

Set up your routing

Build your call flow, IVR menus, and business hours in the visual builder. Takes minutes.

Start taking calls

From your desk phone, laptop, or mobile. Your business phone system is live.

.bp-cross-sell — "Part of your complete phone system"

.bp-compare-table — provider comparison (highlights "us" column)

Feature EMAK Bell Telus Rogers
All features included
Month-to-month, no contract
Canadian data residency
AI transcription
Per-extension price (CAD) $20$45$45$50
Free trial 30 days

.bp-logo-wall — marquee customer logo strip

TC Automotive Mr Puffs BOCA Dental Multi-Prêts Blu Cirrus Construction ND Cirka Distilleries Baton Rouge Levine Bros. Restaurant Amir OptiWeb Marketing Thai Express Firegrill Trattoria Dimitrio TC Automotive Mr Puffs BOCA Dental Multi-Prêts Blu Cirrus Construction ND Cirka Distilleries Baton Rouge Levine Bros. Restaurant Amir OptiWeb Marketing Thai Express Firegrill Trattoria Dimitrio

.bp-price-anchor — inline plan/price reminder

Included in every plan — from $20/extension/month. Included in every plan — from $20/extension/month.

.bp-rating-badge — Google rating inline badge (default + --lg)

5.0 135 Google reviews Rated 5.0 out of 5 on Google, 135 reviews 5.0 135 Google reviews Rated 5.0 out of 5 on Google, 135 reviews 5.0 135 Google reviews Rated 5.0 out of 5 on Google, 135 reviews

.bp-stat-card — big metric tile

Default · --brand · SVG-star variant (compose with inline SVG). Use in 3-up grids on customer-stories & trust bands.

94%

Support calls answered live by a human

Last 12 months — 4,145 calls
31s

Average wait time

Below the industry SLA
5.0

135 Google reviews — perfect rating

Most reviews of any Canadian VoIP

--bare variant — drops card chrome for inline use in copy-led sections.

$126K

lost per year to missed calls

Ambs Call Center, 2024

more likely to answer local numbers

Software Advice, 2024
62%

of SMB calls go unanswered

411 Locals, 2024

.bp-story-card — customer-story card (3-up grid)

Avatars

Two patterns: initials (default — auto-generated from any name) and photo (hand-picked CC0 portraits stored locally in themes/bplus/images/avatars/). Same primitive renders both — pass 'src' => 'w-03' for a photo, omit for initials. Use photos in product-UI mocks where realism matters; use initials in testimonial cards and other places where the name is the focal point.

Sizes

MT--xs
MT--sm
MT--md
MT--lg
MT--xl

xs 22 · sm 28 · md 36 · lg 48 · xl 64 — all in px.

Initials avatars — default brand gradient + 8 tone variants

Default is a brand-orange gradient. Tonal variants are flat tints with darker text — softer, used for stacks of multiple avatars (e.g. ring groups) so the row reads as variety, not a wall of brand orange.

MT ASFPMCDKEMFJKLTR

.bp-avatar + size modifier + optional .bp-avatar--tone-{warm|rose|amber|green|teal|blue|purple|slate}.

Photo avatars — local library (16 CC0 portraits)

Hand-picked Random User photos stored in themes/bplus/images/avatars/. Reference by key (w-01w-08, m-01m-08).

Sample userw-01
Sample userw-02
Sample userw-03
Sample userw-04
Sample userw-05
Sample userw-06
Sample userw-07
Sample userw-08
Sample userm-01
Sample userm-02
Sample userm-03
Sample userm-04
Sample userm-05
Sample userm-06
Sample userm-07
Sample userm-08

Add more by dropping a square JPG into the folder named avatar-{key}.jpg.

Stack — overlapping group of avatars

Initials stack

AS FJ DK MC FP + 12 more

Photo stack

Emma Daniel Sarah Marcus Priya + 12 more

Wrap multiple .bp-avatar elements in a .bp-avatar-stack for overlap with consistent ring spacing. Use photo stacks for higher-fidelity mocks (e.g. inside saturated showcase cards); initials stacks for compact rows where names are the focus.

In context — story-card variant

The same .bp-story-card primitive accepts an avatar_src option. Compare the two patterns:

Dark CTA grid

Full-bleed dark band with three CTA cards — the page's penultimate "ready to get started?" moment. Each card has a top-half product-UI art (number picker, video player, pricing card) and a bottom body (heading + sub + arrow). Rendered via bplus_render_cta_grid(). Live demo breaks out of the grid below ↓

Final CTA

The page's closing statement. Confident heading + solid-brand primary + bare-text secondary. Arrow translates on hover (the unobtrusive micro-interaction); primary gets a soft brand halo. Rendered via bplus_render_finale(). Live demo breaks out of the grid below ↓

Never miss a call
or customer.

Forms

Hand-rolled form primitives. No plugin dependencies. Used by /request-a-callback/.

We'll never share your info. Usually a same-day response.