Global-2026-07-12

This commit is contained in:
Dekart Deploy Bot 2026-07-12 08:35:38 +00:00
parent 6ed9de7c2c
commit 2826a8591d
7 changed files with 975 additions and 520 deletions

View File

@ -11110,8 +11110,9 @@ main > .pksh-section:first-child {
background: var(--accent-light, #F5F3FF); background: var(--accent-light, #F5F3FF);
} }
.faq-section .container { .faq-section .container,
/* центрирование через стандартный .container */ .faq-section .bento {
width: 100%;
} }
.faq-section__title { .faq-section__title {
@ -11121,11 +11122,13 @@ main > .pksh-section:first-child {
font-weight: 700; font-weight: 700;
line-height: 1.25; line-height: 1.25;
color: var(--navy, #0F172A); color: var(--navy, #0F172A);
grid-column: 1 / -1;
} }
.faq-section__wrapper { .faq-section__wrapper {
display: flex; display: flex;
gap: 30px; gap: 30px;
grid-column: 1 / -1;
} }
.faq-section__col { .faq-section__col {

File diff suppressed because it is too large Load Diff

View File

@ -1465,7 +1465,6 @@ function needs_swiper(): bool {
'page-school.php', 'page-school.php',
'page-contacts.php', 'page-contacts.php',
'page-teachers.php', 'page-teachers.php',
'page-podgotovka-k-shkole.php',
'page-camp.php', 'page-camp.php',
]; ];
foreach ( $swiper_templates as $tmpl ) { foreach ( $swiper_templates as $tmpl ) {
@ -1605,15 +1604,40 @@ function dekart_security_headers(): void {
header( 'X-Frame-Options: SAMEORIGIN' ); header( 'X-Frame-Options: SAMEORIGIN' );
header( 'Referrer-Policy: strict-origin-when-cross-origin' ); header( 'Referrer-Policy: strict-origin-when-cross-origin' );
// Content-Security-Policy — базовый, без блокировки легаси-скриптов // Content-Security-Policy — базовый, без блокировки легаси-скриптов
header( "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn-ru.bitrix24.ru https://alee.bitrix24.ru https://api-maps.yandex.ru https://cdn.jsdelivr.net https://www.google.com https://www.gstatic.com https://www.googletagmanager.com https://mc.yandex.ru; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://cdn.jsdelivr.net https://alee.bitrix24.ru; img-src 'self' data: https: blob:; font-src 'self' data: https://fonts.gstatic.com; frame-src 'self' https://cdn-ru.bitrix24.ru https://alee.bitrix24.ru https://www.google.com; connect-src 'self' https://api-maps.yandex.ru https://cdn-ru.bitrix24.ru https://alee.bitrix24.ru https://mc.yandex.ru; object-src 'none'; base-uri 'self'; form-action 'self' https://alee.bitrix24.ru;" ); header( "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn-ru.bitrix24.ru https://alee.bitrix24.ru https://api-maps.yandex.ru https://yastatic.net https://cdn.jsdelivr.net https://www.google.com https://www.gstatic.com https://www.googletagmanager.com https://mc.yandex.ru; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://cdn.jsdelivr.net https://alee.bitrix24.ru; img-src 'self' data: https: blob:; font-src 'self' data: https://fonts.gstatic.com; frame-src 'self' https://cdn-ru.bitrix24.ru https://alee.bitrix24.ru https://www.google.com; connect-src 'self' https://api-maps.yandex.ru https://yastatic.net https://cdn-ru.bitrix24.ru https://alee.bitrix24.ru https://mc.yandex.ru wss://mc.yandex.ru; object-src 'none'; base-uri 'self'; form-action 'self' https://alee.bitrix24.ru;" );
} }
} }
function dekart_add_preload_hints() { function dekart_add_preload_hints() {
// резерв для preload hints // резерв для preload hints
} }
add_action('wp_head', 'dekart_add_preload_hints', 1);// Тестовая строка для проверки деплоя 2026-05-06 add_action('wp_head', 'dekart_add_preload_hints', 1);
// Updated via WordPress admin 2026-05-07
/* ── Honest timer: end-of-month deadline ── */
/**
* Return end-of-current-month as ISO 8601 string.
* Stored in wp_option 'dekart_honest_deadline' so same value
* is used by PHP (template) and exposed to JS.
*/
function dekart_get_honest_deadline(): string {
$cached = get_option( 'dekart_honest_deadline', '' );
if ( $cached && (int) $cached > time() ) {
return $cached;
}
return dekart_recalc_honest_deadline();
}
function dekart_recalc_honest_deadline(): string {
$end = new DateTime( 'last day of this month 23:59:59' );
$ts = (int) $end->format( 'U' ); // Unix timestamp — безопасен для JSON/JS
update_option( 'dekart_honest_deadline', $ts, false );
return (string) $ts;
}
add_action( 'dekart_daily_refresh_deadline', 'dekart_recalc_honest_deadline' );
if ( ! wp_next_scheduled( 'dekart_daily_refresh_deadline' ) ) {
wp_schedule_event( time(), 'daily', 'dekart_daily_refresh_deadline' );
}
// === ACF JSON Auto-save === // === ACF JSON Auto-save ===
// Автоматически сохраняет группы полей в JSON при редактировании // Автоматически сохраняет группы полей в JSON при редактировании

View File

@ -24,7 +24,20 @@
<?php <?php
// ───────────────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────────────
// PRELOAD LCP // PRELOAD LCP: podgotovka-k-shkole
// ─────────────────────────────────────────────────────────────────────
if ( is_page_template( 'page-podgotovka-k-shkole.php' ) ) {
$pksh_img_id = carbon_get_post_meta( get_the_ID(), 'banner_image' );
if ( $pksh_img_id ) {
$pksh_img_url = wp_get_attachment_url( $pksh_img_id );
if ( $pksh_img_url ) {
echo '<link rel="preload" as="image" href="' . esc_url( $pksh_img_url ) . '" fetchpriority="high">' . "\n";
}
}
}
// ─────────────────────────────────────────────────────────────────────
// PRELOAD LCP: front page
// ───────────────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────────────
if ( is_front_page() ) { if ( is_front_page() ) {
$post_id = get_the_ID(); $post_id = get_the_ID();
@ -91,8 +104,7 @@ if ( is_front_page() ) {
<img width="136" height="40" <img width="136" height="40"
src="<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/logo-svg.svg" src="<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/logo-svg.svg"
alt="<?php esc_attr_e('Декарт — частная школа в Щелково', 'dekart'); ?>" alt="<?php esc_attr_e('Декарт — частная школа в Щелково', 'dekart'); ?>"
loading="eager" loading="eager">
fetchpriority="high">
</a> </a>
<div class="mobile icon-links"> <div class="mobile icon-links">

View File

@ -818,7 +818,7 @@ $metrics = [
script.onerror = function() { console.warn("Yandex Maps API failed to load"); }; script.onerror = function() { console.warn("Yandex Maps API failed to load"); };
script.onload = function() { script.onload = function() {
ymaps.ready(function() { ymaps.ready(function() {
var coords = <?php echo $contact_location ? '[' . esc_js($contact_location) . ']' : '[55.76, 37.64]'; ?>; var coords = <?php echo $opt_coords ? '[' . esc_js($opt_coords) . ']' : '[55.76, 37.64]'; ?>;
var map = new ymaps.Map("ya-map", { var map = new ymaps.Map("ya-map", {
center: coords, center: coords,
zoom: 16 zoom: 16
@ -828,7 +828,7 @@ $metrics = [
var placemark = new ymaps.Placemark( var placemark = new ymaps.Placemark(
coords, coords,
{ iconContent: "<?php echo esc_js($contact_location_text); ?>" }, { iconContent: "<?php echo esc_js($opt_name); ?>" },
{ preset: "islands#redStretchyIcon" } { preset: "islands#redStretchyIcon" }
); );
map.geoObjects.add(placemark); map.geoObjects.add(placemark);

View File

@ -1,17 +1,9 @@
<?php <?php
/** /* Template Name: Подготовка к школе (Bento 2026) */
* Template Name: Подготовка к школе (Bento 2026)
*
* Асимметричная Bento-сетка. Нейрокопирайтинг.
* CSS: main.css (секции Bento/Social/Guarantee) + podgotovka-k-shkole.css (переопределения 2026)
*
* @package Dekart
*/
get_header(); get_header();
$post_id = get_the_ID(); $post_id = get_the_ID();
// ─── ДАННЫЕ ОРГАНИЗАЦИИ ───
$opt_address = get_option( 'branch_address' ) ?: carbon_get_theme_option( 'site_address' ) ?: carbon_get_post_meta( $post_id, 'contact_address' ) ?: ''; $opt_address = get_option( 'branch_address' ) ?: carbon_get_theme_option( 'site_address' ) ?: carbon_get_post_meta( $post_id, 'contact_address' ) ?: '';
$opt_coords = get_option( 'branch_coords' ) ?: carbon_get_post_meta( $post_id, 'contact_location' ) ?: ''; $opt_coords = get_option( 'branch_coords' ) ?: carbon_get_post_meta( $post_id, 'contact_location' ) ?: '';
$opt_phone = get_option( 'branch_phone' ) ?: carbon_get_theme_option( 'site_phone' ) ?: carbon_get_post_meta( $post_id, 'contact_tel' ) ?: ''; $opt_phone = get_option( 'branch_phone' ) ?: carbon_get_theme_option( 'site_phone' ) ?: carbon_get_post_meta( $post_id, 'contact_tel' ) ?: '';
@ -22,9 +14,6 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<main class="page page-pksh"> <main class="page page-pksh">
<!-- ════════════════════════════════════════════ -->
<!-- Breadcrumbs (outside hero) -->
<!-- ════════════════════════════════════════════ -->
<?php <?php
$branch_city_prep = get_option( 'branch_city_prep', 'в Щёлково' ); $branch_city_prep = get_option( 'branch_city_prep', 'в Щёлково' );
$branch_city_clean = str_replace( array( 'в ', 'В ' ), '', $branch_city_prep ); $branch_city_clean = str_replace( array( 'в ', 'В ' ), '', $branch_city_prep );
@ -36,9 +25,6 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
$hero_phone_clean = preg_replace( '/[^0-9+]/', '', $opt_phone ); $hero_phone_clean = preg_replace( '/[^0-9+]/', '', $opt_phone );
?> ?>
<!-- ════════════════════════════════════════════ -->
<!-- Breadcrumbs -->
<!-- ════════════════════════════════════════════ -->
<div class="container breadcrumbs-wrapper"> <div class="container breadcrumbs-wrapper">
<ul class="breadcrumbs" itemscope itemtype="https://schema.org/BreadcrumbList" role="navigation" aria-label="Breadcrumb"> <ul class="breadcrumbs" itemscope itemtype="https://schema.org/BreadcrumbList" role="navigation" aria-label="Breadcrumb">
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
@ -54,17 +40,12 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</ul> </ul>
</div> </div>
<!-- ════════════════════════════════════════════ -->
<!-- Hero (ds-hero: dark bg, white grid) -->
<!-- ════════════════════════════════════════════ -->
<section class="section-bg ds-hero" data-bg="hero" id="ds-hero" aria-label="Подготовка к школе"> <section class="section-bg ds-hero" data-bg="hero" id="ds-hero" aria-label="Подготовка к школе">
<div class="ds-container"> <div class="ds-container">
<div class="ds-hero__inner"> <div class="ds-hero__inner">
<!-- Left: Content -->
<div class="ds-hero__content"> <div class="ds-hero__content">
<!-- Address pill -->
<div class="ds-hero__address"> <div class="ds-hero__address">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/>
@ -73,15 +54,12 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<span><?php echo esc_html( $opt_address ?: 'ул. Талсинская, 24' ); ?> — центр <?php echo esc_html( $branch_city_clean ?: 'Щёлково' ); ?></span> <span><?php echo esc_html( $opt_address ?: 'ул. Талсинская, 24' ); ?> — центр <?php echo esc_html( $branch_city_clean ?: 'Щёлково' ); ?></span>
</div> </div>
<!-- H1 -->
<h1 class="ds-hero__h1"><?php echo esc_html( $h1_hero ?: 'Подготовка к школе в Щёлково' ); ?></h1> <h1 class="ds-hero__h1"><?php echo esc_html( $h1_hero ?: 'Подготовка к школе в Щёлково' ); ?></h1>
<!-- Subtitle -->
<?php if ( '' !== $subtitle_hero ) : ?> <?php if ( '' !== $subtitle_hero ) : ?>
<p class="ds-hero__subtitle"><?php echo esc_html( $subtitle_hero ); ?></p> <p class="ds-hero__subtitle"><?php echo esc_html( $subtitle_hero ); ?></p>
<?php endif; ?> <?php endif; ?>
<!-- Metrics (из pksh_social_counters) -->
<?php if ( ! empty( $hero_metrics ) && is_array( $hero_metrics ) ) : ?> <?php if ( ! empty( $hero_metrics ) && is_array( $hero_metrics ) ) : ?>
<div class="ds-hero__metrics"> <div class="ds-hero__metrics">
<?php foreach ( $hero_metrics as $metric ) : <?php foreach ( $hero_metrics as $metric ) :
@ -97,23 +75,19 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
<?php endif; ?> <?php endif; ?>
<!-- Rating badge -->
<div class="ds-hero__rating-badge"> <div class="ds-hero__rating-badge">
<span class="ds-hero__rating-stars" aria-hidden="true">★★★★★</span> <span class="ds-hero__rating-stars" aria-hidden="true">★★★★★</span>
<span class="ds-hero__rating-text">4.9 из 5 на основе <?php echo esc_html( $ext_review_count ); ?> отзывов на внешних площадках</span> <span class="ds-hero__rating-text">4.9 из 5 на основе <?php echo esc_html( $ext_review_count ); ?> отзывов на внешних площадках</span>
</div> </div>
<!-- CTA -->
<button class="ds-hero__cta-btn open-bitrix-form">Записаться на бесплатное пробное</button> <button class="ds-hero__cta-btn open-bitrix-form">Записаться на бесплатное пробное</button>
<!-- Phone -->
<?php if ( $opt_phone ) : ?> <?php if ( $opt_phone ) : ?>
<p class="ds-hero__phone">Или позвоните: <a href="tel:<?php echo esc_attr( $hero_phone_clean ); ?>" aria-label="Позвонить в школу Декарт: <?php echo esc_attr( $opt_phone ); ?>"><?php echo esc_html( $opt_phone ); ?></a></p> <p class="ds-hero__phone">Или позвоните: <a href="tel:<?php echo esc_attr( $hero_phone_clean ); ?>" aria-label="Позвонить в школу Декарт: <?php echo esc_attr( $opt_phone ); ?>"><?php echo esc_html( $opt_phone ); ?></a></p>
<?php endif; ?> <?php endif; ?>
</div> </div>
<!-- Right: Visual -->
<div class="ds-hero__visual"> <div class="ds-hero__visual">
<div class="ds-hero__visual-glow" aria-hidden="true"></div> <div class="ds-hero__visual-glow" aria-hidden="true"></div>
@ -136,7 +110,6 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<div class="ds-hero__photo-ring" aria-hidden="true"></div> <div class="ds-hero__photo-ring" aria-hidden="true"></div>
</div> </div>
<!-- Floating badges -->
<div class="ds-hero__float ds-hero__float--1"> <div class="ds-hero__float ds-hero__float--1">
<span class="ds-hero__float-icon">👩‍🏫</span> <span class="ds-hero__float-icon">👩‍🏫</span>
<span>Педагоги с опытом 15+ лет</span> <span>Педагоги с опытом 15+ лет</span>
@ -154,13 +127,11 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<span>Рейтинг 4.8</span> <span>Рейтинг 4.8</span>
</div> </div>
<!-- Decorative shapes -->
<div class="ds-hero__deco ds-hero__deco--1" aria-hidden="true"></div> <div class="ds-hero__deco ds-hero__deco--1" aria-hidden="true"></div>
<div class="ds-hero__deco ds-hero__deco--2" aria-hidden="true"></div> <div class="ds-hero__deco ds-hero__deco--2" aria-hidden="true"></div>
<div class="ds-hero__deco ds-hero__deco--3" aria-hidden="true"></div> <div class="ds-hero__deco ds-hero__deco--3" aria-hidden="true"></div>
<div class="ds-hero__deco ds-hero__deco--4" aria-hidden="true"></div> <div class="ds-hero__deco ds-hero__deco--4" aria-hidden="true"></div>
<!-- Sparkle particles (обёртка для nth-child) -->
<div class="ds-hero__sparkles" aria-hidden="true"> <div class="ds-hero__sparkles" aria-hidden="true">
<div class="ds-hero__sparkle"></div> <div class="ds-hero__sparkle"></div>
<div class="ds-hero__sparkle"></div> <div class="ds-hero__sparkle"></div>
@ -174,9 +145,6 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- Social Proof Confidence counters (4 cards) -->
<!-- ════════════════════════════════════════════ -->
<?php <?php
$social_counters = carbon_get_post_meta( $post_id, 'pksh_social_counters' ); $social_counters = carbon_get_post_meta( $post_id, 'pksh_social_counters' );
$social_icons = array( '🎓', '📅', '⭐', '👩‍🏫' ); $social_icons = array( '🎓', '📅', '⭐', '👩‍🏫' );
@ -201,7 +169,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
<?php endforeach; ?> <?php endforeach; ?>
<?php else : ?> <?php else : ?>
<!-- Fallback, если поля не заполнены -->
<div class="social-counter"> <div class="social-counter">
<div class="social-counter__top"></div> <div class="social-counter__top"></div>
<div class="social-counter__body"> <div class="social-counter__body">
@ -239,9 +207,27 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ --> <section class="bento pksh-section" aria-label="Гарантия">
<!-- Micro-Commitment: Checklist download --> <div class="bento__full">
<!-- ════════════════════════════════════════════ --> <div class="guarantee-hero">
<div class="guarantee-hero__badges">
<div class="guarantee-hero__shield">🛡️</div>
</div>
<div class="guarantee-hero__content">
<h2 class="bento-h2">Ваш ребёнок начнёт читать через 3 недели</h2>
<p class="guarantee-hero__text">Или <strong>мы вернём деньги</strong> и продолжим обучение бесплатно, пока не дойдём до результата. Мы частная школа <strong>с гослицензией</strong>, а не кружок. Отвечаем за результат.</p>
</div>
<nav class="pksh-anchor-nav" aria-label="Навигация по странице">
<a href="#how-it-works" class="pksh-anchor-link">Как проходят занятия</a>
<a href="#results" class="pksh-anchor-link">Результаты</a>
<a href="#programs" class="pksh-anchor-link">Программы</a>
<a href="#teachers" class="pksh-anchor-link">Преподаватели</a>
<a href="#faq" class="pksh-anchor-link">Вопросы</a>
</nav>
</div>
</div>
</section>
<section class="bento pksh-section" aria-label="Скачать чек-лист"> <section class="bento pksh-section" aria-label="Скачать чек-лист">
<div class="bento__full bento-card bento-card--checklist"> <div class="bento__full bento-card bento-card--checklist">
<div class="micro-commit"> <div class="micro-commit">
@ -277,35 +263,8 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- Guarantee Hero + Navigation -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section" aria-label="Гарантия">
<div class="bento__full">
<div class="guarantee-hero">
<div class="guarantee-hero__badges">
<div class="guarantee-hero__shield">🛡️</div>
</div>
<div class="guarantee-hero__content">
<h2 class="bento-h2">Ваш ребёнок начнёт читать через 3 недели</h2>
<p class="guarantee-hero__text">Или <strong>мы вернём деньги</strong> и продолжим обучение бесплатно, пока не дойдём до результата. Мы частная школа <strong>с гослицензией</strong>, а не кружок. Отвечаем за результат.</p>
</div>
<nav class="pksh-anchor-nav" aria-label="Навигация по странице">
<a href="#how-it-works" class="pksh-anchor-link">Как проходят занятия</a>
<a href="#results" class="pksh-anchor-link">Результаты</a>
<a href="#programs" class="pksh-anchor-link">Программы</a>
<a href="#teachers" class="pksh-anchor-link">Преподаватели</a>
<a href="#faq" class="pksh-anchor-link">Вопросы</a>
</nav>
</div>
</div>
</section>
<!-- ════════════════════════════════════════════ -->
<!-- Bento Row 1: How it works + Why us -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section" id="how-it-works" aria-label="Как проходят занятия"> <section class="bento pksh-section" id="how-it-works" aria-label="Как проходят занятия">
<div class="bento__full" style="text-align: center;"> <div class="bento__full section-header--centered">
<span class="bento-label">Как проходят занятия</span> <span class="bento-label">Как проходят занятия</span>
<h2 class="bento-h2">30 минут игры 1 шаг к школе</h2> <h2 class="bento-h2">30 минут игры 1 шаг к школе</h2>
<p class="bento-p">Каждое занятие построено так, что ребёнок <strong>сам хочет</strong> вернуться. Без скучных прописей только игровая методика и смена активностей каждые 7 минут.</p> <p class="bento-p">Каждое занятие построено так, что ребёнок <strong>сам хочет</strong> вернуться. Без скучных прописей только игровая методика и смена активностей каждые 7 минут.</p>
@ -381,25 +340,54 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- CTA: Бесплатное тестирование + занятие -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section" aria-label="Запись на тестирование"> <section class="bento pksh-section" aria-label="Запись на тестирование">
<div class="bento__full"> <div class="bento__full">
<div class="cta-test"> <div class="cta-test">
<div class="cta-test__badge">Бесплатно</div> <div class="cta-test__badge">Бесплатно</div>
<h2 class="bento-h2 cta-test__title">Приходите на пробное увидите результат своими глазами</h2> <h2 class="bento-h2 cta-test__title">Приходите на пробное увидите результат своими глазами</h2>
<p class="cta-test__text">Запишитесь на <strong>бесплатное расширенное тестирование</strong> и полноценное занятие. Педагог проверит готовность ребёнка к школе, покажет сильные стороны и даст план подготовки. <strong>Всего за 1 визит</strong> без очередей и ожидания.</p> <p class="cta-test__text">Запишитесь на <strong>бесплатное расширенное тестирование</strong> и полноценное занятие. Педагог проверит готовность ребёнка к школе, покажет сильные стороны и даст план подготовки. <strong>Всего за 1 визит</strong> без очередей и ожидания.</p>
<?php
$timer_ts = function_exists('dekart_get_honest_deadline') ? (int) dekart_get_honest_deadline() : 0;
if ($timer_ts > 0) :
?>
<div class="honest-timer">
<span class="honest-timer__label">Цены действуют до конца месяца:</span>
<div class="honest-timer__digits">
<span class="honest-timer__unit">
<span class="honest-timer__num" data-timer="d">00</span>
<span class="honest-timer__unit-label">дн</span>
</span>
<span class="honest-timer__sep">:</span>
<span class="honest-timer__unit">
<span class="honest-timer__num" data-timer="h">00</span>
<span class="honest-timer__unit-label">ч</span>
</span>
<span class="honest-timer__sep">:</span>
<span class="honest-timer__unit">
<span class="honest-timer__num" data-timer="m">00</span>
<span class="honest-timer__unit-label">мин</span>
</span>
<span class="honest-timer__sep">:</span>
<span class="honest-timer__unit">
<span class="honest-timer__num" data-timer="s">00</span>
<span class="honest-timer__unit-label">сек</span>
</span>
</div>
</div>
<script>window.__HONEST_DEADLINE=<?php echo $timer_ts; ?>;</script>
<script>
!function(){var e=window.__HONEST_DEADLINE;if(!e)return;e*=1e3;var t=document.querySelectorAll('[data-timer]');if(!t.length)return;var n={};t.forEach(function(r){n[r.getAttribute('data-timer')]=r});var o=function(r){return r<10?'0'+r:''+r};!function r(){var t=e-Date.now();if(t<=0){for(var u in n)n[u].textContent='00';return}n.d.textContent=o(Math.floor(t/864e5)),n.h.textContent=o(Math.floor(t%864e5/36e5)),n.m.textContent=o(Math.floor(t%36e5/6e4)),n.s.textContent=o(Math.floor(t%6e4/1e3)),requestAnimationFrame(r)}()}();
</script>
<?php endif; ?>
<button class="btn-primary btn-primary--large open-bitrix-form cta-test__btn">Записаться на бесплатное тестирование</button> <button class="btn-primary btn-primary--large open-bitrix-form cta-test__btn">Записаться на бесплатное тестирование</button>
</div> </div>
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- Bento Row 2: Results / Data -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section" id="results" aria-label="Результаты учеников"> <section class="bento pksh-section" id="results" aria-label="Результаты учеников">
<div class="bento__full bento-card bento-card--highlight-results" style="text-align: center;"> <div class="bento__full bento-card bento-card--highlight-results section-header--centered">
<span class="bento-label bento-label--light">Результаты наших учеников</span> <span class="bento-label bento-label--light">Результаты наших учеников</span>
<h2 class="bento-h2 bento-h2--light">К чему мы приводим детей</h2> <h2 class="bento-h2 bento-h2--light">К чему мы приводим детей</h2>
<p class="bento-p bento-p--light">95% наших выпускников поступают в школы и лицеи Щёлкова без стресса. Первые результаты через 3 недели.</p> <p class="bento-p bento-p--light">95% наших выпускников поступают в школы и лицеи Щёлкова без стресса. Первые результаты через 3 недели.</p>
@ -424,11 +412,8 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- Bento Row 3: Programs / Курсы -->
<!-- ════════════════════════════════════════════ -->
<?php <?php
// Данные из админки (CF)
$base_name = carbon_get_post_meta( $post_id, 'pksh_prog_base_name' ) ?: 'Уверенный старт'; $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_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_schedule = carbon_get_post_meta( $post_id, 'pksh_prog_base_schedule' ) ?: 'вт, чт — 18:0019:30';
@ -443,93 +428,95 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
$prem_price_single = carbon_get_post_meta( $post_id, 'pksh_prog_prem_price_single' ) ?: '1 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 места в группе'; $prem_urgency = carbon_get_post_meta( $post_id, 'pksh_prog_prem_urgency' ) ?: 'Осталось 3 места в группе';
?> ?>
<section class="bento pksh-section" aria-label="Сравнение">
<div class="bento__full section-header--centered">
<span class="bento-label">Почему мы</span>
<h2 class="bento-h2">Как мы отличаемся от репетитора и обычного кружка</h2>
<p class="bento-p">Мы частная школа с гослицензией, а не кружок. Занятия ведут действующие учителя начальных классов.
Результат гарантируем договором.</p>
</div>
<div class="lw-scroll-x pksh-compare">
<div class="pksh-swipe-hint" aria-hidden="true">
<span class="pksh-swipe-hint__arrow">👇</span>
<span class="pksh-swipe-hint__text">Листайте, чтобы сравнить</span>
</div>
<table class="pksh-compare__table">
<thead>
<tr>
<th class="pksh-compare__label-cell" scope="col">Критерий</th>
<th class="pksh-compare__highlight" scope="col">
<span class="pksh-compare__col-title">Декарт</span>
<span class="pksh-compare__col-badge">Частная школа</span>
</th>
<th scope="col">Репетитор</th>
<th scope="col">Обычный кружок</th>
</tr>
</thead>
<tbody>
<tr>
<td class="pksh-compare__label-cell">Гослицензия</td>
<td class="pksh-compare__highlight"><span class="pksh-compare__yes"></span> Есть</td>
<td><span class="pksh-compare__no"></span> Нет</td>
<td><span class="pksh-compare__no"></span> Чаще нет</td>
</tr>
<tr>
<td class="pksh-compare__label-cell">Формат занятий</td>
<td class="pksh-compare__highlight">Группы до 10 человек, индивидуальный подход</td>
<td>Индивидуально, но без сверстников</td>
<td>Группы 1520+ человек</td>
</tr>
<tr>
<td class="pksh-compare__label-cell">Гарантия результата</td>
<td class="pksh-compare__highlight"><span class="pksh-compare__yes"></span> Не начнёт читать вернём деньги</td>
<td><span class="pksh-compare__no"></span> Нет гарантии</td>
<td><span class="pksh-compare__no"></span> Нет гарантии</td>
</tr>
<tr>
<td class="pksh-compare__label-cell">Цена за 1 занятие</td>
<td class="pksh-compare__highlight">от 1 000 </td>
<td><span class="pksh-compare__draft">[черновик]</span> 1 5002 500 </td>
<td><span class="pksh-compare__draft">[черновик]</span> 8001 200 </td>
</tr>
<tr>
<td class="pksh-compare__label-cell">Педагоги</td>
<td class="pksh-compare__highlight">Действующие учителя начальных классов</td>
<td>Часто студенты или пенсионеры</td>
<td>Педагоги доп. образования</td>
</tr>
<tr>
<td class="pksh-compare__label-cell">Итоговый документ</td>
<td class="pksh-compare__highlight"><span class="pksh-compare__yes"></span> Характеристика готовности к школе</td>
<td><span class="pksh-compare__no"></span> Нет</td>
<td><span class="pksh-compare__no"></span> Нет</td>
</tr>
</tbody>
</table>
<p class="pksh-compare__footnote">
<strong>Важно:</strong> Данные по репетиторам и кружкам рыночная оценка, требуют уточнения.
Пожалуйста, подтвердите или скорректируйте цифры у руководителя.
</p>
</div>
</section>
<section class="bento pksh-section" id="programs" aria-label="Программы подготовки"> <section class="bento pksh-section" id="programs" aria-label="Программы подготовки">
<div class="bento__full" style="text-align: center;"> <div class="bento__full section-header--centered">
<span class="bento-label">Программы</span> <span class="bento-label">Программы</span>
<h2 class="bento-h2">Выберите формат подготовки</h2> <h2 class="bento-h2">Выберите формат подготовки</h2>
<p class="bento-p">Все программы ведут действующие педагоги начальных классов. <p class="bento-p">Все программы ведут действующие педагоги начальных классов.
Группы до 8 человек каждому ребёнку уделяем внимание.</p> Группы до 10 человек каждому ребёнку уделяем внимание.</p>
<div class="pksh-swipe-hint" aria-hidden="true">
<span class="pksh-swipe-hint__arrow">👇</span>
<span class="pksh-swipe-hint__text">Листайте, чтобы сравнить программы</span>
</div>
<div class="programs-grid"> <div class="programs-grid">
<!-- ═══ Базовая: Уверенный старт ═══ -->
<div class="prog-card prog-card--base">
<div class="prog-card__header">
<div class="prog-card__header-badge">Первое занятие бесплатно</div>
<div class="prog-card__header-row">
<div class="prog-card__icon"></div>
<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>
<div class="prog-card__body">
<!-- Цена сразу под шапкой -->
<div class="prog-card__pricing">
<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>
<!-- Результат с гарантией -->
<div class="prog-card__result">
<span class="prog-card__result-icon">🎯</span>
<span><strong>Через 2 месяца</strong> осознанное чтение по слогам</span>
</div>
<!-- Что получит ребёнок -->
<div class="prog-card__block">
<div class="prog-card__block-title">Что получит ребёнок</div>
<ul class="prog-card__checklist">
<li>Чтение по слогам, письмо, математика готовность к 1-му классу</li>
<li>Поднимает руку, отвечает у доски без страха</li>
<li>Ребёнок идёт на занятия с удовольствием игровая методика</li>
<li>Все материалы и пособия включены в стоимость</li>
</ul>
</div>
<!-- Расписание + Структура одним блоком -->
<div class="prog-card__block">
<div class="prog-card__block-title">Расписание</div>
<div class="prog-card__schedule"><?php echo esc_html( $base_schedule ); ?></div>
</div>
<div class="prog-card__block">
<div class="prog-card__block-title">Структура занятия</div>
<div class="prog-card__tags">
<span class="prog-card__tag">Нейрогимнастика</span>
<span class="prog-card__tag">Математика и логика</span>
<span class="prog-card__tag">Активная перемена</span>
<span class="prog-card__tag">Чтение и письмо</span>
<span class="prog-card__tag">Творчество</span>
</div>
</div>
<!-- Доверие -->
<div class="prog-card__trust">
<span>👥 до 8 детей</span>
<span>🎂 57 лет</span>
<span>📍 очно, Щёлково</span>
<span>👩‍🏫 педагог: стаж 12 лет</span>
</div>
<!-- Соцдок-во -->
<div class="prog-card__social-proof">
<span> 4.8 рейтинг программы</span>
<span>🎓 500+ детей уже прошли</span>
</div>
<!-- Кнопка -->
<button class="prog-card__btn open-bitrix-form">Попробовать бесплатно</button>
<div class="prog-card__footnote">Тестирование и первое занятие бесплатно. Результат увидите до оплаты.</div>
</div>
</div>
<!-- ═══ Расширенная: Результат за 3 месяца ═══ -->
<div class="prog-card prog-card--premium"> <div class="prog-card prog-card--premium">
<div class="prog-card__badge">Популярный&nbsp;выбор · 70% родителей выбирают эту программу</div>
<div class="prog-card__header"> <div class="prog-card__header">
<div class="prog-card__header-badge">Первое занятие бесплатно</div> <div class="prog-card__header-badge">Первое занятие бесплатно</div>
<div class="prog-card__header-row"> <div class="prog-card__header-row">
@ -539,10 +526,11 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<div class="prog-card__subname"><?php echo esc_html( $prem_subname ); ?></div> <div class="prog-card__subname"><?php echo esc_html( $prem_subname ); ?></div>
</div> </div>
</div> </div>
<div class="prog-card__popular">Популярный&nbsp;выбор · 70% родителей выбирают эту программу</div>
</div> </div>
<div class="prog-card__body"> <div class="prog-card__body">
<!-- Цена сразу под шапкой -->
<div class="prog-card__pricing"> <div class="prog-card__pricing">
<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 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-sub"><?php echo esc_html( $prem_price_single ); ?> за занятие — дешевле репетитора</div>
@ -550,13 +538,11 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<div class="prog-card__urgency"><?php echo esc_html( $prem_urgency ); ?></div> <div class="prog-card__urgency"><?php echo esc_html( $prem_urgency ); ?></div>
</div> </div>
<!-- Результат с гарантией -->
<div class="prog-card__result"> <div class="prog-card__result">
<span class="prog-card__result-icon">🎯</span> <span class="prog-card__result-icon">🎯</span>
<span><strong>Через 2 месяца</strong> чтение целыми словами и счёт до 20</span> <span><strong>Через 2 месяца</strong> чтение целыми словами и счёт до 20</span>
</div> </div>
<!-- Что получит ребёнок -->
<div class="prog-card__block"> <div class="prog-card__block">
<div class="prog-card__block-title">Что получит ребёнок</div> <div class="prog-card__block-title">Что получит ребёнок</div>
<ul class="prog-card__checklist"> <ul class="prog-card__checklist">
@ -569,19 +555,18 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<li class="prog-card__checklist--plus"> Творческие задания и проекты развиваем мышление, а не память</li> <li class="prog-card__checklist--plus"> Творческие задания и проекты развиваем мышление, а не память</li>
</ul> </ul>
</div> </div>
<!-- Сравнение с базовой -->
<div class="prog-card__compare"> <div class="prog-card__compare">
<span class="prog-card__compare-icon">📈</span> <span class="prog-card__compare-icon">📈</span>
<span><strong>На 50% больше занятий</strong> результат наступает на 3 недели раньше, чем при стандартной нагрузке</span> <span><strong>На 50% больше занятий</strong> результат наступает на 3 недели раньше, чем при стандартной нагрузке</span>
</div> </div>
<!-- Расписание + Структура --> <div class="prog-card__schedule-wrap">
<div class="prog-card__block">
<div class="prog-card__block-title">Расписание</div> <div class="prog-card__block-title">Расписание</div>
<div class="prog-card__schedule"><?php echo esc_html( $prem_schedule ); ?></div> <div class="prog-card__schedule"><?php echo esc_html( $prem_schedule ); ?></div>
</div> </div>
<div class="prog-card__block"> <div class="prog-card__struct-wrap">
<div class="prog-card__block-title">Структура занятия</div> <div class="prog-card__block-title">Структура занятия</div>
<div class="prog-card__tags"> <div class="prog-card__tags">
<span class="prog-card__tag">Нейрогимнастика</span> <span class="prog-card__tag">Нейрогимнастика</span>
@ -592,22 +577,92 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</div> </div>
<!-- Доверие -->
<div class="prog-card__trust"> <div class="prog-card__trust">
<span>👥 до 8 детей</span> <span>👥 до 10 детей</span>
<span>🎂 57 лет</span> <span>🎂 57 лет</span>
<span>📍 очно, Щёлково</span> <span>📍 очно, Щёлково</span>
<span>👩‍🏫 педагог: стаж 12 лет</span> <span>👩‍🏫 педагог: стаж 12 лет</span>
</div> </div>
<!-- Соцдок-во -->
<div class="prog-card__social-proof"> <div class="prog-card__social-proof">
<span> 4.8 рейтинг программы</span> <span class="prog-card__rating">4.8 рейтинг программы</span>
<span>🎓 500+ детей уже прошли</span> <span class="prog-card__graduates">🎓 500+ детей уже прошли</span>
</div> </div>
<!-- Кнопка --> <div class="prog-card__btn-wrap">
<button class="prog-card__btn open-bitrix-form">Попробовать бесплатно</button> <button class="prog-card__btn open-bitrix-form">Попробовать бесплатно</button>
</div>
<div class="prog-card__footnote">Тестирование и первое занятие бесплатно. Результат увидите до оплаты.</div>
</div>
</div>
<div class="prog-card prog-card--base">
<div class="prog-card__header">
<div class="prog-card__header-badge">Первое занятие бесплатно</div>
<div class="prog-card__header-row">
<div class="prog-card__icon"></div>
<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>
<div class="prog-card__body">
<div class="prog-card__pricing">
<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>
<div class="prog-card__result">
<span class="prog-card__result-icon">🎯</span>
<span><strong>Через 2 месяца</strong> осознанное чтение по слогам</span>
</div>
<div class="prog-card__block">
<div class="prog-card__block-title">Что получит ребёнок</div>
<ul class="prog-card__checklist">
<li>Чтение по слогам, письмо, математика готовность к 1-му классу</li>
<li>Поднимает руку, отвечает у доски без страха</li>
<li>Ребёнок идёт на занятия с удовольствием игровая методика</li>
<li>Все материалы и пособия включены в стоимость</li>
</ul>
</div>
<div class="prog-card__schedule-wrap">
<div class="prog-card__block-title">Расписание</div>
<div class="prog-card__schedule"><?php echo esc_html( $base_schedule ); ?></div>
</div>
<div class="prog-card__struct-wrap">
<div class="prog-card__block-title">Структура занятия</div>
<div class="prog-card__tags">
<span class="prog-card__tag">Нейрогимнастика</span>
<span class="prog-card__tag">Математика и логика</span>
<span class="prog-card__tag">Активная перемена</span>
<span class="prog-card__tag">Чтение и письмо</span>
<span class="prog-card__tag">Творчество</span>
</div>
</div>
<div class="prog-card__trust">
<span>👥 до 10 детей</span>
<span>🎂 57 лет</span>
<span>📍 очно, Щёлково</span>
<span>👩‍🏫 педагог: стаж 12 лет</span>
</div>
<div class="prog-card__social-proof">
<span class="prog-card__rating">4.8 рейтинг программы</span>
<span class="prog-card__graduates">🎓 500+ детей уже прошли</span>
</div>
<div class="prog-card__btn-wrap">
<button class="prog-card__btn open-bitrix-form">Попробовать бесплатно</button>
</div>
<div class="prog-card__footnote">Тестирование и первое занятие бесплатно. Результат увидите до оплаты.</div> <div class="prog-card__footnote">Тестирование и первое занятие бесплатно. Результат увидите до оплаты.</div>
</div> </div>
</div> </div>
@ -615,19 +670,18 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- Bento Row 4: Schedule & Price -->
<!-- ════════════════════════════════════════════ -->
<?php get_template_part('template-parts/block-price'); ?> <?php get_template_part('template-parts/block-price'); ?>
<!-- ════════════════════════════════════════════ -->
<!-- Bento Row 4: Teachers (camp-style cards) -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section pksh-section--teachers" id="teachers" aria-label="Преподаватели"> <section class="bento pksh-section pksh-section--teachers" id="teachers" aria-label="Преподаватели">
<div class="bento__full" style="text-align: center;"> <div class="bento__full section-header--centered">
<span class="bento-label">Преподаватели</span> <span class="bento-label">Преподаватели</span>
<h2 class="bento-h2">Наши преподаватели практикующие педагоги</h2> <h2 class="bento-h2">Наши преподаватели практикующие педагоги</h2>
<p class="bento-p">Каждый педагог имеет опыт работы с дошкольниками от 5 лет. Все действующие учителя начальных классов с высшим образованием.</p> <p class="bento-p">Каждый педагог имеет опыт работы с дошкольниками от 5 лет. Все действующие учителя начальных классов с высшим образованием.</p>
<div class="pksh-swipe-hint" aria-hidden="true">
<span class="pksh-swipe-hint__arrow">👇</span>
<span class="pksh-swipe-hint__text">Листайте, чтобы познакомиться с преподавателями</span>
</div>
</div> </div>
<div class="bento__full"> <div class="bento__full">
<div class="pksh-teachers__scroll-x"> <div class="pksh-teachers__scroll-x">
@ -640,11 +694,9 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
$t_subj = $item['teacher_subject'] ?? ''; $t_subj = $item['teacher_subject'] ?? '';
$t_about = $item['teacher_about'] ?? ''; $t_about = $item['teacher_about'] ?? '';
// Получаем данные из CPT teacher
$t_post = $t_id ? get_post($t_id) : null; $t_post = $t_id ? get_post($t_id) : null;
$t_name = $t_post ? $t_post->post_title : '—'; $t_name = $t_post ? $t_post->post_title : '—';
// Фото: _teacher_avatar или _thumbnail_id
$t_photo = 0; $t_photo = 0;
if ($t_post) { if ($t_post) {
$t_photo = get_post_meta($t_id, '_teacher_avatar', true); $t_photo = get_post_meta($t_id, '_teacher_avatar', true);
@ -653,12 +705,10 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
} }
} }
// Subject fallback: сначала из CF, потом из CPT _teacher_direction
if (empty($t_subj) && $t_post) { if (empty($t_subj) && $t_post) {
$t_subj = get_post_meta($t_id, '_teacher_direction', true); $t_subj = get_post_meta($t_id, '_teacher_direction', true);
} }
// About fallback
if (empty($t_about) && $t_post) { if (empty($t_about) && $t_post) {
$t_about = get_post_meta($t_id, '_teacher_about', true); $t_about = get_post_meta($t_id, '_teacher_about', true);
} }
@ -717,9 +767,6 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- Bento Row 5: Guarantee (standalone) -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section pksh-section--alt" id="guarantee" aria-label="Гарантия"> <section class="bento pksh-section pksh-section--alt" id="guarantee" aria-label="Гарантия">
<div class="bento__full"> <div class="bento__full">
<div class="guarantee-block guarantee-block--centered"> <div class="guarantee-block guarantee-block--centered">
@ -734,11 +781,8 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- Bento Row 6: FAQ (на всю ширину, section-bg) -->
<!-- ════════════════════════════════════════════ -->
<section class="section-bg faq-section" id="faq" aria-label="Вопросы и ответы"> <section class="section-bg faq-section" id="faq" aria-label="Вопросы и ответы">
<div class="container"> <div class="bento">
<h2 class="faq-section__title">Часто задаваемые вопросы</h2> <h2 class="faq-section__title">Часто задаваемые вопросы</h2>
<?php <?php
$faq_items = carbon_get_post_meta($post_id, 'pksh_faq_items'); $faq_items = carbon_get_post_meta($post_id, 'pksh_faq_items');
@ -778,11 +822,20 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
<?php endif; endif; ?> <?php endif; endif; ?>
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- Reviews (lw-card inline, camp-style) --> <section class="bento pksh-section pksh-reviews" id="pksh-reviews" aria-label="Отзывы">
<!-- ════════════════════════════════════════════ --> <div class="bento__full section-header--centered">
<section class="pksh-reviews reviews-cards" id="pksh-reviews" aria-label="Отзывы"> <span class="bento-label">Отзывы</span>
<h2 class="bento-h2">Что говорят родители</h2> <h2 class="bento-h2">Что говорят родители</h2>
<p class="bento-p">Родители доверяют нам самое главное делятся впечатлениями о подготовке к школе</p>
<div class="pksh-swipe-hint" aria-hidden="true">
<span class="pksh-swipe-hint__arrow">👇</span>
<span class="pksh-swipe-hint__text">Листайте, чтобы читать ещё отзывы</span>
</div>
</div>
<div class="bento__full">
<?php <?php
$review_items = carbon_get_post_meta($post_id, 'pksh_reviews_list'); $review_items = carbon_get_post_meta($post_id, 'pksh_reviews_list');
@ -858,9 +911,9 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
<?php endif; ?> <?php endif; ?>
<?php endif; ?> <?php endif; ?>
</div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section" aria-label="Почему нам доверяют"> <section class="bento pksh-section" aria-label="Почему нам доверяют">
<div class="bento__full"> <div class="bento__full">
<div class="trust-authority"> <div class="trust-authority">
@ -886,9 +939,6 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- External Reviews Social Proof -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section" aria-label="Отзывы на внешних площадках"> <section class="bento pksh-section" aria-label="Отзывы на внешних площадках">
<div class="bento__full"> <div class="bento__full">
<div class="external-reviews"> <div class="external-reviews">
@ -919,16 +969,12 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
</div> </div>
</section> </section>
<!-- ════════════════════════════════════════════ -->
<!-- Final CTA Low Friction + Countdown Timer -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section" id="final-cta" aria-label="Запись"> <section class="bento pksh-section" id="final-cta" aria-label="Запись">
<div class="bento__full"> <div class="bento__full">
<div class="final-cta"> <div class="final-cta">
<h2 class="bento-h2">Первое занятие бесплатно</h2> <h2 class="bento-h2">Первое занятие бесплатно</h2>
<p class="final-cta__text">Ребёнок познакомится с педагогом, попробует задания. Вы увидите методику своими глазами. Никакой оплаты и договоров.</p> <p class="final-cta__text">Ребёнок познакомится с педагогом, попробует задания. Вы увидите методику своими глазами. Никакой оплаты и договоров.</p>
<!-- Countdown timer -->
<div class="final-cta__timer" id="cta-timer"> <div class="final-cta__timer" id="cta-timer">
<span class="final-cta__timer-label">Скидка 10% действует ещё:</span> <span class="final-cta__timer-label">Скидка 10% действует ещё:</span>
<div class="final-cta__timer-digits"> <div class="final-cta__timer-digits">
@ -977,12 +1023,13 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
})(); })();
</script> </script>
<!-- ════════════════════════════════════════════ -->
<!-- Contacts как на странице лагеря -->
<!-- ════════════════════════════════════════════ -->
<section class="bento pksh-section" id="pksh-contact" aria-label="Контакты"> <section class="bento pksh-section" id="pksh-contact" aria-label="Контакты">
<div class="bento__full pksh-contact"> <div class="bento__full section-header--centered">
<span class="bento-label">Контакты</span>
<h2 class="bento-h2">Наш адрес</h2> <h2 class="bento-h2">Наш адрес</h2>
<p class="bento-p">Ждём вас в гости удобно добираться из любого района города</p>
</div>
<div class="bento__full pksh-contact">
<div class="pksh-contact__wrapper"> <div class="pksh-contact__wrapper">
<div class="pksh-contact__info"> <div class="pksh-contact__info">
<?php if (!empty($opt_phone)) : ?> <?php if (!empty($opt_phone)) : ?>
@ -1052,6 +1099,7 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
apiLoading = true; apiLoading = true;
var script = document.createElement('script'); var script = document.createElement('script');
script.src = 'https://api-maps.yandex.ru/2.1/?lang=ru_RU'; script.src = 'https://api-maps.yandex.ru/2.1/?lang=ru_RU';
script.onerror = function() { <?php if ( defined('WP_DEBUG') && WP_DEBUG ) : ?>console.warn("Yandex Maps API failed to load");<?php endif; ?> apiLoading = false; };
script.onload = initMap; script.onload = initMap;
document.head.appendChild(script); document.head.appendChild(script);
} }
@ -1071,16 +1119,39 @@ $opt_social_raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $post_
})(); })();
</script> </script>
<!-- ════════════════════════════════════════════ -->
<!-- Sticky CTA Mobile -->
<!-- ════════════════════════════════════════════ -->
<div class="sticky-cta-mobile" aria-label="Запись"> <div class="sticky-cta-mobile" aria-label="Запись">
<div class="sticky-cta-mobile__inner"> <div class="sticky-cta-mobile__inner">
<span class="sticky-cta-mobile__text">Первое занятие <strong>бесплатно</strong></span> <span class="sticky-cta-mobile__text">Полное тестирование и первое занятие <strong>бесплатно!</strong> Потом принимаете решение</span>
<button class="sticky-cta-mobile__btn btn-write">Записаться</button> <button class="sticky-cta-mobile__btn btn-write">Записаться</button>
</div> </div>
</div> </div>
<div class="sticky-cta-desktop" aria-label="Запись">
<div class="sticky-cta-desktop__inner">
<div class="sticky-cta-desktop__info">
<span class="sticky-cta-desktop__badge">🔥 Акция</span>
<span class="sticky-cta-desktop__text">Полное тестирование и первое занятие <strong>бесплатно!</strong> Потом принимаете решение</span>
</div>
<button class="sticky-cta-desktop__btn btn-write">Записаться</button>
</div>
</div>
<script>
(function() {
var sticky = document.querySelector('.sticky-cta-desktop');
var hero = document.querySelector('.ds-hero');
if (!sticky || !hero) return;
var observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
sticky.classList.toggle('visible', !entry.isIntersecting);
});
}, { threshold: 0 });
observer.observe(hero);
})();
</script>
</main> </main>
<?php <?php

View File

@ -45,6 +45,7 @@
// а не при загрузке страницы. Экономит ~200kb в критическом пути. // а не при загрузке страницы. Экономит ~200kb в критическом пути.
var script = document.createElement('script'); var script = document.createElement('script');
script.src = 'https://api-maps.yandex.ru/2.1/?lang=ru_RU'; script.src = 'https://api-maps.yandex.ru/2.1/?lang=ru_RU';
script.onerror = function() { console.warn("Yandex Maps API failed to load"); apiLoading = false; };
script.onload = initMap; script.onload = initMap;
document.head.appendChild(script); document.head.appendChild(script);
} }