Have fun teaching,
on brand every time.
A warm, playful design system for Have Fun Teaching — built for the pre‑K–6th grade teachers and homeschool moms (women 20–45) who use us every day. Built around the new pinwheel brandmark: four sails, four subjects, one motion. Every color in this kit is sampled straight out of the logo.
Designed for the teacher who does it all
Our audience is women aged 20–45 who teach little kids — Pre‑K through 6th grade: classroom teachers and homeschool moms, often juggling many students, lesson plans and limited time. She wants resources that feel warm, joyful and reassuring — colorful enough to delight her kids, simple enough to use at 9pm. V2.1 leans into rounded shapes, warm cream, generous whitespace, and one obvious next step on every screen. Trust cues (2M+ teachers, 20+ years, free samples) sit on the call‑to‑action, not near it — see 05b — Conversion patterns, which is where this audience actually gets served.
How the brand grows up
There is one brand, not three. But the same ingredients — color, shape, type, tone — are dialed by grade band. Younger runs warmer, rounder and more colorful; older runs cooler, tighter and more editorial. The house default is the Elementary setting — warm, rounded and friendly — because that’s where most of what we make lives (Pre-K–5th). Push cooler and tighter only as the grades climb.
Shape: round, pill buttons
Type: Fredoka leads
Voice: playful, friendly
Shape: 8px, tags stay pills
Type: Source Serif headlines
Voice: plain, respectful
Shape: 6px, minimal
Type: Source Serif, tight
CTA stays pink — every band
Logo system
The identity is one pinwheel brandmark plus one lowercase wordmark. Four sails — pink, yellow, green, blue — spin around a shared center: four core subjects, one motion. It reads as a pinwheel (fun), an aperture (focus) and a page turning (learning), and it has 90° rotational symmetry, so it’s a single shape copied four times. The wordmark is Fredoka SemiBold, all navy, letterforms converted to outlines. Fun — but not little‑kid‑looking. That tension is the whole point.
The default. Site header, invoices, worksheets, decks, email.
Reversed to one‑color white. Dark bands, footers, video overlays, photos (add a scrim).
hft-app-icon-cream.svg) exists for light UIs.The single most-seen piece of the brand — it fires on every link anyone pastes into Facebook, Pinterest, X, Slack, iMessage or a Google result. The old one still carried the pre‑rebrand logo, so it’s been rebuilt.
On every side, leave at least the width of one pinwheel sail (≈ ⅓ of the mark’s height). Nothing — type, rules, photo edges, other logos — inside that.
Mark: 20px / 7mm. Horizontal lockup: 130px / 34mm wide. Stacked: 90px wide. Below 28px, use the mark alone — never the lockup.
✓ Do
- Default to the horizontal lockup; mark alone when space is tight.
- Keep the four sail colors, their positions, and the spin direction exactly as drawn.
- Use one‑color white / black / navy on busy, dark or single‑ink work.
- Check the mark at 20px in one color before every launch.
✕ Don’t
- Recolor individual sails, add a center circle, or add a stem.
- Stretch, squash, rotate, outline or add shadows and gradients.
- Let the gaps between sails close up — that’s where the mark dies.
- Reset the wordmark in another font, or in title case / all caps.
Color system
Every brand color is now sampled straight out of the logo. Navy #1B437D is the anchor (it’s the wordmark). The four pinwheel sails — yellow, green, blue, pink — are the whole accent system and map one‑to‑one onto the four core subjects. Warm cream neutrals keep it friendly, never clinical. Orange is the one extended color: it isn’t in the logo, it exists only to make the primary CTA the loudest thing on the page. Click any swatch to copy its hex.
Red and purple are full brand colors, not one‑offs. Purple #7A3FA8 (6.8 : 1 on white) is the music & sound family — it lets Songs be joyful again instead of the bronze compromise. Red #CC2E2E (5.3 : 1) is watch & play — Videos. Two rules keep them honest: red is never the error color (error stays the softer #C9584E, and errors are always paired with an icon + text), and neither one ever becomes a CTA — pink is the only button.
#F26E5F — tints, illustration, section washes, badges and flags with dark text. It is the warm, friendly, not-burnt face of the brand.
✕ Never white text. 2.9 : 1 — fails AA text (4.5) and the 3.0 floor for large text and UI. Not a button. Not a tag.
#D2470B — buttons, tags, bands, the Summer School format, warning states. Hover #B03C09 (6.0 : 1).
This is the brightest orange that exists at 4.5 : 1. Anything more vivid cannot carry white text — and anything darker stops being orange and turns brown. It sits exactly on the wall.
Typography
Fredoka leads — it is the logo. The wordmark is Fredoka SemiBold, so every heading on the site is drawn from the same well. Rounded and warm without being childish; the counters stay open at weight. Nunito Sans handles body copy and all UI — soft, highly legible for busy readers on phones. Source Serif 4 is the third voice: it carries product titles, testimonials and long-form reading.
#1B437D. Fredoka is SIL Open Font License 1.1 — free for commercial use, modifiable, redistributable with OFL.txt. Ship the wordmark as outlines in print; use live text only where Fredoka is installed. Never apply negative tracking to body copy — it hurts legibility below 24px.Core components
The pieces that show up everywhere and belong to no single page. The resource card — the one component that carries the store — now lives with the search and filter UI it appears inside: 05d — HFT Search and Filter.
“I saved my whole Sunday. My kindergartners are obsessed with the songs and I actually got my evening back.”
One card, three grade bands
The same product card, shown as it should feel at three points on the dial. Same structure, same logo, same palette — the color intensity, corner radius, and headline face shift with the audience. The first card (Elementary) is the house default.
The five moments that decide the sale
Everything above this section is about the brand. This section is about her — a teacher or homeschool mom, 20–45, on a phone, at 9pm, with tomorrow’s lesson unplanned. She is not browsing. She is solving a problem before she can go to bed. A brand kit that stops at logos and swatches leaves the actual money on the table, so these are the five screens where the decision really happens.
The card, at 375px
The product card is the whole store. She meets it 24 at a time, thumb‑scrolling. Tag pill first, then the thumbnail, then a title she can read at 14px. Price and grade visible without tapping.
Proof sits on the button, not near it
The hesitation (“is this actually good?”) happens in the half‑second before the tap. Reassurance placed below the fold, or in a testimonial section further down, arrives after the decision is made.
Price framed against her real alternative
$39.97/yr competes with “I’ll just make it myself at 11pm.” Frame it in her currency — hours, not dollars. Anchor against the à la carte price she already saw ($6.97 per resource).
The free path is a door, not a demo
She should be able to hold a real, printable, classroom‑ready resource in her hand before she pays anything. Not a watermarked sample. Not a preview. The actual thing.
Risk gets named and killed
Card required? Auto‑renew? Can I cancel? These are the questions she’s actually asking. Answer them at the button, in plain language, in 12px — never buried in a policy page.
The one‑line test
Every screen answers one question: “What do I do next, and what happens if I do?” If a page can’t answer both in under three seconds, it isn’t finished.
- ✓ $3.33 a month — the real number is annual, but the felt number is monthly.
- ✓ 6 worksheets vs 6,600 — anchors against the price she already saw, not against a competitor.
- ✓ Proof under the button, where the doubt lives — not in a carousel 800px down.
- ✓ “No card charged today” — names the fear out loud instead of hoping she won’t think of it.
- ✓ One pink button. Nothing else on the card is allowed to be pink.
“Explore our comprehensive library of standards‑aligned educational resources.”
Describes us. Makes her do the translation work into her own life. “Comprehensive” and “library” are words she has to browse, and she has no time to browse.
“Tomorrow’s lesson, ready in five minutes.”
Describes her outcome. Names the deadline she’s actually up against. She doesn’t want a library — she wants to be done and go to sleep.
“Unlimited downloads & printing”
True, but it’s a spec. It asks her to imagine the benefit herself.
“Print it for all 26 kids. Then print it again next year.”
Same fact, but she can see it. Specific numbers beat the word “unlimited” every time.
HFT Search and Filter
This is the store. A teacher lands on /resources/ with three or four words in her head, types them, narrows once or twice, and decides — usually inside forty seconds. Everything here serves that: a field, a rail, and a result.
Live implementation: the HFT SAF plugin, rebranded in place. Search is .hft-saf-search, the results wrapper is .hft-cards.hft-view-grid / .hft-view-list, and the view toggle is button.hft-saf-view. Out-of-stock and hidden products drop out of this index automatically.
One field, one placeholder written in her words, one pink submit. The placeholder names the three things she actually types — a grade, a subject, or a topic — because “Search…” alone makes her guess what the box will accept.
The rail is for the second move, not the first. Grade, then subject, then format — that is the order she thinks in, so that is the order of the groups. Counts sit on every row: depth is the product, and she should feel it before she clicks.
She meets this card 24 at a time on a phone, so it does one job: say what this is, show it, price it, and give her one button. The thumbnail is the whole sheet. Not a letterbox crop of the top ~40%, which on a worksheet is the header and the “Name / Date” line — the part that is identical on every worksheet and tells her nothing. It is the whole page at its true 8.5:11. Order, colors, fonts and button are otherwise as they were.
aspect-ratio: 8.5/11. The product image is the whole sheet, uncropped — our images all measure 0.772–0.773 against letter’s 0.7727, so they are pages. She can tell what a worksheet is before she clicks it. That is the entire point of the card..is-media floats the still at its true ratio on the accent panel. The card keeps its shape; the frame keeps its content.✕ Rejected — words on the art
Title, price and CTA laid over a gradient scrim on the image, poster‑style. It looks good on a demo grid of hand‑picked worksheets and it fails on the real catalog: white type over unpredictable art, and a scrim that has to be QA’d against the darkest thumbnails forever. Same rule as the heart — the thumbnail is the product, so nothing sits on it.
✕ Rejected — price behind a hover
Revealing price and CTA on hover buys back the height the full page costs. It also hides the two things she’s deciding on, and it means nothing on a phone — where she is. Height is the cheaper thing to spend.
✓ Chosen — page above, words below
Every word sits on white where its contrast is a known token pair. Nothing depends on hover, nothing depends on the image being light enough. Cost, stated plainly: the card is ~37% taller than the 180px version, so roughly 1.9 rows land above a 900px fold instead of ~2.5. That is the trade, and it was made on purpose.

