src/ApplicationBundle/Resources/views/inc/central_header.html.twig line 1

Open in your IDE?
  1. {# ═══════════════════════════════════════════════════════════════════════════
  2.    Central Header — HoneyBee Ecosystem
  3.    Scandinavian SaaS design · single source of truth for all public pages
  4.    ═══════════════════════════════════════════════════════════════════════════ #}
  5. {% if not include_html is defined %}
  6.     {% set include_html = 1 %}
  7.     {% if app.request.request.get('skipHTML') != '' %}{% set include_html = 0 %}{% endif %}
  8.     {% if app.request.query.get('skipHTML')   != '' %}{% set include_html = 0 %}{% endif %}
  9. {% endif %}
  10. {% if include_html == 1 %}
  11. <!DOCTYPE html>
  12. <html lang="en">
  13. <head>
  14.     <meta charset="UTF-8">
  15.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  16.     <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui">
  17.     <meta name="description"
  18.           content="{{ og_description is defined ? og_description : 'HoneyBee — The digital operating layer for EPC, energy, and multi-site industrial operations. Unify finance, projects, IoT, Edge+ site intelligence, billing and AI reporting. From €7.99/user/month.' }}">
  19.     <meta name="keywords"
  20.           content="HoneyBee, EPC software, system integrator platform, energy asset management, IoT Edge+ deployment, project lifecycle software, industrial operations, DATEV accounting, multi-site management">
  21.     <meta name="author" content="HoneyBee Ecosystem">
  22.     <title id="pageTitle">{{ page_title }}</title>
  23.     <meta property="og:title" content="{{ og_title       is defined ? og_title       : page_title }}"/>
  24.     <meta property="og:description"
  25.           content="{{ og_description is defined ? og_description : 'HoneyBee — Operating system for EPC companies, system integrators, energy asset owners, and multi-site industrial businesses.' }}"/>
  26.     <meta property="og:image"
  27.           content="{{ og_image       is defined ? (absolute_url(path('dashboard'))~og_image) : (absolute_url(path('dashboard'))~'honeybee_web_assets/icons/honeybeeicon.svg') }}"/>
  28.     {% set _noindex_routes = ['user_login','sign_up','reset_password','verify_email','verify_otp','reset_new_password','honeybee_otp_verification'] %}
  29.     {% if app.request.get('_route') in _noindex_routes %}
  30.         <meta name="robots" content="noindex, nofollow">
  31.     {% else %}
  32.         <meta name="robots" content="index, follow">
  33.     {% endif %}
  34.     {# ── Favicons ──────────────────────────────────────────────────────────── #}
  35.     <link rel="shortcut icon" type="image/x-icon"
  36.           href="{{ asset('favicon.ico') }}?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
  37.     <link rel="apple-touch-icon" sizes="180x180"
  38.           href="{{ asset('apple-icon.png') }}?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
  39.     <link rel="icon" type="image/png" sizes="32x32"
  40.           href="{{ asset('favicon-32x32.png') }}?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
  41.     <link rel="icon" type="image/png" sizes="16x16"
  42.           href="{{ asset('favicon-16x16.png') }}?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
  43.     <link rel="manifest" href="{{ asset('site.webmanifest') }}">
  44.     <link rel="mask-icon" href="{{ asset('safari-pinned-tab.svg') }}" color="#C07D2A">
  45.     <meta name="msapplication-TileColor" content="#1A1D2E">
  46.     <meta name="theme-color" content="#F7F5F0">
  47.     {# ── Fonts ─────────────────────────────────────────────────────────────── #}
  48.     <link rel="preconnect" href="https://fonts.googleapis.com">
  49.     <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  50.     <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700;800&family=Montserrat:wght@500&display=swap"
  51.           rel="stylesheet">
  52.     {# Material Icons served locally (web/css/iconfont/) — no external CDN, so icons never flicker/break when offline or the CDN is slow #}
  53.     <link rel="stylesheet" href="{{ asset('css/iconfont/material-icons.css') }}?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
  54.     {# ── Core stylesheets ──────────────────────────────────────────────────── #}
  55.     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css"
  56.           integrity="sha512-Kc323vGBEqzTmouAECnVceyQqyqdsSiqLQISBL29aUW4U/M7pSPA/gEUZQqv1cwx4OnYxTxve5UMg5GT6L4JJg=="
  57.           crossorigin="anonymous" referrerpolicy="no-referrer">
  58.     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
  59.     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
  60.     <link rel="stylesheet"
  61.           href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-datetimepicker/2.7.1/css/bootstrap-material-datetimepicker.min.css">
  62.     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.13.3/css/selectize.css">
  63.     <link rel="stylesheet"
  64.           href="{{ absolute_url(path('dashboard')) }}honeybee_web_assets/css/bootstrap.css?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
  65.     <link rel="stylesheet"
  66.           href="{{ absolute_url(path('dashboard')) }}honeybee_web_assets/css/style.css?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
  67.     <link rel="stylesheet" id="dark-theme-css"
  68.           href="{{ absolute_url(path('dashboard')) }}honeybee_web_assets/css/dark.css?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}"
  69.           disabled="true">
  70.     <link rel="stylesheet"
  71.           href="{{ absolute_url(path('dashboard')) }}honeybee_web_assets/css/responsive.css?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
  72.     <link rel="stylesheet"
  73.           href="{{ absolute_url(path('dashboard')) }}honeybee_web_assets/css/central_responsive.css?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
  74.     <link rel="stylesheet"
  75.           href="{{ absolute_url(path('dashboard')) }}honeybee_web_assets/css/temporary_inline.css?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
  76.     {# ── Dev toolbar suppression ───────────────────────────────────────────── #}
  77.     <style>{% if app.session.get('devAdminMode') != 1 %}.sf-toolbar {
  78.             display: none !important
  79.         }{% endif %}</style>
  80.     {# ── Preloader ─────────────────────────────────────────────────────────── #}
  81.     <style>
  82.         #hb-preloader {
  83.             position: fixed;
  84.             top: 0;
  85.             left: 0;
  86.             width: 100%;
  87.             height: 100vh;
  88.             background: #F7F5F0;
  89.             display: flex;
  90.             flex-direction: column;
  91.             justify-content: center;
  92.             align-items: center;
  93.             z-index: 99999;
  94.         }
  95.         .hb-pre-logo {
  96.             display: flex;
  97.             align-items: center;
  98.             gap: 12px;
  99.             margin-bottom: 28px;
  100.         }
  101.         .hb-pre-logo img {
  102.             width: 34px;
  103.             height: 34px;
  104.         }
  105.         .hb-pre-logo span {
  106.             font-family: 'DM Sans', sans-serif;
  107.             font-size: 17px;
  108.             font-weight: 800;
  109.             color: #1A1D2E;
  110.             letter-spacing: -.01em;
  111.         }
  112.         .hb-pre-logo span b {
  113.             color: #C07D2A;
  114.             font-weight: 800;
  115.         }
  116.         .hb-pre-bar-wrap {
  117.             width: 120px;
  118.             height: 2px;
  119.             background: rgba(26, 29, 46, .08);
  120.             border-radius: 2px;
  121.             overflow: hidden;
  122.         }
  123.         .hb-pre-bar {
  124.             height: 100%;
  125.             width: 40%;
  126.             background: #C07D2A;
  127.             border-radius: 2px;
  128.             animation: hb-slide 1.5s ease-in-out infinite;
  129.         }
  130.         @keyframes hb-slide {
  131.             0% {
  132.                 transform: translateX(-100%);
  133.             }
  134.             50% {
  135.                 transform: translateX(250%);
  136.             }
  137.             100% {
  138.                 transform: translateX(-100%);
  139.             }
  140.         }
  141.     </style>
  142.     {# ── Inline JS (runs before body paint) ───────────────────────────────── #}
  143.     <script>
  144.         var logger = (function () {
  145.             var _old = null, pub = {};
  146.             pub.enableLogger = function () {
  147.                 if (_old) window['console']['log'] = _old;
  148.             };
  149.             pub.disableLogger = function () {
  150.                 _old = console.log;
  151.                 window['console']['log'] = function () {
  152.                 };
  153.             };
  154.             return pub;
  155.         }());
  156.         {% if app.session.get('devAdminMode') != 1 %}
  157.         window['console']['log'] = function () {
  158.         };
  159.         {% endif %}
  160.     </script>
  161.     <script>
  162.         function changeTheme(isDark) {
  163.             var darkCss = document.getElementById('dark-theme-css');
  164.             var cb = document.getElementById('theme-toggle-checkbox');
  165.             var track = document.getElementById('hbThemeTrack');
  166.             document.querySelectorAll('img').forEach(function (img) {
  167.                 if (isDark) {
  168.                     img.src = img.src.replace('/honeybee_web_assets/', '/honeybee_web_assets/dark/');
  169.                 } else {
  170.                     img.src = img.src.replace('/honeybee_web_assets/dark/', '/honeybee_web_assets/');
  171.                 }
  172.             });
  173.             if (darkCss) darkCss.disabled = !isDark;
  174.             if (cb) cb.checked = isDark;
  175.             if (track) track.classList.toggle('hb-dark', isDark);
  176.             localStorage.setItem('theme', isDark ? 'dark' : 'light');
  177.         }
  178.     </script>
  179.     <script>if (typeof module === 'object') {
  180.             window.module = module;
  181.             module = undefined;
  182.         }</script>
  183.     <script src="https://code.jquery.com/jquery-3.4.1.min.js"
  184.             integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
  185.     <script data-ad-client="ca-pub-8286883017903771" async
  186.             src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
  187.     <script>var BaseURL = '{{ url('dashboard') }}';</script>
  188. </head>
  189. {# ── Google Analytics ──────────────────────────────────────────────────────── #}
  190. <script async src="https://www.googletagmanager.com/gtag/js?id=G-V22132YMJ3"></script>
  191. <script>
  192.     window.dataLayer = window.dataLayer || [];
  193.     function gtag() {
  194.         dataLayer.push(arguments);
  195.     }
  196.     gtag('js', new Date());
  197.     gtag('config', 'G-V22132YMJ3');
  198. </script>
  199. {# ── Resolve admin level & consultant flag ────────────────────────────────── #}
  200. {% set BUDDYBEE_ADMIN_LEVEL = 0 %}
  201. {% set isConsultant         = 0 %}
  202. {% if session[UserConstants.USER_ID] is defined %}
  203.     {% set isConsultant         = session[UserConstants.IS_CONSULTANT]        is defined ? session[UserConstants.IS_CONSULTANT]        : 0 %}
  204.     {% set BUDDYBEE_ADMIN_LEVEL = session[UserConstants.BUDDYBEE_ADMIN_LEVEL] is defined ? session[UserConstants.BUDDYBEE_ADMIN_LEVEL] : 0 %}
  205. {% endif %}
  206. {# Single <body> tag — classes set in one place, no duplicate tags #}
  207. {% if BUDDYBEE_ADMIN_LEVEL >= 1 %}
  208. <body class="buddybee_body has_admin_bar body-mask">
  209. {% elseif session[UserConstants.USER_ID] is defined %}
  210. <body class="buddybee_body body-mask">
  211. {% else %}
  212. <body class="body-mask">
  213. {% endif %}
  214. {# ── Preloader ─────────────────────────────────────────────────────────────── #}
  215. <div id="hb-preloader">
  216.     <div class="hb-pre-logo">
  217.         <img src="{{ absolute_url(path('dashboard')) }}honeybee_web_assets/icons/honeybeeicon.svg?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}"
  218.              alt="HoneyBee">
  219.         <span>Honey<b>Bee</b></span>
  220.     </div>
  221.     <div class="hb-pre-bar-wrap">
  222.         <div class="hb-pre-bar"></div>
  223.     </div>
  224. </div>
  225. {# ── Processing overlay (shown during AJAX) ────────────────────────────────── #}
  226. <div id="buddybee_processing_loader">
  227.     <div><p>Processing</p></div>
  228. </div>
  229. {# ══════════════════════════════ NAVBAR ═══════════════════════════════════════
  230.    Scandinavian navbar: glass-morphism, fixed, minimal, fully responsive
  231.    ═══════════════════════════════════════════════════════════════════════════ #}
  232. <style>
  233.     /* ── Design tokens ──────────────────────────────────────────────────────────── */
  234.     :root {
  235.         --hb-ink: #1A1D2E;
  236.         --hb-ink-2: #252840;
  237.         --hb-amber: #C07D2A;
  238.         --hb-amber-lt: #D4954A;
  239.         --hb-muted: #6B6E7F;
  240.         --hb-border: rgba(26, 29, 46, .08);
  241.         --hb-border-md: rgba(26, 29, 46, .14);
  242.         --hb-cream: #F7F5F0;
  243.         --hb-white: #FFFFFF;
  244.         --hb-shadow: 0 2px 20px rgba(26, 29, 46, .07);
  245.         --hb-shadow-lg: 0 8px 32px rgba(26, 29, 46, .10);
  246.         --hb-radius: 10px;
  247.         --hb-font: 'DM Sans', 'Gilroy', system-ui, sans-serif;
  248.     }
  249.     /* ── Navbar shell ─────────────────────────────────────────────────────────── */
  250.     .hb-navbar {
  251.         position: fixed;
  252.         top: 0;
  253.         left: 0;
  254.         right: 0;
  255.         z-index: 9999;
  256.         background: rgba(247, 245, 240, .97);
  257.         backdrop-filter: blur(20px) saturate(180%);
  258.         -webkit-backdrop-filter: blur(20px) saturate(180%);
  259.         border-bottom: 1px solid var(--hb-border);
  260.         transition: box-shadow .2s, border-color .2s;
  261.         font-family: var(--hb-font);
  262.     }
  263.     .hb-navbar.hb-scrolled {
  264.         box-shadow: var(--hb-shadow);
  265.         border-color: var(--hb-border-md);
  266.     }
  267.     /* ── Inner container ──────────────────────────────────────────────────────── */
  268.     .hb-nav-inner {
  269.         max-width: 1280px;
  270.         margin: 0 auto;
  271.         padding: 0 28px;
  272.         height: 64px;
  273.         display: flex;
  274.         align-items: center;
  275.         gap: 24px;
  276.     }
  277.     /* ── Brand ────────────────────────────────────────────────────────────────── */
  278.     .hb-brand {
  279.         display: flex;
  280.         align-items: center;
  281.         gap: 9px;
  282.         text-decoration: none;
  283.         flex-shrink: 0;
  284.     }
  285.     .hb-brand img {
  286.         height: 30px;
  287.         width: auto;
  288.     }
  289.     .hb-brand-name {
  290.         font-size: 15.5px;
  291.         font-weight: 800;
  292.         color: var(--hb-ink);
  293.         letter-spacing: -.01em;
  294.         line-height: 1;
  295.     }
  296.     .hb-brand-name b {
  297.         color: var(--hb-amber);
  298.         font-weight: 800;
  299.     }
  300.     /* ── Nav links ────────────────────────────────────────────────────────────── */
  301.     .hb-links {
  302.         display: flex;
  303.         align-items: center;
  304.         gap: 2px;
  305.         list-style: none;
  306.         margin: 0;
  307.         padding: 0;
  308.         flex: 1;
  309.     }
  310.     .hb-links .hb-link > a,
  311.     .hb-links .hb-drop > a {
  312.         display: inline-flex;
  313.         align-items: center;
  314.         gap: 5px;
  315.         padding: 7px 11px;
  316.         font-size: 13.5px;
  317.         font-weight: 500;
  318.         color: var(--hb-muted);
  319.         text-decoration: none;
  320.         border-radius: 7px;
  321.         white-space: nowrap;
  322.         transition: color .15s, background .15s;
  323.         position: relative;
  324.     }
  325.     .hb-links .hb-link > a:hover,
  326.     .hb-links .hb-drop > a:hover {
  327.         color: var(--hb-ink);
  328.         background: rgba(26, 29, 46, .04);
  329.     }
  330.     .hb-links .hb-link > a.active {
  331.         color: var(--hb-ink);
  332.         font-weight: 600;
  333.     }
  334.     .hb-links .hb-link > a.active::after {
  335.         content: '';
  336.         position: absolute;
  337.         bottom: 2px;
  338.         left: 11px;
  339.         right: 11px;
  340.         height: 1.5px;
  341.         background: var(--hb-amber);
  342.         border-radius: 2px;
  343.     }
  344.     /* ── Dropdown ─────────────────────────────────────────────────────────────── */
  345.     .hb-drop {
  346.         position: relative;
  347.     }
  348.     .hb-caret {
  349.         font-size: 9px;
  350.         opacity: .5;
  351.         transition: transform .2s;
  352.     }
  353.     .hb-drop:hover .hb-caret {
  354.         transform: rotate(180deg);
  355.     }
  356.     .hb-dd-menu {
  357.         position: absolute;
  358.         top: 100%;
  359.         left: 50%;
  360.         transform: translateX(-50%) translateY(0);
  361.         min-width: 195px;
  362.         background: var(--hb-white);
  363.         border: 1px solid var(--hb-border-md);
  364.         border-radius: var(--hb-radius);
  365.         box-shadow: var(--hb-shadow-lg);
  366.         padding: 6px;
  367.         padding-top: 12px; /* gap lives inside → no dead zone */
  368.         opacity: 0;
  369.         pointer-events: none;
  370.         transition: opacity .16s, transform .16s;
  371.         transition-delay: 0s, 0s; /* show instantly */
  372.         list-style: none;
  373.         margin: 0;
  374.         z-index: 10001;
  375.     }
  376.     .hb-drop:hover .hb-dd-menu,
  377.     .hb-dd-menu:hover {
  378.         opacity: 1;
  379.         pointer-events: all;
  380.         transform: translateX(-50%) translateY(0);
  381.     }
  382.     .hb-drop:not(:hover) .hb-dd-menu:not(:hover) {
  383.         transition-delay: .12s;
  384.     }
  385.     /* slight lag on hide */
  386.     .hb-dd-menu li a {
  387.         display: block;
  388.         padding: 8px 12px;
  389.         font-size: 13px;
  390.         font-weight: 500;
  391.         color: var(--hb-muted);
  392.         text-decoration: none;
  393.         border-radius: 6px;
  394.         transition: color .12s, background .12s;
  395.     }
  396.     .hb-dd-menu li a:hover {
  397.         color: var(--hb-ink);
  398.         background: rgba(26, 29, 46, .04);
  399.     }
  400.     .hb-dd-menu li a.active {
  401.         color: var(--hb-ink);
  402.         font-weight: 600;
  403.     }
  404.     .hb-dd-div {
  405.         height: 1px;
  406.         background: var(--hb-border);
  407.         margin: 4px 6px;
  408.     }
  409.     /* ── Right side ───────────────────────────────────────────────────────────── */
  410.     .hb-nav-right {
  411.         display: flex;
  412.         align-items: center;
  413.         gap: 6px;
  414.         flex-shrink: 0;
  415.     }
  416.     /* ── Language switcher ────────────────────────────────────────────────────── */
  417.     .hb-lang {
  418.         position: relative;
  419.     }
  420.     .hb-lang-btn {
  421.         display: flex;
  422.         align-items: center;
  423.         gap: 5px;
  424.         padding: 6px 10px;
  425.         font-size: 12.5px;
  426.         font-weight: 600;
  427.         color: var(--hb-muted);
  428.         background: none;
  429.         border: 1px solid var(--hb-border);
  430.         border-radius: 7px;
  431.         cursor: pointer;
  432.         transition: all .15s;
  433.         font-family: var(--hb-font);
  434.     }
  435.     .hb-lang-btn:hover {
  436.         color: var(--hb-ink);
  437.         border-color: var(--hb-border-md);
  438.         background: rgba(26, 29, 46, .03);
  439.     }
  440.     .hb-lang-menu {
  441.         position: absolute;
  442.         top: 100%;
  443.         right: 0;
  444.         min-width: 155px;
  445.         background: var(--hb-white);
  446.         border: 1px solid var(--hb-border-md);
  447.         border-radius: var(--hb-radius);
  448.         box-shadow: var(--hb-shadow-lg);
  449.         padding: 6px;
  450.         padding-top: 10px; /* gap lives inside → no dead zone */
  451.         opacity: 0;
  452.         pointer-events: none;
  453.         transform: translateY(0);
  454.         transition: opacity .15s;
  455.         z-index: 10001;
  456.         list-style: none;
  457.         margin: 0;
  458.     }
  459.     .hb-lang:hover .hb-lang-menu,
  460.     .hb-lang-menu:hover {
  461.         opacity: 1;
  462.         pointer-events: all;
  463.     }
  464.     .hb-lang:not(:hover) .hb-lang-menu:not(:hover) {
  465.         transition-delay: .12s;
  466.     }
  467.     .hb-lang-menu li a {
  468.         display: block;
  469.         padding: 7px 12px;
  470.         font-size: 13px;
  471.         font-weight: 500;
  472.         color: var(--hb-muted);
  473.         text-decoration: none;
  474.         border-radius: 6px;
  475.         transition: all .12s;
  476.     }
  477.     .hb-lang-menu li a:hover {
  478.         color: var(--hb-ink);
  479.         background: rgba(26, 29, 46, .04);
  480.     }
  481.     /* ── User dropdown ────────────────────────────────────────────────────────── */
  482.     .hb-user {
  483.         position: relative;
  484.     }
  485.     .hb-user-btn {
  486.         display: flex;
  487.         align-items: center;
  488.         gap: 7px;
  489.         background: none;
  490.         border: none;
  491.         cursor: pointer;
  492.         padding: 4px 6px;
  493.         border-radius: 8px;
  494.         transition: background .15s;
  495.     }
  496.     .hb-user-btn:hover {
  497.         background: rgba(26, 29, 46, .05);
  498.     }
  499.     .hb-user-avatar {
  500.         width: 30px;
  501.         height: 30px;
  502.         border-radius: 50%;
  503.         background-size: cover !important;
  504.         background-position: center !important;
  505.         border: 1.5px solid var(--hb-border-md);
  506.         flex-shrink: 0;
  507.     }
  508.     .hb-user-name {
  509.         font-size: 13px;
  510.         font-weight: 600;
  511.         color: var(--hb-ink);
  512.         max-width: 110px;
  513.         white-space: nowrap;
  514.         overflow: hidden;
  515.         text-overflow: ellipsis;
  516.     }
  517.     .hb-user-menu {
  518.         position: absolute;
  519.         top: 100%;
  520.         right: 0;
  521.         min-width: 185px;
  522.         background: var(--hb-white);
  523.         border: 1px solid var(--hb-border-md);
  524.         border-radius: var(--hb-radius);
  525.         box-shadow: var(--hb-shadow-lg);
  526.         padding: 6px;
  527.         padding-top: 12px; /* gap lives inside → no dead zone */
  528.         opacity: 0;
  529.         pointer-events: none;
  530.         transform: translateY(0);
  531.         transition: opacity .15s;
  532.         z-index: 10001;
  533.         list-style: none;
  534.         margin: 0;
  535.     }
  536.     .hb-user:hover .hb-user-menu {
  537.         opacity: 1;
  538.         pointer-events: all;
  539.     }
  540.     .hb-user:not(:hover) .hb-user-menu:not(:hover) {
  541.         transition-delay: .12s;
  542.     }
  543.     .hb-user-menu li a {
  544.         display: flex;
  545.         align-items: center;
  546.         gap: 8px;
  547.         padding: 8px 12px;
  548.         font-size: 13px;
  549.         font-weight: 500;
  550.         color: var(--hb-muted);
  551.         text-decoration: none;
  552.         border-radius: 6px;
  553.         transition: all .12s;
  554.     }
  555.     .hb-user-menu li a:hover {
  556.         color: var(--hb-ink);
  557.         background: rgba(26, 29, 46, .04);
  558.     }
  559.     .hb-user-menu li a i {
  560.         font-size: 12px;
  561.         width: 14px;
  562.         opacity: .5;
  563.     }
  564.     .hb-u-div {
  565.         height: 1px;
  566.         background: var(--hb-border);
  567.         margin: 4px 6px;
  568.     }
  569.     /* ── Auth + Companies buttons ─────────────────────────────────────────────── */
  570.     .hb-btn-login {
  571.         padding: 7px 16px;
  572.         font-size: 13px;
  573.         font-weight: 600;
  574.         color: var(--hb-ink);
  575.         background: none;
  576.         border: 1.5px solid var(--hb-border-md);
  577.         border-radius: 8px;
  578.         text-decoration: none;
  579.         transition: all .15s;
  580.     }
  581.     .hb-btn-login:hover {
  582.         color: var(--hb-ink);
  583.         border-color: var(--hb-ink);
  584.         background: rgba(26, 29, 46, .03);
  585.     }
  586.     .hb-btn-signup {
  587.         padding: 7px 16px;
  588.         font-size: 13px;
  589.         font-weight: 700;
  590.         color: #fff;
  591.         background: var(--hb-ink);
  592.         border: 1.5px solid transparent;
  593.         border-radius: 8px;
  594.         text-decoration: none;
  595.         transition: all .15s;
  596.     }
  597.     .hb-btn-signup:hover {
  598.         color: #fff;
  599.         background: var(--hb-ink-2);
  600.         box-shadow: 0 4px 14px rgba(26, 29, 46, .2);
  601.     }
  602.     .hb-btn-companies {
  603.         display: inline-flex;
  604.         align-items: center;
  605.         gap: 6px;
  606.         padding: 7px 15px;
  607.         font-size: 13px;
  608.         font-weight: 700;
  609.         color: #fff;
  610.         background: var(--hb-amber);
  611.         border: none;
  612.         border-radius: 8px;
  613.         text-decoration: none;
  614.         transition: all .15s;
  615.     }
  616.     .hb-btn-companies:hover {
  617.         color: #fff;
  618.         background: var(--hb-amber-lt);
  619.         box-shadow: 0 4px 14px rgba(192, 125, 42, .28);
  620.     }
  621.     /* ── Switch-user panel (admin only) ──────────────────────────────────────── */
  622.     .hb-switch {
  623.         position: relative;
  624.     }
  625.     .hb-switch-btn {
  626.         padding: 6px 11px;
  627.         font-size: 12px;
  628.         font-weight: 600;
  629.         color: var(--hb-muted);
  630.         background: none;
  631.         border: 1px solid var(--hb-border);
  632.         border-radius: 7px;
  633.         cursor: pointer;
  634.         font-family: var(--hb-font);
  635.         transition: all .15s;
  636.     }
  637.     .hb-switch-btn:hover {
  638.         color: var(--hb-ink);
  639.         border-color: var(--hb-border-md);
  640.     }
  641.     .hb-switch-panel {
  642.         position: absolute;
  643.         top: 100%;
  644.         right: 0;
  645.         min-width: 225px;
  646.         background: var(--hb-white);
  647.         border: 1px solid var(--hb-border-md);
  648.         border-radius: var(--hb-radius);
  649.         box-shadow: var(--hb-shadow-lg);
  650.         padding: 10px;
  651.         padding-top: 14px; /* gap lives inside → no dead zone */
  652.         opacity: 0;
  653.         pointer-events: none;
  654.         transform: translateY(0);
  655.         transition: opacity .15s;
  656.         z-index: 10001;
  657.         list-style: none;
  658.         margin: 0;
  659.     }
  660.     .hb-switch:hover .hb-switch-panel {
  661.         opacity: 1;
  662.         pointer-events: all;
  663.     }
  664.     .hb-switch:not(:hover) .hb-switch-panel:not(:hover) {
  665.         transition-delay: .12s;
  666.     }
  667.     .hb-switch-panel li a {
  668.         display: block;
  669.         padding: 8px 10px;
  670.         font-size: 13px;
  671.         font-weight: 500;
  672.         color: var(--hb-muted);
  673.         text-decoration: none;
  674.         border-radius: 6px;
  675.         transition: all .12s;
  676.     }
  677.     .hb-switch-panel li a:hover {
  678.         color: var(--hb-ink);
  679.         background: rgba(26, 29, 46, .04);
  680.     }
  681.     .hb-sw-div {
  682.         height: 1px;
  683.         background: var(--hb-border);
  684.         margin: 6px 0;
  685.     }
  686.     .hb-switch-panel select {
  687.         width: 100%;
  688.         font-size: 12px;
  689.         font-family: var(--hb-font);
  690.         border: 1px solid var(--hb-border-md);
  691.         border-radius: 6px;
  692.         padding: 6px 8px;
  693.         color: var(--hb-ink);
  694.         background: var(--hb-cream);
  695.     }
  696.     /* ── Theme toggle ─────────────────────────────────────────────────────────── */
  697.     .hb-theme {
  698.         display: flex;
  699.         align-items: center;
  700.         gap: 6px;
  701.         padding: 0 2px;
  702.     }
  703.     .hb-theme-img {
  704.         width: 14px;
  705.         height: 14px;
  706.         opacity: .45;
  707.         display: block;
  708.     }
  709.     #theme-toggle-checkbox {
  710.         display: none;
  711.     }
  712.     .hb-theme-track {
  713.         position: relative;
  714.         width: 34px;
  715.         height: 19px;
  716.         background: rgba(26, 29, 46, .14);
  717.         border-radius: 10px;
  718.         cursor: pointer;
  719.         transition: background .2s;
  720.         flex-shrink: 0;
  721.         display: block;
  722.     }
  723.     .hb-theme-track::after {
  724.         content: '';
  725.         position: absolute;
  726.         top: 2px;
  727.         left: 2px;
  728.         width: 15px;
  729.         height: 15px;
  730.         background: white;
  731.         border-radius: 50%;
  732.         box-shadow: 0 1px 4px rgba(0, 0, 0, .18);
  733.         transition: transform .2s;
  734.     }
  735.     .hb-theme-track.hb-dark {
  736.         background: var(--hb-amber);
  737.     }
  738.     .hb-theme-track.hb-dark::after {
  739.         transform: translateX(15px);
  740.     }
  741.     /* ── Mobile hamburger ─────────────────────────────────────────────────────── */
  742.     .hb-toggler {
  743.         display: none;
  744.         background: none;
  745.         border: none;
  746.         cursor: pointer;
  747.         padding: 8px;
  748.         flex-direction: column;
  749.         gap: 5px;
  750.         border-radius: 7px;
  751.         margin-left: auto;
  752.         flex-shrink: 0;
  753.         transition: background .15s;
  754.     }
  755.     .hb-toggler:hover {
  756.         background: rgba(26, 29, 46, .06);
  757.     }
  758.     .hb-toggler span {
  759.         display: block;
  760.         width: 21px;
  761.         height: 1.5px;
  762.         background: var(--hb-ink);
  763.         border-radius: 2px;
  764.         transition: all .22s;
  765.     }
  766.     .hb-toggler.hb-open span:nth-child(1) {
  767.         transform: rotate(45deg) translate(4.5px, 4.5px);
  768.     }
  769.     .hb-toggler.hb-open span:nth-child(2) {
  770.         opacity: 0;
  771.         transform: scaleX(0);
  772.     }
  773.     .hb-toggler.hb-open span:nth-child(3) {
  774.         transform: rotate(-45deg) translate(4.5px, -4.5px);
  775.     }
  776.     /* ── Responsive ───────────────────────────────────────────────────────────── */
  777.     @media (max-width: 1024px) {
  778.         .hb-toggler {
  779.             display: flex;
  780.         }
  781.         .hb-links, .hb-nav-right {
  782.             display: none;
  783.         }
  784.         .hb-nav-inner {
  785.             height: 56px;
  786.         }
  787.         .hb-navbar.hb-open .hb-nav-inner {
  788.             height: auto;
  789.             flex-wrap: wrap;
  790.             padding-top: 12px;
  791.             padding-bottom: 14px;
  792.             align-items: flex-start;
  793.         }
  794.         .hb-navbar.hb-open .hb-links {
  795.             display: flex;
  796.             flex-direction: column;
  797.             align-items: flex-start;
  798.             width: 100%;
  799.             flex: 0 0 100%;
  800.             gap: 2px; /* flex: 0 0 100% overrides base flex:1 to force row wrap */
  801.         }
  802.         .hb-navbar.hb-open .hb-links .hb-link,
  803.         .hb-navbar.hb-open .hb-links .hb-drop {
  804.             width: 100%;
  805.         }
  806.         .hb-navbar.hb-open .hb-links .hb-link > a,
  807.         .hb-navbar.hb-open .hb-links .hb-drop > a {
  808.             width: 100%;
  809.             justify-content: space-between;
  810.         }
  811.         .hb-navbar.hb-open .hb-dd-menu {
  812.             position: static;
  813.             transform: none;
  814.             opacity: 0;
  815.             pointer-events: none;
  816.             display: none;
  817.             box-shadow: none;
  818.             border: none;
  819.             background: rgba(26, 29, 46, .03);
  820.             border-radius: 7px;
  821.             margin: 2px 0 2px 12px;
  822.         }
  823.         .hb-navbar.hb-open .hb-drop.hb-mob-open .hb-dd-menu {
  824.             display: block;
  825.             opacity: 1;
  826.             pointer-events: all;
  827.         }
  828.         .hb-navbar.hb-open .hb-nav-right {
  829.             display: flex;
  830.             flex-wrap: wrap;
  831.             width: 100%;
  832.             flex: 0 0 100%;
  833.             gap: 8px;
  834.             padding-top: 12px;
  835.             border-top: 1px solid var(--hb-border);
  836.             margin-top: 4px;
  837.         }
  838.     }
  839.     /* ── Body offset for fixed navbar ─────────────────────────────────────────── */
  840.     body {
  841.         padding-top: 64px;
  842.     }
  843.     @media (max-width: 1024px) {
  844.         body {
  845.             padding-top: 56px;
  846.         }
  847.     }
  848.     /* ── Processing loader ────────────────────────────────────────────────────── */
  849.     #buddybee_processing_loader {
  850.         position: fixed;
  851.         inset: 0;
  852.         background: rgba(247, 245, 240, .88);
  853.         backdrop-filter: blur(4px);
  854.         z-index: 999999;
  855.         display: none;
  856.         align-items: center;
  857.         justify-content: center;
  858.     }
  859.     #buddybee_processing_loader div {
  860.         background: var(--hb-white);
  861.         border-radius: 14px;
  862.         padding: 28px 44px;
  863.         box-shadow: 0 12px 40px rgba(26, 29, 46, .12);
  864.         text-align: center;
  865.     }
  866.     #buddybee_processing_loader p {
  867.         color: var(--hb-ink);
  868.         font-weight: 700;
  869.         font-size: 12px;
  870.         letter-spacing: .1em;
  871.         text-transform: uppercase;
  872.         margin: 0;
  873.         font-family: var(--hb-font);
  874.     }
  875.     a:hover {
  876.         text-decoration: none;
  877.     }
  878. </style>
  879. <nav class="hb-navbar" id="hbNavbar">
  880.     <div class="hb-nav-inner">
  881.         {# Brand #}
  882.         <a class="hb-brand" href="{{ url('dashboard') }}">
  883.             <img src="{{ absolute_url(path('dashboard')) }}honeybee_web_assets/icons/honeybeeicon.svg?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}"
  884.                  alt="HoneyBee">
  885.             <span class="hb-brand-name">Honey<b>Bee</b></span>
  886.         </a>
  887.         {# Mobile hamburger #}
  888.         <button class="hb-toggler" id="hbToggler" aria-label="Open menu" type="button">
  889.             <span></span><span></span><span></span>
  890.         </button>
  891.         {# Primary navigation #}
  892.         <ul class="hb-links">
  893.             <li class="hb-link">
  894.                 <a href="{{ url('honeybee_product') }}"
  895.                    class="{{ app.request.get('_route') == 'honeybee_product' ? 'active' : '' }} trn"
  896.                    data-trn-key="_PRODUCTS_">Product</a>
  897.             </li>
  898.             <li class="hb-link">
  899.                 <a href="{{ url('honeybee_solutions') }}"
  900.                    class="{{ app.request.get('_route') == 'honeybee_solutions' ? 'active' : '' }}">Solutions</a>
  901.             </li>
  902.             <li class="hb-link">
  903.                 <a href="{{ url('honeybee_pricing') }}"
  904.                    class="{{ app.request.get('_route') == 'honeybee_pricing' ? 'active' : '' }} trn"
  905.                    data-trn-key="_PRICING_">Pricing</a>
  906.             </li>
  907.             <li class="hb-link">
  908.                 <a href="{{ url('honeybee_partners') }}"
  909.                    class="{{ app.request.get('_route') == 'honeybee_partners' ? 'active' : '' }}">Partners</a>
  910.             </li>
  911.             <li class="hb-drop">
  912.                 <a href="#">Company <i class="fa-solid fa-chevron-down hb-caret"></i></a>
  913.                 <ul class="hb-dd-menu">
  914.                     <li><a href="{{ url('honeybee_about_us') }}"
  915.                            class="{{ app.request.get('_route') == 'honeybee_about_us' ? 'active' : '' }}">About</a></li>
  916.                     <li><a href="{{ url('honeybee_FAQ') }}"
  917.                            class="{{ app.request.get('_route') == 'honeybee_FAQ' ? 'active' : '' }}">FAQ</a></li>
  918.                     <li><a href="{{ url('honeybee_contact') }}"
  919.                            class="{{ app.request.get('_route') == 'honeybee_contact' ? 'active' : '' }}">Contact</a>
  920.                     </li>
  921.                 </ul>
  922.             </li>
  923.         </ul>
  924.         {# Right-side controls #}
  925.         <div class="hb-nav-right">
  926.             {# Language switcher #}
  927.             <div class="hb-lang">
  928.                 <button class="hb-lang-btn" type="button">
  929.                     <i class="fa-solid fa-globe" style="font-size:12px"></i>
  930.                     <span class="curr_locale_text">en</span>
  931.                     <i class="fa-solid fa-chevron-down" style="font-size:8px;opacity:.5"></i>
  932.                 </button>
  933.                 <ul class="hb-lang-menu">
  934.                     <li><a href="#" class="locale_changer en" data-locale="en">🇬🇧 English</a></li>
  935.                     <li><a href="#" class="locale_changer bn" data-locale="bn">🇧🇩 বাংলা</a></li>
  936.                     <li><a href="#" class="locale_changer it" data-locale="it">🇮🇹 Italiano</a></li>
  937.                     <li><a href="#" class="locale_changer de" data-locale="de">🇩🇪 Deutsch</a></li>
  938.                     <li><a href="#" class="locale_changer fr" data-locale="fr">🇫🇷 Français</a></li>
  939.                     <li><a href="#" class="locale_changer sp" data-locale="sp">🇪🇸 Español</a></li>
  940.                     <li><a href="#" class="locale_changer cn" data-locale="cn">🇨🇳 中文</a></li>
  941.                 </ul>
  942.             </div>
  943.             {# Admin only: switch user #}
  944.             {% if session[UserConstants.USER_ID] is defined and (BUDDYBEE_ADMIN_LEVEL >= 1 or session['actualUserIsAdmin'] is defined) %}
  945.                 <div class="hb-switch">
  946.                     <button class="hb-switch-btn" type="button">Switch User</button>
  947.                     <ul class="hb-switch-panel">
  948.                         <li>
  949.                             <a href="{{ absolute_url(path('view_as_user_central')) }}/{{ session['actualUserId'] is defined ? session['actualUserId'] : session['userId'] }}">
  950.                                 ↩ Back to Mine
  951.                             </a>
  952.                         </li>
  953.                         <li class="hb-sw-div"></li>
  954.                         <li style="padding:2px 0"><select name="viewAsId" id="viewAsId"></select></li>
  955.                     </ul>
  956.                 </div>
  957.             {% endif %}
  958.             {% if session[UserConstants.USER_ID] is defined %}
  959.                 {# Authenticated: user avatar + dropdown #}
  960.                 <div class="hb-user">
  961.                     <button class="hb-user-btn" type="button">
  962.                         <div class="hb-user-avatar"
  963.                                 {% if session[UserConstants.USER_IMAGE] != '' and session[UserConstants.USER_IMAGE] is not null %}
  964.                                     style="background:url('{{ url('dashboard') }}{{ session[UserConstants.USER_IMAGE] }}?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}')"
  965.                                 {% else %}
  966.                                     style="background:url('{{ url('dashboard') }}honeybee_web_assets/images/profiles/profile.png?v={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}')"
  967.                                 {% endif %}
  968.                         ></div>
  969.                         <span class="hb-user-name">{{ session[UserConstants.USER_NAME] }}</span>
  970.                         <i class="fa-solid fa-chevron-down" style="font-size:9px;color:var(--hb-muted);opacity:.55"></i>
  971.                     </button>
  972.                     <ul class="hb-user-menu">
  973.                         <li>
  974.                             <a href="{{ url('honeybee_my_freelancer_profile') }}"
  975.                                class="{{ app.request.get('_route') == 'honeybee_my_freelancer_profile' ? 'active' : '' }}">
  976.                                 <i class="fa-regular fa-circle-user"></i> Profile
  977.                             </a>
  978.                         </li>
  979.                         <li>
  980.                             <a href="{{ url('ticket_list') }}"
  981.                                class="{{ app.request.get('_route') == 'ticket_list' ? 'active' : '' }}">
  982.                                 <i class="fa-regular fa-ticket"></i> <span class="trn" data-trn-key="_MY_TICKETS_">My Tickets</span>
  983.                             </a>
  984.                         </li>
  985.                         <li>
  986.                             <a href="{{ url('central_landing') }}"
  987.                                class="{{ app.request.get('_route') == 'central_landing' ? 'active' : '' }}">
  988.                                 <i class="fas fa-border-all"></i> <span class="trn" data-trn-key="_MY_COMPANIES_">My Companies</span>
  989.                             </a>
  990.                         </li>
  991.                         {% if BUDDYBEE_ADMIN_LEVEL >= 1 %}
  992.                             <li class="hb-u-div"></li>
  993.                             <li>
  994.                                 <a href="{{ url('super_admin_command_center') }}"
  995.                                    class="{{ app.request.get('_route') == 'super_admin_command_center' ? 'active' : '' }}">
  996.                                     <i class="fa-solid fa-gauge-high"></i> Super Admin
  997.                                 </a>
  998.                             </li>
  999.                             <li class="hb-u-div"></li>
  1000.                             <li>
  1001.                                 <a href="{{ url('datev_home') }}"
  1002.                                    class="{{ app.request.get('_route') == 'datev_home' ? 'active' : '' }}">
  1003.                                     <i class="fa-solid fa-gauge-high"></i> Datev Control
  1004.                                 </a>
  1005.                             </li>
  1006.                         {% endif %}
  1007.                         {% if BUDDYBEE_ADMIN_LEVEL > 1 %}
  1008.                             <li class="hb-u-div"></li>
  1009.                             <li>
  1010.                                 <a href="{{ url('admin_demo_pending_list') }}"
  1011.                                    class="{{ app.request.get('_route') in ['admin_demo_pending_list','admin_demo_request_detail'] ? 'active' : '' }}">
  1012.                                     <i class="fa-solid fa-calendar-check"></i> Demo Requests
  1013.                                 </a>
  1014.                             </li>
  1015.                             <li>
  1016.                                 <a href="{{ url('admin_demo_all_list') }}"
  1017.                                    class="{{ app.request.get('_route') == 'admin_demo_all_list' ? 'active' : '' }}">
  1018.                                     <i class="fa-solid fa-list-check"></i> All Bookings
  1019.                                 </a>
  1020.                             </li>
  1021.                         {% endif %}
  1022.                         <li class="hb-u-div"></li>
  1023.                         <li>
  1024.                             <a href="{{ url('user_logout') }}" style="color:#B04030">
  1025.                                 <i class="fa-solid fa-right-from-bracket"></i> Logout
  1026.                             </a>
  1027.                         </li>
  1028.                     </ul>
  1029.                 </div>
  1030.                 {# Companies shortcut #}
  1031.                 <a href="{{ url('central_landing') }}" class="hb-btn-companies trn" data-trn-key="_COMPANIES_">
  1032.                     <i class="fa-solid fa-building" style="font-size:11px"></i>
  1033.                     <span>Companies</span>
  1034.                 </a>
  1035.                 {# Book Demo CTA (authenticated) #}
  1036.                 <a href="{{ url('honeybee_contact') }}" class="hb-btn-companies" style="background:var(--hb-amber)">Book
  1037.                     Demo</a>
  1038.             {% else %}
  1039.                 {# Guest: login + get started + book demo #}
  1040.                 <a href="{{ url('user_login') }}" class="hb-btn-login trn" data-trn-key="_LOGIN_">Login</a>
  1041.                 <a href="{{ url('sign_up') }}" class="hb-btn-signup trn" data-trn-key="_CREATE_ACCOUNT_">Get Started</a>
  1042.                 <a href="{{ url('honeybee_contact') }}" class="hb-btn-companies" style="background:var(--hb-amber)">Book
  1043.                     Demo</a>
  1044.             {% endif %}
  1045.             {# Dark / Light mode toggle #}
  1046.             {#            <div class="hb-theme"> #}
  1047.             {#                <img class="hb-theme-img" src="{{ absolute_url(asset('honeybee_web_assets/icons/sun.svg')) }}" alt="Light mode"> #}
  1048.             {#                <input type="checkbox" id="theme-toggle-checkbox"> #}
  1049.             {#                <label for="theme-toggle-checkbox" class="hb-theme-track" id="hbThemeTrack"></label> #}
  1050.             {#                <img class="hb-theme-img" src="{{ absolute_url(asset('honeybee_web_assets/icons/moon.svg')) }}" alt="Dark mode"> #}
  1051.             {#            </div> #}
  1052.         </div>{# /hb-nav-right #}
  1053.     </div>{# /hb-nav-inner #}
  1054. </nav>
  1055. {# ── Apply saved theme immediately (no flash of wrong theme) ─────────────── #}
  1056. <script>
  1057.     (function () {
  1058.         var saved = localStorage.getItem('theme') || 'light';
  1059.         if (saved === 'dark') {
  1060.             var css = document.getElementById('dark-theme-css');
  1061.             var cb = document.getElementById('theme-toggle-checkbox');
  1062.             var track = document.getElementById('hbThemeTrack');
  1063.             if (css) css.disabled = false;
  1064.             if (cb) cb.checked = true;
  1065.             if (track) track.classList.add('hb-dark');
  1066.         }
  1067.     }());
  1068. </script>
  1069. {# ── Navbar interaction scripts ───────────────────────────────────────────── #}
  1070. <script>
  1071.     (function () {
  1072.         var navbar = document.getElementById('hbNavbar');
  1073.         var toggler = document.getElementById('hbToggler');
  1074.         window.addEventListener('scroll', function () {
  1075.             navbar.classList.toggle('hb-scrolled', window.scrollY > 6);
  1076.         }, {passive: true});
  1077.         if (toggler) {
  1078.             toggler.addEventListener('click', function () {
  1079.                 navbar.classList.toggle('hb-open');
  1080.                 toggler.classList.toggle('hb-open');
  1081.             });
  1082.         }
  1083.         navbar.querySelectorAll('.hb-drop > a').forEach(function (a) {
  1084.             a.addEventListener('click', function (e) {
  1085.                 if (window.innerWidth <= 1024) {
  1086.                     e.preventDefault();
  1087.                     a.closest('.hb-drop').classList.toggle('hb-mob-open');
  1088.                 }
  1089.             });
  1090.         });
  1091.         var cb = document.getElementById('theme-toggle-checkbox');
  1092.         var track = document.getElementById('hbThemeTrack');
  1093.         if (cb && track) {
  1094.             track.addEventListener('click', function () {
  1095.                 changeTheme(!cb.checked);
  1096.             });
  1097.         }
  1098.     }());
  1099. </script>
  1100. {# ── Preloader: hide on load ──────────────────────────────────────────────── #}
  1101. <script>
  1102.     document.body.style.overflow = 'hidden';
  1103.     window.addEventListener('load', function () {
  1104.         var pre = document.getElementById('hb-preloader');
  1105.         if (pre) {
  1106.             pre.style.transition = 'opacity .35s ease';
  1107.             pre.style.opacity = '0';
  1108.             setTimeout(function () {
  1109.                 pre.style.display = 'none';
  1110.             }, 360);
  1111.         }
  1112.         document.body.style.overflow = 'auto';
  1113.     });
  1114. </script>
  1115. {% set full_js_included = 0 %}
  1116. {% endif %}{# /include_html #}
  1117. <input type="hidden" id="timeStampOnHeaderLoad" value="{{ 'now'|date('U') }}">
  1118. {% include '@Application/inc/ajax_route_library.html.twig' %}
  1119. {# Date-picker scripts #}
  1120. <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  1121. <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
  1122. <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-datetimepicker/2.7.1/js/bootstrap-material-datetimepicker.min.js"></script>