feat(content): deepen Bain differentiation across product, solution and service pages

- Replace decorative numbering and side-stripe borders with structured copy
- Add scenario positioning, capability metrics and verifiable dimensions
- Refine service timelines, deliverables and case-study narratives
- Update content constants to support CMS seeding
This commit is contained in:
张翔
2026-07-08 14:46:51 +08:00
parent f4b98fb730
commit 7f36211342
22 changed files with 601 additions and 497 deletions
+10 -22
View File
@@ -2,7 +2,7 @@
import { motion } from 'framer-motion';
import { ScrollReveal, StaggerReveal } from '@/components/ui/scroll-reveal';
import { SectionLabel, EASE_OUT } from '@/components/ui/page-decoration';
import { EASE_OUT } from '@/components/ui/page-decoration';
import { CheckCircle2, ChevronDown } from 'lucide-react';
import { cn } from '@/lib/utils';
import { useState } from 'react';
@@ -30,7 +30,6 @@ export function MethodologyFramework({
<section className="relative py-20 sm:py-28 md:py-32 lg:py-40 overflow-hidden bg-bg-primary">
<div className="max-w-container mx-auto px-4 sm:px-6 lg:px-10">
<ScrollReveal className="mb-16 sm:mb-20 max-w-3xl">
<SectionLabel>Methodology</SectionLabel>
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold text-ink tracking-tight leading-tight mb-6">
{title}
</h2>
@@ -53,13 +52,11 @@ export function MethodologyFramework({
transition={{ duration: 0.6, delay: index * 0.08, ease: EASE_OUT }}
>
<div className="flex gap-6 lg:gap-10">
<div className="flex flex-col items-center">
<div className="flex flex-col items-center pt-2">
<div
className="w-12 h-12 rounded-xl flex items-center justify-center text-white font-bold text-lg shrink-0"
className="w-3 h-3 rounded-full shrink-0"
style={{ backgroundColor: accentColor }}
>
{String(index + 1).padStart(2, '0')}
</div>
/>
{index < layers.length - 1 && (
<div className="w-px flex-1 bg-gradient-to-b from-border-primary to-transparent mt-3" />
)}
@@ -109,7 +106,6 @@ export function TechStackShowcase({ title, subtitle, categories }: TechStackShow
<section className="relative py-20 sm:py-28 md:py-32 lg:py-40 overflow-hidden bg-bg-secondary">
<div className="max-w-container mx-auto px-4 sm:px-6 lg:px-10">
<ScrollReveal className="mb-16 sm:mb-20 max-w-3xl">
<SectionLabel>Tech Stack</SectionLabel>
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold text-ink tracking-tight leading-tight mb-6">
{title}
</h2>
@@ -125,9 +121,8 @@ export function TechStackShowcase({ title, subtitle, categories }: TechStackShow
{categories.map((category, index) => (
<div
key={index}
className="group relative p-8 border border-border-primary bg-bg-primary hover:border-border-secondary hover:bg-bg-secondary transition-all duration-500"
className="group relative p-8 border border-border-primary bg-bg-primary hover:border-border-secondary hover:bg-bg-secondary hover:shadow-lg hover:-translate-y-1 transition-all duration-500"
>
<div className="absolute top-0 left-0 h-1 w-0 group-hover:w-full transition-all duration-700 bg-brand" />
<h3 className="text-lg font-bold text-text-primary mb-5">{category.name}</h3>
<div className="flex flex-wrap gap-2">
{category.items.map((item, i) => (
@@ -173,7 +168,6 @@ export function DeliveryTimeline({
<section className="relative py-20 sm:py-28 md:py-32 lg:py-40 overflow-hidden bg-bg-primary">
<div className="max-w-container mx-auto px-4 sm:px-6 lg:px-10">
<ScrollReveal className="mb-16 sm:mb-20 max-w-3xl">
<SectionLabel>Delivery Process</SectionLabel>
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold text-ink tracking-tight leading-tight mb-6">
{title}
</h2>
@@ -206,11 +200,8 @@ export function DeliveryTimeline({
index % 2 === 0 ? 'lg:ml-12' : 'lg:mr-12'
)}>
<div className="flex items-center justify-between mb-4">
<span
className="text-xs font-bold tracking-[0.2em] uppercase"
style={{ color: accentColor }}
>
{step.phase}
<span className="text-xs font-bold text-text-muted">
{`${index + 1} 阶段:${step.phase}`}
</span>
<span className="text-sm text-text-muted">
{step.duration}
@@ -221,8 +212,8 @@ export function DeliveryTimeline({
{step.description}
</p>
<div className="pt-5 border-t border-border-primary">
<div className="text-xs text-text-muted mb-3 font-medium uppercase tracking-wider">
<div className="text-xs text-text-muted mb-3 font-medium">
</div>
<div className="flex flex-wrap gap-2">
{step.deliverables.map((deliverable, i) => (
@@ -266,7 +257,6 @@ export function FAQSection({ title, subtitle, items }: FAQSectionProps) {
<div className="max-w-container mx-auto px-4 sm:px-6 lg:px-10">
<div className="grid lg:grid-cols-12 gap-12 lg:gap-20">
<ScrollReveal className="lg:col-span-4">
<SectionLabel>FAQ</SectionLabel>
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold text-ink tracking-tight leading-tight mb-6">
{title}
</h2>
@@ -341,7 +331,6 @@ export function DataProofSection({ title, subtitle, metrics }: DataProofSectionP
<section className="relative py-20 sm:py-28 md:py-32 lg:py-40 overflow-hidden bg-bg-primary">
<div className="max-w-container mx-auto px-4 sm:px-6 lg:px-10">
<ScrollReveal className="mb-16 sm:mb-20 max-w-3xl">
<SectionLabel>Proven Results</SectionLabel>
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold text-ink tracking-tight leading-tight mb-6">
{title}
</h2>
@@ -357,9 +346,8 @@ export function DataProofSection({ title, subtitle, metrics }: DataProofSectionP
{metrics.map((metric, index) => (
<div
key={index}
className="group relative p-10 lg:p-12 bg-bg-secondary hover:bg-bg-secondary transition-all duration-500"
className="group relative p-10 lg:p-12 bg-bg-secondary hover:bg-bg-secondary hover:shadow-lg transition-all duration-500"
>
<div className="absolute top-0 left-0 h-1 w-0 group-hover:w-full transition-all duration-700 bg-brand" />
<div className="relative z-10">
<div className="text-5xl lg:text-6xl font-bold tracking-tighter mb-4">
<span className="text-text-primary">{metric.value}</span>