Spark × Project Helping — Design System & Style Guide
Spark × Project Helping
Design System v2

Unified style guide for projecthelping.org  ·  kyndhub.com  ·  sparkchange.org

Colors

Full palette across the blue scale, neutrals, Spark brand, and Kynd Hub audience colors. Navy #1d3040 is removed — Blue 800 #1d4a60 fills all dark-section roles.

Blue Scale — Project Helping
f4fbfc
d9eff5
b3dde9
7ec4d8
439bc0
347ea0
1d4a60
Blue LightHero bands
Blue 100Subtle bg
Blue 200Card borders
Blue 300Stats
PrimaryButtons/links
Blue 600Hover
Blue 800Dark sections
Blue Light
#f4fbfc
Hero bands, callout rows only — not page bg
Blue 100
#d9eff5
Subtle borders, light backgrounds
Blue 200
#b3dde9
Borders on tinted cards
Blue 300
#7ec4d8
Stats, numbers on dark backgrounds
Primary Blue
#439bc0
Buttons, links, accents, icon fills
Blue 600
#347ea0
Hover states, darker accents
Blue 800
#1d4a60
Headings, footers, dark sections (replaces Navy)
Neutrals & Light Backgrounds
Page Background
#ffffff
Always white — Blue Light is not the default bg
Background Alt
#f7fafb
Section alternates, feature card fills
Border
#d0dce6
Card borders, dividers
Body Text
#5a6a7a
All body copy
Caption / Meta
#8a9bab
Labels, timestamps, secondary text
Spark Primary
Spark Dark Blue
#00638a
Spark primary headings & brand text
Spark Light Blue
#439bc0
Shared with PH Primary Blue
Spark Green
#1ec1a1
CVP, Mental Wellness Program
Spark Secondary
Dark Orange
#ff995a
CVP, Community programs
Light Orange
#fadcc9
CVP tints, card fills
Dark Purple
#924cd8
Empowering Aging Programs, Company CTAs
Light Purple
#e8d6fa
Aging program tints, card fills
Kynd Hub — Audience Colors
Nonprofits
#439bc0
Blue
Volunteers
#1ec1a1
Teal-Green
Companies
#924cd8
Purple
Pink / Accent
#de3c7a
Pink
Green Light
#f0fbf8
Volunteer card fills
Green Border
#b3e8db
Volunteer card borders
Purple Light
#f5f0fd
Company card fills
Purple Border
#d4bff5
Company card borders
Pink Light
#fdf0f5
Pink card fills
Pink Border
#f0b8d0
Pink card borders

Spark Programs

Each program uses a dedicated color subset. Apply consistently across all program-specific materials.

Program Color Palettes
Mental Wellness Program
#00638a · #1ec1a1 · #f4fbfc
Empowering Aging Programs
#00638a · #924cd8 · #e8d6fa
Community Volunteer Programs
#00638a · #ff995a · #fadcc9
Spark (Agency-Wide)
#00638a · #439bc0 · #1ec1a1
Audience Badges
Nonprofits
Volunteers
Companies
Community
Accent / Pink
Tagline
do good. feel good.
Always lowercase · Include periods · Never stylize differently
Never: Do Good Feel Good  ·  Do good, feel good!  ·  DO GOOD. FEEL GOOD.

Typography

DM Sans is the only web typeface. Never use DM Serif Display. Neue Einstellung is Spark logo/print only — never on web pages.

Font import:
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400&display=swap"/>
Type Scale
Page Title h13rem · 800 · lh 1.08
Volunteer Together
Section Title h22.1rem · 700
Built for everyone doing good.
Feature Title2.2rem · 700
do good. feel good.
Card Title1.05rem · 700
Kynd Hub Platform
Body0.97rem · 400 · lh 1.78
We spark community and mental wellness through the power of volunteerism in Colorado and beyond.
Body Small0.87rem · 400 · lh 1.75
Supporting detail text, card descriptions, and secondary content sit at this size.
Feature Card Body0.78–0.85rem · 400 · lh 1.62
Compact body text used inside feature and program cards.
Eyebrow Label11px · 700 · uppercase
Who It's For
Button0.87rem · 700
Get Started →
Meta / Caption0.75rem · 400–600
Published May 14, 2026  ·  3 min read
Italic Accent Pattern
Built for everyone doing good.
Section h2 titles use one italic <span> for an accent word, colored to match section context (blue, teal, purple, etc.)

