<header class="n7-header border-b n7-border-gray-01" id="siteHeader" aria-label="Header del sito">
    <!-- Top bar -->
    <div class="n7-top-bar lg:flex items-center lg:py-1 n7-background-gray-02">
        <div class="n7-top-bar__container container lg:flex items-center lg:flex-1">
            <div class="n7-top-bar__navigation grid lg:flex items-center gap-2 lg:gap-8">
                <!-- LINK CERTIFICAZIONE ISO  -->

                <!-- Secondary nav/menu component -->
                <nav aria-label="Secondaria">
                    <ul class="n7-secondary-navigation flex max-lg:flex-col max-lg:gap-6">

                        <li class="">
                            <a href="page" class="n7-link max-lg:block py-2 lg:p-2 text-sm n7-content-01">
                                Notizie

                            </a>
                        </li>

                        <li class="">
                            <a href="page" class="n7-link max-lg:block py-2 lg:p-2 text-sm n7-content-01">
                                Contatti

                            </a>
                        </li>

                    </ul>
                </nav>
            </div>

            <div class="n7-top-bar__utilities-area flex items-center justify-between lg:flex-start lg:ml-auto">

                <!-- Social links component -->
                <ul class="n7-social-links flex items-center gap-8">

                    <li class="flex items-center">
                        <a href="facebook.com" class="n7-link text-3xl lg:text-2xl text-secondary-600">
                            <span class="sr-only">Vai al profilo Facebook di ???</span>

                            <svg class="inline-block align-middle fill-current w-1e h-1e" aria-hidden="true" focusable="false" role="img">
                                <use xlink:href="../../icons.svg#solid--facebook" />
                            </svg>

                        </a>
                    </li>

                    <li class="flex items-center">
                        <a href="instagram.com" class="n7-link text-3xl lg:text-2xl text-secondary-600">
                            <span class="sr-only">Vai al profilo Instagram di ???</span>

                            <svg class="inline-block align-middle fill-current w-1e h-1e" aria-hidden="true" focusable="false" role="img">
                                <use xlink:href="../../icons.svg#solid--instagram" />
                            </svg>

                        </a>
                    </li>

                    <li class="flex items-center">
                        <a href="youtube.com" class="n7-link text-3xl lg:text-2xl text-secondary-600">
                            <span class="sr-only">Vai al canale YouTube di ???</span>

                            <svg class="inline-block align-middle fill-current w-1e h-1e" aria-hidden="true" focusable="false" role="img">
                                <use xlink:href="../../icons.svg#solid--youtube" />
                            </svg>

                        </a>
                    </li>

                </ul>
                <span class="hidden lg:inline w-1e h-10 mx-6 bg-no-repeat bg-left-top bg-cover" style="background-image: url('/images/vertical-divider.svg')"></span>

                <!-- Language Selector component -->
                <div>Lingua</div>

                <!-- Search component -->
                <div>
                    <button type="button" id="searchModalTrigger" class="n7-link n7-btn n7-btn--icon n7-content-01 border-0 w-10 h-10">
                        <span class="sr-only">Cerca nel sito di OffHealth - apri la modale</span>
                        <svg class="inline-block align-middle fill-current w-5 h-5" aria-hidden="true" focusable="false" role="img">
                            <use xlink:href="../../icons.svg#mini--magnifying-glass" />
                        </svg>

                    </button>

                    <!-- Search Modal - BEGIN -->
                    <div id="searchModal" class="fixed items-center content-center inset-0 bg-black bg-opacity-50 overflow-y-auto h-full w-full" style="display:none;" aria-hidden="true" role="dialog" aria-modal="true" aria-labelledby="modalTitle">

                        <div class="relative h-full w-full mx-auto p-6 lg:p-16 shadow-lg n7-background-gray-01">
                            <div class="container lg:px-16 grid gap-14">
                                <div class="flex justify-between items-center n7-content-01">
                                    <h2 id="modalTitle" class="text-3xl md:text-5xl lg:text-6xl">Cerca nel sito</h2>
                                    <button id="closeModal" class="n7-link n7-btn n7-btn--icon n7-content-01 border-0">
                                        <span class="sr-only">Chiudi</span>
                                        <svg class="inline-block align-middle fill-current w-8 h-8" aria-hidden="true" focusable="false" role="img">
                                            <use xlink:href="../../icons.svg#mini--x-mark" />
                                        </svg>

                                    </button>
                                </div>

                                <div class="modal-content">
                                    <form role="search" class="flex flex-col lg:flex-row gap-4">
                                        <div class="n7-input-field grid gap-2 flex-1">
                                            <label for="search" class="block text-base font-medium n7-content-01">Cerca tra i prodotti, le notizie, ecc ...</label>

                                            <div class="n7-input flex items-center relative">

                                                <svg class="inline-block align-middle fill-current w-6 h-6 absolute left-3 n7-content-placeholder" aria-hidden="true" focusable="false" role="img">
                                                    <use xlink:href="../../icons.svg#mini--magnifying-glass" />
                                                </svg>

                                                <input id="search" class="border-1 n7-border-gray-01 text-sm n7-input-placeholder py-3 pr-3 border n7-border-gray-01 rounded-full w-full pl-10 " type="search" placeholder="Cerca">

                                            </div>
                                        </div>

                                        <button type="button" class="n7-btn 
    n7-btn--primary
    n7-btn--primary w-fit lg:self-end">
                                            Cerca nel sito

                                            <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2 transition-all duration-200 ease-out transform group-hover:translate-x-1" aria-hidden="true" focusable="false" role="img">
                                                <use xlink:href="../../icons.svg#mini--arrow-right" />
                                            </svg>

                                        </button>

                                    </form>
                                </div>
                            </div>
                        </div>
                    </div>
                    <!-- Search Modal - END -->
                </div><!--/ END Search component -->

            </div><!--/ END TOP BAR UTILITIES -->

        </div>
    </div><!-- /END TOPBAR -->
    <!-- Main heading -->
    <div class="n7-main-heading bg-white flex items-center py-6 lg:py-1">
        <div class="container flex items-center flex-1">
            <div class="flex items-center n7-branding site-branding lg:max-w-[35.7%]">
                <a class="n7-site-logo site-logo flex h-9 md:flex-1 lg:max-w-[248px]" href="#">
                    <img class="w-full h-full object-cover md:object-contain object-left-top" src="/images/offhealth.svg" alt="Alt logo image" width="248" height="81" />
                </a>

                <span class="hidden lg:inline w-4 h-10 md:w-10 md:h-20 ml-4 bg-no-repeat bg-left-top bg-cover" style="background-image: url('/images/vertical-divider.svg')"></span>
            </div>
            <div class="flex-1 lg:ml-auto lg:justify-end">
                <nav class="n7-primary-navigation flex lg:justify-end" aria-label="Principale" id="siteNavWrapper">
                    <button type="button" class="n7-btn 
    n7-btn--only-text rounded-none lg:hidden ml-auto n7-btn--icon group" aria-expanded="false" aria-controls="mainNavPanel" id="mobileNavToggle">
                        <svg class="inline-block align-middle fill-current w-6 h-6 m-0 p-0 transition-all duration-200 ease-out transform group-hover:translate-none is-show-menu group-aria-expanded:hidden" aria-hidden="true" focusable="false" role="img">
                            <use xlink:href="../../icons.svg#mini--bars-3" />
                        </svg>

                        <svg class="inline-block align-middle fill-current w-6 h-6 m-0 p-0 transition-all duration-200 ease-out transform group-hover:translate-none is-close-menu hidden group-aria-expanded:inline-block" aria-hidden="true" focusable="false" role="img">
                            <use xlink:href="../../icons.svg#mini--x-mark" />
                        </svg>

                        <span class="sr-only is-show-menu group-aria-expanded:hidden">
                            Menu
                        </span>
                        <span class="sr-only is-close-menu hidden group-aria-expanded:block">
                            Chiudi menu
                        </span>
                    </button>
                    <!-- Mobile panel -->
                    <div class="n7-primary-navigation__panel flex-col bg-white max-lg:shadow-[-6px_0px_4px_-1px_rgba(0,0,0,0.06)] transition-all invisible py-6 px-4 fixed lg:static lg:visible top-[--header-height] bottom-0 max-lg:w-[90%] max-lg:max-w-[350px] overflow-y-auto" id="mainNavPanel">
                        <!-- Main nav -->
                        <div class="n7-primary-navigation__module is-main lg:border-b-0" id="mainNavListContainer">
                            <ul class="n7-primary-navigation__list flex max-lg:flex-col gap-6 lg:gap-4 lg:justify-end has-dropdown-menu">

                                <li>
                                    <!-- RP 240328 Primary nav fix - Changed classes -->
                                    <a href="#" class="n7-link flex flex-col items-start lg:items-center py-3 lg:px-3 lg:pb-0 lg:pt-4 text-base font-medium visited:n7-content-01 n7-link--active">
                                        Chi Siamo

                                    </a>
                                </li>

                                <li class="n7-dropdown-menu n7-primary-navigation__item">
                                    <button class="n7-dropdown-menu__trigger dropdown-trigger group w-full flex lg:flex-col items-center justify-between py-3 lg:px-3 lg:pb-0 lg:pt-4 text-base font-medium n7-content-01 hover:n7-content-03 aria-expanded:n7-content-primary lg:max-xl:leading-5" aria-expanded="false" aria-controls="submenuId01">
                                        Salute dell’Occhio<svg class="inline-block align-middle fill-current w-5 h-5 transition-all n7-dropdown-menu__trigger-icon group-aria-expanded:-rotate-180" aria-hidden="true" focusable="false" role="img">
                                            <use xlink:href="../../icons.svg#mini--chevron-down" />
                                        </svg>
                                    </button>
                                    <ul class="n7-dropdown-menu__list hidden lg:absolute lg:pt-2 lg:pb-4 lg:px-4 lg:rounded-lg lg:shadow-xl bg-white lg:w-80" id="submenuId01">

                                        <li class="n7-dropdown-menu__item group is-active">
                                            <!-- RP 240416 Minisite user menu - changed classes -->
                                            <a class="flex flex-col gap-6 transition text-sm lg:text-base group/clickarea group-first:rounded-t group-last:rounded-b n7-background-gray-01 mt-2 p-5" href="#">
                                                <div class="flex gap-2 items-center n7-content-01 text-sm lg:text-base font-medium group-hover/clickarea:n7-link-primary-hover group-active/clickarea:text-primary-600 group-[.is-active]:n7-link-primary-hover">

                                                    <span class="grow">Item label 1</span>

                                                    <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2" aria-hidden="true" focusable="false" role="img">
                                                        <use xlink:href="../../icons.svg#mini--arrow-right" />
                                                    </svg>

                                                </div>
                                                <div class="text-xs n7-content-03">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</div>
                                            </a>
                                        </li>

                                        <li class="n7-dropdown-menu__item group">
                                            <!-- RP 240416 Minisite user menu - changed classes -->
                                            <a class="flex flex-col gap-6 transition text-sm lg:text-base group/clickarea group-first:rounded-t group-last:rounded-b n7-background-gray-01 mt-2 p-5" href="#">
                                                <div class="flex gap-2 items-center n7-content-01 text-sm lg:text-base font-medium group-hover/clickarea:n7-link-primary-hover group-active/clickarea:text-primary-600 group-[.is-active]:n7-link-primary-hover">

                                                    <span class="grow">Item label 2</span>

                                                    <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2" aria-hidden="true" focusable="false" role="img">
                                                        <use xlink:href="../../icons.svg#mini--arrow-right" />
                                                    </svg>

                                                </div>
                                                <div class="text-xs n7-content-03">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</div>
                                            </a>
                                        </li>

                                        <li class="n7-dropdown-menu__item group">
                                            <!-- RP 240416 Minisite user menu - changed classes -->
                                            <a class="flex flex-col gap-6 transition text-sm lg:text-base group/clickarea group-first:rounded-t group-last:rounded-b n7-background-gray-01 mt-2 p-5" href="#">
                                                <div class="flex gap-2 items-center n7-content-01 text-sm lg:text-base font-medium group-hover/clickarea:n7-link-primary-hover group-active/clickarea:text-primary-600 group-[.is-active]:n7-link-primary-hover">

                                                    <span class="grow">Item label 3</span>

                                                    <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2" aria-hidden="true" focusable="false" role="img">
                                                        <use xlink:href="../../icons.svg#mini--arrow-right" />
                                                    </svg>

                                                </div>
                                                <div class="text-xs n7-content-03">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</div>
                                            </a>
                                        </li>

                                        <li class="n7-dropdown-menu__item group">
                                            <!-- RP 240416 Minisite user menu - changed classes -->
                                            <a class="flex flex-col gap-6 transition text-sm lg:text-base group/clickarea group-first:rounded-t group-last:rounded-b n7-background-gray-01 mt-2 p-5" href="#">
                                                <div class="flex gap-2 items-center n7-content-01 text-sm lg:text-base font-medium group-hover/clickarea:n7-link-primary-hover group-active/clickarea:text-primary-600 group-[.is-active]:n7-link-primary-hover">

                                                    <span class="grow">Item label 4</span>

                                                    <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2" aria-hidden="true" focusable="false" role="img">
                                                        <use xlink:href="../../icons.svg#mini--arrow-right" />
                                                    </svg>

                                                </div>
                                                <div class="text-xs n7-content-03">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</div>
                                            </a>
                                        </li>

                                    </ul>
                                </li>

                                <li class="n7-dropdown-menu n7-primary-navigation__item">
                                    <button class="n7-dropdown-menu__trigger dropdown-trigger group w-full flex lg:flex-col items-center justify-between py-3 lg:px-3 lg:pb-0 lg:pt-4 text-base font-medium n7-content-01 hover:n7-content-03 aria-expanded:n7-content-primary lg:max-xl:leading-5" aria-expanded="false" aria-controls="submenuId02">
                                        Ricerca e Innovazione<svg class="inline-block align-middle fill-current w-5 h-5 transition-all n7-dropdown-menu__trigger-icon group-aria-expanded:-rotate-180" aria-hidden="true" focusable="false" role="img">
                                            <use xlink:href="../../icons.svg#mini--chevron-down" />
                                        </svg>
                                    </button>
                                    <ul class="n7-dropdown-menu__list hidden lg:absolute lg:pt-2 lg:pb-4 lg:px-4 lg:rounded-lg lg:shadow-xl bg-white lg:w-80" id="submenuId02">

                                        <li class="n7-dropdown-menu__item group is-active">
                                            <!-- RP 240416 Minisite user menu - changed classes -->
                                            <a class="flex flex-col gap-6 transition text-sm lg:text-base group/clickarea group-first:rounded-t group-last:rounded-b n7-background-gray-01 mt-2 p-5" href="#">
                                                <div class="flex gap-2 items-center n7-content-01 text-sm lg:text-base font-medium group-hover/clickarea:n7-link-primary-hover group-active/clickarea:text-primary-600 group-[.is-active]:n7-link-primary-hover">

                                                    <span class="grow">Item label 1</span>

                                                    <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2" aria-hidden="true" focusable="false" role="img">
                                                        <use xlink:href="../../icons.svg#mini--arrow-right" />
                                                    </svg>

                                                </div>
                                                <div class="text-xs n7-content-03">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</div>
                                            </a>
                                        </li>

                                        <li class="n7-dropdown-menu__item group">
                                            <!-- RP 240416 Minisite user menu - changed classes -->
                                            <a class="flex flex-col gap-6 transition text-sm lg:text-base group/clickarea group-first:rounded-t group-last:rounded-b n7-background-gray-01 mt-2 p-5" href="#">
                                                <div class="flex gap-2 items-center n7-content-01 text-sm lg:text-base font-medium group-hover/clickarea:n7-link-primary-hover group-active/clickarea:text-primary-600 group-[.is-active]:n7-link-primary-hover">

                                                    <span class="grow">Item label 2</span>

                                                    <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2" aria-hidden="true" focusable="false" role="img">
                                                        <use xlink:href="../../icons.svg#mini--arrow-right" />
                                                    </svg>

                                                </div>
                                                <div class="text-xs n7-content-03">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</div>
                                            </a>
                                        </li>

                                        <li class="n7-dropdown-menu__item group">
                                            <!-- RP 240416 Minisite user menu - changed classes -->
                                            <a class="flex flex-col gap-6 transition text-sm lg:text-base group/clickarea group-first:rounded-t group-last:rounded-b n7-background-gray-01 mt-2 p-5" href="#">
                                                <div class="flex gap-2 items-center n7-content-01 text-sm lg:text-base font-medium group-hover/clickarea:n7-link-primary-hover group-active/clickarea:text-primary-600 group-[.is-active]:n7-link-primary-hover">

                                                    <span class="grow">Item label 3</span>

                                                    <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2" aria-hidden="true" focusable="false" role="img">
                                                        <use xlink:href="../../icons.svg#mini--arrow-right" />
                                                    </svg>

                                                </div>
                                                <div class="text-xs n7-content-03">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</div>
                                            </a>
                                        </li>

                                        <li class="n7-dropdown-menu__item group">
                                            <!-- RP 240416 Minisite user menu - changed classes -->
                                            <a class="flex flex-col gap-6 transition text-sm lg:text-base group/clickarea group-first:rounded-t group-last:rounded-b n7-background-gray-01 mt-2 p-5" href="#">
                                                <div class="flex gap-2 items-center n7-content-01 text-sm lg:text-base font-medium group-hover/clickarea:n7-link-primary-hover group-active/clickarea:text-primary-600 group-[.is-active]:n7-link-primary-hover">

                                                    <span class="grow">Item label 4</span>

                                                    <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2" aria-hidden="true" focusable="false" role="img">
                                                        <use xlink:href="../../icons.svg#mini--arrow-right" />
                                                    </svg>

                                                </div>
                                                <div class="text-xs n7-content-03">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</div>
                                            </a>
                                        </li>

                                    </ul>
                                </li>

                                <li>
                                    <!-- RP 240328 Primary nav fix - Changed classes -->
                                    <a href="#" class="n7-link flex flex-col items-start lg:items-center py-3 lg:px-3 lg:pb-0 lg:pt-4 text-base font-medium n7-content-01 hover:n7-content-03 visited:n7-content-01">
                                        Prodotti

                                    </a>
                                </li>

                            </ul>
                        </div>
                    </div>
                    <div class="n7-primary-navigation__backdrop bg-black/25 top-[--header-height] lg:hidden"></div>
                </nav>
            </div>
            <div class="n7-action-area__container flex gap-3 ml-4 max-lg:hidden">
                <div class="n7-action-area flex gap-3 items-center max-lg:flex-wrap max-lg:mt-8">

                    <a href="#" class="n7-btn 
    n7-btn--primary
    max-lg:n7-btn--l max-lg:w-full max-lg:justify-center n7-btn--s">
                        Prontuario

                    </a>

                </div>

                <div class="n7-user-menu">
                    <nav class="flex" aria-label="Utente">
                        <!-- RP 240416 Minisite user menu - changed classes -->
                        <ul class="n7-primary-navigation__list w-full lg:relative lg:w-auto lg:flex lg:justify-end gap-4 xl:gap-8 has-dropdown-menu">
                            <li class="n7-dropdown-menu n7-primary-navigation__item">
                                <button class="n7-dropdown-menu__trigger dropdown-trigger group w-full flex lg:flex-col items-center justify-between py-3 lg:px-3 lg:pb-0 lg:pt-4 text-base font-medium n7-content-01 hover:n7-content-03 aria-expanded:n7-content-primary lg:max-xl:leading-5" aria-expanded="false" aria-controls="usermenu">
                                    Massimiliano Spinosa<svg class="inline-block align-middle fill-current w-5 h-5 transition-all n7-dropdown-menu__trigger-icon group-aria-expanded:-rotate-180" aria-hidden="true" focusable="false" role="img">
                                        <use xlink:href="../../icons.svg#mini--chevron-down" />
                                    </svg>
                                </button>
                                <ul class="n7-dropdown-menu__list hidden lg:absolute lg:pt-2 lg:pb-4 lg:px-4 lg:rounded-lg lg:shadow-xl bg-white lg:w-80 lg:right-0 lg:z-10 border-r-0 border-l-0 " id="usermenu">

                                    <li class="n7-dropdown-menu__item group">
                                        <!-- RP 240416 Minisite user menu - changed classes -->
                                        <a class="flex flex-col gap-6 transition text-sm lg:text-base group/clickarea group-first:rounded-t group-last:rounded-b n7-background-gray-01 mt-2 p-5" href="#">
                                            <div class="flex gap-2 items-center n7-content-01 text-sm lg:text-base font-medium group-hover/clickarea:n7-link-primary-hover group-active/clickarea:text-primary-600 group-[.is-active]:n7-link-primary-hover">

                                                <span class="grow">voce 1</span>

                                                <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2" aria-hidden="true" focusable="false" role="img">
                                                    <use xlink:href="../../icons.svg#mini--arrow-right" />
                                                </svg>

                                            </div>

                                        </a>
                                    </li>

                                    <li class="n7-dropdown-menu__item group">
                                        <!-- RP 240416 Minisite user menu - changed classes -->
                                        <a class="flex flex-col gap-6 transition text-sm lg:text-base group/clickarea group-first:rounded-t group-last:rounded-b n7-background-gray-01 mt-2 p-5" href="#">
                                            <div class="flex gap-2 items-center n7-content-01 text-sm lg:text-base font-medium group-hover/clickarea:n7-link-primary-hover group-active/clickarea:text-primary-600 group-[.is-active]:n7-link-primary-hover">

                                                <span class="grow">voce 2</span>

                                                <svg class="inline-block align-middle fill-current w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6 ml-2" aria-hidden="true" focusable="false" role="img">
                                                    <use xlink:href="../../icons.svg#mini--arrow-right" />
                                                </svg>

                                            </div>

                                        </a>
                                    </li>

                                </ul>
                            </li>
                        </ul>
                    </nav>
                </div>

            </div>
        </div>
    </div>
    </div>

