<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Nature Happy — good things, plainly good for you</title> <script src="https://cdn.tailwindcss.com"></script> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,wght@0,400;0,500;0,600;0,700;1,500&family=Work+Sans:wght@400;500;600;700&display=swap" rel="stylesheet" /> <script> tailwind.config = { theme: { extend: { colors: { paper: '#FEFCFA', ink: '#2A2632', sage: '#6E9463', sagedeep: '#47643F', sagetint: '#E8F0E3', lilac: '#9B72C9', lilactint: '#F3ECFA', }, fontFamily: { display: ['"Fraunces"', 'serif'], sans: ['"Work Sans"', 'sans-serif'], }, }, }, }; </script> <style> html { scroll-behavior: smooth; } body { font-family: 'Work Sans', sans-serif; background: #FEFCFA; color: #2A2632; } .blob-1 { border-radius: 63% 37% 54% 46% / 43% 37% 63% 57%; } .blob-2 { border-radius: 42% 58% 61% 39% / 51% 44% 56% 49%; } .blob-3 { border-radius: 55% 45% 39% 61% / 60% 41% 59% 40%; } .blob-4 { border-radius: 48% 52% 66% 34% / 38% 53% 47% 62%; } .hero-in { opacity: 0; transform: translateY(14px); animation: heroIn 0.9s cubic-bezier(.22,.61,.36,1) forwards; } .hero-in.d1 { animation-delay: .08s; } .hero-in.d2 { animation-delay: .2s; } .hero-in.d3 { animation-delay: .32s; } .hero-in.d4 { animation-delay: .44s; } @keyframes heroIn { to { opacity: 1; transform: translateY(0); } } .hero-img-in { opacity: 0; transform: scale(.94); animation: heroImgIn 1.1s cubic-bezier(.22,.61,.36,1) forwards; animation-delay: .18s; } @keyframes heroImgIn { to { opacity: 1; transform: scale(1); } } @media (prefers-reduced-motion: reduce) { .hero-in, .hero-img-in { animation: none; opacity: 1; transform: none; } html { scroll-behavior: auto; } } .link-underline { background-image: linear-gradient(currentColor, currentColor); background-size: 0% 1px; background-position: 0 100%; background-repeat: no-repeat; transition: background-size .25s ease; } .link-underline:hover { background-size: 100% 1px; } @media (prefers-reduced-motion: reduce) { .link-underline { transition: none; } } </style> </head> <body class="bg-paper text-ink antialiased"> <!-- Header --> <header class="sticky top-0 z-40 bg-paper/95 backdrop-blur border-b border-sagetint"> <div class="max-w-6xl mx-auto px-6 h-20 flex items-center justify-between"> <a href="#" class="font-display text-2xl text-ink">Nature Happy</a> <nav class="hidden lg:flex items-center gap-9 text-[15px]"> <a href="#shop" class="link-underline hover:text-sagedeep transition-colors">Shop</a> <a href="#food" class="link-underline hover:text-sagedeep transition-colors">Food</a> <a href="#home" class="link-underline hover:text-sagedeep transition-colors">Home</a> <a href="#body" class="link-underline hover:text-sagedeep transition-colors">Body</a> <a href="#ideas" class="link-underline hover:text-sagedeep transition-colors">Ideas for living</a> </nav> <div class="hidden lg:block"> <a href="#newsletter" class="inline-flex items-center rounded-full bg-sagedeep text-paper text-[14px] font-medium px-5 py-2.5 hover:bg-ink transition-colors duration-200">Get the email</a> </div> <button id="menuBtn" aria-expanded="false" aria-controls="mobileMenu" class="lg:hidden inline-flex flex-col justify-center gap-[5px] w-9 h-9"> <span class="block h-[2px] w-6 bg-ink"></span> <span class="block h-[2px] w-6 bg-ink"></span> <span class="block h-[2px] w-4 bg-ink"></span> </button> </div> <div id="mobileMenu" class="hidden lg:hidden border-t border-sagetint bg-paper"> <div class="px-6 py-6 flex flex-col gap-5 text-[16px]"> <a href="#shop" class="mobile-link">Shop</a> <a href="#food" class="mobile-link">Food</a> <a href="#home" class="mobile-link">Home</a> <a href="#body" class="mobile-link">Body</a> <a href="#ideas" class="mobile-link">Ideas for living</a> <a href="#newsletter" class="inline-flex w-fit items-center rounded-full bg-sagedeep text-paper text-[14px] font-medium px-5 py-2.5 mt-1">Get the email</a> </div> </div> </header> <!-- Hero --> <section class="relative overflow-hidden"> <div class="max-w-6xl mx-auto px-6 pt-16 pb-20 lg:pt-24 lg:pb-28 grid lg:grid-cols-2 gap-14 items-center"> <div> <p class="hero-in d1 text-[15px] text-sagedeep font-medium mb-5">Food, nature, and everyday life</p> <h1 class="hero-in d2 font-display text-[2.75rem] leading-[1.08] sm:text-[3.4rem] sm:leading-[1.06] text-ink"> Good things,<br />plainly good for you. </h1> <p class="hero-in d3 mt-6 text-[18px] leading-relaxed text-ink/75 max-w-md"> Food, home, and body care picked for short ingredient lists and honest making — from the people who make them. </p> <div class="hero-in d4 mt-9 flex items-center gap-8 flex-wrap"> <a href="#shop" class="inline-flex items-center rounded-full bg-sagedeep text-paper text-[15px] font-medium px-7 py-3.5 hover:bg-ink transition-colors duration-200">Shop the essentials</a> <a href="#ideas" class="link-underline text-[15px] font-medium text-sagedeep">Read the journal</a> </div> </div> <div class="relative hero-img-in"> <div class="absolute -inset-6 sm:-inset-10 rounded-full bg-lilactint -z-10"></div> <div class="absolute -bottom-6 -left-4 w-16 h-16 rounded-full bg-lilac/70 -z-10"></div> <div class="overflow-hidden blob-1 aspect-[4/5] w-full max-w-md mx-auto"> <img src="https://images.pexels.com/photos/12969371/pexels-photo-12969371.jpeg?auto=compress&cs=tinysrgb&w=1200" alt="Sunlit hands cradling soil and a young seedling" class="w-full h-full object-cover" /> </div> </div> </div> </section> <!-- Editorial statement --> <section class="bg-lilactint"> <div class="max-w-6xl mx-auto px-6 py-20 lg:py-24 grid lg:grid-cols-[auto_1fr] gap-8 lg:gap-16 items-start"> <div class="w-10 h-10 rounded-full bg-lilac shrink-0 mt-2"></div> <p class="font-display italic text-[1.6rem] sm:text-[2rem] leading-[1.35] text-ink max-w-2xl"> Nature Happy starts with the thing itself — an ingredient, an object, a recipe, a maker — and follows it wherever it goes. </p> </div> </section> <!-- Territories --> <section class="bg-paper"> <div class="max-w-6xl mx-auto px-6 py-20 lg:py-28"> <div class="grid sm:grid-cols-2 gap-8"> <div id="food" class="group rounded-3xl overflow-hidden bg-white border border-ink/10 shadow-sm hover:shadow-xl transition-shadow duration-300"> <div class="overflow-hidden aspect-[6/5]"> <img src="https://www.naturehappy.co.za/wp-content/uploads/2026/09/pexels-photo-36096929-3.jpeg" alt="Fresh green beans piled in a wooden crate at an outdoor market" class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105" /> </div> <div class="p-7"> <span class="text-[11px] font-semibold tracking-widest uppercase text-sagedeep">Food</span> <h3 class="font-display text-[1.4rem] text-ink mt-2">What's in season, what's in the pantry</h3> <p class="mt-2 text-[14px] leading-relaxed text-ink/70">The recipes we keep coming back to, the ingredients behind them, and the people who grow them.</p> <a href="#" class="link-underline inline-block mt-4 text-[14px] font-medium text-sagedeep">Explore Food</a> </div> </div> <div id="home" class="group rounded-3xl overflow-hidden bg-white border border-ink/10 shadow-sm hover:shadow-xl transition-shadow duration-300"> <div class="overflow-hidden aspect-[6/5]"> <img src="https://www.naturehappy.co.za/wp-content/uploads/2026/09/pexels-photo-32960958-scaled.jpeg" alt="A cozy kitchen nook with warm sunlight through the window" class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105" /> </div> <div class="p-7"> <span class="text-[11px] font-semibold tracking-widest uppercase text-lilac">Home</span> <h3 class="font-display text-[1.4rem] text-ink mt-2">Things for the kitchen and the house</h3> <p class="mt-2 text-[14px] leading-relaxed text-ink/70">Tools and materials made to be used every day, built to outlast a season.</p> <a href="#" class="link-underline inline-block mt-4 text-[14px] font-medium text-sagedeep">Explore Home</a> </div> </div> <div id="body" class="group rounded-3xl overflow-hidden bg-white border border-ink/10 shadow-sm hover:shadow-xl transition-shadow duration-300"> <div class="overflow-hidden aspect-[6/5]"> <img src="https://www.naturehappy.co.za/wp-content/uploads/2026/09/pexels-photo-35101526-scaled.jpeg" alt="A minimalist flat lay of a natural skincare serum bottle in soft light" class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105" /> </div> <div class="p-7"> <span class="text-[11px] font-semibold tracking-widest uppercase text-lilac">Body</span> <h3 class="font-display text-[1.4rem] text-ink mt-2">Care with a short ingredient list</h3> <p class="mt-2 text-[14px] leading-relaxed text-ink/70">Skincare we can explain in a sentence. A considered edit, not a full shelf.</p> <a href="#" class="link-underline inline-block mt-4 text-[14px] font-medium text-sagedeep">Explore Body</a> </div> </div> <div id="ideas" class="group rounded-3xl overflow-hidden bg-white border border-ink/10 shadow-sm hover:shadow-xl transition-shadow duration-300"> <div class="overflow-hidden aspect-[6/5]"> <img src="https://www.naturehappy.co.za/wp-content/uploads/2026/09/pexels-photo-7728876-3.jpeg" alt="Close-up of hands tending to soil in a garden" class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105" /> </div> <div class="p-7"> <span class="text-[11px] font-semibold tracking-widest uppercase text-sagedeep">Ideas for living</span> <h3 class="font-display text-[1.4rem] text-ink mt-2">Eat. Make. Create. Explore.</h3> <p class="mt-2 text-[14px] leading-relaxed text-ink/70">Guides and small experiments. We try the thing, then write down what happened.</p> <a href="#" class="link-underline inline-block mt-4 text-[14px] font-medium text-sagedeep">Explore Ideas for living</a> </div> </div> </div> </div> </section> <!-- Featured story (text-only, deliberate no-photo treatment) --> <section class="bg-sagedeep text-paper"> <div class="max-w-6xl mx-auto px-6 py-20 lg:py-24"> <div class="max-w-2xl"> <h2 class="font-display text-[2rem] sm:text-[2.5rem] leading-[1.15]">Five ingredients, one afternoon, a loaf of bread.</h2> <p class="mt-5 text-[17px] leading-relaxed text-paper/80">No starter, no stand mixer, no waiting three days for a rise. Just the version of no-knead bread we actually make on a Tuesday.</p> <a href="#" class="link-underline inline-block mt-6 text-[15px] font-medium">Read the story</a> </div> </div> </section> <!-- The edit (flat colour-block treatment, no stock photos) --> <section id="shop" class="bg-paper"> <div class="max-w-6xl mx-auto px-6 py-20 lg:py-28"> <h2 class="font-display text-[1.9rem] sm:text-[2.2rem] text-ink max-w-md">A short list of things we're enjoying.</h2> <div class="mt-12 grid sm:grid-cols-3 gap-6"> <div class="bg-sagetint p-8 rounded-[2rem]"> <div class="w-14 h-14 rounded-full bg-sage/60 blob-2"></div> <h3 class="font-display text-[1.25rem] mt-6 text-ink">Raw wildflower honey</h3> <p class="mt-2 text-[14px] leading-relaxed text-ink/70">One hive, one harvest, unfiltered.</p> </div> <div class="bg-lilactint p-8 rounded-[2rem]"> <div class="w-14 h-14 rounded-full bg-lilac/60 blob-3"></div> <h3 class="font-display text-[1.25rem] mt-6 text-ink">Cederberg rooibos, loose-leaf</h3> <p class="mt-2 text-[14px] leading-relaxed text-ink/70">Sun-dried on the same slopes for a hundred years.</p> </div> <div class="bg-sagetint p-8 rounded-[2rem]"> <div class="w-14 h-14 rounded-full bg-sage/60 blob-4"></div> <h3 class="font-display text-[1.25rem] mt-6 text-ink">Hand-thrown stoneware</h3> <p class="mt-2 text-[14px] leading-relaxed text-ink/70">Every piece slightly different, on purpose.</p> </div> </div> </div> </section> <!-- Newsletter --> <section id="newsletter" class="bg-lilactint text-ink"> <div class="max-w-xl mx-auto px-6 py-20 lg:py-24 text-center"> <h2 class="font-display text-[1.9rem] sm:text-[2.2rem]">Get the occasional email.</h2> <p class="mt-4 text-[15px] leading-relaxed text-ink/70">New stories, seasonal food, and anything we add to the shop. No more than once a week.</p> <form class="mt-8 flex flex-col sm:flex-row gap-3 justify-center"> <label for="email" class="sr-only">Email address</label> <input id="email" type="email" required placeholder="you@example.com" class="rounded-full px-5 py-3 text-[15px] text-ink bg-paper placeholder:text-ink/40 border border-lilac/30 focus:outline-none focus:ring-2 focus:ring-sagedeep w-full sm:w-72" /> <button type="submit" class="rounded-full px-7 py-3 text-[15px] font-medium bg-sagedeep text-paper hover:bg-ink transition-colors duration-200">Subscribe</button> </form> </div> </section> <!-- Footer --> <footer class="bg-paper border-t border-sagetint"> <div class="max-w-6xl mx-auto px-6 py-14 flex flex-col sm:flex-row sm:items-start justify-between gap-10"> <div> <p class="font-display text-xl text-ink">Nature Happy</p> <p class="mt-3 text-[14px] text-ink/60">Food, nature, and everyday life.</p> <p class="text-[14px] text-ink/60">naturehappy.co.za</p> </div> <nav class="flex flex-col gap-3 text-[14px]"> <a href="#shop" class="link-underline text-ink/80 hover:text-sagedeep w-fit">Shop</a> <a href="#food" class="link-underline text-ink/80 hover:text-sagedeep w-fit">Food</a> <a href="#home" class="link-underline text-ink/80 hover:text-sagedeep w-fit">Home</a> <a href="#body" class="link-underline text-ink/80 hover:text-sagedeep w-fit">Body</a> <a href="#ideas" class="link-underline text-ink/80 hover:text-sagedeep w-fit">Ideas for living</a> </nav> </div> </footer> <style> .mobile-link { color: #2A2632; } </style> <script> const menuBtn = document.getElementById('menuBtn'); const mobileMenu = document.getElementById('mobileMenu'); menuBtn.addEventListener('click', () => { const isOpen = mobileMenu.classList.contains('hidden') === false; mobileMenu.classList.toggle('hidden'); menuBtn.setAttribute('aria-expanded', String(!isOpen)); }); mobileMenu.addEventListener('click', (e) => { if (e.target.tagName === 'A') { mobileMenu.classList.add('hidden'); menuBtn.setAttribute('aria-expanded', 'false'); } }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && !mobileMenu.classList.contains('hidden')) { mobileMenu.classList.add('hidden'); menuBtn.setAttribute('aria-expanded', 'false'); } }); </script> </body> </html>