Fix HTTPS asset loading behind proxy and redesign layout to playful toy-like 3D print webshop

This commit is contained in:
2026-10-31 15:52:08 +01:00
parent 69f1800fcd
commit fdf768b352
8 changed files with 533 additions and 433 deletions
+4 -1
View File
@@ -2,6 +2,7 @@
namespace App\Providers; namespace App\Providers;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider class AppServiceProvider extends ServiceProvider
@@ -19,6 +20,8 @@ class AppServiceProvider extends ServiceProvider
*/ */
public function boot(): void public function boot(): void
{ {
// if (app()->environment('production') || str_starts_with(config('app.url', ''), 'https://')) {
URL::forceScheme('https');
}
} }
} }
+1 -1
View File
@@ -12,7 +12,7 @@ return Application::configure(basePath: dirname(__DIR__))
health: '/up', health: '/up',
) )
->withMiddleware(function (Middleware $middleware): void { ->withMiddleware(function (Middleware $middleware): void {
// $middleware->trustProxies(at: '*');
}) })
->withExceptions(function (Exceptions $exceptions): void { ->withExceptions(function (Exceptions $exceptions): void {
$exceptions->shouldRenderJsonWhen( $exceptions->shouldRenderJsonWhen(
+41 -2
View File
@@ -4,6 +4,45 @@
@source '../../storage/framework/views/*.php'; @source '../../storage/framework/views/*.php';
@theme { @theme {
--font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', --font-heading: 'Fredoka', ui-rounded, 'Nunito', system-ui, sans-serif;
'Segoe UI Symbol', 'Noto Color Emoji'; --font-sans: 'Nunito', system-ui, sans-serif;
}
@layer utilities {
.font-heading {
font-family: var(--font-heading);
}
/* Chunky playful toy block shadows */
.toy-shadow-sm {
box-shadow: 2px 2px 0px 0px #0f172a;
}
.toy-shadow {
box-shadow: 4px 4px 0px 0px #0f172a;
}
.toy-shadow-lg {
box-shadow: 6px 6px 0px 0px #0f172a;
}
.toy-shadow-amber {
box-shadow: 4px 4px 0px 0px #b45309;
}
.toy-shadow-rose {
box-shadow: 4px 4px 0px 0px #be123c;
}
.toy-shadow-indigo {
box-shadow: 4px 4px 0px 0px #3730a3;
}
/* Chunky pressable button effect */
.toy-btn {
transition: all 0.12s cubic-bezier(0.4, 0, 0.2, 1);
}
.toy-btn:hover {
transform: translate(-2px, -2px);
box-shadow: 6px 6px 0px 0px #0f172a;
}
.toy-btn:active {
transform: translate(2px, 2px);
box-shadow: 2px 2px 0px 0px #0f172a;
}
} }
+52 -48
View File
@@ -1,27 +1,30 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', 'Winkelwagen | Jouwdriedee.nl') @section('title', 'Winkelwagen 🛒 | Jouwdriedee.nl')
@section('content') @section('content')
<div class="bg-white border-b border-slate-200 py-6"> <div class="bg-amber-100 border-b-2 border-slate-900 py-6">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<h1 class="text-2xl sm:text-3xl font-black text-slate-900 tracking-tight">Winkelwagen</h1> <h1 class="font-heading text-3xl font-black text-slate-900 tracking-tight flex items-center space-x-2">
<p class="text-xs text-slate-500 mt-0.5">Controleer jouw geselecteerde 3D prints, materialen en kleuren.</p> <span>🛒</span>
<span>Jouw Winkelwagen</span>
</h1>
<p class="text-xs font-bold text-slate-600 mt-1">Controleer jouw geselecteerde 3D prints, vrolijke kleuren en aantallen.</p>
</div> </div>
</div> </div>
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-10"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-10">
@if(empty($cart)) @if(empty($cart))
<div class="p-12 text-center rounded-3xl bg-white border border-slate-200 shadow-2xs space-y-4 max-w-lg mx-auto"> <div class="p-12 text-center rounded-3xl bg-white border-2 border-slate-900 toy-shadow space-y-4 max-w-lg mx-auto">
<div class="w-16 h-16 rounded-2xl bg-indigo-50 text-indigo-600 flex items-center justify-center mx-auto"> <div class="w-20 h-20 rounded-3xl bg-amber-100 border-2 border-slate-900 text-slate-900 flex items-center justify-center mx-auto text-4xl">
<i data-lucide="shopping-bag" class="w-8 h-8"></i> 🧸
</div> </div>
<h2 class="text-lg font-bold text-slate-900">Je winkelwagen is leeg</h2> <h2 class="font-heading text-xl font-black text-slate-900">Je winkelwagen is nog leeg!</h2>
<p class="text-xs text-slate-500">Ontdek onze collectie 3D geprinte designs of vraag een custom print aan.</p> <p class="text-xs text-slate-600 font-medium">Zoek een leuk speelgoedmodel, vaas of handige gadget uit onze collectie!</p>
<div class="pt-2"> <div class="pt-3">
<a href="{{ route('catalog') }}" class="px-6 py-3 rounded-2xl bg-indigo-600 hover:bg-indigo-500 text-white font-bold text-xs transition inline-flex items-center space-x-2"> <a href="{{ route('catalog') }}" class="toy-btn px-6 py-3.5 rounded-2xl bg-amber-400 hover:bg-amber-300 border-2 border-slate-900 toy-shadow-sm text-slate-950 font-black text-xs inline-flex items-center space-x-2">
<span>Bekijk Catalogus</span> <span>Bekijk Alle Prints 🎁</span>
<i data-lucide="arrow-right" class="w-4 h-4"></i> <i data-lucide="arrow-right" class="w-4 h-4 stroke-[3]"></i>
</a> </a>
</div> </div>
</div> </div>
@@ -31,21 +34,21 @@
<!-- Items Lijst --> <!-- Items Lijst -->
<div class="lg:col-span-8 space-y-4"> <div class="lg:col-span-8 space-y-4">
@foreach($cart as $key => $item) @foreach($cart as $key => $item)
<div class="p-5 rounded-3xl bg-white border border-slate-200 shadow-2xs flex flex-col sm:flex-row items-center justify-between gap-4"> <div class="p-5 rounded-3xl bg-white border-2 border-slate-900 toy-shadow-sm flex flex-col sm:flex-row items-center justify-between gap-4">
<div class="flex items-center space-x-4 w-full sm:w-auto"> <div class="flex items-center space-x-4 w-full sm:w-auto">
<div class="w-20 h-20 rounded-2xl bg-slate-100 overflow-hidden flex-shrink-0 border border-slate-100"> <div class="w-20 h-20 rounded-2xl bg-[#FFFDF7] border-2 border-slate-900 overflow-hidden flex-shrink-0">
<img src="{{ $item['image_url'] }}" alt="{{ $item['name'] }}" class="w-full h-full object-cover"> <img src="{{ $item['image_url'] }}" alt="{{ $item['name'] }}" class="w-full h-full object-cover">
</div> </div>
<div class="space-y-1"> <div class="space-y-1">
<h3 class="text-sm font-bold text-slate-900">{{ $item['name'] }}</h3> <h3 class="font-heading text-base font-black text-slate-900">{{ $item['name'] }}</h3>
<div class="flex flex-wrap items-center gap-2 text-[11px] text-slate-500"> <div class="flex flex-wrap items-center gap-2 text-xs">
<span class="px-2 py-0.5 rounded bg-indigo-50 text-indigo-700 font-semibold">{{ $item['material'] }}</span> <span class="px-2 py-0.5 rounded-lg bg-sky-100 border border-slate-900 text-slate-900 font-black text-[10px]">{{ $item['material'] }}</span>
<span>•</span> <span>•</span>
<span class="font-medium text-slate-700">Kleur: {{ $item['color'] }}</span> <span class="font-bold text-slate-700">Kleur: {{ $item['color'] }}</span>
<span>•</span> <span>•</span>
<span class="font-mono text-slate-700">Schaal: {{ $item['scale'] }}</span> <span class="font-mono font-bold text-slate-700">{{ $item['scale'] }}</span>
</div> </div>
<div class="text-xs font-mono font-bold text-slate-900 pt-1"> <div class="text-xs font-black text-slate-900 pt-1">
€ {{ number_format($item['price'], 2, ',', '.') }} per stuk € {{ number_format($item['price'], 2, ',', '.') }} per stuk
</div> </div>
</div> </div>
@@ -57,13 +60,13 @@
<form action="{{ route('cart.update') }}" method="POST" class="flex items-center space-x-1"> <form action="{{ route('cart.update') }}" method="POST" class="flex items-center space-x-1">
@csrf @csrf
<input type="hidden" name="key" value="{{ $key }}"> <input type="hidden" name="key" value="{{ $key }}">
<input type="number" name="quantity" min="1" max="50" value="{{ $item['quantity'] }}" class="w-16 bg-slate-50 border border-slate-200 rounded-xl px-2 py-1.5 text-xs text-center font-mono font-bold text-slate-900 focus:outline-none focus:ring-1 focus:ring-indigo-500"> <input type="number" name="quantity" min="1" max="50" value="{{ $item['quantity'] }}" class="w-16 bg-[#FFFDF7] border-2 border-slate-900 rounded-xl px-2 py-1.5 text-xs text-center font-heading font-black text-slate-900 focus:outline-none">
<button type="submit" class="p-1.5 rounded-lg text-slate-400 hover:text-indigo-600 transition" title="Bijwerken"> <button type="submit" class="p-2 rounded-xl text-slate-600 hover:text-slate-900 hover:bg-slate-100 transition" title="Bijwerken">
<i data-lucide="refresh-cw" class="w-3.5 h-3.5"></i> <i data-lucide="refresh-cw" class="w-4 h-4"></i>
</button> </button>
</form> </form>
<span class="text-sm font-black text-slate-900 font-mono w-24 text-right"> <span class="font-heading text-base font-black text-slate-900 w-24 text-right">
€ {{ number_format($item['price'] * $item['quantity'], 2, ',', '.') }} € {{ number_format($item['price'] * $item['quantity'], 2, ',', '.') }}
</span> </span>
@@ -71,8 +74,8 @@
<form action="{{ route('cart.remove', $key) }}" method="POST"> <form action="{{ route('cart.remove', $key) }}" method="POST">
@csrf @csrf
@method('DELETE') @method('DELETE')
<button type="submit" class="p-2 text-slate-300 hover:text-rose-500 transition cursor-pointer" title="Verwijderen"> <button type="submit" class="p-2 text-rose-500 hover:text-rose-700 transition cursor-pointer" title="Verwijderen">
<i data-lucide="trash-2" class="w-4 h-4"></i> <i data-lucide="trash-2" class="w-5 h-5"></i>
</button> </button>
</form> </form>
</div> </div>
@@ -80,45 +83,47 @@
@endforeach @endforeach
</div> </div>
<!-- Samenvatting --> <!-- Samenvatting (Chunky Toy Box) -->
<div class="lg:col-span-4"> <div class="lg:col-span-4">
<div class="p-6 rounded-3xl bg-white border border-slate-200 shadow-md space-y-5 sticky top-24"> <div class="p-6 rounded-3xl bg-amber-100 border-2 border-slate-900 toy-shadow space-y-5 sticky top-24">
<h3 class="text-sm font-bold text-slate-900 uppercase tracking-wider pb-3 border-b border-slate-100">Overzicht Bestelling</h3> <h3 class="font-heading text-sm font-black text-slate-900 uppercase tracking-wider pb-3 border-b-2 border-slate-900 flex items-center space-x-2">
<span>🧾</span>
<span>Overzicht Bestelling</span>
</h3>
<div class="space-y-2.5 text-xs"> <div class="space-y-3 text-xs font-bold">
<div class="flex justify-between text-slate-600"> <div class="flex justify-between text-slate-700">
<span>Subtotaal</span> <span>Subtotaal</span>
<span class="font-mono font-bold text-slate-900">€ {{ number_format($subtotal, 2, ',', '.') }}</span> <span class="font-heading text-sm font-black text-slate-900">€ {{ number_format($subtotal, 2, ',', '.') }}</span>
</div> </div>
<div class="flex justify-between text-slate-600"> <div class="flex justify-between text-slate-700">
<span>Verzendkosten</span> <span>Verzendkosten</span>
@if($shipping == 0) @if($shipping == 0)
<span class="text-emerald-600 font-bold">GRATIS</span> <span class="text-emerald-700 font-black bg-emerald-200 px-2 py-0.5 rounded-lg border border-slate-900">GRATIS 🎉</span>
@else @else
<span class="font-mono font-bold text-slate-900">€ {{ number_format($shipping, 2, ',', '.') }}</span> <span class="font-heading text-sm font-black text-slate-900">€ {{ number_format($shipping, 2, ',', '.') }}</span>
@endif @endif
</div> </div>
@if($subtotal < 50) @if($subtotal < 50)
<p class="text-[11px] text-amber-600 bg-amber-50 p-2.5 rounded-xl border border-amber-100"> <p class="text-[11px] text-amber-900 bg-amber-200/90 p-3 rounded-2xl border-2 border-slate-900 font-black">
Tip: Voeg nog <strong>€ {{ number_format(50 - $subtotal, 2, ',', '.') }}</strong> toe voor gratis verzending! 💡 Tip: Bestel nog voor <strong>€ {{ number_format(50 - $subtotal, 2, ',', '.') }}</strong> en profiteer van gratis verzending!
</p> </p>
@endif @endif
</div> </div>
<div class="pt-4 border-t border-slate-100 flex justify-between items-baseline"> <div class="pt-4 border-t-2 border-slate-900 flex justify-between items-baseline">
<span class="text-sm font-bold text-slate-900">Totaal (incl. btw)</span> <span class="font-heading text-base font-black text-slate-900">Totaal (incl. btw)</span>
<span class="text-2xl font-black text-indigo-600 font-mono">€ {{ number_format($total, 2, ',', '.') }}</span> <span class="font-heading text-2xl font-black text-slate-900">€ {{ number_format($total, 2, ',', '.') }}</span>
</div> </div>
<a href="{{ route('checkout.index') }}" class="w-full py-4 rounded-2xl bg-indigo-600 hover:bg-indigo-500 text-white font-bold text-xs uppercase tracking-wider transition shadow-lg shadow-indigo-600/25 flex items-center justify-center space-x-2"> <a href="{{ route('checkout.index') }}" class="toy-btn w-full py-4 rounded-2xl bg-emerald-400 hover:bg-emerald-300 border-2 border-slate-900 toy-shadow text-slate-950 font-black text-xs uppercase tracking-wider transition flex items-center justify-center space-x-2">
<span>Doorgaan Naar Afrekenen</span> <span>Doorgaan Naar Afrekenen 🚀</span>
<i data-lucide="arrow-right" class="w-4 h-4"></i>
</a> </a>
<div class="flex items-center justify-center space-x-3 text-[11px] text-slate-400 pt-1"> <div class="flex items-center justify-center space-x-3 text-[11px] font-bold text-slate-600 pt-1">
<span>🔒 Veilig afrekenen</span> <span>🔒 Veilig betalen</span>
<span>•</span> <span>•</span>
<span>PostNL Bezorging</span> <span>📦 PostNL Track & Trace</span>
</div> </div>
</div> </div>
</div> </div>
@@ -127,4 +132,3 @@
@endif @endif
</div> </div>
@endsection @endsection
+138 -115
View File
@@ -1,78 +1,91 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="nl" class="h-full bg-slate-50 text-slate-900 antialiased"> <html lang="nl" class="h-full antialiased">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('title', 'Jouwdriedee.nl | Dé 3D Print Webshop & Printservice')</title> <title>@yield('title', 'Jouwdriedee.nl 🎨 Dé Speelse 3D Print Webshop')</title>
<meta name="description" content="@yield('meta_description', 'Jouwdriedee.nl - Jouw ideeën tastbaar gemaakt in 3D. Unieke decoratie, tech gadgets en custom 3D printservice.')"> <meta name="description" content="@yield('meta_description', 'Jouwdriedee.nl - Vrolijke 3D prints, tof speelgoed, hippe gadgets en op maat gemaakte 3D creaties direct uit de printer!')">
<!-- Google Fonts --> <!-- Playful Google Fonts: Fredoka & Nunito -->
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;500;600;700&family=Nunito:wght@400;600;700;800;900&display=swap" rel="stylesheet">
@vite(['resources/css/app.css', 'resources/js/app.js']) @vite(['resources/css/app.css', 'resources/js/app.js'])
<style> <style>
body { font-family: 'Plus Jakarta Sans', sans-serif; } body {
.font-mono { font-family: 'JetBrains Mono', monospace; } font-family: 'Nunito', system-ui, sans-serif;
}
h1, h2, h3, h4, .font-heading {
font-family: 'Fredoka', ui-rounded, 'Nunito', sans-serif;
}
</style> </style>
</head> </head>
<body class="min-h-full flex flex-col bg-slate-50 text-slate-800" x-data="{ mobileMenuOpen: false }"> <body class="min-h-full flex flex-col bg-[#FFFDF7] text-slate-900 selection:bg-amber-300 selection:text-slate-900" x-data="{ mobileMenuOpen: false }">
<!-- Top Announcement Bar --> <!-- Top Playful Announcement Bar -->
<div class="bg-indigo-950 text-indigo-200 text-xs py-2 px-4 text-center font-medium border-b border-indigo-900/60"> <div class="bg-amber-400 border-b-2 border-slate-900 text-slate-950 text-xs py-2 px-4 font-black">
<div class="max-w-7xl mx-auto flex items-center justify-between"> <div class="max-w-7xl mx-auto flex items-center justify-between">
<span class="hidden sm:inline">🚀 <strong>Nieuw:</strong> Upload nu ook jouw eigen 3D CAD/STL bestanden voor maatwerk prints!</span> <div class="flex items-center space-x-2">
<span class="sm:hidden mx-auto font-semibold">✨ Gratis verzending vanaf € 50,-</span> <span class="inline-block animate-bounce">🎉</span>
<div class="hidden sm:flex items-center space-x-6 text-[11px] text-indigo-300"> <span class="tracking-wide">Hoera! Jouw favoriete 3D prints & speelgoed vers uit onze printers!</span>
<span class="flex items-center space-x-1.5"> </div>
<i data-lucide="shield-check" class="w-3.5 h-3.5 text-emerald-400"></i> <div class="hidden md:flex items-center space-x-6 text-[12px]">
<span>Premium PLA+, PETG & TPU</span> <span class="flex items-center space-x-1.5 bg-amber-300/80 px-2.5 py-0.5 rounded-full border border-slate-900">
<span>✨</span>
<span>Gratis verzending vanaf € 50,-</span>
</span> </span>
<span class="flex items-center space-x-1.5"> <span class="flex items-center space-x-1.5">
<i data-lucide="truck" class="w-3.5 h-3.5 text-amber-400"></i> <span>🚀</span>
<span>Verzending binnen 2-3 werkdagen</span> <span>Snel verzonden via PostNL</span>
</span>
<span class="flex items-center space-x-1.5">
<span>🌈</span>
<span>Biologisch PLA & veilige materialen</span>
</span> </span>
</div> </div>
</div> </div>
</div> </div>
<!-- Main Navigation Header --> <!-- Main Navigation Header -->
<header class="sticky top-0 z-40 bg-white/90 backdrop-blur-md border-b border-slate-200/80 shadow-2xs"> <header class="sticky top-0 z-40 bg-white/95 backdrop-blur-md border-b-2 border-slate-900 shadow-sm">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex items-center justify-between h-20"> <div class="flex items-center justify-between h-20">
<!-- Logo & Brand --> <!-- Logo & Brand (Fun Toy Mascot Box) -->
<div class="flex items-center space-x-8"> <div class="flex items-center space-x-6">
<a href="{{ route('home') }}" class="flex items-center space-x-3 group"> <a href="{{ route('home') }}" class="flex items-center space-x-3 group">
<div class="w-11 h-11 rounded-2xl bg-gradient-to-tr from-indigo-600 via-indigo-500 to-sky-400 flex items-center justify-center text-white shadow-md shadow-indigo-500/25 group-hover:scale-105 transition-transform"> <div class="w-12 h-12 rounded-2xl bg-gradient-to-br from-amber-400 via-rose-400 to-indigo-500 border-2 border-slate-900 toy-shadow-sm flex items-center justify-center text-white group-hover:scale-105 group-hover:-rotate-3 transition transform">
<i data-lucide="box" class="w-6 h-6 stroke-[2.2]"></i> <i data-lucide="sparkles" class="w-7 h-7 text-white stroke-[2.5]"></i>
</div> </div>
<div class="flex flex-col"> <div class="flex flex-col">
<div class="flex items-center space-x-1"> <div class="flex items-baseline space-x-1">
<span class="text-xl font-extrabold tracking-tight text-slate-900">Jouw<span class="text-indigo-600">driedee</span></span> <span class="font-heading text-2xl font-black tracking-tight text-slate-900">Jouw<span class="text-rose-500">driedee</span></span>
<span class="text-xs font-bold text-sky-500 font-mono">.nl</span> <span class="text-xs font-black bg-indigo-500 text-white px-1.5 py-0.5 rounded-lg border border-slate-900">.NL</span>
</div> </div>
<span class="text-[10px] tracking-wider uppercase font-semibold text-slate-400">3D Print Studio & Shop</span> <span class="text-[11px] font-extrabold text-amber-600 flex items-center space-x-1">
<span>🧸</span>
<span>De vrolijkste 3D print webshop</span>
</span>
</div> </div>
</a> </a>
<!-- Desktop Nav Links --> <!-- Desktop Nav Links (Chunky Rounded Toy Pills) -->
<nav class="hidden md:flex items-center space-x-1 text-sm font-semibold"> <nav class="hidden lg:flex items-center space-x-2 text-sm font-extrabold">
<a href="{{ route('home') }}" class="px-3.5 py-2 rounded-xl transition {{ request()->routeIs('home') ? 'bg-indigo-50 text-indigo-600 font-bold' : 'text-slate-600 hover:text-slate-900 hover:bg-slate-100/70' }}"> <a href="{{ route('home') }}" class="px-4 py-2 rounded-2xl transition border-2 {{ request()->routeIs('home') ? 'bg-amber-300 border-slate-900 toy-shadow-sm text-slate-950 font-black' : 'border-transparent text-slate-700 hover:border-slate-900 hover:bg-slate-100/80' }}">
Home Home 🏠
</a> </a>
<a href="{{ route('catalog') }}" class="px-3.5 py-2 rounded-xl transition {{ request()->routeIs('catalog*') ? 'bg-indigo-50 text-indigo-600 font-bold' : 'text-slate-600 hover:text-slate-900 hover:bg-slate-100/70' }}"> <a href="{{ route('catalog') }}" class="px-4 py-2 rounded-2xl transition border-2 {{ request()->routeIs('catalog*') ? 'bg-sky-200 border-slate-900 toy-shadow-sm text-slate-950 font-black' : 'border-transparent text-slate-700 hover:border-slate-900 hover:bg-slate-100/80' }}">
Catalogus Alle Prints 🎁
</a> </a>
<a href="{{ route('custom.request') }}" class="px-3.5 py-2 rounded-xl transition flex items-center space-x-1.5 {{ request()->routeIs('custom.request') ? 'bg-indigo-50 text-indigo-600 font-bold' : 'text-slate-600 hover:text-slate-900 hover:bg-slate-100/70' }}"> <a href="{{ route('custom.request') }}" class="px-4 py-2 rounded-2xl transition border-2 flex items-center space-x-1.5 {{ request()->routeIs('custom.request') ? 'bg-emerald-200 border-slate-900 toy-shadow-sm text-slate-950 font-black' : 'border-transparent text-slate-700 hover:border-slate-900 hover:bg-slate-100/80' }}">
<i data-lucide="printer" class="w-4 h-4 text-indigo-500"></i> <span>Eigen Model Printen</span>
<span>Eigen STL Printen</span> <span>🚀</span>
</a> </a>
<a href="{{ route('admin.makerworld.index') }}" class="px-3.5 py-2 rounded-xl transition flex items-center space-x-1.5 {{ request()->routeIs('admin.makerworld*') ? 'bg-indigo-600 text-white font-bold shadow-sm' : 'text-slate-600 hover:text-slate-900 hover:bg-slate-100/70' }}"> <a href="{{ route('admin.makerworld.index') }}" class="px-4 py-2 rounded-2xl transition border-2 border-slate-900 bg-rose-500 text-white font-black toy-shadow-sm hover:bg-rose-600 flex items-center space-x-1.5">
<i data-lucide="layers" class="w-4 h-4 {{ request()->routeIs('admin.makerworld*') ? 'text-white' : 'text-indigo-600' }}"></i> <i data-lucide="layers" class="w-4 h-4"></i>
<span>MakerWorld Importer</span> <span>MakerWorld Importer ✨</span>
</a> </a>
</nav> </nav>
</div> </div>
@@ -81,34 +94,34 @@
<div class="flex items-center space-x-3"> <div class="flex items-center space-x-3">
<!-- Search Bar in Header --> <!-- Search Bar in Header -->
<form action="{{ route('catalog') }}" method="GET" class="hidden lg:flex items-center relative"> <form action="{{ route('catalog') }}" method="GET" class="hidden md:flex items-center relative">
<input <input
type="text" type="text"
name="q" name="q"
value="{{ request('q') }}" value="{{ request('q') }}"
placeholder="Zoek een print, houder, vaas..." placeholder="Zoek speelgoed, gadgets, vazen..."
class="w-64 bg-slate-100 border border-slate-200/80 rounded-xl pl-9 pr-3.5 py-2 text-xs font-medium placeholder-slate-400 focus:bg-white focus:outline-none focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500 transition" class="w-60 bg-amber-50/60 border-2 border-slate-900 rounded-2xl pl-9 pr-3.5 py-2 text-xs font-bold text-slate-900 placeholder-slate-400 focus:bg-white focus:outline-none focus:ring-2 focus:ring-amber-400 transition"
> >
<i data-lucide="search" class="w-4 h-4 text-slate-400 absolute left-3 pointer-events-none"></i> <i data-lucide="search" class="w-4 h-4 text-slate-500 absolute left-3 pointer-events-none"></i>
</form> </form>
<!-- Cart Button with Counter --> <!-- Chunky Toy Cart Button -->
@php @php
$cartItems = is_array(session('cart')) ? session('cart') : []; $cartItems = is_array(session('cart')) ? session('cart') : [];
$cartCount = array_sum(array_column($cartItems, 'quantity')); $cartCount = array_sum(array_column($cartItems, 'quantity'));
@endphp @endphp
<a href="{{ route('cart.index') }}" class="relative p-2.5 rounded-xl border border-slate-200 bg-white hover:bg-slate-50 text-slate-700 transition flex items-center space-x-2 shadow-2xs group"> <a href="{{ route('cart.index') }}" class="toy-btn relative px-4 py-2 rounded-2xl border-2 border-slate-900 bg-amber-300 hover:bg-amber-400 text-slate-950 toy-shadow flex items-center space-x-2 font-black group">
<i data-lucide="shopping-bag" class="w-5 h-5 text-slate-600 group-hover:text-indigo-600 transition"></i> <span class="text-base group-hover:scale-110 transition-transform">🛒</span>
<span class="text-xs font-bold hidden sm:inline">Winkelwagen</span> <span class="text-xs hidden sm:inline">Mandje</span>
@if($cartCount > 0) @if($cartCount > 0)
<span class="inline-flex items-center justify-center px-2 py-0.5 text-xs font-black text-white bg-indigo-600 rounded-full animate-pulse"> <span class="inline-flex items-center justify-center px-2 py-0.5 text-xs font-black text-white bg-rose-500 border border-slate-900 rounded-full animate-bounce">
{{ $cartCount }} {{ $cartCount }}
</span> </span>
@endif @endif
</a> </a>
<!-- Mobile Menu Trigger --> <!-- Mobile Menu Trigger -->
<button @click="mobileMenuOpen = !mobileMenuOpen" type="button" class="md:hidden p-2.5 rounded-xl border border-slate-200 bg-white text-slate-700 hover:bg-slate-50"> <button @click="mobileMenuOpen = !mobileMenuOpen" type="button" class="lg:hidden p-2.5 rounded-2xl border-2 border-slate-900 bg-white text-slate-900 hover:bg-slate-50">
<i data-lucide="menu" class="w-5 h-5"></i> <i data-lucide="menu" class="w-5 h-5"></i>
</button> </button>
</div> </div>
@@ -116,53 +129,49 @@
</div> </div>
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div x-show="mobileMenuOpen" x-cloak class="md:hidden border-t border-slate-200 bg-white px-4 pt-3 pb-6 space-y-3 shadow-lg"> <div x-show="mobileMenuOpen" x-cloak class="lg:hidden border-t-2 border-slate-900 bg-[#FFFDF7] px-4 pt-4 pb-6 space-y-3">
<form action="{{ route('catalog') }}" method="GET" class="flex items-center relative mb-3"> <form action="{{ route('catalog') }}" method="GET" class="flex items-center relative mb-3">
<input <input
type="text" type="text"
name="q" name="q"
value="{{ request('q') }}" value="{{ request('q') }}"
placeholder="Zoek een print, houder..." placeholder="Zoek speelgoed, vazen..."
class="w-full bg-slate-100 border border-slate-200 rounded-xl pl-9 pr-3.5 py-2.5 text-xs placeholder-slate-400" class="w-full bg-white border-2 border-slate-900 rounded-2xl pl-9 pr-3.5 py-2.5 text-xs font-bold placeholder-slate-400"
> >
<i data-lucide="search" class="w-4 h-4 text-slate-400 absolute left-3"></i> <i data-lucide="search" class="w-4 h-4 text-slate-500 absolute left-3"></i>
</form> </form>
<div class="flex flex-col space-y-1"> <div class="flex flex-col space-y-2 font-black">
<a href="{{ route('home') }}" class="px-3.5 py-2.5 rounded-xl text-sm font-semibold text-slate-700 hover:bg-slate-50">Home</a> <a href="{{ route('home') }}" class="px-4 py-2.5 rounded-2xl border-2 border-slate-900 bg-amber-300 text-sm">Home 🏠</a>
<a href="{{ route('catalog') }}" class="px-3.5 py-2.5 rounded-xl text-sm font-semibold text-slate-700 hover:bg-slate-50">Alle 3D Prints & Catalogus</a> <a href="{{ route('catalog') }}" class="px-4 py-2.5 rounded-2xl border-2 border-slate-900 bg-sky-200 text-sm">Alle 3D Prints 🎁</a>
<a href="{{ route('custom.request') }}" class="px-3.5 py-2.5 rounded-xl text-sm font-semibold text-indigo-600 bg-indigo-50/70 font-bold flex items-center space-x-2"> <a href="{{ route('custom.request') }}" class="px-4 py-2.5 rounded-2xl border-2 border-slate-900 bg-emerald-200 text-sm flex items-center space-x-2">
<i data-lucide="printer" class="w-4 h-4"></i> <span>Eigen Model Printen</span>
<span>Eigen 3D Model Printen (Upload)</span> <span>🚀</span>
</a> </a>
<a href="{{ route('admin.makerworld.index') }}" class="px-3.5 py-2.5 rounded-xl text-sm font-semibold text-slate-700 hover:bg-slate-50 flex items-center space-x-2"> <a href="{{ route('admin.makerworld.index') }}" class="px-4 py-2.5 rounded-2xl border-2 border-slate-900 bg-rose-500 text-white text-sm flex items-center space-x-2">
<i data-lucide="layers" class="w-4 h-4 text-indigo-600"></i> <i data-lucide="layers" class="w-4 h-4"></i>
<span>MakerWorld Importer (Beheer)</span> <span>MakerWorld Importer ✨</span>
</a> </a>
</div> </div>
</div> </div>
</header> </header>
<!-- Global Toast / Alerts --> <!-- Global Flash Alerts -->
@if(session('success')) @if(session('success'))
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mt-4"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mt-5">
<div class="p-4 rounded-2xl bg-emerald-50 border border-emerald-200 text-emerald-900 text-sm font-semibold flex items-center justify-between shadow-xs"> <div class="p-4 rounded-3xl bg-emerald-300 border-2 border-slate-900 toy-shadow text-slate-950 text-sm font-extrabold flex items-center justify-between">
<div class="flex items-center space-x-3"> <div class="flex items-center space-x-3">
<div class="w-7 h-7 rounded-lg bg-emerald-600 text-white flex items-center justify-center"> <span class="text-xl">🎉</span>
<i data-lucide="check" class="w-4 h-4 stroke-[3]"></i>
</div>
<span>{{ session('success') }}</span> <span>{{ session('success') }}</span>
</div> </div>
<a href="{{ route('cart.index') }}" class="text-xs font-bold underline hover:text-emerald-950">Naar winkelwagen &rarr;</a> <a href="{{ route('cart.index') }}" class="px-3 py-1 bg-white border-2 border-slate-900 rounded-xl text-xs font-black hover:bg-slate-100 transition">Naar winkelwagen &rarr;</a>
</div> </div>
</div> </div>
@endif @endif
@if(session('error')) @if(session('error'))
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mt-4"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mt-5">
<div class="p-4 rounded-2xl bg-rose-50 border border-rose-200 text-rose-900 text-sm font-semibold flex items-center space-x-3 shadow-xs"> <div class="p-4 rounded-3xl bg-rose-300 border-2 border-slate-900 toy-shadow text-slate-950 text-sm font-extrabold flex items-center space-x-3">
<div class="w-7 h-7 rounded-lg bg-rose-600 text-white flex items-center justify-center"> <span class="text-xl">⚠️</span>
<i data-lucide="alert-circle" class="w-4 h-4 stroke-[3]"></i>
</div>
<span>{{ session('error') }}</span> <span>{{ session('error') }}</span>
</div> </div>
</div> </div>
@@ -173,75 +182,90 @@
@yield('content') @yield('content')
</main> </main>
<!-- Footer --> <!-- Playful Friendly Footer -->
<footer class="bg-slate-900 text-slate-300 border-t border-slate-800 pt-16 pb-12"> <footer class="bg-slate-900 text-white border-t-4 border-amber-400 pt-16 pb-12 mt-16 relative overflow-hidden">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <!-- Playful Background Dots -->
<div class="grid grid-cols-1 md:grid-cols-4 gap-10 pb-12 border-b border-slate-800/80"> <div class="absolute inset-0 opacity-5 pointer-events-none" style="background-image: radial-gradient(#ffffff 2px, transparent 2px); background-size: 24px 24px;"></div>
<!-- Col 1: Brand --> <div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="grid grid-cols-1 md:grid-cols-4 gap-10 pb-12 border-b border-slate-800">
<!-- Col 1: Brand & Cheerful Info -->
<div class="space-y-4 md:col-span-1"> <div class="space-y-4 md:col-span-1">
<div class="flex items-center space-x-3"> <div class="flex items-center space-x-3">
<div class="w-10 h-10 rounded-xl bg-indigo-600 flex items-center justify-center text-white"> <div class="w-10 h-10 rounded-2xl bg-amber-400 border-2 border-white flex items-center justify-center text-slate-950 font-black">
<i data-lucide="box" class="w-5 h-5"></i> ✨
</div> </div>
<span class="text-xl font-black text-white tracking-tight">Jouw<span class="text-indigo-400">driedee</span>.nl</span> <span class="font-heading text-2xl font-black text-white tracking-tight">Jouw<span class="text-rose-400">driedee</span>.nl</span>
</div> </div>
<p class="text-xs text-slate-400 leading-relaxed"> <p class="text-xs text-slate-300 leading-relaxed font-medium">
Van unieke interieurdecoratie en handige bureaugadgets tot industriële prototypes op maat. Geprint met professionele precisie op hypermoderne FDM- en SLA-printers. Dé vrolijke 3D print webshop voor origineel speelgoed, kleurrijke interieurdecoratie, handige bureaugadgets en maatwerk prints!
</p> </p>
<div class="flex items-center space-x-2 text-xs font-mono text-emerald-400 pt-1"> <div class="inline-flex items-center space-x-2 text-xs font-black text-emerald-300 bg-emerald-950/80 px-3 py-1.5 rounded-full border border-emerald-500/30">
<span class="w-2 h-2 rounded-full bg-emerald-500 animate-ping"></span> <span class="w-2.5 h-2.5 rounded-full bg-emerald-400 animate-pulse"></span>
<span>Printers online & gereed</span> <span>Printers draaien op volle toeren! 🖨️</span>
</div> </div>
</div> </div>
<!-- Col 2: Snelle links --> <!-- Col 2: Snelle links -->
<div class="space-y-3"> <div class="space-y-3">
<h3 class="text-xs font-bold uppercase tracking-wider text-white">Winkel & Producten</h3> <h3 class="font-heading text-sm font-black uppercase tracking-wider text-amber-300">🧸 Speelgoed & Prints</h3>
<ul class="space-y-2 text-xs text-slate-400"> <ul class="space-y-2 text-xs text-slate-300 font-bold">
<li><a href="{{ route('catalog') }}" class="hover:text-white transition">Alle 3D Prints</a></li> <li><a href="{{ route('catalog') }}" class="hover:text-amber-300 transition flex items-center space-x-1.5"><span>👉</span><span>Alle 3D Prints</span></a></li>
<li><a href="{{ route('catalog', ['category' => 'home-interieur']) }}" class="hover:text-white transition">Home & Interieur</a></li> <li><a href="{{ route('catalog', ['category' => 'gadgets-speelgoed']) }}" class="hover:text-amber-300 transition flex items-center space-x-1.5"><span>🎮</span><span>Gadgets & Speelgoed</span></a></li>
<li><a href="{{ route('catalog', ['category' => 'bureau-tech']) }}" class="hover:text-white transition">Bureau & Tech</a></li> <li><a href="{{ route('catalog', ['category' => 'home-interieur']) }}" class="hover:text-amber-300 transition flex items-center space-x-1.5"><span>🪴</span><span>Home & Vrolijke Vazen</span></a></li>
<li><a href="{{ route('catalog', ['category' => 'gadgets-speelgoed']) }}" class="hover:text-white transition">Gadgets & Speelgoed</a></li> <li><a href="{{ route('catalog', ['category' => 'bureau-tech']) }}" class="hover:text-amber-300 transition flex items-center space-x-1.5"><span>💻</span><span>Bureau & Tech Accessoires</span></a></li>
<li><a href="{{ route('custom.request') }}" class="text-indigo-400 font-semibold hover:underline">Custom STL Uploaden</a></li> <li><a href="{{ route('custom.request') }}" class="hover:text-amber-300 transition flex items-center space-x-1.5 text-rose-300"><span>🚀</span><span>Eigen CAD/STL Uploaden</span></a></li>
</ul> </ul>
</div> </div>
<!-- Col 3: Materialen Kennisbank --> <!-- Col 3: Veilige en Vrolijke Materialen -->
<div class="space-y-3"> <div class="space-y-3">
<h3 class="text-xs font-bold uppercase tracking-wider text-white">3D Print Materialen</h3> <h3 class="font-heading text-sm font-black uppercase tracking-wider text-sky-300">🌈 Onze Materialen</h3>
<ul class="space-y-2 text-xs text-slate-400"> <ul class="space-y-2 text-xs text-slate-300 font-medium">
<li class="flex items-center space-x-1.5"><span class="w-1.5 h-1.5 rounded-full bg-emerald-400"></span><span><strong>PLA+</strong>: Biologisch & strak</span></li> <li class="flex items-center space-x-2">
<li class="flex items-center space-x-1.5"><span class="w-1.5 h-1.5 rounded-full bg-blue-400"></span><span><strong>PETG</strong>: Hitte- & slagvast</span></li> <span class="w-2.5 h-2.5 rounded-full bg-emerald-400"></span>
<li class="flex items-center space-x-1.5"><span class="w-1.5 h-1.5 rounded-full bg-amber-400"></span><span><strong>TPU</strong>: Flexibel rubber</span></li> <span><strong>Bio-PLA+</strong>: Plantaardig & kindvriendelijk</span>
<li class="flex items-center space-x-1.5"><span class="w-1.5 h-1.5 rounded-full bg-purple-400"></span><span><strong>Resin</strong>: Ultra-fijne details</span></li> </li>
<li class="flex items-center space-x-2">
<span class="w-2.5 h-2.5 rounded-full bg-sky-400"></span>
<span><strong>PETG</strong>: Extra sterk & waterdicht</span>
</li>
<li class="flex items-center space-x-2">
<span class="w-2.5 h-2.5 rounded-full bg-amber-400"></span>
<span><strong>Flex-TPU</strong>: Buigzaam en rubberachtig</span>
</li>
<li class="flex items-center space-x-2">
<span class="w-2.5 h-2.5 rounded-full bg-purple-400"></span>
<span><strong>Silk & Rainbow</strong>: Prachtige glanskleuren</span>
</li>
</ul> </ul>
</div> </div>
<!-- Col 4: Contact & Zekerheden --> <!-- Col 4: Contact & Klantenservice -->
<div class="space-y-3"> <div class="space-y-3">
<h3 class="text-xs font-bold uppercase tracking-wider text-white">Contact & Klantenservice</h3> <h3 class="font-heading text-sm font-black uppercase tracking-wider text-rose-300">💌 Vragen of Ideeën?</h3>
<p class="text-xs text-slate-400">Heb je een speciale printopdracht of grote batch nodig?</p> <p class="text-xs text-slate-300 font-medium">Wil je een speciale kleur, grotere afmetingen of een print op maat?</p>
<div class="p-3.5 rounded-xl bg-slate-800/80 border border-slate-700/60 text-xs space-y-1.5"> <div class="p-4 rounded-2xl bg-slate-800 border-2 border-slate-700 text-xs space-y-2 font-bold">
<div class="flex items-center space-x-2 text-slate-300"> <div class="flex items-center space-x-2 text-slate-200">
<i data-lucide="mail" class="w-3.5 h-3.5 text-indigo-400"></i> <span>📧</span>
<span>info@jouwdriedee.nl</span> <span>info@jouwdriedee.nl</span>
</div> </div>
<div class="flex items-center space-x-2 text-slate-300"> <div class="flex items-center space-x-2 text-slate-200">
<i data-lucide="map-pin" class="w-3.5 h-3.5 text-indigo-400"></i> <span>🇳🇱</span>
<span>Nederland (Verzending NL & BE)</span> <span>Verzending in heel NL & België</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="pt-8 flex flex-col sm:flex-row items-center justify-between text-xs text-slate-500 gap-4"> <div class="pt-8 flex flex-col sm:flex-row items-center justify-between text-xs text-slate-400 font-bold gap-4">
<p>&copy; {{ date('Y') }} Jouwdriedee.nl. Alle rechten voorbehouden.</p> <p>&copy; {{ date('Y') }} Jouwdriedee.nl. Met ❤️ geprint in Nederland.</p>
<div class="flex items-center space-x-4"> <div class="flex items-center space-x-4">
<span>Veilig betalen met iDEAL & Bancontact</span> <span>💳 Veilig betalen met iDEAL & Bancontact</span>
<span>•</span> <span>•</span>
<span>Coolify Docker Deployed</span> <span>📦 PostNL Track & Trace</span>
</div> </div>
</div> </div>
</div> </div>
@@ -249,4 +273,3 @@
</body> </body>
</html> </html>
+58 -48
View File
@@ -1,59 +1,71 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', '3D Print Catalogus | Jouwdriedee.nl') @section('title', '3D Print Catalogus 🎁 | Jouwdriedee.nl')
@section('content') @section('content')
<div class="bg-white border-b border-slate-200 py-8"> <!-- Page Header -->
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div class="bg-amber-100 border-b-2 border-slate-900 py-8">
<h1 class="text-3xl font-black text-slate-900 tracking-tight">Onze 3D Prints & Modellen</h1> <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">
<p class="text-xs text-slate-500 mt-1">Selecteer een categorie of filter op materiaal om jouw perfecte print te vinden.</p> <div>
<div class="inline-flex items-center space-x-1.5 px-3 py-1 rounded-full bg-white border-2 border-slate-900 text-[11px] font-black text-rose-500 toy-shadow-sm mb-2">
<span>🧸</span>
<span>Onze Collectie 3D Prints</span>
</div>
<h1 class="font-heading text-3xl sm:text-4xl font-black text-slate-900 tracking-tight">Kies Jouw Favoriete Print! 🎁</h1>
<p class="text-xs font-bold text-slate-600 mt-1">Filter op categorie of materiaal en bestel direct in jouw favoriete kleur.</p>
</div>
@if(request()->hasAny(['category', 'material', 'q', 'sort']))
<a href="{{ route('catalog') }}" class="toy-btn px-4 py-2 rounded-2xl bg-white border-2 border-slate-900 toy-shadow-sm text-xs font-black text-rose-600 hover:bg-rose-50 flex items-center space-x-1.5 self-start">
<span>✕ Filters Wissen</span>
</a>
@endif
</div> </div>
</div> </div>
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-10"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-10">
<div class="grid grid-cols-1 lg:grid-cols-4 gap-8"> <div class="grid grid-cols-1 lg:grid-cols-4 gap-8">
<!-- Filters Sidebar --> <!-- Filters Sidebar (Chunky Toy Box) -->
<aside class="space-y-6"> <aside class="space-y-6">
<div class="p-6 rounded-3xl bg-white border border-slate-200 shadow-2xs space-y-6"> <div class="p-6 rounded-3xl bg-white border-2 border-slate-900 toy-shadow space-y-6">
<div class="flex items-center justify-between pb-3 border-b border-slate-100"> <div class="flex items-center justify-between pb-3 border-b-2 border-slate-100">
<span class="text-xs font-bold text-slate-900 uppercase tracking-wider flex items-center space-x-1.5"> <span class="font-heading text-sm font-black text-slate-900 uppercase tracking-wider flex items-center space-x-2">
<i data-lucide="filter" class="w-4 h-4 text-indigo-600"></i> <span>🔍</span>
<span>Filters</span> <span>Zoeken & Filters</span>
</span> </span>
@if(request()->hasAny(['category', 'material', 'q', 'sort'])) @if(request()->hasAny(['category', 'material', 'q', 'sort']))
<a href="{{ route('catalog') }}" class="text-[11px] font-bold text-rose-500 hover:underline">Wissen</a> <a href="{{ route('catalog') }}" class="text-[11px] font-black text-rose-500 hover:underline">Wissen</a>
@endif @endif
</div> </div>
<!-- Zoekveld --> <!-- 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('category')) <input type="hidden" name="category" value="{{ request('category') }}"> @endif
@if(request('material')) <input type="hidden" name="material" value="{{ request('material') }}"> @endif @if(request('material')) <input type="hidden" name="material" value="{{ request('material') }}"> @endif
<div> <div>
<label class="block text-xs font-semibold text-slate-700 mb-1.5">Zoeken</label> <label class="block text-xs font-black text-slate-800 mb-1.5">Zoek op trefwoord</label>
<div class="relative"> <div class="relative">
<input <input
type="text" type="text"
name="q" name="q"
value="{{ request('q') }}" value="{{ request('q') }}"
placeholder="Zoek op naam..." placeholder="Speelgoed, vaas, houder..."
class="w-full bg-slate-50 border border-slate-200 rounded-xl pl-8 pr-3 py-2 text-xs text-slate-900 placeholder-slate-400 focus:bg-white focus:outline-none focus:ring-1 focus:ring-indigo-500" class="w-full bg-[#FFFDF7] border-2 border-slate-900 rounded-2xl pl-9 pr-3.5 py-2.5 text-xs font-bold text-slate-900 placeholder-slate-400 focus:bg-white focus:outline-none focus:ring-2 focus:ring-amber-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> <i data-lucide="search" class="w-4 h-4 text-slate-400 absolute left-3 top-1/2 -translate-y-1/2"></i>
</div> </div>
</div> </div>
<!-- Categorie filter --> <!-- Categorie filter -->
<div> <div>
<label class="block text-xs font-semibold text-slate-700 mb-2">Categorieën</label> <label class="block text-xs font-black text-slate-800 mb-2">Categorieën 🧸</label>
<div class="space-y-1"> <div class="space-y-1.5">
<a href="{{ route('catalog', array_merge(request()->except('category', 'page'), [])) }}" class="flex items-center justify-between px-3 py-1.5 rounded-lg text-xs {{ !request('category') ? 'bg-indigo-50 text-indigo-700 font-bold' : 'text-slate-600 hover:bg-slate-50' }}"> <a href="{{ route('catalog', array_merge(request()->except('category', 'page'), [])) }}" class="flex items-center justify-between px-3.5 py-2 rounded-xl text-xs font-black transition border-2 {{ !request('category') ? 'bg-amber-300 border-slate-900 text-slate-950 toy-shadow-sm' : 'border-transparent text-slate-700 hover:bg-slate-100' }}">
<span>Alle categorieën</span> <span>Alle categorieën</span>
</a> </a>
@foreach($categories as $cat) @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-1.5 rounded-lg text-xs {{ request('category') === $cat->slug ? 'bg-indigo-50 text-indigo-700 font-bold' : '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-3.5 py-2 rounded-xl text-xs font-black transition border-2 {{ request('category') === $cat->slug ? 'bg-amber-300 border-slate-900 text-slate-950 toy-shadow-sm' : 'border-transparent text-slate-700 hover:bg-slate-100' }}">
<span>{{ $cat->name }}</span> <span>{{ $cat->name }}</span>
</a> </a>
@endforeach @endforeach
@@ -62,15 +74,15 @@
<!-- Materiaal filter --> <!-- Materiaal filter -->
<div> <div>
<label class="block text-xs font-semibold text-slate-700 mb-2">Materiaal</label> <label class="block text-xs font-black text-slate-800 mb-2">Materiaal 🌈</label>
<div class="space-y-1"> <div class="space-y-1.5">
<a href="{{ route('catalog', array_merge(request()->except('material', 'page'), [])) }}" class="flex items-center justify-between px-3 py-1.5 rounded-lg text-xs {{ !request('material') ? 'bg-indigo-50 text-indigo-700 font-bold' : 'text-slate-600 hover:bg-slate-50' }}"> <a href="{{ route('catalog', array_merge(request()->except('material', 'page'), [])) }}" class="flex items-center justify-between px-3.5 py-2 rounded-xl text-xs font-black transition border-2 {{ !request('material') ? 'bg-sky-200 border-slate-900 text-slate-950 toy-shadow-sm' : 'border-transparent text-slate-700 hover:bg-slate-100' }}">
<span>Alle materialen</span> <span>Alle materialen</span>
</a> </a>
@foreach($materials as $mat) @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-lg text-xs {{ request('material') === $mat->code ? 'bg-indigo-50 text-indigo-700 font-bold' : '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-3.5 py-2 rounded-xl text-xs font-black transition border-2 {{ request('material') === $mat->code ? 'bg-sky-200 border-slate-900 text-slate-950 toy-shadow-sm' : 'border-transparent text-slate-700 hover:bg-slate-100' }}">
<span>{{ $mat->name }}</span> <span>{{ $mat->name }}</span>
<span class="text-[10px] text-slate-400 font-mono">{{ strtoupper($mat->code) }}</span> <span class="text-[10px] px-1.5 py-0.5 rounded bg-white border border-slate-300 font-mono">{{ strtoupper($mat->code) }}</span>
</a> </a>
@endforeach @endforeach
</div> </div>
@@ -78,9 +90,9 @@
<!-- Sortering --> <!-- Sortering -->
<div> <div>
<label class="block text-xs font-semibold text-slate-700 mb-1.5">Sorteren</label> <label class="block text-xs font-black text-slate-800 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 text-slate-900 focus:bg-white focus:outline-none focus:ring-1 focus:ring-indigo-500"> <select name="sort" onchange="this.form.submit()" class="w-full bg-[#FFFDF7] border-2 border-slate-900 rounded-2xl px-3.5 py-2.5 text-xs font-bold text-slate-900 focus:bg-white focus:outline-none focus:ring-2 focus:ring-amber-400">
<option value="newest" {{ request('sort') === 'newest' ? 'selected' : '' }}>Nieuwste eerst</option> <option value="newest" {{ request('sort') === 'newest' ? 'selected' : '' }}>Nieuwste eerst ✨</option>
<option value="price_asc" {{ request('sort') === 'price_asc' ? 'selected' : '' }}>Prijs: Laag naar hoog</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> <option value="price_desc" {{ request('sort') === 'price_desc' ? 'selected' : '' }}>Prijs: Hoog naar laag</option>
</select> </select>
@@ -92,58 +104,57 @@
<!-- Producten Overzicht --> <!-- Producten Overzicht -->
<div class="lg:col-span-3 space-y-6"> <div class="lg:col-span-3 space-y-6">
@if($products->isEmpty()) @if($products->isEmpty())
<div class="p-12 text-center rounded-3xl bg-white border border-slate-200 space-y-4"> <div class="p-12 text-center rounded-3xl bg-white border-2 border-slate-900 toy-shadow space-y-4">
<div class="w-16 h-16 rounded-2xl bg-indigo-50 text-indigo-600 flex items-center justify-center mx-auto"> <div class="w-16 h-16 rounded-2xl bg-amber-100 border-2 border-slate-900 text-slate-900 flex items-center justify-center mx-auto text-2xl">
<i data-lucide="package-search" class="w-8 h-8"></i> 🙈
</div> </div>
<h3 class="text-base font-bold text-slate-900">Geen artikelen gevonden</h3> <h3 class="font-heading text-lg font-black 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. Probeer een andere zoekopdracht of wis je filters.</p> <p class="text-xs font-medium text-slate-600 max-w-sm mx-auto">Er zijn geen prints gevonden die voldoen aan je huidige filters. Probeer een andere zoekopdracht of bekijk alle prints!</p>
<a href="{{ route('catalog') }}" class="inline-flex px-4 py-2 rounded-xl bg-indigo-600 text-white text-xs font-bold hover:bg-indigo-500 transition">Alle prints bekijken</a> <a href="{{ route('catalog') }}" class="toy-btn inline-flex px-6 py-3 rounded-2xl bg-amber-400 border-2 border-slate-900 toy-shadow-sm text-slate-950 text-xs font-black">Alle prints bekijken 🎁</a>
</div> </div>
@else @else
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6"> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
@foreach($products as $product) @foreach($products as $product)
<div class="group rounded-3xl bg-white border border-slate-200 overflow-hidden hover:border-indigo-400 hover:shadow-lg transition flex flex-col justify-between"> <div class="group rounded-3xl bg-[#FFFDF7] border-2 border-slate-900 toy-shadow overflow-hidden flex flex-col justify-between hover:-translate-y-1 transition duration-200">
<div> <div>
<div class="relative h-56 bg-slate-100 overflow-hidden"> <div class="relative h-56 bg-slate-100 border-b-2 border-slate-900 overflow-hidden">
<img <img
src="{{ $product->image_url }}" src="{{ $product->image_url }}"
alt="{{ $product->name }}" 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-105 transition-transform duration-500"
> >
@if($product->category) @if($product->category)
<span class="absolute top-3 left-3 px-2 py-0.5 rounded-lg bg-white/90 backdrop-blur-xs text-[10px] font-bold text-slate-800 shadow-2xs"> <span class="absolute top-3 left-3 px-2.5 py-1 rounded-xl bg-amber-300 border-2 border-slate-900 text-[10px] font-black text-slate-950 toy-shadow-sm">
{{ $product->category->name }} {{ $product->category->name }}
</span> </span>
@endif @endif
</div> </div>
<div class="p-5"> <div class="p-5">
<h3 class="text-sm font-bold text-slate-900 group-hover:text-indigo-600 transition"> <h3 class="font-heading text-base font-black text-slate-900 group-hover:text-rose-600 transition">
<a href="{{ route('product.show', $product->slug) }}"> <a href="{{ route('product.show', $product->slug) }}">
{{ $product->name }} {{ $product->name }}
</a> </a>
</h3> </h3>
<p class="text-xs text-slate-500 mt-1 line-clamp-2 leading-relaxed"> <p class="text-xs text-slate-600 mt-1 line-clamp-2 leading-relaxed font-medium">
{{ $product->short_description }} {{ $product->short_description }}
</p> </p>
</div> </div>
</div> </div>
<div class="p-5 pt-0 border-t border-slate-100 mt-2 flex items-center justify-between"> <div class="p-5 pt-0 border-t-2 border-slate-100 mt-2 flex items-center justify-between">
<div> <div>
<span class="text-[10px] text-slate-400 block font-semibold">Vanaf</span> <span class="text-[10px] text-slate-500 block font-bold uppercase">Vanaf</span>
<span class="text-base font-black text-slate-900 font-mono">{{ $product->formatted_price }}</span> <span class="font-heading text-lg font-black text-slate-900">{{ $product->formatted_price }}</span>
</div> </div>
<a href="{{ route('product.show', $product->slug) }}" class="px-3.5 py-2 rounded-xl bg-slate-100 hover:bg-indigo-600 hover:text-white text-slate-800 text-xs font-bold transition flex items-center space-x-1"> <a href="{{ route('product.show', $product->slug) }}" class="toy-btn px-4 py-2 rounded-2xl bg-amber-400 hover:bg-amber-300 border-2 border-slate-900 toy-shadow-sm text-slate-950 text-xs font-black transition flex items-center space-x-1">
<span>Opties</span> <span>Kies Kleur 🎨</span>
<i data-lucide="chevron-right" class="w-3.5 h-3.5"></i>
</a> </a>
</div> </div>
</div> </div>
@endforeach @endforeach
</div> </div>
<div class="pt-4"> <div class="pt-6">
{{ $products->links() }} {{ $products->links() }}
</div> </div>
@endif @endif
@@ -152,4 +163,3 @@
</div> </div>
</div> </div>
@endsection @endsection
+135 -128
View File
@@ -1,99 +1,104 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', 'Jouwdriedee.nl | Dé 3D Print Webshop & Printservice') @section('title', 'Jouwdriedee.nl 🎨 Dé Speelse 3D Print Webshop')
@section('content') @section('content')
<!-- Hero Section --> <!-- Hero Section (Vrolijk & Speels) -->
<section class="relative overflow-hidden bg-gradient-to-b from-slate-900 via-slate-900 to-indigo-950 text-white pt-16 pb-24 lg:pt-24 lg:pb-32"> <section class="relative overflow-hidden bg-gradient-to-b from-amber-100 via-rose-50 to-[#FFFDF7] border-b-2 border-slate-900 pt-12 pb-20 lg:pt-16 lg:pb-28">
<!-- Background Glow Elements -->
<div class="absolute top-0 left-1/2 -translate-x-1/2 w-full max-w-7xl h-full overflow-hidden pointer-events-none opacity-25"> <!-- Playful Floating Blobs / Shapes -->
<div class="absolute -top-40 left-1/4 w-96 h-96 bg-indigo-500 rounded-full blur-3xl"></div> <div class="absolute top-10 left-8 w-24 h-24 bg-amber-300/60 rounded-full blur-xl pointer-events-none"></div>
<div class="absolute top-1/3 right-10 w-80 h-80 bg-sky-400 rounded-full blur-3xl"></div> <div class="absolute top-1/2 right-12 w-40 h-40 bg-sky-300/50 rounded-full blur-2xl pointer-events-none"></div>
</div> <div class="absolute bottom-6 left-1/3 w-32 h-32 bg-rose-300/40 rounded-full blur-xl pointer-events-none"></div>
<div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <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-12 items-center"> <div class="grid grid-cols-1 lg:grid-cols-12 gap-12 items-center">
<!-- Left Hero Content --> <!-- Left Hero Content -->
<div class="lg:col-span-7 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-indigo-900/60 border border-indigo-700/60 text-indigo-300 text-xs font-bold tracking-wide">
<span class="w-2 h-2 rounded-full bg-emerald-400 animate-pulse"></span> <!-- Playful Pill Badge -->
<span>High-Precision 3D Printing Studio</span> <div class="inline-flex items-center space-x-2 px-4 py-1.5 rounded-full bg-white border-2 border-slate-900 toy-shadow-sm text-slate-900 text-xs font-black">
<span class="animate-spin text-sm">✨</span>
<span class="tracking-wide">Dé gezelligste 3D printstudio van Nederland!</span>
<span class="text-sm">🖨️</span>
</div> </div>
<h1 class="text-4xl sm:text-5xl lg:text-6xl font-black tracking-tight leading-tight sm:leading-none"> <h1 class="font-heading text-4xl sm:text-5xl lg:text-6xl font-black tracking-tight text-slate-900 leading-[1.15]">
Jouw ideeën tastbaar gemaakt in <span class="text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 via-sky-300 to-teal-300">3D</span> Vrolijke 3D prints, <br class="hidden sm:inline">
<span class="bg-clip-text text-transparent bg-gradient-to-r from-rose-500 via-purple-600 to-indigo-600">tof speelgoed</span> & gadgets! 🚀
</h1> </h1>
<p class="text-base sm:text-lg text-slate-300 max-w-2xl mx-auto lg:mx-0 font-normal leading-relaxed"> <p class="text-base sm:text-lg text-slate-700 max-w-2xl mx-auto lg:mx-0 font-bold leading-relaxed">
Ontdek onze zorgvuldig ontworpen geometrische vazen, ergonomische bureau-gadgets en slimme tools. Of upload direct jouw eigen 3D-bestand voor professioneel maatwerk. Op zoek naar origineel speelgoed, vrolijke woonaccessoires of coole gadgets? Kies jouw lievelingskleur en wij toveren het met onze 3D-printers tot leven! ✨
</p> </p>
<!-- Action CTA's --> <!-- Action CTA's (Chunky Pressable Toy Buttons) -->
<div class="flex flex-col sm:flex-row items-center justify-center lg:justify-start gap-3.5 pt-2"> <div class="flex flex-col sm:flex-row items-center justify-center lg:justify-start gap-4 pt-3">
<a href="{{ route('catalog') }}" class="w-full sm:w-auto px-7 py-3.5 rounded-2xl bg-indigo-600 hover:bg-indigo-500 text-white font-bold text-sm transition shadow-lg shadow-indigo-600/30 flex items-center justify-center space-x-2"> <a href="{{ route('catalog') }}" class="toy-btn w-full sm:w-auto px-8 py-4 rounded-2xl bg-amber-400 hover:bg-amber-300 border-2 border-slate-900 toy-shadow text-slate-950 font-black text-sm flex items-center justify-center space-x-2">
<span>Bekijk Onze Prints</span> <span>Ontdek Alle Prints 🎁</span>
<i data-lucide="arrow-right" class="w-4 h-4"></i> <i data-lucide="arrow-right" class="w-4 h-4 stroke-[3]"></i>
</a> </a>
<a href="{{ route('custom.request') }}" class="w-full sm:w-auto px-7 py-3.5 rounded-2xl bg-white/10 hover:bg-white/15 border border-white/20 text-white font-bold text-sm transition backdrop-blur-xs flex items-center justify-center space-x-2"> <a href="{{ route('custom.request') }}" class="toy-btn w-full sm:w-auto px-8 py-4 rounded-2xl bg-white hover:bg-sky-50 border-2 border-slate-900 toy-shadow text-slate-950 font-black text-sm flex items-center justify-center space-x-2">
<i data-lucide="upload-cloud" class="w-4 h-4 text-sky-400"></i> <span>Upload Eigen STL Model 🚀</span>
<span>Eigen STL / 3D Model Printen</span>
</a> </a>
</div> </div>
<!-- Live stats / Badges --> <!-- Live stats / Badges in Toy Blocks -->
<div class="pt-6 border-t border-slate-800 grid grid-cols-3 gap-4 text-left max-w-lg mx-auto lg:mx-0"> <div class="pt-6 grid grid-cols-3 gap-3 max-w-lg mx-auto lg:mx-0">
<div> <div class="p-3 bg-white border-2 border-slate-900 rounded-2xl toy-shadow-sm text-center">
<div class="text-xl sm:text-2xl font-black text-white font-mono">0.12 mm</div> <div class="text-xl sm:text-2xl font-black text-rose-500 font-heading">100%</div>
<div class="text-[11px] text-slate-400">Minimale laaghoogte</div> <div class="text-[11px] font-extrabold text-slate-600">Bio PLA & Veilig</div>
</div> </div>
<div> <div class="p-3 bg-white border-2 border-slate-900 rounded-2xl toy-shadow-sm text-center">
<div class="text-xl sm:text-2xl font-black text-indigo-400 font-mono">4+ Types</div> <div class="text-xl sm:text-2xl font-black text-indigo-600 font-heading">24+</div>
<div class="text-[11px] text-slate-400">PLA, PETG, TPU, Resin</div> <div class="text-[11px] font-extrabold text-slate-600">Vrolijke Kleuren</div>
</div> </div>
<div> <div class="p-3 bg-white border-2 border-slate-900 rounded-2xl toy-shadow-sm text-center">
<div class="text-xl sm:text-2xl font-black text-emerald-400 font-mono">48-72u</div> <div class="text-xl sm:text-2xl font-black text-emerald-600 font-heading">2-3 Dagen</div>
<div class="text-[11px] text-slate-400">Gemiddelde verzendtijd</div> <div class="text-[11px] font-extrabold text-slate-600">Snel Bezorgd 📦</div>
</div> </div>
</div> </div>
</div> </div>
<!-- Right Hero Card / 3D Visual Preview --> <!-- Right Hero Card / Toy Showcase -->
<div class="lg:col-span-5 relative"> <div class="lg:col-span-5 relative">
<div class="relative rounded-3xl bg-gradient-to-br from-slate-800/90 to-slate-900/90 border border-slate-700/80 p-5 shadow-2xl backdrop-blur-xl"> <div class="relative rounded-3xl bg-white border-3 border-slate-900 p-4 toy-shadow-lg transform rotate-1 hover:rotate-0 transition duration-300">
<div class="relative h-72 sm:h-88 rounded-2xl overflow-hidden bg-slate-950">
<!-- Sticker in the corner -->
<div class="absolute -top-4 -right-4 bg-rose-500 text-white font-black text-xs px-3.5 py-1.5 rounded-full border-2 border-slate-900 toy-shadow-sm rotate-6 z-10 flex items-center space-x-1">
<span>🔥</span>
<span>Favoriet!</span>
</div>
<div class="relative h-72 sm:h-80 rounded-2xl overflow-hidden bg-amber-50 border-2 border-slate-900">
<img <img
src="https://images.unsplash.com/photo-1578749556568-bc2c40e68b61?auto=format&fit=crop&w=1000&q=80" src="https://images.unsplash.com/photo-1578749556568-bc2c40e68b61?auto=format&fit=crop&w=1000&q=80"
alt="3D print vaas" alt="3D print vaas"
class="w-full h-full object-cover object-center opacity-90 hover:scale-105 transition-transform duration-700" class="w-full h-full object-cover object-center hover:scale-105 transition-transform duration-500"
> >
<div class="absolute inset-0 bg-gradient-to-t from-slate-950 via-transparent to-transparent"></div>
<div class="absolute bottom-4 left-4 right-4 flex items-end justify-between"> <div class="absolute bottom-3 left-3 right-3 p-3 rounded-xl bg-white/95 border-2 border-slate-900 toy-shadow-sm flex items-center justify-between">
<div> <div>
<span class="px-2.5 py-1 rounded-lg bg-indigo-600/90 text-white font-mono text-[10px] font-bold uppercase tracking-wider"> <span class="text-[10px] font-black uppercase text-amber-600">✨ Uitgelichte Print</span>
Uitgelichte Print <h3 class="font-heading font-black text-slate-900 text-sm">Origami Speelse Vaas</h3>
</span>
<h3 class="text-lg font-bold text-white mt-1">Origami Geometrische Vaas</h3>
<p class="text-xs text-slate-300">Geprint in koper zijdeglans PLA+</p>
</div> </div>
<div class="text-right"> <div class="bg-amber-300 px-3 py-1 rounded-xl border border-slate-900 font-heading font-black text-slate-900 text-sm">
<span class="text-xs text-slate-400 block">Vanaf</span> € 18,95
<span class="text-lg font-black text-emerald-400 font-mono">€ 18,95</span>
</div> </div>
</div> </div>
</div> </div>
<!-- Material tags preview --> <!-- Material tags preview -->
<div class="mt-4 flex flex-wrap gap-2 text-xs"> <div class="mt-3 flex items-center justify-between text-xs font-bold text-slate-700">
<span class="px-2.5 py-1 rounded-xl bg-slate-800 text-slate-300 border border-slate-700 flex items-center space-x-1.5"> <span class="flex items-center space-x-1">
<span class="w-2 h-2 rounded-full bg-emerald-500"></span> <span>🎨</span>
<span>100% Waterdicht mogelijk</span> <span>Kies jouw favoriete kleur</span>
</span> </span>
<span class="px-2.5 py-1 rounded-xl bg-slate-800 text-slate-300 border border-slate-700 flex items-center space-x-1.5"> <span class="flex items-center space-x-1">
<span class="w-2 h-2 rounded-full bg-indigo-400"></span> <span>🌱</span>
<span>Kleur naar wens</span> <span>Milieuvriendelijk PLA</span>
</span> </span>
</div> </div>
</div> </div>
@@ -103,48 +108,40 @@
</div> </div>
</section> </section>
<!-- USP Bar --> <!-- Cheerful USP Bar (4 Colorful Toy Blocks) -->
<section class="border-y border-slate-200 bg-white py-8"> <section class="border-b-2 border-slate-900 bg-white py-8">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="grid grid-cols-2 md:grid-cols-4 gap-6 text-slate-800"> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
<div class="flex items-start space-x-3.5"> <div class="p-4 rounded-2xl bg-amber-100 border-2 border-slate-900 toy-shadow-sm flex items-center space-x-3.5">
<div class="w-10 h-10 rounded-xl bg-indigo-50 border border-indigo-100 flex items-center justify-center text-indigo-600 flex-shrink-0"> <div class="text-3xl">🖨️</div>
<i data-lucide="printer" class="w-5 h-5"></i>
</div>
<div> <div>
<h4 class="text-xs font-bold text-slate-900 uppercase tracking-wider">Print on Demand</h4> <h4 class="font-heading text-sm font-black text-slate-900">Vers Geprint</h4>
<p class="text-xs text-slate-500 mt-0.5">Vers geprint voor jou in de exacte gewenste kleur.</p> <p class="text-xs text-slate-700 font-bold mt-0.5">Speciaal voor jou op bestelling gemaakt.</p>
</div> </div>
</div> </div>
<div class="flex items-start space-x-3.5"> <div class="p-4 rounded-2xl bg-sky-100 border-2 border-slate-900 toy-shadow-sm flex items-center space-x-3.5">
<div class="w-10 h-10 rounded-xl bg-sky-50 border border-sky-100 flex items-center justify-center text-sky-600 flex-shrink-0"> <div class="text-3xl">🌈</div>
<i data-lucide="layers" class="w-5 h-5"></i>
</div>
<div> <div>
<h4 class="text-xs font-bold text-slate-900 uppercase tracking-wider">Topkwaliteit Filament</h4> <h4 class="font-heading text-sm font-black text-slate-900">Veel Kleuren</h4>
<p class="text-xs text-slate-500 mt-0.5">Uitsluitend A-merk PLA+, PETG en elastisch TPU.</p> <p class="text-xs text-slate-700 font-bold mt-0.5">Zijden glans, mat, pastel & regenboog!</p>
</div> </div>
</div> </div>
<div class="flex items-start space-x-3.5"> <div class="p-4 rounded-2xl bg-emerald-100 border-2 border-slate-900 toy-shadow-sm flex items-center space-x-3.5">
<div class="w-10 h-10 rounded-xl bg-emerald-50 border border-emerald-100 flex items-center justify-center text-emerald-600 flex-shrink-0"> <div class="text-3xl">🚚</div>
<i data-lucide="truck" class="w-5 h-5"></i>
</div>
<div> <div>
<h4 class="text-xs font-bold text-slate-900 uppercase tracking-wider">Snelle Bezorging</h4> <h4 class="font-heading text-sm font-black text-slate-900">Snelle Bezorging</h4>
<p class="text-xs text-slate-500 mt-0.5">Verzending binnen 2-3 werkdagen via PostNL.</p> <p class="text-xs text-slate-700 font-bold mt-0.5">Binnen 2-3 werkdagen via PostNL.</p>
</div> </div>
</div> </div>
<div class="flex items-start space-x-3.5"> <div class="p-4 rounded-2xl bg-rose-100 border-2 border-slate-900 toy-shadow-sm flex items-center space-x-3.5">
<div class="w-10 h-10 rounded-xl bg-amber-50 border border-amber-100 flex items-center justify-center text-amber-600 flex-shrink-0"> <div class="text-3xl">❤️</div>
<i data-lucide="check-circle-2" class="w-5 h-5"></i>
</div>
<div> <div>
<h4 class="text-xs font-bold text-slate-900 uppercase tracking-wider">Kwaliteitsgarantie</h4> <h4 class="font-heading text-sm font-black text-slate-900">Top Kwaliteit</h4>
<p class="text-xs text-slate-500 mt-0.5">Elke print wordt met de hand geïnspecteerd en ontbraamd.</p> <p class="text-xs text-slate-700 font-bold mt-0.5">Met zorg gecontroleerd en afgewerkt.</p>
</div> </div>
</div> </div>
@@ -152,28 +149,37 @@
</div> </div>
</section> </section>
<!-- Categorieën Grid --> <!-- Categorieën Grid (Chunky Colorful Toy Boxes) -->
<section class="py-16 bg-slate-50"> <section class="py-16 bg-[#FFFDF7]">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <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-4"> <div class="flex flex-col sm:flex-row sm:items-end justify-between mb-8 gap-4">
<div> <div>
<span class="text-xs font-bold uppercase tracking-wider text-indigo-600">Collecties</span> <span class="text-xs font-black uppercase tracking-wider text-rose-500 flex items-center space-x-1">
<h2 class="text-2xl sm:text-3xl font-extrabold text-slate-900 tracking-tight">Ontdek per Categorie</h2> <span>🧸</span>
<span>Kies een speelse categorie</span>
</span>
<h2 class="font-heading text-3xl font-black text-slate-900 tracking-tight">Wat wil jij vandaag ontdekken?</h2>
</div> </div>
<a href="{{ route('catalog') }}" class="text-xs font-bold text-indigo-600 hover:text-indigo-800 flex items-center space-x-1"> <a href="{{ route('catalog') }}" class="toy-btn px-4 py-2 rounded-2xl bg-white border-2 border-slate-900 toy-shadow-sm text-xs font-black text-slate-900 flex items-center space-x-1.5 self-start sm:self-auto">
<span>Alles bekijken</span> <span>Alles bekijken</span>
<i data-lucide="chevron-right" class="w-4 h-4"></i> <i data-lucide="chevron-right" class="w-4 h-4"></i>
</a> </a>
</div> </div>
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-4"> <div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-4">
@foreach($categories as $category) @php
<a href="{{ route('catalog', ['category' => $category->slug]) }}" class="group p-5 rounded-2xl bg-white border border-slate-200 hover:border-indigo-400 hover:shadow-md transition text-center flex flex-col items-center"> $bgColors = ['bg-amber-100', 'bg-rose-100', 'bg-sky-100', 'bg-emerald-100', 'bg-purple-100'];
<div class="w-14 h-14 rounded-2xl bg-indigo-50 border border-indigo-100 text-indigo-600 group-hover:bg-indigo-600 group-hover:text-white transition flex items-center justify-center mb-3 shadow-xs"> @endphp
<i data-lucide="{{ $category->icon }}" class="w-7 h-7"></i> @foreach($categories as $index => $category)
@php $colorClass = $bgColors[$index % count($bgColors)]; @endphp
<a href="{{ route('catalog', ['category' => $category->slug]) }}" class="toy-btn group p-5 rounded-3xl {{ $colorClass }} border-2 border-slate-900 toy-shadow text-center flex flex-col items-center justify-between">
<div class="w-16 h-16 rounded-2xl bg-white border-2 border-slate-900 flex items-center justify-center mb-3 toy-shadow-sm group-hover:scale-110 group-hover:rotate-3 transition transform text-indigo-600">
<i data-lucide="{{ $category->icon }}" class="w-8 h-8 stroke-[2.2]"></i>
</div>
<div>
<h3 class="font-heading text-sm font-black text-slate-900 group-hover:text-rose-600 transition">{{ $category->name }}</h3>
<p class="text-[11px] font-bold text-slate-600 mt-1 line-clamp-1">{{ $category->description }}</p>
</div> </div>
<h3 class="text-xs font-bold text-slate-900 group-hover:text-indigo-600 transition">{{ $category->name }}</h3>
<p class="text-[11px] text-slate-500 mt-1 line-clamp-1">{{ $category->description }}</p>
</a> </a>
@endforeach @endforeach
</div> </div>
@@ -181,26 +187,29 @@
</section> </section>
<!-- Uitgelichte Prints / Product Showcase --> <!-- Uitgelichte Prints / Product Showcase -->
<section class="py-16 bg-white border-t border-slate-200"> <section class="py-16 bg-white border-t-2 border-slate-900">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <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-10 gap-4"> <div class="flex flex-col sm:flex-row sm:items-end justify-between mb-10 gap-4">
<div> <div>
<span class="text-xs font-bold uppercase tracking-wider text-indigo-600">Populaire Artikelen</span> <span class="text-xs font-black uppercase tracking-wider text-amber-600 flex items-center space-x-1">
<h2 class="text-2xl sm:text-3xl font-extrabold text-slate-900 tracking-tight">Direct te Bestellen</h2> <span>🌟</span>
<p class="text-xs text-slate-500 mt-1">Kies je favoriete kleur en filamentsoort direct op de productpagina.</p> <span>Favorieten uit de 3D studio</span>
</span>
<h2 class="font-heading text-3xl font-black text-slate-900 tracking-tight">Populaire Prints & Modellen</h2>
<p class="text-xs font-bold text-slate-600 mt-1">Kies jouw favoriet en stel hem helemaal samen in jouw gewenste kleur!</p>
</div> </div>
<a href="{{ route('catalog') }}" class="px-4 py-2 rounded-xl bg-slate-100 hover:bg-slate-200 text-slate-800 text-xs font-bold transition flex items-center space-x-1.5 self-start sm:self-auto"> <a href="{{ route('catalog') }}" class="toy-btn px-5 py-2.5 rounded-2xl bg-amber-300 hover:bg-amber-400 border-2 border-slate-900 toy-shadow-sm text-slate-950 text-xs font-black transition flex items-center space-x-1.5 self-start sm:self-auto">
<span>Volledige Catalogus</span> <span>Volledige Catalogus 🎁</span>
<i data-lucide="arrow-right" class="w-3.5 h-3.5"></i> <i data-lucide="arrow-right" class="w-3.5 h-3.5 stroke-[3]"></i>
</a> </a>
</div> </div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8"> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
@foreach($featuredProducts as $product) @foreach($featuredProducts as $product)
<div class="group rounded-3xl bg-slate-50/70 border border-slate-200 overflow-hidden hover:border-indigo-300 hover:shadow-xl transition flex flex-col"> <div class="group rounded-3xl bg-[#FFFDF7] border-2 border-slate-900 toy-shadow overflow-hidden flex flex-col justify-between hover:-translate-y-1 transition duration-200">
<!-- Afbeelding & Badges --> <!-- Afbeelding & Badges -->
<div class="relative h-64 overflow-hidden bg-slate-200"> <div class="relative h-64 overflow-hidden bg-slate-100 border-b-2 border-slate-900">
<img <img
src="{{ $product->image_url }}" src="{{ $product->image_url }}"
alt="{{ $product->name }}" alt="{{ $product->name }}"
@@ -208,45 +217,44 @@
> >
<div class="absolute top-3.5 left-3.5 flex flex-col gap-1.5"> <div class="absolute top-3.5 left-3.5 flex flex-col gap-1.5">
@if($product->category) @if($product->category)
<span class="px-2.5 py-1 rounded-lg bg-white/95 backdrop-blur-xs text-slate-800 text-[10px] font-bold shadow-xs"> <span class="px-3 py-1 rounded-xl bg-amber-300 border-2 border-slate-900 text-slate-950 text-[11px] font-black toy-shadow-sm">
{{ $product->category->name }} {{ $product->category->name }}
</span> </span>
@endif @endif
</div> </div>
@if($product->print_time_hours) @if($product->print_time_hours)
<div class="absolute bottom-3 left-3 px-2 py-0.5 rounded-md bg-slate-900/80 backdrop-blur-xs text-white text-[10px] font-mono flex items-center space-x-1"> <div class="absolute bottom-3 left-3 px-2.5 py-1 rounded-xl bg-white border-2 border-slate-900 text-slate-900 text-[11px] font-black toy-shadow-sm flex items-center space-x-1">
<i data-lucide="clock" class="w-3 h-3 text-sky-400"></i> <span>⏱️</span>
<span>{{ $product->print_time_hours }}u printtijd</span> <span>{{ $product->print_time_hours }}u printtijd</span>
</div> </div>
@endif @endif
</div> </div>
<!-- Inhoud --> <!-- Inhoud -->
<div class="p-6 flex-1 flex flex-col justify-between"> <div class="p-6 flex-1 flex flex-col justify-between space-y-4">
<div> <div>
<h3 class="text-base font-bold text-slate-900 group-hover:text-indigo-600 transition tracking-tight"> <h3 class="font-heading text-lg font-black text-slate-900 group-hover:text-rose-600 transition tracking-tight">
<a href="{{ route('product.show', $product->slug) }}"> <a href="{{ route('product.show', $product->slug) }}">
{{ $product->name }} {{ $product->name }}
</a> </a>
</h3> </h3>
<p class="text-xs text-slate-500 mt-2 line-clamp-2 leading-relaxed"> <p class="text-xs font-medium text-slate-600 mt-1.5 line-clamp-2 leading-relaxed">
{{ $product->short_description }} {{ $product->short_description }}
</p> </p>
</div> </div>
<!-- Footer met prijs & actieknop --> <!-- Footer met prijs & actieknop -->
<div class="pt-5 mt-4 border-t border-slate-200/80 flex items-center justify-between"> <div class="pt-4 border-t-2 border-slate-200 flex items-center justify-between">
<div> <div>
<span class="text-[10px] text-slate-400 uppercase font-semibold block">Vanaf</span> <span class="text-[10px] text-slate-500 font-extrabold uppercase block">Vanaf</span>
<span class="text-lg font-black text-slate-900 font-mono"> <span class="font-heading text-xl font-black text-slate-900">
{{ $product->formatted_price }} {{ $product->formatted_price }}
</span> </span>
</div> </div>
<a href="{{ route('product.show', $product->slug) }}" class="px-4 py-2 rounded-xl bg-indigo-600 hover:bg-indigo-500 text-white text-xs font-bold transition flex items-center space-x-1.5 shadow-2xs"> <a href="{{ route('product.show', $product->slug) }}" class="toy-btn px-4 py-2.5 rounded-2xl bg-amber-400 hover:bg-amber-300 border-2 border-slate-900 toy-shadow-sm text-slate-950 text-xs font-black transition flex items-center space-x-1.5">
<span>Configureren</span> <span>Kies Kleur 🎨</span>
<i data-lucide="sliders" class="w-3.5 h-3.5"></i>
</a> </a>
</div> </div>
</div> </div>
@@ -257,28 +265,27 @@
</div> </div>
</section> </section>
<!-- Custom 3D STL Upload Banner Section --> <!-- Custom 3D STL Upload Banner Section (Speelse Creatieve Werkplaats) -->
<section class="py-16 bg-gradient-to-tr from-slate-900 via-indigo-950 to-slate-900 text-white relative overflow-hidden"> <section class="py-16 bg-amber-300 border-t-2 border-slate-900 relative overflow-hidden">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative">
<div class="p-8 sm:p-12 rounded-3xl bg-indigo-900/40 border border-indigo-700/50 backdrop-blur-md flex flex-col lg:flex-row items-center justify-between gap-8"> <div class="p-8 sm:p-12 rounded-3xl bg-white border-3 border-slate-900 toy-shadow-lg flex flex-col lg:flex-row items-center justify-between gap-8">
<div class="space-y-4 max-w-2xl text-center lg:text-left"> <div class="space-y-4 max-w-2xl text-center lg:text-left">
<span class="px-3 py-1 rounded-full bg-sky-500/20 text-sky-300 border border-sky-500/30 text-xs font-bold inline-flex items-center space-x-1.5"> <span class="px-3.5 py-1.5 rounded-full bg-rose-100 text-rose-700 border-2 border-slate-900 text-xs font-black inline-flex items-center space-x-2">
<i data-lucide="file-code" class="w-3.5 h-3.5"></i> <span>💡</span>
<span>Custom Printservice (.STL / .STEP / .OBJ)</span> <span>Heb je zelf een cool 3D-bestand gevonden?</span>
</span> </span>
<h2 class="text-2xl sm:text-3xl font-extrabold tracking-tight"> <h2 class="font-heading text-3xl sm:text-4xl font-black tracking-tight text-slate-900">
Heb je een eigen 3D-model dat je wilt laten printen? Upload jouw eigen STL of MakerWorld model! 🚀
</h2> </h2>
<p class="text-xs sm:text-sm text-indigo-200 leading-relaxed"> <p class="text-xs sm:text-sm text-slate-700 font-bold leading-relaxed">
Upload je CAD- of STL-bestand via ons eenvoudige aanvraagformulier. Wij controleren de printbaarheid (slicing & oriëntatie), adviseren het beste materiaal en sturen je binnen 24 uur een scherpe offerte. Heb je een gaaf speelgoedmodel, onderdeel of design gezien op MakerWorld, Printables of Thingiverse? Upload je bestand en wij printen het in hoge kwaliteit en in jouw favoriete kleur!
</p> </p>
</div> </div>
<a href="{{ route('custom.request') }}" class="px-8 py-4 rounded-2xl bg-white hover:bg-slate-100 text-indigo-950 font-black text-xs uppercase tracking-wider transition shadow-xl flex items-center space-x-2 flex-shrink-0"> <a href="{{ route('custom.request') }}" class="toy-btn px-8 py-4 rounded-2xl bg-rose-500 hover:bg-rose-400 border-2 border-slate-900 toy-shadow text-white font-black text-xs uppercase tracking-wider transition flex items-center space-x-2 flex-shrink-0">
<i data-lucide="upload" class="w-4 h-4 text-indigo-600"></i> <i data-lucide="upload-cloud" class="w-4 h-4 stroke-[3]"></i>
<span>Direct Bestand Uploaden</span> <span>Direct Bestand Uploaden ✨</span>
</a> </a>
</div> </div>
</div> </div>
</section> </section>
@endsection @endsection
+103 -89
View File
@@ -1,20 +1,20 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', $product->name . ' | Jouwdriedee.nl') @section('title', $product->name . ' 🎨 | Jouwdriedee.nl')
@section('content') @section('content')
<!-- Breadcrumbs --> <!-- Breadcrumbs -->
<div class="bg-white border-b border-slate-200 py-3.5"> <div class="bg-amber-50 border-b-2 border-slate-900 py-3.5">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-xs text-slate-500 flex items-center space-x-2"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-xs font-bold text-slate-600 flex items-center space-x-2">
<a href="{{ route('home') }}" class="hover:text-indigo-600">Home</a> <a href="{{ route('home') }}" class="hover:text-rose-600">Home 🏠</a>
<span>/</span> <span>/</span>
<a href="{{ route('catalog') }}" class="hover:text-indigo-600">Catalogus</a> <a href="{{ route('catalog') }}" class="hover:text-rose-600">Catalogus 🎁</a>
@if($product->category) @if($product->category)
<span>/</span> <span>/</span>
<a href="{{ route('catalog', ['category' => $product->category->slug]) }}" class="hover:text-indigo-600">{{ $product->category->name }}</a> <a href="{{ route('catalog', ['category' => $product->category->slug]) }}" class="hover:text-rose-600">{{ $product->category->name }}</a>
@endif @endif
<span>/</span> <span>/</span>
<span class="font-bold text-slate-900 truncate">{{ $product->name }}</span> <span class="font-black text-slate-900 truncate">{{ $product->name }}</span>
</div> </div>
</div> </div>
@@ -51,12 +51,12 @@
} }
}"> }">
<div class="grid grid-cols-1 lg:grid-cols-12 gap-12"> <div class="grid grid-cols-1 lg:grid-cols-12 gap-10">
<!-- Linkerkant: Productgalerij & 3D Specificaties --> <!-- Linkerkant: Productgalerij & Speelse Specificaties -->
<div class="lg:col-span-6 space-y-6"> <div class="lg:col-span-6 space-y-6">
<div class="rounded-3xl bg-white border border-slate-200 overflow-hidden shadow-sm"> <div class="rounded-3xl bg-white border-3 border-slate-900 overflow-hidden toy-shadow-lg">
<div class="relative h-96 sm:h-112 bg-slate-100 flex items-center justify-center overflow-hidden"> <div class="relative h-96 sm:h-112 bg-[#FFFDF7] flex items-center justify-center overflow-hidden">
<img <img
src="{{ $product->image_url }}" src="{{ $product->image_url }}"
alt="{{ $product->name }}" alt="{{ $product->name }}"
@@ -64,105 +64,109 @@
> >
<div class="absolute top-4 left-4 flex flex-col gap-2"> <div class="absolute top-4 left-4 flex flex-col gap-2">
@if($product->is_featured) @if($product->is_featured)
<span class="px-3 py-1 rounded-full bg-indigo-600 text-white font-mono text-xs font-bold shadow-xs"> <span class="px-3.5 py-1.5 rounded-full bg-rose-500 text-white font-heading text-xs font-black border-2 border-slate-900 toy-shadow-sm flex items-center space-x-1">
Populair <span>🔥</span>
<span>Populair!</span>
</span> </span>
@endif @endif
</div> </div>
</div> </div>
</div> </div>
<!-- 3D Print Technische Specificaties Card --> <!-- Print & Specificaties Card in Vrolijke Blokken -->
<div class="p-6 rounded-3xl bg-white border border-slate-200 shadow-2xs space-y-4"> <div class="p-6 rounded-3xl bg-white border-2 border-slate-900 toy-shadow space-y-4">
<h3 class="text-xs font-bold text-slate-900 uppercase tracking-wider flex items-center space-x-2"> <h3 class="font-heading text-sm font-black text-slate-900 uppercase tracking-wider flex items-center space-x-2">
<i data-lucide="cpu" class="w-4 h-4 text-indigo-600"></i> <span>🖨️</span>
<span>Print- & Technische Specificaties</span> <span>Print Specificaties & Details</span>
</h3> </h3>
<div class="grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs"> <div class="grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs">
<div class="p-3 rounded-2xl bg-slate-50 border border-slate-100"> <div class="p-3.5 rounded-2xl bg-amber-100 border-2 border-slate-900 text-center">
<span class="text-slate-400 block text-[10px] uppercase font-bold">Afmetingen</span> <span class="text-slate-600 block text-[10px] uppercase font-black">📏 Formaat</span>
<span class="font-bold text-slate-800 font-mono mt-0.5 block">{{ $product->dimensions ?? 'Standaard' }}</span> <span class="font-black text-slate-900 mt-0.5 block font-heading">{{ $product->dimensions ?? 'Standaard' }}</span>
</div> </div>
<div class="p-3 rounded-2xl bg-slate-50 border border-slate-100"> <div class="p-3.5 rounded-2xl bg-rose-100 border-2 border-slate-900 text-center">
<span class="text-slate-400 block text-[10px] uppercase font-bold">Gewicht</span> <span class="text-slate-600 block text-[10px] uppercase font-black">⚖️ Gewicht</span>
<span class="font-bold text-slate-800 font-mono mt-0.5 block">~{{ $product->weight_grams ?? '80' }} gram</span> <span class="font-black text-slate-900 mt-0.5 block font-heading">~{{ $product->weight_grams ?? '80' }}g</span>
</div> </div>
<div class="p-3 rounded-2xl bg-slate-50 border border-slate-100"> <div class="p-3.5 rounded-2xl bg-sky-100 border-2 border-slate-900 text-center">
<span class="text-slate-400 block text-[10px] uppercase font-bold">Printtijd</span> <span class="text-slate-600 block text-[10px] uppercase font-black">⏱️ Printtijd</span>
<span class="font-bold text-slate-800 font-mono mt-0.5 block">{{ $product->print_time_hours ?? '4.0' }} uur</span> <span class="font-black text-slate-900 mt-0.5 block font-heading">{{ $product->print_time_hours ?? '4.0' }} uur</span>
</div> </div>
<div class="p-3 rounded-2xl bg-slate-50 border border-slate-100"> <div class="p-3.5 rounded-2xl bg-emerald-100 border-2 border-slate-900 text-center">
<span class="text-slate-400 block text-[10px] uppercase font-bold">Laaghoogte</span> <span class="text-slate-600 block text-[10px] uppercase font-black">🔍 Laaghoogte</span>
<span class="font-bold text-slate-800 font-mono mt-0.5 block">0.16 mm</span> <span class="font-black text-slate-900 mt-0.5 block font-heading">0.16 mm</span>
</div> </div>
</div> </div>
<div class="pt-2 flex items-center justify-between text-xs text-slate-500 border-t border-slate-100"> <div class="pt-3 flex flex-col sm:flex-row items-center justify-between text-xs text-slate-700 font-bold border-t-2 border-slate-100 gap-2">
<span class="flex items-center space-x-1.5"> <span class="flex items-center space-x-1.5">
<i data-lucide="check" class="w-3.5 h-3.5 text-emerald-500"></i> <span>✨</span>
<span>Gekalibreerd op Bambu Lab X1 Carbon</span> <span>Geprint op hypermoderne Bambu Lab 3D printers</span>
</span> </span>
<span class="flex items-center space-x-1.5"> <span class="flex items-center space-x-1.5">
<i data-lucide="check" class="w-3.5 h-3.5 text-emerald-500"></i> <span>🧼</span>
<span>Handmatig nagekeken & ontbraamd</span> <span>Handmatig nagekeken en ontbraamd</span>
</span> </span>
</div> </div>
</div> </div>
<!-- Productomschrijving --> <!-- Productomschrijving -->
<div class="p-6 rounded-3xl bg-white border border-slate-200 shadow-2xs space-y-3"> <div class="p-6 rounded-3xl bg-white border-2 border-slate-900 toy-shadow space-y-3">
<h3 class="text-sm font-bold text-slate-900">Over dit product</h3> <h3 class="font-heading text-base font-black text-slate-900 flex items-center space-x-2">
<div class="text-xs text-slate-600 leading-relaxed space-y-2"> <span>📝</span>
<span>Over dit product</span>
</h3>
<div class="text-xs text-slate-700 leading-relaxed space-y-2 font-medium">
{!! nl2br($product->description) !!} {!! nl2br($product->description) !!}
</div> </div>
</div> </div>
@if($product->makerworld_id) @if($product->makerworld_id)
<!-- MakerWorld Model Attributie --> <!-- MakerWorld Model Attributie -->
<div class="p-4 rounded-2xl bg-indigo-50/50 border border-indigo-100/80 text-xs text-slate-600 flex items-center justify-between"> <div class="p-4 rounded-2xl bg-sky-100 border-2 border-slate-900 toy-shadow-sm text-xs text-slate-800 flex items-center justify-between font-bold">
<div class="flex items-center space-x-2"> <div class="flex items-center space-x-2">
<span class="px-2 py-0.5 rounded bg-indigo-100 text-indigo-700 font-bold text-[10px]">MakerWorld Model</span> <span class="px-2.5 py-1 rounded-xl bg-white border border-slate-900 text-indigo-700 font-black text-[10px]">MakerWorld 3D</span>
<span>Ontworpen door <strong class="text-slate-800">{{ $product->makerworld_author ?? 'MakerWorld Creator' }}</strong></span> <span>Gemaakt door <strong>{{ $product->makerworld_author ?? 'MakerWorld Maker' }}</strong></span>
</div> </div>
<a href="{{ $product->makerworld_url ?? 'https://makerworld.com/nl/models/' . $product->makerworld_id }}" target="_blank" class="text-indigo-600 hover:text-indigo-800 font-semibold inline-flex items-center space-x-1"> <a href="{{ $product->makerworld_url ?? 'https://makerworld.com/nl/models/' . $product->makerworld_id }}" target="_blank" class="text-indigo-700 hover:text-indigo-900 underline inline-flex items-center space-x-1">
<span>Bronbekijken</span> <span>Origineel bekijken</span>
<i data-lucide="external-link" class="w-3 h-3"></i> <i data-lucide="external-link" class="w-3 h-3"></i>
</a> </a>
</div> </div>
@endif @endif
</div> </div>
<!-- Rechterkant: Interactive 3D Configurator & Bestelmodule --> <!-- Rechterkant: Interactive 3D Workshop / Configurator -->
<div class="lg:col-span-6 space-y-6"> <div class="lg:col-span-6 space-y-6">
<div class="p-7 rounded-3xl bg-white border border-slate-200 shadow-md space-y-6"> <div class="p-8 rounded-3xl bg-white border-3 border-slate-900 toy-shadow-lg space-y-6">
<div> <div>
@if($product->category) @if($product->category)
<span class="text-xs font-bold uppercase tracking-wider text-indigo-600 block mb-1"> <span class="inline-block px-3 py-1 rounded-full bg-amber-300 border-2 border-slate-900 text-[11px] font-black text-slate-950 mb-2 toy-shadow-sm">
{{ $product->category->name }} {{ $product->category->name }}
</span> </span>
@endif @endif
<h1 class="text-2xl sm:text-3xl font-black text-slate-900 tracking-tight">{{ $product->name }}</h1> <h1 class="font-heading text-2xl sm:text-3xl font-black text-slate-900 tracking-tight">{{ $product->name }}</h1>
<p class="text-xs text-slate-500 mt-2 leading-relaxed">{{ $product->short_description }}</p> <p class="text-xs font-bold text-slate-600 mt-2 leading-relaxed">{{ $product->short_description }}</p>
</div> </div>
<!-- Live Prijs Display --> <!-- Live Prijs Display (Speelse Candy Box) -->
<div class="p-4 rounded-2xl bg-indigo-50/60 border border-indigo-100 flex items-center justify-between"> <div class="p-4 rounded-2xl bg-amber-100 border-2 border-slate-900 toy-shadow-sm flex items-center justify-between">
<div> <div>
<span class="text-[11px] text-slate-500 block font-medium">Berekende stukprijs</span> <span class="text-[11px] text-slate-700 block font-black uppercase">Jouw stukprijs</span>
<div class="flex items-baseline space-x-2"> <div class="flex items-baseline space-x-2">
<span class="text-2xl font-black text-indigo-600 font-mono">€ <span x-text="unitPriceFormatted"></span></span> <span class="font-heading text-3xl font-black text-slate-900">€ <span x-text="unitPriceFormatted"></span></span>
<span class="text-xs text-slate-400 font-normal">incl. btw</span> <span class="text-xs text-slate-600 font-bold">incl. btw</span>
</div> </div>
</div> </div>
<div class="text-right"> <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-3 py-1.5 rounded-full bg-emerald-300 border-2 border-slate-900 text-slate-950 text-xs font-black inline-flex items-center space-x-1.5 toy-shadow-sm">
<span class="w-1.5 h-1.5 rounded-full bg-emerald-500"></span> <span>🚀</span>
<span>Direct op voorraad / Print-klaar</span> <span>Direct Print-klaar</span>
</span> </span>
</div> </div>
</div> </div>
@@ -180,8 +184,11 @@
<!-- 1. Materiaal Keuze --> <!-- 1. Materiaal Keuze -->
<div> <div>
<div class="flex items-center justify-between mb-2"> <div class="flex items-center justify-between mb-2">
<label class="text-xs font-bold text-slate-800 uppercase tracking-wider">1. Kies Filament / Materiaal</label> <label class="text-xs font-black text-slate-900 uppercase tracking-wider flex items-center space-x-1.5">
<span class="text-xs font-mono font-bold text-indigo-600" x-text="selectedMaterial.toUpperCase()"></span> <span>1️⃣</span>
<span>Kies Materiaal / Filament</span>
</label>
<span class="text-xs font-black text-indigo-700 bg-indigo-50 px-2 py-0.5 rounded-lg border border-indigo-200" x-text="selectedMaterial.toUpperCase()"></span>
</div> </div>
<div class="grid grid-cols-2 sm:grid-cols-3 gap-2.5"> <div class="grid grid-cols-2 sm:grid-cols-3 gap-2.5">
@foreach($product->available_materials ?? ['pla'] as $matCode) @foreach($product->available_materials ?? ['pla'] as $matCode)
@@ -190,40 +197,43 @@
<button <button
type="button" type="button"
@click="selectedMaterial = '{{ $mat->code }}'" @click="selectedMaterial = '{{ $mat->code }}'"
:class="selectedMaterial === '{{ $mat->code }}' ? 'border-indigo-600 bg-indigo-50/50 ring-2 ring-indigo-500/20 text-indigo-950' : 'border-slate-200 bg-white text-slate-700 hover:bg-slate-50'" :class="selectedMaterial === '{{ $mat->code }}' ? 'border-slate-900 bg-amber-300 toy-shadow-sm font-black' : 'border-slate-200 bg-white hover:bg-slate-50 font-bold'"
class="p-3 rounded-2xl border text-left transition flex flex-col justify-between cursor-pointer" class="p-3 rounded-2xl border-2 text-left transition flex flex-col justify-between cursor-pointer"
> >
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span class="font-bold text-xs">{{ $mat->name }}</span> <span class="text-xs text-slate-900">{{ $mat->name }}</span>
@if($mat->price_multiplier > 1.0) @if($mat->price_multiplier > 1.0)
<span class="text-[10px] font-mono px-1.5 py-0.5 rounded bg-slate-100 text-slate-600 font-bold">+{{ round(($mat->price_multiplier - 1) * 100) }}%</span> <span class="text-[10px] px-1.5 py-0.5 rounded bg-white border border-slate-900 text-slate-900 font-black">+{{ round(($mat->price_multiplier - 1) * 100) }}%</span>
@endif @endif
</div> </div>
<p class="text-[10px] text-slate-500 mt-1 line-clamp-1">{{ $mat->description }}</p> <p class="text-[10px] text-slate-600 mt-1 line-clamp-1">{{ $mat->description }}</p>
</button> </button>
@endif @endif
@endforeach @endforeach
</div> </div>
</div> </div>
<!-- 2. Kleur Selectie (Swatches) --> <!-- 2. Kleur Selectie (Swatches met vrolijke rand) -->
<div> <div>
<div class="flex items-center justify-between mb-2"> <div class="flex items-center justify-between mb-2">
<label class="text-xs font-bold text-slate-800 uppercase tracking-wider">2. Kies Printkleur</label> <label class="text-xs font-black text-slate-900 uppercase tracking-wider flex items-center space-x-1.5">
<span class="text-xs font-bold text-slate-800" x-text="selectedColor"></span> <span>2️⃣</span>
<span>Kies Jouw Lievelingskleur</span>
</label>
<span class="text-xs font-black text-rose-600 bg-rose-50 px-2.5 py-0.5 rounded-lg border border-rose-200" x-text="selectedColor"></span>
</div> </div>
<div class="flex flex-wrap gap-2.5"> <div class="flex flex-wrap gap-2.5">
@foreach($allColors as $c) @foreach($allColors as $c)
<button <button
type="button" type="button"
@click="selectedColor = '{{ $c->name }}'" @click="selectedColor = '{{ $c->name }}'"
:class="selectedColor === '{{ $c->name }}' ? 'ring-2 ring-indigo-600 ring-offset-2 scale-105' : 'hover:scale-105 border-slate-300'" :class="selectedColor === '{{ $c->name }}' ? 'ring-4 ring-amber-400 scale-110' : 'hover:scale-105 border-slate-900'"
class="w-8 h-8 rounded-full border shadow-xs transition flex items-center justify-center cursor-pointer relative group" class="w-9 h-9 rounded-2xl border-2 shadow-xs transition flex items-center justify-center cursor-pointer relative"
style="background-color: {{ $c->hex }};" style="background-color: {{ $c->hex }};"
title="{{ $c->name }}" title="{{ $c->name }}"
> >
<template x-if="selectedColor === '{{ $c->name }}'"> <template x-if="selectedColor === '{{ $c->name }}'">
<i data-lucide="check" class="w-4 h-4 {{ in_array($c->name, ['Sneeuwwit', 'Galaxy Grijs']) ? 'text-slate-900' : 'text-white' }} stroke-[3]"></i> <i data-lucide="check" class="w-4 h-4 {{ in_array($c->name, ['Sneeuwwit', 'Galaxy Grijs', 'Zon Geel']) ? 'text-slate-950' : 'text-white' }} stroke-[3]"></i>
</template> </template>
</button> </button>
@endforeach @endforeach
@@ -233,31 +243,34 @@
<!-- 3. Formaat & Schaal --> <!-- 3. Formaat & Schaal -->
<div> <div>
<div class="flex items-center justify-between mb-2"> <div class="flex items-center justify-between mb-2">
<label class="text-xs font-bold text-slate-800 uppercase tracking-wider">3. Schaal / Grootte</label> <label class="text-xs font-black text-slate-900 uppercase tracking-wider flex items-center space-x-1.5">
<span class="text-xs font-mono font-bold text-slate-700" x-text="selectedScale"></span> <span>3️⃣</span>
<span>Grootte / Schaal</span>
</label>
<span class="text-xs font-black text-slate-800" x-text="selectedScale"></span>
</div> </div>
<div class="grid grid-cols-3 gap-2 text-xs"> <div class="grid grid-cols-3 gap-2 text-xs">
<button <button
type="button" type="button"
@click="selectedScale = '100%'" @click="selectedScale = '100%'"
:class="selectedScale === '100%' ? 'border-indigo-600 bg-indigo-50 font-bold text-indigo-900' : 'border-slate-200 text-slate-600 hover:bg-slate-50'" :class="selectedScale === '100%' ? 'border-slate-900 bg-sky-200 toy-shadow-sm font-black' : 'border-slate-200 font-bold hover:bg-slate-50'"
class="p-2.5 rounded-xl border text-center transition cursor-pointer" class="p-3 rounded-2xl border-2 text-center transition cursor-pointer"
> >
<span>100% (Normaal)</span> <span>100% (Normaal)</span>
</button> </button>
<button <button
type="button" type="button"
@click="selectedScale = '150%'" @click="selectedScale = '150%'"
:class="selectedScale === '150%' ? 'border-indigo-600 bg-indigo-50 font-bold text-indigo-900' : 'border-slate-200 text-slate-600 hover:bg-slate-50'" :class="selectedScale === '150%' ? 'border-slate-900 bg-sky-200 toy-shadow-sm font-black' : 'border-slate-200 font-bold hover:bg-slate-50'"
class="p-2.5 rounded-xl border text-center transition cursor-pointer" class="p-3 rounded-2xl border-2 text-center transition cursor-pointer"
> >
<span>150% (+45%)</span> <span>150% (+45%)</span>
</button> </button>
<button <button
type="button" type="button"
@click="selectedScale = '200%'" @click="selectedScale = '200%'"
:class="selectedScale === '200%' ? 'border-indigo-600 bg-indigo-50 font-bold text-indigo-900' : 'border-slate-200 text-slate-600 hover:bg-slate-50'" :class="selectedScale === '200%' ? 'border-slate-900 bg-sky-200 toy-shadow-sm font-black' : 'border-slate-200 font-bold hover:bg-slate-50'"
class="p-2.5 rounded-xl border text-center transition cursor-pointer" class="p-3 rounded-2xl border-2 text-center transition cursor-pointer"
> >
<span>200% (+95%)</span> <span>200% (+95%)</span>
</button> </button>
@@ -265,29 +278,31 @@
</div> </div>
<!-- Aantal en Toevoegen Knop --> <!-- Aantal en Toevoegen Knop -->
<div class="pt-4 border-t border-slate-100 space-y-4"> <div class="pt-4 border-t-2 border-slate-200 space-y-4">
<div class="flex items-center space-x-3"> <div class="flex items-center space-x-3">
<div class="flex items-center border border-slate-200 rounded-2xl bg-slate-50 overflow-hidden"> <!-- Chunky Toy Stepper -->
<button type="button" @click="if (quantity > 1) quantity--" class="px-3.5 py-3 hover:bg-slate-200 transition text-slate-600 font-bold cursor-pointer">-</button> <div class="flex items-center border-2 border-slate-900 rounded-2xl bg-[#FFFDF7] toy-shadow-sm overflow-hidden">
<span class="px-4 py-3 font-mono font-bold text-xs text-slate-900" x-text="quantity"></span> <button type="button" @click="if (quantity > 1) quantity--" class="px-4 py-3 hover:bg-amber-100 transition text-slate-900 font-black cursor-pointer text-sm">-</button>
<button type="button" @click="if (quantity < 50) quantity++" class="px-3.5 py-3 hover:bg-slate-200 transition text-slate-600 font-bold cursor-pointer">+</button> <span class="px-4 py-3 font-heading font-black text-sm text-slate-900" x-text="quantity"></span>
<button type="button" @click="if (quantity < 50) quantity++" class="px-4 py-3 hover:bg-amber-100 transition text-slate-900 font-black cursor-pointer text-sm">+</button>
</div> </div>
<button type="submit" class="flex-1 py-3.5 px-6 rounded-2xl bg-indigo-600 hover:bg-indigo-500 text-white font-bold text-sm transition shadow-lg shadow-indigo-600/25 flex items-center justify-center space-x-2 cursor-pointer"> <!-- Chunky Add to Cart CTA -->
<i data-lucide="shopping-bag" class="w-4 h-4"></i> <button type="submit" class="toy-btn flex-1 py-4 px-6 rounded-2xl bg-amber-400 hover:bg-amber-300 border-2 border-slate-900 toy-shadow text-slate-950 font-black text-sm transition flex items-center justify-center space-x-2 cursor-pointer">
<span>🛒</span>
<span>In Winkelwagen • € <span x-text="calculatedPrice"></span></span> <span>In Winkelwagen • € <span x-text="calculatedPrice"></span></span>
</button> </button>
</div> </div>
<div class="flex items-center justify-center space-x-4 text-[11px] text-slate-500 pt-1"> <div class="flex items-center justify-center space-x-4 text-xs font-bold text-slate-600 pt-1">
<span class="flex items-center space-x-1"> <span class="flex items-center space-x-1">
<i data-lucide="truck" class="w-3.5 h-3.5 text-slate-400"></i> <span>🚚</span>
<span>Gratis verzending vanaf € 50,-</span> <span>Gratis verzending vanaf € 50,-</span>
</span> </span>
<span>•</span> <span>•</span>
<span class="flex items-center space-x-1"> <span class="flex items-center space-x-1">
<i data-lucide="rotate-ccw" class="w-3.5 h-3.5 text-slate-400"></i> <span>📦</span>
<span>14 dagen bedenktijd</span> <span>PostNL Track & Trace</span>
</span> </span>
</div> </div>
</div> </div>
@@ -300,4 +315,3 @@
</div> </div>
</div> </div>
@endsection @endsection