templates/website/index.html.twig line 1

Open in your IDE?
  1. <!DOCTYPE html>
  2. <html lang="fr" data-theme="light">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.   <title>Skolya — Un suivi scolaire en temps réel</title>
  7.   <link rel="preconnect" href="https://fonts.googleapis.com">
  8.   <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
  9.   <style>
  10.     /* ══════════════════════════════════════════════════
  11.        SKOLYA DESIGN SYSTEM — exact app_theme.dart
  12.        ══════════════════════════════════════════════════ */
  13.     :root {
  14.       /* ─── Brand palette (light) ─── */
  15.       --sk-primary:          #004AD8;
  16.       --sk-primary-dark:     #0039A6;
  17.       --sk-primary-container:#D8E2FF;
  18.       --sk-secondary:        #5A55A3;
  19.       --sk-secondary-container:#E2DFFF;
  20.       --sk-tertiary:         #00696F;
  21.       --sk-tertiary-container:#9DF2F8;
  22.       /* ─── Gradients (primary only) ─── */
  23.       --sk-grad:   linear-gradient(135deg, #3a7fff 0%, #004AD8 50%, #002882 100%);
  24.       --sk-grad-2: linear-gradient(135deg, #004AD8 0%, #0039A6 100%);
  25.       /* ─── Shimmer (primary shades only) ─── */
  26.       --sk-shimmer: linear-gradient(90deg,
  27.         #004AD8 0%, #3a7fff 35%, #A3C4FF 55%, #3a7fff 70%, #004AD8 100%);
  28.       /* ─── Light surfaces ─── */
  29.       --bg:        #FFFFFF;
  30.       --bg-2:      #E1E6F2;
  31.       --bg-3:      #D8E2FF;
  32.       --bg-card:   #FFFFFF;
  33.       --text:      #1B1D22;
  34.       --text-2:    #454A55;
  35.       --text-3:    #74777F;
  36.       --border:    rgba(0, 74, 216, 0.13);
  37.       --border-h:  rgba(0, 74, 216, 0.30);
  38.       --nav-bg:    rgba(255,255,255,0.92);
  39.       --shadow-sm: 0 2px 12px rgba(0,74,216,0.08);
  40.       --shadow-md: 0 8px 32px rgba(0,74,216,0.12);
  41.       --shadow-lg: 0 16px 48px rgba(0,74,216,0.18);
  42.       --sk-faq-bg: #EEF3FF;
  43.       --sk-footer-bg: #F8F9FF;
  44.     }
  45.     [data-theme="dark"] {
  46.       --sk-primary:          #004AD8;
  47.       --sk-primary-dark:     #0039A6;
  48.       --sk-primary-container:#0039A6;
  49.       --sk-secondary:        #C4C0FF;
  50.       --sk-secondary-container:#423B90;
  51.       --sk-tertiary:         #80D8E0;
  52.       --sk-tertiary-container:#004F54;
  53.       --sk-grad:   linear-gradient(135deg, #3a7fff 0%, #004AD8 50%, #002882 100%);
  54.       --sk-grad-2: linear-gradient(135deg, #004AD8 0%, #0039A6 100%);
  55.       --sk-shimmer: linear-gradient(90deg,
  56.         #A3C4FF 0%, #3a7fff 35%, #004AD8 55%, #3a7fff 70%, #A3C4FF 100%);
  57.       /* Deep navy palette — propre et élégant */
  58.       --bg:        #0E1117;
  59.       --bg-2:      #141824;
  60.       --bg-3:      #1B2238;
  61.       --bg-card:   #17202F;
  62.       --text:      #DDE3F0;
  63.       --text-2:    #8A96B8;
  64.       --text-3:    #505878;
  65.       --border:    rgba(100,140,255,0.10);
  66.       --border-h:  rgba(100,140,255,0.24);
  67.       --nav-bg:    rgba(14,17,23,0.94);
  68.       --shadow-sm: 0 2px 14px rgba(0,0,0,0.4);
  69.       --shadow-md: 0 8px 36px rgba(0,0,0,0.5);
  70.       --shadow-lg: 0 18px 54px rgba(0,0,0,0.6);
  71.       --sk-faq-bg: #0D1525;
  72.       --sk-footer-bg: #08090E;
  73.     }
  74.     /* ══════════════════════════════════════════════════
  75.        RESET & BASE
  76.        ══════════════════════════════════════════════════ */
  77.     *, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }
  78.     html { scroll-behavior:smooth; }
  79.     body {
  80.       font-family:'Poppins',sans-serif;
  81.       background:var(--bg);
  82.       color:var(--text);
  83.       transition:background .35s,color .35s;
  84.       overflow-x:hidden;
  85.     }
  86.     a { text-decoration:none; color:inherit; }
  87.     ul { list-style:none; }
  88.     button { font-family:'Poppins',sans-serif; cursor:pointer; border:none; outline:none; }
  89.     /* ══════════════════════════════════════════════════
  90.        ANIMATIONS
  91.        ══════════════════════════════════════════════════ */
  92.     @keyframes shimmer-txt {
  93.       0%   { background-position:0% 50%; }
  94.       100% { background-position:200% 50%; }
  95.     }
  96.     @keyframes shimmer-sweep {
  97.       0%   { left:-80%; }
  98.       100% { left:130%; }
  99.     }
  100.     @keyframes pulse-ring {
  101.       0%   { transform:scale(1);    opacity:.7; }
  102.       100% { transform:scale(1.65); opacity:0;  }
  103.     }
  104.     @keyframes float {
  105.       0%,100% { transform:translateY(0);   }
  106.       50%      { transform:translateY(-8px); }
  107.     }
  108.     @keyframes shimmer-num {
  109.       0%   { background-position:-200% 0; }
  110.       100% { background-position: 200% 0; }
  111.     }
  112.     .shimmer-txt {
  113.       background:var(--sk-shimmer);
  114.       background-size:200% 100%;
  115.       animation:shimmer-txt 3.5s linear infinite;
  116.       -webkit-background-clip:text;
  117.       background-clip:text;
  118.       -webkit-text-fill-color:transparent;
  119.     }
  120.     /* ══════════════════════════════════════════════════
  121.        LAYOUT
  122.        ══════════════════════════════════════════════════ */
  123.     .container { max-width:1340px; margin:0 auto; padding:0 24px; }
  124.     /* ══════════════════════════════════════════════════
  125.        NAVBAR
  126.        ══════════════════════════════════════════════════ */
  127.     .navbar {
  128.       position:fixed; top:0; left:0; right:0; z-index:9000;
  129.       background:var(--nav-bg);
  130.       backdrop-filter:blur(20px);
  131.       -webkit-backdrop-filter:blur(20px);
  132.       border-bottom:1px solid var(--border);
  133.       transition:box-shadow .3s, background .35s;
  134.     }
  135.     .navbar.scrolled { box-shadow:var(--shadow-md); }
  136.     .nav-inner {
  137.       max-width:1380px; margin:0 auto; padding:0 24px;
  138.       height:68px;
  139.       display:flex; align-items:center; gap:10px;
  140.     }
  141.     /* Logo */
  142.     .nav-logo { display:flex; align-items:center; gap:10px; flex-shrink:0; margin-right:8px; }
  143.     .nav-logo-mark {
  144.       width:38px; height:38px;
  145.       background:var(--sk-grad);
  146.       border-radius:11px;
  147.       display:flex; align-items:center; justify-content:center;
  148.       box-shadow:0 4px 14px rgba(0,74,216,.35);
  149.     }
  150.     .nav-logo-mark svg { width:20px; height:20px; }
  151.     .nav-logo-name { font-size:20px; font-weight:800; letter-spacing:-.4px; }
  152.     /* Links */
  153.     .nav-links { display:flex; align-items:center; gap:2px; flex:1; }
  154.     .nav-links a {
  155.       display:flex; align-items:center; gap:6px;
  156.       padding:7px 13px; border-radius:9px;
  157.       font-size:13.5px; font-weight:500; color:var(--text-2);
  158.       transition:background .2s, color .2s;
  159.       white-space:nowrap;
  160.     }
  161.     .nav-links a svg { width:15px; height:15px; flex-shrink:0; }
  162.     .nav-links a:hover { background:rgba(0,74,216,.07); color:var(--text); }
  163.     .nav-links a.active { background:rgba(0,74,216,.10); color:var(--sk-primary); }
  164.     .nav-links a.active svg { color:var(--sk-primary); }
  165.     /* Right */
  166.     .nav-right { display:flex; align-items:center; gap:8px; margin-left:auto; }
  167.     .btn-icon {
  168.       width:36px; height:36px; border-radius:9px;
  169.       border:1px solid var(--border); background:var(--bg-2);
  170.       display:flex; align-items:center; justify-content:center;
  171.       color:var(--text-2); cursor:pointer; transition:all .2s;
  172.     }
  173.     .btn-icon:hover { background:var(--bg-3); color:var(--text); border-color:var(--border-h); }
  174.     .btn-icon svg { width:16px; height:16px; }
  175.     .lang-wrap { position:relative; }
  176.     .lang-toggle {
  177.       display:flex; align-items:center; gap:5px;
  178.       padding:6px 10px; border-radius:9px;
  179.       border:1px solid var(--border); background:var(--bg-2);
  180.       font-size:12.5px; font-weight:600; color:var(--text-2);
  181.       cursor:pointer; transition:all .2s;
  182.     }
  183.     .lang-toggle:hover { background:var(--bg-3); color:var(--text); }
  184.     .lang-toggle svg { width:12px; height:12px; transition:transform .25s; }
  185.     .lang-toggle.open svg { transform:rotate(180deg); }
  186.     .lang-menu {
  187.       position:absolute; top:calc(100% + 8px); right:0;
  188.       background:var(--bg-card); border:1px solid var(--border);
  189.       border-radius:12px; padding:6px; min-width:130px;
  190.       box-shadow:var(--shadow-md);
  191.       opacity:0; pointer-events:none;
  192.       transform:translateY(-6px); transition:opacity .2s,transform .2s;
  193.       z-index:100;
  194.     }
  195.     .lang-menu.open { opacity:1; pointer-events:all; transform:translateY(0); }
  196.     .lang-menu a {
  197.       display:flex; align-items:center; gap:8px;
  198.       padding:8px 10px; border-radius:7px;
  199.       font-size:13px; font-weight:500; color:var(--text);
  200.       transition:background .15s;
  201.     }
  202.     .lang-menu a:hover { background:rgba(0,74,216,.07); }
  203.     .btn-login {
  204.       padding:7px 16px; border-radius:9px;
  205.       border:1px solid var(--border); background:transparent;
  206.       font-size:13px; font-weight:600; color:var(--text);
  207.       transition:all .2s;
  208.     }
  209.     .btn-login:hover { background:rgba(0,74,216,.07); border-color:var(--border-h); }
  210.     .btn-demo-nav {
  211.       padding:8px 18px; border-radius:9px;
  212.       background:var(--sk-grad);
  213.       font-size:13px; font-weight:700; color:white;
  214.       transition:all .25s;
  215.       box-shadow:0 4px 14px rgba(0,74,216,.3);
  216.       white-space:nowrap;
  217.     }
  218.     .btn-demo-nav:hover {
  219.       opacity:.9; transform:translateY(-1px);
  220.       box-shadow:0 8px 22px rgba(0,74,216,.4);
  221.     }
  222.     /* Hamburger */
  223.     .hamburger {
  224.       display:none; flex-direction:column; gap:5px;
  225.       width:36px; height:36px; align-items:center; justify-content:center;
  226.       border-radius:9px; border:1px solid var(--border); background:var(--bg-2);
  227.       cursor:pointer; transition:all .2s;
  228.     }
  229.     .hamburger span {
  230.       display:block; width:18px; height:2px;
  231.       background:var(--text); border-radius:2px; transition:all .3s;
  232.     }
  233.     .hamburger.open span:nth-child(1) { transform:translateY(7px) rotate(45deg); }
  234.     .hamburger.open span:nth-child(2) { opacity:0; }
  235.     .hamburger.open span:nth-child(3) { transform:translateY(-7px) rotate(-45deg); }
  236.     /* Mobile nav */
  237.     .mobile-nav {
  238.       display:none; position:fixed; top:68px; left:0; right:0;
  239.       background:var(--nav-bg); backdrop-filter:blur(20px);
  240.       border-bottom:1px solid var(--border);
  241.       padding:16px 24px 24px; z-index:8999;
  242.       opacity:0; transform:translateY(-8px);
  243.       transition:opacity .25s,transform .25s;
  244.     }
  245.     .mobile-nav.open { display:block; opacity:1; transform:translateY(0); }
  246.     .mobile-nav ul { display:flex; flex-direction:column; gap:4px; margin-bottom:16px; }
  247.     .mobile-nav ul a {
  248.       display:flex; align-items:center; gap:10px;
  249.       padding:12px 14px; border-radius:10px;
  250.       font-size:14.5px; font-weight:500; color:var(--text);
  251.       transition:background .2s;
  252.     }
  253.     .mobile-nav ul a:hover { background:rgba(0,74,216,.08); color:var(--sk-primary); }
  254.     .mobile-nav ul svg { width:17px; height:17px; }
  255.     .mob-actions { display:flex; gap:10px; }
  256.     .mob-actions .btn-login,
  257.     .mob-actions .btn-demo-nav { flex:1; text-align:center; display:block; }
  258.     /* ══════════════════════════════════════════════════
  259.        HERO
  260.        ══════════════════════════════════════════════════ */
  261.     #accueil {
  262.       min-height:100vh; padding:110px 32px 80px;
  263.       display:flex; align-items:center; background:var(--bg);
  264.     }
  265.     .hero-inner {
  266.       max-width:1340px; margin:0 auto;
  267.       display:grid; grid-template-columns:65fr 35fr;
  268.       gap:48px; align-items:stretch;
  269.     }
  270.     .hero-card {
  271.       background: var(--sk-primary);
  272.       border-radius:28px; padding:44px 44px;
  273.       position:relative; overflow:hidden;
  274.       display:flex; flex-direction:column; justify-content:center;
  275.     }
  276.     .hero-card::before {
  277.       content:''; position:absolute;
  278.       top:-60px; right:-60px; width:220px; height:220px;
  279.       border-radius:50%; background:rgba(255,255,255,.07);
  280.       pointer-events:none;
  281.     }
  282.     .hero-sweep {
  283.       position:absolute; top:0; left:-80%;
  284.       width:60%; height:100%;
  285.       background:linear-gradient(90deg,transparent,rgba(255,255,255,.09),transparent);
  286.       animation:shimmer-sweep 4.5s ease-in-out infinite;
  287.       pointer-events:none;
  288.     }
  289.     .hero-badge {
  290.       display:inline-flex; align-items:center; gap:6px;
  291.       background:rgba(255,255,255,.18); backdrop-filter:blur(6px);
  292.       padding:5px 12px; border-radius:30px;
  293.       font-size:11px; font-weight:600; color:white;
  294.       margin-bottom:18px; letter-spacing:.3px;
  295.       width:fit-content;
  296.     }
  297.     .hero-title {
  298.       font-size:clamp(26px,3.6vw,44px);
  299.       font-weight:900; line-height:1.18; color:white;
  300.       margin-bottom:20px; letter-spacing:-.5px;
  301.     }
  302.     .hero-sub {
  303.       font-size:15px; line-height:1.75;
  304.       color:rgba(255,255,255,.85); margin-bottom:36px;
  305.     }
  306.     /* Store badges */
  307.     .hero-stores {
  308.       display:flex;
  309.       gap:12px;
  310.       flex-wrap:wrap;
  311.       margin-top:20px;
  312.       align-items:center;
  313.     }
  314.     .store-badge {
  315.       display:inline-block;
  316.       transition:transform .22s, opacity .22s;
  317.     }
  318.     .store-badge:hover { transform:translateY(-2px) scale(1.04); opacity:.9; }
  319.     .store-badge img {
  320.       height:46px;
  321.       width:auto;
  322.       display:block;
  323.       filter: drop-shadow(0 2px 8px rgba(0,0,0,.3));
  324.     }
  325.     .hero-btns { display:flex; align-items:center; flex-wrap:wrap; gap:16px; justify-content:space-between; }
  326.     .hero-store-group { display:flex; gap:10px; align-items:center; }
  327.     .btn-hero-1 {
  328.       padding:13px 26px; background:white; color:var(--sk-primary);
  329.       border-radius:11px; font-size:14px; font-weight:800;
  330.       transition:all .25s;
  331.     }
  332.     .btn-hero-1:hover { transform:translateY(-2px); box-shadow:0 10px 28px rgba(0,0,0,.22); }
  333.     .btn-hero-2 {
  334.       padding:13px 26px; background:rgba(255,255,255,.15); color:white;
  335.       border:1.5px solid rgba(255,255,255,.38); border-radius:11px;
  336.       font-size:14px; font-weight:600;
  337.       backdrop-filter:blur(6px); transition:all .25s;
  338.     }
  339.     .btn-hero-2:hover { background:rgba(255,255,255,.25); }
  340.     .hero-img-box {
  341.       width:100%; aspect-ratio:3/2;
  342.       border-radius:22px; border:2px dashed rgba(255,255,255,0.35);
  343.       background:rgba(255,255,255,0.12);
  344.       display:flex; flex-direction:column; align-items:center; justify-content:center;
  345.       gap:14px; color:rgba(255,255,255,0.7); font-size:13.5px; font-weight:500;
  346.       animation:float 5s ease-in-out infinite;
  347.     }
  348.     /* desktop version (right column) — white border on bg */
  349.     .hero-visual .hero-img-box {
  350.       border-color: var(--border-h);
  351.       background: var(--bg-2);
  352.       color: var(--text-3);
  353.     }
  354.     .hero-img-box svg { width:52px; height:52px; opacity:.35; }
  355.     .hero-img-box span:last-child { font-size:12px; opacity:.6; }
  356.     /* Mobile image lives inside the card */
  357.     .hero-img-mobile { display:none; margin-top:28px; margin-bottom:28px; }
  358.     /* Desktop image in separate column */
  359.     .hero-visual { display:flex; align-items:stretch; justify-content:center; }
  360.     /* ══════════════════════════════════════════════════
  361.        COUNTER BAND
  362.        ══════════════════════════════════════════════════ */
  363.     #counter {
  364.       background:var(--bg-2);
  365.       padding:56px 24px;
  366.       border-top:1px solid var(--border);
  367.       border-bottom:1px solid var(--border);
  368.     }
  369.     .counter-grid {
  370.       max-width:1140px; margin:0 auto;
  371.       display:grid; grid-template-columns:repeat(4,1fr); gap:20px;
  372.     }
  373.     .counter-card {
  374.       position:relative; overflow:hidden;
  375.       background:var(--bg-card); border:1px solid var(--border);
  376.       border-radius:18px; padding:30px 22px 28px;
  377.       text-align:center; transition:transform .3s,box-shadow .3s,border-color .3s;
  378.     }
  379.     .counter-card::before {
  380.       content:''; position:absolute;
  381.       top:0; left:0; right:0; height:3px;
  382.       background:var(--sk-grad);
  383.     }
  384.     .counter-card::after {
  385.       content:''; position:absolute;
  386.       top:0; left:-100%; width:55%; height:100%;
  387.       background:linear-gradient(90deg,transparent,rgba(0,74,216,.05),transparent);
  388.       animation:shimmer-sweep 6s ease-in-out infinite;
  389.     }
  390.     .counter-card:hover { transform:translateY(-5px); box-shadow:var(--shadow-lg); border-color:var(--border-h); }
  391.     .ctr-emoji { font-size:28px; margin-bottom:12px; display:block; }
  392.     .ctr-num {
  393.       font-size:38px; font-weight:900; letter-spacing:-1px;
  394.       background:var(--sk-shimmer);
  395.       background-size:200% 100%;
  396.       animation:shimmer-num 3.5s linear infinite;
  397.       -webkit-background-clip:text; background-clip:text;
  398.       -webkit-text-fill-color:transparent; line-height:1.1;
  399.     }
  400.     .ctr-lbl {
  401.       display:block; margin-top:8px;
  402.       font-size:13px; font-weight:500; color:var(--text-2);
  403.     }
  404.     /* ══════════════════════════════════════════════════
  405.        SECTION COMMONS
  406.        ══════════════════════════════════════════════════ */
  407.     .sec-badge {
  408.       display:inline-flex; align-items:center; gap:6px;
  409.       background:rgba(0,74,216,.07);
  410.       border:1px solid rgba(0,74,216,.16);
  411.       color:var(--sk-primary);
  412.       padding:6px 16px; border-radius:30px;
  413.       font-size:12px; font-weight:700; margin-bottom:16px; letter-spacing:.3px;
  414.     }
  415.     .sec-badge svg { width:13px; height:13px; }
  416.     .sec-title {
  417.       font-size:clamp(22px,3vw,36px); font-weight:800;
  418.       letter-spacing:-.4px; color:var(--text); margin-bottom:14px;
  419.     }
  420.     .sec-sub {
  421.       font-size:15px; color:var(--text-2); line-height:1.75; max-width:560px;
  422.     }
  423.     /* scroll fade-in */
  424.     .fi {
  425.       opacity:0; transform:translateY(26px);
  426.       transition:opacity .65s ease,transform .65s ease;
  427.     }
  428.     .fi.visible { opacity:1; transform:translateY(0); }
  429.     /* ══════════════════════════════════════════════════
  430.        FEATURES
  431.        ══════════════════════════════════════════════════ */
  432.     #fonctionnalites { background:var(--bg); padding:96px 24px; }
  433.     .feat-hdr { text-align:center; margin-bottom:64px; }
  434.     .feat-hdr .sec-sub { margin:0 auto; }
  435.     .feat-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  436.     .feat-card {
  437.       position:relative; overflow:hidden;
  438.       background:var(--bg-card); border:1px solid var(--border);
  439.       border-radius:18px; padding:34px 28px; transition:all .3s;
  440.     }
  441.     .feat-card::after {
  442.       content:''; position:absolute; top:0; left:-100%;
  443.       width:55%; height:100%;
  444.       background:linear-gradient(90deg,transparent,rgba(0,74,216,.04),transparent);
  445.       transition:left .6s ease;
  446.     }
  447.     .feat-card:hover::after { left:180%; }
  448.     .feat-card:hover { transform:translateY(-5px); border-color:var(--border-h); box-shadow:var(--shadow-md); }
  449.     .feat-card:hover .feat-icon { background:var(--sk-grad); }
  450.     .feat-card:hover .feat-icon svg { stroke:white; }
  451.     .feat-icon {
  452.       width:52px; height:52px; border-radius:13px;
  453.       background:rgba(0,74,216,.09);
  454.       display:flex; align-items:center; justify-content:center;
  455.       margin-bottom:20px; transition:background .3s;
  456.     }
  457.     .feat-icon svg { width:24px; height:24px; stroke:var(--sk-primary); fill:none; stroke-width:2; transition:stroke .3s; }
  458.     .feat-name { font-size:16px; font-weight:700; color:var(--text); margin-bottom:10px; }
  459.     .feat-desc { font-size:13.5px; color:var(--text-2); line-height:1.7; }
  460.     /* ══════════════════════════════════════════════════
  461.        FAQ
  462.        ══════════════════════════════════════════════════ */
  463.     #faq { background:var(--sk-faq-bg,#F0F4FF); padding:96px 24px; }
  464.     .faq-wrap {
  465.       max-width:1260px; margin:0 auto;
  466.       display:grid; grid-template-columns:45fr 55fr;
  467.       gap:56px; align-items:start;
  468.     }
  469.     .faq-img-side {
  470.       position:sticky; top:90px;
  471.     }
  472.     .faq-direct-img {
  473.       width:100%;
  474.       border-radius:16px;
  475.       box-shadow:0 16px 48px rgba(0,74,216,.18);
  476.       overflow:hidden;
  477.     }
  478.     .faq-direct-img img {
  479.       width:100%;
  480.       height:auto;
  481.       display:block;
  482.       border-radius:16px;
  483.     }
  484.     .faq-img-box {
  485.       width:100%; aspect-ratio:16/9;
  486.       border-radius:18px; border:2px dashed var(--border-h);
  487.       background:var(--bg-card);
  488.       display:flex; flex-direction:column; align-items:center; justify-content:center;
  489.       gap:12px; color:var(--text-3); font-size:13.5px;
  490.     }
  491.     .faq-img-box svg { width:48px; height:48px; opacity:.35; }
  492.     .accordion { display:flex; flex-direction:column; gap:12px; margin-top:28px; }
  493.     .acc-item {
  494.       background:var(--bg-card); border:1px solid var(--border);
  495.       border-radius:14px; overflow:hidden;
  496.       transition:border-color .25s,box-shadow .25s;
  497.     }
  498.     .acc-item.open { border-color:var(--border-h); box-shadow:var(--shadow-sm); }
  499.     .acc-trigger {
  500.       display:flex; align-items:center; justify-content:space-between;
  501.       gap:16px; padding:20px 22px; cursor:pointer; user-select:none;
  502.     }
  503.     .acc-q { font-size:14.5px; font-weight:600; color:var(--text); }
  504.     .acc-icon {
  505.       width:28px; height:28px; flex-shrink:0; border-radius:8px;
  506.       background:rgba(0,74,216,.09);
  507.       display:flex; align-items:center; justify-content:center;
  508.       color:var(--sk-primary); transition:all .3s;
  509.     }
  510.     .acc-item.open .acc-icon { background:var(--sk-grad); color:white; transform:rotate(180deg); }
  511.     .acc-icon svg { width:14px; height:14px; }
  512.     .acc-body { max-height:0; overflow:hidden; transition:max-height .4s ease; }
  513.     .acc-body.open { max-height:250px; }
  514.     .acc-body-inner { padding:0 22px 20px; font-size:13.5px; color:var(--text-2); line-height:1.75; }
  515.     /* ══════════════════════════════════════════════════
  516.        CONTACT
  517.        ══════════════════════════════════════════════════ */
  518.     #contact {
  519.       background:var(--bg);
  520.       padding:80px 24px;
  521.       text-align:center;
  522.       margin-bottom:64px;
  523.     }
  524.     /* La card porte le gradient à 85% de largeur avec bords arrondis */
  525.     .contact-card {
  526.       position:relative; overflow:hidden;
  527.       width:85%; max-width:1200px;
  528.       margin:0 auto;
  529.       background:var(--sk-grad);
  530.       border-radius:32px;
  531.       padding:80px 56px;
  532.     }
  533.     .contact-card::before {
  534.       content:''; position:absolute;
  535.       bottom:-100px; right:-60px; width:380px; height:380px;
  536.       border-radius:50%; background:rgba(255,255,255,.05); pointer-events:none;
  537.     }
  538.     .contact-card::after {
  539.       content:''; position:absolute;
  540.       top:-70px; left:-40px; width:280px; height:280px;
  541.       border-radius:50%; background:rgba(255,255,255,.04); pointer-events:none;
  542.     }
  543.     .contact-sweep {
  544.       position:absolute; top:0; left:-80%;
  545.       width:55%; height:100%;
  546.       background:linear-gradient(90deg,transparent,rgba(255,255,255,.07),transparent);
  547.       animation:shimmer-sweep 5s ease-in-out infinite;
  548.       pointer-events:none; z-index:0;
  549.     }
  550.     .contact-title {
  551.       position:relative; z-index:1;
  552.       font-size:clamp(22px,3vw,34px); font-weight:900; color:white;
  553.       margin-bottom:16px; letter-spacing:-.4px;
  554.     }
  555.     .contact-sub {
  556.       position:relative; z-index:1;
  557.       font-size:15px; color:rgba(255,255,255,.82);
  558.       margin-bottom:36px; line-height:1.7;
  559.     }
  560.     .btn-wa {
  561.       position:relative; z-index:1;
  562.       display:inline-flex; align-items:center; gap:10px;
  563.       padding:15px 34px; background:#25D366; color:white;
  564.       border-radius:13px; font-size:15px; font-weight:700;
  565.       transition:all .25s;
  566.       box-shadow:0 6px 22px rgba(37,211,102,.4);
  567.     }
  568.     .btn-wa:hover { background:#1ab955; transform:translateY(-2px); box-shadow:0 12px 32px rgba(37,211,102,.5); }
  569.     .btn-wa svg { width:22px; height:22px; fill:white; flex-shrink:0; }
  570.     /* ══════════════════════════════════════════════════
  571.        FOOTER
  572.        ══════════════════════════════════════════════════ */
  573.     footer { background:var(--sk-footer-bg); border-top:1px solid var(--border); }
  574.     .footer-top {
  575.       max-width:1340px; margin:0 auto;
  576.       padding:64px 24px 52px;
  577.       display:grid; grid-template-columns:2fr 1fr 1fr 1.2fr; gap:48px;
  578.     }
  579.     .footer-brand .nav-logo { margin-bottom:14px; }
  580.     .footer-brand p {
  581.       font-size:13.5px; color:var(--text-2); line-height:1.75;
  582.       margin-bottom:22px; max-width:280px;
  583.     }
  584.     .footer-socials { display:flex; gap:10px; }
  585.     .footer-socials a {
  586.       width:36px; height:36px; border-radius:9px;
  587.       border:1px solid var(--border); background:var(--bg-card);
  588.       display:flex; align-items:center; justify-content:center;
  589.       color:var(--text-2); transition:all .2s;
  590.     }
  591.     .footer-socials a:hover { border-color:var(--sk-primary); color:var(--sk-primary); }
  592.     .footer-socials svg { width:16px; height:16px; }
  593.     .footer-col h5 {
  594.       font-size:11px; font-weight:700; color:var(--text);
  595.       margin-bottom:18px; letter-spacing:.8px; text-transform:uppercase;
  596.     }
  597.     .footer-col ul { display:flex; flex-direction:column; gap:10px; }
  598.     .footer-col ul a { font-size:13.5px; color:var(--text-2); transition:color .2s; }
  599.     .footer-col ul a:hover { color:var(--sk-primary); }
  600.     .footer-clist { display:flex; flex-direction:column; gap:12px; }
  601.     .footer-ci {
  602.       display:flex; align-items:flex-start; gap:10px;
  603.       font-size:13.5px; color:var(--text-2);
  604.     }
  605.     .footer-ci svg { width:16px; height:16px; color:var(--sk-primary); flex-shrink:0; margin-top:2px; }
  606.     .footer-bot {
  607.       border-top:1px solid var(--border);
  608.       padding:20px 24px; max-width:1340px; margin:0 auto;
  609.       display:flex; align-items:center; justify-content:space-between;
  610.       gap:16px; flex-wrap:wrap;
  611.     }
  612.     .footer-bot p { font-size:13px; color:var(--text-3); }
  613.     .footer-bot-links { display:flex; gap:20px; }
  614.     .footer-bot-links a { font-size:13px; color:var(--text-3); transition:color .2s; }
  615.     .footer-bot-links a:hover { color:var(--sk-primary); }
  616.     /* ══════════════════════════════════════════════════
  617.        FLOATING WHATSAPP
  618.        ══════════════════════════════════════════════════ */
  619.     .wa-float {
  620.       position:fixed; bottom:28px; right:28px; z-index:8000;
  621.       width:58px; height:58px; border-radius:50%;
  622.       background:#25D366;
  623.       display:flex; align-items:center; justify-content:center;
  624.       box-shadow:0 6px 24px rgba(37,211,102,.45);
  625.       transition:all .3s;
  626.     }
  627.     .wa-float::before {
  628.       content:''; position:absolute;
  629.       border:2px solid #25D366; border-radius:50%;
  630.       width:100%; height:100%;
  631.       animation:pulse-ring 2.2s ease-out infinite;
  632.     }
  633.     .wa-float:hover { transform:scale(1.1); box-shadow:0 10px 32px rgba(37,211,102,.55); }
  634.     .wa-float svg { width:30px; height:30px; fill:white; }
  635.     /* ══════════════════════════════════════════════════
  636.        RESPONSIVE
  637.        ══════════════════════════════════════════════════ */
  638.     /* ══════════════════════════════════════════════════
  639.        APP SCREENSHOTS SECTION
  640.        ══════════════════════════════════════════════════ */
  641.     #apercu { background:var(--bg); padding:96px 24px; }
  642.     .apercu-hdr { text-align:center; margin-bottom:56px; }
  643.     .apercu-hdr .sec-sub { margin:0 auto; }
  644.     /* ══════════════════════════════════════════════════
  645.        APP MOCKUP GRID (images prêtes avec cadres)
  646.        ══════════════════════════════════════════════════ */
  647.     .mockup-grid {
  648.       display:grid;
  649.       grid-template-columns:1fr 1fr;
  650.       gap:48px;
  651.       max-width:1200px;
  652.       margin:0 auto;
  653.     }
  654.     .mockup-item {
  655.       display:flex;
  656.       align-items:center;
  657.       justify-content:center;
  658.       transition:transform .35s, filter .35s;
  659.     }
  660.     .mockup-item:hover { transform:translateY(-8px) scale(1.02); }
  661.     .mockup-img {
  662.       width:100%;
  663.       height:auto;
  664.       display:block;
  665.       border-radius:20px;
  666.       filter: drop-shadow(0 24px 50px rgba(0,74,216,.18));
  667.       transition: filter .35s, transform .35s;
  668.     }
  669.     [data-theme="dark"] .mockup-img {
  670.       filter: drop-shadow(0 20px 40px rgba(0,74,216,.28));
  671.     }
  672.     .mockup-item:hover .mockup-img {
  673.       filter: drop-shadow(0 28px 50px rgba(0,74,216,.25));
  674.     }
  675.     /* ── Remove old phone rules ── */
  676.     @media (max-width:1100px) {
  677.       .feat-grid { grid-template-columns:repeat(2,1fr); }
  678.       .faq-wrap { grid-template-columns:1fr; gap:36px; }
  679.       .faq-img-side { position:static; max-width:700px; width:100%; }
  680.       .footer-top { grid-template-columns:1fr 1fr; gap:36px; }
  681.     }
  682.     @media (max-width:900px) {
  683.       .mockup-grid { grid-template-columns:1fr 1fr; gap:24px; }
  684.       .counter-grid { grid-template-columns:repeat(2,1fr); }
  685.       .hero-inner { grid-template-columns:1fr; gap:36px; }
  686.       .hero-visual { display:none; }
  687.       .hero-img-mobile { display:block; }
  688.       .phones-track { gap:16px; }
  689.       .phone-frame { flex:0 0 160px; }
  690.       .phone-frame.featured { flex:0 0 175px; transform:translateY(-6px); }
  691.     }
  692.     @media (max-width:768px) {
  693.       /* Nav: hide links and auth buttons only — keep theme & lang */
  694.       .nav-links { display:none; }
  695.       .btn-login, .btn-demo-nav { display:none; }
  696.       .hamburger { display:flex; }
  697.       #contact { padding:48px 16px; }
  698.       .contact-card { width:95%; padding:52px 28px; border-radius:22px; }
  699.       section { padding:72px 16px; }
  700.       #accueil { padding:104px 16px 64px; }
  701.       .hero-card { padding:38px 28px; }
  702.       /* FAQ: image goes to top, full width */
  703.       .faq-img-side { display:block; position:static; }
  704.     }
  705.     @media (max-width:580px) {
  706.       .mockup-grid { grid-template-columns:1fr; gap:20px; }
  707.       .feat-grid { grid-template-columns:1fr; }
  708.       .counter-grid { grid-template-columns:1fr 1fr; }
  709.       .hero-btns { flex-direction:column; }
  710.       .hero-stores { gap:10px; }
  711.       .store-badge img { height:34px; }
  712.       .footer-top { grid-template-columns:1fr; }
  713.       .footer-bot { flex-direction:column; text-align:center; }
  714.       .wa-float { bottom:18px; right:18px; }
  715.       /* Phones: horizontal scroll on very small screens */
  716.       .phones-track { flex-wrap:nowrap; overflow-x:auto; justify-content:flex-start; padding-bottom:12px; }
  717.       .phones-track::-webkit-scrollbar { height:4px; }
  718.       .phones-track::-webkit-scrollbar-track { background:var(--bg-3); border-radius:4px; }
  719.       .phones-track::-webkit-scrollbar-thumb { background:var(--sk-primary); border-radius:4px; }
  720.       .phone-frame { flex:0 0 150px; }
  721.       .phone-frame.featured { flex:0 0 165px; transform:translateY(-4px); }
  722.     }
  723.   </style>
  724. </head>
  725. <body>
  726. <!-- ════════════════════════════════════
  727.      NAVBAR
  728.      ════════════════════════════════════ -->
  729. <nav class="navbar" id="navbar">
  730.   <div class="nav-inner">
  731.     <a href="#accueil" class="nav-logo">
  732.       <div class="nav-logo-mark">
  733.         <svg viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
  734.           <path d="M22 10v6M2 10l10-5 10 5-10 5z"/>
  735.           <path d="M6 12.5v4c3 3 9 3 12 0v-4"/>
  736.         </svg>
  737.       </div>
  738.       <span class="nav-logo-name shimmer-txt">Skolya</span>
  739.     </a>
  740.     <ul class="nav-links">
  741.       <li><a href="#accueil" class="active">
  742.         <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  743.           <path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/>
  744.         </svg>
  745.         <span class="t" data-fr="Accueil" data-en="Home">Accueil</span>
  746.       </a></li>
  747.       <li><a href="#fonctionnalites">
  748.         <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  749.           <rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/>
  750.           <rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/>
  751.         </svg>
  752.         <span class="t" data-fr="Fonctionnalités" data-en="Features">Fonctionnalités</span>
  753.       </a></li>
  754.       <li><a href="#faq">
  755.         <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  756.           <circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17" stroke-width="3"/>
  757.         </svg>
  758.         FAQ
  759.       </a></li>
  760.       <li><a href="#contact">
  761.         <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  762.           <path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
  763.         </svg>
  764.         <span class="t" data-fr="Contact" data-en="Contact">Contact</span>
  765.       </a></li>
  766.     </ul>
  767.     <div class="nav-right">
  768.       <button class="btn-icon" id="themeBtn" title="Basculer le thème">
  769.         <svg id="iconSun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
  770.           <circle cx="12" cy="12" r="5"/>
  771.           <line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/>
  772.           <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/>
  773.           <line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/>
  774.           <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>
  775.         </svg>
  776.         <svg id="iconMoon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" style="display:none">
  777.           <path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/>
  778.         </svg>
  779.       </button>
  780.       <div class="lang-wrap">
  781.         <button class="lang-toggle" id="langBtn">
  782.           <span id="flagEl">🇫🇷</span>
  783.           <span id="codeEl">FR</span>
  784.           <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg>
  785.         </button>
  786.         <div class="lang-menu" id="langMenu">
  787.           <a href="#" onclick="setLang('fr');return false;">🇫🇷 Français</a>
  788.           <a href="#" onclick="setLang('en');return false;">🇬🇧 English</a>
  789.         </div>
  790.       </div>
  791.       <a href="/login" class="btn-login t" data-fr="Connexion" data-en="Login">Connexion</a>
  792.       <a href="#contact" class="btn-demo-nav t" data-fr="Demander une démo" data-en="Request a demo">Demander une démo</a>
  793.     </div>
  794.     <button class="hamburger" id="hambBtn" aria-label="Menu">
  795.       <span></span><span></span><span></span>
  796.     </button>
  797.   </div>
  798. </nav>
  799. <!-- Mobile nav -->
  800. <div class="mobile-nav" id="mobileNav">
  801.   <ul>
  802.     <li><a href="#accueil" onclick="closeMob()">
  803.       <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
  804.       <span class="t" data-fr="Accueil" data-en="Home">Accueil</span>
  805.     </a></li>
  806.     <li><a href="#fonctionnalites" onclick="closeMob()">
  807.       <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/></svg>
  808.       <span class="t" data-fr="Fonctionnalités" data-en="Features">Fonctionnalités</span>
  809.     </a></li>
  810.     <li><a href="#faq" onclick="closeMob()">
  811.       <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17" stroke-width="3"/></svg>
  812.       FAQ
  813.     </a></li>
  814.     <li><a href="#contact" onclick="closeMob()">
  815.       <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
  816.       <span class="t" data-fr="Contact" data-en="Contact">Contact</span>
  817.     </a></li>
  818.   </ul>
  819.   <div class="mob-actions">
  820.     <a href="/login" class="btn-login t" data-fr="Connexion" data-en="Login">Connexion</a>
  821.     <a href="#contact" class="btn-demo-nav t" data-fr="Demander une démo" data-en="Request a demo">Demander une démo</a>
  822.   </div>
  823. </div>
  824. <!-- ════════════════════════════════════
  825.      HERO
  826.      ════════════════════════════════════ -->
  827. <section id="accueil">
  828.   <div class="hero-inner">
  829.     <div class="hero-card fi">
  830.       <div class="hero-sweep"></div>
  831.       <div class="hero-badge">
  832.         🎓 <span class="t" data-fr="Le futur du suivi scolaire commence ici" data-en="The future of school monitoring starts here">Le futur du suivi scolaire commence ici</span>
  833.       </div>
  834.       <!-- Image visible uniquement en responsive (inside card) -->
  835.       <div class="hero-img-mobile">
  836.         <img
  837.             src="{{ asset('assets-website/img/skolya/hero.jpeg') }}"           
  838.             alt="Enseignant et parents utilisent Skolya"
  839.           style="width:100%;border-radius:16px;object-fit:cover;margin-top:24px;display:block;
  840.                  box-shadow:0 12px 32px rgba(0,0,0,.2);"
  841.           loading="eager"
  842.         />
  843.       </div>
  844.       <h1 class="hero-title t"
  845.           data-fr="Réinventez le lien entre l'école et la maison"
  846.           data-en="Reinvent the link between school and home">
  847.         Réinventez le lien entre l'école et la maison
  848.       </h1>
  849.       <p class="hero-sub t"
  850.          data-fr="Skolya révolutionne l'éducation en connectant parents et établissements autour d'une solution digitale complète. Données en temps réel, gestion simplifiée et communication fluide pour une meilleure performance scolaire."
  851.          data-en="Skolya revolutionizes education by connecting parents and schools around a complete digital solution. Real-time data, simplified management and fluid communication for better academic performance.">
  852.         Skolya révolutionne l'éducation en connectant parents et établissements autour d'une solution digitale complète. Données en temps réel, gestion simplifiée et communication fluide pour une meilleure performance scolaire.
  853.       </p>
  854.       <div class="hero-btns">
  855.         <a href="#contact" class="btn-hero-1 t" data-fr="Demander une démo" data-en="Request a demo">Demander une démo</a>
  856.         <div class="hero-store-group">
  857.           <a href="#" class="store-badge" aria-label="Télécharger sur l'App Store" target="_blank" rel="noopener">
  858.             <img src="{{asset('assets-website/img/skolya/appstore_badge.png')}}">          </a>
  859.           <a href="#" class="store-badge" aria-label="Obtenir sur Google Play" target="_blank" rel="noopener">
  860.             <img src="{{asset('assets-website/img/skolya/playstore_badge.png')}}">
  861.           </a>
  862.         </div>
  863.       </div>
  864.     </div>
  865.     <div class="hero-visual fi" style="transition-delay:.15s">
  866.       <img
  867.         src="{{ asset('assets-website/img/skolya/hero.jpeg') }}" 
  868.         alt="Enseignant et parents utilisent Skolya"
  869.              
  870.         style="
  871.           width:100%; height:100%;
  872.           border-radius:24px;
  873.           object-fit:cover;
  874.           box-shadow:0 24px 60px rgba(0,74,216,.18), 0 6px 18px rgba(0,0,0,.1);
  875.           display:block;
  876.         "
  877.         loading="eager"
  878.       />
  879.     </div>
  880.   </div>
  881. </section>
  882. <!-- ════════════════════════════════════
  883.      COUNTER
  884.      ════════════════════════════════════ -->
  885. <section id="counter">
  886.   <div class="counter-grid">
  887.     <div class="counter-card fi">
  888.       <span class="ctr-emoji">👨‍🎓</span>
  889.       <div class="ctr-num" data-target="10000" data-fmt="kplus">0</div>
  890.       <span class="ctr-lbl t" data-fr="Utilisateurs actifs" data-en="Active users">Utilisateurs actifs</span>
  891.     </div>
  892.     <div class="counter-card fi" style="transition-delay:.1s">
  893.       <span class="ctr-emoji">⚡</span>
  894.       <div class="ctr-num" data-target="80" data-fmt="plus">0</div>
  895.       <span class="ctr-lbl t" data-fr="Fonctionnalités" data-en="Features">Fonctionnalités</span>
  896.     </div>
  897.     <div class="counter-card fi" style="transition-delay:.2s">
  898.       <span class="ctr-emoji">🏫</span>
  899.       <div class="ctr-num" data-target="120" data-fmt="plus">0</div>
  900.       <span class="ctr-lbl t" data-fr="Établissements partenaires" data-en="Partner schools">Établissements partenaires</span>
  901.     </div>
  902.     <div class="counter-card fi" style="transition-delay:.3s">
  903.       <span class="ctr-emoji">⭐</span>
  904.       <div class="ctr-num" data-target="98" data-fmt="pct">0</div>
  905.       <span class="ctr-lbl t" data-fr="Clients satisfaits" data-en="Satisfied clients">Clients satisfaits</span>
  906.     </div>
  907.   </div>
  908. </section>
  909. <!-- ════════════════════════════════════
  910.      FEATURES
  911.      ════════════════════════════════════ -->
  912. <section id="fonctionnalites">
  913.   <div class="container">
  914.     <div class="feat-hdr fi">
  915.       <div class="sec-badge">
  916.         <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/></svg>
  917.         <span class="t" data-fr="Fonctionnalités" data-en="Features">Fonctionnalités</span>
  918.       </div>
  919.       <h2 class="sec-title t" data-fr="Tout ce dont vous avez besoin" data-en="Everything you need">Tout ce dont vous avez besoin</h2>
  920.       <p class="sec-sub t"
  921.          data-fr="Une solution complète pour moderniser la gestion de votre établissement scolaire et révolutionner l'expérience éducative."
  922.          data-en="A complete solution to modernize the management of your institution and revolutionize the educational experience.">
  923.         Une solution complète pour moderniser la gestion de votre établissement scolaire et révolutionner l'expérience éducative.
  924.       </p>
  925.     </div>
  926.     <div class="feat-grid">
  927.       <div class="feat-card fi">
  928.         <div class="feat-icon">
  929.           <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  930.             <path d="M4 19.5A2.5 2.5 0 016.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z"/>
  931.             <line x1="9" y1="7" x2="15" y2="7"/><line x1="9" y1="11" x2="15" y2="11"/>
  932.           </svg>
  933.         </div>
  934.         <div class="feat-name t" data-fr="Cahiers de Texte Numériques" data-en="Digital Lesson Logs">Cahiers de Texte Numériques</div>
  935.         <div class="feat-desc t"
  936.              data-fr="Chaque enseignant enregistre ses séances en temps réel : chapitre traité, contenu, date et durée. Admins et inspecteurs suivent la progression des cours dans chaque classe — sans déplacement, sans cahiers physiques."
  937.              data-en="Teachers log each session in real time: chapter, content, date and duration. Admins and inspectors track class progress remotely — no travel, no physical registers.">
  938.           Chaque enseignant enregistre ses séances en temps réel : chapitre traité, contenu, date et durée. Admins et inspecteurs suivent la progression des cours dans chaque classe — sans déplacement, sans cahiers physiques.
  939.         </div>
  940.       </div>
  941.       <div class="feat-card fi" style="transition-delay:.06s">
  942.         <div class="feat-icon"><svg viewBox="0 0 24 24"><path d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2"/><path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11" stroke-linecap="round"/></svg></div>
  943.         <div class="feat-name t" data-fr="Fiche d'appel numérique" data-en="Digital attendance sheet">Fiche d'appel numérique</div>
  944.         <div class="feat-desc t" data-fr="L'enseignant fait l'appel sur son téléphone ou tablette. En fin de semaine, la fiche d'appel est générée automatiquement avec toutes les absences enregistrées." data-en="Teachers take attendance on phone or tablet. At week's end, a full attendance sheet is automatically generated with all recorded absences.">L'enseignant fait l'appel sur son téléphone ou tablette. En fin de semaine, la fiche d'appel est générée automatiquement avec toutes les absences enregistrées.</div>
  945.       </div>
  946.       <div class="feat-card fi" style="transition-delay:.12s">
  947.         <div class="feat-icon"><svg viewBox="0 0 24 24"><line x1="12" y1="1" x2="12" y2="23"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg></div>
  948.         <div class="feat-name t" data-fr="Gestion des finances" data-en="Finance management">Gestion des finances</div>
  949.         <div class="feat-desc t" data-fr="Frais de scolarité gérés de A à Z : reçus de paiement générés automatiquement, notifications en temps réel sur l'app parent et relances automatiques des retards." data-en="School fees managed end-to-end: auto-generated payment receipts, real-time parent app notifications, and automatic late payment reminders.">Frais de scolarité gérés de A à Z : reçus de paiement générés automatiquement, notifications en temps réel sur l'app parent et relances automatiques des retards.</div>
  950.       </div>
  951.       <div class="feat-card fi" style="transition-delay:.24s">
  952.         <div class="feat-icon"><svg viewBox="0 0 24 24"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18" stroke-width="3"/></svg></div>
  953.         <div class="feat-name t" data-fr="App mobile parent" data-en="Parent mobile app">App mobile parent</div>
  954.         <div class="feat-desc t" data-fr="Une app aussi fluide que WhatsApp, disponible sur Android et iOS. Le parent reçoit et consulte en temps réel toutes les informations concernant ses enfants." data-en="As smooth as WhatsApp, available on Android & iOS. Parents receive and consult real-time information about their children — anytime, anywhere.">Une app aussi fluide que WhatsApp, disponible sur Android et iOS. Le parent reçoit et consulte en temps réel toutes les informations concernant ses enfants.</div>
  955.       </div>
  956.       <div class="feat-card fi" style="transition-delay:.30s">
  957.         <div class="feat-icon"><svg viewBox="0 0 24 24"><path d="M2 3h6a4 4 0 014 4v14a3 3 0 00-3-3H2z"/><path d="M7 11V7a5 5 0 0110 0v4" stroke-linecap="round"/></svg></div>
  958.         <div class="feat-name t" data-fr="Bulletins & Statistiques" data-en="Report cards & Stats">Bulletins & Statistiques</div>
  959.         <div class="feat-desc t" data-fr="Bulletins conformes aux nouvelles APC, statistiques détaillées pour suivre l'évolution de la classe et de chaque élève individuellement." data-en="APC-compliant report cards, detailed stats tracking class progress and each student's individual evolution.">Bulletins conformes aux nouvelles APC, statistiques détaillées pour suivre l'évolution de la classe et de chaque élève individuellement.</div>
  960.       </div>
  961.       <div class="feat-card fi" style="transition-delay:.36s">
  962.         <div class="feat-icon"><svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/><line x1="12" y1="20" x2="12" y2="4"/><line x1="6" y1="20" x2="6" y2="14"/></svg></div>
  963.         <div class="feat-name t" data-fr="Messagerie instantanée" data-en="Instant messaging">Messagerie instantanée</div>
  964.         <div class="feat-desc t" data-fr="Une messagerie intégrée connecte parents, enseignants et administration par salle de classe — pour une communication fluide et centralisée." data-en="Built-in messaging connects parents, teachers and admin by classroom — for fluid, centralized communication.">Une messagerie intégrée connecte parents, enseignants et administration par salle de classe — pour une communication fluide et centralisée.</div>
  965.       </div>
  966.     </div>
  967.   </div>
  968. </section>
  969. <!-- ════════════════════════════════════
  970.      APP SCREENSHOTS
  971.      ════════════════════════════════════ -->
  972. <section id="apercu">
  973.   <div class="container">
  974.     <div class="apercu-hdr fi">
  975.       <div class="sec-badge">
  976.         <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="2" width="14" height="20" rx="2"/><line x1="12" y1="18" x2="12.01" y2="18" stroke-width="3"/></svg>
  977.         <span class="t" data-fr="Aperçu de l'application" data-en="App preview">Aperçu de l'application</span>
  978.       </div>
  979.       <h2 class="sec-title t" data-fr="Skolya dans votre poche" data-en="Skolya in your pocket">Skolya dans votre poche</h2>
  980.       <p class="sec-sub t"
  981.          data-fr="Une interface mobile soignée, pensée pour tous les acteurs de l'école. Intuitive, rapide, et disponible même hors connexion."
  982.          data-en="A polished mobile interface, designed for every member of the school community. Intuitive, fast, and available even offline.">
  983.         Une interface mobile soignée, pensée pour tous les acteurs de l'école. Intuitive, rapide, et disponible même hors connexion.
  984.       </p>
  985.     </div>
  986.     <div class="mockup-grid">
  987.       <div class="mockup-item fi" style="transition-delay:.08s">
  988.         <img src="{{asset('assets-website/img/skolya/absences-retards.png')}}"
  989.             alt="Absences et Retards — Skolya app"
  990.              class="mockup-img" loading="lazy"/>
  991.       </div>
  992.       <div class="mockup-item fi" style="transition-delay:.18s">
  993.         <img src="{{asset('assets-website/img/skolya/devoirs-scolarite.png')}}"
  994.             alt="Devoirs et Scolarité — Skolya app"
  995.              class="mockup-img" loading="lazy"/>
  996.       </div>
  997.     </div>
  998.   </div>
  999. </section>
  1000. <!-- ════════════════════════════════════
  1001.      FAQ
  1002.      ════════════════════════════════════ -->
  1003. <!-- ════════════════════════════════════
  1004.      FAQ
  1005.      ════════════════════════════════════ -->
  1006. <section id="faq">
  1007.   <div class="container">
  1008.     <div class="faq-wrap">
  1009.       <div class="faq-img-side fi">
  1010.         <div class="faq-direct-img">
  1011.           <img src="{{ asset('assets-website/img/skolya/laptop-screen.jpeg') }}" alt="Skolya">
  1012.         </div>
  1013.       </div>
  1014.       <div class="fi" style="transition-delay:.1s">
  1015.         <div class="sec-badge">
  1016.           <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17" stroke-width="3"/></svg>
  1017.           FAQ
  1018.         </div>
  1019.         <h2 class="sec-title t" data-fr="Questions fréquentes" data-en="Frequently asked questions">Questions fréquentes</h2>
  1020.         <p class="sec-sub t"
  1021.            data-fr="Tout ce que vous devez savoir sur Skolya et comment nous transformons votre établissement."
  1022.            data-en="Everything you need to know about Skolya and how we can transform your institution.">
  1023.           Tout ce que vous devez savoir sur Skolya et comment nous transformons votre établissement.
  1024.         </p>
  1025.         <div class="accordion">
  1026.           <div class="acc-item">
  1027.             <div class="acc-trigger" onclick="toggleAcc(this)">
  1028.               <span class="acc-q t" data-fr="Comment fonctionne Skolya ?" data-en="How does Skolya work?">Comment fonctionne Skolya ?</span>
  1029.               <span class="acc-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></span>
  1030.             </div>
  1031.             <div class="acc-body"><div class="acc-body-inner t"
  1032.               data-fr="Skolya est une plateforme SaaS qui s'intègre facilement dans votre école. Après une rapide configuration, tous vos acteurs — administration, enseignants, parents, élèves — accèdent à leurs espaces personnalisés via web ou mobile."
  1033.               data-en="Skolya is a SaaS platform that integrates easily into your school. After a quick setup, all stakeholders — administration, teachers, parents, students — access their personalized spaces via web or mobile.">
  1034.               Skolya est une plateforme SaaS qui s'intègre facilement dans votre école. Après une rapide configuration, tous vos acteurs — administration, enseignants, parents, élèves — accèdent à leurs espaces personnalisés via web ou mobile.
  1035.             </div></div>
  1036.           </div>
  1037.           <div class="acc-item">
  1038.             <div class="acc-trigger" onclick="toggleAcc(this)">
  1039.               <span class="acc-q t" data-fr="Combien coûte Skolya ?" data-en="How much does Skolya cost?">Combien coûte Skolya ?</span>
  1040.               <span class="acc-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></span>
  1041.             </div>
  1042.             <div class="acc-body"><div class="acc-body-inner t"
  1043.               data-fr="Nos offres sont adaptées à la taille et aux besoins de chaque établissement. Contactez-nous pour un devis personnalisé. Nous proposons des formules flexibles sans engagement long terme."
  1044.               data-en="Our pricing is adapted to the size and needs of each institution. Contact us for a personalized quote. We offer flexible plans with no long-term commitment.">
  1045.               Nos offres sont adaptées à la taille et aux besoins de chaque établissement. Contactez-nous pour un devis personnalisé. Nous proposons des formules flexibles sans engagement long terme.
  1046.             </div></div>
  1047.           </div>
  1048.           <div class="acc-item">
  1049.             <div class="acc-trigger" onclick="toggleAcc(this)">
  1050.               <span class="acc-q t" data-fr="La migration de mes données est-elle sécurisée ?" data-en="Is my data migration secure?">La migration de mes données est-elle sécurisée ?</span>
  1051.               <span class="acc-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></span>
  1052.             </div>
  1053.             <div class="acc-body"><div class="acc-body-inner t"
  1054.               data-fr="Absolument. Nous utilisons un chiffrement de bout en bout et nos serveurs respectent les standards internationaux de sécurité. Votre équipe est accompagnée à chaque étape de la migration."
  1055.               data-en="Absolutely. We use end-to-end encryption and our servers comply with international security standards. Your team is guided every step of the way.">
  1056.               Absolument. Nous utilisons un chiffrement de bout en bout et nos serveurs respectent les standards internationaux de sécurité. Votre équipe est accompagnée à chaque étape de la migration.
  1057.             </div></div>
  1058.           </div>
  1059.           <div class="acc-item">
  1060.             <div class="acc-trigger" onclick="toggleAcc(this)">
  1061.               <span class="acc-q t" data-fr="Y a-t-il une application mobile ?" data-en="Is there a mobile app?">Y a-t-il une application mobile ?</span>
  1062.               <span class="acc-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></span>
  1063.             </div>
  1064.             <div class="acc-body"><div class="acc-body-inner t"
  1065.               data-fr="Oui ! Skolya dispose d'applications natives iOS et Android. L'expérience mobile est pensée pour être fluide et intuitive même avec une connexion limitée, une priorité en Afrique."
  1066.               data-en="Yes! Skolya has native iOS and Android apps. The mobile experience is designed to be smooth even with a limited connection — a key priority in Africa.">
  1067.               Oui ! Skolya dispose d'applications natives iOS et Android. L'expérience mobile est pensée pour être fluide et intuitive même avec une connexion limitée, une priorité en Afrique.
  1068.             </div></div>
  1069.           </div>
  1070.           <div class="acc-item">
  1071.             <div class="acc-trigger" onclick="toggleAcc(this)">
  1072.               <span class="acc-q t" data-fr="Quelle est la durée de mise en place ?" data-en="What is the setup time?">Quelle est la durée de mise en place ?</span>
  1073.               <span class="acc-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></span>
  1074.             </div>
  1075.             <div class="acc-body"><div class="acc-body-inner t"
  1076.               data-fr="En moyenne, un établissement est pleinement opérationnel en moins de 2 semaines. Notre équipe assure la formation de vos personnels et l'onboarding complet."
  1077.               data-en="On average, an institution is fully operational in less than 2 weeks. Our team handles staff training and complete onboarding.">
  1078.               En moyenne, un établissement est pleinement opérationnel en moins de 2 semaines. Notre équipe assure la formation de vos personnels et l'onboarding complet.
  1079.             </div></div>
  1080.           </div>
  1081.         </div>
  1082.       </div>
  1083.     </div>
  1084.   </div>
  1085. </section>
  1086. <!-- ════════════════════════════════════
  1087.      CONTACT
  1088.      ════════════════════════════════════ -->
  1089. <section id="contact">
  1090.   <div class="container">
  1091.     <div class="contact-card fi">
  1092.       <div class="contact-sweep"></div>
  1093.       <h2 class="contact-title t"
  1094.           data-fr="Envie de transformer l'image de votre établissement ?"
  1095.           data-en="Ready to transform your institution's image?">
  1096.         Envie de transformer l'image de votre établissement ?
  1097.       </h2>
  1098.       <p class="contact-sub t"
  1099.          data-fr="Rejoignez les établissements qui font confiance à Skolya pour digitaliser le suivi scolaire de leurs élèves. Notre équipe est disponible pour vous accompagner."
  1100.          data-en="Join the schools that trust Skolya to digitize their management. Our team is ready to support you.">
  1101.         Rejoignez les établissements qui font confiance à Skolya pour digitaliser le suivi scolaire de leurs élèves. Notre équipe est disponible pour vous accompagner.
  1102.       </p>
  1103.       <a href="https://wa.me/237696864017?text=Bonjour%2C%20je%20souhaite%20plus%20d%27informations%20sur%20Skolya" class="btn-wa" target="_blank" rel="noopener">
  1104.         <svg viewBox="0 0 24 24"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/></svg>
  1105.         <span class="t" data-fr="Nous contacter sur WhatsApp" data-en="Contact us on WhatsApp">Nous contacter sur WhatsApp</span>
  1106.       </a>
  1107.     </div>
  1108.   </div>
  1109. </section>
  1110. <!-- ════════════════════════════════════
  1111.      FOOTER
  1112.      ════════════════════════════════════ -->
  1113. <footer>
  1114.   <div class="footer-top">
  1115.     <div class="footer-brand">
  1116.       <a href="#accueil" class="nav-logo" style="margin-bottom:14px;display:inline-flex">
  1117.         <div class="nav-logo-mark">
  1118.           <svg viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
  1119.             <path d="M22 10v6M2 10l10-5 10 5-10 5z"/>
  1120.             <path d="M6 12.5v4c3 3 9 3 12 0v-4"/>
  1121.           </svg>
  1122.         </div>
  1123.         <span class="nav-logo-name shimmer-txt">Skolya</span>
  1124.       </a>
  1125.       <p class="t"
  1126.          data-fr="La plateforme éducative intelligente qui révolutionne le suivi scolaire en Afrique."
  1127.          data-en="The intelligent education platform revolutionizing school management across Africa.">
  1128.         La plateforme éducative intelligente qui révolutionne le suivi scolaire en Afrique.
  1129.       </p>
  1130.       <div class="footer-socials">
  1131.         <a href="#" aria-label="Facebook"><svg viewBox="0 0 24 24" fill="currentColor"><path d="M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z"/></svg></a>
  1132.         <a href="#" aria-label="LinkedIn"><svg viewBox="0 0 24 24" fill="currentColor"><path d="M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6zM2 9h4v12H2z"/><circle cx="4" cy="4" r="2"/></svg></a>
  1133.         <a href="#" aria-label="Twitter/X"><svg viewBox="0 0 24 24" fill="currentColor"><path d="M23 3a10.9 10.9 0 01-3.14 1.53 4.48 4.48 0 00-7.86 3v1A10.66 10.66 0 013 4s-4 9 5 13a11.64 11.64 0 01-7 2c9 5 20 0 20-11.5a4.5 4.5 0 00-.08-.83A7.72 7.72 0 0023 3z"/></svg></a>
  1134.       </div>
  1135.     </div>
  1136.     <div class="footer-col">
  1137.       <h5 class="t" data-fr="Produit" data-en="Product">Produit</h5>
  1138.       <ul>
  1139.         <li><a href="#fonctionnalites" class="t" data-fr="Fonctionnalités" data-en="Features">Fonctionnalités</a></li>
  1140.         <li><a href="#faq" class="t" data-fr="FAQ" data-en="FAQ">FAQ</a></li>
  1141.         <li><a href="#" class="t" data-fr="Documentation" data-en="Documentation">Documentation</a></li>
  1142.         <li><a href="#" class="t" data-fr="Nouveautés" data-en="Updates">Nouveautés</a></li>
  1143.       </ul>
  1144.     </div>
  1145.     <div class="footer-col">
  1146.       <h5 class="t" data-fr="Entreprise" data-en="Company">Entreprise</h5>
  1147.       <ul>
  1148.         <li><a href="#" class="t" data-fr="À propos" data-en="About us">À propos</a></li>
  1149.         <li><a href="#" class="t" data-fr="Blog" data-en="Blog">Blog</a></li>
  1150.         <li><a href="#" class="t" data-fr="Carrières" data-en="Careers">Carrières</a></li>
  1151.         <li><a href="#" class="t" data-fr="Partenaires" data-en="Partners">Partenaires</a></li>
  1152.       </ul>
  1153.     </div>
  1154.     <div class="footer-col">
  1155.       <h5 class="t" data-fr="Contact" data-en="Contact">Contact</h5>
  1156.       <div class="footer-clist">
  1157.         <div class="footer-ci">
  1158.           <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
  1159.           contact@skolya.cm
  1160.         </div>
  1161.         <div class="footer-ci">
  1162.           <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 014.69 9.81a19.79 19.79 0 01-3.07-8.67A2 2 0 013.62 1h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 8.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45 12.84 12.84 0 002.81.7A2 2 0 0122 16.92z"/></svg>
  1163.           +237 696 864 017
  1164.         </div>
  1165.         <div class="footer-ci">
  1166.           <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>
  1167.           Yaoundé, Cameroun
  1168.         </div>
  1169.       </div>
  1170.     </div>
  1171.   </div>
  1172.   <div class="footer-bot">
  1173.     <p>© 2025 Skolya. <span class="t" data-fr="Tous droits réservés." data-en="All rights reserved.">Tous droits réservés.</span></p>
  1174.     <div class="footer-bot-links">
  1175.       <a href="#" class="t" data-fr="Confidentialité" data-en="Privacy">Confidentialité</a>
  1176.       <a href="#" class="t" data-fr="Conditions" data-en="Terms">Conditions</a>
  1177.     </div>
  1178.   </div>
  1179. </footer>
  1180. <!-- ════════════════════════════════════
  1181.      FLOATING WHATSAPP
  1182.      ════════════════════════════════════ -->
  1183. <a href="https://wa.me/237696864017?text=Bonjour%2C%20je%20souhaite%20plus%20d%27informations%20sur%20Skolya"
  1184.    class="wa-float" target="_blank" rel="noopener" aria-label="WhatsApp">
  1185.   <svg viewBox="0 0 24 24"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/></svg>
  1186. </a>
  1187. <!-- ════════════════════════════════════
  1188.      SCRIPTS
  1189.      ════════════════════════════════════ -->
  1190. <script>
  1191. (function(){
  1192.   /* ── THEME ── */
  1193.   const html = document.documentElement;
  1194.   const saved = localStorage.getItem('sk-theme') || 'light';
  1195.   html.setAttribute('data-theme', saved);
  1196.   applyIcon(saved);
  1197.   document.getElementById('themeBtn').addEventListener('click', () => {
  1198.     const next = html.getAttribute('data-theme') === 'light' ? 'dark' : 'light';
  1199.     html.setAttribute('data-theme', next);
  1200.     localStorage.setItem('sk-theme', next);
  1201.     applyIcon(next);
  1202.   });
  1203.   function applyIcon(t) {
  1204.     document.getElementById('iconSun').style.display  = t==='light' ? 'block':'none';
  1205.     document.getElementById('iconMoon').style.display = t==='dark'  ? 'block':'none';
  1206.   }
  1207.   /* ── LANGUAGE ── */
  1208.   let lang = localStorage.getItem('sk-lang') || 'fr';
  1209.   applyLang(lang);
  1210.   window.setLang = function(l) {
  1211.     lang = l;
  1212.     localStorage.setItem('sk-lang', l);
  1213.     applyLang(l);
  1214.     document.getElementById('langMenu').classList.remove('open');
  1215.     document.getElementById('langBtn').classList.remove('open');
  1216.   };
  1217.   function applyLang(l) {
  1218.     document.getElementById('flagEl').textContent = l==='fr' ? '🇫🇷' : '🇬🇧';
  1219.     document.getElementById('codeEl').textContent = l.toUpperCase();
  1220.     document.querySelectorAll('.t').forEach(el => {
  1221.       const v = el.getAttribute('data-'+l);
  1222.       if (v) el.textContent = v;
  1223.     });
  1224.     document.documentElement.lang = l;
  1225.   }
  1226.   const langBtn = document.getElementById('langBtn');
  1227.   const langMenu = document.getElementById('langMenu');
  1228.   langBtn.addEventListener('click', e => {
  1229.     e.stopPropagation();
  1230.     langMenu.classList.toggle('open');
  1231.     langBtn.classList.toggle('open');
  1232.   });
  1233.   document.addEventListener('click', () => {
  1234.     langMenu.classList.remove('open');
  1235.     langBtn.classList.remove('open');
  1236.   });
  1237.   /* ── HAMBURGER ── */
  1238.   const hambBtn = document.getElementById('hambBtn');
  1239.   const mobileNav = document.getElementById('mobileNav');
  1240.   hambBtn.addEventListener('click', () => {
  1241.     hambBtn.classList.toggle('open');
  1242.     mobileNav.classList.toggle('open');
  1243.   });
  1244.   window.closeMob = function() {
  1245.     hambBtn.classList.remove('open');
  1246.     mobileNav.classList.remove('open');
  1247.   };
  1248.   /* ── NAVBAR ── */
  1249.   const navbar = document.getElementById('navbar');
  1250.   window.addEventListener('scroll', () => {
  1251.     navbar.classList.toggle('scrolled', window.scrollY > 20);
  1252.     highlightNav();
  1253.   }, { passive:true });
  1254.   const sections = document.querySelectorAll('section[id]');
  1255.   const links = document.querySelectorAll('.nav-links a');
  1256.   function highlightNav() {
  1257.     let cur = '';
  1258.     sections.forEach(s => { if (window.scrollY >= s.offsetTop - 90) cur = s.id; });
  1259.     links.forEach(a => a.classList.toggle('active', a.getAttribute('href') === '#'+cur));
  1260.   }
  1261.   /* ── COUNTERS ── */
  1262.   function animCounter(el) {
  1263.     if (el.dataset.done) return;
  1264.     el.dataset.done = '1';
  1265.     const target = +el.dataset.target;
  1266.     const fmt = el.dataset.fmt;
  1267.     const dur = 1800;
  1268.     const t0 = performance.now();
  1269.     (function tick(now) {
  1270.       const p = Math.min((now-t0)/dur, 1);
  1271.       const ease = 1 - Math.pow(1-p, 3);
  1272.       const v = Math.round(ease * target);
  1273.       if (fmt === 'kplus') el.textContent = (v>=1000 ? (v/1000).toFixed(1)+'K' : v) + '+';
  1274.       else if (fmt === 'pct') el.textContent = v + '%';
  1275.       else el.textContent = v + '+';
  1276.       if (p < 1) requestAnimationFrame(tick);
  1277.     })(t0);
  1278.   }
  1279.   /* ── INTERSECTION OBSERVER ── */
  1280.   const io = new IntersectionObserver(entries => {
  1281.     entries.forEach(e => {
  1282.       if (!e.isIntersecting) return;
  1283.       e.target.classList.add('visible');
  1284.       const num = e.target.querySelector('.ctr-num');
  1285.       if (num) animCounter(num);
  1286.     });
  1287.   }, { threshold:0.12 });
  1288.   document.querySelectorAll('.fi, .counter-card').forEach(el => io.observe(el));
  1289.   /* ── ACCORDION ── */
  1290.   window.toggleAcc = function(trigger) {
  1291.     const item = trigger.closest('.acc-item');
  1292.     const isOpen = item.classList.contains('open');
  1293.     document.querySelectorAll('.acc-item').forEach(i => {
  1294.       i.classList.remove('open');
  1295.       i.querySelector('.acc-body').classList.remove('open');
  1296.     });
  1297.     if (!isOpen) {
  1298.       item.classList.add('open');
  1299.       item.querySelector('.acc-body').classList.add('open');
  1300.     }
  1301.   };
  1302. })();
  1303. </script>
  1304. </body>
  1305. </html>