Files
fuel-price/resources/js/components/landing/StatsRow.vue
Ovidiu U d822b77fb0
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
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
2026-04-20 20:27:02 +01:00

29 lines
960 B
Vue

<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>