</header>
<header class="n7-header{% if hasShadow %} shadow-md{% endif %}{% if hasBorder %} border-b n7-border-gray-01{% endif %}" id="siteHeader" aria-label="Header del sito">
    <!-- Top bar -->
    {% render '@top-bar', {hasSearchButton: 'true', hasTopBarSocial: 'true'}, true %}
    <!-- Main heading -->
    {% render '@main-heading',{logoDivider: 'true'}, true %}
</header>
{
  "hasShadow": false,
  "hasBorder": true,
  "mainHidden": false,
  "minisiteHidden": true,
  "breakpoint": "lg"
}
  • Content:
    /* HEADER SCRIPT - mobile management */
    document.addEventListener('DOMContentLoaded', function () {
        'use strict';
        if (document.querySelector('.n7-header')) {
            /* GLOBAL VARIABLES */
            var rootElement = document.documentElement;
    // RP 240403 Minisite header - Added breakpoint setting
            var breakpointMobile = '1024'
            var bodyElement = document.body;
            if (bodyElement.classList.contains("theme-minisite")) {
                breakpointMobile = '1280'
            }
            var siteHeader = document.querySelector('.n7-header');
            // var breadcrumb = document.querySelector('.n7-breadcrumb');
            var headerHeight;
            // var breadcrumbHeight;
    
            var mainMenuWrapper = document.getElementById('mainNavPanel');
            // var headerMainArea = document.querySelector('.region-header-main-area');
            var headerSecondaryNav = document.querySelector('.n7-top-bar__navigation');
            var headerSocialLinks = document.querySelector('.n7-top-bar__utilities-area .n7-social-links');
            var headerPrimaryNav = document.getElementById('mainNavListContainer');
            var headerActionArea = document.querySelector('.n7-main-heading .n7-action-area');
            var headerUserMenu = document.querySelector('.n7-main-heading .n7-user-menu');
    // RP 240402 Minisite header - Added language selector
            var headerLangSelector = document.querySelector('.n7-main-heading .n7-language-selector');
            // var headerSearch = document.querySelector('.region-header-top-area-second');
    
            var SiteMenuWrapper = document.getElementById('siteNavWrapper');
            var mobileMenuBackdrop = document.querySelector('.n7-primary-navigation__backdrop')
    
            /* FUNCTIONS */
    
            function toggleIcon(icon) {
                if (icon.classList.contains('is-hidden')) {
                    icon.classList.remove('is-hidden');
                    icon.classList.add('is-visible');
                } else if (icon.classList.contains('is-visible')) {
                    icon.classList.remove('is-visible');
                    icon.classList.add('is-hidden');
                }
            }
    
            function calculateSiteHeader(header) {
                headerHeight = header.offsetHeight;
                rootElement.style.setProperty('--header-height', headerHeight + 'px');
            }
    
            function calculateBreadcrumbHeader(breadcrumb) {
                breadcrumbHeight = breadcrumb.offsetHeight;
                rootElement.style.setProperty('--breadcrumb-height', breadcrumbHeight + 'px');
            }
    
            function ariaExpandedToggle(target) {
                if (target.getAttribute('aria-expanded') === "false") {
                    target.setAttribute('aria-expanded', 'true');
                } else {
                    target.setAttribute('aria-expanded', 'false');
                }
            }
    
            function openOffCanvasMenu(button, targetMenu) {
                button.classList.toggle('is-selected');
                ariaExpandedToggle(button);
                targetMenu.classList.toggle('is-open');
                document.body.classList.toggle('overflow-hidden');
            }
    
            function closeMobileMenu() {
                if (document.body.classList.contains('overflow-hidden')) {
                    document.body.classList.remove('overflow-hidden');
                }
    
                mainMenuWrapper.classList.remove('is-open');
                document.getElementById('mobileNavToggle').setAttribute('aria-expanded', 'false');
                document.getElementById('mobileNavToggle').classList.remove('is-selected');
            }
    
            function wrapAndPrepend(wrapperClass, elementToWrap, parentElement) {
                if (!document.querySelector('.' + wrapperClass + ':not(.is-main)')) {
                    var wrapperDiv = document.createElement('div');
                    wrapperDiv.classList.add(wrapperClass);
                    wrapperDiv.appendChild(elementToWrap);
                    parentElement.prepend(wrapperDiv);
                }
            }
    
            function wrapAndAppend(wrapperClass, elementsToWrap, parentElement) {
                var wrapperDiv = [];
                for (var i = 0; i < elementsToWrap.length; i++) {
                    wrapperDiv[i] = document.createElement('div');
                    wrapperDiv[i].classList.add(wrapperClass);
                    wrapperDiv[i].appendChild(elementsToWrap[i]);
                    parentElement.append(wrapperDiv[i]);
                } 
            }
    
            function unwrapAndRemove(wrapperDiv, elementToUnwrap, parentElement) {
                parentElement.removeChild(wrapperDiv);
            }
    
            function handleResize() {
                var elementsToMove = [];
    
                // Push elements in the same top to bottom order as in the mobile design
                if (headerSecondaryNav) {
                    elementsToMove.push(headerSecondaryNav)
                }
                if (headerSocialLinks) {
                    elementsToMove.push(headerSocialLinks)
                }
    
                // Mobile view
    // RP 240403 Minisite header - Use of breakpoint setting
                if (window.matchMedia("screen and (max-width: " + (breakpointMobile - 1) + "px)").matches  && !movedToMobile) {
                    // Move specific elements to mobile navigation panel
                    if (headerUserMenu) {
                        wrapAndPrepend('n7-primary-navigation__module', headerUserMenu, mainMenuWrapper);
                    }
    // RP 240402 Minisite header - Added language selector
                    if (headerLangSelector) {
                        headerPrimaryNav.classList.add("grid-rows-[min-content]");
                        headerLangSelector.classList.add("n7-primary-navigation__sub-module");
                        headerPrimaryNav.appendChild(headerLangSelector);
                    }
                    if (headerActionArea) {
                        headerPrimaryNav.appendChild(headerActionArea);
                    }
                    // Move all other elements to mobile navigation panel
                    wrapAndAppend('n7-primary-navigation__module', elementsToMove, mainMenuWrapper);
                    movedToMobile = true;
                    movedToDesktop = false;
    
                    calculateSiteHeader(siteHeader);
    
                // Desktop view
    // RP 240403 Minisite header - Use of breakpoint setting
                } else if (window.matchMedia("screen and (min-width: " + breakpointMobile + "px)").matches && !movedToDesktop) {
    
                    // Move elements back to desktop position
                    if (headerSecondaryNav) {
                        document.querySelector('.n7-top-bar__container').prepend(headerSecondaryNav);
                    }
                    if (headerSocialLinks) {
                        document.querySelector('.n7-top-bar__utilities-area').prepend(headerSocialLinks);
                    }
                    if (headerUserMenu) {
                        document.querySelector('.n7-action-area__container').prepend(headerUserMenu);
                    }
                    if (headerActionArea) {
                        document.querySelector('.n7-action-area__container').prepend(headerActionArea);
                    }
    // RP 240402 Minisite header - Added language selector
                    if (headerLangSelector) {
                        headerPrimaryNav.classList.remove("grid-rows-[min-content]");
                        headerLangSelector.classList.remove("n7-primary-navigation__sub-module");
                        document.querySelector('.n7-main-heading__navigation').after(headerLangSelector);
                    }
                    // Remove empty wrapper divs
                    var emptySecondaryNavModules = document.querySelectorAll('.n7-primary-navigation__module:not(.is-main):empty');
                    emptySecondaryNavModules.forEach(function (emptyNavModule) {
                        unwrapAndRemove(emptyNavModule, headerSecondaryNav, mainMenuWrapper);
                    });
                    movedToDesktop = true;
                    movedToMobile = false;
    
                    calculateSiteHeader(siteHeader);
    
                }
            }
    
            var movedToMobile = false;
            var movedToDesktop = false;
            handleResize(); // Initialize on page load
            window.addEventListener('resize', handleResize);
    
            document.getElementById('mobileNavToggle').addEventListener('click', function (e) {
                e.preventDefault();
                openOffCanvasMenu(this, mainMenuWrapper);
            });
    
            document.addEventListener('keyup', function (e) {
                // if (e.key === "Escape") {
                //     if (mainMenuWrapper.classList.contains('is-open')) {
                //         closeMobileMenu();
                //         if (window.getComputedStyle(document.getElementById('mobileNavToggle')).display !== 'none') {
                //             document.getElementById('mobileNavToggle').focus();
                //         }
    
                //         if (document.getElementById('mainMenuToggle')) {
                //             document.getElementById('mainMenuToggle').focus();
                //         }
                //     }
                // }
    
                if (e.key === "Escape") {
                    if (mainMenuWrapper.classList.contains('is-open')) {
                        // Verifica se il focus è all'interno del menu principale
                        const isFocusInsideMainMenu = SiteMenuWrapper.contains(document.activeElement) &&
                            !document.activeElement.closest('.n7-dropdown-menu__item');
    
                        if (isFocusInsideMainMenu) {
                            closeMobileMenu();
    
                            // Se disponibile, ripristina il focus sull'elemento principale di apertura menu
                            if (document.getElementById('mobileNavToggle')) {
                                document.getElementById('mobileNavToggle').focus();
                            }
                        }
                    }
                }
    
                if ((e.key === 'Tab' || e.keyCode === 9) && !mainMenuWrapper.contains(e.target)) {
                    closeMobileMenu();
                }
            });
    
            document.body.addEventListener('click', function (e) {
                if (!SiteMenuWrapper.contains(e.target) || mobileMenuBackdrop.contains(e.target)) {
                    closeMobileMenu();
                }
            });
    
        }
    });
    
    /* SEARCH DIALOG */
    const openModal = () => {
        const modal = document.getElementById('searchModal');
        const modalContent = modal.querySelector('.modal-content');
        modal.style.display = 'flex';
        modal.classList.add("z-50");
        modal.setAttribute('aria-hidden', 'false');
    
        // Get all the focusable elements inside the modal content
        const focusableElements = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
        const firstFocusable = modalContent.querySelectorAll(focusableElements)[0];
        const fallbackFocusable = modalContent.querySelector('.is-focusable-element'); // Adjust the selector if necessary
    
        // If there's a focusable element, focus on it; otherwise, focus on the fallback element
        if (firstFocusable) {
            firstFocusable.focus();
        } else if (fallbackFocusable) {
            fallbackFocusable.setAttribute('tabindex', '-1');
            fallbackFocusable.focus();
        }
    };
    
    const closeModal = () => {
        const modal = document.getElementById('searchModal');
        const modalContent = modal.querySelector('.modal-content');
        const previouslyFocusedElement = document.getElementById('searchModalTrigger');
    
        // Remove tabindex from the fallback focusable element
        const fallbackFocusable = modalContent.querySelector('.is-focusable-element');
        if (fallbackFocusable) {
            fallbackFocusable.removeAttribute('tabindex');
        }
    
        modal.style.display = 'none';
        modal.setAttribute('aria-hidden', 'true');
        modal.classList.remove("z-50");
        previouslyFocusedElement.focus();
    };
    
    if (document.getElementById('searchModal')) {
        document.getElementById('searchModalTrigger').addEventListener('click', openModal);
    
        document.getElementById('closeModal').addEventListener('click', closeModal);
    
        document.getElementById('searchModal').addEventListener('keydown', function (event) {
            const modalContent = document.querySelector('.modal-content');
            const focusableElements = modalContent.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
            const firstFocusableElement = focusableElements[0];
            const lastFocusableElement = focusableElements[focusableElements.length - 1];
    
            if (event.key === 'Tab') {
                if (event.shiftKey && document.activeElement === firstFocusableElement) {
                    lastFocusableElement.focus();
                    event.preventDefault();
                } else if (!event.shiftKey && document.activeElement === lastFocusableElement) {
                    firstFocusableElement.focus();
                    event.preventDefault();
                }
            }
    
            if (event.key === 'Escape') {
                closeModal();
            }
        });
    
        window.addEventListener('click', function (event) {
            const modal = document.getElementById('searchModal');
            if (event.target === modal) {
                closeModal();
            }
        });
    }
  • URL: /components/raw/header/header.js
  • Filesystem Path: components/04-organisms/header/header.js
  • Size: 13 KB

Modular header component. Components:

  • top-bar component: manage secondary menu, search, other utilities
  • main-heading: cointains one or more logos, main navigation
  • bottom-bar (work in progress)

Use hasShadow:true in configuration to add header box shadow