feat: Production-ready configurator with Dutch standards, pricing & visual UI

- Update door-models.ts: 7mm VSG 33.1 safety glass, 15mm offset, Taats pivot 60mm
- Add pricing engine (lib/pricing.ts): steel €45/m + glass €140/m² + €650 base
- Wire reactive pricing into Zustand store on every config change
- Fix 3D materials: glass thickness 0.007m, corrected roughness/metalness
- Upgrade scene: apartment environment, wider contact shadows
- Add Dutch height presets: Renovatie 2015mm, Nieuwbouw 2315mm, Plafondhoog 2500mm
- Replace text buttons with visual SVG tiles for door type & grid selection

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Ubuntu
2026-02-14 01:11:55 +00:00
parent 9319750912
commit 87be70e78b
7 changed files with 349 additions and 83 deletions

View File

@@ -150,6 +150,44 @@ export function StepDimensions() {
/>
</div>
{/* Height Presets - Dutch Market Standards */}
<div>
<Label className="text-base font-bold text-[#1A2E2E]">
Standaard Hoogtes
</Label>
<p className="mb-3 text-sm text-gray-600">
Kies een standaard hoogte of stel handmatig in.
</p>
<div className="grid grid-cols-3 gap-2">
{[
{ label: 'Renovatie', value: 2015, desc: '201.5 cm' },
{ label: 'Nieuwbouw', value: 2315, desc: '231.5 cm' },
{ label: 'Plafondhoog', value: 2500, desc: '250+ cm' },
].map((preset) => {
const isActive = height === preset.value;
return (
<button
key={preset.value}
type="button"
onClick={() => setHeight(preset.value)}
className={`rounded-lg border-2 px-3 py-2.5 text-center transition-all ${
isActive
? 'border-[#C4D668] bg-[#1A2E2E] text-white shadow-md'
: 'border-gray-200 bg-white text-gray-700 hover:border-[#1A2E2E]/30 hover:shadow-sm'
}`}
>
<span className="block text-xs font-bold uppercase tracking-wide">
{preset.label}
</span>
<span className={`block font-mono text-sm ${isActive ? 'text-[#C4D668]' : 'text-gray-500'}`}>
{preset.desc}
</span>
</button>
);
})}
</div>
</div>
{/* Height Control */}
<div>
<div className="mb-4 flex items-end justify-between">