This commit is contained in:
Dekart Deploy Bot 2026-07-07 18:04:17 +00:00
parent fe2028819a
commit 6ed9de7c2c
8 changed files with 498 additions and 658 deletions

View File

@ -1855,104 +1855,7 @@ html {
/* swiper END */
/* faq */
.faq-wrapper {
display: flex;
gap: 30px;
}
.camp-faq .box__accordion_label::after {
background-image: none !important;
}
.accordion {
width: 50%;
display: flex;
flex-direction: column;
gap: 10px;
border-top: 1px solid #ccc;
}
.camp-faq .accordion .box__accordion {
position: relative;
cursor: pointer;
border-bottom: 1px solid #ccc;
border-radius: 0;
}
.camp-faq .box__accordion_label {
position: relative;
padding: 20px 0;
cursor: pointer;
display: flex;
align-items: center;
gap: 20px;
justify-content: space-between;
}
.camp-faq .box__accordion_label span {
font-size: clamp(18px, 2.2vw, 22px);
line-height: 1.25;
font-family: var(--font-display);
font-weight: 600;
color: var(--color-text);
}
.box__accordion_label svg {
width: 36px;
height: 36px;
padding: 8px;
border-radius: 50%;
background: var(--color-primary);
stroke: #fff;
transition: background var(--transition-fast);
flex-shrink: 0;
}
.camp-faq .accordion .box__accordion .box__accordion_label {
display: flex;
align-items: center;
justify-content: space-between;
padding-left: 0;
}
.box__accordion_label svg g {
stroke: #fff;
}
.box__accordion_label svg:hover {
background: var(--color-primary-hover);
}
.active .box__accordion_label svg {
rotate: 45deg;
background: var(--color-primary-hover);
}
.box__accordion_label svg:hover g {
stroke: #fff;
}
.camp-faq .box__accordion_content {
display: flex;
position: relative;
overflow: hidden;
max-height: 0;
transition: .3s;
gap: 20px;
align-items: center;
}
.box__accordion_content-text {
display: flex;
flex-direction: column;
gap: 10px;
font-size: 16px;
line-height: 1.6;
color: var(--color-text-muted);
padding-bottom: 20px;
font-family: var(--font-body);
}
/* faq — используется общий стиль .faq-section из main.css */
/* faq END */
/* contact */
.contact-wrapper {
@ -2654,44 +2557,7 @@ html {
font-size: clamp(12px, 1.5vw, 18px);
}
.faq-wrapper {
gap: clamp(20px, 2.5vw, 30px);
}
.accordion {
gap: clamp(6px, .83vw, 10px);
border-top: 1px solid #ccc;
}
.camp-faq .accordion .box__accordion {
border-bottom: 1px solid #ccc;
}
.camp-faq .box__accordion_label {
padding: clamp(13px, 1.67vw, 20px) 0;
gap: clamp(13px, 1.67vw, 20px);
}
.camp-faq .box__accordion_label span {
font-size: clamp(17px, 2.17vw, 26px);
}
.box__accordion_label svg {
width: clamp(26px, 3.33vw, 40px);
height: clamp(26px, 3.33vw, 40px);
padding: clamp(5px, .67vw, 8px);
}
.camp-faq .box__accordion_content {
gap: clamp(13px, 1.67vw, 20px);
}
.box__accordion_content-text {
gap: clamp(6px, .83vw, 10px);
font-size: clamp(12px, 1.5vw, 18px);
padding-bottom: clamp(13px, 1.67vw, 20px);
}
/* faq — используется общий стиль .faq-section из main.css */
.contact-wrapper {
gap: clamp(20px, 2.5vw, 30px);
}
@ -2943,32 +2809,7 @@ html {
left: 10px;
}
.faq-wrapper {
gap: 0;
flex-direction: column;
}
.accordion {
width: 100%;
gap: 0;
}
.accordion-last {
border-top: none;
}
.accordion .box__accordion .box__accordion_label {
padding: 10px 0;
}
.camp-faq .box__accordion_label span {
font-size: 20px;
}
.box__accordion_label svg {
flex-shrink: 0;
}
/* faq — используется общий стиль .faq-section из main.css */
.contact-wrapper {
gap: 20px;
flex-direction: column-reverse;

View File

@ -100,7 +100,7 @@ html {
/* ════════════════════════════════════════════ */
.ds-hero {
position: relative;
padding: 60px 0;
padding: 48px 0;
overflow: hidden;
background: var(--color-bg-dark);
background-image:
@ -11074,3 +11074,145 @@ main {
main > .pksh-section:first-child {
padding-top: 0;
}
/* ============================================================
FAQ SECTION общий стиль для всех страниц
Использовать: class="section-bg faq-section" на section
============================================================ */
.section-bg {
position: relative;
}
.section-bg::before {
content: '';
position: absolute;
top: 0;
bottom: 0;
left: calc(-50vw + 50%);
width: 100vw;
z-index: -1;
}
/* .bento внутри section-bg — растягивается на всю ширину */
.section-bg > .bento {
width: 100%;
}
.faq-section {
padding: 48px 0;
}
.section-bg.faq-section::before {
background: var(--accent-light, #F5F3FF);
}
/* Все не-белые секции на ПКШ — единый фон accent-light на всю ширину */
.page-pksh .section-bg:not(.ds-hero):not(.faq-section)::before {
background: var(--accent-light, #F5F3FF);
}
.faq-section .container {
/* центрирование через стандартный .container */
}
.faq-section__title {
text-align: center;
margin-bottom: 40px;
font-size: clamp(24px, 2.8vw, 32px);
font-weight: 700;
line-height: 1.25;
color: var(--navy, #0F172A);
}
.faq-section__wrapper {
display: flex;
gap: 30px;
}
.faq-section__col {
width: 50%;
display: flex;
flex-direction: column;
border-top: 1px solid var(--slate-200, #E2E8F0);
}
.faq-section .box__accordion {
position: relative;
cursor: pointer;
border-bottom: 1px solid var(--slate-200, #E2E8F0);
border-radius: 0;
}
.faq-section .box__accordion_label {
position: relative;
padding: 20px 0;
cursor: pointer;
display: flex;
align-items: center;
gap: 20px;
justify-content: space-between;
}
.faq-section .box__accordion_label span {
font-size: clamp(17px, 2vw, 21px);
line-height: 1.3;
font-weight: 600;
color: var(--navy, #0F172A);
}
.faq-section .box__accordion_label svg {
width: 36px;
height: 36px;
padding: 8px;
border-radius: 50%;
background: var(--accent, #7C3AED);
stroke: #fff;
transition: background 0.2s, rotate 0.25s ease;
flex-shrink: 0;
}
.faq-section .box__accordion_label svg g {
stroke: #fff !important;
}
.faq-section .active .box__accordion_label svg {
rotate: 45deg;
background: var(--accent-hover, #6D28D9);
}
.faq-section .box__accordion_content {
display: flex;
position: relative;
overflow: hidden;
max-height: 0;
transition: max-height 0.3s ease;
gap: 20px;
align-items: center;
}
.faq-section .box__accordion_content-text {
display: flex;
flex-direction: column;
gap: 10px;
font-size: 16px;
line-height: 1.6;
color: var(--slate-600, #475569);
padding-bottom: 20px;
}
.faq-section .box__accordion_content-text p {
margin: 0;
}
@media (max-width: 768px) {
.faq-section__wrapper {
flex-direction: column;
gap: 0;
}
.faq-section__col {
width: 100%;
border-top: none;
}
.faq-section__col:first-child {
border-top: 1px solid var(--slate-200, #E2E8F0);
}
}

View File

@ -22,6 +22,7 @@
.page-pksh {
overflow-x: clip;
gap: 0; /* override main's flex gap: 70px — we control spacing via section padding */
background: var(--accent-light, #F5F3FF);
}
/* ─── DS Hero heading override — long text smaller on desktop ─── */
@ -98,7 +99,7 @@ background: rgba(124, 58, 237, 0.2);
}
.bento-label--light {
color: rgba(255,255,255,0.8);
color: #F59E0B;
}
.bento-h2 {
@ -113,7 +114,9 @@ background: rgba(124, 58, 237, 0.2);
color: #fff;
}
.bento-p {
.bento-p--light {
color: rgba(255,255,255,0.65);
}
font-size: 1rem;
line-height: 1.6;
color: var(--slate-600);
@ -238,19 +241,36 @@ background: rgba(124, 58, 237, 0.2);
.results-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
gap: 0;
margin-top: 8px;
}
@media (min-width: 640px) {
.results-grid {
grid-template-columns: repeat(4, 1fr);
gap: 24px;
gap: 0;
}
}
.result-item {
text-align: center;
padding: 16px 12px;
position: relative;
}
@media (min-width: 640px) {
.result-item {
padding: 20px 16px;
}
.result-item + .result-item::before {
content: '';
position: absolute;
top: 20%;
left: 0;
width: 1px;
height: 60%;
background: rgba(255,255,255,0.12);
}
}
.result-item__value {
@ -259,7 +279,7 @@ background: rgba(124, 58, 237, 0.2);
font-weight: 800;
color: var(--accent, #7C3AED);
line-height: 1;
margin-bottom: 6px;
margin-bottom: 8px;
}
@media (min-width: 640px) {
@ -271,8 +291,10 @@ background: rgba(124, 58, 237, 0.2);
.result-item__desc {
display: block;
font-size: 0.8125rem;
color: var(--slate-400);
line-height: 1.35;
color: rgba(255,255,255,0.65);
line-height: 1.4;
max-width: 180px;
margin: 0 auto;
}
/* ============================================================
@ -1139,7 +1161,6 @@ background: rgba(124, 58, 237, 0.2);
align-items: stretch;
flex-wrap: wrap;
gap: 20px 32px;
max-width: 1000px;
margin: 0 auto;
padding: 40px 36px;
background: linear-gradient(135deg, #F8F4F0 0%, #F0EBE5 50%, #F8F4F0 100%);
@ -1225,23 +1246,13 @@ background: rgba(124, 58, 237, 0.2);
Padding reduced from 80px 32/48 for 80px gap rhythm.
============================================================ */
.page-pksh .bento[aria-label="Гарантия"] {
background: #FFFFFF;
background: transparent;
}
/* ============================================================
27. MICRO-COMMITMENT (checklist download)
============================================================ */
.micro-commit {
display: flex;
align-items: center;
gap: 40px;
max-width: 900px;
margin: 0 auto;
padding: 32px 24px;
background: #fff;
border-radius: var(--radius-2026, 24px);
box-shadow: 0 8px 32px rgba(0,0,0,0.06);
}
/* micro-commit styles now under .page-pksh .bento[aria-label="Скачать чек-лист"] */
.micro-commit__content {
flex: 1;
@ -1569,12 +1580,6 @@ background: rgba(124, 58, 237, 0.2);
position: relative;
}
@media (min-width: 861px) {
.page-pksh .bento[aria-label="Социальное доказательство"] {
padding-bottom: 60px;
}
}
/* Subtle background pattern for depth */
.page-pksh .bento[aria-label="Социальное доказательство"]::before {
content: '';
@ -1590,7 +1595,6 @@ background: rgba(124, 58, 237, 0.2);
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
max-width: 1000px;
margin: 0 auto;
width: 100%;
position: relative;
@ -1742,13 +1746,27 @@ background: rgba(124, 58, 237, 0.2);
/* NARROW section — no background (section bg transparent) */
.page-pksh .bento[aria-label="Скачать чек-лист"] {
/* transparent — card handles its own bg */
/* transparent — bg on .bento-card--checklist */
}
.page-pksh .bento-card--checklist {
background: #0F172A;
border-radius: 24px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.30);
text-align: center;
}
.page-pksh .bento-card--checklist .micro-commit {
display: flex;
align-items: center;
gap: 40px;
padding: 40px 36px;
}
/* ── Full-width sections: warm #F8F4F0 alternation ── */
.page-pksh .bento[aria-label="Как проходят занятия"],
.page-pksh .bento#teachers {
background: #F8F4F0;
background: transparent;
}
/* ── Section 6 cards: white on warm, with definition ── */
@ -1762,15 +1780,14 @@ background: rgba(124, 58, 237, 0.2);
}
/* ── Card — dark bg, white text, accent button ── */
.page-pksh .bento[aria-label="Скачать чек-лист"] .micro-commit {
.page-pksh .micro-commit {
display: flex;
align-items: center;
gap: 40px;
max-width: 1000px;
margin: 0 auto;
width: 100%;
padding: 40px 36px;
background: #0F172A;
border: 1px solid #1E293B;
border: none;
border-radius: 24px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.30);
text-align: center;
@ -1778,7 +1795,7 @@ background: rgba(124, 58, 237, 0.2);
}
@media (max-width: 860px) {
.page-pksh .bento[aria-label="Скачать чек-лист"] .micro-commit {
.page-pksh .micro-commit {
flex-direction: column;
text-align: center;
padding: 32px 20px;
@ -1985,99 +2002,8 @@ background: rgba(124, 58, 237, 0.2);
}
/* ============================================================
45. FAQ как на странице лагеря (pksh-faq)
============================================================ */
.page-pksh .pksh-faq {
padding: 0;
background: transparent;
box-shadow: none;
}
.page-pksh .pksh-faq__wrapper {
display: flex;
gap: 30px;
}
.page-pksh .pksh-faq__col {
width: 50%;
display: flex;
flex-direction: column;
gap: 0;
border-top: 1px solid var(--slate-200, #E2E8F0);
}
.page-pksh .pksh-faq .box__accordion {
position: relative;
cursor: pointer;
border-bottom: 1px solid var(--slate-200, #E2E8F0);
border-radius: 0;
}
.page-pksh .pksh-faq .box__accordion_label {
position: relative;
padding: 20px 0;
cursor: pointer;
display: flex;
align-items: center;
gap: 20px;
justify-content: space-between;
padding-left: 0;
}
.page-pksh .pksh-faq .box__accordion_label span {
font-size: clamp(17px, 2vw, 21px);
line-height: 1.3;
font-weight: 600;
color: var(--navy, #1c2b2d);
}
.page-pksh .pksh-faq .box__accordion_label svg {
width: 36px;
height: 36px;
padding: 8px;
border-radius: 50%;
background: var(--accent, #7C3AED);
stroke: #fff;
transition: background 0.2s;
flex-shrink: 0;
}
.page-pksh .pksh-faq .box__accordion_label svg g {
stroke: #fff;
}
.page-pksh .pksh-faq .active .box__accordion_label svg {
rotate: 45deg;
background: var(--accent-hover, #6D28D9);
}
.page-pksh .pksh-faq .box__accordion_content {
display: flex;
position: relative;
overflow: hidden;
max-height: 0;
transition: max-height 0.3s;
gap: 20px;
align-items: center;
}
.page-pksh .pksh-faq .box__accordion_content-text {
display: flex;
flex-direction: column;
gap: 10px;
font-size: 16px;
line-height: 1.6;
color: var(--slate-600, #475569);
padding-bottom: 20px;
}
@media (max-width: 768px) {
.page-pksh .pksh-faq__wrapper {
flex-direction: column;
gap: 0;
}
.page-pksh .pksh-faq__col {
width: 100%;
border-top: none;
}
.page-pksh .pksh-faq__col:first-child {
border-top: 1px solid var(--slate-200, #E2E8F0);
}
}
/* ============================================================
46. TEACHERS camp-style cards
============================================================ */
46. TEACHERS camp-style cards
============================================================ */
.page-pksh .pksh-section--teachers {
background: var(--bg-soft-2026, #F8FAFC);
padding-top: 60px;
@ -2120,23 +2046,23 @@ background: rgba(124, 58, 237, 0.2);
background: linear-gradient(135deg, rgba(124, 58, 237, 0.05), rgba(139, 92, 246, 0.08));
display: flex;
justify-content: center;
padding: 28px 24px 18px;
padding: 32px 24px 20px;
}
.pksh-teachers__photo {
width: 130px;
height: 130px;
width: 140px;
height: 140px;
border-radius: 50%;
object-fit: cover;
border: 4px solid #fff;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
box-shadow: 0 4px 16px rgba(0,0,0,0.10);
}
.pksh-teachers__card-body {
padding: 18px 24px 24px;
display: flex;
flex-direction: column;
gap: 8px;
gap: 6px;
flex: 1;
}
@ -2155,15 +2081,70 @@ background: rgba(124, 58, 237, 0.2);
color: var(--accent, #7C3AED);
text-align: center;
font-weight: 600;
margin: 0;
margin: 0 0 2px;
}
.pksh-teachers__about {
font-size: 0.875rem;
.pksh-teachers__desc {
font-size: 0.825rem;
line-height: 1.5;
color: var(--slate-600, #475569);
text-align: center;
margin: 0;
margin: 0 0 4px;
}
.pksh-teachers__meta {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 6px;
margin: 4px 0 12px;
}
.pksh-teachers__meta-badge {
display: inline-flex;
padding: 3px 10px;
font-size: 0.72rem;
font-weight: 600;
color: #6D28D9;
background: #F5F3FF;
border-radius: 100px;
white-space: nowrap;
}
.pksh-teachers__meta-exp {
display: inline-flex;
padding: 3px 10px;
font-size: 0.72rem;
font-weight: 600;
color: #92400E;
background: #FEF3C7;
border-radius: 100px;
white-space: nowrap;
}
.pksh-teachers__btn {
display: block;
width: 100%;
padding: 12px;
border: none;
border-radius: 12px;
font-family: inherit;
font-size: 0.9rem;
font-weight: 700;
color: #fff;
cursor: pointer;
background: linear-gradient(135deg, #7C3AED, #A855F7);
text-align: center;
text-decoration: none;
transition: opacity 0.15s, transform 0.15s, box-shadow 0.15s;
box-shadow: 0 3px 12px rgba(124, 58, 237, 0.2);
margin-top: auto;
}
.pksh-teachers__btn:hover {
opacity: 0.92;
transform: translateY(-1px);
box-shadow: 0 5px 18px rgba(124, 58, 237, 0.3);
}
@media (max-width: 768px) {
@ -2179,11 +2160,11 @@ background: rgba(124, 58, 237, 0.2);
gap: 16px;
}
.pksh-teachers__card-top {
padding: 24px 16px 14px;
padding: 24px 16px 16px;
}
.pksh-teachers__photo {
width: 110px;
height: 110px;
width: 120px;
height: 120px;
}
.pksh-teachers__card-body {
padding: 14px 18px 20px;
@ -2193,9 +2174,13 @@ background: rgba(124, 58, 237, 0.2);
font-size: 1rem;
}
.pksh-teachers__subj,
.pksh-teachers__about {
.pksh-teachers__desc {
font-size: 0.8125rem;
}
.pksh-teachers__btn {
padding: 10px;
font-size: 0.85rem;
}
}
@media (max-width: 480px) {
@ -2220,103 +2205,12 @@ background: rgba(124, 58, 237, 0.2);
}
/*
42. BACKGROUND SYSTEM v2.1 Coherent warm palette
Unified background rhythm across all sections.
PROBLEMS SOLVED:
White cluster 3+ white sections in a row
Warm/cool undertone conflict #F8F4F0 vs #F8FAFC
Missing backgrounds Programs etc had no explicit bg
Inconsistent rhythm no visual breathing between sections
DESIGN:
WARM (#F8F4F0) = rhythm sections how-it-works,
programs, teachers, final CTA
WARM-ALT (#F5F0E8) = variety FAQ
WHITE = clean backdrop for content cards checklist,
guarantee hero, results, guarantee standalone
NAVY = emphasis results inner card (unchanged)
*/
/* ── 42a. Global --alt override: warm instead of cool ── */
/* Main.css gives .pksh-section--alt: var(--bg-soft) = #F8FAFC (cool gray).
This overrides all --alt sections to warm palette.
NOTE: uses background shorthand (not background-color) because
these sections do NOT have decorative background-image patterns. */
.page-pksh .pksh-section--alt {
background: var(--bg-warm, #F8F4F0);
}
/* ── 42b. Section-by-section background color assignments ── */
/* Uses background-color (not shorthand) to avoid resetting
background-image set in 42d. */
/* 🔵 WARM — Checklist card stands out against warm bg */
/* .page-pksh .bento[aria-label="Скачать чек-лист"] bg set in section 27 override */
/* 🔵 WHITE — Guarantee hero (strong purple border card) */
.page-pksh .bento[aria-label="Гарантия"] {
background-color: #FFFFFF;
}
/* 🔵 WHITE — Results (navy inner card needs clean backdrop) */
.page-pksh #results.bento.pksh-section--alt {
background-color: #FFFFFF;
}
/* 🔵 WHITE — Guarantee standalone (clean) */
.page-pksh #guarantee.bento.pksh-section--alt {
background-color: #FFFFFF;
}
/* 🟤 WARM — Programs (was transparent, now rhythm warm) */
.page-pksh #programs.bento.pksh-section {
background-color: var(--bg-warm, #F8F4F0);
}
/* 🟤 WARM — Final CTA (was cool via --alt, now warm) */
.page-pksh #final-cta.bento.pksh-section--alt {
background-color: var(--bg-warm, #F8F4F0);
}
/* 🟠 WARM-ALT — FAQ (warm stone for variety) */
.page-pksh #faq.bento.pksh-section--alt {
background-color: var(--bg-warm-alt, #F5F0E8);
}
/* ── 42c. Contacts — transparent (let footer handle it) ── */
.page-pksh #pksh-contact.bento.pksh-section {
background-color: transparent;
}
/* ── 42d. Background decorative gradients ── */
/* Adds subtle radial gradient overlays to warm sections
for subtle depth without visual noise.
Safely combines with background-color from 42b. */
.page-pksh #programs.bento.pksh-section {
background-image:
radial-gradient(ellipse at 80% 20%, rgba(124, 58, 237, 0.018) 0%, transparent 55%),
radial-gradient(ellipse at 10% 80%, rgba(0, 0, 0, 0.012) 0%, transparent 50%);
}
.page-pksh #final-cta.bento.pksh-section--alt {
background-image:
radial-gradient(ellipse at 50% 0%, rgba(124, 58, 237, 0.025) 0%, transparent 60%);
}
.page-pksh #faq.bento.pksh-section--alt {
background-image:
radial-gradient(ellipse at 30% 90%, rgba(124, 58, 237, 0.015) 0%, transparent 50%),
radial-gradient(ellipse at 70% 10%, rgba(0, 0, 0, 0.01) 0%, transparent 50%);
}
/* ── 42e. Section separators ── */
/* Subtle light border-top on warm sections following white
to create intentional visual stratification. */
.page-pksh #programs.bento.pksh-section,
.page-pksh #final-cta.bento.pksh-section--alt {
border-top: 1px solid rgba(0, 0, 0, 0.03);
}
42. BACKGROUND единый фон на .page-pksh
Фон страницы: var(--accent-light, #F5F3FF) задан на .page-pksh
Hero свой тёмный фон (data-bg="hero")
FAQ свой фон через section-bg
Все остальные секции наследуют фон страницы.
*/
/* ── 42f. Mobile-responsive final CTA ── */
@media (max-width: 860px) {
@ -2623,7 +2517,7 @@ background: rgba(124, 58, 237, 0.2);
57. CTA TEST Бесплатное тестирование перед results
============================================================ */
.page-pksh .bento[aria-label="Запись на тестирование"] {
background: var(--bg-warm, #F8F4F0);
background: transparent;
}
.cta-test {

View File

@ -668,98 +668,14 @@
}
/* ─── FAQ (две колонки, аккордеон как на camp) ─── */
.reviews-faq {
padding: 40px 0;
background: var(--accent-light, #F5F3FF);
}
.reviews-faq__title {
text-align: center;
margin-bottom: 40px;
/* ============================================================
FAQ используется общий стиль .faq-section из main.css
Секция .reviews-faq сохраняет свой bg (accent-light) + отступы
============================================================ */
.reviews-faq .faq-section__title {
font-family: 'Oswald', sans-serif;
font-size: clamp(24px, 2.8vw, 32px);
font-weight: 500;
color: var(--color-text);
}
.reviews-faq-wrapper {
display: flex;
gap: 30px;
}
.reviews-faq .accordion {
width: 50%;
display: flex;
flex-direction: column;
gap: 10px;
border-top: 1px solid #ccc;
}
.reviews-faq .accordion .box__accordion {
position: relative;
cursor: pointer;
border-bottom: 1px solid #ccc;
border-radius: 0;
}
.reviews-faq .box__accordion_label {
position: relative;
padding: 20px 0;
cursor: pointer;
display: flex;
align-items: center;
gap: 20px;
justify-content: space-between;
}
.reviews-faq .accordion .box__accordion .box__accordion_label::after {
background-image: none;
}
.reviews-faq .box__accordion_label span {
font-size: clamp(18px, 2.2vw, 22px);
line-height: 1.25;
font-family: var(--font-display, 'Oswald', sans-serif);
font-weight: 600;
color: var(--color-text);
}
.box__accordion_label svg {
width: 36px;
height: 36px;
padding: 8px;
border-radius: 50%;
background: var(--color-primary);
stroke: #fff;
transition: background var(--transition-fast);
flex-shrink: 0;
}
.box__accordion_label svg:hover {
background: var(--color-primary-hover);
}
.active .box__accordion_label svg {
rotate: 45deg;
background: var(--color-primary-hover);
}
.box__accordion_label svg g {
stroke: #fff;
}
.box__accordion_label svg:hover g {
stroke: #fff;
}
.reviews-faq .box__accordion_content {
display: flex;
position: relative;
overflow: hidden;
max-height: 0;
transition: max-height .3s ease;
gap: 20px;
align-items: center;
}
.box__accordion_content-text {
display: flex;
flex-direction: column;
gap: 10px;
font-size: 16px;
line-height: 1.6;
color: var(--color-text-muted);
padding-bottom: 20px;
font-family: var(--font-body, sans-serif);
}
.box__accordion_content-text p {
margin: 0;
margin-bottom: 40px;
}
/* ─── ЗАКЛЮЧИТЕЛЬНЫЙ ТЕКСТ ─── */
@ -1199,24 +1115,6 @@
text-align: center;
padding: 16px 20px;
}
/* ─── FAQ: две колонки → одна колонка ─── */
.reviews-faq-wrapper {
gap: 0;
flex-direction: column;
}
.reviews-faq-wrapper .accordion {
width: 100%;
gap: 0;
}
.reviews-faq-wrapper .accordion-last {
border-top: none;
}
.reviews-faq .box__accordion_label span {
font-size: 20px;
}
.box__accordion_label svg {
flex-shrink: 0;
}
/* ─── Контакты: колонки → стопкой, карта меньше ─── */
.reviews-contact .contact-wrapper {
gap: 20px;

View File

@ -480,10 +480,14 @@ function add_carbon() {
->where( 'post_type', '=', 'teacher' )
->add_fields( array(
Field::make( 'text', 'teacher_direction', 'Направление преподавателя (текст в под фото):' ),
Field::make( 'image', 'teacher_avatar', 'Автар:' )
Field::make( 'image', 'teacher_avatar', 'Аватар:' )
->set_width( 15 ),
Field::make( 'text', 'teacher_start_year', 'Год начала работы (только год, например: 1987)' )
->set_width( 30 )
->set_attribute( 'placeholder', '1987' )
->set_help_text( 'Стаж рассчитается автоматически на странице подготовки к школе.' ),
Field::make( 'textarea', 'teacher_description', 'Дескрипшн преподавателя' )
->set_width( 75 ),
->set_width( 55 ),
Field::make( 'textarea', 'teacher_about', 'О себе:' ),
Field::make( 'textarea', 'teacher_education', 'Образование:' ),
Field::make( 'textarea', 'teacher_add_education', 'Дополнительное образование:' ),
@ -617,20 +621,21 @@ function add_carbon() {
))
->add_tab('👨‍🏫 Преподаватели', array(
Field::make( 'html', 'pksh_teachers_tab_desc', '' )
->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>#teachers</strong>. Карточки преподавателей в стиле лагеря.</p>' ),
Field::make( 'complex', 'pksh_teachers', 'Преподаватели' )
->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>#teachers</strong>. Выберите преподавателей из добавленных в разделе <strong>Преподаватели</strong> главного меню админки. ФИО и фото берутся из карточки преподавателя.</p>' ),
Field::make( 'complex', 'pksh_teachers', 'Преподаватели на странице' )
->set_layout( 'tabbed-horizontal' )
->set_help_text( 'Добавьте преподавателей. Выводятся на странице подготовки к школе в секции Преподаватели.' )
->set_help_text( 'Добавьте преподавателей для этой страницы. Выберите из списка существующих.' )
->add_fields( array(
Field::make( 'text', 'teacher_name', 'ФИО' )
->set_width( 40 ),
Field::make( 'image', 'teacher_photo', 'Фото' )
->set_help_text( 'Оптимально: 240×240 px, квадратное.' )
->set_width( 30 ),
Field::make( 'text', 'teacher_subject', 'Предмет / должность' )
->set_width( 30 ),
Field::make( 'textarea', 'teacher_about', 'О педагоге' )
->set_width( 100 ),
Field::make( 'select', 'teacher_id', 'Выберите преподавателя' )
->set_options( array( 0 => '— Выберите преподавателя —' ) + dekart_get_teacher_options() )
->set_width( 100 )
->set_help_text( 'ФИО и фото подтянутся из карточки преподавателя. Если нужного нет — добавьте в разделе Преподаватели.' ),
Field::make( 'text', 'teacher_subject', 'Предмет / должность (на этой странице)' )
->set_width( 100 )
->set_help_text( 'Если оставить пустым — используется значение из карточки преподавателя.' ),
Field::make( 'textarea', 'teacher_about', 'О педагоге (на этой странице)' )
->set_width( 100 )
->set_help_text( 'Краткое описание для этой страницы. Если оставить пустым — используется значение из карточки преподавателя.' ),
)),
))
// ====================================================
@ -638,67 +643,47 @@ function add_carbon() {
// ====================================================
->add_tab('📚 Программы', array(
Field::make( 'html', 'pksh_programs_tab_desc', '' )
->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>#programs</strong>. Карточки программ подготовки к школе. Каждая карточка — отдельная запись.</p>' ),
Field::make( 'complex', 'pksh_programs', 'Программы подготовки' )
->set_layout( 'tabbed-horizontal' )
->set_help_text( 'Добавьте программы подготовки к школе. Каждая — отдельная карточка.' )
->add_fields( array(
Field::make( 'text', 'program_icon', 'Иконка (emoji)' )
->set_width( 20 )
->set_default_value( '🎓' ),
Field::make( 'text', 'program_title', 'Название программы' )
->set_width( 80 ),
Field::make( 'text', 'program_intensity', 'Интенсивность' )
->set_width( 50 )
->set_help_text( 'Например: 2 раза в неделю' ),
Field::make( 'textarea', 'program_schedule', 'Расписание' )
->set_width( 50 )
->set_help_text( 'Каждая строка — один вариант расписания' ),
Field::make( 'text', 'program_duration', 'Длительность занятия' )
->set_width( 30 )
->set_default_value( '90 мин' ),
Field::make( 'textarea', 'program_lesson_structure', 'Структура занятия (timeline)' )
->set_width( 70 )
->set_help_text( 'Каждая строка: время 🔤 Название. Например: "15 мин 🧠 Нейрогимнастика"' ),
Field::make( 'textarea', 'program_includes', 'Программа включает' )
->set_width( 100 )
->set_help_text( 'Каждая строка — пункт списка' ),
Field::make( 'text', 'program_price_subscription', 'Цена абонемента' )
->set_width( 40 )
->set_default_value( '7 500 ₽' )
->set_help_text( 'Например: 7 500 ₽' ),
Field::make( 'text', 'program_price_single', 'Цена разового занятия' )
->set_width( 40 )
->set_default_value( '1 000 ₽' )
->set_help_text( 'Например: 1 000 ₽' ),
Field::make( 'text', 'program_time_required', 'Длительность курса (timeRequired)' )
->set_width( 30 )
->set_help_text( 'Общая длительность курса. Например: "4 месяца", "P4M"' ),
Field::make( 'text', 'program_repeat_frequency', 'Частота занятий (ISO 8601)' )
->set_width( 30 )
->set_help_text(
'Для Schema.org Schedule.repeatFrequency. '
. 'Пример: P1W (раз в неделю), P4D (дважды в неделю). '
. 'program_intensity остаётся для отображения на сайте.'
)
->set_attribute( 'placeholder', 'P1W' ),
Field::make( 'text', 'program_workload', 'Нагрузка (courseWorkload)' )
->set_width( 70 )
->set_help_text( 'Например: "2 занятия в неделю по 90 минут"' ),
Field::make( 'date', 'program_start_date', 'Дата старта программы' )
->set_width( 33 ),
Field::make( 'date', 'program_end_date', 'Дата окончания' )
->set_width( 33 ),
Field::make( 'date', 'program_price_valid', 'Цена действительна до' )
->set_width( 34 )
->set_help_text( 'Дата, до которой актуальна указанная цена.' ),
Field::make( 'text', 'program_button_text', 'Текст кнопки' )
->set_width( 40 )
->set_default_value( 'Записаться' ),
Field::make( 'text', 'program_button_url', 'Ссылка кнопки' )
->set_width( 60 )
->set_default_value( '/zapis/' ),
)),
->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>#programs</strong>. Две фиксированные карточки: базовая и расширенная программа.</p>' ),
Field::make( 'html', 'pksh_prog_base_title', '' )
->set_html( '<h3 style="margin:16px 0 8px;">🔵 Базовая — «Уверенный старт»</h3>' ),
Field::make( 'text', 'pksh_prog_base_name', 'Название программы' )
->set_width( 100 )
->set_default_value( 'Уверенный старт' ),
Field::make( 'text', 'pksh_prog_base_subname', 'Подзаголовок' )
->set_width( 100 )
->set_default_value( '2 раза в неделю — комфортный темп без перегрузки' ),
Field::make( 'text', 'pksh_prog_base_schedule', 'Расписание' )
->set_width( 100 )
->set_default_value( 'вт, чт — 18:0019:30' ),
Field::make( 'text', 'pksh_prog_base_price_sub', 'Стоимость абонемента за 4 недели' )
->set_width( 50 )
->set_default_value( '7 500 ₽' ),
Field::make( 'text', 'pksh_prog_base_price_single', 'Стоимость разового занятия' )
->set_width( 50 )
->set_default_value( '1 000 ₽' ),
Field::make( 'text', 'pksh_prog_base_urgency', 'Срочность (мест в группе)' )
->set_width( 100 )
->set_default_value( 'Осталось 2 места в группе' ),
Field::make( 'html', 'pksh_prog_prem_title', '' )
->set_html( '<h3 style="margin:20px 0 8px;">🟣 Расширенная — «Результат за 3 месяца»</h3>' ),
Field::make( 'text', 'pksh_prog_prem_name', 'Название программы' )
->set_width( 100 )
->set_default_value( 'Результат за 3 месяца' ),
Field::make( 'text', 'pksh_prog_prem_subname', 'Подзаголовок' )
->set_width( 100 )
->set_default_value( '3 раза в неделю — быстрый прогресс' ),
Field::make( 'text', 'pksh_prog_prem_schedule', 'Расписание' )
->set_width( 100 )
->set_default_value( 'пн, ср, пт — 16:3018:00' ),
Field::make( 'text', 'pksh_prog_prem_price_sub', 'Стоимость абонемента за 4 недели' )
->set_width( 50 )
->set_default_value( '10 500 ₽' ),
Field::make( 'text', 'pksh_prog_prem_price_single', 'Стоимость разового занятия' )
->set_width( 50 )
->set_default_value( '1 500 ₽' ),
Field::make( 'text', 'pksh_prog_prem_urgency', 'Срочность (мест в группе)' )
->set_width( 100 )
->set_default_value( 'Осталось 3 места в группе' ),
))
// ====================================================
// Вкладка: JSON-LD Schema (данные для микроразметки)
@ -2109,6 +2094,24 @@ require_once __DIR__ . '/inc/schema.php';
// ─────────────────────────────────────────────────────────────
// Helper: список преподавателей для select поля
// ─────────────────────────────────────────────────────────────
function dekart_get_teacher_options() {
$options = array();
$teachers = get_posts( array(
'post_type' => 'teacher',
'posts_per_page' => -1,
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'ASC',
) );
foreach ( $teachers as $t ) {
$options[ $t->ID ] = esc_html( $t->post_title );
}
return $options;
}
// ─────────────────────────────────────────────────────────────
// ACF: Отзывы (Лагерь) — группа полей
// ─────────────────────────────────────────────────────────────

View File

@ -650,9 +650,10 @@ $metrics = [
<section class="section-bg camp-faq" data-bg="mint" id="camp-faq">
<h2 class="camp_title">Часто задаваемые вопросы</h2>
<div class="faq-wrapper">
<section class="section-bg faq-section" id="camp-faq">
<div class="container">
<h2 class="faq-section__title">Часто задаваемые вопросы</h2>
<div class="faq-section__wrapper">
<?php
$questions = carbon_get_post_meta($post_id, 'questions' );
@ -667,9 +668,9 @@ $metrics = [
$accordion_item = "<div class='box__accordion'>
<div class='box__accordion_label' role='button' tabindex='0'>
<span>" . esc_html($questions_question) . "</span>
<svg role='presentation' focusable='false' width='24px' height='24px' viewBox='0 0 24 24'>
<svg role='presentation' focusable='false' width='36px' height='36px' viewBox='0 0 24 24'>
<g stroke='none' stroke-width='2px' fill='none' fill-rule='evenodd' stroke-linecap='square'>
<g transform='translate(1.000000, 1.000000)' stroke='#3bb273'>
<g transform='translate(1.000000, 1.000000)' stroke='currentColor'>
<path d='M0,11 L22,11'></path>
<path d='M11,0 L11,22'></path>
</g>
@ -688,10 +689,11 @@ $metrics = [
$count++;
}
}
echo "<div class='accordion'>$HTMcol1</div>";
echo "<div class='accordion accordion-last'>$HTMcol2</div>";
echo "<div class='faq-section__col'>$HTMcol1</div>";
echo "<div class='faq-section__col'>$HTMcol2</div>";
?>
</div>
</div>
</section>
<section class="section-bg camp-contact" data-bg="white" id="camp-contacts">

View File

@ -243,7 +243,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- Micro-Commitment: Checklist download -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section" aria-label="Скачать чек-лист">
<div class="bento__full">
<div class="bento__full bento-card bento-card--checklist">
<div class="micro-commit">
<div class="micro-commit__content">
<span class="bento-label">Бесплатно</span>
@ -255,26 +255,18 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div>
<div class="micro-commit__visual">
<svg class="micro-commit__svg" viewBox="0 0 130 170" fill="none" aria-hidden="true">
<!-- Paper background -->
<rect x="8" y="4" width="114" height="162" rx="8" fill="white" stroke="#DED3C0" stroke-width="1.2"/>
<!-- Header line -->
<rect x="24" y="20" width="82" height="4" rx="2" fill="#7C3AED" opacity="0.15"/>
<!-- Checklist items -->
<rect x="24" y="38" width="12" height="12" rx="3" fill="#7C3AED" opacity="0.15"/>
<path d="M26 44l3 3 5-5" stroke="#7C3AED" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" opacity="0.4"/>
<rect x="44" y="40" width="50" height="3" rx="1.5" fill="#DED3C0" opacity="0.6"/>
<rect x="24" y="62" width="12" height="12" rx="3" fill="#7C3AED" opacity="0.15"/>
<path d="M26 68l3 3 5-5" stroke="#7C3AED" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" opacity="0.4"/>
<rect x="44" y="64" width="62" height="3" rx="1.5" fill="#DED3C0" opacity="0.6"/>
<rect x="24" y="86" width="12" height="12" rx="3" fill="#7C3AED" opacity="0.15"/>
<rect x="44" y="88" width="42" height="3" rx="1.5" fill="#DED3C0" opacity="0.6"/>
<rect x="24" y="110" width="12" height="12" rx="3" fill="#7C3AED" opacity="0.15"/>
<rect x="44" y="112" width="56" height="3" rx="1.5" fill="#DED3C0" opacity="0.6"/>
<!-- Pencil illustration -->
<g transform="translate(92, 130) rotate(-30)">
<rect x="0" y="0" width="6" height="28" rx="1" fill="#7C3AED" opacity="0.12"/>
<polygon points="0,0 6,0 3,-6" fill="#7C3AED" opacity="0.15"/>
@ -288,7 +280,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- ════════════════════════════════════════════ -->
<!-- Guarantee Hero + Navigation -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section pksh-section--alt" aria-label="Гарантия">
<section class="bento pksh-section" aria-label="Гарантия">
<div class="bento__full">
<div class="guarantee-hero">
<div class="guarantee-hero__badges">
@ -313,10 +305,15 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- Bento Row 1: How it works + Why us -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section" id="how-it-works" aria-label="Как проходят занятия">
<div class="bento__full" style="text-align: center;">
<span class="bento-label">Как проходят занятия</span>
<h2 class="bento-h2">30 минут игры 1 шаг к школе</h2>
<p class="bento-p">Каждое занятие построено так, что ребёнок <strong>сам хочет</strong> вернуться. Без скучных прописей только игровая методика и смена активностей каждые 7 минут.</p>
</div>
<div class="bento__half bento-card bento-card--soft">
<span class="bento-label">Как проходит занятие</span>
<h2 class="bento-h2">30 минут игры = 1 шаг к школе</h2>
<p class="bento-p">Никаких скучных прописей. Каждое занятие построено так, что ребёнок <strong>сам хочет</strong> вернуться.</p>
<span class="bento-label">Структура занятия</span>
<h2 class="bento-h2">Каждый урок мини-путешествие</h2>
<p class="bento-p">Ребёнок не сидит за партой 30 минут. Мы меняем активность каждые 7 минут мозг не устаёт, интерес не гаснет.</p>
<div class="steps-3">
<div class="step">
<div class="step__icon">
@ -387,7 +384,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- ════════════════════════════════════════════ -->
<!-- CTA: Бесплатное тестирование + занятие -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section pksh-section--alt" aria-label="Запись на тестирование">
<section class="bento pksh-section" aria-label="Запись на тестирование">
<div class="bento__full">
<div class="cta-test">
<div class="cta-test__badge">Бесплатно</div>
@ -401,10 +398,11 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- ════════════════════════════════════════════ -->
<!-- Bento Row 2: Results / Data -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section pksh-section--alt" id="results" aria-label="Результаты учеников">
<div class="bento__full bento-card bento-card--highlight-results">
<section class="bento pksh-section" id="results" aria-label="Результаты учеников">
<div class="bento__full bento-card bento-card--highlight-results" style="text-align: center;">
<span class="bento-label bento-label--light">Результаты наших учеников</span>
<h2 class="bento-h2 bento-h2--light">К чему мы приводим детей</h2>
<p class="bento-p bento-p--light">95% наших выпускников поступают в школы и лицеи Щёлкова без стресса. Первые результаты через 3 недели.</p>
<div class="results-grid">
<div class="result-item">
<span class="result-item__value">95%</span>
@ -429,8 +427,24 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- ════════════════════════════════════════════ -->
<!-- Bento Row 3: Programs / Курсы -->
<!-- ════════════════════════════════════════════ -->
<?php
// Данные из админки (CF)
$base_name = carbon_get_post_meta( $post_id, 'pksh_prog_base_name' ) ?: 'Уверенный старт';
$base_subname = carbon_get_post_meta( $post_id, 'pksh_prog_base_subname' ) ?: '2 раза в неделю — комфортный темп без перегрузки';
$base_schedule = carbon_get_post_meta( $post_id, 'pksh_prog_base_schedule' ) ?: 'вт, чт — 18:0019:30';
$base_price_sub = carbon_get_post_meta( $post_id, 'pksh_prog_base_price_sub' ) ?: '7 500 ₽';
$base_price_single = carbon_get_post_meta( $post_id, 'pksh_prog_base_price_single' ) ?: '1 000 ₽';
$base_urgency = carbon_get_post_meta( $post_id, 'pksh_prog_base_urgency' ) ?: 'Осталось 2 места в группе';
$prem_name = carbon_get_post_meta( $post_id, 'pksh_prog_prem_name' ) ?: 'Результат за 3 месяца';
$prem_subname = carbon_get_post_meta( $post_id, 'pksh_prog_prem_subname' ) ?: '3 раза в неделю — быстрый прогресс';
$prem_schedule = carbon_get_post_meta( $post_id, 'pksh_prog_prem_schedule' ) ?: 'пн, ср, пт — 16:3018:00';
$prem_price_sub = carbon_get_post_meta( $post_id, 'pksh_prog_prem_price_sub' ) ?: '10 500 ₽';
$prem_price_single = carbon_get_post_meta( $post_id, 'pksh_prog_prem_price_single' ) ?: '1 500 ₽';
$prem_urgency = carbon_get_post_meta( $post_id, 'pksh_prog_prem_urgency' ) ?: 'Осталось 3 места в группе';
?>
<section class="bento pksh-section" id="programs" aria-label="Программы подготовки">
<div class="bento__full">
<div class="bento__full" style="text-align: center;">
<span class="bento-label">Программы</span>
<h2 class="bento-h2">Выберите формат подготовки</h2>
<p class="bento-p">Все программы ведут действующие педагоги начальных классов.
@ -444,8 +458,8 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<div class="prog-card__header-row">
<div class="prog-card__icon"></div>
<div>
<div class="prog-card__name">Уверенный старт</div>
<div class="prog-card__subname">2 раза в неделю комфортный темп без перегрузки</div>
<div class="prog-card__name"><?php echo esc_html( $base_name ); ?></div>
<div class="prog-card__subname"><?php echo esc_html( $base_subname ); ?></div>
</div>
</div>
</div>
@ -453,10 +467,10 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<div class="prog-card__body">
<!-- Цена сразу под шапкой -->
<div class="prog-card__pricing">
<div class="prog-card__price">7 500 <span class="prog-card__price-period">стоимость абонемента за 4 недели</span></div>
<div class="prog-card__price-sub">375 за занятие дешевле репетитора</div>
<div class="prog-card__price-single">Разовое занятие вне абонемента: 1 000 </div>
<div class="prog-card__urgency">Осталось 2 места в группе</div>
<div class="prog-card__price"><?php echo esc_html( $base_price_sub ); ?> <span class="prog-card__price-period">стоимость абонемента за 4 недели</span></div>
<div class="prog-card__price-sub"><?php echo esc_html( $base_price_single ); ?> за занятие — дешевле репетитора</div>
<div class="prog-card__price-single">Разовое занятие вне абонемента: <?php echo esc_html( $base_price_single ); ?></div>
<div class="prog-card__urgency"><?php echo esc_html( $base_urgency ); ?></div>
</div>
<!-- Результат с гарантией -->
@ -479,7 +493,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- Расписание + Структура одним блоком -->
<div class="prog-card__block">
<div class="prog-card__block-title">Расписание</div>
<div class="prog-card__schedule">вт, чт 18:0019:30</div>
<div class="prog-card__schedule"><?php echo esc_html( $base_schedule ); ?></div>
</div>
<div class="prog-card__block">
@ -509,7 +523,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- Кнопка -->
<button class="prog-card__btn open-bitrix-form">Попробовать бесплатно</button>
<div class="prog-card__footnote">После записи: перезвоним за 30 минут, подберём удобное время.</div>
<div class="prog-card__footnote">Тестирование и первое занятие бесплатно. Результат увидите до оплаты.</div>
</div>
</div>
@ -521,8 +535,8 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<div class="prog-card__header-row">
<div class="prog-card__icon prog-card__icon--double">⭐⭐</div>
<div>
<div class="prog-card__name">Результат за 3 месяца</div>
<div class="prog-card__subname">3 раза в неделю быстрый прогресс</div>
<div class="prog-card__name"><?php echo esc_html( $prem_name ); ?></div>
<div class="prog-card__subname"><?php echo esc_html( $prem_subname ); ?></div>
</div>
</div>
</div>
@ -530,10 +544,10 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<div class="prog-card__body">
<!-- Цена сразу под шапкой -->
<div class="prog-card__pricing">
<div class="prog-card__price prog-card__price--premium">10 500 <span class="prog-card__price-period">стоимость абонемента за 4 недели</span></div>
<div class="prog-card__price-sub">500 за занятие дешевле репетитора</div>
<div class="prog-card__price-single">Разовое занятие вне абонемента: 1 500 </div>
<div class="prog-card__urgency">Осталось 3 места в группе</div>
<div class="prog-card__price prog-card__price--premium"><?php echo esc_html( $prem_price_sub ); ?> <span class="prog-card__price-period">стоимость абонемента за 4 недели</span></div>
<div class="prog-card__price-sub"><?php echo esc_html( $prem_price_single ); ?> за занятие — дешевле репетитора</div>
<div class="prog-card__price-single">Разовое занятие вне абонемента: <?php echo esc_html( $prem_price_single ); ?></div>
<div class="prog-card__urgency"><?php echo esc_html( $prem_urgency ); ?></div>
</div>
<!-- Результат с гарантией -->
@ -564,7 +578,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- Расписание + Структура -->
<div class="prog-card__block">
<div class="prog-card__block-title">Расписание</div>
<div class="prog-card__schedule">пн, ср, пт 16:3018:00</div>
<div class="prog-card__schedule"><?php echo esc_html( $prem_schedule ); ?></div>
</div>
<div class="prog-card__block">
@ -594,7 +608,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- Кнопка -->
<button class="prog-card__btn open-bitrix-form">Попробовать бесплатно</button>
<div class="prog-card__footnote">После записи: перезвоним за 30 минут, подберём удобное время.</div>
<div class="prog-card__footnote">Тестирование и первое занятие бесплатно. Результат увидите до оплаты.</div>
</div>
</div>
</div>
@ -610,28 +624,55 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- Bento Row 4: Teachers (camp-style cards) -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section pksh-section--teachers" id="teachers" aria-label="Преподаватели">
<div class="bento__full" style="text-align: center;">
<span class="bento-label">Преподаватели</span>
<h2 class="bento-h2">Наши преподаватели практикующие педагоги</h2>
<p class="bento-p">Каждый педагог имеет опыт работы с дошкольниками от 5 лет. Все действующие учителя начальных классов с высшим образованием.</p>
</div>
<div class="bento__full">
<h2 class="bento-h2">Наши преподаватели</h2>
<div class="pksh-teachers__scroll-x">
<div class="pksh-teachers__wrapper">
<?php
$pksh_teachers = carbon_get_post_meta(get_the_ID(), 'pksh_teachers');
if (is_array($pksh_teachers) && !empty($pksh_teachers)) :
foreach ($pksh_teachers as $item) :
$t_name = $item['teacher_name'] ?? '';
$t_photo = $item['teacher_photo'] ?? 0;
$t_id = $item['teacher_id'] ?? 0;
$t_subj = $item['teacher_subject'] ?? '';
$t_about = $item['teacher_about'] ?? '';
// Получаем данные из CPT teacher
$t_post = $t_id ? get_post($t_id) : null;
$t_name = $t_post ? $t_post->post_title : '—';
// Фото: _teacher_avatar или _thumbnail_id
$t_photo = 0;
if ($t_post) {
$t_photo = get_post_meta($t_id, '_teacher_avatar', true);
if (!$t_photo) {
$t_photo = get_post_meta($t_id, '_thumbnail_id', true);
}
}
// Subject fallback: сначала из CF, потом из CPT _teacher_direction
if (empty($t_subj) && $t_post) {
$t_subj = get_post_meta($t_id, '_teacher_direction', true);
}
// About fallback
if (empty($t_about) && $t_post) {
$t_about = get_post_meta($t_id, '_teacher_about', true);
}
?>
<div class="pksh-teachers__item">
<div class="pksh-teachers__card">
<div class="pksh-teachers__card-top">
<?php if ($t_photo) : ?>
<img class="pksh-teachers__photo" loading="lazy" width="130" height="130"
src="<?php echo esc_url(wp_get_attachment_url($t_photo)); ?>"
<?php $photo_url = wp_get_attachment_image_url($t_photo, array(280, 280)); ?>
<img class="pksh-teachers__photo" loading="lazy" width="140" height="140"
src="<?php echo esc_url($photo_url ?: get_template_directory_uri() . '/assets/images/no-photo.png'); ?>"
alt="<?php echo esc_attr($t_name); ?>">
<?php else : ?>
<img class="pksh-teachers__photo" loading="lazy" width="130" height="130"
<img class="pksh-teachers__photo" loading="lazy" width="140" height="140"
src="<?php echo get_template_directory_uri(); ?>/assets/images/no-photo.png"
alt="<?php echo esc_attr($t_name); ?>">
<?php endif; ?>
@ -641,9 +682,29 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<?php if ($t_subj) : ?>
<p class="pksh-teachers__subj"><?php echo esc_html($t_subj); ?></p>
<?php endif; ?>
<?php if ($t_about) : ?>
<p class="pksh-teachers__about"><?php echo esc_html($t_about); ?></p>
<?php if ($t_post) :
$t_desc = get_post_meta($t_id, '_teacher_description', true);
if (!empty($t_desc)) : ?>
<p class="pksh-teachers__desc"><?php echo esc_html(wp_strip_all_tags($t_desc)); ?></p>
<?php endif; ?>
<?php endif; ?>
<div class="pksh-teachers__meta">
<span class="pksh-teachers__meta-badge">👶 Работает с дошкольниками</span>
<?php if ($t_post) :
$exp_years = '';
$start_year = get_post_meta($t_id, '_teacher_start_year', true);
if ($start_year && is_numeric($start_year)) {
$exp = (int)date('Y') - (int)$start_year;
if ($exp > 0) {
$exp_years = $exp . ' лет';
}
}
if ($exp_years) : ?>
<span class="pksh-teachers__meta-exp">📅 Стаж: <?php echo esc_html($exp_years); ?></span>
<?php endif; ?>
<?php endif; ?>
</div>
<button class="pksh-teachers__btn open-bitrix-form">Записаться к этому педагогу</button>
</div>
</div>
</div>
@ -674,11 +735,11 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</section>
<!-- ════════════════════════════════════════════ -->
<!-- Bento Row 6: FAQ (как на странице лагеря) -->
<!-- Bento Row 6: FAQ (на всю ширину, section-bg) -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section pksh-section--alt" id="faq" aria-label="Вопросы и ответы">
<div class="bento__full pksh-faq">
<h2 class="bento-h2">Часто задаваемые вопросы</h2>
<section class="section-bg faq-section" id="faq" aria-label="Вопросы и ответы">
<div class="container">
<h2 class="faq-section__title">Часто задаваемые вопросы</h2>
<?php
$faq_items = carbon_get_post_meta($post_id, 'pksh_faq_items');
if (!empty($faq_items) && is_array($faq_items)) :
@ -710,14 +771,13 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
endforeach;
if (!empty($col1) || !empty($col2)) :
?>
<div class="pksh-faq__wrapper">
<div class="pksh-faq__col"><?php echo $col1; ?></div>
<div class="pksh-faq__col"><?php echo $col2; ?></div>
<div class="faq-section__wrapper">
<div class="faq-section__col"><?php echo $col1; ?></div>
<div class="faq-section__col"><?php echo $col2; ?></div>
</div>
<?php endif; endif; ?>
</div>
</section>
<!-- ════════════════════════════════════════════ -->
<!-- Reviews (lw-card inline, camp-style) -->
<!-- ════════════════════════════════════════════ -->
@ -829,7 +889,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- ════════════════════════════════════════════ -->
<!-- External Reviews Social Proof -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section pksh-section--alt" aria-label="Отзывы на внешних площадках">
<section class="bento pksh-section" aria-label="Отзывы на внешних площадках">
<div class="bento__full">
<div class="external-reviews">
<h2 class="bento-h2">Нас рекомендуют на площадках</h2>
@ -862,7 +922,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<!-- ════════════════════════════════════════════ -->
<!-- Final CTA Low Friction + Countdown Timer -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section pksh-section--alt" id="final-cta" aria-label="Запись">
<section class="bento pksh-section" id="final-cta" aria-label="Запись">
<div class="bento__full">
<div class="final-cta">
<h2 class="bento-h2">Первое занятие бесплатно</h2>

View File

@ -658,11 +658,11 @@ $intro_price_txt = carbon_get_post_meta( $post_id, 'reviews_intro_price_text' );
</div>
<?php if ( ! empty( $faq_items ) ) : ?>
<section class="section-bg reviews-faq" id="reviews-faq">
<div class="container">
<h2 class="reviews-faq__title">Частые вопросы о поступлении в школу Декарт</h2>
<div class="reviews-faq-wrapper">
<?php if ( ! empty( $faq_items ) ) : ?>
<section class="section-bg reviews-faq faq-section" id="reviews-faq">
<div class="container">
<h2 class="faq-section__title">Частые вопросы о поступлении в школу Декарт</h2>
<div class="faq-section__wrapper">
<?php
$col1 = '';
$col2 = '';
@ -679,14 +679,14 @@ $intro_price_txt = carbon_get_post_meta( $post_id, 'reviews_intro_price_text' );
$accordion = '<div class="box__accordion reveal">'
. '<div class="box__accordion_label" role="button" tabindex="0" id="' . $btn_id . '" aria-expanded="false" aria-controls="' . $panel_id . '">'
. '<span>' . esc_html( $q ) . '</span>'
. '<svg role="presentation" focusable="false" width="24px" height="24px" viewBox="0 0 24 24">'
. '<g stroke="none" stroke-width="2px" fill="none" fill-rule="evenodd" stroke-linecap="square">'
. '<g transform="translate(1.000000, 1.000000)" stroke="#E8753A">'
. '<path d="M0,11 L22,11"></path>'
. '<path d="M11,0 L11,22"></path>'
. '</g>'
. '</g>'
. '</svg>'
. '<svg role="presentation" focusable="false" width="36px" height="36px" viewBox="0 0 24 24">'
. '<g stroke="none" stroke-width="2px" fill="none" fill-rule="evenodd" stroke-linecap="square">'
. '<g transform="translate(1.000000, 1.000000)" stroke="currentColor">'
. '<path d="M0,11 L22,11"></path>'
. '<path d="M11,0 L11,22"></path>'
. '</g>'
. '</g>'
. '</svg>'
. '</div>'
. '<div class="box__accordion_content" id="' . $panel_id . '" role="region" aria-labelledby="' . $btn_id . '">'
. '<div class="box__accordion_content-text">' . wp_kses_post( wpautop( $a ) ) . '</div>'
@ -701,9 +701,9 @@ $intro_price_txt = carbon_get_post_meta( $post_id, 'reviews_intro_price_text' );
$count++;
endforeach;
?>
<div class="accordion"><?php echo $col1; ?></div>
<div class="accordion accordion-last"><?php echo $col2; ?></div>
</div>
<div class="faq-section__col"><?php echo $col1; ?></div>
<div class="faq-section__col"><?php echo $col2; ?></div>
</div>
</div>
</section>
<?php endif; ?>