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

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