ProcessSection.vue 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <template>
  2. <section id="process" class="py-12 sm:py-24 relative overflow-hidden bg-card/30 scroll-mt-24">
  3. <div class="container mx-auto px-4">
  4. <div class="text-center mb-10 sm:mb-16 animate-slide-up">
  5. <span class="text-primary font-display text-sm tracking-widest uppercase">{{ t("nav.howItWorks") }}</span>
  6. <h2 class="font-display text-3xl sm:text-4xl lg:text-5xl font-bold mt-4 mb-6">
  7. {{ t("hero.title") }} <span class="text-gradient">{{ t("hero.titleGradient") }}</span>
  8. </h2>
  9. <p class="text-muted-foreground max-w-2xl mx-auto">{{ t("hero.description") }}</p>
  10. </div>
  11. <div class="grid md:grid-cols-2 lg:grid-cols-4 gap-8">
  12. <div v-for="(step, index) in steps" :key="step.step" class="relative group">
  13. <!-- Connector -->
  14. <div v-if="index < steps.length - 1" class="hidden lg:block absolute top-10 left-[60%] w-full h-0.5 bg-gradient-to-r from-primary/30 to-transparent z-0" />
  15. <div class="relative z-10 text-center flex flex-col items-center">
  16. <div class="relative inline-block mb-4 sm:mb-6">
  17. <div class="w-20 h-20 bg-secondary rounded-2xl flex items-center justify-center border border-border/50 group-hover:border-primary/50 transition-all duration-500 group-hover:bg-primary/5 group-hover:rotate-6">
  18. <component :is="step.icon" class="w-8 h-8 text-primary transition-transform group-hover:scale-110" />
  19. </div>
  20. <span class="absolute -top-2 -right-2 w-8 h-8 bg-primary text-primary-foreground font-display font-bold text-sm rounded-lg flex items-center justify-center shadow-glow">
  21. {{ step.step }}
  22. </span>
  23. </div>
  24. <h3 class="font-display text-lg font-semibold max-w-[200px] leading-snug">{{ step.title }}</h3>
  25. <div v-if="index < steps.length - 1" class="lg:hidden mt-4 text-primary/30 rotate-90">
  26. <ArrowRight class="w-6 h-6" />
  27. </div>
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. </section>
  33. </template>
  34. <script setup lang="ts">
  35. import { computed } from "vue";
  36. import { useI18n } from "vue-i18n";
  37. import { Send, Sparkles, Package, CreditCard, ArrowRight } from "lucide-vue-next";
  38. const { t } = useI18n();
  39. const steps = computed(() => [
  40. { icon: Send, step: "01", title: t("pricing.trustSteps.step1") },
  41. { icon: Sparkles, step: "02", title: t("pricing.trustSteps.step2") },
  42. { icon: Package, step: "03", title: t("pricing.trustSteps.step3") },
  43. { icon: CreditCard, step: "04", title: t("pricing.trustSteps.step4") },
  44. ]);
  45. </script>