diff --git a/frontend/astro.config.mjs b/frontend/astro.config.mjs index bafd80d..514583f 100644 --- a/frontend/astro.config.mjs +++ b/frontend/astro.config.mjs @@ -3,10 +3,11 @@ import { defineConfig } from 'astro/config'; import tailwindcss from '@tailwindcss/vite'; import node from '@astrojs/node'; import mdx from '@astrojs/mdx'; +import icon from "astro-icon"; // https://astro.build/config export default defineConfig({ - integrations: [mdx()], + integrations: [mdx(), icon()], vite: { plugins: [tailwindcss()], }, diff --git a/frontend/package.json b/frontend/package.json index cda554e..9ba10d0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,6 +16,7 @@ "@astrojs/node": "^10.0.4", "@tailwindcss/vite": "^4.2.2", "astro": "^6.0.8", + "astro-icon": "^1.1.5", "tailwindcss": "^4.2.2" }, "devDependencies": { diff --git a/frontend/public/images/faq/faqBg.avif b/frontend/public/images/faq/faqBg.avif new file mode 100644 index 0000000..deddfd4 Binary files /dev/null and b/frontend/public/images/faq/faqBg.avif differ diff --git a/frontend/public/images/faq/faqImg.avif b/frontend/public/images/faq/faqImg.avif new file mode 100644 index 0000000..e3b489b Binary files /dev/null and b/frontend/public/images/faq/faqImg.avif differ diff --git a/frontend/src/components/base/PageHero.astro b/frontend/src/components/base/PageHero.astro index 1191cff..97314c2 100644 --- a/frontend/src/components/base/PageHero.astro +++ b/frontend/src/components/base/PageHero.astro @@ -1,5 +1,6 @@ --- import Button from '@components/base/Button.astro'; +import { Icon } from 'astro-icon/components'; interface PageHeroProps { badgeText: string; @@ -17,6 +18,7 @@ interface PageHeroProps { number: string; text: string; }; + icon?: string; // Название иконки из /src/icons/ } const { @@ -31,7 +33,8 @@ const { layout = "default", sideImage = "", sideImageAlt = "", - experienceBadge + experienceBadge, + icon } = Astro.props as PageHeroProps; const showImage = layout === 'with-image' && sideImage; @@ -43,7 +46,13 @@ const showImage = layout === 'with-image' && sideImage;
- + {icon ? ( + + + + ) : ( + + )} {badgeText}
@@ -207,7 +216,12 @@ const showImage = layout === 'with-image' && sideImage; margin-bottom: 2.5rem; } - /* Мерцающая точка */ + .badge svg { + color: #eac26e; + flex-shrink: 0; + } + + /* Мерцающая точка (только на главной) */ .status-dot { width: 10px; height: 10px; @@ -218,6 +232,19 @@ const showImage = layout === 'with-image' && sideImage; flex-shrink: 0; } + .badge-icon { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } + + .badge-icon svg { + width: 20px !important; + height: 20px !important; + stroke-width: 2 !important; + } + @keyframes pulse { 0% { transform: scale(0.95); diff --git a/frontend/src/components/faq/FaqItem.astro b/frontend/src/components/faq/FaqItem.astro index d26a206..ffa9200 100644 --- a/frontend/src/components/faq/FaqItem.astro +++ b/frontend/src/components/faq/FaqItem.astro @@ -7,6 +7,7 @@ interface FaqItem { const { sectionSubtitle = "ОТВЕТЫ НА ВОПРОСЫ", sectionTitle = "Часто задаваемые вопросы", + showTitle = true, faqItems = [ { question: "Сколько стоит первичная консультация?", @@ -38,18 +39,20 @@ const {
- -
-
-
- {sectionSubtitle} -
+ {showTitle && ( + +
+
+
+ {sectionSubtitle} +
+
+

{sectionTitle}

+

+ Собрали ответы на самые частые вопросы наших клиентов. Не нашли ответ? Позвоните — проконсультируем бесплатно +

-

{sectionTitle}

-

- Собрали ответы на самые частые вопросы наших клиентов. Не нашли ответ? Позвоните — проконсультируем бесплатно -

-
+ )}
diff --git a/frontend/src/icons/briefcase.svg b/frontend/src/icons/briefcase.svg new file mode 100644 index 0000000..8af7e42 --- /dev/null +++ b/frontend/src/icons/briefcase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/icons/chat.svg b/frontend/src/icons/chat.svg new file mode 100644 index 0000000..b670efb --- /dev/null +++ b/frontend/src/icons/chat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/icons/edit.svg b/frontend/src/icons/edit.svg new file mode 100644 index 0000000..9172d6a --- /dev/null +++ b/frontend/src/icons/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/icons/file.svg b/frontend/src/icons/file.svg new file mode 100644 index 0000000..ea4ecc5 --- /dev/null +++ b/frontend/src/icons/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/icons/phone.svg b/frontend/src/icons/phone.svg new file mode 100644 index 0000000..3d4556b --- /dev/null +++ b/frontend/src/icons/phone.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/icons/question.svg b/frontend/src/icons/question.svg new file mode 100644 index 0000000..931411a --- /dev/null +++ b/frontend/src/icons/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/icons/shield.svg b/frontend/src/icons/shield.svg new file mode 100644 index 0000000..9a2cf83 --- /dev/null +++ b/frontend/src/icons/shield.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/pages/blog/index.astro b/frontend/src/pages/blog/index.astro index 10cafe0..9b3c681 100644 --- a/frontend/src/pages/blog/index.astro +++ b/frontend/src/pages/blog/index.astro @@ -57,6 +57,7 @@ const categories = ['Все', ...new Set(posts.map((post: any) => post.data.cate text: "ПОЛЕЗНЫХ СТАТЕЙ" }} bgImage="/images/blog/blogBg.avif" + icon="edit" /> diff --git a/frontend/src/pages/cases.astro b/frontend/src/pages/cases.astro index 46d4500..935f6b3 100644 --- a/frontend/src/pages/cases.astro +++ b/frontend/src/pages/cases.astro @@ -28,6 +28,7 @@ import CasesList from "@components/cases/CasesList.astro"; text: "ВЫИГРАННЫХ ДЕЛ" }} bgImage="/images/cases/casesBg.avif" + icon="briefcase" /> diff --git a/frontend/src/pages/contacts.astro b/frontend/src/pages/contacts.astro index 721d251..218ca6e 100644 --- a/frontend/src/pages/contacts.astro +++ b/frontend/src/pages/contacts.astro @@ -30,6 +30,7 @@ const isAuthorized = false; // Измените на true, чтобы увиде text: "МИНУТ НА СВЯЗИ" }} bgImage="/images/contacts/conBg.avif" + icon="phone" /> diff --git a/frontend/src/pages/documents.astro b/frontend/src/pages/documents.astro index c097264..71e5cec 100644 --- a/frontend/src/pages/documents.astro +++ b/frontend/src/pages/documents.astro @@ -1,6 +1,7 @@ --- import Layout from '@layouts/Layout.astro'; import { SITE_URL } from '@constants'; +import PageHero from '@components/base/PageHero.astro'; import DocCard from '@components/documents/DocCard.astro'; import DocCategories from '@components/documents/DocCategories.astro'; import Pagination from '@components/base/Pagination.astro'; @@ -34,25 +35,17 @@ const categories = getCategories(); { label: 'Документы' } ]} > + +
- -
-
-
- ДОКУМЕНТЫ -
-
-
-

