Новые изменения

This commit is contained in:
Web-serfer 2026-04-08 21:11:36 +05:00
parent 32bcc76021
commit c39b0c0821
9 changed files with 512 additions and 362 deletions

View file

@ -1,5 +1,6 @@
---
import Button from '@components/base/Button.astro';
import Pagination from '@components/base/Pagination.astro';
import CTA from '@components/base/CTA.astro';
interface Case {
id: number;
@ -96,8 +97,25 @@ const {
sum: "280 000 ₽",
href: "/cases/casco-damage-claim"
}
] as Case[]
} = Astro.props;
] as Case[],
currentPage = 1,
casesPerPage = 4,
baseUrl = "/cases"
} = Astro.props as {
sectionSubtitle?: string;
sectionTitle?: string;
sectionDescription?: string;
filterLabel?: string;
cases?: Case[];
currentPage?: number;
casesPerPage?: number;
baseUrl?: string;
};
const totalPages = Math.ceil(cases.length / casesPerPage);
const startIndex = (currentPage - 1) * casesPerPage;
const endIndex = startIndex + casesPerPage;
const paginatedCases = cases.slice(startIndex, endIndex);
// Получаем уникальные категории
const categories = ["Все", ...Array.from(new Set(cases.map((c: Case) => c.category)))];
@ -130,7 +148,7 @@ const categories = ["Все", ...Array.from(new Set(cases.map((c: Case) => c.cat
<!-- Список кейсов -->
<div class="cases-list">
{cases.map((caseItem: Case, index: number) => (
{paginatedCases.map((caseItem: Case, index: number) => (
<article class="case-card animate-on-scroll" data-animation="slide-up" data-delay={index * 100 + 300} data-category={caseItem.category}>
<div class="case-card__inner">
<!-- Верхняя часть -->
@ -204,19 +222,22 @@ const categories = ["Все", ...Array.from(new Set(cases.map((c: Case) => c.cat
))}
</div>
<!-- Пагинация -->
{totalPages > 1 && (
<Pagination
currentPage={currentPage}
totalPages={totalPages}
baseUrl={baseUrl}
/>
)}
<!-- CTA -->
<div class="cases-cta animate-on-scroll" data-animation="fade-up" data-delay="800">
<div class="cases-cta__icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
</svg>
</div>
<h3 class="cases-cta__title">Нужна помощь с похожей ситуацией?</h3>
<p class="cases-cta__desc">Расскажите о вашей проблеме — мы найдём решение. Первая консультация бесплатно.</p>
<Button variant="gold" size="lg" href="#contact">
Получить консультацию
</Button>
</div>
<CTA
icon="help"
title="Нужна помощь с похожей ситуацией?"
description="Расскажите о вашей проблеме — мы найдём решение. Первая консультация бесплатно."
btnText="Получить консультацию"
/>
</div>
</section>
@ -347,7 +368,7 @@ const categories = ["Все", ...Array.from(new Set(cases.map((c: Case) => c.cat
display: flex;
flex-direction: column;
gap: 2.5rem;
margin-bottom: 5rem;
margin-bottom: 3rem;
}
/* --- Карточка кейса --- */
@ -592,72 +613,6 @@ const categories = ["Все", ...Array.from(new Set(cases.map((c: Case) => c.cat
color: var(--color-accent);
}
/* --- CTA --- */
.cases-cta {
text-align: center;
padding: 3.5rem 2.5rem;
background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-light) 100%);
border-radius: 20px;
box-shadow: var(--shadow-xl);
position: relative;
overflow: hidden;
}
.cases-cta::before {
content: '';
position: absolute;
top: -50%;
right: -20%;
width: 60%;
height: 150%;
background: radial-gradient(circle, var(--color-accent-glow) 0%, transparent 70%);
pointer-events: none;
}
.cases-cta__icon {
width: 64px;
height: 64px;
margin: 0 auto 1.5rem;
background: rgba(234, 194, 110, 0.15);
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
color: var(--color-accent);
position: relative;
z-index: 1;
}
.cases-cta__icon svg {
width: 32px;
height: 32px;
}
.cases-cta__title {
font-size: 1.75rem;
font-weight: 700;
color: #ffffff;
margin: 0 0 0.75rem 0;
position: relative;
z-index: 1;
}
.cases-cta__desc {
font-size: 1.05rem;
color: rgba(255, 255, 255, 0.75);
margin: 0 0 2rem 0;
max-width: 600px;
margin-left: auto;
margin-right: auto;
position: relative;
z-index: 1;
}
.cases-cta .btn {
position: relative;
z-index: 1;
}
/* --- Анимации --- */
.animate-on-scroll {
opacity: 0;
@ -736,18 +691,6 @@ const categories = ["Все", ...Array.from(new Set(cases.map((c: Case) => c.cat
align-items: flex-start;
gap: 0.75rem;
}
.cases-cta {
padding: 2.5rem 1.5rem;
}
.cases-cta__title {
font-size: 1.5rem;
}
.cases-cta__desc {
font-size: 0.95rem;
}
}
@media (max-width: 480px) {
@ -781,10 +724,6 @@ const categories = ["Все", ...Array.from(new Set(cases.map((c: Case) => c.cat
flex-direction: column;
gap: 0.75rem;
}
.cases-cta {
padding: 2rem 1.25rem;
}
}
@media (prefers-reduced-motion: reduce) {