Justin Bieber Biography Reading Comprehension Worksheet

Third Grade Multiplication and Division Test Practice Worksheet

Story Map Graphic Organizer

Hexagon Song (Original Music Video)

Adding 8 Song (Lyric Music Video)
The same catalogue, for the other question. Grid answers “which of these looks right?”; list answers “which of these IS right?” — it trades the big page for a description and the full taxonomy on every row. She switches to it once she has already narrowed and is comparing four near-identical worksheets.

Justin Bieber Biography Reading Comprehension Worksheet
A one-page biography with five comprehension questions — read it, answer it, done.

Third Grade Multiplication and Division Test Practice Worksheet
Mixed multiplication and division practice in the test format they will actually see.

Story Map Graphic Organizer
Beginning, middle, end — the map they fill in after any read-aloud.

Hexagon Song (Original Music Video)
Two minutes of shapes, sung. Play it twice and they have it.

Adding 8 Song (Lyric Music Video)
The +8 facts as a chorus. Free, so she can try one before she buys ten.
The subject axis is deliberately short. Six colours is a legend she can hold; fourteen would just be the grade map again in a different order.
| Subject | Chip | Source hex | Chip hex | White text | Note |
|---|---|---|---|---|---|
| Phonics (incl. Alphabet) | Phonics (incl. Alphabet) | #CC2E2E | #CC2E2E | 4.71 : 1 ✓ | source |
| Reading · Writing | Reading · Writing | #7A3FA8 | #7A3FA8 | 5.66 : 1 ✓ | source |
| ELA · Holidays | ELA · Holidays | #34B26A | #247A49 | 4.54 : 1 ✓ | deepened — 2.7 : 1 at source |
| Math | Math | #0758A1 | #0758A1 | 6.02 : 1 ✓ | source |
| Science | Science | #D2470B | #C3420A | 4.51 : 1 ✓ | nudged for the alpha |
| Social Studies (+ Specials) | Social Studies (+ Specials) | #F0619E | #B04774 | 4.52 : 1 ✓ | deepened — 3.0 : 1 at source |
Every card gets one. But a favorite is a secondary, low-commitment action — it must never argue with “Add to Cart.” So it is small, and it lives in the header band — never a 44px outline sitting beside the button at equal weight, which reads as two buttons and no answer.
✕ Rejected — overlay on the image
The Pinterest/Etsy convention, and wrong here. Our thumbnail is the product. She judges a worksheet by reading it — the top-right corner is where the “Name / Date” fields live. A floating heart chip covers the very thing she’s evaluating, and on a light worksheet scan a white heart disappears entirely.
✕ Rejected — beside the button
It steals horizontal space from the CTA, forcing “Download” to shrink. And at equal size it reads as an equal choice — two buttons, no answer to “what do I do next?”
✓ Chosen — right of the header band
The band’s right side is dead space. The heart is always in the same place across a 24-card scroll, contrasts hard against every accent, never occludes the resource, and gives the CTA its full width back. It costs zero vertical height.
aria-pressed and a label that flips to “Remove from favorites.”Tap any heart above — the real thing fires at the bottom of your screen. The toast has one job: confirm the save, and offer the way back. It is brand navy, pinned bottom-centre, and it always offers Undo.
Note the corners. The toast is a 16px rounded rectangle, not a pill — see 06 — Radius encodes function. A pill container wrapping a pill Undo button is two identical shapes nested, and the whole toast starts to look pressable. It isn’t. Surface = 16px, action = pill.
✕ Rejected — the generic toast
Generic dark slate — not a brand color. Floating over the middle of the page, covering the headline she was reading. No undo, so a fat-finger tap is permanent. And “Added to favorites” is passive — it describes the system, not her.
✓ Chosen — the HFT toast
Brand navy pill, Nunito 800, pinned bottom-center where nothing lives. White circle + pink heart — the same heart she just tapped, so the confirmation looks like the action. And an Undo that actually reverts the card.
role="status" + aria-live="polite". A screen reader announces the save without stealing focus mid-scroll. Focus stays on the heart she tapped — never move focus into the toast.Radius, spacing & elevation
Radius encodes function. In this system a shape is a promise: a pill can be tapped, a rounded rectangle cannot. Everything interactive — buttons, tags, toggles, the Undo — is a full pill. Everything that holds things — cards, panels, the toast — takes the 16px surface radius. Follow that one rule and she never has to learn our UI; she can feel where to press.
Built to WCAG AA
Most of our audience browses on a phone, often tired, often at night. Every button and every tag on this site carries white text — one rule, no exceptions, no per‑element overrides. That means every interactive color has to be dark enough to earn it.
#F26E5F is the bright face you see in illustration and tints; orange #D2470B is the same color deep enough to put white words on. Never white text on coral. Never coral on a button.CSS variables (copy & paste)
Drop these into the theme, Elementor custom CSS, or global settings to roll out V2.1 consistently. Note the split between display colors (the bright sails — decoration only) and surface colors (deep enough to carry white text). Mixing them up is the one way to break accessibility here.
Design token CSS67 lines · click to expand
/* Have Fun Teaching — Design Tokens V2.1 (Pinwheel) */
:root{
/* ---- SURFACES: anything with white text on it ---- */
--navy-900:#12305A; --navy:#1B437D; /* PRIMARY — the wordmark */
--blue:#0758A1;
--cta:#D6337B; --cta-hover:#B62A67; /* deepened pink — THE button */
--green-deep:#1F8551;
--purple:#7A3FA8; --purple-700:#633389; /* music & sound — Songs */
--red:#CC2E2E; --red-700:#A82525; /* watch & play — Videos. NOT the error color */
--orange-burnt:#D2470B;
--slate:#5A6B7D;
/* ---- DISPLAY: illustration, tints, the logo. NEVER a text background ---- */
--sail-yellow:#FBB915; /* white text = 1.7:1 — fails hard */
--sail-green:#34B26A; /* white text = 2.7:1 — fails */
--sail-pink:#F0619E; /* white text = 3.0:1 — fails */
--sail-blue:#0758A1; /* the one sail that is also a surface */
/* ---- Neutrals ---- */
--ink:#231F20; --muted:#93A0AD;
--cream-50:#FFFCF6; --cream:#FBF5EC; --cream-200:#EEE6DA; --line:#E9E0D4;
/* ---- Semantic (all white-text safe) ---- */
--success:#1F8551; --warning:#D2470B; --error:#C9584E; --info:#0758A1;
/* ---- Type: three fonts, three jobs ---- */
--font-display:'Fredoka',sans-serif; /* headings — it IS the logo */
--font-body:'Nunito Sans',sans-serif; /* body + all UI */
--font-serif:'Source Serif 4',Georgia,serif; /* product titles, quotes, long-form */
--r-md:16px; --r-pill:30px; --container:1080px;
}
/* THE primary button. One per screen. White text, always. */
.btn-cta{
background:var(--cta); color:#fff;
font-family:var(--font-body); font-weight:800;
border-radius:var(--r-pill); padding:14px 30px;
min-height:44px; /* thumb target */
box-shadow:0 12px 26px -14px rgba(214,51,123,.75);
transition:background .18s, box-shadow .18s; /* never transform — hover must not move a button */
}
.btn-cta:hover{ background:var(--cta-hover); box-shadow:0 16px 30px -14px rgba(214,51,123,.85); }
/* PRESS — every button, everywhere. transform is allowed on :active ONLY. */
.btn-cta, .btn-navy, .btn-ghost, button, .woocommerce a.button, .elementor-button{
transition:background .18s, box-shadow .18s, color .18s,
transform .14s cubic-bezier(.2,.8,.3,1);
}
.btn-cta:active, .btn-navy:active, .btn-ghost:active, button:active,
.woocommerce a.button:active, .elementor-button:active{
transform:scale(.97);
box-shadow:0 2px 8px -6px rgba(31,42,68,.6);
transition-duration:.09s; /* down fast, back slow */
}
@media (prefers-reduced-motion:reduce){
.btn-cta:active, button:active{ transform:none; filter:brightness(.92); }
}
.btn-cta:focus-visible{ box-shadow:0 0 0 3px #fff,0 0 0 6px var(--blue); }
/* Secondary */
.btn-navy{ background:var(--navy); color:#fff; border-radius:var(--r-pill); }
.btn-navy:hover{ background:var(--navy-900); }
/* Ghost */
.btn-ghost{ background:#fff; color:var(--navy); border:2px solid var(--navy); border-radius:var(--r-pill); }
.btn-ghost:hover{ background:var(--navy); color:#fff; }
Logos & fonts in one place
Every version of the pinwheel identity, as clean SVG (wordmark already converted to outlines — no font needed to render it). Right‑click → Save, or use the links. 2400px PNGs live in /png, favicon sizes in /favicon.
App icon & favicon
WordPress Site Icon. 16 / 32 / 48 / 180 / 512.
⬇ Icon (navy)⬇ Icon (cream)⬇ 512px PNG⬇ 32px PNGFonts
Wordmark & headings = Fredoka (OFL) · Body & UI = Nunito Sans · Reading = Source Serif 4. Three fonts, three jobs.
⬇ Fredoka⬇ Nunito Sans⬇ Source Serif 4One file. The whole brand.
Exports this page — every rule, color, token and component — as a single self-contained HTML file you can email to a designer, a freelancer or a printer. No fonts to install, no assets to zip, no login. It opens in any browser and it is always in sync with this page, because it is this page.