Buttons

Always scope under wrapper class. Use !important on text color for any button on a colored or dark background — Elementor overrides at high specificity.

Primary Variants
Secondary & Outline Variants
Sizes
On Dark Background (Blue 800)

Always use color:#fff !important on colored or Blue 800 backgrounds

Variant Reference
ClassBackgroundTextUse For
.btn-primary#439bc0#fff !importantPrimary CTA
.btn-green#1ec1a1#fff !importantVolunteer CTAs
.btn-purple#924cd8#fff !importantCompany CTAs
.btn-orange#ff995a#fff !importantCVP / Community CTAs
.btn-pink#de3c7a#fff !importantPink accent CTAs
.btn-outlineTransparent#439bc0 !importantSecondary on white
.btn-on-darkrgba(255,255,255,.13)#fff !importantGhost on dark bg
.btn-white#fff#347ea0 !importantCTA on Blue 800 bg

Spacing & Border Radius

Consistent spacing and radius tokens used across all page builds.

Spacing Scale
Section padding
4.5rem 0
Container max-width
1080px
Container gutter
0 1.5rem
Card padding
1.5–2rem
Grid gap
1–1.25rem
Border Radius
--r-md
8px
Buttons, small elements
--r-lg
12px
Icons, tags
--r-xl
16px
Cards, accordions
--r-2xl
24px
Panels, CTAs, heroes
--r-pill
999px
Badges, pills
Responsive Breakpoints
BreakpointBehavior
max-width: 900px3-col grids → 2-col; detail hero stacks vertically
max-width: 600pxAll grids → 1-col; headings scale down; CTA strips stack
min-width: 375pxMinimum supported mobile viewport

Components

Live demos of core patterns. No accordions as a catch-all — each section should use a layout suited to its content type.

Eyebrow + Title Pattern
Who It's For
Built for everyone doing good.
Supporting description here for context and visitor orientation.
Feature Cards
Impact Tracking
Measure volunteer hours and wellness outcomes automatically.
Community Matching
Connect people to opportunities that fit their interests and schedule.
Nonprofit Tools
Capacity building and volunteer management in one place.

.tb = tinted blue  ·  .tg = tinted green  ·  .tp = tinted purple  ·  .fb/.fg/.fp = icon fill variant

Stats Bar
402K
Volunteers in the Network
435K
Volunteer Hours Logged
45+
Nonprofit Partners
4 yr
Running Strong

Background: Blue 800 #1d4a60. Stat numbers use Blue 300 #7ec4d8.

CTA Strip
Ready to make an impact?
Join thousands of volunteers in the Denver metro area.
Launch your volunteer program.
Kynd Kits make it easy for any team to give back.
Partner with us as a nonprofit.
Free tools to manage volunteers and track impact.
Grid Layouts
ClassColumnsUse
.aud-cards3 → 2 → 1Audience path cards
.feat-tiles3 → 2 → 1Platform feature tiles
.home-cta3 → 2 → 1Bottom CTA cards
.stats-grid4 → 2 → 1Stat numbers bar
.fg33 → 2 → 1Feature card grid
.fg22 → 1Two-column feature grid
.kit-g4 → 2 → 1Kit tier cards
.split-g2 → 1Member/admin split layout

Icons

Always use Tabler Icons — never emojis. Outline style only; never use -filled suffixes.

CDN: https://cdn.jsdelivr.net/npm/@tabler/[email protected]/dist/tabler-icons.min.css
Common Icons
heart-handshake
users
building-community
briefcase
leaf
chart-bar
calendar
star
map-pin
arrow-right
check
sparkles
package
school
hand-love
award
currency-dollar
calendar-event
arrow-left
chevron-down
plus
adjustments
external-link
mail
Usage Rules
HTML
<!-- Decorative: add aria-hidden -->
<i class="ti ti-heart-handshake" aria-hidden="true"></i>

<!-- Meaningful (no text label): use aria-label -->
<i class="ti ti-arrow-right" aria-label="Go to next step"></i>

Code Patterns

Copy-paste patterns for Elementor conflict fixes, section CSS, JS navigation, and common components.

