MoonshotAI Kimi K2.7 Code – Hobbies and Interests
via Moonshot AI · Generated
- AIMAC Debt 2.66
- Cost $0.12
- Total Violations 2
- HTML Size 52 KB
- Em Dashes 1
Screenshot
View Live Page
Accessibility Issues Found
2 Serious
-
color-contrast serious 2 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<p class="text-sm text-teal-200 mt-4">No spam. Unsubscribe anytime.</p>
Artifacts
View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Craft & Compass — Where Curious Makers Find Their Way</title>
<meta name="description" content="Craft & Compass is the home for hobbyists, crafters, and collectors. Discover tutorials, connect with local clubs, share your projects, and level up your creative process." />
<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=Inter:wght@300;400;500;600;700&family=Playfair+Display:wght@600;700&display=swap" rel="stylesheet" />
<script src="https://unpkg.com/lucide@latest"></script>
<style>
:root {
--brand-900: #1e293b;
--brand-700: #334155;
--brand-500: #0d9488;
--brand-100: #f0fdfa;
--accent-500: #f59e0b;
}
body { font-family: 'Inter', sans-serif; }
h1, h2, h3, .display { font-family: 'Playfair Display', serif; }
.fade-in { animation: fadeIn 0.4s ease-in-out; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
.gallery-item { transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); }
.gallery-item.hidden-item { display: none; }
.accordion-content { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; }
.accordion-content.open { max-height: 300px; }
.nav-scrolled { background-color: rgba(255,255,255,0.95); backdrop-filter: blur(12px); box-shadow: 0 1px 3px rgba(0,0,0,0.08); }
</style>
</head>
<body class="bg-slate-50 text-slate-800 antialiased">
<!-- Header -->
<header id="site-header" class="fixed top-0 left-0 right-0 z-50 bg-white/90 backdrop-blur-md border-b border-slate-100 transition-all duration-300">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex items-center justify-between h-20">
<a href="#" class="flex items-center gap-3 group">
<img src="https://placehold.co/48x48/0d9488/ffffff?text=C%26C&font=montserrat" alt="Craft and Compass logo" class="w-10 h-10 rounded-lg shadow-sm" />
<div>
<span class="block text-xl font-bold text-slate-900 leading-none group-hover:text-teal-700 transition-colors">Craft & Compass</span>
<span class="block text-xs text-slate-500 tracking-wide mt-1">Where Curious Makers Find Their Way</span>
</div>
</a>
<!-- Desktop Nav -->
<nav class="hidden lg:flex items-center gap-1">
<a href="#home" class="px-4 py-2 text-sm font-medium text-slate-700 hover:text-teal-700 hover:bg-teal-50 rounded-full transition">Home</a>
<a href="#explore" class="px-4 py-2 text-sm font-medium text-slate-700 hover:text-teal-700 hover:bg-teal-50 rounded-full transition">Explore Hobbies</a>
<a href="#projects" class="px-4 py-2 text-sm font-medium text-slate-700 hover:text-teal-700 hover:bg-teal-50 rounded-full transition">Projects</a>
<a href="#events" class="px-4 py-2 text-sm font-medium text-slate-700 hover:text-teal-700 hover:bg-teal-50 rounded-full transition">Events</a>
<a href="#community" class="px-4 py-2 text-sm font-medium text-slate-700 hover:text-teal-700 hover:bg-teal-50 rounded-full transition">Community</a>
<a href="#resources" class="px-4 py-2 text-sm font-medium text-slate-700 hover:text-teal-700 hover:bg-teal-50 rounded-full transition">Resources</a>
<a href="#about" class="px-4 py-2 text-sm font-medium text-slate-700 hover:text-teal-700 hover:bg-teal-50 rounded-full transition">About</a>
</nav>
<div class="hidden lg:flex items-center gap-3">
<a href="#newsletter" class="px-5 py-2.5 text-sm font-semibold text-teal-700 bg-teal-50 hover:bg-teal-100 rounded-full transition">Sign In</a>
<a href="#newsletter" class="px-5 py-2.5 text-sm font-semibold text-white bg-teal-700 hover:bg-teal-800 rounded-full shadow-md hover:shadow-lg transition">Join Free</a>
</div>
<!-- Mobile menu button -->
<button id="mobile-menu-btn" class="lg:hidden p-2 text-slate-700 hover:text-teal-700" aria-label="Open menu">
<i data-lucide="menu" class="w-6 h-6"></i>
</button>
</div>
</div>
<!-- Mobile Nav -->
<div id="mobile-menu" class="hidden lg:hidden bg-white border-t border-slate-100">
<div class="px-4 py-4 space-y-1">
<a href="#home" class="block px-4 py-3 text-base font-medium text-slate-700 hover:bg-teal-50 hover:text-teal-700 rounded-lg">Home</a>
<a href="#explore" class="block px-4 py-3 text-base font-medium text-slate-700 hover:bg-teal-50 hover:text-teal-700 rounded-lg">Explore Hobbies</a>
<a href="#projects" class="block px-4 py-3 text-base font-medium text-slate-700 hover:bg-teal-50 hover:text-teal-700 rounded-lg">Projects</a>
<a href="#events" class="block px-4 py-3 text-base font-medium text-slate-700 hover:bg-teal-50 hover:text-teal-700 rounded-lg">Events</a>
<a href="#community" class="block px-4 py-3 text-base font-medium text-slate-700 hover:bg-teal-50 hover:text-teal-700 rounded-lg">Community</a>
<a href="#resources" class="block px-4 py-3 text-base font-medium text-slate-700 hover:bg-teal-50 hover:text-teal-700 rounded-lg">Resources</a>
<a href="#about" class="block px-4 py-3 text-base font-medium text-slate-700 hover:bg-teal-50 hover:text-teal-700 rounded-lg">About</a>
<div class="pt-4 flex flex-col gap-2">
<a href="#newsletter" class="w-full text-center px-5 py-3 text-sm font-semibold text-teal-700 bg-teal-50 rounded-full">Sign In</a>
<a href="#newsletter" class="w-full text-center px-5 py-3 text-sm font-semibold text-white bg-teal-700 rounded-full">Join Free</a>
</div>
</div>
</div>
</header>
<main>
<!-- Hero -->
<section id="home" class="relative pt-32 pb-20 lg:pt-44 lg:pb-28 overflow-hidden">
<div class="absolute inset-0 -z-10">
<img src="https://picsum.photos/1600/900?grayscale" alt="Maker workspace background" class="w-full h-full object-cover opacity-20" />
<div class="absolute inset-0 bg-gradient-to-b from-slate-50/80 via-slate-50/90 to-slate-50"></div>
</div>
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="max-w-3xl">
<span class="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-teal-100 text-teal-800 text-xs font-bold tracking-wide uppercase mb-6">
<i data-lucide="compass" class="w-4 h-4"></i>
The Hobbyist's Home Base
</span>
<h1 class="text-5xl lg:text-7xl font-bold text-slate-900 leading-[1.1] mb-6">
Discover your next <span class="text-teal-700 italic">obsession</span>.
</h1>
<p class="text-lg lg:text-xl text-slate-600 leading-relaxed mb-8">
Craft & Compass is the community platform for makers, collectors, restorers, and curious beginners. Whether you're hand-tooling leather, restoring vintage radios, or learning to bind your first journal, we connect you with expert guidance, local clubs, and a gallery of inspiring projects from real hobbyists around the world.
</p>
<div class="flex flex-col sm:flex-row gap-4">
<a href="#explore" class="inline-flex items-center justify-center gap-2 px-8 py-4 text-base font-semibold text-white bg-teal-700 hover:bg-teal-800 rounded-full shadow-lg hover:shadow-xl transition">
Explore Hobbies
<i data-lucide="arrow-right" class="w-5 h-5"></i>
</a>
<a href="#projects" class="inline-flex items-center justify-center gap-2 px-8 py-4 text-base font-semibold text-slate-700 bg-white border border-slate-200 hover:border-teal-300 hover:bg-teal-50 rounded-full transition">
Browse Gallery
</a>
</div>
</div>
</div>
</section>
<!-- Stats strip -->
<section class="border-y border-slate-200 bg-white">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-10">
<div class="grid grid-cols-2 md:grid-cols-4 gap-8 text-center">
<div>
<p class="text-3xl font-bold text-slate-900">240+</p>
<p class="text-sm text-slate-500 mt-1">Curated Tutorials</p>
</div>
<div>
<p class="text-3xl font-bold text-slate-900">18k</p>
<p class="text-sm text-slate-500 mt-1">Active Members</p>
</div>
<div>
<p class="text-3xl font-bold text-slate-900">450</p>
<p class="text-sm text-slate-500 mt-1">Local Clubs</p>
</div>
<div>
<p class="text-3xl font-bold text-slate-900">9.2k</p>
<p class="text-sm text-slate-500 mt-1">Shared Projects</p>
</div>
</div>
</div>
</section>
<!-- Explore Hobbies -->
<section id="explore" class="py-20 lg:py-28 bg-white">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="max-w-2xl mb-14">
<h2 class="text-4xl font-bold text-slate-900 mb-4">Explore every corner of the maker world</h2>
<p class="text-lg text-slate-600">
From traditional handmade crafts to tech-driven builds, our categories cover the full spectrum of hobbies and interests. Each path includes beginner fundamentals, advanced techniques, safety guides, and project templates to help you grow with confidence.
</p>
</div>
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
<!-- Card 1 -->
<article class="group rounded-2xl bg-slate-50 border border-slate-100 overflow-hidden hover:shadow-xl transition">
<div class="h-52 overflow-hidden">
<img src="https://picsum.photos/600/400?random=1" alt="Woodworking bench" class="w-full h-full object-cover group-hover:scale-105 transition duration-500" />
</div>
<div class="p-6">
<div class="flex items-center gap-2 mb-3">
<i data-lucide="tree-pine" class="w-5 h-5 text-teal-700"></i>
<h3 class="text-xl font-bold text-slate-900">Woodworking</h3>
</div>
<p class="text-slate-600 mb-5 leading-relaxed">
Master joinery, sharpening, and finishing through project-based lessons. Build everything from hand-cut dovetail boxes to sculpted live-edge furniture while learning how to read grain and choose the right species for your climate.
</p>
<a href="#projects" class="inline-flex items-center gap-2 text-sm font-semibold text-teal-700 hover:text-teal-800">
Try Tutorial <i data-lucide="arrow-right" class="w-4 h-4"></i>
</a>
</div>
</article>
<!-- Card 2 -->
<article class="group rounded-2xl bg-slate-50 border border-slate-100 overflow-hidden hover:shadow-xl transition">
<div class="h-52 overflow-hidden">
<img src="https://picsum.photos/600/400?random=2" alt="Fiber arts yarn" class="w-full h-full object-cover group-hover:scale-105 transition duration-500" />
</div>
<div class="p-6">
<div class="flex items-center gap-2 mb-3">
<i data-lucide="scissors" class="w-5 h-5 text-teal-700"></i>
<h3 class="text-xl font-bold text-slate-900">Fiber Arts</h3>
</div>
<p class="text-slate-600 mb-5 leading-relaxed">
Knitting, crocheting, weaving, and embroidery for every skill level. Explore color theory, sustainable fiber sourcing, pattern drafting, and the meditative creative process behind slow, handmade textiles.
</p>
<a href="#projects" class="inline-flex items-center gap-2 text-sm font-semibold text-teal-700 hover:text-teal-800">
Try Tutorial <i data-lucide="arrow-right" class="w-4 h-4"></i>
</a>
</div>
</article>
<!-- Card 3 -->
<article class="group rounded-2xl bg-slate-50 border border-slate-100 overflow-hidden hover:shadow-xl transition">
<div class="h-52 overflow-hidden">
<img src="https://picsum.photos/600/400?random=3" alt="Miniature model" class="w-full h-full object-cover group-hover:scale-105 transition duration-500" />
</div>
<div class="p-6">
<div class="flex items-center gap-2 mb-3">
<i data-lucide="box" class="w-5 h-5 text-teal-700"></i>
<h3 class="text-xl font-bold text-slate-900">Models & Miniatures</h3>
</div>
<p class="text-slate-600 mb-5 leading-relaxed">
Scale modeling, dioramas, miniature painting, and terrain building. Learn precision assembly, airbrushing, weathering, and how to photograph your finished pieces for competitions and online showcases.
</p>
<a href="#projects" class="inline-flex items-center gap-2 text-sm font-semibold text-teal-700 hover:text-teal-800">
Try Tutorial <i data-lucide="arrow-right" class="w-4 h-4"></i>
</a>
</div>
</article>
<!-- Card 4 -->
<article class="group rounded-2xl bg-slate-50 border border-slate-100 overflow-hidden hover:shadow-xl transition">
<div class="h-52 overflow-hidden">
<img src="https://picsum.photos/600/400?random=4" alt="Restored furniture" class="w-full h-full object-cover group-hover:scale-105 transition duration-500" />
</div>
<div class="p-6">
<div class="flex items-center gap-2 mb-3">
<i data-lucide="refresh-cw" class="w-5 h-5 text-teal-700"></i>
<h3 class="text-xl font-bold text-slate-900">Restoration & Upcycling</h3>
</div>
<p class="text-slate-600 mb-5 leading-relaxed">
Give old objects new life. Our restoration guides cover furniture repair, rust removal, vintage electronics, textile mending, and ethical sourcing of period-correct materials and hardware.
</p>
<a href="#projects" class="inline-flex items-center gap-2 text-sm font-semibold text-teal-700 hover:text-teal-800">
Try Tutorial <i data-lucide="arrow-right" class="w-4 h-4"></i>
</a>
</div>
</article>
<!-- Card 5 -->
<article class="group rounded-2xl bg-slate-50 border border-slate-100 overflow-hidden hover:shadow-xl transition">
<div class="h-52 overflow-hidden">
<img src="https://picsum.photos/600/400?random=5" alt="Paper craft tools" class="w-full h-full object-cover group-hover:scale-105 transition duration-500" />
</div>
<div class="p-6">
<div class="flex items-center gap-2 mb-3">
<i data-lucide="layers" class="w-5 h-5 text-teal-700"></i>
<h3 class="text-xl font-bold text-slate-900">Paper & Book Arts</h3>
</div>
<p class="text-slate-600 mb-5 leading-relaxed">
Bookbinding, printmaking, origami, and paper engineering. Develop an eye for typography, paper grain direction, and archival adhesives while creating handmade journals, letterpress prints, and pop-up cards.
</p>
<a href="#projects" class="inline-flex items-center gap-2 text-sm font-semibold text-teal-700 hover:text-teal-800">
Try Tutorial <i data-lucide="arrow-right" class="w-4 h-4"></i>
</a>
</div>
</article>
<!-- Card 6 -->
<article class="group rounded-2xl bg-slate-50 border border-slate-100 overflow-hidden hover:shadow-xl transition">
<div class="h-52 overflow-hidden">
<img src="https://picsum.photos/600/400?random=6" alt="Electronics project" class="w-full h-full object-cover group-hover:scale-105 transition duration-500" />
</div>
<div class="p-6">
<div class="flex items-center gap-2 mb-3">
<i data-lucide="cpu" class="w-5 h-5 text-teal-700"></i>
<h3 class="text-xl font-bold text-slate-900">Electronics & Arduino</h3>
</div>
<p class="text-slate-600 mb-5 leading-relaxed">
Learn circuits, soldering, microcontrollers, and IoT projects. Our beginner-friendly path takes you from blinking an LED to designing custom PCBs and building interactive art installations.
</p>
<a href="#projects" class="inline-flex items-center gap-2 text-sm font-semibold text-teal-700 hover:text-teal-800">
Try Tutorial <i data-lucide="arrow-right" class="w-4 h-4"></i>
</a>
</div>
</article>
</div>
</div>
</section>
<!-- Community Gallery (Interactive) -->
<section id="projects" class="py-20 lg:py-28 bg-slate-50">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex flex-col lg:flex-row lg:items-end lg:justify-between gap-6 mb-12">
<div class="max-w-2xl">
<h2 class="text-4xl font-bold text-slate-900 mb-4">Community gallery</h2>
<p class="text-lg text-slate-600">
Real projects from real makers. Use the filters below to explore the latest community submissions, find inspiration for your own work, and connect with creators whose style matches your interests.
</p>
</div>
<a href="#community" class="inline-flex items-center justify-center gap-2 px-6 py-3 text-sm font-semibold text-white bg-teal-700 hover:bg-teal-800 rounded-full shadow transition">
Submit Your Project
<i data-lucide="upload" class="w-4 h-4"></i>
</a>
</div>
<!-- Filter Controls -->
<div class="flex flex-wrap gap-3 mb-10" id="gallery-filters">
<button data-filter="all" class="filter-btn active px-5 py-2 text-sm font-semibold rounded-full bg-teal-700 text-white shadow transition">All</button>
<button data-filter="wood" class="filter-btn px-5 py-2 text-sm font-semibold rounded-full bg-white text-slate-600 border border-slate-200 hover:border-teal-300 hover:text-teal-700 transition">Wood</button>
<button data-filter="fiber" class="filter-btn px-5 py-2 text-sm font-semibold rounded-full bg-white text-slate-600 border border-slate-200 hover:border-teal-300 hover:text-teal-700 transition">Fiber</button>
<button data-filter="paper" class="filter-btn px-5 py-2 text-sm font-semibold rounded-full bg-white text-slate-600 border border-slate-200 hover:border-teal-300 hover:text-teal-700 transition">Paper</button>
<button data-filter="tech" class="filter-btn px-5 py-2 text-sm font-semibold rounded-full bg-white text-slate-600 border border-slate-200 hover:border-teal-300 hover:text-teal-700 transition">Tech</button>
<button data-filter="restoration" class="filter-btn px-5 py-2 text-sm font-semibold rounded-full bg-white text-slate-600 border border-slate-200 hover:border-teal-300 hover:text-teal-700 transition">Restoration</button>
</div>
<!-- Gallery Grid -->
<div id="gallery-grid" class="grid sm:grid-cols-2 lg:grid-cols-4 gap-6">
<!-- Item 1 -->
<figure class="gallery-item group rounded-xl overflow-hidden bg-white shadow-sm hover:shadow-lg" data-category="wood">
<div class="relative h-64 overflow-hidden">
<img src="https://picsum.photos/400/400?random=10" alt="Handmade walnut bowl" class="w-full h-full object-cover group-hover:scale-110 transition duration-700" />
<div class="absolute top-3 left-3 px-3 py-1 text-xs font-bold text-teal-900 bg-teal-100 rounded-full">Wood</div>
</div>
<figcaption class="p-4">
<p class="font-semibold text-slate-900">Walnut Bowl</p>
<p class="text-sm text-slate-500">by Marcus T.</p>
</figcaption>
</figure>
<!-- Item 2 -->
<figure class="gallery-item group rounded-xl overflow-hidden bg-white shadow-sm hover:shadow-lg" data-category="fiber">
<div class="relative h-64 overflow-hidden">
<img src="https://picsum.photos/400/400?random=11" alt="Hand-knit sweater" class="w-full h-full object-cover group-hover:scale-110 transition duration-700" />
<div class="absolute top-3 left-3 px-3 py-1 text-xs font-bold text-rose-900 bg-rose-100 rounded-full">Fiber</div>
</div>
<figcaption class="p-4">
<p class="font-semibold text-slate-900">Cable-Knit Sweater</p>
<p class="text-sm text-slate-500">by Elena R.</p>
</figcaption>
</figure>
<!-- Item 3 -->
<figure class="gallery-item group rounded-xl overflow-hidden bg-white shadow-sm hover:shadow-lg" data-category="tech">
<div class="relative h-64 overflow-hidden">
<img src="https://picsum.photos/400/400?random=12" alt="Custom synth module" class="w-full h-full object-cover group-hover:scale-110 transition duration-700" />
<div class="absolute top-3 left-3 px-3 py-1 text-xs font-bold text-indigo-900 bg-indigo-100 rounded-full">Tech</div>
</div>
<figcaption class="p-4">
<p class="font-semibold text-slate-900">DIY Synth Module</p>
<p class="text-sm text-slate-500">by David K.</p>
</figcaption>
</figure>
<!-- Item 4 -->
<figure class="gallery-item group rounded-xl overflow-hidden bg-white shadow-sm hover:shadow-lg" data-category="restoration">
<div class="relative h-64 overflow-hidden">
<img src="https://picsum.photos/400/400?random=13" alt="Restored mid-century chair" class="w-full h-full object-cover group-hover:scale-110 transition duration-700" />
<div class="absolute top-3 left-3 px-3 py-1 text-xs font-bold text-amber-900 bg-amber-100 rounded-full">Restoration</div>
</div>
<figcaption class="p-4">
<p class="font-semibold text-slate-900">Mid-Century Chair</p>
<p class="text-sm text-slate-500">by Priya S.</p>
</figcaption>
</figure>
<!-- Item 5 -->
<figure class="gallery-item group rounded-xl overflow-hidden bg-white shadow-sm hover:shadow-lg" data-category="paper">
<div class="relative h-64 overflow-hidden">
<img src="https://picsum.photos/400/400?random=14" alt="Handbound journal" class="w-full h-full object-cover group-hover:scale-110 transition duration-700" />
<div class="absolute top-3 left-3 px-3 py-1 text-xs font-bold text-emerald-900 bg-emerald-100 rounded-full">Paper</div>
</div>
<figcaption class="p-4">
<p class="font-semibold text-slate-900">Linen Journal</p>
<p class="text-sm text-slate-500">by Hannah L.</p>
</figcaption>
</figure>
<!-- Item 6 -->
<figure class="gallery-item group rounded-xl overflow-hidden bg-white shadow-sm hover:shadow-lg" data-category="wood">
<div class="relative h-64 overflow-hidden">
<img src="https://picsum.photos/400/400?random=15" alt="Dovetail box" class="w-full h-full object-cover group-hover:scale-110 transition duration-700" />
<div class="absolute top-3 left-3 px-3 py-1 text-xs font-bold text-teal-900 bg-teal-100 rounded-full">Wood</div>
</div>
<figcaption class="p-4">
<p class="font-semibold text-slate-900">Dovetail Keepsake Box</p>
<p class="text-sm text-slate-500">by Tom W.</p>
</figcaption>
</figure>
<!-- Item 7 -->
<figure class="gallery-item group rounded-xl overflow-hidden bg-white shadow-sm hover:shadow-lg" data-category="fiber">
<div class="relative h-64 overflow-hidden">
<img src="https://picsum.photos/400/400?random=16" alt="Woven wall hanging" class="w-full h-full object-cover group-hover:scale-110 transition duration-700" />
<div class="absolute top-3 left-3 px-3 py-1 text-xs font-bold text-rose-900 bg-rose-100 rounded-full">Fiber</div>
</div>
<figcaption class="p-4">
<p class="font-semibold text-slate-900">Macramé Wall Hanging</p>
<p class="text-sm text-slate-500">by Sofia M.</p>
</figcaption>
</figure>
<!-- Item 8 -->
<figure class="gallery-item group rounded-xl overflow-hidden bg-white shadow-sm hover:shadow-lg" data-category="tech">
<div class="relative h-64 overflow-hidden">
<img src="https://picsum.photos/400/400?random=17" alt="Smart garden sensor" class="w-full h-full object-cover group-hover:scale-110 transition duration-700" />
<div class="absolute top-3 left-3 px-3 py-1 text-xs font-bold text-indigo-900 bg-indigo-100 rounded-full">Tech</div>
</div>
<figcaption class="p-4">
<p class="font-semibold text-slate-900">Smart Garden Sensor</p>
<p class="text-sm text-slate-500">by James P.</p>
</figcaption>
</figure>
</div>
</div>
</section>
<!-- Learning & Events with Sidebar -->
<section id="events" class="py-20 lg:py-28 bg-white">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="grid lg:grid-cols-3 gap-12">
<!-- Main Column -->
<div class="lg:col-span-2">
<span class="inline-block px-3 py-1 rounded-full bg-amber-100 text-amber-800 text-xs font-bold tracking-wide uppercase mb-4">Learn & Connect</span>
<h2 class="text-4xl font-bold text-slate-900 mb-6">Level up your creative process</h2>
<p class="text-lg text-slate-600 mb-8 leading-relaxed">
Great hobbies are built on deliberate practice. Our learning paths combine video instruction, downloadable templates, and peer feedback so you can move from your first clumsy attempt to gallery-worthy work with fewer dead ends. Each course is taught by an experienced maker who understands the common mistakes beginners make and how to correct them before they become habits.
</p>
<div class="grid sm:grid-cols-2 gap-6 mb-10">
<div class="p-6 rounded-2xl bg-slate-50 border border-slate-100">
<div class="w-12 h-12 rounded-xl bg-teal-100 flex items-center justify-center mb-4">
<i data-lucide="video" class="w-6 h-6 text-teal-700"></i>
</div>
<h3 class="text-lg font-bold text-slate-900 mb-2">Step-by-Step Video Courses</h3>
<p class="text-slate-600 text-sm leading-relaxed">
Watch techniques in close-up detail, pause and rewind at your own pace, and download companion guides for every project.
</p>
</div>
<div class="p-6 rounded-2xl bg-slate-50 border border-slate-100">
<div class="w-12 h-12 rounded-xl bg-teal-100 flex items-center justify-center mb-4">
<i data-lucide="users" class="w-6 h-6 text-teal-700"></i>
</div>
<h3 class="text-lg font-bold text-slate-900 mb-2">Live Workshops</h3>
<p class="text-slate-600 text-sm leading-relaxed">
Join interactive sessions with Q&A, breakout rooms for feedback, and recordings you can revisit whenever inspiration strikes.
</p>
</div>
<div class="p-6 rounded-2xl bg-slate-50 border border-slate-100">
<div class="w-12 h-12 rounded-xl bg-teal-100 flex items-center justify-center mb-4">
<i data-lucide="map-pin" class="w-6 h-6 text-teal-700"></i>
</div>
<h3 class="text-lg font-bold text-slate-900 mb-2">Local Club Meetups</h3>
<p class="text-slate-600 text-sm leading-relaxed">
Find gatherings in your area, from open studio nights to tool-swaps, and build friendships with makers near you.
</p>
</div>
<div class="p-6 rounded-2xl bg-slate-50 border border-slate-100">
<div class="w-12 h-12 rounded-xl bg-teal-100 flex items-center justify-center mb-4">
<i data-lucide="award" class="w-6 h-6 text-teal-700"></i>
</div>
<h3 class="text-lg font-bold text-slate-900 mb-2">Skill Certifications</h3>
<p class="text-slate-600 text-sm leading-relaxed">
Earn badges as you complete modules, then showcase your verified skills on your maker profile and portfolio.
</p>
</div>
</div>
<a href="#newsletter" class="inline-flex items-center gap-2 px-8 py-4 text-base font-semibold text-white bg-teal-700 hover:bg-teal-800 rounded-full shadow-lg transition">
Start Learning Free
<i data-lucide="arrow-right" class="w-5 h-5"></i>
</a>
</div>
<!-- Sidebar -->
<aside class="space-y-8">
<!-- Upcoming Workshops -->
<div class="p-6 rounded-2xl bg-slate-900 text-white">
<h3 class="text-xl font-bold mb-5 flex items-center gap-2">
<i data-lucide="calendar" class="w-5 h-5 text-amber-400"></i>
Upcoming Workshops
</h3>
<ul class="space-y-5">
<li class="border-b border-slate-700 pb-4 last:border-0 last:pb-0">
<p class="text-xs text-amber-400 font-bold uppercase tracking-wide">Nov 14, 2024</p>
<p class="font-semibold mt-1">Intro to Japanese Joinery</p>
<p class="text-sm text-slate-400 mt-1">Online • 90 min • Beginner</p>
</li>
<li class="border-b border-slate-700 pb-4 last:border-0 last:pb-0">
<p class="text-xs text-amber-400 font-bold uppercase tracking-wide">Nov 18, 2024</p>
<p class="font-semibold mt-1">Natural Dyeing with Plants</p>
<p class="text-sm text-slate-400 mt-1">Online • 2 hr • All levels</p>
</li>
<li class="border-b border-slate-700 pb-4 last:border-0 last:pb-0">
<p class="text-xs text-amber-400 font-bold uppercase tracking-wide">Nov 22, 2024</p>
<p class="font-semibold mt-1">Vintage Radio Restoration</p>
<p class="text-sm text-slate-400 mt-1">In-Person • 3 hr • Intermediate</p>
</li>
</ul>
<a href="#events" class="mt-6 block text-center text-sm font-semibold text-slate-900 bg-amber-400 hover:bg-amber-300 py-3 rounded-full transition">
View Full Calendar
</a>
</div>
<!-- Member Spotlight -->
<div class="p-6 rounded-2xl bg-teal-50 border border-teal-100">
<h3 class="text-lg font-bold text-slate-900 mb-4">Member Spotlight</h3>
<div class="flex items-center gap-4 mb-4">
<img src="https://i.pravatar.cc/80?u=craftcompass42" alt="Member avatar" class="w-16 h-16 rounded-full object-cover border-2 border-white shadow" />
<div>
<p class="font-bold text-slate-900">Aisha N.</p>
<p class="text-sm text-slate-600">Leatherworker • 3 yrs</p>
</div>
</div>
<p class="text-slate-700 text-sm leading-relaxed mb-4">
"I joined for the wallet templates but stayed for the feedback. The community helped me refine my edge-finishing and price my handmade goods fairly."
</p>
<a href="#community" class="text-sm font-semibold text-teal-700 hover:text-teal-800">Read her story →</a>
</div>
<!-- Community Picks -->
<div class="p-6 rounded-2xl bg-white border border-slate-200">
<h3 class="text-lg font-bold text-slate-900 mb-4">Community Picks</h3>
<ul class="space-y-3">
<li>
<a href="#projects" class="flex items-center gap-3 group">
<img src="https://picsum.photos/60/60?random=20" alt="Pick thumbnail" class="w-12 h-12 rounded-lg object-cover" />
<div>
<p class="text-sm font-semibold text-slate-900 group-hover:text-teal-700 transition">Beginner's Leather Tool Roll</p>
<p class="text-xs text-slate-500">4.9 ★ • 1.2k saves</p>
</div>
</a>
</li>
<li>
<a href="#projects" class="flex items-center gap-3 group">
<img src="https://picsum.photos/60/60?random=21" alt="Pick thumbnail" class="w-12 h-12 rounded-lg object-cover" />
<div>
<p class="text-sm font-semibold text-slate-900 group-hover:text-teal-700 transition">Collapsible Book Cradle</p>
<p class="text-xs text-slate-500">4.8 ★ • 890 saves</p>
</div>
</a>
</li>
<li>
<a href="#projects" class="flex items-center gap-3 group">
<img src="https://picsum.photos/60/60?random=22" alt="Pick thumbnail" class="w-12 h-12 rounded-lg object-cover" />
<div>
<p class="text-sm font-semibold text-slate-900 group-hover:text-teal-700 transition">RGB Desk Lamp Build</p>
<p class="text-xs text-slate-500">4.7 ★ • 650 saves</p>
</div>
</a>
</li>
</ul>
</div>
</aside>
</div>
</div>
</section>
<!-- Creator Spotlights / Testimonials -->
<section id="community" class="py-20 lg:py-28 bg-slate-50">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center max-w-3xl mx-auto mb-14">
<h2 class="text-4xl font-bold text-slate-900 mb-4">Loved by makers everywhere</h2>
<p class="text-lg text-slate-600">
Our members range from weekend dabblers to full-time artisans. Here's what they say about finding their creative community through Craft & Compass.
</p>
</div>
<div class="grid md:grid-cols-3 gap-8">
<!-- Testimonial 1 -->
<article class="bg-white p-8 rounded-2xl shadow-sm border border-slate-100">
<div class="flex items-center gap-1 text-amber-400 mb-4">
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
</div>
<p class="text-slate-700 leading-relaxed mb-6">
"The restoration community here is unmatched. I brought a 1960s sewing machine back to life with guidance from people who genuinely care about preserving craft heritage."
</p>
<div class="flex items-center gap-4">
<img src="https://i.pravatar.cc/80?u=george_makes" alt="George M. avatar" class="w-12 h-12 rounded-full object-cover" />
<div>
<p class="font-bold text-slate-900">George M.</p>
<p class="text-sm text-slate-500">Vintage Restoration</p>
</div>
</div>
</article>
<!-- Testimonial 2 -->
<article class="bg-white p-8 rounded-2xl shadow-sm border border-slate-100">
<div class="flex items-center gap-1 text-amber-400 mb-4">
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
</div>
<p class="text-slate-700 leading-relaxed mb-6">
"As a complete beginner, I was intimidated by woodworking. The structured tutorials and supportive critique groups helped me build my first piece of furniture in just six weeks."
</p>
<div class="flex items-center gap-4">
<img src="https://i.pravatar.cc/80?u=ling_wood" alt="Ling W. avatar" class="w-12 h-12 rounded-full object-cover" />
<div>
<p class="font-bold text-slate-900">Ling W.</p>
<p class="text-sm text-slate-500">Woodworking</p>
</div>
</div>
</article>
<!-- Testimonial 3 -->
<article class="bg-white p-8 rounded-2xl shadow-sm border border-slate-100">
<div class="flex items-center gap-1 text-amber-400 mb-4">
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
<i data-lucide="star" class="w-4 h-4 fill-current"></i>
</div>
<p class="text-slate-700 leading-relaxed mb-6">
"I never thought I'd sell my handmade journals, but the business resources in the Paper & Book Arts group gave me the confidence to open my own shop."
</p>
<div class="flex items-center gap-4">
<img src="https://i.pravatar.cc/80?u=amina_paper" alt="Amina B. avatar" class="w-12 h-12 rounded-full object-cover" />
<div>
<p class="font-bold text-slate-900">Amina B.</p>
<p class="text-sm text-slate-500">Bookbinding</p>
</div>
</div>
</article>
</div>
</div>
</section>
<!-- FAQ Accordion -->
<section id="resources" class="py-20 lg:py-28 bg-white">
<div class="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center mb-12">
<h2 class="text-4xl font-bold text-slate-900 mb-4">Frequently asked questions</h2>
<p class="text-lg text-slate-600">
Everything you need to know before starting your next hobby adventure.
</p>
</div>
<div class="space-y-4" id="faq-container">
<!-- FAQ 1 -->
<div class="border border-slate-200 rounded-xl overflow-hidden">
<button class="accordion-trigger w-full flex items-center justify-between p-6 text-left bg-slate-50 hover:bg-slate-100 transition">
<span class="font-semibold text-slate-900">Is Craft & Compass free to join?</span>
<i data-lucide="chevron-down" class="w-5 h-5 text-slate-500 transition-transform duration-300"></i>
</button>
<div class="accordion-content bg-white">
<div class="p-6 pt-0 text-slate-600 leading-relaxed">
Yes. Our core community, project gallery, and many beginner tutorials are completely free. We also offer a premium membership that unlocks advanced courses, live workshops, downloadable templates, and one-on-one mentor sessions with experienced makers.
</div>
</div>
</div>
<!-- FAQ 2 -->
<div class="border border-slate-200 rounded-xl overflow-hidden">
<button class="accordion-trigger w-full flex items-center justify-between p-6 text-left bg-slate-50 hover:bg-slate-100 transition">
<span class="font-semibold text-slate-900">Do I need expensive tools to get started?</span>
<i data-lucide="chevron-down" class="w-5 h-5 text-slate-500 transition-transform duration-300"></i>
</button>
<div class="accordion-content bg-white">
<div class="p-6 pt-0 text-slate-600 leading-relaxed">
Not at all. Most of our beginner tracks are designed around a minimal, affordable toolkit. We provide buying guides that prioritize safety and versatility over brand names, and many projects can be completed with hand tools or shared equipment from a local makerspace.
</div>
</div>
</div>
<!-- FAQ 3 -->
<div class="border border-slate-200 rounded-xl overflow-hidden">
<button class="accordion-trigger w-full flex items-center justify-between p-6 text-left bg-slate-50 hover:bg-slate-100 transition">
<span class="font-semibold text-slate-900">Can I find local clubs through the platform?</span>
<i data-lucide="chevron-down" class="w-5 h-5 text-slate-500 transition-transform duration-300"></i>
</button>
<div class="accordion-content bg-white">
<div class="p-6 pt-0 text-slate-600 leading-relaxed">
Absolutely. Use our Events page to search for local clubs, meetups, and workshops by zip code or interest. You can also start your own group, invite members, and manage gatherings directly through your dashboard.
</div>
</div>
</div>
<!-- FAQ 4 -->
<div class="border border-slate-200 rounded-xl overflow-hidden">
<button class="accordion-trigger w-full flex items-center justify-between p-6 text-left bg-slate-50 hover:bg-slate-100 transition">
<span class="font-semibold text-slate-900">How do I get feedback on my projects?</span>
<i data-lucide="chevron-down" class="w-5 h-5 text-slate-500 transition-transform duration-300"></i>
</button>
<div class="accordion-content bg-white">
<div class="p-6 pt-0 text-slate-600 leading-relaxed">
Upload photos of your work to the community gallery and ask for constructive critique. Members and mentors can leave detailed comments, suggest techniques, and celebrate your progress. We foster a kindness-first culture where every maker feels welcome to learn.
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Newsletter CTA -->
<section id="newsletter" class="py-20 lg:py-28 bg-teal-700 text-white">
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
<h2 class="text-4xl font-bold mb-4">Get a weekly dose of maker inspiration</h2>
<p class="text-lg text-teal-100 mb-8 leading-relaxed">
Join 45,000+ hobbyists receiving our Maker's Compass newsletter: curated tutorials, upcoming events, member highlights, and exclusive discounts on workshops and tools.
</p>
<form class="flex flex-col sm:flex-row gap-3 max-w-xl mx-auto" onsubmit="event.preventDefault(); alert('Thanks for subscribing!');">
<input type="email" placeholder="Enter your email address" required class="flex-1 px-5 py-4 rounded-full text-slate-900 focus:outline-none focus:ring-2 focus:ring-amber-400" />
<button type="submit" class="px-8 py-4 text-base font-semibold text-teal-900 bg-amber-400 hover:bg-amber-300 rounded-full shadow-lg transition">
Subscribe Free
</button>
</form>
<p class="text-sm text-teal-200 mt-4">No spam. Unsubscribe anytime.</p>
</div>
</section>
<!-- About Teaser -->
<section id="about" class="py-20 lg:py-28 bg-white">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="grid lg:grid-cols-2 gap-12 items-center">
<div>
<span class="inline-block px-3 py-1 rounded-full bg-teal-100 text-teal-800 text-xs font-bold tracking-wide uppercase mb-4">About Us</span>
<h2 class="text-4xl font-bold text-slate-900 mb-6">A platform built by makers, for makers</h2>
<p class="text-lg text-slate-600 leading-relaxed mb-6">
Craft & Compass began in 2019 when a small group of hobbyists grew tired of scattered forums, outdated video tutorials, and hobby shops with no community. We set out to build one place where the entire creative process could live, from that first spark of curiosity to the final proud photograph of a finished piece.
</p>
<p class="text-lg text-slate-600 leading-relaxed mb-8">
Today, we are a global community of makers, restorers, collectors, and educators who believe that handmade work matters. We partner with local clubs, independent artisans, and material suppliers to keep knowledge accessible, affordable, and endlessly inspiring.
</p>
<a href="#community" class="inline-flex items-center gap-2 px-8 py-4 text-base font-semibold text-white bg-slate-900 hover:bg-slate-800 rounded-full shadow-lg transition">
Join Community
<i data-lucide="users" class="w-5 h-5"></i>
</a>
</div>
<div class="relative">
<img src="https://picsum.photos/800/600?random=30" alt="Group of makers collaborating" class="rounded-2xl shadow-xl" />
<div class="absolute -bottom-6 -left-6 bg-white p-6 rounded-xl shadow-lg max-w-xs hidden md:block">
<p class="text-3xl font-bold text-teal-700">18,000+</p>
<p class="text-slate-600">Members sharing projects across 40+ countries</p>
</div>
</div>
</div>
</div>
</section>
</main>
<!-- Footer -->
<footer class="bg-slate-900 text-slate-300 border-t border-slate-800">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16">
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-12">
<!-- Brand -->
<div>
<a href="#" class="flex items-center gap-3 mb-5">
<img src="https://placehold.co/40x40/0d9488/ffffff?text=C%26C&font=montserrat" alt="Craft and Compass logo" class="w-10 h-10 rounded-lg" />
<span class="text-xl font-bold text-white">Craft & Compass</span>
</a>
<p class="text-sm leading-relaxed mb-6">
The community platform for hobbyists, crafters, and collectors. Discover tutorials, share your projects, and connect with makers who share your passion.
</p>
<div class="flex gap-4">
<a href="#" class="w-10 h-10 rounded-full bg-slate-800 flex items-center justify-center hover:bg-teal-700 transition" aria-label="Instagram">
<i data-lucide="instagram" class="w-5 h-5"></i>
</a>
<a href="#" class="w-10 h-10 rounded-full bg-slate-800 flex items-center justify-center hover:bg-teal-700 transition" aria-label="YouTube">
<i data-lucide="youtube" class="w-5 h-5"></i>
</a>
<a href="#" class="w-10 h-10 rounded-full bg-slate-800 flex items-center justify-center hover:bg-teal-700 transition" aria-label="Pinterest">
<i data-lucide="pin" class="w-5 h-5"></i>
</a>
<a href="#" class="w-10 h-10 rounded-full bg-slate-800 flex items-center justify-center hover:bg-teal-700 transition" aria-label="Twitter">
<i data-lucide="twitter" class="w-5 h-5"></i>
</a>
</div>
</div>
<!-- Links -->
<div>
<h4 class="text-white font-bold mb-5">Explore</h4>
<ul class="space-y-3 text-sm">
<li><a href="#explore" class="hover:text-teal-400 transition">Browse Hobbies</a></li>
<li><a href="#projects" class="hover:text-teal-400 transition">Project Gallery</a></li>
<li><a href="#events" class="hover:text-teal-400 transition">Workshops & Events</a></li>
<li><a href="#community" class="hover:text-teal-400 transition">Community Groups</a></li>
<li><a href="#resources" class="hover:text-teal-400 transition">Resources & Guides</a></li>
</ul>
</div>
<!-- Company -->
<div>
<h4 class="text-white font-bold mb-5">Company</h4>
<ul class="space-y-3 text-sm">
<li><a href="#about" class="hover:text-teal-400 transition">About Us</a></li>
<li><a href="#" class="hover:text-teal-400 transition">Careers</a></li>
<li><a href="#" class="hover:text-teal-400 transition">Press Kit</a></li>
<li><a href="#" class="hover:text-teal-400 transition">Privacy Policy</a></li>
<li><a href="#" class="hover:text-teal-400 transition">Terms of Service</a></li>
</ul>
</div>
<!-- Contact -->
<div>
<h4 class="text-white font-bold mb-5">Contact</h4>
<ul class="space-y-3 text-sm">
<li class="flex items-start gap-3">
<i data-lucide="mail" class="w-5 h-5 text-teal-500 mt-0.5"></i>
<span>hello@craftandcompass.com</span>
</li>
<li class="flex items-start gap-3">
<i data-lucide="phone" class="w-5 h-5 text-teal-500 mt-0.5"></i>
<span>+1 (555) 248-9021</span>
</li>
<li class="flex items-start gap-3">
<i data-lucide="map-pin" class="w-5 h-5 text-teal-500 mt-0.5"></i>
<span>142 Maker's Row, Studio 4B<br />Portland, OR 97209</span>
</li>
</ul>
</div>
</div>
<div class="border-t border-slate-800 mt-12 pt-8 flex flex-col md:flex-row justify-between items-center gap-4 text-sm">
<p>© 2024 Craft & Compass. All rights reserved.</p>
<div class="flex gap-6">
<a href="#" class="hover:text-teal-400 transition">Privacy</a>
<a href="#" class="hover:text-teal-400 transition">Terms</a>
<a href="#" class="hover:text-teal-400 transition">Cookies</a>
</div>
</div>
</div>
</footer>
<script>
// Initialize Lucide icons
lucide.createIcons();
// Mobile menu toggle
const mobileBtn = document.getElementById('mobile-menu-btn');
const mobileMenu = document.getElementById('mobile-menu');
mobileBtn.addEventListener('click', () => {
mobileMenu.classList.toggle('hidden');
});
// Close mobile menu when clicking a link
mobileMenu.querySelectorAll('a').forEach(link => {
link.addEventListener('click', () => mobileMenu.classList.add('hidden'));
});
// Header scroll effect
const header = document.getElementById('site-header');
window.addEventListener('scroll', () => {
if (window.scrollY > 20) {
header.classList.add('nav-scrolled');
} else {
header.classList.remove('nav-scrolled');
}
});
// Gallery filtering
const filterBtns = document.querySelectorAll('.filter-btn');
const galleryItems = document.querySelectorAll('.gallery-item');
filterBtns.forEach(btn => {
btn.addEventListener('click', () => {
// Update active button
filterBtns.forEach(b => {
b.classList.remove('active', 'bg-teal-700', 'text-white');
b.classList.add('bg-white', 'text-slate-600');
});
btn.classList.add('active', 'bg-teal-700', 'text-white');
btn.classList.remove('bg-white', 'text-slate-600');
const filter = btn.getAttribute('data-filter');
galleryItems.forEach(item => {
const category = item.getAttribute('data-category');
if (filter === 'all' || category === filter) {
item.classList.remove('hidden-item');
item.classList.add('fade-in');
} else {
item.classList.add('hidden-item');
item.classList.remove('fade-in');
}
});
});
});
// FAQ Accordion
const accordionTriggers = document.querySelectorAll('.accordion-trigger');
accordionTriggers.forEach(trigger => {
trigger.addEventListener('click', () => {
const content = trigger.nextElementSibling;
const icon = trigger.querySelector('[data-lucide="chevron-down"]');
const isOpen = content.classList.contains('open');
// Close all
document.querySelectorAll('.accordion-content').forEach(c => c.classList.remove('open'));
document.querySelectorAll('.accordion-trigger svg').forEach(svg => svg.style.transform = 'rotate(0deg)');
// Open clicked if it was closed
if (!isOpen) {
content.classList.add('open');
icon.style.transform = 'rotate(180deg)';
}
});
});
</script>
</body>
</html>
View Axe Report (JSON)
{
"testEngine": {
"name": "axe-core",
"version": "4.10.2"
},
"testRunner": {
"name": "axe"
},
"testEnvironment": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
"windowWidth": 1280,
"windowHeight": 720,
"orientationAngle": 0,
"orientationType": "landscape-primary"
},
"timestamp": "2026-11-12T09:43:56.023Z",
"url": "https://benchmark.aimac.invalid/3d94f9bf2f0b06ca7ac45147864bc057bf100a368fb5895609668085536d340b.html",
"toolOptions": {
"runOnly": {
"type": "tag",
"values": [
"wcag2a",
"wcag2aa",
"wcag21a",
"wcag21aa",
"wcag22a",
"wcag22aa"
]
},
"resultTypes": [
"violations"
],
"reporter": "v1"
},
"inapplicable": [
{
"id": "area-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <area> elements of image maps have alternative text",
"help": "Active <area> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
"nodes": []
},
{
"id": "aria-braille-equivalent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
"help": "aria-braille attributes must have a non-braille equivalent",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
"nodes": []
},
{
"id": "aria-command-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA button, link and menuitem has an accessible name",
"help": "ARIA commands must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": []
},
{
"id": "aria-input-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA input field has an accessible name",
"help": "ARIA input fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-meter-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA meter node has an accessible name",
"help": "ARIA meter nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-progressbar-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA progressbar node has an accessible name",
"help": "ARIA progressbar nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements with ARIA roles have all required ARIA attributes",
"help": "Required ARIA attributes must be provided",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-children",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require child roles contain them",
"help": "Certain ARIA roles must contain particular children",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-parent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require parent roles are contained by them",
"help": "Certain ARIA roles must be contained by particular parents",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
"nodes": []
},
{
"id": "aria-roles",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all elements with a role attribute use a valid value",
"help": "ARIA roles used must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
"nodes": []
},
{
"id": "aria-toggle-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA toggle field has an accessible name",
"help": "ARIA toggle fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-tooltip-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every ARIA tooltip node has an accessible name",
"help": "ARIA tooltip nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
"nodes": []
},
{
"id": "autocomplete-valid",
"impact": null,
"tags": [
"cat.forms",
"wcag21aa",
"wcag135",
"EN-301-549",
"EN-9.1.3.5",
"ACT"
],
"description": "Ensure the autocomplete attribute is correct and suitable for the form field",
"help": "autocomplete attribute must be used correctly",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
"nodes": []
},
{
"id": "avoid-inline-spacing",
"impact": null,
"tags": [
"cat.structure",
"wcag21aa",
"wcag1412",
"EN-301-549",
"EN-9.1.4.12",
"ACT"
],
"description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
"help": "Inline text spacing must be adjustable with custom stylesheets",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
"nodes": []
},
{
"id": "blink",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag222",
"section508",
"section508.22.j",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <blink> elements are not used",
"help": "<blink> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
"nodes": []
},
{
"id": "definition-list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dl> elements are structured correctly",
"help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
"nodes": []
},
{
"id": "dlitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dt> and <dd> elements are contained by a <dl>",
"help": "<dt> and <dd> elements must be contained by a <dl>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
"nodes": []
},
{
"id": "duplicate-id-aria",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every id attribute value used in ARIA and in labels is unique",
"help": "IDs used in ARIA and labels must be unique",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
"nodes": []
},
{
"id": "frame-focusable-content",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
"help": "Frames with focusable content must not have tabindex=-1",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
"nodes": []
},
{
"id": "frame-title-unique",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
"help": "Frames must have a unique title attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
"nodes": []
},
{
"id": "frame-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"section508",
"section508.22.i",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements have an accessible name",
"help": "Frames must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
"nodes": []
},
{
"id": "html-xml-lang-mismatch",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
"help": "HTML elements with lang and xml:lang must have the same base language",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
"nodes": []
},
{
"id": "input-button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure input buttons have discernible text",
"help": "Input buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
"nodes": []
},
{
"id": "input-image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <input type=\"image\"> elements have alternative text",
"help": "Image buttons must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
"nodes": []
},
{
"id": "marquee",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag222",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <marquee> elements are not used",
"help": "<marquee> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
"nodes": []
},
{
"id": "meta-refresh",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag221",
"TTv5",
"TT8.a",
"EN-301-549",
"EN-9.2.2.1"
],
"description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
"help": "Delayed refresh under 20 hours must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
"nodes": []
},
{
"id": "object-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure <object> elements have alternative text",
"help": "<object> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
"nodes": []
},
{
"id": "role-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure [role=\"img\"] elements have alternative text",
"help": "[role=\"img\"] elements must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "select-name",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure select element has an accessible name",
"help": "Select element must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "summary-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure summary elements have discernible text",
"help": "Summary elements must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "td-headers-attr",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
"help": "Table cells that use the headers attribute must only refer to cells in the same table",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
"nodes": []
},
{
"id": "th-has-data-cells",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
"help": "Table headers in a data table must refer to data cells",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
"nodes": []
},
{
"id": "valid-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2aa",
"wcag312",
"TTv5",
"TT11.b",
"EN-301-549",
"EN-9.3.1.2",
"ACT"
],
"description": "Ensure lang attributes have valid values",
"help": "lang attribute must have a valid value",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
"nodes": []
},
{
"id": "video-caption",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag122",
"section508",
"section508.22.a",
"TTv5",
"TT17.a",
"EN-301-549",
"EN-9.1.2.2"
],
"description": "Ensure <video> elements have captions",
"help": "<video> elements must have captions",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
"nodes": []
},
{
"id": "no-autoplay-audio",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag142",
"TTv5",
"TT2.a",
"EN-301-549",
"EN-9.1.4.2",
"ACT"
],
"description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
"help": "<video> or <audio> elements must not play automatically",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
"nodes": []
}
],
"passes": [
{
"id": "aria-allowed-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure an element's role supports its ARIA attributes",
"help": "Elements must only use supported ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-allowed-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attributes are used correctly for the defined role"
}
],
"none": [
{
"id": "aria-unsupported-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute is supported"
}
],
"impact": null,
"html": "<a href=\"#\" class=\"w-10 h-10 rounded-full bg-slate-800 flex items-center justify-center hover:bg-teal-700 transition\" aria-label=\"Instagram\">\n <i data-lucide=\"instagram\" class=\"w-5 h-5\"></i>\n </a>",
"target": [
"a[aria-label=\"Instagram\"]"
]
}
]
},
{
"id": "aria-conditional-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are used as described in the specification of the element's role",
"help": "ARIA attributes must be used as specified for the element's role",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-conditional-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"none": [],
"impact": null,
"html": "<a href=\"#\" class=\"w-10 h-10 rounded-full bg-slate-800 flex items-center justify-center hover:bg-teal-700 transition\" aria-label=\"Instagram\">\n <i data-lucide=\"instagram\" class=\"w-5 h-5\"></i>\n </a>",
"target": [
"a[aria-label=\"Instagram\"]"
]
}
]
},
{
"id": "aria-hidden-body",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"wcag412",
"EN-301-549",
"EN-9.1.3.1",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden=\"true\" is not present on the document body.",
"help": "aria-hidden=\"true\" must not be present on the document body",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-hidden-body",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "No aria-hidden attribute is present on document body"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<body class=\"bg-slate-50 text-slate-800 antialiased\">",
"target": [
"body"
]
}
]
},
{
"id": "aria-hidden-focus",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
"help": "ARIA hidden element must not be focusable or contain focusable elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "focusable-modal-open",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements while a modal is open"
},
{
"id": "focusable-disabled",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements contained within element"
},
{
"id": "focusable-not-tabbable",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements contained within element"
}
],
"none": [],
"impact": null,
"html": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" data-lucide=\"menu\" aria-hidden=\"true\" class=\"lucide lucide-menu w-6 h-6\">",
"target": [
".lucide-menu"
]
}
]
},
{
"id": "aria-prohibited-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "aria-prohibited-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"impact": null,
"html": "<a href=\"#\" class=\"w-10 h-10 rounded-full bg-slate-800 flex items-center justify-center hover:bg-teal-700 transition\" aria-label=\"Instagram\">\n <i data-lucide=\"instagram\" class=\"w-5 h-5\"></i>\n </a>",
"target": [
"a[aria-label=\"Instagram\"]"
]
}
]
},
{
"id": "aria-valid-attr-value",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all ARIA attributes have valid values",
"help": "ARIA attributes must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-valid-attr-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute values are valid"
},
{
"id": "aria-errormessage",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique"
},
{
"id": "aria-level",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-level values are valid"
}
],
"none": [],
"impact": null,
"html": "<a href=\"#\" class=\"w-10 h-10 rounded-full bg-slate-800 flex items-center justify-center hover:bg-teal-700 transition\" aria-label=\"Instagram\">\n <i data-lucide=\"instagram\" class=\"w-5 h-5\"></i>\n </a>",
"target": [
"a[aria-label=\"Instagram\"]"
]
}
]
},
{
"id": "aria-valid-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure attributes that begin with aria- are valid ARIA attributes",
"help": "ARIA attributes must conform to valid names",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-valid-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute name is valid"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#\" class=\"w-10 h-10 rounded-full bg-slate-800 flex items-center justify-center hover:bg-teal-700 transition\" aria-label=\"Instagram\">\n <i data-lucide=\"instagram\" class=\"w-5 h-5\"></i>\n </a>",
"target": [
"a[aria-label=\"Instagram\"]"
]
}
]
},
{
"id": "button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure buttons have discernible text",
"help": "Buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/button-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has inner text that is visible to screen readers"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<button data-filter=\"all\" class=\"filter-btn active px-5 py-2 text-sm font-semibold rounded-full bg-teal-700 text-white shadow transition\">All</button>",
"target": [
".active"
]
}
]
},
{
"id": "bypass",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag241",
"section508",
"section508.22.o",
"TTv5",
"TT9.a",
"EN-301-549",
"EN-9.2.4.1"
],
"description": "Ensure each page has at least one mechanism for a user to bypass navigation and jump straight to the content",
"help": "Page must have means to bypass repeated blocks",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/bypass?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "internal-link-present",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Valid skip link found"
},
{
"id": "header-present",
"data": null,
"relatedNodes": [
{
"html": "<h1 class=\"text-5xl lg:text-7xl font-bold text-slate-900 leading-[1.1] mb-6\">\n Discover your next <span class=\"text-teal-700 italic\">obsession</span>.\n </h1>",
"target": [
"h1"
]
},
{
"html": "<h2 class=\"text-4xl font-bold text-slate-900 mb-4\">Explore every corner of the maker world</h2>",
"target": [
".max-w-2xl.mb-14 > h2"
]
},
{
"html": "<h3 class=\"text-xl font-bold text-slate-900\">Woodworking</h3>",
"target": [
".hover\\:shadow-xl:nth-child(1) > .p-6 > .mb-3.gap-2.flex > .text-xl"
]
},
{
"html": "<h3 class=\"text-xl font-bold text-slate-900\">Fiber Arts</h3>",
"target": [
".hover\\:shadow-xl:nth-child(2) > .p-6 > .mb-3.gap-2.flex > .text-xl"
]
},
{
"html": "<h3 class=\"text-xl font-bold text-slate-900\">Models & Miniatures</h3>",
"target": [
".hover\\:shadow-xl:nth-child(3) > .p-6 > .mb-3.gap-2.flex > .text-xl"
]
},
{
"html": "<h3 class=\"text-xl font-bold text-slate-900\">Restoration & Upcycling</h3>",
"target": [
".hover\\:shadow-xl:nth-child(4) > .p-6 > .mb-3.gap-2.flex > .text-xl"
]
},
{
"html": "<h3 class=\"text-xl font-bold text-slate-900\">Paper & Book Arts</h3>",
"target": [
".hover\\:shadow-xl:nth-child(5) > .p-6 > .mb-3.gap-2.flex > .text-xl"
]
},
{
"html": "<h3 class=\"text-xl font-bold text-slate-900\">Electronics & Arduino</h3>",
"target": [
".hover\\:shadow-xl:nth-child(6) > .p-6 > .mb-3.gap-2.flex > .text-xl"
]
},
{
"html": "<h2 class=\"text-4xl font-bold text-slate-900 mb-4\">Community gallery</h2>",
"target": [
".lg\\:flex-row > .max-w-2xl > h2"
]
},
{
"html": "<h2 class=\"text-4xl font-bold text-slate-900 mb-6\">Level up your creative process</h2>",
"target": [
".lg\\:col-span-2 > h2"
]
},
{
"html": "<h3 class=\"text-lg font-bold text-slate-900 mb-2\">Step-by-Step Video Courses</h3>",
"target": [
".border-slate-100.rounded-2xl.bg-slate-50:nth-child(1) > .mb-2"
]
},
{
"html": "<h3 class=\"text-lg font-bold text-slate-900 mb-2\">Live Workshops</h3>",
"target": [
".border-slate-100.rounded-2xl.bg-slate-50:nth-child(2) > .mb-2"
]
},
{
"html": "<h3 class=\"text-lg font-bold text-slate-900 mb-2\">Local Club Meetups</h3>",
"target": [
".border-slate-100.rounded-2xl.bg-slate-50:nth-child(3) > .mb-2"
]
},
{
"html": "<h3 class=\"text-lg font-bold text-slate-900 mb-2\">Skill Certifications</h3>",
"target": [
".border-slate-100.rounded-2xl.bg-slate-50:nth-child(4) > .mb-2"
]
},
{
"html": "<h3 class=\"text-xl font-bold mb-5 flex items-center gap-2\">",
"target": [
".text-xl.mb-5"
]
},
{
"html": "<h3 class=\"text-lg font-bold text-slate-900 mb-4\">Member Spotlight</h3>",
"target": [
".border-teal-100 > h3"
]
},
{
"html": "<h3 class=\"text-lg font-bold text-slate-900 mb-4\">Community Picks</h3>",
"target": [
".border-slate-200.rounded-2xl.p-6 > h3"
]
},
{
"html": "<h2 class=\"text-4xl font-bold text-slate-900 mb-4\">Loved by makers everywhere</h2>",
"target": [
".mb-14.max-w-3xl.text-center > h2"
]
},
{
"html": "<h2 class=\"text-4xl font-bold text-slate-900 mb-4\">Frequently asked questions</h2>",
"target": [
".mb-12.text-center > h2"
]
},
{
"html": "<h2 class=\"text-4xl font-bold mb-4\">Get a weekly dose of maker inspiration</h2>",
"target": [
".max-w-4xl > h2"
]
},
{
"html": "<h2 class=\"text-4xl font-bold text-slate-900 mb-6\">A platform built by makers, for makers</h2>",
"target": [
".lg\\:grid-cols-2 > div:nth-child(1) > h2"
]
},
{
"html": "<h4 class=\"text-white font-bold mb-5\">Explore</h4>",
"target": [
"div:nth-child(2) > h4"
]
},
{
"html": "<h4 class=\"text-white font-bold mb-5\">Company</h4>",
"target": [
"div:nth-child(3) > h4"
]
},
{
"html": "<h4 class=\"text-white font-bold mb-5\">Contact</h4>",
"target": [
"div:nth-child(4) > h4"
]
}
],
"impact": "serious",
"message": "Page has a heading"
},
{
"id": "landmark",
"data": null,
"relatedNodes": [
{
"html": "<main>",
"target": [
"main"
]
}
],
"impact": "serious",
"message": "Page has a landmark region"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#0f766e",
"bgColor": "#f0fdfa",
"contrastRatio": 5.24,
"fontSize": "10.5pt (14px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 5.24"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#newsletter\" class=\"px-5 py-2.5 text-sm font-semibold text-teal-700 bg-teal-50 hover:bg-teal-100 rounded-full transition\">Sign In</a>",
"target": [
".hover\\:bg-teal-100"
]
}
]
},
{
"id": "document-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag242",
"TTv5",
"TT12.a",
"EN-301-549",
"EN-9.2.4.2",
"ACT"
],
"description": "Ensure each HTML document contains a non-empty <title> element",
"help": "Documents must have <title> element to aid in navigation",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "doc-has-title",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Document has a non-empty <title> element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "form-field-multiple-labels",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag332",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.3.3.2"
],
"description": "Ensure form field does not have multiple label elements",
"help": "Form field must not have multiple label elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "multiple-label",
"data": null,
"relatedNodes": [],
"impact": "moderate",
"message": "Form field does not have multiple label elements"
}
],
"impact": null,
"html": "<input type=\"email\" placeholder=\"Enter your email address\" required=\"\" class=\"flex-1 px-5 py-4 rounded-full text-slate-900 focus:outline-none focus:ring-2 focus:ring-amber-400\">",
"target": [
"input"
]
}
]
},
{
"id": "html-has-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure every HTML document has a lang attribute",
"help": "<html> element must have a lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "The <html> element has a lang attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "html-lang-valid",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure the lang attribute of the <html> element has a valid value",
"help": "<html> element must have a valid value for the lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-lang-valid?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "valid-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Value of lang attribute is included in the list of valid languages"
}
],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"TT7.b",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <img> elements have alternative text or a role of none or presentation",
"help": "Images must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/image-alt?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-alt",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has an alt attribute"
}
],
"all": [],
"none": [
{
"id": "alt-space-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a valid alt attribute value"
}
],
"impact": null,
"html": "<img src=\"https://placehold.co/48x48/0d9488/ffffff?text=C%26C&font=montserrat\" alt=\"Craft and Compass logo\" class=\"w-10 h-10 rounded-lg shadow-sm\">",
"target": [
".gap-3.group[href=\"#\"] > .w-10.h-10[alt=\"Craft and Compass logo\"]"
]
}
]
},
{
"id": "label",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every form element has a label",
"help": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "non-empty-placeholder",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a placeholder attribute"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<input type=\"email\" placeholder=\"Enter your email address\" required=\"\" class=\"flex-1 px-5 py-4 rounded-full text-slate-900 focus:outline-none focus:ring-2 focus:ring-amber-400\">",
"target": [
"input"
]
}
]
},
{
"id": "link-in-text-block",
"impact": null,
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "link-in-text-block-style",
"data": null,
"relatedNodes": [
{
"html": "<div class=\"p-6\">",
"target": [
".hover\\:shadow-xl:nth-child(1) > .p-6"
]
}
],
"impact": "serious",
"message": "Links can be distinguished from surrounding text by visual styling"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#projects\" class=\"inline-flex items-center gap-2 text-sm font-semibold text-teal-700 hover:text-teal-800\">",
"target": [
".hover\\:shadow-xl:nth-child(1) > .p-6 > .hover\\:text-teal-800.inline-flex[href$=\"#projects\"]"
]
}
]
},
{
"id": "link-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is not in tab order or has accessible text"
}
],
"impact": null,
"html": "<a href=\"#\" class=\"flex items-center gap-3 group\">",
"target": [
".gap-3.group[href=\"#\"]"
]
}
]
},
{
"id": "list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that lists are structured correctly",
"help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "only-listitems",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List element only has direct children that are allowed inside <li> elements"
}
],
"impact": null,
"html": "<ul class=\"space-y-5\">",
"target": [
".space-y-5"
]
}
]
},
{
"id": "listitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <li> elements are used semantically",
"help": "<li> elements must be contained in a <ul> or <ol>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "listitem",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List item has a <ul>, <ol> or role=\"list\" parent element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<li class=\"border-b border-slate-700 pb-4 last:border-0 last:pb-0\">",
"target": [
".border-slate-700.pb-4.last\\:border-0:nth-child(1)"
]
}
]
},
{
"id": "meta-viewport",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag2aa",
"wcag144",
"EN-301-549",
"EN-9.1.4.4",
"ACT"
],
"description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
"help": "Zooming and scaling must not be disabled",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "meta-viewport",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "<meta> tag does not disable zooming on mobile devices"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
"target": [
"meta[name=\"viewport\"]"
]
}
]
},
{
"id": "nested-interactive",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
"help": "Interactive controls must not be nested",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "no-focusable-content",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have focusable descendants"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<img src=\"https://placehold.co/48x48/0d9488/ffffff?text=C%26C&font=montserrat\" alt=\"Craft and Compass logo\" class=\"w-10 h-10 rounded-lg shadow-sm\">",
"target": [
".gap-3.group[href=\"#\"] > .w-10.h-10[alt=\"Craft and Compass logo\"]"
]
}
]
},
{
"id": "target-size",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag22aa",
"wcag258"
],
"description": "Ensure touch targets have sufficient size and space",
"help": "All touch targets must be 24px large, or leave sufficient space",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "target-size",
"data": {
"minSize": 24,
"width": 280.6,
"height": 40
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (280.6px by 40px, should be at least 24px by 24px)"
},
{
"id": "target-offset",
"data": {
"closestOffset": 24,
"minOffset": 24
},
"relatedNodes": [],
"impact": "serious",
"message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#\" class=\"flex items-center gap-3 group\">",
"target": [
".gap-3.group[href=\"#\"]"
]
}
]
}
],
"incomplete": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": null,
"bgColor": null,
"contrastRatio": 0,
"fontSize": "15.0pt (20px)",
"fontWeight": "bold",
"messageKey": "bgGradient",
"expectedContrastRatio": "3:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<header id=\"site-header\" class=\"fixed top-0 left-0 right-0 z-50 bg-white/90 backdrop-blur-md border-b border-slate-100 transition-all duration-300\">",
"target": [
"#site-header"
]
},
{
"html": "<div class=\"absolute inset-0 bg-gradient-to-b from-slate-50/80 via-slate-50/90 to-slate-50\"></div>",
"target": [
".bg-gradient-to-b"
]
}
],
"impact": "serious",
"message": "Element's background color could not be determined due to a background gradient"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"block text-xl font-bold text-slate-900 leading-none group-hover:text-teal-700 transition-colors\">Craft & Compass</span>",
"target": [
".leading-none"
],
"failureSummary": "Fix any of the following:\n Element's background color could not be determined due to a background gradient"
}
]
}
],
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#99f6e4",
"bgColor": "#0f766e",
"contrastRatio": 4.34,
"fontSize": "10.5pt (14px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section id=\"newsletter\" class=\"py-20 lg:py-28 bg-teal-700 text-white\">",
"target": [
"#newsletter"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.34 (foreground color: #99f6e4, background color: #0f766e, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p class=\"text-sm text-teal-200 mt-4\">No spam. Unsubscribe anytime.</p>",
"target": [
".text-teal-200"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.34 (foreground color: #99f6e4, background color: #0f766e, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#64748b",
"bgColor": "#e7f1f1",
"contrastRatio": 4.13,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<header id=\"site-header\" class=\"fixed top-0 left-0 right-0 z-50 bg-white/90 backdrop-blur-md border-b border-slate-100 transition-all duration-300 nav-scrolled\">",
"target": [
"#site-header"
]
},
{
"html": "<section id=\"newsletter\" class=\"py-20 lg:py-28 bg-teal-700 text-white\">",
"target": [
"#newsletter"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.13 (foreground color: #64748b, background color: #e7f1f1, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"block text-xs text-slate-500 tracking-wide mt-1\">Where Curious Makers Find Their Way</span>",
"target": [
".tracking-wide.block.mt-1"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.13 (foreground color: #64748b, background color: #e7f1f1, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 7867
},
{
"y": 576,
"height": 7867
},
{
"y": 1152,
"height": 7867
},
{
"y": 1728,
"height": 7867
},
{
"y": 2304,
"height": 7867
},
{
"y": 2880,
"height": 7867
},
{
"y": 3456,
"height": 7867
},
{
"y": 4032,
"height": 7867
},
{
"y": 4608,
"height": 7867
},
{
"y": 5184,
"height": 7867
},
{
"y": 5760,
"height": 7867
},
{
"y": 6336,
"height": 7867
},
{
"y": 6912,
"height": 7867
},
{
"y": 7147,
"height": 7867
}
],
"scans": 15,
"max_states": 512,
"settle_ms": 5000,
"page_timeout_seconds": 150,
"layout_stability": "consecutive 100ms size samples within one CSS pixel",
"animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
"interactive_states": "not exercised",
"horizontal_scroll": "not exercised"
}
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "Hobbies and Interests" sector.
Your goal is to generate the full HTML code for a page that is not just functional but also visually compelling, content-rich, and feels like a finished product ready for launch.
**Client & Category:**
- Industry: "Hobbies and Interests"
- Description: Hobbies, crafts, DIY projects, collecting, and special interest communities.
**Your Creative Task:**
1. **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Hobbies and Interests" category.
2. **Define Page:** Determine the most effective primary page type (e.g., homepage, service landing page, category portal) to showcase this fictional entity.
3. **Design:** Develop an opinionated, modern, and professional layout. Make distinct choices about structure and flow.
**Content & Structure Requirements (Deliver a COMPLETE page):**
- **Overall:** The final page must feel substantial and complete, with realistic amounts of text (multiple paragraphs per section where appropriate, avoid single sentences), well-integrated placeholder images, and logical flow. It should look like a real website a business would proudly use.
- **HEADER:** Include the invented site name, tagline, a logo placeholder image, and a primary navigation bar. Ensure the navigation has **at least 5-7 clearly defined, relevant links** including: "Events", "Projects", "About".
- **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
- Address key topics relevant to the "Hobbies and Interests" category. Consider themes similar to: "Local Clubs", "Advanced Techniques", "Creator Spotlights".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "creative process", "handmade", "restoration".
- **Visuals:** Integrate relevant placeholder images logically within the content sections.
- **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Try Tutorial", "Browse Gallery", "Join Community".
- **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Hobbies and Interests" sector. Ideas similar but not limited to: "community gallery".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "upcoming workshops", "community picks", "member spotlights".
- **FOOTER:** Include a professional footer with invented contact details, copyright (current year), social media links, and standard links (Privacy, Terms).
- **MODERN WEB PATTERNS:** Include modern web patterns like testimonial cards, feature grids, or FAQ accordions where appropriate.