Files
av_Site_repetitor/templates/index.html
T
qa-tester 971e51b6f5 security: закрыть уязвимости аудита (PRJ-6)
- gunicorn вместо dev-сервера Werkzeug; non-root user в Dockerfile
- volume sqlite_data для БД (заявки не теряются при rebuild)
- consultations.db и data/ в .dockerignore (ПДн не попадают в образ)
- Secure-куки по умолчанию (COOKIE_SECURE=1), лимит сессии 12ч
- защитные заголовки: CSP, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy
- MAX_CONTENT_LENGTH 64КБ
- анти-брутфорс админки: 5 попыток -> блокировка 15 мин + лимит 5/мин
- обязательный чекбокс согласия на обработку ПДн + страница /privacy
- .env.example: понятные плейсхолдеры, COOKIE_SECURE
2026-08-06 16:12:48 +04:00

180 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Подготовка к ОГЭ и ЕГЭ по математике с Анастасией Панкратенковой.">
<title>Анастасия Панкратенкова — математика</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
</head>
<body>
<div class="page-shell">
<header class="site-header">
<a class="brand" href="#top" aria-label="На главную">
<span class="brand-mark">АП</span>
<span class="brand-name">Анастасия<br>Панкратенкова</span>
</a>
<nav class="main-nav" aria-label="Основная навигация">
<a href="#about">О преподавателе</a>
<a href="#subjects">Направления</a>
<a href="#contact">Записаться</a>
</nav>
<a class="header-link" href="#contact">Консультация <span></span></a>
</header>
<main id="top">
<section class="hero section-wrap">
<div class="hero-copy">
<p class="eyebrow"><span class="eyebrow-dot"></span> Математика · подготовка к экзаменам</p>
<h1>Понимать, решать, <em>быть уверенным.</em></h1>
<p class="hero-lead">Помогаю школьникам увидеть логику математики и спокойно прийти к нужному результату на ОГЭ и ЕГЭ.</p>
<div class="hero-actions">
<a class="button button-primary" href="#contact">Записаться на консультацию <span></span></a>
<a class="text-link" href="#about">Познакомиться <span></span></a>
</div>
<div class="hero-proof">
<div class="proof-avatars" aria-hidden="true">
<span>О</span><span>Е</span><span>+</span>
</div>
<p>Индивидуальный подход<br><strong>с 2017 года</strong></p>
</div>
</div>
<div class="hero-visual">
<div class="hero-orbit orbit-one"></div>
<div class="hero-orbit orbit-two"></div>
<div class="hero-photo-frame">
<img src="{{ url_for('static', filename='images/teacher.jpg') }}" alt="Анастасия Панкратенкова">
</div>
<div class="floating-note note-top"><span></span><strong>Разбираем<br>до ясности</strong></div>
<div class="floating-note note-bottom"><strong>2</strong><span>красных<br>диплома</span></div>
<div class="math-scribble scribble-one">y = kx + b</div>
<div class="math-scribble scribble-two">a² + b² = c²</div>
</div>
</section>
<section class="ticker" aria-label="Ключевые направления">
<div class="ticker-track">
<span>Математика</span><i></i><span>ОГЭ</span><i></i><span>ЕГЭ</span><i></i><span>Математика</span><i></i><span>ОГЭ</span><i></i><span>ЕГЭ</span>
</div>
</section>
<section class="about section-wrap section-grid" id="about">
<div class="section-label"><span>01</span><span>О преподавателе</span></div>
<div class="about-content">
<div class="section-heading-row">
<h2>Математика<br><em>может быть понятной.</em></h2>
<span class="round-arrow"></span>
</div>
<p class="section-intro">Я — Анастасия Викторовна, преподаватель математики. На занятиях мы не заучиваем решения, а разбираемся, как всё устроено — шаг за шагом и в удобном для ученика темпе.</p>
<div class="about-details">
<div class="detail-item"><span class="detail-number">01</span><p><strong>Образование</strong>АГУ, бакалавриат «Математика» и магистратура «Математическое образование».</p></div>
<div class="detail-item"><span class="detail-number">02</span><p><strong>Результат</strong>Обе ступени образования окончены с красным дипломом.</p></div>
<div class="detail-item"><span class="detail-number">03</span><p><strong>Опыт</strong>Официально веду педагогическую деятельность с 2017 года.</p></div>
</div>
</div>
</section>
<section class="subjects section-wrap" id="subjects">
<div class="section-label"><span>02</span><span>Направления</span></div>
<div class="subjects-heading">
<h2>Выберите свою<br><em>точку старта.</em></h2>
<p>Первая консультация помогает определить текущий уровень, цели и комфортный план подготовки.</p>
</div>
<div class="subject-cards">
<article class="subject-card subject-card-dark">
<div class="card-top">
<span class="card-number">01</span>
<span class="card-icon"></span>
</div>
<div class="card-body">
<p class="card-kicker">Подготовка</p>
<h3>Математика</h3>
<p class="card-description">От уверенной базы до сложных задач второй части. Разбираем теорию, практику и стратегию экзамена.</p>
</div>
<a href="#contact" class="card-link">Обсудить подготовку <span></span></a>
</article>
<article class="subject-card subject-card-accent">
<div class="card-top">
<span class="card-number">02</span>
<span class="card-icon"></span>
</div>
<div class="card-body">
<p class="card-kicker">Подготовка</p>
<h3>ОГЭ и ЕГЭ</h3>
<p class="card-description">Готовимся к экзаменам по математике: разбираем структуру, тренируемся на реальных заданиях и отрабатываем стратегию набора баллов.</p>
</div>
<a href="#contact" class="card-link">Обсудить подготовку <span></span></a>
</article>
</div>
</section>
<section class="process section-wrap">
<div class="section-label"><span>03</span><span>Как проходят занятия</span></div>
<div class="process-content">
<h2>Спокойная подготовка<br><em>с понятным маршрутом.</em></h2>
<div class="process-list">
<div class="process-item"><span>01</span><div><h3>Знакомимся с задачей</h3><p>Определяем цель, уровень знаний и точки, которые требуют внимания.</p></div><b></b></div>
<div class="process-item"><span>02</span><div><h3>Собираем систему</h3><p>Выстраиваем понятную теорию и закрепляем её практикой на реальных заданиях.</p></div><b></b></div>
<div class="process-item"><span>03</span><div><h3>Двигаемся к результату</h3><p>Отслеживаем прогресс, разбираем ошибки и учимся уверенно работать на экзамене.</p></div><b></b></div>
</div>
</div>
</section>
<section class="education section-wrap">
<div class="education-card">
<div class="education-mark"></div>
<div><p class="card-kicker">Образование</p><h2>Два диплома.<br><em>Одна цель.</em></h2></div>
<div class="education-years"><span>2013</span><i></i><span>2019</span></div>
<div class="education-copy"><p>АГУ · бакалавриат<br>«Математика»</p><p>АГУ · магистратура<br>«Математическое образование»</p></div>
<div class="red-diploma">Красный диплом <span>× 2</span></div>
</div>
</section>
<section class="contact section-wrap" id="contact">
<div class="contact-intro">
<div class="section-label"><span>04</span><span>Первый шаг</span></div>
<h2>Давайте<br><em>познакомимся.</em></h2>
<p>Оставьте заявку — я свяжусь с вами, отвечу на вопросы и помогу выбрать формат подготовки.</p>
<div class="contact-sign">Анастасия <span>Панкратенкова</span></div>
</div>
<div class="form-card">
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div class="flash-message {{ category }}">{{ message }}</div>
{% endfor %}
{% endif %}
{% endwith %}
<form action="{{ url_for('submit_request') }}" method="post">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<div class="form-row">
<label>Ваше имя <span>*</span><input type="text" name="name" placeholder="Например, Мария" required></label>
<label>Как связаться <span>*</span><input type="text" name="contact" placeholder="Телефон или Telegram" required></label>
</div>
<div class="form-row">
<label>Предмет <span>*</span><select name="subject" required><option value="" disabled selected>Выберите предмет</option><option value="math">Математика</option></select></label>
<label>Экзамен <span>*</span><select name="exam" required><option value="" disabled selected>Выберите экзамен</option><option value="oge">ОГЭ</option><option value="ege">ЕГЭ</option><option value="other">Пока не определились</option></select></label>
</div>
<div class="form-row form-row-wide">
<label>Желаемое время занятий <span>*</span><select name="preferred_time" required><option value="" disabled selected>Когда вам удобнее?</option><option value="morning">Утро</option><option value="day">День</option><option value="evening">Вечер</option><option value="flexible">Готовы обсудить</option></select></label>
</div>
<fieldset class="format-field"><legend>Формат занятий <span>*</span></legend><div class="radio-options"><label><input type="radio" name="format" value="online" required><span>Онлайн</span></label><label><input type="radio" name="format" value="offline"><span>Очно</span></label><label><input type="radio" name="format" value="other"><span>Не знаю</span></label></div></fieldset>
<label>Комментарий <span class="optional">необязательно</span><textarea name="message" rows="3" placeholder="Расскажите, какая цель у занятий..."></textarea></label>
<label class="consent-label"><input type="checkbox" name="consent" value="on" required> <span>Я согласен на обработку персональных данных в соответствии с <a href="{{ url_for('privacy_policy') }}">политикой конфиденциальности</a>. <b>*</b></span></label>
<button class="button button-primary form-button" type="submit">Отправить заявку <span></span></button>
<p class="form-note">Нажимая кнопку, вы соглашаетесь на обработку персональных данных.</p>
</form>
</div>
</section>
</main>
<footer class="site-footer section-wrap">
<a class="brand" href="#top"><span class="brand-mark">АП</span><span class="brand-name">Анастасия<br>Панкратенкова</span></a>
<p>Математика<br>с пониманием.</p>
<span>© {{ current_year }}</span>
</footer>
</div>
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
</body>
</html>