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