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