/* ============================================================
SalesSections — Курсы · Отзывы · FAQ · Бонусная полоса
Два курса: «Системная торговля» (101 000 ₽) и
«Системная торговля PRO» (198 000 ₽). Без личного общения;
общие бонусы — доступ 2 месяца, ежедневный разбор рынка,
закрытый Telegram-канал на 1 месяц.
Монохром, hairline-сетки, mono-цифры — язык системы сохранён.
Цены правятся в одном месте: SALES_TARIFFS ниже.
============================================================ */
/* Два курса. Цены правятся только здесь. */
const SALES_TARIFFS = [
{ id: "flagship", price: 101000, featured: true },
{ id: "pro", price: 198000, featured: false },
];
const TG_CALL_URL = "https://t.me/trading_architecture";
const fmtRub = (n) => n.toLocaleString("ru-RU") + " ₽";
/* локальная копия секционного заголовка (Sections.jsx не грузится на подстраницах) */
function SHead({ index, eyebrow, words, sub, color = "var(--ink)", dark }) {
return (
{index} — {eyebrow}
{words.map((w, i) => {w} )}
{sub &&
{sub}
}
);
}
const salesWrap = { maxWidth: 1200, margin: "0 auto", padding: "clamp(64px,9vw,120px) 28px" };
/* ============================================================
ТАРИФЫ — три уровня погружения, флагман выделен тёмной картой
============================================================ */
function TierCard({ tier, copy, badge }) {
const [h, setH] = React.useState(false);
const dark = tier.featured;
const ink = dark ? "var(--paper-on-ink)" : "var(--ink)";
const sub = dark ? "var(--ink-on-ink-2)" : "var(--ink-2)";
const line = dark ? "rgba(255,255,255,0.14)" : "var(--hairline)";
const go = () => { window.location.href = "enroll.html?tariff=" + tier.id; };
return (
setH(true)} onMouseLeave={() => setH(false)}
style={{ position: "relative", display: "flex", flexDirection: "column",
background: dark ? "var(--ink)" : "var(--paper)",
border: `1px solid ${dark ? "var(--ink)" : h ? "var(--hairline-2)" : "var(--hairline)"}`,
borderRadius: 10, padding: "clamp(26px,2.6vw,36px)",
boxShadow: dark ? "0 24px 70px rgba(14,14,12,0.18)" : h ? "var(--shadow-md)" : "none",
transform: h && !dark ? "translateY(-3px)" : "none",
transition: "transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease), border-color var(--dur) var(--ease)" }}>
{/* бейдж */}
{badge && (
{badge}
)}
{copy.tag}
{copy.name}
{copy.desc}
{/* цена */}
{tier.from && {copy.from} }
{fmtRub(tier.price)}
{copy.feats.map((f, i) => (
{f}
))}
{copy.cta}
);
}
function PricingSection({ index = "05" }) {
const { t } = useT();
const tiers = t("sales.pricing.tiers");
return (
);
}
/* ============================================================
ОТЗЫВЫ ПЕРВОГО ПОТОКА
NB: цитаты — черновые заготовки. Перед публикацией заменить
на настоящие отзывы учеников (см. план продюсера, раздел 1).
============================================================ */
function ReviewCard({ n, quote, name, meta }) {
return (
«
{n}
{quote}
{name}
{meta}
);
}
function TestimonialsSection({ index = "04" }) {
const { t } = useT();
const items = t("sales.reviews.items");
return (
{items.map((r, i) => (
))}
{t("sales.reviews.disclaimer")}
);
}
/* ============================================================
FAQ — аккордеон на hairline-линиях
============================================================ */
function FaqRow({ q, a, openDefault }) {
const [open, setOpen] = React.useState(!!openDefault);
return (
setOpen((o) => !o)} aria-expanded={open}
style={{ width: "100%", display: "flex", alignItems: "center", justifyContent: "space-between",
gap: 24, padding: "24px 4px", background: "none", border: "none", cursor: "pointer", textAlign: "left" }}>
{q}
);
}
function FaqSection({ index = "06" }) {
const { t } = useT();
const items = t("sales.faq.items");
return (
{index} — {t("sales.faq.eyebrow")}
{t("sales.faq.title1")} {t("sales.faq.title2")}
{t("sales.faq.sub")}
{items.map((f, i) => )}
);
}
/* ============================================================
ДИАГНОСТИЧЕСКИЙ СОЗВОН — тёмная финальная полоса
(воронка высокого чека: эфир → заявка → созвон → продажа)
============================================================ */
function CallBand() {
const { t } = useT();
return (
{t("sales.call.label")}
{t("sales.call.title1")} {t("sales.call.title2")}
{t("sales.call.sub")}
{ window.location.href = "course.html"; }}
style={{ color: "var(--paper-on-ink)", borderColor: "rgba(250,250,248,0.32)" }}>
{t("sales.call.cta2")}
{ window.open(TG_CALL_URL, "_blank", "noopener"); }}
style={{ background: "var(--paper-on-ink)", color: "var(--ink)", boxShadow: "none" }}>
{t("sales.call.cta")}
);
}
Object.assign(window, { SALES_TARIFFS, TG_CALL_URL, PricingSection, TestimonialsSection, FaqSection, CallBand });