KCAA Hub

Enter password


Back to Hub
Change log · 5 revisions
VersionDateByChanges
v0.52026-09-10ClaudeReplaced the flat cross-document nav bar with a single "Back to Hub" link, to match the Hub becoming the primary entry point; updated section 11's stylesheet to match.
v0.42026-09-10ClaudeAdded this change log; fixed the dark-background logo card to match the light card's size; turned section 10's pattern list into live visual mini-demos; added a copy-paste house-style stylesheet (section 11).
v0.32026-09-10ClaudeAdded section 10 (using this as the house style); trimmed open questions (color values confirmed, rollout question reworded to a Hockey/Basketball clash check); added the Junior Tigers open item; changed the pickleball/racquet color to Tennis Ball yellow-green; added the cross-document nav bar.
v0.22026-09-10ClaudeRemoved the "signature texture" section after confirming at native resolution it isn't real; added a measured clear-space diagram, a minimum-size ladder, and visual do/don't demo cards; added the program color system.
v0.12026-09-10ClaudeInitial draft — real logo embedded, exact colors sampled from the source file, do/don't rules, typography pairing, voice starter.

Draft · v0.5 · pending board review

KCAA Brand Identity Guide

Built directly from the approved core logo files. Colors are sampled pixel values from the source PNGs, not estimates. Measurements below are taken from the actual master file, not illustrative guesses.

01 · The logo

KCAA core logo, black, for light backgrounds

Primary — light backgrounds

KCAA core logo, white, for dark backgrounds

Reverse — dark backgrounds

The mark's story: the two peaks are both the letter A and a nod to identity — red and blue echo the Korean taegeuk, red alone echoes Canada. Both colors land on the "Athletic Association" half, in a name that's literally Korean and Canadian.

02 · Clear space

margin = X
KCAA logo with clear space diagram
X

X = the width of the K's diagonal leg — 92px measured directly on the 2457px-wide master file (3.74% of the lockup's width). Keep that much clear space on every side, at any scale.

03 · Minimum size

320px
200px
160px — floor for the full lockup
96px — subtitle unreadable, drop it

Below 160px wide, the "Korean Canadian Athletic Association" line stops reading as text. Switch to the KCAA mark alone rather than shrinking the full lockup further.

04 · Do / don't

DoFull color, proportional, on a clean light ground
DoReverse version on dark, with equal contrast
Don'tStretch or skew the proportions
Don'tRecolor the red/blue accents
Don'tAdd drop shadows, bevels, or outlines
Don'tPlace it where the background fights it
KCAA
Don'tRetype the wordmark in another font

05 · Core color

Ink
#000000
Primary — type, wordmark, dominant fields
KCAA Red
#D01048
Accent only — never a large field
KCAA Blue
#3090D8
Accent, and Hockey/Learn-to-Skate's program color
Paper
#FFFFFF
Ground — needs white space to read as clean
Black 35%
White/paper 35%
Red 15%
Blue 15%

Roughly this split across any single piece — red and blue almost never appear as equal-sized fields side by side outside the logo itself.

06 · Program colors

Decided 2026-09-10. Each program gets one accent, used for its schedule blocks, jersey trim, and site section — paired with core black/white, never two program colors side by side.

core
Hockey / Learn-to-Skate
#3090D8
Already the brand's ice color — no new color needed
active
Basketball — Court Orange
#EF7D28
Warm enough to separate cleanly from KCAA Red
active
Baseball — Infield Clay
#8B5A2B
Dirt/leather reference — darker and less saturated than Orange so the two don't get confused
ad-hoc
Golf — Fairway Green
#2F8A4E
For occasional golf events
reserved
Pickleball / Racquet — Tennis Ball
#D7E62B
Held for pickleball, tennis, and other racquet sports if they become active programs

07 · Typography

Display · headlines, event titles, jersey callouts
Learn to Skate — Fall Registration
Poppins ExtraBold · free, Google Fonts · geometric weight matches the logo's circular C and flat-top A
Body & bilingual · everything else
Registration opens August 1st for children ages 4–12. Equipment is provided for the first session — just bring a helmet.
8월 1일부터 4~12세 어린이 등록이 시작됩니다.
IBM Plex Sans + IBM Plex Sans KR · free, same family across English and Korean, so bilingual flyers don't visually clash

The wordmark's own letterforms are custom-drawn, not a licensable font — don't try to match it exactly for body text.

08 · Voice & tone (starter)

Welcoming
first-timers, not just returning families
Plain-spoken
no jargon, translates cleanly
Community-first
volunteer-run, said with pride not apology
Competitive
skill development is real, not just participation
Avoid
Due to unforeseen circumstances, the Learn 2 Skate registration deadline has been extended.
Prefer
Good news — Learn 2 Skate registration is open two more weeks. Spots are first-come, first-served.

09 · Open questions for the board

10 · Using this as the house style

Going forward, internal documents — financial reports, meeting notes, the project roadmap, this guide — should be built as self-contained HTML files like this one, not Google Docs or Slides. That's what keeps the brand pixel-accurate and consistent instead of drifting doc to doc. To start a new one: copy this file, keep the <style> block and its color/spacing tokens untouched, and replace the content sections.

