<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\CoreExtension;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
use Twig\TemplateWrapper;
/* layout/base.html.twig */
class __TwigTemplate_50509fdc1c07d8d005877a1e8660f74f extends Template
{
private Source $source;
/**
* @var array<string, Template>
*/
private array $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
'title' => [$this, 'block_title'],
'stylesheets' => [$this, 'block_stylesheets'],
'main' => [$this, 'block_main'],
'partials' => [$this, 'block_partials'],
'body' => [$this, 'block_body'],
'footer' => [$this, 'block_footer'],
'javascripts' => [$this, 'block_javascripts'],
];
}
protected function doDisplay(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "layout/base.html.twig"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "layout/base.html.twig"));
// line 1
yield "<!DOCTYPE html>
<html lang=\"fr\">
<head>
<meta charset=\"UTF-8\">
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">
<meta name=\"keywords\" content=\"bethesda liveedu gestion scolaire\">
<meta name=\"description\" content=\"Institut secondaire bilingue Bethesda — plateforme de gestion scolaire LiveEdu\">
<meta name=\"author\" content=\"Arsene Fokam Poka, Ing\">
<title>";
// line 10
yield from $this->unwrap()->yieldBlock('title', $context, $blocks);
yield "</title>
";
// line 12
yield from $this->unwrap()->yieldBlock('stylesheets', $context, $blocks);
// line 263
yield "</head>
<body class=\"host_version\">
";
// line 267
yield from $this->unwrap()->yieldBlock('main', $context, $blocks);
// line 270
yield "
";
// line 271
yield from $this->unwrap()->yieldBlock('partials', $context, $blocks);
// line 281
yield "
";
// line 282
yield from $this->unwrap()->yieldBlock('body', $context, $blocks);
// line 283
yield "
";
// line 284
yield from $this->unwrap()->yieldBlock('footer', $context, $blocks);
// line 288
yield "
";
// line 290
yield " ";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 290, $this->source); })()), "session", [], "any", false, false, false, 290), "set", ["referer", CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 290, $this->source); })()), "request", [], "any", false, false, false, 290), "get", ["_route"], "method", false, false, false, 290)], "method", false, false, false, 290), "html", null, true);
yield "
";
// line 292
yield from $this->unwrap()->yieldBlock('javascripts', $context, $blocks);
// line 386
yield "
</body>
</html>
";
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
yield from [];
}
// line 10
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_title(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title"));
yield "LiveEdu — Bethesda";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 12
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_stylesheets(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "stylesheets"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "stylesheets"));
// line 13
yield " <link rel=\"icon\" type=\"image/png\" href=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/images/BethesdaLogo.png"), "html", null, true);
yield "\"/>
<link rel=\"apple-touch-icon\" href=\"";
// line 14
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/images/BethesdaLogo.png"), "html", null, true);
yield "\">
";
// line 17
yield " <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">
<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>
<link href=\"https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;900&family=DM+Sans:wght@300;400;500;600&display=swap\" rel=\"stylesheet\">
";
// line 22
yield " <link href=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/css/bootstrap.min.css"), "html", null, true);
yield "\" rel=\"stylesheet\">
<link href=\"";
// line 23
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/css/bootstrap-grid.min.css"), "html", null, true);
yield "\" rel=\"stylesheet\">
<link href=\"";
// line 24
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/css/font-awesome.min.css"), "html", null, true);
yield "\" rel=\"stylesheet\">
";
// line 27
yield " <link href=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/css/style.css"), "html", null, true);
yield "\" rel=\"stylesheet\">
<link href=\"";
// line 28
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/css/custom.css"), "html", null, true);
yield "\" rel=\"stylesheet\">
<link href=\"";
// line 29
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/css/navbar-fix.css"), "html", null, true);
yield "\" rel=\"stylesheet\">
";
// line 37
yield " <style>
/* ── Tokens ───────────────────────────────────────────── */
:root {
/* Couleurs */
--c-ink: #0f1923;
--c-ink-soft: #1e2f3f;
--c-gold: #c9972b;
--c-gold-lt: #f0c060;
--c-cream: #faf7f2;
--c-white: #ffffff;
--c-slate: #344054;
--c-muted: #6b7a90;
--c-border: rgba(0,0,0,.08);
--c-border-dk:rgba(255,255,255,.1);
--c-success: #22c55e;
--c-warning: #f59e0b;
--c-danger: #ef4444;
--c-info: #3b82f6;
/* Typographie */
--f-display: 'Playfair Display', Georgia, serif;
--f-body: 'DM Sans', system-ui, sans-serif;
/* Rayons & ombres */
--r-sm: 8px;
--r-md: 14px;
--r-lg: 20px;
--r-xl: 28px;
--shadow-sm: 0 2px 8px rgba(0,0,0,.06);
--shadow-md: 0 8px 24px rgba(0,0,0,.09);
--shadow-lg: 0 16px 48px rgba(0,0,0,.12);
/* Espacements de section */
--gap-section: 80px;
--gap-content: 6vw;
}
/* ── Reset minimal ────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
font-family: var(--f-body);
background: var(--c-cream);
color: var(--c-ink);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
img { max-width: 100%; display: block; }
a { transition: color .18s, opacity .18s; }
/* ── Typographie ──────────────────────────────────────── */
.t-display {
font-family: var(--f-display);
font-weight: 700;
line-height: 1.1;
letter-spacing: -.02em;
}
.t-eyebrow {
font-size: .68rem; font-weight: 700;
letter-spacing: .18em; text-transform: uppercase;
color: var(--c-gold);
display: inline-flex; align-items: center; gap: 10px;
}
.t-eyebrow::before {
content: ''; display: block;
width: 28px; height: 1px; background: currentColor;
}
.t-muted { color: var(--c-muted); }
.t-gold { color: var(--c-gold); }
/* ── Boutons ──────────────────────────────────────────── */
.btn-lv {
display: inline-flex; align-items: center; gap: 8px;
padding: 11px 24px; border-radius: var(--r-sm);
font-family: var(--f-body); font-size: .9rem; font-weight: 600;
cursor: pointer; text-decoration: none; border: none;
transition: background .18s, transform .14s, box-shadow .18s;
white-space: nowrap;
}
.btn-lv:hover { transform: translateY(-2px); }
.btn-gold {
background: var(--c-gold); color: #fff;
}
.btn-gold:hover { background: var(--c-gold-lt); color: #fff; }
.btn-ink {
background: var(--c-ink); color: #fff;
}
.btn-ink:hover { background: var(--c-ink-soft); color: #fff; }
.btn-outline {
background: transparent; color: var(--c-ink);
border: 1.5px solid var(--c-border);
}
.btn-outline:hover { border-color: var(--c-gold); color: var(--c-gold); }
.btn-outline-w {
background: transparent; color: #fff;
border: 1.5px solid rgba(255,255,255,.35);
}
.btn-outline-w:hover { border-color: #fff; background: rgba(255,255,255,.08); color: #fff; }
.btn-white {
background: #fff; color: var(--c-ink);
box-shadow: var(--shadow-sm);
}
.btn-white:hover { box-shadow: var(--shadow-md); color: var(--c-ink); }
/* ── Tags / Badges ────────────────────────────────────── */
.badge-lv {
display: inline-block;
font-size: .68rem; font-weight: 700;
letter-spacing: .09em; text-transform: uppercase;
padding: 3px 11px; border-radius: 20px;
border: 1px solid;
}
.badge-gold { background: rgba(201,151,43,.12); color: var(--c-gold); border-color: rgba(201,151,43,.3); }
.badge-success{ background: rgba(34,197,94,.12); color: #15803d; border-color: rgba(34,197,94,.3); }
.badge-danger { background: rgba(239,68,68,.12); color: #b91c1c; border-color: rgba(239,68,68,.3); }
.badge-info { background: rgba(59,130,246,.12); color: #1d4ed8; border-color: rgba(59,130,246,.3); }
.badge-muted { background: rgba(0,0,0,.05); color: var(--c-muted);border-color: var(--c-border); }
/* ── En-têtes de page (front) ─────────────────────────── */
.page-header {
background: var(--c-ink);
padding: 60px var(--gap-content) 50px;
position: relative; overflow: hidden;
}
.page-header__glow {
position: absolute; pointer-events: none;
border-radius: 50%;
background: radial-gradient(circle, rgba(201,151,43,.18), transparent 70%);
}
.page-header__title {
font-family: var(--f-display);
font-size: clamp(2rem, 4vw, 3rem);
font-weight: 700; color: #fff; line-height: 1.1;
}
.page-header__sub {
color: rgba(255,255,255,.5);
margin-top: 10px; font-size: .92rem;
}
/* ── Sections ─────────────────────────────────────────── */
.section {
padding: var(--gap-section) var(--gap-content);
}
.section--white { background: var(--c-white); }
.section--ink { background: var(--c-ink); }
.section--cream { background: var(--c-cream); }
.content-wrap {
max-width: 1280px;
margin: 0 auto;
padding: 56px var(--gap-content);
}
/* ── Cartes génériques ────────────────────────────────── */
.card-lv {
background: var(--c-white);
border: 1px solid var(--c-border);
border-radius: var(--r-md);
transition: box-shadow .22s, transform .2s;
}
.card-lv:hover {
box-shadow: var(--shadow-md);
transform: translateY(-3px);
}
/* ── Grille de features / cartes ─────────────────────── */
.grid-auto {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(var(--col-min, 240px), 1fr));
gap: var(--grid-gap, 24px);
}
/* ── Flash Messages ───────────────────────────────────── */
.flash-stack {
position: fixed; top: 16px; right: 16px; z-index: 9999;
display: flex; flex-direction: column; gap: 10px;
max-width: 380px; width: calc(100% - 32px);
}
.flash-item {
display: flex; align-items: flex-start; gap: 12px;
padding: 14px 16px; border-radius: var(--r-sm);
background: #fff; border-left: 4px solid var(--c-gold);
box-shadow: var(--shadow-md);
animation: slideIn .3s ease both;
}
.flash-item--success { border-color: var(--c-success); }
.flash-item--danger { border-color: var(--c-danger); }
.flash-item--warning { border-color: var(--c-warning); }
.flash-item--info { border-color: var(--c-info); }
.flash-item__icon { font-size: 1rem; margin-top: 1px; }
.flash-item--success .flash-item__icon { color: var(--c-success); }
.flash-item--danger .flash-item__icon { color: var(--c-danger); }
.flash-item--warning .flash-item__icon { color: var(--c-warning); }
.flash-item--info .flash-item__icon { color: var(--c-info); }
.flash-item__text { font-size: .88rem; flex: 1; line-height: 1.5; }
.flash-item__close {
background: none; border: none; cursor: pointer;
color: var(--c-muted); font-size: 1rem; padding: 0;
line-height: 1; margin-top: 1px;
transition: color .15s;
}
.flash-item__close:hover { color: var(--c-ink); }
/* ── Animations ───────────────────────────────────────── */
@keyframes fadeUp {
from { opacity: 0; transform: translateY(22px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes slideIn {
from { opacity: 0; transform: translateX(20px); }
to { opacity: 1; transform: translateX(0); }
}
.anim-up { animation: fadeUp .55s ease both; }
/* ── Utilitaires ──────────────────────────────────────── */
.visually-hidden {
position: absolute; width: 1px; height: 1px;
overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap;
}
</style>
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 267
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_main(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "main"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "main"));
// line 268
yield " ";
// line 269
yield " ";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 271
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_partials(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "partials"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "partials"));
// line 272
yield " ";
// line 273
yield " ";
yield from $this->load("layout/partials/flash_messages.html.twig", 273)->unwrap()->yield($context);
// line 274
yield "
";
// line 275
if ((($tmp = !CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 275, $this->source); })()), "user", [], "any", false, false, false, 275)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 276
yield " ";
yield from $this->load("layout/partials/modal.html.twig", 276)->unwrap()->yield($context);
// line 277
yield " ";
yield from $this->load("layout/partials/loader.html.twig", 277)->unwrap()->yield($context);
// line 278
yield " ";
yield from $this->load("layout/partials/header.html.twig", 278)->unwrap()->yield($context);
// line 279
yield " ";
}
// line 280
yield " ";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 282
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_body(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 284
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_footer(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footer"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footer"));
// line 285
yield " ";
yield from $this->load("layout/partials/partners.html.twig", 285)->unwrap()->yield($context);
// line 286
yield " ";
yield from $this->load("layout/partials/footer.html.twig", 286)->unwrap()->yield($context);
// line 287
yield " ";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 292
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_javascripts(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "javascripts"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "javascripts"));
// line 293
yield " ";
// line 294
yield " <script src=\"https://code.jquery.com/jquery-3.7.1.min.js\"
integrity=\"sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=\"
crossorigin=\"anonymous\"></script>
";
// line 299
yield " <script src=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/jquery-ui.min.js"), "html", null, true);
yield "\"></script>
";
// line 302
yield " <script src=\"https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.bundle.min.js\"></script>
";
// line 305
yield " <script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.7.0/chart.min.js\"></script>
";
// line 308
yield " <script src=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/jquery.mCustomScrollbar.concat.min.js"), "html", null, true);
yield "\"></script>
<script src=\"";
// line 309
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/menu.js"), "html", null, true);
yield "\"></script>
<script src=\"";
// line 310
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/all.js"), "html", null, true);
yield "\"></script>
<script src=\"";
// line 311
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/front.js"), "html", null, true);
yield "\"></script>
<script src=\"";
// line 312
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/custom.js"), "html", null, true);
yield "\"></script>
<script src=\"";
// line 313
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/timeline.min.js"), "html", null, true);
yield "\"></script>
<script src=\"";
// line 314
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/d3.v4.min.js"), "html", null, true);
yield "\"></script>
<script>
(function () {
'use strict';
/* ── Sidebar toggle (backend) ──────────────────────── */
\$('#toggle-btn').on('click', function (e) {
e.preventDefault();
if (\$(window).width() > 1199) {
\$('body').toggleClass('sidebar-collapsed');
\$('.side-navbar').toggleClass('shrinked');
\$('.page').toggleClass('active');
} else {
\$('.side-navbar').toggleClass('show-sm');
\$('.page').toggleClass('active-sm');
}
});
\$(document).on('click', function (e) {
if (\$(window).width() <= 1199 &&
!\$(e.target).closest('.side-navbar, #toggle-btn').length) {
\$('.side-navbar').removeClass('show-sm');
\$('.page').removeClass('active-sm');
}
});
/* ── Changement d'année scolaire ───────────────────── */
\$('#select_year').on('change', function () {
\$.ajax({
type: 'POST',
url: '";
// line 345
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("update_school_year");
yield "',
data: { selectedSchoolYear: \$(this).val() },
success: function () { location.reload(); },
error: function () { alert('Échec du changement d\\'année.'); }
});
});
/* ── Timeline ──────────────────────────────────────── */
if (typeof timeline === 'function') {
timeline(document.querySelectorAll('.timeline'), {
forceVerticalMode: 700,
mode: 'horizontal',
verticalStartPosition: 'left',
visibleItems: 4
});
}
/* ── Flash messages : fermeture manuelle ───────────── */
\$(document).on('click', '.flash-item__close', function () {
\$(this).closest('.flash-item').fadeOut(200, function () {
\$(this).remove();
});
});
/* ── Auto-dismiss des flash après 5s ───────────────── */
setTimeout(function () {
\$('.flash-item').fadeOut(400, function () { \$(this).remove(); });
}, 5000);
})();
</script>
";
// line 378
yield " <script async src=\"https://www.googletagmanager.com/gtag/js?id=UA-208287842-1\"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-208287842-1');
</script>
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
/**
* @codeCoverageIgnore
*/
public function getTemplateName(): string
{
return "layout/base.html.twig";
}
/**
* @codeCoverageIgnore
*/
public function isTraitable(): bool
{
return false;
}
/**
* @codeCoverageIgnore
*/
public function getDebugInfo(): array
{
return array ( 690 => 378, 655 => 345, 621 => 314, 617 => 313, 613 => 312, 609 => 311, 605 => 310, 601 => 309, 596 => 308, 592 => 305, 588 => 302, 582 => 299, 576 => 294, 574 => 293, 561 => 292, 550 => 287, 547 => 286, 544 => 285, 531 => 284, 509 => 282, 498 => 280, 495 => 279, 492 => 278, 489 => 277, 486 => 276, 484 => 275, 481 => 274, 478 => 273, 476 => 272, 463 => 271, 452 => 269, 450 => 268, 437 => 267, 201 => 37, 196 => 29, 192 => 28, 187 => 27, 182 => 24, 178 => 23, 173 => 22, 167 => 17, 162 => 14, 157 => 13, 144 => 12, 121 => 10, 107 => 386, 105 => 292, 99 => 290, 96 => 288, 94 => 284, 91 => 283, 89 => 282, 86 => 281, 84 => 271, 81 => 270, 79 => 267, 73 => 263, 71 => 12, 66 => 10, 55 => 1,);
}
public function getSourceContext(): Source
{
return new Source("<!DOCTYPE html>
<html lang=\"fr\">
<head>
<meta charset=\"UTF-8\">
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">
<meta name=\"keywords\" content=\"bethesda liveedu gestion scolaire\">
<meta name=\"description\" content=\"Institut secondaire bilingue Bethesda — plateforme de gestion scolaire LiveEdu\">
<meta name=\"author\" content=\"Arsene Fokam Poka, Ing\">
<title>{% block title 'LiveEdu — Bethesda' %}</title>
{% block stylesheets %}
<link rel=\"icon\" type=\"image/png\" href=\"{{ asset('assets/images/BethesdaLogo.png') }}\"/>
<link rel=\"apple-touch-icon\" href=\"{{ asset('assets/images/BethesdaLogo.png') }}\">
{# ── Polices ── #}
<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">
<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>
<link href=\"https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;900&family=DM+Sans:wght@300;400;500;600&display=swap\" rel=\"stylesheet\">
{# ── Librairies CSS ── #}
<link href=\"{{ asset('assets/css/bootstrap.min.css') }}\" rel=\"stylesheet\">
<link href=\"{{ asset('assets/css/bootstrap-grid.min.css') }}\" rel=\"stylesheet\">
<link href=\"{{ asset('assets/css/font-awesome.min.css') }}\" rel=\"stylesheet\">
{# ── CSS applicatif ── #}
<link href=\"{{ asset('assets/css/style.css') }}\" rel=\"stylesheet\">
<link href=\"{{ asset('assets/css/custom.css') }}\" rel=\"stylesheet\">
<link href=\"{{ asset('assets/css/navbar-fix.css') }}\" rel=\"stylesheet\">
{# ══════════════════════════════════════════════════════
DESIGN SYSTEM GLOBAL — LiveEdu
Tous les tokens, utilitaires et composants partagés
sont définis ici. Les layouts enfants n'ont plus à
redéfinir couleurs, typographie ou espacements.
══════════════════════════════════════════════════════ #}
<style>
/* ── Tokens ───────────────────────────────────────────── */
:root {
/* Couleurs */
--c-ink: #0f1923;
--c-ink-soft: #1e2f3f;
--c-gold: #c9972b;
--c-gold-lt: #f0c060;
--c-cream: #faf7f2;
--c-white: #ffffff;
--c-slate: #344054;
--c-muted: #6b7a90;
--c-border: rgba(0,0,0,.08);
--c-border-dk:rgba(255,255,255,.1);
--c-success: #22c55e;
--c-warning: #f59e0b;
--c-danger: #ef4444;
--c-info: #3b82f6;
/* Typographie */
--f-display: 'Playfair Display', Georgia, serif;
--f-body: 'DM Sans', system-ui, sans-serif;
/* Rayons & ombres */
--r-sm: 8px;
--r-md: 14px;
--r-lg: 20px;
--r-xl: 28px;
--shadow-sm: 0 2px 8px rgba(0,0,0,.06);
--shadow-md: 0 8px 24px rgba(0,0,0,.09);
--shadow-lg: 0 16px 48px rgba(0,0,0,.12);
/* Espacements de section */
--gap-section: 80px;
--gap-content: 6vw;
}
/* ── Reset minimal ────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
font-family: var(--f-body);
background: var(--c-cream);
color: var(--c-ink);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
img { max-width: 100%; display: block; }
a { transition: color .18s, opacity .18s; }
/* ── Typographie ──────────────────────────────────────── */
.t-display {
font-family: var(--f-display);
font-weight: 700;
line-height: 1.1;
letter-spacing: -.02em;
}
.t-eyebrow {
font-size: .68rem; font-weight: 700;
letter-spacing: .18em; text-transform: uppercase;
color: var(--c-gold);
display: inline-flex; align-items: center; gap: 10px;
}
.t-eyebrow::before {
content: ''; display: block;
width: 28px; height: 1px; background: currentColor;
}
.t-muted { color: var(--c-muted); }
.t-gold { color: var(--c-gold); }
/* ── Boutons ──────────────────────────────────────────── */
.btn-lv {
display: inline-flex; align-items: center; gap: 8px;
padding: 11px 24px; border-radius: var(--r-sm);
font-family: var(--f-body); font-size: .9rem; font-weight: 600;
cursor: pointer; text-decoration: none; border: none;
transition: background .18s, transform .14s, box-shadow .18s;
white-space: nowrap;
}
.btn-lv:hover { transform: translateY(-2px); }
.btn-gold {
background: var(--c-gold); color: #fff;
}
.btn-gold:hover { background: var(--c-gold-lt); color: #fff; }
.btn-ink {
background: var(--c-ink); color: #fff;
}
.btn-ink:hover { background: var(--c-ink-soft); color: #fff; }
.btn-outline {
background: transparent; color: var(--c-ink);
border: 1.5px solid var(--c-border);
}
.btn-outline:hover { border-color: var(--c-gold); color: var(--c-gold); }
.btn-outline-w {
background: transparent; color: #fff;
border: 1.5px solid rgba(255,255,255,.35);
}
.btn-outline-w:hover { border-color: #fff; background: rgba(255,255,255,.08); color: #fff; }
.btn-white {
background: #fff; color: var(--c-ink);
box-shadow: var(--shadow-sm);
}
.btn-white:hover { box-shadow: var(--shadow-md); color: var(--c-ink); }
/* ── Tags / Badges ────────────────────────────────────── */
.badge-lv {
display: inline-block;
font-size: .68rem; font-weight: 700;
letter-spacing: .09em; text-transform: uppercase;
padding: 3px 11px; border-radius: 20px;
border: 1px solid;
}
.badge-gold { background: rgba(201,151,43,.12); color: var(--c-gold); border-color: rgba(201,151,43,.3); }
.badge-success{ background: rgba(34,197,94,.12); color: #15803d; border-color: rgba(34,197,94,.3); }
.badge-danger { background: rgba(239,68,68,.12); color: #b91c1c; border-color: rgba(239,68,68,.3); }
.badge-info { background: rgba(59,130,246,.12); color: #1d4ed8; border-color: rgba(59,130,246,.3); }
.badge-muted { background: rgba(0,0,0,.05); color: var(--c-muted);border-color: var(--c-border); }
/* ── En-têtes de page (front) ─────────────────────────── */
.page-header {
background: var(--c-ink);
padding: 60px var(--gap-content) 50px;
position: relative; overflow: hidden;
}
.page-header__glow {
position: absolute; pointer-events: none;
border-radius: 50%;
background: radial-gradient(circle, rgba(201,151,43,.18), transparent 70%);
}
.page-header__title {
font-family: var(--f-display);
font-size: clamp(2rem, 4vw, 3rem);
font-weight: 700; color: #fff; line-height: 1.1;
}
.page-header__sub {
color: rgba(255,255,255,.5);
margin-top: 10px; font-size: .92rem;
}
/* ── Sections ─────────────────────────────────────────── */
.section {
padding: var(--gap-section) var(--gap-content);
}
.section--white { background: var(--c-white); }
.section--ink { background: var(--c-ink); }
.section--cream { background: var(--c-cream); }
.content-wrap {
max-width: 1280px;
margin: 0 auto;
padding: 56px var(--gap-content);
}
/* ── Cartes génériques ────────────────────────────────── */
.card-lv {
background: var(--c-white);
border: 1px solid var(--c-border);
border-radius: var(--r-md);
transition: box-shadow .22s, transform .2s;
}
.card-lv:hover {
box-shadow: var(--shadow-md);
transform: translateY(-3px);
}
/* ── Grille de features / cartes ─────────────────────── */
.grid-auto {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(var(--col-min, 240px), 1fr));
gap: var(--grid-gap, 24px);
}
/* ── Flash Messages ───────────────────────────────────── */
.flash-stack {
position: fixed; top: 16px; right: 16px; z-index: 9999;
display: flex; flex-direction: column; gap: 10px;
max-width: 380px; width: calc(100% - 32px);
}
.flash-item {
display: flex; align-items: flex-start; gap: 12px;
padding: 14px 16px; border-radius: var(--r-sm);
background: #fff; border-left: 4px solid var(--c-gold);
box-shadow: var(--shadow-md);
animation: slideIn .3s ease both;
}
.flash-item--success { border-color: var(--c-success); }
.flash-item--danger { border-color: var(--c-danger); }
.flash-item--warning { border-color: var(--c-warning); }
.flash-item--info { border-color: var(--c-info); }
.flash-item__icon { font-size: 1rem; margin-top: 1px; }
.flash-item--success .flash-item__icon { color: var(--c-success); }
.flash-item--danger .flash-item__icon { color: var(--c-danger); }
.flash-item--warning .flash-item__icon { color: var(--c-warning); }
.flash-item--info .flash-item__icon { color: var(--c-info); }
.flash-item__text { font-size: .88rem; flex: 1; line-height: 1.5; }
.flash-item__close {
background: none; border: none; cursor: pointer;
color: var(--c-muted); font-size: 1rem; padding: 0;
line-height: 1; margin-top: 1px;
transition: color .15s;
}
.flash-item__close:hover { color: var(--c-ink); }
/* ── Animations ───────────────────────────────────────── */
@keyframes fadeUp {
from { opacity: 0; transform: translateY(22px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes slideIn {
from { opacity: 0; transform: translateX(20px); }
to { opacity: 1; transform: translateX(0); }
}
.anim-up { animation: fadeUp .55s ease both; }
/* ── Utilitaires ──────────────────────────────────────── */
.visually-hidden {
position: absolute; width: 1px; height: 1px;
overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap;
}
</style>
{% endblock %}
</head>
<body class=\"host_version\">
{% block main %}
{# Réservé au layout backend #}
{% endblock %}
{% block partials %}
{# Flash messages redesignés #}
{% include 'layout/partials/flash_messages.html.twig' %}
{% if not app.user %}
{% include 'layout/partials/modal.html.twig' %}
{% include 'layout/partials/loader.html.twig' %}
{% include 'layout/partials/header.html.twig' %}
{% endif %}
{% endblock %}
{% block body %}{% endblock %}
{% block footer %}
{% include 'layout/partials/partners.html.twig' %}
{% include 'layout/partials/footer.html.twig' %}
{% endblock %}
{# Sauvegarde de la route courante en session #}
{{ app.session.set('referer', app.request.get('_route')) }}
{% block javascripts %}
{# ── 1. jQuery ── #}
<script src=\"https://code.jquery.com/jquery-3.7.1.min.js\"
integrity=\"sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=\"
crossorigin=\"anonymous\"></script>
{# ── 2. jQuery UI ── #}
<script src=\"{{ asset('assets/js/jquery-ui.min.js') }}\"></script>
{# ── 3. Bootstrap 4 ── #}
<script src=\"https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.bundle.min.js\"></script>
{# ── 4. Chart.js ── #}
<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.7.0/chart.min.js\"></script>
{# ── 5. Scripts applicatifs ── #}
<script src=\"{{ asset('assets/js/jquery.mCustomScrollbar.concat.min.js') }}\"></script>
<script src=\"{{ asset('assets/js/menu.js') }}\"></script>
<script src=\"{{ asset('assets/js/all.js') }}\"></script>
<script src=\"{{ asset('assets/js/front.js') }}\"></script>
<script src=\"{{ asset('assets/js/custom.js') }}\"></script>
<script src=\"{{ asset('assets/js/timeline.min.js') }}\"></script>
<script src=\"{{ asset('assets/js/d3.v4.min.js') }}\"></script>
<script>
(function () {
'use strict';
/* ── Sidebar toggle (backend) ──────────────────────── */
\$('#toggle-btn').on('click', function (e) {
e.preventDefault();
if (\$(window).width() > 1199) {
\$('body').toggleClass('sidebar-collapsed');
\$('.side-navbar').toggleClass('shrinked');
\$('.page').toggleClass('active');
} else {
\$('.side-navbar').toggleClass('show-sm');
\$('.page').toggleClass('active-sm');
}
});
\$(document).on('click', function (e) {
if (\$(window).width() <= 1199 &&
!\$(e.target).closest('.side-navbar, #toggle-btn').length) {
\$('.side-navbar').removeClass('show-sm');
\$('.page').removeClass('active-sm');
}
});
/* ── Changement d'année scolaire ───────────────────── */
\$('#select_year').on('change', function () {
\$.ajax({
type: 'POST',
url: '{{ path(\"update_school_year\") }}',
data: { selectedSchoolYear: \$(this).val() },
success: function () { location.reload(); },
error: function () { alert('Échec du changement d\\'année.'); }
});
});
/* ── Timeline ──────────────────────────────────────── */
if (typeof timeline === 'function') {
timeline(document.querySelectorAll('.timeline'), {
forceVerticalMode: 700,
mode: 'horizontal',
verticalStartPosition: 'left',
visibleItems: 4
});
}
/* ── Flash messages : fermeture manuelle ───────────── */
\$(document).on('click', '.flash-item__close', function () {
\$(this).closest('.flash-item').fadeOut(200, function () {
\$(this).remove();
});
});
/* ── Auto-dismiss des flash après 5s ───────────────── */
setTimeout(function () {
\$('.flash-item').fadeOut(400, function () { \$(this).remove(); });
}, 5000);
})();
</script>
{# ── Google Analytics ── #}
<script async src=\"https://www.googletagmanager.com/gtag/js?id=UA-208287842-1\"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-208287842-1');
</script>
{% endblock %}
</body>
</html>
", "layout/base.html.twig", "/var/www/bethesda/templates/layout/base.html.twig");
}
}