Keen Ember Studio

Graphic design for beginners

Find your shape. Build your visual voice.

Learn to turn ideas into clear, thoughtful visuals with guided exercises in composition, typography, color, and creative direction.

The beginner route

From paper-to-pixel practice to a portfolio-ready point of view.

A steady sequence built around quiet geometry, useful feedback, and repeatable habits.

A gentler way to learn

Practical foundations, visible progress.

See the structure

Understand hierarchy, balance, spacing, and rhythm before decoration takes over.

Make with intention

Use approachable prompts to create posters, social graphics, brand marks, and editorial layouts.

Reflect and refine

Build a repeatable critique habit that turns uncertainty into clear next steps.

Structured for real growth

Four modules. Clear outcomes.

01

Shape & Space

Master foundational geometry and composition through daily sketches.

02

Typography Voice

Build confidence with type hierarchy, pairings, and editorial pacing.

03

Color & Emotion

Learn to select and apply palettes with terracotta rhythm and nuance.

04

Portfolio Finish

Polish three final projects with mentor feedback and clear presentation.

Choose your next small step

A calm catalog for curious first-time designers.

Ask your route question

Learner perspectives

"The pace feels humane. Each week gave me quiet geometry I could actually apply at my job the same afternoon."

— Maya Torres, Brand Designer

"I came in with zero confidence. Now my work looks intentional. The terracotta rhythm exercises changed how I see color."

— Leo Rivera, Freelance Illustrator

`; const footerHTML = ``; document.getElementById('site-header').innerHTML = headerHTML; document.getElementById('site-footer').innerHTML = footerHTML; // Initialize mobile menu const mobileToggle = document.getElementById('mobile-menu-toggle'); const mobileNav = document.getElementById('mobile-nav'); if (mobileToggle && mobileNav) { mobileToggle.addEventListener('click', () => { mobileNav.classList.toggle('hidden'); }); } // Theme toggle const themeBtn = document.getElementById('theme-toggle'); if (themeBtn) { themeBtn.addEventListener('click', () => { document.documentElement.classList.toggle('dark'); localStorage.setItem('kes-theme', document.documentElement.classList.contains('dark') ? 'dark' : 'light'); }); if (localStorage.getItem('kes-theme') === 'dark') { document.documentElement.classList.add('dark'); } } // Modal logic document.querySelectorAll('[data-modal-open]').forEach(btn => { btn.addEventListener('click', () => { const modalId = btn.getAttribute('data-modal-open'); const modal = document.getElementById(modalId); if (modal) modal.classList.remove('hidden'); }); }); document.querySelectorAll('[data-modal-close]').forEach(btn => { btn.addEventListener('click', () => { btn.closest('.fixed').classList.add('hidden'); }); }); // Form validation const loginForm = document.getElementById('login-form'); if (loginForm) { loginForm.addEventListener('submit', e => { e.preventDefault(); if (loginForm.checkValidity()) { alert('Thank you. Check your email for next steps.'); loginForm.closest('.fixed').classList.add('hidden'); } }); } const registerForm = document.getElementById('register-form'); if (registerForm) { registerForm.addEventListener('submit', e => { e.preventDefault(); if (registerForm.checkValidity()) { alert('Welcome! Your account is ready.'); registerForm.closest('.fixed').classList.add('hidden'); } }); } } // Cookie banner script function initCookieBanner() { const banner = document.getElementById('cookie-banner'); const acceptBtn = document.getElementById('accept-cookies'); const consentKey = 'kes-cookie-consent'; if (localStorage.getItem(consentKey)) { if (banner) banner.style.display = 'none'; } else { if (banner) banner.style.display = 'block'; if (acceptBtn) { acceptBtn.addEventListener('click', () => { localStorage.setItem(consentKey, 'accepted'); if (banner) banner.style.display = 'none'; }); } } } function initializeAll() { initTailwindTheme(); insertComponents(); setTimeout(() => { initCookieBanner(); }, 600); } window.onload = initializeAll;