Eyebrow
Heading
One-sentence lede.

Header pattern

Eyebrow (status/category) → H1 (title) → one-sentence lede. Every document opens this way.

04 · Section title

Numbered sections

H2 in small caps with a bottom rule, numbered only when order matters (like this guide's build sequence) — not decoration.

Cards for parallel items

Any list of comparable things (rules, programs, phases) becomes a card grid, not a bullet list — see the swatches and do/don't demos above.

Flag or warning
Supporting note

Callouts

Red-tinted for a flag/warning, blue-tinted for a supporting note — reuse the .callout / .callout.blue classes rather than inventing a third color.

DecideOne-line ask for someone else

Open items

Anything needing a decision from someone else uses the tagged list style in section 09 — a flag (CHECK / DECIDE / CONFIRM) plus a one-line ask.

Light & dark

Every color is a token (--ink, --surface, --red…), redefined once for dark mode. Never hardcode a hex outside the token block.

← Back to Hub

Back navigation

Every document except the recruitment intro material (it's external) gets a single .back-nav link to the Hub — not a row of peer links, which wraps badly on mobile.

11 · Copy-paste stylesheet

The base tokens and components used across every document in this set (hub, roadmap, volunteer plan, this guide). Start a new internal doc by pasting this whole block into a <style> tag, then add page-specific classes on top — never redefine a token that's already here.

:root {
  --bg: #f3f5f7; --surface: #ffffff; --ink: #0a0a0a; --ink-soft: #565f68; --ink-faint: #889198;
  --line: #dde2e6; --red: #d01048; --red-soft: #fbe6ec; --blue: #3090d8; --blue-soft: #e6f2fb;
  --shadow: 0 1px 2px rgba(10,10,10,0.04), 0 8px 24px -14px rgba(10,10,10,0.16);
  color-scheme: light;
}
:root[data-theme="dark"] {
  --bg: #101214; --surface: #1a1c1f; --ink: #f1f2f3; --ink-soft: #b4bac0; --ink-faint: #7d848b;
  --line: #2c2f33; --red: #ef4778; --red-soft: #331a22; --blue: #5cabe6; --blue-soft: #17283a;
  --shadow: 0 1px 2px rgba(0,0,0,0.4), 0 8px 30px -14px rgba(0,0,0,0.6);
  color-scheme: dark;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --bg: #101214; --surface: #1a1c1f; --ink: #f1f2f3; --ink-soft: #b4bac0; --ink-faint: #7d848b;
    --line: #2c2f33; --red: #ef4778; --red-soft: #331a22; --blue: #5cabe6; --blue-soft: #17283a;
    --shadow: 0 1px 2px rgba(0,0,0,0.4), 0 8px 30px -14px rgba(0,0,0,0.6);
    color-scheme: dark;
  }
}
* { box-sizing: border-box; }
body { margin: 0; background: var(--bg); color: var(--ink); font-family: -apple-system, "Segoe UI", ui-sans-serif, system-ui, sans-serif; line-height: 1.55; -webkit-font-smoothing: antialiased; }
.page { max-width: 900px; margin: 0 auto; padding: 32px 24px 100px; }

.back-nav { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 700; color: var(--ink-soft); text-decoration: none; padding: 10px 4px; margin-bottom: 16px; }
.back-nav:hover, .back-nav:focus-visible { color: var(--blue); }
.back-nav .arrow { font-size: 15px; }

.eyebrow { font-size: 12px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-faint); margin: 0 0 10px; }
.eyebrow.status { color: var(--red); }
h1 { font-size: clamp(28px, 4vw, 40px); font-weight: 800; letter-spacing: -0.01em; margin: 0 0 12px; text-wrap: balance; }
.lede { font-size: 16px; color: var(--ink-soft); max-width: 64ch; margin: 0 0 40px; }

section.block { margin-bottom: 44px; }
h2 { font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: var(--ink-faint); margin: 0 0 18px; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
h3 { font-size: 15px; font-weight: 800; margin: 0 0 6px; }
p.note { font-size: 13.5px; color: var(--ink-soft); margin: 0; }

.rule-grid, .demo-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; }
.rule-card { background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 16px 18px; box-shadow: var(--shadow); }

.callout { background: var(--red-soft); border: 1px solid color-mix(in srgb, var(--red) 30%, var(--line)); border-radius: 12px; padding: 14px 18px; font-size: 13.5px; }
.callout strong { color: var(--red); }
.callout.blue { background: var(--blue-soft); border-color: color-mix(in srgb, var(--blue) 30%, var(--line)); }
.callout.blue strong { color: var(--blue); }

.open-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.open-item { display: flex; gap: 12px; align-items: flex-start; background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 12px 16px; box-shadow: var(--shadow); }
.open-item .flag { font-size: 11px; font-weight: 800; color: white; background: var(--ink-faint); border-radius: 999px; padding: 2px 9px; flex-shrink: 0; margin-top: 2px; }
.open-item .body { font-size: 13.5px; }
.open-item .body .h { font-weight: 700; display: block; margin-bottom: 2px; }

.table-wrap { overflow-x: auto; }

footer { margin-top: 48px; padding-top: 18px; border-top: 1px solid var(--line); font-size: 12px; color: var(--ink-faint); }