Principles.
01Asymmetric magazine spreads. Big, generous white space. Type does the heavy lifting — boxes don't.
Navy + cyan, on cream. Lilac and cobalt are quiet tonal notes — never co-stars.
Hard offset shadows. 0–8 px corners. No glow, no blur. The brand has bite.
Real students. Real schools. Real wins. Numbers, names & institutions before adjectives.
Brand mark.
024-point diamond · "Ta" italic interior · use navy on cream
Cream on deep navy · use on dark sections only
3-size scatter · twinkle keyframe
Sub-brand pills · used in content cards
Academy.
Bricolage Grotesque 700 · stacked · period in cyan
Color.
03Two primaries. Three neutrals. Two quiet accents. That's it.
Typography.
04Three families. Bricolage Grotesque is the voice. Instrument Serif is the breath. Geist is the body.
Spacing & geometry.
05| Token | Value | Use |
|---|---|---|
--space-1 | 4 | icon gaps |
--space-2 | 8 | chip / pill internals |
--space-3 | 12 | nav padding |
--space-4 | 16 | card internals |
--space-6 | 24 | section internals |
--space-8 | 32 | component gaps |
--space-12 | 48 | section breaks |
--space-16 | 64 | page section start |
--space-24 | 96 | hero breathing |
| Token | Value | Use |
|---|---|---|
--r-sm | 2px | inputs |
--r-md | 4px | small chips |
--r-lg | 8px | max for any rectangle |
--r-pill | 999px | TA series badges only |
| Token | Value |
|---|---|
--shadow-card | 6px 6px 0 var(--ink) |
--shadow-card-lg | 10px 10px 0 var(--ink) |
--shadow-press | 2px 2px 0 var(--ink) |
12-col, gutter clamp(20px, 4vw, 56px), max-width 1440px. Sections breathe at clamp(64px, 9vw, 140px) block.
Components.
06- ↳ Try the studio
- ↳ Small-group · grouped by skill
- ↳ +$100 (one-time) for in-person
- ↳ A full term of work
- ↳ At least one tournament during the term
- ↳ +$100 (one-time) for in-person
- ↳ Senior instructor · $150 / hr
- ↳ Founder · $200 / hr
- ↳ +$50 / session for in-person
She cares enough to see the potential in a scared, 14 year old boy, even though he couldn't even see it in himself.
Ariel Ong Yi Ren · Assumption English Secondary
Voice & copy.
07Warm to students, clear to parents, credible to schools. Direct, dryly funny, never twee. Numbers and proper nouns over adjectives.
Sound smart. Win things.
Empowering tomorrow's leaders.
A class of four for $488. A free first session to see if we're a fit.
Investing in your child's potential through our holistic curriculum.
From anxious to winning competitions — Wang Hao Ming, EJC.
Hear from one of our many success stories!
Plain English. Specific numbers. No hard sell. Lead with what their child will actually do in a session.
Loose, confident, a little cheeky. "Just open your mouth and yap." Lean into the sport metaphor — practice, teams, finals.
Credentialed and grown-up. Refer to coaches by title, results by competition name, students by school.
Motion.
08Motion serves emphasis, not decoration. The brand twinkles — it doesn't bounce, slide or fade-in-from-everywhere.
Twinkle
Sparkles pulse on 3s loops, staggered. Used on hero marks only.
Reveal up
880ms, ease-out custom. Staggered by 60–140ms across sibling lines.
Marquee
40s linear loop. Used for the wins ticker only — duplicate content twice.
Cursor sparkle
One sparkle per ~5 mousemove events. Hero hero blocks only.
Page mockups.
09The system in situ. Click any page to open the full mockup.
Content model.
10Every page on the site is built around clearly separable content blocks — owner-editable from /admin via Decap CMS.
| Collection | Used on | Fields |
|---|---|---|
programmes | Home, Programs, Contact | name, eyebrow, summary, base_price, base_units (sessions/hr), tiers[ ] {label, price, units, meta}, addons[ ], featured_flag, order |
wins | Home (preview), Achievements | competition, year, team_name, school, placement (Champion / Silver / Finalist / Semi / Quarter), category, blurb, featured_flag, image_ref |
stories | Home, Stories | series ("Ta Student Stories" / "Ta Competes" / "Ta Testimonials" / "Ta Shares"), headline (rich, with italic-serif spans), lead, body, byline_name, byline_school, image_ref, canva_card_ref, published_at |
coaches | About | name, tier (Founder / Senior / Junior), bio, teaches (band labels), photo_ref, order |
faqs | FAQ, Programs | part ("About our classes" / "Others"), question (rich), answer (rich), order |
events | Calendar, Home ticker | name, kind (term-start / tournament / clinic / international), starts_on, ends_on, location, blurb, register_url, color_token, featured_flag |
schools | Home strip, Achievements roll | name, region (Sec/JC/Primary/University), win_count (derived from wins), logo_ref |
site_config | All pages | nav_links, contact_emails {hello, schools, press}, social_handles, footer_copy, stat_overrides (counters used on Home + About) |
Any headline or quote field accepts inline <em class="italic-serif"> spans —
that's the only inline mark the CMS needs to expose to editors. Everything else (color, weight, spacing) is decided by the template.
Photos are referenced by ID (image_ref) and rendered through Astro's image pipeline — square 4:5 by default, with focal-point support so portraits crop correctly. Canva social cards live in a separate canva_card_ref field so the originals can be re-shown verbatim.
--- competition: MIDS year: 2025 team_name: Raffles Institution 2 school: Raffles Institution placement: Champion category: Grand Final blurb: Mid-year Debate Invitationals. Grand Champions in a final against the defending team. featured_flag: true image_ref: img_mids25_ri2_grandfinal ---