Elementor Reset (Required on Every Page)
CSS — paste at top of every <style> tag (swap .ph-slug for your wrapper class)
.ph-slug *,.ph-slug *::before,.ph-slug *::after{box-sizing:border-box;margin:0;padding:0;}
.ph-slug h1,.ph-slug h2,.ph-slug h3,.ph-slug h4,.ph-slug h5,.ph-slug h6{margin:0;padding:0;border:none;font-weight:normal;line-height:inherit;}
.ph-slug p{margin:0;padding:0;}
.ph-slug a{text-decoration:none;color:inherit;}
.ph-slug ul,.ph-slug ol{list-style:none;margin:0;padding:0;}
.ph-slug li{margin:0;padding:0;}
.ph-slug button{cursor:pointer;font-family:'DM Sans',sans-serif;}
.ph-slug img{max-width:100%;height:auto;display:block;}
.ph-slug .btn{line-height:1;letter-spacing:normal;text-transform:none;box-shadow:none;background-image:none;}
.ph-slug .btn:hover{text-decoration:none;}
Section Backgrounds
CSS
.section       { padding: 4.5rem 0; background: #fff; }
.section-alt   { padding: 4.5rem 0; background: #f7fafb; }
.section-dark  { padding: 4.5rem 0; background: #1d4a60; } /* Blue 800 — replaces Navy */
.section-lt    { padding: 4.5rem 0; background: #f4fbfc; } /* hero/callout bands only */
Responsive Grid Breakpoints
CSS
@media(max-width:900px){
  .ph-slug .aud-cards,
  .ph-slug .feat-tiles,
  .ph-slug .stats-grid { grid-template-columns: 1fr 1fr; }
  .ph-slug .det-hero-inner { grid-template-columns: 1fr; }
}
@media(max-width:600px){
  .ph-slug h1.page-title { font-size: 1.9rem; }
  .ph-slug h2.sec-title  { font-size: 1.7rem; }
  .ph-slug .aud-cards,
  .ph-slug .feat-tiles,
  .ph-slug .stats-grid   { grid-template-columns: 1fr; }
  .ph-slug .det-cta      { flex-direction: column; align-items: flex-start; }
}
View Navigation System (JS)
JavaScript — namespace all functions in an IIFE
(function(){
  var KH_CUR = 'home';
  var KH_VIEWS = ['home','nonprofits','volunteers','companies'];

  window.khNavigate = function(id) {
    if (!KH_VIEWS.includes(id) || id === KH_CUR) return;
    var root = document.querySelector('.kh-lp');
    var from = root.querySelector('#kh-view-' + KH_CUR);
    var to   = root.querySelector('#kh-view-' + id);
    from.classList.remove('active');
    from.style.display = 'none';
    to.style.display = 'block';
    to.getBoundingClientRect(); // force reflow
    to.classList.add('active');
    window.scrollTo({top: 0, behavior: 'instant'});
    KH_CUR = id;
    try { history.pushState(null,'','#kh-'+(id==='home'?'':id)); } catch(e){}
  };
})();
CSS
.kh-lp .view { display: none; }
.kh-lp .view.active { display: block; animation: kh-vIn .28s ease both; }
@keyframes kh-vIn { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:translateY(0); } }
CTA & Button Links

Design Principles

Standing rules that apply to every page build across all three properties.

No accordions as catch-all. Each section should use a layout suited to its content type — 2×2 grid, numbered editorial rows, master/detail split, single bold card, etc.
No emojis. Always use Tabler Icons with aria-hidden="true" on decorative instances.
Page background is always white (#ffffff). Blue Light #f4fbfc is for hero bands and callout rows only — never the default page background.
Blue 800 replaces Navy everywhere. #1d4a60 is now the darkest color in the palette. Use it for headings, footers, dark section backgrounds, stats bars, and CTA strips.
DM Sans only on web. All headings (h1–h6), body, buttons, labels, and nav use DM Sans at weight 700 or 800 for headings. Never DM Serif Display. Neue Einstellung is Spark logo/print only.
No dark text on Blue 800 or colored backgrounds. Always use white or light-tinted text. Buttons on dark backgrounds always use color: #fff !important.
Mobile responsive always. Every page must work at 375px minimum viewport width. No horizontal scroll on mobile.
Hexagons use rounded SVG paths — not CSS clip-path, which creates sharp corners on some browsers.
PHIL no longer exists. All references and routing must point to /kynd-hub/ without exception.
Namespace all JavaScript. Wrap all functions in an IIFE to avoid collisions with Elementor/theme JS. Scope all CSS under the page wrapper class — never on :root.