- Документы для скачивания -

-
-

- Здесь вы можете скачать все необходимые документы, договоры, памятки и шаблоны в удобном формате -

-
- @@ -99,12 +92,11 @@ const categories = getCategories(); } .documents-section { - padding: 6rem 1.5rem 4rem; + padding: 2rem 1.5rem 4rem; background: var(--gradient-docs-bg); position: relative; overflow: hidden; font-family: 'Inter', system-ui, -apple-system, sans-serif; - min-height: 100vh; } .documents-section::before { @@ -125,64 +117,6 @@ const categories = getCategories(); z-index: 2; } - /* Заголовок секции */ - .section-header { - margin-bottom: 3rem; - text-align: center; - } - - .subtitle-wrapper { - display: flex; - align-items: center; - justify-content: center; - gap: 1rem; - margin-bottom: 1rem; - } - - .subtitle-line { - width: 40px; - height: 1px; - background: linear-gradient(90deg, transparent, var(--color-accent-docs), transparent); - } - - .subtitle { - color: var(--color-accent-docs); - font-size: 0.75rem; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 4px; - } - - .title-wrapper { - display: flex; - align-items: center; - justify-content: center; - gap: 1.5rem; - margin-bottom: 1rem; - flex-wrap: wrap; - } - - .title { - color: var(--color-light-docs); - font-size: clamp(2rem, 4vw, 3.5rem); - font-weight: 800; - margin: 0; - line-height: 1.2; - letter-spacing: -0.02em; - background: linear-gradient(135deg, #ffffff 0%, #e2e8f0 100%); - -webkit-background-clip: text; - background-clip: text; - color: transparent; - } - - .section-description { - color: var(--color-gray-docs); - font-size: 1.1rem; - max-width: 700px; - margin: 0 auto; - line-height: 1.6; - } - /* Сетка документов */ .documents-grid { display: grid; @@ -191,23 +125,6 @@ const categories = getCategories(); margin-bottom: 3rem; } - /* Анимации при скроллинге */ - .animate-on-scroll { - opacity: 0; - will-change: opacity, transform; - } - - [data-animation="fade-up"] { - transform: translateY(40px); - transition: opacity 0.8s cubic-bezier(0.4, 0, 0.2, 1), - transform 0.8s cubic-bezier(0.4, 0, 0.2, 1); - } - - .animate-on-scroll.is-visible { - opacity: 1; - transform: translateY(0); - } - /* Пагинация */ :global(.pagination) { padding: 2rem 0 4rem; @@ -222,60 +139,16 @@ const categories = getCategories(); @media (max-width: 768px) { .documents-section { - padding: 4rem 1rem 3rem; - } - - .section-header { - margin-bottom: 2.5rem; - } - - .title-wrapper { - flex-direction: column; - gap: 1rem; + padding: 2rem 1rem 3rem; } .documents-grid { grid-template-columns: 1fr; } } - - @media (prefers-reduced-motion: reduce) { - .animate-on-scroll { - opacity: 1; - transform: none; - transition: none; - } - } diff --git a/frontend/src/pages/faq.astro b/frontend/src/pages/faq.astro index e3a57eb..83bfda0 100644 --- a/frontend/src/pages/faq.astro +++ b/frontend/src/pages/faq.astro @@ -1,6 +1,7 @@ --- import Layout from '@layouts/Layout.astro'; import { SITE_URL } from '@constants'; +import PageHero from '@components/base/PageHero.astro'; import Faq from '@components/faq/FaqItem.astro'; import Pagination from '@components/base/Pagination.astro'; @@ -102,11 +103,26 @@ const currentFaqItems = allFaqItems.slice(startIndex, endIndex); { label: 'Частые вопросы' } ]} > + +
{totalPages > 1 && ( diff --git a/frontend/src/pages/reviews.astro b/frontend/src/pages/reviews.astro index 6e552ce..1647606 100644 --- a/frontend/src/pages/reviews.astro +++ b/frontend/src/pages/reviews.astro @@ -42,6 +42,7 @@ const paginatedReviews = reviewsData.slice(startIndex, endIndex); text: "ДОВОЛЬНЫХ КЛИЕНТОВ" }} bgImage="/images/reviews/revBg.avif" + icon="chat" />
diff --git a/frontend/src/pages/services.astro b/frontend/src/pages/services.astro index 236a0e7..5cb09d2 100644 --- a/frontend/src/pages/services.astro +++ b/frontend/src/pages/services.astro @@ -30,6 +30,7 @@ import ServiceCategories from "@components/services/ServiceCategories.astro"; text: "НАПРАВЛЕНИЙ ПРАКТИКИ" }} bgImage="/images/services/servicesBg.avif" + icon="shield" />