<?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_622f1b446738d9ba753d92294afc7327 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\">
<title>";
// line 5
yield from $this->unwrap()->yieldBlock('title', $context, $blocks);
yield "</title>
";
// line 8
yield " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">
";
// line 12
yield " <meta name=\"keywords\" content=\"nations isbb bethesda liveedu gestion scolaire\">
<meta name=\"description\" content=\"Institut secondaire bilingue des Nations — plateforme de gestion scolaire LiveEdu\">
<meta name=\"author\" content=\"Arsene Fokam Poka, Ing\">
";
// line 17
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 18
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 21
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 26
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 27
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 28
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/css/bootstrap-reboot.min.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/font-awesome.min.css"), "html", null, true);
yield "\" rel=\"stylesheet\">
";
// line 32
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 33
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 34
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 40
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: 12%;
--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 auto ──────────────────────────────────────── */
.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>
";
// line 245
yield from $this->unwrap()->yieldBlock('stylesheets', $context, $blocks);
// line 246
yield "</head>
<body class=\"host_version\">
";
// line 250
yield from $this->unwrap()->yieldBlock('main', $context, $blocks);
// line 253
yield "
";
// line 254
yield from $this->unwrap()->yieldBlock('partials', $context, $blocks);
// line 264
yield "
";
// line 265
yield from $this->unwrap()->yieldBlock('body', $context, $blocks);
// line 266
yield "
";
// line 267
yield from $this->unwrap()->yieldBlock('footer', $context, $blocks);
// line 271
yield "
";
// line 273
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.', 273, $this->source); })()), "session", [], "any", false, false, false, 273), "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.', 273, $this->source); })()), "request", [], "any", false, false, false, 273), "get", ["_route"], "method", false, false, false, 273)], "method", false, false, false, 273), "html", null, true);
yield "
";
// line 278
yield "
";
// line 280
yield " <script src=\"https://code.jquery.com/jquery-3.7.1.min.js\"
integrity=\"sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=\"
crossorigin=\"anonymous\"></script>
";
// line 285
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 288
yield " <script src=\"https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.bundle.min.js\"></script>
";
// line 291
yield " <script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.7.0/chart.min.js\"></script>
";
// line 294
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 295
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/jsjquery.simpleAccordion.min.js"), "html", null, true);
yield "\"></script>
<script src=\"";
// line 296
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 297
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 298
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 299
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 300
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 301
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 332
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 365
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>
";
// line 373
yield from $this->unwrap()->yieldBlock('javascripts', $context, $blocks);
// line 374
yield "
</body>
</html>
";
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
yield from [];
}
// line 5
/**
* @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 "NATIONS";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 245
/**
* @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"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 250
/**
* @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 251
yield " ";
// line 252
yield " ";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 254
/**
* @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 255
yield " ";
// line 256
yield " ";
yield from $this->load("layout/partials/flash_messages.html.twig", 256)->unwrap()->yield($context);
// line 257
yield "
";
// line 258
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.', 258, $this->source); })()), "user", [], "any", false, false, false, 258)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 259
yield " ";
yield from $this->load("layout/partials/modal.html.twig", 259)->unwrap()->yield($context);
// line 260
yield " ";
yield from $this->load("layout/partials/loader.html.twig", 260)->unwrap()->yield($context);
// line 261
yield " ";
yield from $this->load("layout/partials/header.html.twig", 261)->unwrap()->yield($context);
// line 262
yield " ";
}
// line 263
yield " ";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 265
/**
* @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 267
/**
* @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 268
yield " ";
yield from $this->load("layout/partials/partners.html.twig", 268)->unwrap()->yield($context);
// line 269
yield " ";
yield from $this->load("layout/partials/footer.html.twig", 269)->unwrap()->yield($context);
// line 270
yield " ";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 373
/**
* @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"));
$__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 ( 682 => 373, 671 => 270, 668 => 269, 665 => 268, 652 => 267, 630 => 265, 619 => 263, 616 => 262, 613 => 261, 610 => 260, 607 => 259, 605 => 258, 602 => 257, 599 => 256, 597 => 255, 584 => 254, 573 => 252, 571 => 251, 558 => 250, 536 => 245, 513 => 5, 499 => 374, 497 => 373, 487 => 365, 452 => 332, 418 => 301, 414 => 300, 410 => 299, 406 => 298, 402 => 297, 398 => 296, 394 => 295, 389 => 294, 385 => 291, 381 => 288, 375 => 285, 369 => 280, 366 => 278, 360 => 273, 357 => 271, 355 => 267, 352 => 266, 350 => 265, 347 => 264, 345 => 254, 342 => 253, 340 => 250, 334 => 246, 332 => 245, 125 => 40, 120 => 34, 116 => 33, 111 => 32, 106 => 29, 102 => 28, 98 => 27, 93 => 26, 87 => 21, 82 => 18, 77 => 17, 71 => 12, 66 => 8, 61 => 5, 55 => 1,);
}
public function getSourceContext(): Source
{
return new Source("<!DOCTYPE html>
<html lang=\"fr\">
<head>
<meta charset=\"UTF-8\">
<title>{% block title %}NATIONS{% endblock %}</title>
{# ── Viewport & compatibilité ── #}
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">
{# ── SEO ── #}
<meta name=\"keywords\" content=\"nations isbb bethesda liveedu gestion scolaire\">
<meta name=\"description\" content=\"Institut secondaire bilingue des Nations — plateforme de gestion scolaire LiveEdu\">
<meta name=\"author\" content=\"Arsene Fokam Poka, Ing\">
{# ── Favicons ── #}
<link rel=\"icon\" type=\"image/png\" href=\"{{ asset('assets/images/BethesdaLogo.png') }}\">
<link rel=\"apple-touch-icon\" href=\"{{ asset('assets/images/BethesdaLogo.png') }}\">
{# ── Polices Google ── #}
<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/bootstrap-reboot.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.
══════════════════════════════════════════════════════ #}
<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: 12%;
--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 auto ──────────────────────────────────────── */
.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>
{% block stylesheets %}{% 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')) }}
{# ══════════════════════════════════════════════════════
SCRIPTS — chargés en fin de body pour la performance
══════════════════════════════════════════════════════ #}
{# ── 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 bundle (inclut Popper) ── #}
<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/jsjquery.simpleAccordion.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>
{% block javascripts %}{% endblock %}
</body>
</html>
", "layout/base.html.twig", "/var/www/bethesda/templates/layout/base.html.twig");
}
}