Complete redesign: modern, fresh, subtle Scandinavian tech studio look & feel for webshop and admin

This commit is contained in:
2026-11-02 08:17:25 +01:00
parent 9deef06169
commit c222434f3c
29 changed files with 2380 additions and 2801 deletions
+58 -57
View File
@@ -3,46 +3,45 @@
@section('title', '3D Print Catalogus | Jouwdriedee.nl')
@section('content')
<!-- Page Header -->
<div class="bg-gradient-to-b from-amber-50/40 via-white to-[#FAF9F6] border-b border-slate-200/60 py-6 sm:py-8">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex flex-col sm:flex-row sm:items-center justify-between gap-3">
<!-- Page Header (Fris & Minimalistisch) -->
<div class="border-b border-slate-100 bg-slate-50/50 py-8 sm:py-10">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex flex-col sm:flex-row sm:items-center justify-between gap-4">
<div>
<div class="inline-flex items-center space-x-1.5 px-3 py-1 rounded-full bg-white border border-slate-200/80 text-xs font-semibold text-slate-700 shadow-xs mb-2">
<span>Overzicht 3D Modellen</span>
</div>
<h1 class="font-heading text-2xl sm:text-4xl font-black text-slate-900 tracking-tight">Onze 3D Print Collectie</h1>
<p class="text-xs text-slate-500 mt-1">Fidget toys, Pokémon figuren en popculture modellen. Geprint op aanvraag in jouw gewenste kleur.</p>
<span class="text-[11px] font-semibold uppercase tracking-wider text-slate-400">Assortiment</span>
<h1 class="font-heading text-2xl sm:text-4xl font-extrabold text-slate-900 tracking-tight mt-0.5">3D Print Collectie</h1>
<p class="text-xs sm:text-sm text-slate-500 mt-1">Fidget toys, Pokémon figuren en popculture modellen. Geprint op aanvraag in jouw gewenste kleur.</p>
</div>
@if(request()->hasAny(['category', 'material', 'q', 'sort']))
<a href="{{ route('catalog') }}" class="px-3 py-1.5 rounded-xl bg-white border border-slate-200 text-xs font-bold text-rose-600 hover:bg-rose-50 flex items-center space-x-1 self-start shadow-xs transition">
<span>✕ Filters Wissen</span>
<a href="{{ route('catalog') }}" class="px-3 py-1.5 rounded-lg bg-white border border-slate-200 text-xs font-medium text-rose-600 hover:bg-rose-50 flex items-center space-x-1.5 self-start shadow-2xs transition">
<i data-lucide="x" class="w-3.5 h-3.5"></i>
<span>Filters wissen</span>
</a>
@endif
</div>
</div>
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6 sm:py-10" x-data="{ mobileFiltersOpen: false }">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8 sm:py-12" x-data="{ mobileFiltersOpen: false }">
<!-- Mobile Filter Toggle Bar -->
<div class="lg:hidden mb-4 flex items-center justify-between gap-2">
<div class="lg:hidden mb-6 flex items-center justify-between gap-2">
<button
type="button"
@click="mobileFiltersOpen = !mobileFiltersOpen"
class="flex-1 py-2.5 px-4 rounded-xl bg-white border border-slate-200 text-slate-800 text-xs font-bold flex items-center justify-center space-x-2 shadow-xs"
class="flex-1 py-2 px-3.5 rounded-lg bg-white border border-slate-200 text-slate-800 text-xs font-medium flex items-center justify-center space-x-2 shadow-2xs"
>
<i data-lucide="sliders-horizontal" class="w-4 h-4 text-amber-600"></i>
<span x-text="mobileFiltersOpen ? 'Verberg Filters' : 'Filters & Categorieën'"></span>
<i data-lucide="sliders-horizontal" class="w-3.5 h-3.5 text-slate-500"></i>
<span x-text="mobileFiltersOpen ? 'Verberg filters' : 'Filters & Categorieën'"></span>
@if(request()->hasAny(['category', 'material', 'q']))
<span class="w-2 h-2 rounded-full bg-amber-500"></span>
<span class="w-1.5 h-1.5 rounded-full bg-sky-500"></span>
@endif
</button>
<!-- Snelle Sortering op Mobiel -->
<form action="{{ route('catalog') }}" method="GET" class="w-40">
<!-- Quick Sort on Mobile -->
<form action="{{ route('catalog') }}" method="GET" class="w-36">
@if(request('category')) <input type="hidden" name="category" value="{{ request('category') }}"> @endif
@if(request('material')) <input type="hidden" name="material" value="{{ request('material') }}"> @endif
@if(request('q')) <input type="hidden" name="q" value="{{ request('q') }}"> @endif
<select name="sort" onchange="this.form.submit()" class="w-full bg-white border border-slate-200 rounded-xl px-2.5 py-2.5 text-xs font-bold text-slate-700 shadow-xs">
<select name="sort" onchange="this.form.submit()" class="w-full bg-white border border-slate-200 rounded-lg px-2.5 py-2 text-xs font-medium text-slate-700 shadow-2xs">
<option value="newest" {{ request('sort') === 'newest' ? 'selected' : '' }}>Nieuwste</option>
<option value="price_asc" {{ request('sort') === 'price_asc' ? 'selected' : '' }}>Prijs &uarr;</option>
<option value="price_desc" {{ request('sort') === 'price_desc' ? 'selected' : '' }}>Prijs &darr;</option>
@@ -50,35 +49,36 @@
</form>
</div>
<div class="grid grid-cols-1 lg:grid-cols-4 gap-6 lg:gap-8">
<div class="grid grid-cols-1 lg:grid-cols-4 gap-8">
<!-- Filters Sidebar -->
<aside :class="mobileFiltersOpen ? 'block' : 'hidden lg:block'" class="space-y-4">
<div class="p-5 sm:p-6 rounded-2xl bg-white border border-slate-200/80 shadow-xs space-y-5">
<aside :class="mobileFiltersOpen ? 'block' : 'hidden lg:block'" class="space-y-6">
<div class="p-5 rounded-2xl bg-white border border-slate-200/60 shadow-2xs space-y-6">
<div class="flex items-center justify-between pb-3 border-b border-slate-100">
<span class="font-heading text-xs font-black text-slate-900 uppercase tracking-wider flex items-center space-x-1.5">
<i data-lucide="filter" class="w-3.5 h-3.5 text-amber-600"></i>
<span>Filters & Zoeken</span>
<span class="text-xs font-semibold uppercase tracking-wider text-slate-900 flex items-center space-x-1.5">
<i data-lucide="filter" class="w-3.5 h-3.5 text-slate-400"></i>
<span>Filters</span>
</span>
@if(request()->hasAny(['category', 'material', 'q', 'sort']))
<a href="{{ route('catalog') }}" class="text-[11px] font-bold text-rose-600 hover:underline">Wissen</a>
<a href="{{ route('catalog') }}" class="text-[11px] text-rose-600 hover:underline">Wissen</a>
@endif
</div>
<!-- Zoekveld -->
<form action="{{ route('catalog') }}" method="GET" class="space-y-4">
<form action="{{ route('catalog') }}" method="GET" class="space-y-5">
@if(request('category')) <input type="hidden" name="category" value="{{ request('category') }}"> @endif
@if(request('material')) <input type="hidden" name="material" value="{{ request('material') }}"> @endif
<div>
<label class="block text-xs font-bold text-slate-700 mb-1.5">Zoeken</label>
<label class="block text-xs font-medium text-slate-700 mb-1.5">Zoeken</label>
<div class="relative">
<input
type="text"
name="q"
value="{{ request('q') }}"
placeholder="Draak, Pikachu, Grogu..."
class="w-full bg-slate-50 border border-slate-200 rounded-xl pl-8 pr-3 py-2 text-xs font-medium text-slate-900 placeholder-slate-400 focus:bg-white focus:outline-none focus:ring-2 focus:ring-amber-400"
class="w-full bg-slate-50 border border-slate-200 rounded-lg pl-8 pr-3 py-1.5 text-xs text-slate-900 placeholder-slate-400 focus:bg-white focus:outline-none focus:ring-1 focus:ring-slate-400"
>
<i data-lucide="search" class="w-3.5 h-3.5 text-slate-400 absolute left-2.5 top-1/2 -translate-y-1/2"></i>
</div>
@@ -86,13 +86,13 @@
<!-- Categorie filter -->
<div>
<label class="block text-xs font-bold text-slate-700 mb-2">Categorieën</label>
<div class="space-y-1">
<a href="{{ route('catalog', array_merge(request()->except('category', 'page'), [])) }}" class="flex items-center justify-between px-3 py-2 rounded-xl text-xs font-bold transition {{ !request('category') ? 'bg-amber-100 text-amber-950 font-black' : 'text-slate-600 hover:bg-slate-50' }}">
<label class="block text-xs font-medium text-slate-700 mb-2">Categorieën</label>
<div class="space-y-0.5">
<a href="{{ route('catalog', array_merge(request()->except('category', 'page'), [])) }}" class="flex items-center justify-between px-2.5 py-1.5 rounded-lg text-xs transition {{ !request('category') ? 'bg-slate-100 text-slate-900 font-semibold' : 'text-slate-600 hover:bg-slate-50' }}">
<span>Alle categorieën</span>
</a>
@foreach($categories as $cat)
<a href="{{ route('catalog', array_merge(request()->except('category', 'page'), ['category' => $cat->slug])) }}" class="flex items-center justify-between px-3 py-2 rounded-xl text-xs font-bold transition {{ request('category') === $cat->slug ? 'bg-amber-100 text-amber-950 font-black' : 'text-slate-600 hover:bg-slate-50' }}">
<a href="{{ route('catalog', array_merge(request()->except('category', 'page'), ['category' => $cat->slug])) }}" class="flex items-center justify-between px-2.5 py-1.5 rounded-lg text-xs transition {{ request('category') === $cat->slug ? 'bg-slate-100 text-slate-900 font-semibold' : 'text-slate-600 hover:bg-slate-50' }}">
<span>{{ $cat->name }}</span>
</a>
@endforeach
@@ -101,13 +101,13 @@
<!-- Materiaal filter -->
<div>
<label class="block text-xs font-bold text-slate-700 mb-2">Filament Materiaal</label>
<div class="space-y-1">
<a href="{{ route('catalog', array_merge(request()->except('material', 'page'), [])) }}" class="flex items-center justify-between px-3 py-1.5 rounded-xl text-xs font-bold transition {{ !request('material') ? 'bg-sky-100 text-sky-950 font-black' : 'text-slate-600 hover:bg-slate-50' }}">
<label class="block text-xs font-medium text-slate-700 mb-2">Filament Materiaal</label>
<div class="space-y-0.5">
<a href="{{ route('catalog', array_merge(request()->except('material', 'page'), [])) }}" class="flex items-center justify-between px-2.5 py-1.5 rounded-lg text-xs transition {{ !request('material') ? 'bg-slate-100 text-slate-900 font-semibold' : 'text-slate-600 hover:bg-slate-50' }}">
<span>Alle materialen</span>
</a>
@foreach($materials as $mat)
<a href="{{ route('catalog', array_merge(request()->except('material', 'page'), ['material' => $mat->code])) }}" class="flex items-center justify-between px-3 py-1.5 rounded-xl text-xs font-bold transition {{ request('material') === $mat->code ? 'bg-sky-100 text-sky-950 font-black' : 'text-slate-600 hover:bg-slate-50' }}">
<a href="{{ route('catalog', array_merge(request()->except('material', 'page'), ['material' => $mat->code])) }}" class="flex items-center justify-between px-2.5 py-1.5 rounded-lg text-xs transition {{ request('material') === $mat->code ? 'bg-slate-100 text-slate-900 font-semibold' : 'text-slate-600 hover:bg-slate-50' }}">
<span>{{ $mat->name }}</span>
</a>
@endforeach
@@ -116,8 +116,8 @@
<!-- Sortering Desktop -->
<div class="hidden lg:block">
<label class="block text-xs font-bold text-slate-700 mb-1.5">Sorteren</label>
<select name="sort" onchange="this.form.submit()" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3 py-2 text-xs font-bold text-slate-700 focus:bg-white focus:outline-none focus:ring-2 focus:ring-amber-400">
<label class="block text-xs font-medium text-slate-700 mb-1.5">Sorteren</label>
<select name="sort" onchange="this.form.submit()" class="w-full bg-slate-50 border border-slate-200 rounded-lg px-2.5 py-1.5 text-xs font-medium text-slate-700 focus:bg-white focus:outline-none">
<option value="newest" {{ request('sort') === 'newest' ? 'selected' : '' }}>Nieuwste toevoegingen</option>
<option value="price_asc" {{ request('sort') === 'price_asc' ? 'selected' : '' }}>Prijs: Laag naar hoog</option>
<option value="price_desc" {{ request('sort') === 'price_desc' ? 'selected' : '' }}>Prijs: Hoog naar laag</option>
@@ -130,51 +130,52 @@
<!-- Producten Overzicht -->
<div class="lg:col-span-3 space-y-6">
@if($products->isEmpty())
<div class="p-10 text-center rounded-3xl bg-white border border-slate-200/80 shadow-xs space-y-3">
<div class="w-14 h-14 rounded-2xl bg-amber-50 text-slate-800 flex items-center justify-center mx-auto text-3xl">
🙈
<div class="p-12 text-center rounded-2xl bg-white border border-slate-200/60 shadow-2xs space-y-3">
<div class="w-12 h-12 rounded-xl bg-slate-100 text-slate-600 flex items-center justify-center mx-auto text-xl">
<i data-lucide="box" class="w-6 h-6 text-slate-400"></i>
</div>
<h3 class="font-heading text-lg font-black text-slate-900">Geen artikelen gevonden</h3>
<h3 class="font-heading text-base font-semibold text-slate-900">Geen artikelen gevonden</h3>
<p class="text-xs text-slate-500 max-w-sm mx-auto">Er zijn geen prints gevonden die voldoen aan je huidige filters. Wis je filters of bekijk alle categorieën!</p>
<a href="{{ route('catalog') }}" class="inline-flex px-5 py-2.5 rounded-xl bg-amber-400 text-slate-950 text-xs font-bold shadow-xs">Alle prints bekijken 🎁</a>
<a href="{{ route('catalog') }}" class="inline-flex px-4 py-2 rounded-lg bg-slate-900 text-white text-xs font-medium hover:bg-slate-800 transition">Alle prints bekijken</a>
</div>
@else
<div class="grid grid-cols-2 md:grid-cols-3 gap-3 sm:gap-6">
<div class="grid grid-cols-2 md:grid-cols-3 gap-4 sm:gap-6">
@foreach($products as $product)
<div class="rounded-2xl sm:rounded-3xl bg-white border border-slate-200/80 shadow-xs hover:shadow-md transition-all duration-200 overflow-hidden flex flex-col justify-between group">
<div class="group flex flex-col justify-between bg-white rounded-2xl p-3 border border-slate-200/60 card-hover">
<div>
<div class="relative h-40 sm:h-56 bg-slate-100 overflow-hidden">
<div class="relative aspect-square rounded-xl overflow-hidden bg-slate-50">
<img
src="{{ $product->image_url }}"
alt="{{ $product->name }}"
class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500"
class="w-full h-full object-cover group-hover:scale-103 transition-transform duration-500 ease-out"
loading="lazy"
>
@if($product->category)
<span class="absolute top-2 left-2 sm:top-3 sm:left-3 px-2 py-0.5 rounded-md bg-white/95 backdrop-blur-xs text-[9px] sm:text-[10px] font-bold text-slate-800 shadow-xs border border-slate-200/60">
<span class="absolute top-2 left-2 px-2 py-0.5 rounded-md bg-white/90 backdrop-blur-xs text-[10px] font-medium text-slate-700 border border-slate-200/50 shadow-2xs">
{{ $product->category->name }}
</span>
@endif
</div>
<div class="p-3 sm:p-4">
<h3 class="font-heading text-xs sm:text-sm font-black text-slate-900 group-hover:text-amber-700 transition line-clamp-2">
<div class="pt-3 pb-1">
<h3 class="font-heading text-xs sm:text-sm font-semibold text-slate-900 group-hover:text-sky-600 transition line-clamp-1">
<a href="{{ route('product.show', $product->slug) }}">
{{ $product->name }}
</a>
</h3>
<p class="hidden sm:block text-xs text-slate-500 mt-1 line-clamp-2 leading-relaxed font-normal">
<p class="text-[11px] text-slate-400 mt-0.5 line-clamp-1 font-normal">
{{ $product->short_description }}
</p>
</div>
</div>
<div class="p-3 sm:p-4 pt-0 border-t border-slate-100 mt-1 flex items-center justify-between">
<div class="pt-2 border-t border-slate-100 flex items-center justify-between mt-2">
<div>
<span class="text-[9px] sm:text-[10px] text-slate-400 block font-bold uppercase">Vanaf</span>
<span class="font-heading text-sm sm:text-base font-black text-slate-900">{{ $product->formatted_price }}</span>
<span class="text-[10px] text-slate-400 block font-normal leading-none">Vanaf</span>
<span class="font-heading text-sm font-bold text-slate-900">{{ $product->formatted_price }}</span>
</div>
<a href="{{ route('product.show', $product->slug) }}" class="px-2.5 sm:px-3 py-1 sm:py-1.5 rounded-xl bg-amber-400 hover:bg-amber-300 text-slate-950 text-[10px] sm:text-xs font-bold transition flex items-center space-x-1 shadow-xs">
<span>Kleur 🎨</span>
<a href="{{ route('product.show', $product->slug) }}" class="px-2.5 py-1.5 rounded-lg bg-slate-900 hover:bg-slate-800 text-white text-[11px] font-medium transition flex items-center space-x-1 cursor-pointer">
<span>Kies kleur</span>
<i data-lucide="chevron-right" class="w-3 h-3"></i>
</a>
</div>
</div>
+107 -111
View File
@@ -1,30 +1,30 @@
@extends('layouts.app')
@section('title', 'Eigen 3D Model Printen (STL / 3MF) | Jouwdriedee.nl')
@section('title', 'Eigen 3D Model Printen | Jouwdriedee.nl')
@section('content')
<!-- Header Banner -->
<div class="bg-slate-50 border-b border-slate-200/80 py-8 sm:py-12">
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center space-y-3">
<span class="px-3.5 py-1 rounded-full bg-white border border-slate-200 text-xs font-bold text-slate-700 inline-flex items-center space-x-1.5 shadow-2xs">
<i data-lucide="layers" class="w-3.5 h-3.5 text-rose-500"></i>
<span>3D Print op Aanvraag & Maatwerk</span>
<div class="border-b border-slate-200/80 py-8 sm:py-12 bg-slate-50/50">
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center space-y-2.5">
<span class="px-3 py-1 rounded-full bg-white border border-slate-200 text-xs font-medium text-slate-700 inline-flex items-center space-x-1.5 shadow-2xs">
<i data-lucide="layers" class="w-3.5 h-3.5 text-slate-500"></i>
<span>3D Print op Aanvraag</span>
</span>
<h1 class="font-heading text-3xl sm:text-5xl font-black text-slate-900 tracking-tight">Eigen 3D Model Printen</h1>
<p class="text-xs sm:text-sm text-slate-600 max-w-xl mx-auto leading-relaxed font-normal">
Heb je een 3D-bestand van MakerWorld, Printables of Thingiverse, of een eigen CAD-ontwerp? Upload jouw bestand of plak de link, kies je materiaal en bestel direct online.
<h1 class="text-3xl sm:text-4xl font-bold tracking-tight text-slate-900">Eigen 3D Model Printen</h1>
<p class="text-xs sm:text-sm text-slate-500 max-w-xl mx-auto leading-relaxed">
Upload jouw eigen STL, 3MF of STEP bestand, of plak de link van een MakerWorld of Printables model. Kies je materiaal en configureer direct online.
</p>
</div>
</div>
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-8 sm:py-12"
x-data="{
activeTab: 'direct', // 'direct' of 'offerte'
activeTab: 'direct',
selectedSize: 'medium',
sizePrices: {
'klein': 9.95, // tot 8 cm
'medium': 16.95, // tot 15 cm
'groot': 24.95 // tot 22 cm
'klein': 9.95,
'medium': 16.95,
'groot': 24.95
},
selectedMaterial: 'pla',
materialMultipliers: {
@@ -32,7 +32,7 @@
'{{ $mat->code }}': {{ $mat->price_multiplier }},
@endforeach
},
selectedColor: '{{ $colors[0]->name ?? 'Zon Geel (Pikachu)' }}',
selectedColor: '{{ $colors[0]->name ?? 'Zwart' }}',
quantity: 1,
get calculatedTotal() {
@@ -48,75 +48,75 @@
}">
<!-- Tab Selector -->
<div class="flex items-center justify-center p-1.5 bg-slate-100 rounded-2xl max-w-md mx-auto mb-8">
<div class="flex items-center justify-center p-1 bg-slate-100 rounded-xl max-w-xs mx-auto mb-8">
<button
type="button"
@click="activeTab = 'direct'"
:class="activeTab === 'direct' ? 'bg-white text-slate-900 shadow-sm font-black' : 'text-slate-600 hover:text-slate-900 font-bold'"
class="flex-1 py-2.5 px-4 rounded-xl text-xs transition flex items-center justify-center space-x-1.5"
:class="activeTab === 'direct' ? 'bg-white text-slate-900 shadow-2xs font-semibold' : 'text-slate-600 hover:text-slate-900 font-medium'"
class="flex-1 py-1.5 px-3 rounded-lg text-xs transition flex items-center justify-center space-x-1.5 cursor-pointer"
>
<i data-lucide="shopping-bag" class="w-3.5 h-3.5"></i>
<span>Direct online bestellen</span>
<span>Direct bestellen</span>
</button>
<button
type="button"
@click="activeTab = 'offerte'"
:class="activeTab === 'offerte' ? 'bg-white text-slate-900 shadow-sm font-black' : 'text-slate-600 hover:text-slate-900 font-bold'"
class="flex-1 py-2.5 px-4 rounded-xl text-xs transition flex items-center justify-center space-x-1.5"
:class="activeTab === 'offerte' ? 'bg-white text-slate-900 shadow-2xs font-semibold' : 'text-slate-600 hover:text-slate-900 font-medium'"
class="flex-1 py-1.5 px-3 rounded-lg text-xs transition flex items-center justify-center space-x-1.5 cursor-pointer"
>
<i data-lucide="file-text" class="w-3.5 h-3.5"></i>
<span>Maatwerk offerte</span>
</button>
</div>
<!-- TAB 1: DIRECT BESTELLEN EN IN WINKELWAGEN -->
<div x-show="activeTab === 'direct'" class="p-6 sm:p-10 rounded-3xl bg-white border border-slate-200/80 shadow-lg shadow-slate-200/40 space-y-8">
<!-- TAB 1: DIRECT BESTELLEN -->
<div x-show="activeTab === 'direct'" class="p-6 sm:p-8 rounded-2xl bg-white border border-slate-200/80 shadow-xs space-y-6">
<form action="{{ route('custom.cart.add') }}" method="POST" enctype="multipart/form-data" class="space-y-6">
@csrf
<!-- 1. Model bron: Bestand of Link -->
<div class="space-y-4">
<div class="border-b border-slate-100 pb-3">
<h3 class="font-heading text-base font-black text-slate-900 flex items-center space-x-2">
<span>1. 3D-bestand uploaden of link invoeren</span>
<div class="space-y-3">
<div class="border-b border-slate-100 pb-2">
<h3 class="text-xs font-bold text-slate-900 uppercase tracking-wider">
1. 3D-bestand uploaden of link invoeren
</h3>
<p class="text-xs text-slate-500 mt-0.5">Ondersteunt STL, 3MF, STEP en OBJ, of een directe link naar het model op MakerWorld of Printables.</p>
<p class="text-xs text-slate-500 mt-0.5">Ondersteunt STL, 3MF, STEP en OBJ, of een directe link naar een model.</p>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div class="grid grid-cols-1 sm:grid-cols-2 gap-3.5">
<!-- Bestand upload -->
<div class="p-4 rounded-2xl bg-slate-50 border border-slate-200/80 hover:border-slate-300 transition">
<label class="block text-xs font-bold text-slate-800 mb-1 flex items-center space-x-1.5">
<i data-lucide="file" class="w-3.5 h-3.5 text-rose-500"></i>
<span>Bestand uploaden (.stl, .3mf, .step, .obj)</span>
<div class="p-4 rounded-xl bg-slate-50 border border-slate-200 hover:border-slate-300 transition">
<label class="block text-xs font-semibold text-slate-800 mb-1 flex items-center space-x-1.5">
<i data-lucide="file-up" class="w-3.5 h-3.5 text-slate-500"></i>
<span>Bestand uploaden (.stl, .3mf, .step)</span>
</label>
<input type="file" name="model_file" accept=".stl,.step,.stp,.obj,.3mf,.zip" class="w-full text-xs text-slate-600 file:mr-3 file:py-1.5 file:px-3 file:rounded-xl file:border-0 file:text-xs file:font-bold file:bg-slate-900 file:text-white hover:file:bg-slate-800 cursor-pointer">
<span class="text-[10px] text-slate-400 block mt-1">Maximale bestandsgrootte: 50MB</span>
<input type="file" name="model_file" accept=".stl,.step,.stp,.obj,.3mf,.zip" class="w-full text-xs text-slate-600 file:mr-3 file:py-1 file:px-2.5 file:rounded-lg file:border-0 file:text-xs file:font-medium file:bg-slate-900 file:text-white hover:file:bg-slate-800 cursor-pointer">
<span class="text-[10px] text-slate-400 block mt-1">Tot 50 MB per bestand</span>
</div>
<!-- Of URL -->
<div class="p-4 rounded-2xl bg-slate-50 border border-slate-200/80 hover:border-slate-300 transition">
<label class="block text-xs font-bold text-slate-800 mb-1 flex items-center space-x-1.5">
<i data-lucide="link" class="w-3.5 h-3.5 text-rose-500"></i>
<div class="p-4 rounded-xl bg-slate-50 border border-slate-200 hover:border-slate-300 transition">
<label class="block text-xs font-semibold text-slate-800 mb-1 flex items-center space-x-1.5">
<i data-lucide="link" class="w-3.5 h-3.5 text-slate-500"></i>
<span>Of plak een MakerWorld / Printables link</span>
</label>
<input type="url" name="model_url" placeholder="https://makerworld.com/nl/models/..." class="w-full bg-white border border-slate-200 rounded-xl px-3 py-2 text-xs font-medium placeholder-slate-400 focus:outline-none focus:ring-1 focus:ring-rose-400">
<span class="text-[10px] text-slate-400 block mt-1">Wij downloaden en inspecteren het bestand</span>
<input type="url" name="model_url" placeholder="https://makerworld.com/nl/models/..." class="w-full bg-white border border-slate-200 rounded-lg px-3 py-1.5 text-xs text-slate-900 placeholder-slate-400 focus:outline-none focus:ring-1 focus:ring-slate-900">
<span class="text-[10px] text-slate-400 block mt-1">Wij halen de specificaties automatisch op</span>
</div>
</div>
<div>
<label class="block text-xs font-bold text-slate-700 mb-1">Omschrijving of modelnaam (optioneel)</label>
<input type="text" name="model_name" placeholder="Bijv. Pikachu sleutelhanger of Fidget Toy" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3 py-2 text-xs font-medium text-slate-800 focus:bg-white focus:outline-none">
<div class="space-y-1">
<label class="block text-xs font-medium text-slate-700">Omschrijving of modelnaam (optioneel)</label>
<input type="text" name="model_name" placeholder="Bijv. Bureau organizer of vervangend tandwiel" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3 py-2 text-xs text-slate-900 focus:bg-white focus:outline-none focus:ring-1 focus:ring-slate-900">
</div>
</div>
<!-- 2. Formaat & Afmeting -->
<div class="space-y-3">
<div class="border-b border-slate-100 pb-2">
<h3 class="font-heading text-base font-black text-slate-900">
<span>2. Formaat en schaal selecteren</span>
<h3 class="text-xs font-bold text-slate-900 uppercase tracking-wider">
2. Formaat en schaal selecteren
</h3>
</div>
@@ -125,57 +125,57 @@
<button
type="button"
@click="selectedSize = 'klein'"
:class="selectedSize === 'klein' ? 'border-amber-400 bg-amber-50 ring-2 ring-amber-400 font-bold' : 'border-slate-200 hover:bg-slate-50 font-semibold'"
class="p-4 rounded-2xl border text-left transition cursor-pointer flex flex-col justify-between"
:class="selectedSize === 'klein' ? 'border-slate-900 bg-slate-50 ring-1 ring-slate-900 font-semibold' : 'border-slate-200 hover:bg-slate-50 font-normal'"
class="p-4 rounded-xl border text-left transition cursor-pointer flex flex-col justify-between"
>
<div>
<span class="text-xs font-bold text-slate-900 block">Klein (tot 8 cm)</span>
<span class="text-[11px] text-slate-500 block mt-0.5">Sleutelhangers, miniaturen, kleine clips</span>
<span class="text-[11px] text-slate-500 block mt-0.5">Sleutelhangers, clips, miniaturen</span>
</div>
<span class="font-heading text-base font-black text-slate-900 mt-2 block">€ 9,95</span>
<span class="text-sm font-bold text-slate-900 mt-2 block">&euro; 9,95</span>
</button>
<button
type="button"
@click="selectedSize = 'medium'"
:class="selectedSize === 'medium' ? 'border-amber-400 bg-amber-50 ring-2 ring-amber-400 font-bold' : 'border-slate-200 hover:bg-slate-50 font-semibold'"
class="p-4 rounded-2xl border text-left transition cursor-pointer flex flex-col justify-between"
:class="selectedSize === 'medium' ? 'border-slate-900 bg-slate-50 ring-1 ring-slate-900 font-semibold' : 'border-slate-200 hover:bg-slate-50 font-normal'"
class="p-4 rounded-xl border text-left transition cursor-pointer flex flex-col justify-between"
>
<div>
<span class="text-xs font-bold text-slate-900 block">Medium (tot 15 cm)</span>
<span class="text-[11px] text-slate-500 block mt-0.5">Figuren, plantenbakjes, bureau-organizers</span>
<span class="text-[11px] text-slate-500 block mt-0.5">Figuren, bureau-organizers</span>
</div>
<span class="font-heading text-base font-black text-slate-900 mt-2 block">€ 16,95</span>
<span class="text-sm font-bold text-slate-900 mt-2 block">&euro; 16,95</span>
</button>
<button
type="button"
@click="selectedSize = 'groot'"
:class="selectedSize === 'groot' ? 'border-amber-400 bg-amber-50 ring-2 ring-amber-400 font-bold' : 'border-slate-200 hover:bg-slate-50 font-semibold'"
class="p-4 rounded-2xl border text-left transition cursor-pointer flex flex-col justify-between"
:class="selectedSize === 'groot' ? 'border-slate-900 bg-slate-50 ring-1 ring-slate-900 font-semibold' : 'border-slate-200 hover:bg-slate-50 font-normal'"
class="p-4 rounded-xl border text-left transition cursor-pointer flex flex-col justify-between"
>
<div>
<span class="text-xs font-bold text-slate-900 block">Groot (tot 22 cm)</span>
<span class="text-[11px] text-slate-500 block mt-0.5">Grote displays, cosplay props, vazen</span>
<span class="text-[11px] text-slate-500 block mt-0.5">Cosplay props, grote displays</span>
</div>
<span class="font-heading text-base font-black text-slate-900 mt-2 block">€ 24,95</span>
<span class="text-sm font-bold text-slate-900 mt-2 block">&euro; 24,95</span>
</button>
</div>
</div>
<!-- 3. Materiaal & Kleur -->
<div class="space-y-4">
<div class="space-y-3">
<div class="border-b border-slate-100 pb-2">
<h3 class="font-heading text-base font-black text-slate-900">
<span>3. Materiaal en printkleur</span>
<h3 class="text-xs font-bold text-slate-900 uppercase tracking-wider">
3. Materiaal en printkleur
</h3>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<!-- Materiaal -->
<div>
<label class="block text-xs font-bold text-slate-700 mb-1.5">Filament type</label>
<select name="material" x-model="selectedMaterial" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3 py-2.5 text-xs font-bold text-slate-800 focus:bg-white focus:outline-none">
<div class="space-y-1">
<label class="block text-xs font-medium text-slate-700">Filament type</label>
<select name="material" x-model="selectedMaterial" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3 py-2 text-xs font-medium text-slate-900 focus:bg-white focus:outline-none">
@foreach($materials as $mat)
<option value="{{ $mat->code }}">{{ $mat->name }}</option>
@endforeach
@@ -183,57 +183,54 @@
</div>
<!-- Kleur -->
<div>
<label class="block text-xs font-bold text-slate-700 mb-1.5">Printkleur: <span class="text-rose-500 font-bold" x-text="selectedColor"></span></label>
<div class="space-y-1">
<label class="block text-xs font-medium text-slate-700">Kleur: <span class="font-semibold text-slate-900" x-text="selectedColor"></span></label>
<input type="hidden" name="color" x-model="selectedColor">
<div class="flex flex-wrap gap-2 pt-1">
<div class="flex flex-wrap gap-1.5 pt-1">
@foreach($colors as $c)
<button
type="button"
@click="selectedColor = '{{ $c->name }}'"
:class="selectedColor === '{{ $c->name }}' ? 'ring-3 ring-rose-500 ring-offset-2 scale-110' : 'hover:scale-105 border-slate-300'"
class="w-7 h-7 rounded-xl border shadow-2xs transition flex items-center justify-center cursor-pointer relative"
:class="selectedColor === '{{ $c->name }}' ? 'ring-2 ring-slate-900 ring-offset-1' : 'hover:scale-105 border-slate-200'"
class="w-6 h-6 rounded-full border shadow-2xs transition flex items-center justify-center cursor-pointer"
style="background-color: {{ $c->hex }};"
title="{{ $c->name }}"
>
<template x-if="selectedColor === '{{ $c->name }}'">
<i data-lucide="check" class="w-3.5 h-3.5 {{ in_array($c->name, ['Sneeuwwit', 'Zon Geel (Pikachu)']) ? 'text-slate-950' : 'text-white' }} stroke-[3]"></i>
</template>
</button>
@endforeach
</div>
</div>
</div>
<div>
<label class="block text-xs font-bold text-slate-700 mb-1">Bijzondere instructies (optioneel)</label>
<textarea name="notes" rows="2" placeholder="Bijv. gewenste oriëntatie, specifieke wanddikte of infill..." class="w-full bg-slate-50 border border-slate-200 rounded-xl p-3 text-xs text-slate-800 focus:bg-white focus:outline-none"></textarea>
<div class="space-y-1">
<label class="block text-xs font-medium text-slate-700">Bijzondere instructies (optioneel)</label>
<textarea name="notes" rows="2" placeholder="Bijv. gewenste printoriëntatie of gewenste wanddikte..." class="w-full bg-slate-50 border border-slate-200 rounded-xl p-2.5 text-xs text-slate-900 focus:bg-white focus:outline-none"></textarea>
</div>
</div>
<!-- 4. Prijs & Bestelknop -->
<div class="p-5 rounded-2xl bg-slate-50 border border-slate-200/80 flex flex-col sm:flex-row items-center justify-between gap-4">
<div class="p-4 rounded-xl bg-slate-50 border border-slate-200 flex flex-col sm:flex-row items-center justify-between gap-4">
<div>
<span class="text-[10px] font-bold text-slate-400 uppercase tracking-wider block">Berekende Stukprijs</span>
<div class="flex items-baseline space-x-2">
<span class="font-heading text-3xl font-black text-slate-900">€ <span x-text="unitPrice"></span></span>
<span class="text-xs text-slate-500">incl. btw & materiaal</span>
<span class="text-[10px] font-semibold text-slate-400 uppercase tracking-wider block">Berekende stukprijs</span>
<div class="flex items-baseline space-x-1.5">
<span class="text-2xl font-bold text-slate-900">&euro; <span x-text="unitPrice"></span></span>
<span class="text-xs text-slate-500">incl. btw</span>
</div>
</div>
<div class="flex items-center space-x-3 w-full sm:w-auto">
<!-- Aantal -->
<div class="flex items-center border border-slate-200 rounded-xl bg-white overflow-hidden shadow-2xs">
<button type="button" @click="if (quantity > 1) quantity--" class="px-3 py-2 text-slate-700 font-bold cursor-pointer text-sm hover:bg-slate-100">-</button>
<span class="px-3 py-2 font-heading font-black text-xs text-slate-900" x-text="quantity"></span>
<div class="flex items-center border border-slate-200 rounded-lg bg-white overflow-hidden">
<button type="button" @click="if (quantity > 1) quantity--" class="px-2.5 py-1 text-slate-600 font-bold cursor-pointer hover:bg-slate-50">-</button>
<span class="px-2.5 py-1 text-xs font-semibold text-slate-900" x-text="quantity"></span>
<input type="hidden" name="quantity" x-model="quantity">
<button type="button" @click="if (quantity < 20) quantity++" class="px-3 py-2 text-slate-700 font-bold cursor-pointer text-sm hover:bg-slate-100">+</button>
<button type="button" @click="if (quantity < 20) quantity++" class="px-2.5 py-1 text-slate-600 font-bold cursor-pointer hover:bg-slate-50">+</button>
</div>
<!-- Bestelknop -->
<button type="submit" class="playful-btn flex-1 sm:flex-none px-6 py-3.5 rounded-2xl bg-amber-400 hover:bg-amber-300 text-slate-950 font-black text-xs sm:text-sm shadow-xs flex items-center justify-center space-x-2 cursor-pointer">
<i data-lucide="shopping-bag" class="w-4 h-4"></i>
<span>In Winkelwagen • € <span x-text="calculatedTotal"></span></span>
<button type="submit" class="flex-1 sm:flex-none px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 text-white font-medium text-xs shadow-xs flex items-center justify-center space-x-1.5 transition cursor-pointer">
<i data-lucide="shopping-bag" class="w-3.5 h-3.5"></i>
<span>In winkelwagen &bull; &euro; <span x-text="calculatedTotal"></span></span>
</button>
</div>
</div>
@@ -242,48 +239,48 @@
</div>
<!-- TAB 2: VRIJBLIJVENDE OFFERTE (VOOR MAATWERK & ADVIES) -->
<div x-show="activeTab === 'offerte'" class="p-6 sm:p-10 rounded-3xl bg-white border border-slate-200/80 shadow-lg shadow-slate-200/40 space-y-6">
<!-- TAB 2: VRIJBLIJVENDE OFFERTE -->
<div x-show="activeTab === 'offerte'" class="p-6 sm:p-8 rounded-2xl bg-white border border-slate-200/80 shadow-xs space-y-5">
<div class="border-b border-slate-100 pb-3">
<h3 class="font-heading text-lg font-black text-slate-900">Vrijblijvende Maatwerk Offerte</h3>
<p class="text-xs text-slate-500 mt-1">Voor grotere series, meerkleurige assemblages of speciale technische vereisten. We reageren binnen 24 uur met een passend voorstel.</p>
<h3 class="text-base font-bold text-slate-900">Vrijblijvende Maatwerk Offerte</h3>
<p class="text-xs text-slate-500 mt-0.5">Voor grotere series, multi-color assemblages of specifieke technische kunststoffen. Binnen 24 uur reactie.</p>
</div>
<form action="{{ route('custom.store') }}" method="POST" enctype="multipart/form-data" class="space-y-5">
<form action="{{ route('custom.store') }}" method="POST" enctype="multipart/form-data" class="space-y-4">
@csrf
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div>
<label class="block text-xs font-bold text-slate-700 uppercase tracking-wider mb-1">Naam *</label>
<input type="text" name="name" required value="{{ old('name') }}" placeholder="Bijv. Jan de Vries" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-xs text-slate-900 focus:bg-white focus:outline-none">
<div class="grid grid-cols-1 sm:grid-cols-2 gap-3.5">
<div class="space-y-1">
<label class="block text-xs font-medium text-slate-700">Naam *</label>
<input type="text" name="name" required value="{{ old('name') }}" placeholder="Jan Jansen" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3 py-2 text-xs text-slate-900 focus:bg-white focus:outline-none">
</div>
<div>
<label class="block text-xs font-bold text-slate-700 uppercase tracking-wider mb-1">E-mailadres *</label>
<input type="email" name="email" required value="{{ old('email') }}" placeholder="jouw@email.nl" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-xs text-slate-900 focus:bg-white focus:outline-none">
<div class="space-y-1">
<label class="block text-xs font-medium text-slate-700">E-mailadres *</label>
<input type="email" name="email" required value="{{ old('email') }}" placeholder="jouw@email.nl" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3 py-2 text-xs text-slate-900 focus:bg-white focus:outline-none">
</div>
</div>
<div>
<label class="block text-xs font-bold text-slate-700 uppercase tracking-wider mb-1">Telefoonnummer (optioneel)</label>
<input type="text" name="phone" value="{{ old('phone') }}" placeholder="06-12345678" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-xs text-slate-900 focus:bg-white focus:outline-none">
<div class="space-y-1">
<label class="block text-xs font-medium text-slate-700">Telefoonnummer (optioneel)</label>
<input type="text" name="phone" value="{{ old('phone') }}" placeholder="06-12345678" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3 py-2 text-xs text-slate-900 focus:bg-white focus:outline-none">
</div>
<div>
<label class="block text-xs font-bold text-slate-700 uppercase tracking-wider mb-1">3D Model Bestand (.stl, .step, .obj, .zip)</label>
<div class="p-6 border-2 border-dashed border-slate-200 hover:border-slate-300 rounded-2xl bg-slate-50/60 text-center transition">
<input type="file" name="model_file" accept=".stl,.step,.stp,.obj,.3mf,.zip" class="w-full text-xs text-slate-500 file:mr-4 file:py-2 file:px-4 file:rounded-xl file:border-0 file:text-xs file:font-bold file:bg-slate-900 file:text-white hover:file:bg-slate-800 cursor-pointer">
<p class="text-[11px] text-slate-400 mt-2">Ondersteunde formaten: STL, STEP, OBJ, 3MF of ZIP (max 50 MB)</p>
<div class="space-y-1">
<label class="block text-xs font-medium text-slate-700">3D Model Bestand (.stl, .step, .obj, .zip)</label>
<div class="p-5 border border-dashed border-slate-200 hover:border-slate-300 rounded-xl bg-slate-50/50 text-center transition">
<input type="file" name="model_file" accept=".stl,.step,.stp,.obj,.3mf,.zip" class="w-full text-xs text-slate-500 file:mr-3 file:py-1.5 file:px-3 file:rounded-lg file:border-0 file:text-xs file:font-medium file:bg-slate-900 file:text-white hover:file:bg-slate-800 cursor-pointer">
<p class="text-[10px] text-slate-400 mt-1.5">STL, STEP, OBJ, 3MF of ZIP (max 50 MB)</p>
</div>
</div>
<div>
<label class="block text-xs font-bold text-slate-700 uppercase tracking-wider mb-1">Toelichting, Afmetingen & Aantal *</label>
<textarea name="description" rows="4" required placeholder="Vermeld eventuele gewenste afmetingen, aantal en toepassing..." class="w-full bg-slate-50 border border-slate-200 rounded-xl p-3.5 text-xs text-slate-900 focus:bg-white focus:outline-none"></textarea>
<div class="space-y-1">
<label class="block text-xs font-medium text-slate-700">Toelichting, Afmetingen & Aantal *</label>
<textarea name="description" rows="3" required placeholder="Vermeld eventuele gewenste afmetingen, aantal stuks en gewenste mechanische sterkte..." class="w-full bg-slate-50 border border-slate-200 rounded-xl p-3 text-xs text-slate-900 focus:bg-white focus:outline-none"></textarea>
</div>
<button type="submit" class="playful-btn w-full py-4 rounded-2xl bg-slate-900 hover:bg-slate-800 text-white font-black text-xs uppercase tracking-wider transition shadow-sm flex items-center justify-center space-x-2 cursor-pointer">
<i data-lucide="send" class="w-4 h-4"></i>
<button type="submit" class="w-full py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 text-white font-medium text-xs transition shadow-xs flex items-center justify-center space-x-1.5 cursor-pointer">
<i data-lucide="send" class="w-3.5 h-3.5"></i>
<span>Aanvraag Verzenden</span>
</button>
</form>
@@ -291,4 +288,3 @@
</div>
@endsection
+152 -176
View File
@@ -3,62 +3,62 @@
@section('title', setting('site_name', 'Jouwdriedee.nl') . ' | ' . setting('site_tagline', 'Kleurrijke 3D Prints, Fidget Toys & Collectibles'))
@section('content')
<!-- Hero Section (Subtiel, Vriendelijk, Kleurrijk) -->
<section class="relative overflow-hidden bg-gradient-to-b from-amber-50/40 via-white to-[#FAF9F6] pt-8 pb-12 sm:pt-14 sm:pb-18 border-b border-slate-200/60">
<div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="grid grid-cols-1 lg:grid-cols-12 gap-8 lg:gap-12 items-center">
<!-- Hero Section (Fris, Subtiel, Modern & Ruimtelijk) -->
<section class="relative overflow-hidden pt-10 pb-16 sm:pt-16 sm:pb-24 border-b border-slate-100 bg-gradient-to-b from-slate-50/60 to-white">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-16 items-center">
<!-- Left Hero Content -->
<div class="lg:col-span-7 space-y-4 sm:space-y-6 text-center lg:text-left">
<div class="lg:col-span-7 space-y-6 text-center lg:text-left">
<div class="inline-flex items-center space-x-2 px-3.5 py-1.5 rounded-full bg-white border border-slate-200/80 shadow-xs text-slate-800 text-xs font-semibold">
<span class="w-2 h-2 rounded-full bg-emerald-500 animate-pulse"></span>
<div class="inline-flex items-center space-x-2 px-3 py-1 rounded-full bg-white border border-slate-200/80 text-slate-700 text-xs font-medium shadow-2xs">
<span class="w-1.5 h-1.5 rounded-full bg-emerald-500"></span>
<span>{{ setting('hero_badge', 'Nederlandse 3D Printstudio • Bambu Lab Precisie') }}</span>
</div>
<h1 class="font-heading text-3xl sm:text-5xl lg:text-6xl font-black tracking-tight text-slate-900 leading-[1.15]">
<h1 class="font-heading text-4xl sm:text-6xl font-extrabold tracking-tight text-slate-900 leading-[1.08]">
{!! nl2br(e(setting('hero_title', 'Kleurrijke 3D prints, fidget toys & collectibles.'))) !!}
</h1>
<p class="text-sm sm:text-base text-slate-600 max-w-xl mx-auto lg:mx-0 font-normal leading-relaxed">
<p class="text-base sm:text-lg text-slate-500 max-w-xl mx-auto lg:mx-0 font-normal leading-relaxed">
{{ setting('hero_subtitle', 'Van soepel bewegende kristaldraken en geometrische Pokémon planters tot filmprops op schaal. Haarscherp geprint in hoogwaardig Bio-PLA+, stevig PETG of flexibel TPU in jouw favoriete kleur!') }}
</p>
<!-- Action CTA's -->
<div class="flex flex-col sm:flex-row items-center justify-center lg:justify-start gap-3 pt-2">
<a href="{{ setting('hero_primary_btn_url', route('catalog')) }}" class="w-full sm:w-auto px-7 py-3.5 rounded-2xl bg-amber-400 hover:bg-amber-300 text-slate-950 font-bold text-sm flex items-center justify-center space-x-2 transition shadow-xs">
<!-- Clean Minimal CTAs -->
<div class="flex flex-col sm:flex-row items-center justify-center lg:justify-start gap-3 pt-1">
<a href="{{ setting('hero_primary_btn_url', route('catalog')) }}" class="w-full sm:w-auto px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 text-white font-medium text-sm flex items-center justify-center space-x-2 transition shadow-xs">
<span>{{ setting('hero_primary_btn_text', 'Bekijk de Collectie') }}</span>
<i data-lucide="arrow-right" class="w-4 h-4"></i>
</a>
<a href="{{ setting('hero_secondary_btn_url', route('catalog', ['category' => 'fidget-toys'])) }}" class="w-full sm:w-auto px-6 py-3.5 rounded-2xl bg-violet-50 hover:bg-violet-100 text-violet-900 font-bold text-sm flex items-center justify-center space-x-2 transition border border-violet-200/50">
<a href="{{ setting('hero_secondary_btn_url', route('catalog', ['category' => 'fidget-toys'])) }}" class="w-full sm:w-auto px-5 py-3 rounded-xl text-slate-700 hover:text-slate-900 hover:bg-slate-100 font-medium text-sm flex items-center justify-center space-x-2 transition">
<span>{{ setting('hero_secondary_btn_text', 'Fidget Toys & Slugs') }}</span>
<i data-lucide="sparkles" class="w-4 h-4 text-violet-600"></i>
<i data-lucide="sparkles" class="w-4 h-4 text-slate-400"></i>
</a>
</div>
<!-- Technische specificaties / Kwaliteitsbadges -->
<div class="pt-4 grid grid-cols-3 gap-2 sm:gap-4 max-w-md mx-auto lg:mx-0">
<div class="p-3 bg-white border border-slate-200/70 rounded-2xl shadow-xs text-center">
<div class="text-base sm:text-xl font-black text-slate-900 font-heading">
<!-- Sleek Micro Spec Badges -->
<div class="pt-6 border-t border-slate-200/60 grid grid-cols-3 gap-4 max-w-md mx-auto lg:mx-0 text-left">
<div>
<div class="text-base sm:text-lg font-bold text-slate-900">
{{ setting('hero_stat_1_val', '0.12 mm') }}
</div>
<div class="text-[10px] sm:text-[11px] font-semibold text-slate-500 mt-0.5">
<div class="text-[11px] text-slate-400 font-normal mt-0.5">
{{ setting('hero_stat_1_lbl', 'Minimale laaghoogte') }}
</div>
</div>
<div class="p-3 bg-white border border-slate-200/70 rounded-2xl shadow-xs text-center">
<div class="text-base sm:text-xl font-black text-slate-900 font-heading">
<div>
<div class="text-base sm:text-lg font-bold text-slate-900">
{{ setting('hero_stat_2_val', 'Bambu Lab') }}
</div>
<div class="text-[10px] sm:text-[11px] font-semibold text-slate-500 mt-0.5">
<div class="text-[11px] text-slate-400 font-normal mt-0.5">
{{ setting('hero_stat_2_lbl', 'X1-Carbon Precisie') }}
</div>
</div>
<div class="p-3 bg-white border border-slate-200/70 rounded-2xl shadow-xs text-center">
<div class="text-base sm:text-xl font-black text-slate-900 font-heading">
<div>
<div class="text-base sm:text-lg font-bold text-slate-900">
{{ setting('hero_stat_3_val', '2-3 Dagen') }}
</div>
<div class="text-[10px] sm:text-[11px] font-semibold text-slate-500 mt-0.5">
<div class="text-[11px] text-slate-400 font-normal mt-0.5">
{{ setting('hero_stat_3_lbl', 'Verzending via PostNL') }}
</div>
</div>
@@ -66,41 +66,29 @@
</div>
<!-- Right Hero Card / Werkelijke 3D Print Productfoto -->
<!-- Right Hero Card: Frameless Editorial Showcase -->
<div class="lg:col-span-5 relative">
<div class="relative rounded-3xl bg-white p-3 sm:p-4 border border-slate-200/80 shadow-md">
<div class="absolute top-5 right-5 bg-white/95 backdrop-blur-xs text-amber-900 border border-amber-200/80 font-bold text-[10px] sm:text-xs px-3 py-1 rounded-full shadow-xs z-10">
{{ setting('hero_card_badge', 'Meest gekozen print') }}
</div>
<div class="relative rounded-3xl overflow-hidden bg-slate-100 shadow-xl shadow-slate-900/5 aspect-4/3 sm:aspect-square group border border-slate-200/60">
<img
src="/images/products/crystal-dragon.jpg"
alt="Articulated Kristaldraak 3D Print"
class="w-full h-full object-cover object-center group-hover:scale-102 transition-transform duration-700 ease-out"
>
<div class="relative h-64 sm:h-84 rounded-2xl overflow-hidden bg-slate-100">
<img
src="/images/products/crystal-dragon.jpg"
alt="Articulated Kristaldraak 3D Print"
class="w-full h-full object-cover object-center hover:scale-105 transition-transform duration-500"
>
<div class="absolute bottom-2.5 left-2.5 right-2.5 p-3 rounded-xl bg-white/95 backdrop-blur-xs border border-slate-200/80 shadow-xs flex items-center justify-between">
<div>
<span class="text-[10px] font-bold uppercase tracking-wider text-rose-600 block">Fidget & Sensory</span>
<h3 class="font-heading font-black text-slate-900 text-xs sm:text-sm">Articulated Kristaldraak</h3>
</div>
<div class="text-right">
<span class="text-[10px] text-slate-400 block font-semibold">Vanaf</span>
<span class="font-heading font-black text-slate-900 text-xs sm:text-sm">€ 17,95</span>
</div>
<!-- Minimalist Floating Pill -->
<div class="absolute bottom-4 left-4 right-4 p-3 rounded-2xl bg-white/90 backdrop-blur-md border border-white/40 shadow-sm flex items-center justify-between">
<div>
<span class="text-[10px] font-semibold uppercase tracking-wider text-slate-400 block">Uitgelicht</span>
<h3 class="font-heading font-bold text-slate-900 text-xs sm:text-sm">Articulated Kristaldraak</h3>
</div>
<div class="text-right">
<span class="text-[10px] text-slate-400 block">Vanaf</span>
<span class="font-heading font-bold text-slate-900 text-xs sm:text-sm">€ 17,95</span>
</div>
</div>
<div class="mt-3 flex items-center justify-between text-[11px] text-slate-500 font-medium px-1">
<span class="flex items-center space-x-1.5">
<span class="w-1.5 h-1.5 rounded-full bg-emerald-500"></span>
<span>Print-in-place scharnieren</span>
</span>
<span class="flex items-center space-x-1 text-slate-600">
<span>Kleur naar keuze selecteerbaar</span>
</span>
<div class="absolute top-4 right-4 bg-slate-900/80 backdrop-blur-md text-white text-[11px] font-medium px-3 py-1 rounded-full shadow-xs">
{{ setting('hero_card_badge', 'Meest gekozen print') }}
</div>
</div>
</div>
@@ -109,156 +97,144 @@
</div>
</section>
<!-- 3 Categorieën Grid (Subtiel, Warm & Vriendelijk) -->
<section class="py-12 sm:py-16 bg-white border-b border-slate-200/60">
<!-- 3 Categorieën Strip (Schoon, Modern & Subtiel) -->
<section class="py-16 sm:py-20 bg-white">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex flex-col sm:flex-row sm:items-end justify-between mb-8 gap-2">
<div class="flex flex-col sm:flex-row sm:items-end justify-between mb-10 gap-3">
<div>
<span class="text-xs font-bold uppercase tracking-wider text-amber-700">
<span class="text-xs font-semibold uppercase tracking-wider text-slate-400">
{{ setting('categories_tag', 'Collecties') }}
</span>
<h2 class="font-heading text-2xl sm:text-3xl font-black text-slate-900 tracking-tight">
<h2 class="font-heading text-2xl sm:text-3xl font-bold text-slate-900 tracking-tight mt-1">
{{ setting('categories_title', 'Ontdek per categorie') }}
</h2>
<p class="text-xs text-slate-500 mt-1">
<p class="text-xs sm:text-sm text-slate-500 mt-1 max-w-lg">
{{ setting('categories_subtitle', 'Selecteer een categorie voor alle beschikbare modellen, formaten en kleurstalen.') }}
</p>
</div>
<a href="{{ route('catalog') }}" class="text-xs font-bold text-amber-700 hover:text-amber-800 flex items-center space-x-1 self-start sm:self-auto">
<span>Alle prints bekijken</span>
<i data-lucide="chevron-right" class="w-3.5 h-3.5"></i>
<a href="{{ route('catalog') }}" class="text-xs font-semibold text-slate-700 hover:text-slate-900 flex items-center space-x-1.5 self-start sm:self-auto transition">
<span>Alles bekijken</span>
<i data-lucide="arrow-right" class="w-3.5 h-3.5"></i>
</a>
</div>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 sm:gap-8">
<!-- 1. Fidget Toys -->
<a href="{{ route('catalog', ['category' => 'fidget-toys']) }}" class="rounded-3xl bg-[#FAF7FD] border border-violet-100 hover:border-violet-200 hover:shadow-md transition-all duration-300 overflow-hidden group shadow-xs flex flex-col justify-between">
<div class="h-48 overflow-hidden bg-violet-50">
<img src="/images/categories/fidget-toys.jpg" alt="Fidget Toys 3D Prints" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500">
<a href="{{ route('catalog', ['category' => 'fidget-toys']) }}" class="group block">
<div class="aspect-4/3 rounded-2xl overflow-hidden bg-slate-100 border border-slate-200/60 transition-all duration-300 group-hover:border-slate-300 group-hover:shadow-md">
<img src="/images/categories/fidget-toys.jpg" alt="Fidget Toys 3D Prints" class="w-full h-full object-cover group-hover:scale-103 transition-transform duration-500">
</div>
<div class="p-5">
<span class="text-[10px] font-bold text-violet-700 uppercase tracking-wider block">Beweegbare Scharnieren</span>
<h3 class="font-heading text-lg font-black text-slate-900 group-hover:text-violet-700 transition">Fidget Toys & Sensory</h3>
<p class="text-xs text-slate-500 mt-1.5 line-clamp-2 leading-relaxed font-normal">Kristaldraken, wriemel-slakken en compacte folding cubes met soepel klikgeluid.</p>
<div class="mt-4 flex items-center text-xs font-bold text-violet-700 group-hover:translate-x-1 transition-transform">
<span>Bekijk collectie</span>
<i data-lucide="arrow-right" class="w-3.5 h-3.5 ml-1"></i>
<div class="pt-3.5 space-y-1">
<div class="flex items-center justify-between">
<h3 class="font-heading font-semibold text-base text-slate-900 group-hover:text-sky-600 transition">Fidget Toys & Sensory</h3>
<i data-lucide="arrow-up-right" class="w-4 h-4 text-slate-400 group-hover:text-slate-900 group-hover:translate-x-0.5 group-hover:-translate-y-0.5 transition"></i>
</div>
<p class="text-xs text-slate-500 line-clamp-1 font-normal">Kristaldraken, wriemel-slakken en compacte cubes met soepele scharnieren.</p>
</div>
</a>
<!-- 2. Pokémon -->
<a href="{{ route('catalog', ['category' => 'pokemon-3d']) }}" class="rounded-3xl bg-[#FFFBF0] border border-amber-100 hover:border-amber-200 hover:shadow-md transition-all duration-300 overflow-hidden group shadow-xs flex flex-col justify-between">
<div class="h-48 overflow-hidden bg-amber-50">
<img src="/images/categories/pokemon-3d.jpg" alt="Pokémon 3D Prints" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500">
<a href="{{ route('catalog', ['category' => 'pokemon-3d']) }}" class="group block">
<div class="aspect-4/3 rounded-2xl overflow-hidden bg-slate-100 border border-slate-200/60 transition-all duration-300 group-hover:border-slate-300 group-hover:shadow-md">
<img src="/images/categories/pokemon-3d.jpg" alt="Pokémon 3D Prints" class="w-full h-full object-cover group-hover:scale-103 transition-transform duration-500">
</div>
<div class="p-5">
<span class="text-[10px] font-bold text-amber-700 uppercase tracking-wider block">Gedetailleerde Figuren</span>
<h3 class="font-heading text-lg font-black text-slate-900 group-hover:text-amber-700 transition">Pokémon 3D Prints</h3>
<p class="text-xs text-slate-500 mt-1.5 line-clamp-2 leading-relaxed font-normal">Low-poly Pikachu planters, beweegbare Charizard, sluitende Pokéballs en Gengar.</p>
<div class="mt-4 flex items-center text-xs font-bold text-amber-800 group-hover:translate-x-1 transition-transform">
<span>Bekijk collectie</span>
<i data-lucide="arrow-right" class="w-3.5 h-3.5 ml-1"></i>
<div class="pt-3.5 space-y-1">
<div class="flex items-center justify-between">
<h3 class="font-heading font-semibold text-base text-slate-900 group-hover:text-sky-600 transition">Pokémon 3D Prints</h3>
<i data-lucide="arrow-up-right" class="w-4 h-4 text-slate-400 group-hover:text-slate-900 group-hover:translate-x-0.5 group-hover:-translate-y-0.5 transition"></i>
</div>
<p class="text-xs text-slate-500 line-clamp-1 font-normal">Pikachu planters, beweegbare Charizard, Pokéballs en Gengar figuren.</p>
</div>
</a>
<!-- 3. Film & Gaming -->
<a href="{{ route('catalog', ['category' => 'film-popculture']) }}" class="rounded-3xl bg-[#FFF5F5] border border-rose-100 hover:border-rose-200 hover:shadow-md transition-all duration-300 overflow-hidden group shadow-xs flex flex-col justify-between">
<div class="h-48 overflow-hidden bg-rose-50">
<img src="/images/categories/film-popculture.jpg" alt="Film & Gaming 3D Prints" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500">
<a href="{{ route('catalog', ['category' => 'film-popculture']) }}" class="group block">
<div class="aspect-4/3 rounded-2xl overflow-hidden bg-slate-100 border border-slate-200/60 transition-all duration-300 group-hover:border-slate-300 group-hover:shadow-md">
<img src="/images/categories/film-popculture.jpg" alt="Film & Gaming 3D Prints" class="w-full h-full object-cover group-hover:scale-103 transition-transform duration-500">
</div>
<div class="p-5">
<span class="text-[10px] font-bold text-rose-600 uppercase tracking-wider block">Collectibles & Display</span>
<h3 class="font-heading text-lg font-black text-slate-900 group-hover:text-rose-600 transition">Film, Gaming & Props</h3>
<p class="text-xs text-slate-500 mt-1.5 line-clamp-2 leading-relaxed font-normal">Lightsaber standaarden, Thor Mjolnir bureau-organizers en gedetailleerde figuren.</p>
<div class="mt-4 flex items-center text-xs font-bold text-rose-600 group-hover:translate-x-1 transition-transform">
<span>Bekijk collectie</span>
<i data-lucide="arrow-right" class="w-3.5 h-3.5 ml-1"></i>
<div class="pt-3.5 space-y-1">
<div class="flex items-center justify-between">
<h3 class="font-heading font-semibold text-base text-slate-900 group-hover:text-sky-600 transition">Film, Gaming & Props</h3>
<i data-lucide="arrow-up-right" class="w-4 h-4 text-slate-400 group-hover:text-slate-900 group-hover:translate-x-0.5 group-hover:-translate-y-0.5 transition"></i>
</div>
<p class="text-xs text-slate-500 line-clamp-1 font-normal">Lightsaber displays, Mjolnir desk organizers en iconische filmfiguren.</p>
</div>
</a>
</div>
</div>
</section>
<!-- Uitgelichte Prints Showcase (Subtiel & Vriendelijk) -->
<section class="py-12 sm:py-16 bg-[#FAF9F6]">
<!-- Uitgelichte Prints Showcase (Crisp & Modern Grid) -->
<section class="py-16 sm:py-20 bg-slate-50/50 border-t border-slate-100">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex flex-col sm:flex-row sm:items-end justify-between mb-8 gap-3">
<div class="flex flex-col sm:flex-row sm:items-end justify-between mb-10 gap-3">
<div>
<span class="text-xs font-bold uppercase tracking-wider text-amber-700">
<span class="text-xs font-semibold uppercase tracking-wider text-slate-400">
{{ setting('featured_tag', 'Selectie') }}
</span>
<h2 class="font-heading text-2xl sm:text-3xl font-black text-slate-900 tracking-tight">
<h2 class="font-heading text-2xl sm:text-3xl font-bold text-slate-900 tracking-tight mt-1">
{{ setting('featured_title', 'Populaire modellen') }}
</h2>
<p class="text-xs text-slate-500 mt-1">
<p class="text-xs sm:text-sm text-slate-500 mt-1">
{{ setting('featured_subtitle', 'Elk item wordt op bestelling geprint in jouw gewenste kleur en met de hand nagekeken.') }}
</p>
</div>
<a href="{{ route('catalog') }}" class="px-4 py-2 rounded-xl bg-white border border-slate-200 text-slate-700 text-xs font-bold hover:bg-slate-50 transition flex items-center space-x-1.5 self-start sm:self-auto shadow-xs">
<a href="{{ route('catalog') }}" class="px-4 py-2 rounded-lg bg-white border border-slate-200 text-slate-700 text-xs font-medium hover:bg-slate-50 transition flex items-center space-x-1.5 self-start sm:self-auto shadow-2xs">
<span>Volledige catalogus</span>
<i data-lucide="arrow-right" class="w-3.5 h-3.5"></i>
</a>
</div>
<!-- 2 Kolommen mobiel, 3 op desktop -->
<div class="grid grid-cols-2 md:grid-cols-3 gap-3 sm:gap-6">
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4 sm:gap-6">
@foreach($featuredProducts as $product)
<div class="rounded-2xl sm:rounded-3xl bg-white border border-slate-200/80 shadow-xs hover:shadow-md transition-all duration-200 overflow-hidden flex flex-col justify-between group">
<div class="group flex flex-col justify-between bg-white rounded-2xl p-3 border border-slate-200/60 card-hover">
<!-- Afbeelding & Categorie Badge -->
<div class="relative h-44 sm:h-60 overflow-hidden bg-slate-100">
<img
src="{{ $product->image_url }}"
alt="{{ $product->name }}"
class="w-full h-full object-cover object-center group-hover:scale-105 transition-transform duration-500"
loading="lazy"
>
@if($product->category)
<div class="absolute top-2 left-2 sm:top-3 sm:left-3">
<span class="px-2 py-0.5 sm:px-2.5 sm:py-1 rounded-md bg-white/95 backdrop-blur-xs text-slate-800 text-[9px] sm:text-[10px] font-bold shadow-xs border border-slate-200/60">
{{ $product->category->name }}
</span>
</div>
@endif
<div>
<!-- Product Photo Frame -->
<div class="relative aspect-square rounded-xl overflow-hidden bg-slate-50">
<img
src="{{ $product->image_url }}"
alt="{{ $product->name }}"
class="w-full h-full object-cover object-center group-hover:scale-103 transition-transform duration-500 ease-out"
loading="lazy"
>
@if($product->category)
<div class="absolute top-2 left-2">
<span class="px-2 py-0.5 rounded-md bg-white/90 backdrop-blur-xs text-slate-700 text-[10px] font-medium border border-slate-200/50 shadow-2xs">
{{ $product->category->name }}
</span>
</div>
@endif
</div>
@if($product->print_time_hours)
<div class="hidden sm:flex absolute bottom-2.5 left-2.5 px-2 py-0.5 rounded-md bg-white/95 backdrop-blur-xs text-slate-700 border border-slate-200/60 text-[10px] font-medium items-center space-x-1 shadow-xs">
<i data-lucide="clock" class="w-3 h-3 text-sky-600"></i>
<span>{{ $product->print_time_hours }}u printtijd</span>
</div>
@endif
</div>
<!-- Inhoud -->
<div class="p-3.5 sm:p-5 flex-1 flex flex-col justify-between space-y-3">
<div>
<h3 class="font-heading text-xs sm:text-base font-black text-slate-900 group-hover:text-amber-700 transition tracking-tight line-clamp-2">
<!-- Product Info -->
<div class="pt-3 pb-1">
<h3 class="font-heading text-xs sm:text-sm font-semibold text-slate-900 group-hover:text-sky-600 transition line-clamp-1">
<a href="{{ route('product.show', $product->slug) }}">
{{ $product->name }}
</a>
</h3>
<p class="hidden sm:block text-xs text-slate-500 mt-1 line-clamp-2 leading-relaxed font-normal">
<p class="text-[11px] text-slate-400 mt-0.5 line-clamp-1 font-normal">
{{ $product->short_description }}
</p>
</div>
</div>
<!-- Footer met prijs & actieknop -->
<div class="pt-2 sm:pt-3 border-t border-slate-100 flex items-center justify-between">
<div>
<span class="text-[9px] sm:text-[10px] text-slate-400 font-bold uppercase block">Vanaf</span>
<span class="font-heading text-sm sm:text-lg font-black text-slate-900">
{{ $product->formatted_price }}
</span>
</div>
<a href="{{ route('product.show', $product->slug) }}" class="px-3 sm:px-3.5 py-1.5 sm:py-2 rounded-xl bg-amber-400 hover:bg-amber-300 text-slate-950 text-[10px] sm:text-xs font-bold transition flex items-center space-x-1 shadow-xs">
<span>Kies Kleur</span>
<i data-lucide="chevron-right" class="w-3 h-3"></i>
</a>
<!-- Footer: Price & Direct Link -->
<div class="pt-2 border-t border-slate-100 flex items-center justify-between mt-2">
<div>
<span class="text-[10px] text-slate-400 block font-normal leading-none">Vanaf</span>
<span class="font-heading text-sm font-bold text-slate-900">
{{ $product->formatted_price }}
</span>
</div>
<a href="{{ route('product.show', $product->slug) }}" class="px-2.5 py-1.5 rounded-lg bg-slate-900 hover:bg-slate-800 text-white text-[11px] font-medium transition flex items-center space-x-1 cursor-pointer">
<span>Kies kleur</span>
<i data-lucide="chevron-right" class="w-3 h-3"></i>
</a>
</div>
</div>
@@ -267,29 +243,29 @@
</div>
</section>
<!-- Subtiele Kwaliteits & Voordelen Banner (Aanpasbaar via Admin) -->
<section class="py-12 sm:py-16 bg-white border-t border-slate-200/60">
<!-- Subtiele USP's (Puur, Wit & Ruimtelijk) -->
<section class="py-16 sm:py-20 bg-white border-t border-slate-100">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center max-w-2xl mx-auto mb-10">
<span class="text-xs font-bold uppercase tracking-wider text-amber-700">
<div class="text-center max-w-xl mx-auto mb-14">
<span class="text-xs font-semibold uppercase tracking-wider text-slate-400">
{{ setting('usp_tag', 'Waarom Jouwdriedee.nl?') }}
</span>
<h2 class="font-heading text-2xl sm:text-3xl font-black text-slate-900 tracking-tight mt-1">
<h2 class="font-heading text-2xl sm:text-3xl font-bold text-slate-900 tracking-tight mt-1">
{{ setting('usp_title', 'Kwaliteit en passie in elke printlaag') }}
</h2>
<p class="text-xs sm:text-sm text-slate-500 mt-2 leading-relaxed font-normal">
<p class="text-xs sm:text-sm text-slate-500 mt-2 font-normal leading-relaxed">
{{ setting('usp_subtitle', 'Geen vage levertijden of ruwe prints. Elk model wordt in eigen werkplaats gekalibreerd, geprint en gecontroleerd voordat het veilig verpakt op de post gaat.') }}
</p>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 sm:gap-6">
<!-- Feature 1 -->
<div class="p-5 rounded-3xl bg-[#FAF7FD] border border-violet-100 text-left space-y-2">
<div class="w-10 h-10 rounded-2xl bg-violet-200/60 text-violet-700 flex items-center justify-center font-black">
<i data-lucide="printer" class="w-5 h-5"></i>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-8">
<!-- USP 1 -->
<div class="space-y-2">
<div class="w-9 h-9 rounded-lg bg-slate-100 text-slate-800 flex items-center justify-center font-medium">
<i data-lucide="printer" class="w-4 h-4"></i>
</div>
<h3 class="font-heading font-black text-slate-900 text-sm">
<h3 class="font-heading font-semibold text-slate-900 text-sm">
{{ setting('usp_1_title', 'Bambu Lab Precisie') }}
</h3>
<p class="text-xs text-slate-500 leading-relaxed font-normal">
@@ -297,12 +273,12 @@
</p>
</div>
<!-- Feature 2 -->
<div class="p-5 rounded-3xl bg-[#FFFBF0] border border-amber-100 text-left space-y-2">
<div class="w-10 h-10 rounded-2xl bg-amber-200/60 text-amber-800 flex items-center justify-center font-black">
<i data-lucide="palette" class="w-5 h-5"></i>
<!-- USP 2 -->
<div class="space-y-2">
<div class="w-9 h-9 rounded-lg bg-slate-100 text-slate-800 flex items-center justify-center font-medium">
<i data-lucide="palette" class="w-4 h-4"></i>
</div>
<h3 class="font-heading font-black text-slate-900 text-sm">
<h3 class="font-heading font-semibold text-slate-900 text-sm">
{{ setting('usp_2_title', '16+ Kleurvariaties') }}
</h3>
<p class="text-xs text-slate-500 leading-relaxed font-normal">
@@ -310,12 +286,12 @@
</p>
</div>
<!-- Feature 3 -->
<div class="p-5 rounded-3xl bg-[#F0FDF4] border border-emerald-100 text-left space-y-2">
<div class="w-10 h-10 rounded-2xl bg-emerald-200/60 text-emerald-800 flex items-center justify-center font-black">
<i data-lucide="shield-check" class="w-5 h-5"></i>
<!-- USP 3 -->
<div class="space-y-2">
<div class="w-9 h-9 rounded-lg bg-slate-100 text-slate-800 flex items-center justify-center font-medium">
<i data-lucide="shield-check" class="w-4 h-4"></i>
</div>
<h3 class="font-heading font-black text-slate-900 text-sm">
<h3 class="font-heading font-semibold text-slate-900 text-sm">
{{ setting('usp_3_title', 'Veilig & Duurzaam PLA+') }}
</h3>
<p class="text-xs text-slate-500 leading-relaxed font-normal">
@@ -323,12 +299,12 @@
</p>
</div>
<!-- Feature 4 -->
<div class="p-5 rounded-3xl bg-[#EFF6FF] border border-sky-100 text-left space-y-2">
<div class="w-10 h-10 rounded-2xl bg-sky-200/60 text-sky-800 flex items-center justify-center font-black">
<i data-lucide="truck" class="w-5 h-5"></i>
<!-- USP 4 -->
<div class="space-y-2">
<div class="w-9 h-9 rounded-lg bg-slate-100 text-slate-800 flex items-center justify-center font-medium">
<i data-lucide="truck" class="w-4 h-4"></i>
</div>
<h3 class="font-heading font-black text-slate-900 text-sm">
<h3 class="font-heading font-semibold text-slate-900 text-sm">
{{ setting('usp_4_title', 'Snelle Verzending') }}
</h3>
<p class="text-xs text-slate-500 leading-relaxed font-normal">
@@ -337,10 +313,10 @@
</div>
</div>
<div class="mt-8 text-center">
<a href="{{ route('catalog') }}" class="inline-flex items-center space-x-2 px-6 py-3 rounded-2xl bg-amber-400 hover:bg-amber-300 text-slate-950 font-bold text-xs transition shadow-xs">
<div class="mt-12 text-center">
<a href="{{ route('catalog') }}" class="inline-flex items-center space-x-2 px-5 py-2.5 rounded-xl bg-slate-100 hover:bg-slate-200 text-slate-900 font-medium text-xs transition">
<span>{{ setting('usp_btn_text', 'Bekijk alle 3D prints in de winkel') }}</span>
<i data-lucide="arrow-right" class="w-4 h-4"></i>
<i data-lucide="arrow-right" class="w-3.5 h-3.5"></i>
</a>
</div>
+134 -142
View File
@@ -1,24 +1,24 @@
@extends('layouts.app')
@section('title', $product->name . ' 🎨 | Jouwdriedee.nl')
@section('title', $product->name . ' | Jouwdriedee.nl')
@section('content')
<!-- Breadcrumbs -->
<div class="bg-white/80 border-b border-slate-200/60 py-2.5 sm:py-3">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-xs font-semibold text-slate-500 flex items-center space-x-1.5 overflow-x-auto whitespace-nowrap">
<a href="{{ route('home') }}" class="hover:text-amber-700">Home</a>
<span>/</span>
<a href="{{ route('catalog') }}" class="hover:text-amber-700">Catalogus</a>
<!-- Breadcrumbs (Subtiel) -->
<div class="border-b border-slate-100 bg-white py-3">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-xs font-normal text-slate-500 flex items-center space-x-2 overflow-x-auto whitespace-nowrap">
<a href="{{ route('home') }}" class="hover:text-slate-900 transition">Home</a>
<span class="text-slate-300">/</span>
<a href="{{ route('catalog') }}" class="hover:text-slate-900 transition">Catalogus</a>
@if($product->category)
<span>/</span>
<a href="{{ route('catalog', ['category' => $product->category->slug]) }}" class="hover:text-amber-700">{{ $product->category->name }}</a>
<span class="text-slate-300">/</span>
<a href="{{ route('catalog', ['category' => $product->category->slug]) }}" class="hover:text-slate-900 transition">{{ $product->category->name }}</a>
@endif
<span>/</span>
<span class="font-bold text-slate-900 truncate">{{ $product->name }}</span>
<span class="text-slate-300">/</span>
<span class="text-slate-900 font-medium truncate">{{ $product->name }}</span>
</div>
</div>
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6 sm:py-10"
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8 sm:py-14"
x-data="{
basePrice: {{ $product->base_price }},
selectedMaterial: '{{ $product->available_materials[0] ?? 'pla' }}',
@@ -51,10 +51,10 @@
}
}">
<div class="grid grid-cols-1 lg:grid-cols-12 gap-8 lg:gap-12">
<div class="grid grid-cols-1 lg:grid-cols-12 gap-10 lg:gap-14">
<!-- Linkerkant: Productgalerij & Specificaties -->
<div class="lg:col-span-6 space-y-4 sm:space-y-6">
<!-- Linkerkant: Productgalerij & Details -->
<div class="lg:col-span-7 space-y-6">
@php
$gallery = [];
if (!empty($product->image_url)) {
@@ -72,7 +72,7 @@
}
@endphp
<!-- Productgalerij met interactieve fotokiezer -->
<!-- Fotokiezer -->
<div class="space-y-3"
x-data="{
activeImage: '{{ $gallery[0] }}',
@@ -92,62 +92,59 @@
}
}">
<div class="rounded-3xl bg-white border border-slate-200/80 overflow-hidden shadow-xs relative group">
<div class="relative h-72 sm:h-96 md:h-112 bg-slate-100 flex items-center justify-center overflow-hidden">
<img
:src="activeImage"
alt="{{ $product->name }}"
class="w-full h-full object-cover object-center transition-all duration-300"
>
<div class="absolute top-3 left-3 flex flex-col gap-1.5 z-10">
@if($product->is_featured)
<span class="px-3 py-1 rounded-full bg-white/95 backdrop-blur-xs text-amber-800 border border-amber-200 text-xs font-bold shadow-xs flex items-center space-x-1">
<span>★</span>
<span>Populair</span>
</span>
@endif
<div class="rounded-2xl bg-slate-50 overflow-hidden relative group border border-slate-200/60 aspect-4/3 sm:aspect-square">
<img
:src="activeImage"
alt="{{ $product->name }}"
class="w-full h-full object-cover object-center transition-all duration-300"
>
@if($product->is_featured)
<div class="absolute top-3 left-3">
<span class="px-2.5 py-1 rounded-md bg-white/95 backdrop-blur-xs text-slate-800 text-[11px] font-medium border border-slate-200/60 shadow-2xs">
Uitgelicht
</span>
</div>
@endif
<!-- Foto Counter Badge -->
@if(count($gallery) > 1)
<div class="absolute bottom-3 right-3">
<span class="px-2.5 py-1 rounded-md bg-white/90 backdrop-blur-xs text-slate-600 border border-slate-200/50 font-mono text-[11px] shadow-2xs">
<span x-text="currentIndex + 1"></span> / {{ count($gallery) }}
</span>
</div>
<!-- Foto Counter Badge -->
@if(count($gallery) > 1)
<div class="absolute bottom-3 right-3 z-10">
<span class="px-2.5 py-1 rounded-full bg-white/95 backdrop-blur-xs text-slate-700 border border-slate-200 font-mono text-[11px] font-bold shadow-xs">
<span x-text="currentIndex + 1"></span> / {{ count($gallery) }}
</span>
</div>
<!-- Vorige / Volgende Pijlen -->
<button
type="button"
@click="prevImage"
class="absolute left-3 top-1/2 -translate-y-1/2 w-8 h-8 rounded-full bg-white/90 hover:bg-white text-slate-700 shadow-sm flex items-center justify-center transition opacity-0 group-hover:opacity-100 cursor-pointer"
aria-label="Vorige foto"
>
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"/></svg>
</button>
<!-- Vorige / Volgende Pijlen -->
<button
type="button"
@click="prevImage"
class="absolute left-3 top-1/2 -translate-y-1/2 w-9 h-9 rounded-full bg-white/90 hover:bg-white text-slate-800 shadow-md flex items-center justify-center transition opacity-0 group-hover:opacity-100 focus:opacity-100 z-10"
aria-label="Vorige foto"
>
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M15 19l-7-7 7-7"/></svg>
</button>
<button
type="button"
@click="nextImage"
class="absolute right-3 top-1/2 -translate-y-1/2 w-9 h-9 rounded-full bg-white/90 hover:bg-white text-slate-800 shadow-md flex items-center justify-center transition opacity-0 group-hover:opacity-100 focus:opacity-100 z-10"
aria-label="Volgende foto"
>
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M9 5l7 7-7 7"/></svg>
</button>
@endif
</div>
<button
type="button"
@click="nextImage"
class="absolute right-3 top-1/2 -translate-y-1/2 w-8 h-8 rounded-full bg-white/90 hover:bg-white text-slate-700 shadow-sm flex items-center justify-center transition opacity-0 group-hover:opacity-100 cursor-pointer"
aria-label="Volgende foto"
>
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/></svg>
</button>
@endif
</div>
<!-- Thumbnails Strip (indien meerdere foto's) -->
<!-- Thumbnails Strip -->
@if(count($gallery) > 1)
<div class="flex items-center space-x-2.5 overflow-x-auto pb-2">
<div class="flex items-center space-x-2 overflow-x-auto pb-1">
<template x-for="(img, idx) in images" :key="idx">
<button
type="button"
@click="selectImage(idx)"
class="relative w-16 h-16 sm:w-20 sm:h-20 rounded-2xl overflow-hidden shrink-0 border-2 transition-all duration-200 cursor-pointer"
:class="currentIndex === idx ? 'border-amber-400 ring-2 ring-amber-400/40 shadow-xs scale-105' : 'border-slate-200 opacity-60 hover:opacity-100 hover:border-slate-300'"
class="relative w-16 h-16 rounded-xl overflow-hidden shrink-0 border transition-all cursor-pointer"
:class="currentIndex === idx ? 'border-slate-900 ring-1 ring-slate-900 opacity-100' : 'border-slate-200 opacity-60 hover:opacity-100'"
>
<img :src="img" alt="Thumbnail" class="w-full h-full object-cover">
</button>
@@ -156,86 +153,81 @@
@endif
</div>
<!-- Print Specificaties Card (Minder lomp, verfijnd) -->
<div class="p-4 sm:p-6 rounded-2xl bg-white border border-slate-200/80 shadow-xs space-y-3">
<h3 class="font-heading text-xs font-black text-slate-900 uppercase tracking-wider flex items-center space-x-1.5">
<span>🖨️</span>
<span>Print Details & Formaat</span>
<!-- Print Specificaties Strip (Subtiel) -->
<div class="p-5 rounded-2xl bg-slate-50/70 border border-slate-200/60 space-y-4">
<h3 class="text-xs font-semibold text-slate-900 uppercase tracking-wider">
Print Specificaties
</h3>
<div class="grid grid-cols-2 sm:grid-cols-4 gap-2 sm:gap-3 text-xs">
<div class="p-3 rounded-xl bg-slate-50 border border-slate-100 text-center">
<span class="text-slate-400 block text-[10px] uppercase font-bold">Formaat</span>
<span class="font-black text-slate-800 mt-0.5 block font-heading">{{ $product->dimensions ?? 'Standaard' }}</span>
<div class="grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs">
<div class="p-2.5 rounded-lg bg-white border border-slate-200/50">
<span class="text-slate-400 block text-[10px] uppercase font-medium">Formaat</span>
<span class="font-semibold text-slate-800 mt-0.5 block">{{ $product->dimensions ?? 'Standaard' }}</span>
</div>
<div class="p-3 rounded-xl bg-slate-50 border border-slate-100 text-center">
<span class="text-slate-400 block text-[10px] uppercase font-bold">Gewicht</span>
<span class="font-black text-slate-800 mt-0.5 block font-heading">~{{ $product->weight_grams ?? '80' }}g</span>
<div class="p-2.5 rounded-lg bg-white border border-slate-200/50">
<span class="text-slate-400 block text-[10px] uppercase font-medium">Gewicht</span>
<span class="font-semibold text-slate-800 mt-0.5 block">~{{ $product->weight_grams ?? '80' }}g</span>
</div>
<div class="p-3 rounded-xl bg-slate-50 border border-slate-100 text-center">
<span class="text-slate-400 block text-[10px] uppercase font-bold">Printtijd</span>
<span class="font-black text-slate-800 mt-0.5 block font-heading">{{ $product->print_time_hours ?? '4.0' }} u</span>
<div class="p-2.5 rounded-lg bg-white border border-slate-200/50">
<span class="text-slate-400 block text-[10px] uppercase font-medium">Printduur</span>
<span class="font-semibold text-slate-800 mt-0.5 block">{{ $product->print_time_hours ?? '4.0' }} uur</span>
</div>
<div class="p-3 rounded-xl bg-slate-50 border border-slate-100 text-center">
<span class="text-slate-400 block text-[10px] uppercase font-bold">Resolutie</span>
<span class="font-black text-slate-800 mt-0.5 block font-heading">0.12 - 0.16 mm</span>
<div class="p-2.5 rounded-lg bg-white border border-slate-200/50">
<span class="text-slate-400 block text-[10px] uppercase font-medium">Resolutie</span>
<span class="font-semibold text-slate-800 mt-0.5 block">0.12 - 0.16 mm</span>
</div>
</div>
<div class="pt-2 flex flex-col sm:flex-row items-center justify-between text-[11px] text-slate-500 font-medium border-t border-slate-100 gap-1.5">
<span class="flex items-center space-x-1">
<span>✨</span>
<span>Geprint op precisie Bambu Lab printers</span>
</span>
<span class="flex items-center space-x-1">
<span>🌱</span>
<span>Veilig & biologisch afbreekbaar PLA</span>
<div class="pt-2 flex flex-col sm:flex-row items-center justify-between text-[11px] text-slate-500 font-normal border-t border-slate-200/50 gap-2">
<span class="flex items-center space-x-1.5">
<span class="w-1.5 h-1.5 rounded-full bg-emerald-500"></span>
<span>Geprint op precisie Bambu Lab X1/P1 printers</span>
</span>
<span>100% biologisch afbreekbaar Bio-PLA+</span>
</div>
</div>
<!-- Productomschrijving -->
<div class="p-4 sm:p-6 rounded-2xl bg-white border border-slate-200/80 shadow-xs space-y-2">
<h3 class="font-heading text-sm font-black text-slate-900 flex items-center space-x-1.5">
<span>📝</span>
<span>Over deze 3D print</span>
<div class="p-5 rounded-2xl bg-white border border-slate-200/60 space-y-3">
<h3 class="text-sm font-semibold text-slate-900">
Omschrijving
</h3>
<div class="text-xs text-slate-600 leading-relaxed space-y-1.5 font-normal">
<div class="text-xs text-slate-600 leading-relaxed space-y-2 font-normal">
{!! nl2br(strip_tags($product->description, '<p><br><strong><b><em><i><u><ul><ol><li><h3><h4>')) !!}
</div>
</div>
</div>
<!-- Rechterkant: Interactive Configurator & Bestelmodule -->
<div class="lg:col-span-6 space-y-6">
<div class="p-5 sm:p-8 rounded-3xl bg-white border border-slate-200/80 shadow-sm space-y-5 sm:space-y-6">
<!-- Rechterkant: Clean Configurator & Bestelmodule -->
<div class="lg:col-span-5 space-y-6">
<div class="p-6 sm:p-7 rounded-2xl bg-white border border-slate-200/70 shadow-xs space-y-6">
<div>
<div class="space-y-1.5">
@if($product->category)
<span class="inline-block px-2.5 py-0.5 rounded-full bg-amber-100 text-[10px] sm:text-xs font-bold text-amber-900 mb-1.5">
<span class="inline-block px-2.5 py-0.5 rounded-md bg-slate-100 text-[10px] font-medium text-slate-700">
{{ $product->category->name }}
</span>
@endif
<h1 class="font-heading text-xl sm:text-3xl font-black text-slate-900 tracking-tight">{{ $product->name }}</h1>
<p class="text-xs text-slate-500 mt-1 leading-relaxed">{{ $product->short_description }}</p>
<h1 class="font-heading text-xl sm:text-2xl font-bold text-slate-900 tracking-tight">{{ $product->name }}</h1>
<p class="text-xs text-slate-500 font-normal leading-relaxed">{{ $product->short_description }}</p>
</div>
<!-- Prijs Display -->
<div class="p-3.5 sm:p-4 rounded-2xl bg-amber-50/70 border border-amber-200/60 flex items-center justify-between">
<div class="p-4 rounded-xl bg-slate-50 border border-slate-200/60 flex items-center justify-between">
<div>
<span class="text-[10px] text-slate-500 block font-bold uppercase">Stukprijs</span>
<span class="text-[10px] text-slate-400 block uppercase font-medium">Stukprijs</span>
<div class="flex items-baseline space-x-1.5">
<span class="font-heading text-2xl sm:text-3xl font-black text-slate-900">€ <span x-text="unitPriceFormatted"></span></span>
<span class="text-xs text-slate-500 font-normal">incl. btw</span>
<span class="font-heading text-2xl font-extrabold text-slate-900">€ <span x-text="unitPriceFormatted"></span></span>
<span class="text-[11px] text-slate-500">incl. btw</span>
</div>
</div>
<div class="text-right">
<span class="px-2.5 py-1 rounded-full bg-emerald-100 text-emerald-800 text-[11px] font-bold inline-flex items-center space-x-1">
<span class="px-2.5 py-1 rounded-full bg-emerald-50 text-emerald-700 text-[11px] font-medium inline-flex items-center space-x-1.5 border border-emerald-200/60">
<span class="w-1.5 h-1.5 rounded-full bg-emerald-500"></span>
<span>Print-klaar</span>
<span>Op bestelling geprint</span>
</span>
</div>
</div>
@@ -252,9 +244,9 @@
<!-- 1. Materiaal Keuze -->
<div>
<div class="flex items-center justify-between mb-1.5">
<label class="text-xs font-bold text-slate-800 uppercase tracking-wider">1. Kies Materiaal</label>
<span class="text-xs font-bold text-amber-700" x-text="selectedMaterial.toUpperCase()"></span>
<div class="flex items-center justify-between mb-2">
<label class="text-xs font-semibold text-slate-900">1. Materiaal</label>
<span class="text-xs font-medium text-slate-500" x-text="selectedMaterial.toUpperCase()"></span>
</div>
<div class="grid grid-cols-2 gap-2">
@foreach($product->available_materials ?? ['pla'] as $matCode)
@@ -263,40 +255,40 @@
<button
type="button"
@click="selectedMaterial = '{{ $mat->code }}'"
:class="selectedMaterial === '{{ $mat->code }}' ? 'border-amber-400 bg-amber-50/80 ring-2 ring-amber-400/50 font-bold text-slate-950 shadow-xs' : 'border-slate-200 bg-white hover:bg-slate-50 text-slate-700'"
:class="selectedMaterial === '{{ $mat->code }}' ? 'border-slate-900 bg-slate-900 text-white shadow-xs' : 'border-slate-200 bg-white hover:bg-slate-50 text-slate-700'"
class="p-2.5 rounded-xl border text-left transition flex flex-col justify-between cursor-pointer"
>
<div class="flex items-center justify-between">
<span class="text-xs font-bold">{{ $mat->name }}</span>
<div class="flex items-center justify-between w-full">
<span class="text-xs font-medium">{{ $mat->name }}</span>
@if($mat->price_multiplier > 1.0)
<span class="text-[9px] px-1 py-0.2 rounded bg-slate-100 font-mono text-slate-600">+{{ round(($mat->price_multiplier - 1) * 100) }}%</span>
<span class="text-[9px] px-1 rounded font-mono" :class="selectedMaterial === '{{ $mat->code }}' ? 'bg-slate-800 text-slate-300' : 'bg-slate-100 text-slate-600'">+{{ round(($mat->price_multiplier - 1) * 100) }}%</span>
@endif
</div>
<p class="text-[10px] text-slate-500 mt-0.5 line-clamp-1 font-normal">{{ $mat->description }}</p>
<p class="text-[10px] mt-0.5 line-clamp-1" :class="selectedMaterial === '{{ $mat->code }}' ? 'text-slate-300' : 'text-slate-400'">{{ $mat->description }}</p>
</button>
@endif
@endforeach
</div>
</div>
<!-- 2. Kleur Selectie (Swatches met mooie afwerking) -->
<!-- 2. Kleur Selectie -->
<div>
<div class="flex items-center justify-between mb-1.5">
<label class="text-xs font-bold text-slate-800 uppercase tracking-wider">2. Kies Jouw Kleur</label>
<span class="text-xs font-bold text-amber-700" x-text="selectedColor"></span>
<div class="flex items-center justify-between mb-2">
<label class="text-xs font-semibold text-slate-900">2. Kleur</label>
<span class="text-xs font-medium text-slate-600" x-text="selectedColor"></span>
</div>
<div class="flex flex-wrap gap-2">
@foreach($allColors as $c)
<button
type="button"
@click="selectedColor = '{{ $c->name }}'"
:class="selectedColor === '{{ $c->name }}' ? 'ring-2 ring-amber-400 ring-offset-2 scale-110 shadow-xs' : 'hover:scale-105 border-slate-200'"
class="w-8 h-8 rounded-xl border shadow-xs transition flex items-center justify-center cursor-pointer relative"
:class="selectedColor === '{{ $c->name }}' ? 'ring-2 ring-slate-900 ring-offset-2 scale-105' : 'hover:scale-105 border-slate-200 opacity-90 hover:opacity-100'"
class="w-7 h-7 rounded-full border shadow-2xs transition flex items-center justify-center cursor-pointer relative"
style="background-color: {{ $c->hex }};"
title="{{ $c->name }}"
>
<template x-if="selectedColor === '{{ $c->name }}'">
<i data-lucide="check" class="w-4 h-4 {{ in_array($c->name, ['Sneeuwwit', 'Zon Geel (Pikachu)']) ? 'text-slate-950' : 'text-white' }} stroke-[3]"></i>
<i data-lucide="check" class="w-3.5 h-3.5 {{ in_array($c->name, ['Sneeuwwit', 'Zon Geel (Pikachu)']) ? 'text-slate-950' : 'text-white' }} stroke-[3]"></i>
</template>
</button>
@endforeach
@@ -305,59 +297,59 @@
<!-- 3. Formaat & Schaal -->
<div>
<div class="flex items-center justify-between mb-1.5">
<label class="text-xs font-bold text-slate-800 uppercase tracking-wider">3. Formaat / Schaal</label>
<span class="text-xs font-bold text-slate-700" x-text="selectedScale"></span>
<div class="flex items-center justify-between mb-2">
<label class="text-xs font-semibold text-slate-900">3. Formaat</label>
<span class="text-xs font-medium text-slate-600" x-text="selectedScale"></span>
</div>
<div class="grid grid-cols-3 gap-2 text-xs">
<button
type="button"
@click="selectedScale = '100%'"
:class="selectedScale === '100%' ? 'border-amber-400 bg-amber-50/80 ring-2 ring-amber-400/50 font-bold text-slate-900 shadow-xs' : 'border-slate-200 font-medium hover:bg-slate-50 text-slate-700'"
class="p-2.5 rounded-xl border text-center transition cursor-pointer"
:class="selectedScale === '100%' ? 'border-slate-900 bg-slate-900 text-white font-medium shadow-xs' : 'border-slate-200 text-slate-700 hover:bg-slate-50'"
class="p-2 rounded-lg border text-center transition cursor-pointer"
>
<span>100% (Normaal)</span>
</button>
<button
type="button"
@click="selectedScale = '150%'"
:class="selectedScale === '150%' ? 'border-amber-400 bg-amber-50/80 ring-2 ring-amber-400/50 font-bold text-slate-900 shadow-xs' : 'border-slate-200 font-medium hover:bg-slate-50 text-slate-700'"
class="p-2.5 rounded-xl border text-center transition cursor-pointer"
:class="selectedScale === '150%' ? 'border-slate-900 bg-slate-900 text-white font-medium shadow-xs' : 'border-slate-200 text-slate-700 hover:bg-slate-50'"
class="p-2 rounded-lg border text-center transition cursor-pointer"
>
<span>150% (+45%)</span>
</button>
<button
type="button"
@click="selectedScale = '200%'"
:class="selectedScale === '200%' ? 'border-amber-400 bg-amber-50/80 ring-2 ring-amber-400/50 font-bold text-slate-900 shadow-xs' : 'border-slate-200 font-medium hover:bg-slate-50 text-slate-700'"
class="p-2.5 rounded-xl border text-center transition cursor-pointer"
:class="selectedScale === '200%' ? 'border-slate-900 bg-slate-900 text-white font-medium shadow-xs' : 'border-slate-200 text-slate-700 hover:bg-slate-50'"
class="p-2 rounded-lg border text-center transition cursor-pointer"
>
<span>200% (+95%)</span>
</button>
</div>
</div>
<!-- Aantal en Toevoegen Knop -->
<div class="pt-3 border-t border-slate-100 space-y-3">
<!-- Aantal en Bestelknop -->
<div class="pt-2 border-t border-slate-100 space-y-3">
<div class="flex items-center space-x-2.5">
<!-- Stepper -->
<div class="flex items-center border border-slate-200 rounded-xl bg-slate-50 overflow-hidden">
<button type="button" @click="if (quantity > 1) quantity--" class="px-3 py-2.5 hover:bg-slate-200 transition text-slate-700 font-bold cursor-pointer text-sm">-</button>
<span class="px-3.5 py-2.5 font-heading font-black text-xs text-slate-900" x-text="quantity"></span>
<button type="button" @click="if (quantity < 50) quantity++" class="px-3 py-2.5 hover:bg-slate-200 transition text-slate-700 font-bold cursor-pointer text-sm">+</button>
<button type="button" @click="if (quantity > 1) quantity--" class="px-3 py-2 hover:bg-slate-200 transition text-slate-700 font-semibold cursor-pointer text-xs">-</button>
<span class="px-3.5 py-2 font-mono text-xs font-semibold text-slate-900" x-text="quantity"></span>
<button type="button" @click="if (quantity < 50) quantity++" class="px-3 py-2 hover:bg-slate-200 transition text-slate-700 font-semibold cursor-pointer text-xs">+</button>
</div>
<!-- Knop Desktop -->
<button type="submit" class="flex-1 py-3 px-5 rounded-xl bg-amber-400 hover:bg-amber-300 text-slate-950 font-bold text-xs sm:text-sm transition flex items-center justify-center space-x-1.5 shadow-xs cursor-pointer">
<span>🛒</span>
<span>In Winkelmandje • € <span x-text="calculatedPrice"></span></span>
<!-- Bestelknop -->
<button type="submit" class="flex-1 py-2.5 px-4 rounded-xl bg-slate-900 hover:bg-slate-800 text-white font-medium text-xs sm:text-sm transition flex items-center justify-center space-x-2 shadow-xs cursor-pointer">
<i data-lucide="shopping-bag" class="w-4 h-4"></i>
<span>In winkelwagen • € <span x-text="calculatedPrice"></span></span>
</button>
</div>
<div class="flex items-center justify-center space-x-3 text-[11px] text-slate-500 font-medium pt-1">
<span>🚚 Gratis verzending vanaf €50</span>
<div class="flex items-center justify-center space-x-3 text-[11px] text-slate-400 font-normal pt-1">
<span>Gratis verzending vanaf €50</span>
<span>•</span>
<span>📦 PostNL Track & Trace</span>
<span>PostNL Track & Trace</span>
</div>
</div>