feat: redesign homepage with responsive hero, verdict card preview, and modular landing components
- Extract LandingNav, LiveTicker, StatsRow, VerdictCard, and HeroSearch into reusable landing components - Implement responsive two-layout strategy: mobile stacked (hero search + verdict card + CTA) vs desktop inline pill input with verdict card sidebar - Add serif/mono font tokens and live-dot pulse animation to CSS - Move verdict card above search input on mobile, to right sidebar on desktop - Replace hero "fill up now" mockup with dynamic VerdictCard showing top stations, pricing, and recommendation - Simplify navigation with uppercase tracking, add Fleet anchor, and gate CTA by auth state - Lazy-load LeafletMap with defineAsyncComponent to reduce initial bundle - Relocate SearchBar below hero on search attempt for persistent filter UI - Add meta description for SEO
This commit is contained in:
28
resources/js/components/landing/StatsRow.vue
Normal file
28
resources/js/components/landing/StatsRow.vue
Normal file
@@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<dl class="hidden md:flex items-center gap-8 divide-x divide-zinc-300">
|
||||
<div v-for="(stat, idx) in stats" :key="stat.label" :class="idx === 0 ? '' : 'pl-8'">
|
||||
<dt class="sr-only">{{ stat.label }}</dt>
|
||||
<dd>
|
||||
<span class="block font-serif text-2xl text-zinc-900 leading-none">{{ stat.value }}</span>
|
||||
<span class="block font-mono text-[11px] uppercase tracking-widest text-zinc-500 mt-1.5">{{ stat.label }}</span>
|
||||
</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
stationCount: { type: Number, default: null },
|
||||
})
|
||||
|
||||
const stats = computed(() => [
|
||||
{
|
||||
value: props.stationCount ? props.stationCount.toLocaleString('en-GB') : '11,482',
|
||||
label: 'Stations tracked',
|
||||
},
|
||||
{ value: '£273', label: 'Median saving / yr' },
|
||||
{ value: '84%', label: 'Forecast accuracy' },
|
||||
])
|
||||
</script>
|
||||
Reference in New Issue
Block a user