/**
 * Simple Main Menu Module - Frontend styles
 *
 * BEM naming: .wh-mainmenu__*
 * Desktop: horizontal bar with dropdown + kolumny kaskadowe (poziom 3+)
 * Mobile:  hamburger → drawer z drill-down (panele poziomow)
 *
 * @author    Woohoo.pl
 * @copyright 2025 Woohoo.pl
 * @license   https://opensource.org/licenses/AFL-3.0
 */

/* ═══════════════════════════════════════════
   Reset & base
   ═══════════════════════════════════════════ */
.wh-mainmenu,
.wh-mainmenu *,
.wh-mainmenu *::before,
.wh-mainmenu *::after {
    box-sizing: border-box;
}

.wh-mainmenu ul {
    list-style: none;
    margin: 0;
    padding: 0;
}

.wh-mainmenu a {
    text-decoration: none;
    color: inherit;
}

.wh-mainmenu button {
    border: none;
    background: none;
    cursor: pointer;
    font: inherit;
    color: inherit;
    padding: 0;
}

/* ═══════════════════════════════════════════
   Desktop menu
   ═══════════════════════════════════════════ */
.wh-mainmenu__desktop {
    display: none;
    position: relative;
}

.wh-mainmenu__list {
    display: flex;
    align-items: stretch;
    gap: var(--wh-menu-gap, 0px);
    margin: 0;
    padding: 0;
}

.wh-mainmenu__item {
    position: static;
    display: flex;
    align-items: stretch;
}

.wh-mainmenu__link {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 14px 16px;
    font-size: var(--wh-menu-font-size, 12px);
    font-weight: var(--wh-menu-font-weight, var(--wh-font-weight-medium, 500));
    color: var(--wh-menu-color, var(--wh-color-text-primary, #40362E));
    line-height: 1.4;
    white-space: nowrap;
    border-bottom: 2px solid transparent;
    transition: color 0.2s, border-color 0.2s;
}

.wh-mainmenu__link:focus-visible {
    color: var(--wh-menu-hover-color, var(--wh-color-accent, #000));
    border-bottom-color: var(--wh-menu-hover-border, var(--wh-color-primary, #40362E));
}
@media (hover: hover) {
.wh-mainmenu__link:hover {
    color: var(--wh-menu-hover-color, var(--wh-color-accent, #000));
    border-bottom-color: var(--wh-menu-hover-border, var(--wh-color-primary, #40362E));
}
}

.wh-mainmenu__link--label {
    cursor: default;
}

.wh-mainmenu__item--active > .wh-mainmenu__link {
    color: var(--wh-menu-active-color, var(--wh-color-accent, #000));
    border-bottom-color: var(--wh-menu-active-border, var(--wh-color-primary, #40362E));
}

/* Ikona pozycji menu (plik wskazany przez admina w polu `icon_path`).
   ⚠️ Do 1.11.3 ta klasa nie miala ZADNEJ reguly — obrazek renderowal sie
   w rozmiarze wlasnym pliku. Skutki: uklad "skakal" po zaladowaniu ikon
   (CLS, audyt DM-2239 3.6), a wgranie wiekszego pliku rozpychalo cale menu.
   Wymiaru nie da sie policzyc w PHP: `icon_path` bywa adresem zewnetrznym,
   wiec ramy stawia CSS. Branza moze je przestawic tokenem. */
.wh-mainmenu__icon {
    flex-shrink: 0;
    width: var(--wh-menu-icon-size, 20px);
    height: var(--wh-menu-icon-size, 20px);
    object-fit: contain;
}

.wh-mainmenu__chevron {
    flex-shrink: 0;
    width: 10px;
    height: 10px;
    transition: transform 0.25s ease;
    opacity: 0.6;
}

/* DM-1660: chevron poza przeplywem (absolute w prawym paddingu linka) ->
   nie zjada szerokosci poziomego menu, zapobiega przepelnieniu poza ekran.
   Scope: tylko desktopowy link poziomu 1 (mobile uzywa .wh-mainmenu__drawer-drill). */
.wh-mainmenu__item--has-children > .wh-mainmenu__link {
    position: relative;
    padding-right: 18px;
}

.wh-mainmenu__item--has-children > .wh-mainmenu__link .wh-mainmenu__chevron {
    position: absolute;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
    margin: 0;
}

/* Dropdown – full-width (Hummingbird style) */
.wh-mainmenu__dropdown {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 1000;
    background: var(--wh-menu-dropdown-bg, var(--wh-color-white, #fff));
    border-top: 1px solid var(--wh-menu-dropdown-border, var(--wh-color-border-subtle, #e8e4df));
    border-bottom: 1px solid var(--wh-menu-dropdown-border, var(--wh-color-border-subtle, #e8e4df));
    /* Punkt zaczepienia dla branzy. Fallback zostaje wartoscia z designu, bo
       skala cieni palety nie ma odpowiednika: --wh-shadow-md to 0 4px 6px,
       --wh-shadow-lg to 0 10px 15px — oba WEZSZE i mocniejsze niz ten miekki
       0 6px 20px przy alfie 0.06. Podstawienie ktoregokolwiek zmienialoby wyglad,
       wiec branza, ktora chce ujednolicic, robi to swiadomie przez ten token. */
    box-shadow: var(--wh-menu-dropdown-shadow, 0 6px 20px rgba(0, 0, 0, 0.06));
    opacity: 0;
    visibility: hidden;
    transform: translateY(4px);
    transition: opacity 0.2s, visibility 0.2s, transform 0.2s;
    pointer-events: none;
    /* Performance: skip layout/paint while hidden */
    contain: layout style;
    content-visibility: auto;
}

/* Open state.

   `:focus-within` to droga klawiatury, nie ozdobnik. Panel jest domyslnie
   `visibility: hidden`, a element niewidoczny NIE przyjmuje fokusu — dopoki
   wiec nie otworzy go co najmniej fokus na pozycji paska, Tab przeskakuje
   cale podmenu i nie ma jak do niego wejsc. Klasa `--open` (JS) robi to samo
   bogaciej; ten selektor zostaje jako droga awaryjna, gdy JS nie wstanie. */
.wh-mainmenu__item--open > .wh-mainmenu__dropdown,
.wh-mainmenu__item--has-children:focus-within > .wh-mainmenu__dropdown {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
    pointer-events: auto;
    content-visibility: visible;
}

.wh-mainmenu__item--open > .wh-mainmenu__link .wh-mainmenu__chevron,
.wh-mainmenu__item--has-children:focus-within > .wh-mainmenu__link .wh-mainmenu__chevron {
    transform: translateY(-50%) rotate(180deg);
}

/* Submenu row – 2-column layout */
.wh-mainmenu__submenu-row {
    display: flex;
    gap: 0;
    min-height: 100px;
}

/* Left column – menu links (vertical) */
.wh-mainmenu__submenu-left {
    display: flex;
    flex-direction: column;
    flex: 0 0 25%;
    max-width: 25%;
    padding: 12px 0;
    border-right: 1px solid var(--wh-menu-dropdown-border, var(--wh-color-border-subtle, #e8e4df));
}

.wh-mainmenu__submenu-link {
    display: block;
    padding: 9px 24px;
    font-size: var(--wh-menu-font-size, 12px);
    font-weight: var(--wh-menu-font-weight, var(--wh-font-weight-medium, 500));
    color: var(--wh-menu-color, var(--wh-color-text-primary, #40362E));
    white-space: nowrap;
    text-decoration: none;
    border-left: 3px solid transparent;
    transition: color 0.15s, background-color 0.15s, border-color 0.15s;
}

.wh-mainmenu__submenu-link:focus-visible {
    background-color: var(--wh-menu-dropdown-hover-bg, var(--wh-color-bg-subtle, #f7f5f3));
    color: var(--wh-menu-hover-color, var(--wh-color-accent, #000));
    border-left-color: var(--wh-menu-hover-border, var(--wh-color-primary, #40362E));
}
@media (hover: hover) {
.wh-mainmenu__submenu-link:hover {
    background-color: var(--wh-menu-dropdown-hover-bg, var(--wh-color-bg-subtle, #f7f5f3));
    color: var(--wh-menu-hover-color, var(--wh-color-accent, #000));
    border-left-color: var(--wh-menu-hover-border, var(--wh-color-primary, #40362E));
}
}

.wh-mainmenu__submenu-link--active {
    color: var(--wh-menu-active-color, var(--wh-color-accent, #000));
    font-weight: var(--wh-font-weight-semibold, 600);
    background-color: var(--wh-menu-dropdown-active-bg, var(--wh-color-bg-subtle, #f7f5f3));
    border-left-color: var(--wh-menu-active-border, var(--wh-color-primary, #40362E));
}

.wh-mainmenu__submenu-link--label {
    cursor: default;
    color: var(--wh-menu-label-color, var(--wh-color-text-muted, #888));
}

/* ===== Poziom 3+ — kolumny kaskadowe (od 1.8.0) =====
   Kazdy glebszy poziom to kolumna wysuwana W PRAWO od rodzica, jak w botland.
   Poziom 2 renderuje sie bez zmian, wiec sklepy z menu 2-poziomowym
   (domyslne WH_MENU_MAX_DEPTH = 2) nie widza tu zadnej roznicy. */

/* ⚠️ Kontekstem pozycjonowania kolumn jest KOLUMNA PIERWSZA, nie pojedyncza
   pozycja. Gdy `position: relative` siedzialo na `.wh-mainmenu__branch`,
   kolumna wyskakiwala na wysokosci najechanej pozycji i nachodzila na
   produkty — zamiast ustawic sie rowno od gory panelu, jak w botland. */
.wh-mainmenu__branch {
    position: static;
}

.wh-mainmenu__submenu-left {
    position: relative;
}

.wh-mainmenu__col {
    position: absolute;
    /* top:0 wzgledem kolumny nadrzednej = rowno z gora panelu.
       Poziom 4 liczy sie wzgledem kolumny poziomu 3 (tez absolutnej,
       tez przy top:0), wiec caly rzad kolumn stoi w jednej linii. */
    top: 0;
    left: 100%;
    z-index: 2;
    display: none;
    width: 260px;
    /* Kolumna siega co najmniej do dolu panelu — inaczej krotka lista
       podkategorii dawalaby "wystajacy" prostokat w polowie wysokosci. */
    min-height: 100%;
    padding: var(--wh-space-12, 12px) 0;
    background-color: var(--wh-menu-dropdown-bg, var(--wh-color-bg-base, #fff));
    border-left: 1px solid var(--wh-menu-dropdown-border, var(--wh-color-border-subtle, #e8e4df));
}

/* Otwarcie: hover, fokus klawiatury LUB klasa --open nadawana przez JS.
   ⚠️ Klasa nie jest ozdobnikiem — bez niej kaskada ma ZEROWA tolerancje:
   kafelki produktow leza po prawej stronie kolumny, wiec droga myszy do nich
   prowadzi ukosem przez sasiednie pozycje, a kazde takie musniecie zamykalo
   wszystko natychmiast (zgloszenie 2026-07-24: „nie moge najechac na
   produkty"). JS trzyma --open jeszcze chwile po zjechaniu — jak botland.
   `:hover` zostaje jako zabezpieczenie, gdyby JS sie nie zaladowal. */
.wh-mainmenu__branch:focus-within > .wh-mainmenu__col,
.wh-mainmenu__branch--open > .wh-mainmenu__col {
    display: block;
}
@media (hover: hover) {
.wh-mainmenu__branch:hover > .wh-mainmenu__col {
    display: block;
}
}

/* Wejscie w podkategorie ZASTEPUJE zawartosc po prawej, a nie dokłada sie do
   niej. Bez tego kafelki poziomu 1 i poziomu 2 rysowaly sie jednoczesnie
   jeden na drugim — widoczne na zrzucie z 2026-07-24.
   `:has()` celuje tylko w sytuacje, gdy najechana pozycja FAKTYCZNIE ma co
   pokazac (kolumne lub produkty); najechanie na pozycje bez niczego zostawia
   produkty poziomu 1 na miejscu, zamiast zostawiac pusty panel. */
.wh-mainmenu__submenu-left:has(.wh-mainmenu__branch:focus-within > .wh-mainmenu__col) ~ .wh-mainmenu__submenu-right,
.wh-mainmenu__submenu-left:has(.wh-mainmenu__branch--open > .wh-mainmenu__col) ~ .wh-mainmenu__submenu-right,
.wh-mainmenu__submenu-left:has(.wh-mainmenu__branch:focus-within > .wh-mainmenu__pro-only) ~ .wh-mainmenu__submenu-right,
.wh-mainmenu__submenu-left:has(.wh-mainmenu__branch--open > .wh-mainmenu__pro-only) ~ .wh-mainmenu__submenu-right {
    visibility: hidden;
}
@media (hover: hover) {
.wh-mainmenu__submenu-left:has(.wh-mainmenu__branch:hover > .wh-mainmenu__col) ~ .wh-mainmenu__submenu-right,
.wh-mainmenu__submenu-left:has(.wh-mainmenu__branch:hover > .wh-mainmenu__pro-only) ~ .wh-mainmenu__submenu-right {
    visibility: hidden;
}
}

/* TA SAMA zasada o poziom nizej. Produkty kolumny i produkty jej dziecka
   siadaja w tym samym miejscu (oba przy prawej krawedzi tej kolumny), a przy
   wejsciu w dziecko rodzic NADAL jest najechany — bez tego nazwy i ceny
   dwoch poziomow rysowaly sie jedna na drugiej (zlapane na zrzucie
   z poziomu C). Chowamy produkty rodzica, gdy dziecko ma co pokazac. */
.wh-mainmenu__col:has(> .wh-mainmenu__branch:focus-within > .wh-mainmenu__col) > .wh-mmpro,
.wh-mainmenu__col:has(> .wh-mainmenu__branch:focus-within > .wh-mainmenu__pro-only) > .wh-mmpro,
.wh-mainmenu__col:has(> .wh-mainmenu__branch--open > .wh-mainmenu__col) > .wh-mmpro,
.wh-mainmenu__col:has(> .wh-mainmenu__branch--open > .wh-mainmenu__pro-only) > .wh-mmpro {
    visibility: hidden;
}
@media (hover: hover) {
.wh-mainmenu__col:has(> .wh-mainmenu__branch:hover > .wh-mainmenu__col) > .wh-mmpro,
.wh-mainmenu__col:has(> .wh-mainmenu__branch:hover > .wh-mainmenu__pro-only) > .wh-mmpro {
    visibility: hidden;
}
}

/* Pozycja bez podkategorii, ale z produktami — kafelki zajmuja cala wolna
   przestrzen panelu, zaczynajac dokladnie tam, gdzie zaczelaby sie kolumna.
   Dzieki temu uklad jest jednakowy od lewej do prawej niezaleznie od tego,
   czy pozycja ma podkategorie, czy same produkty. */
.wh-mainmenu__pro-only {
    position: absolute;
    top: 0;
    left: 100%;
    /* ⚠️ Szerokosc z TRESCI, nie procentowa — i to jest istotne.
       Kontekstem pozycjonowania jest raz kolumna pierwsza (25% panelu), a raz
       kolumna glebszego poziomu (260px), wiec ta sama wartosc procentowa znaczy
       co innego na kazdym poziomie. `width: 300%` dzialalo na poziomie 2, ale
       na poziomie 4 dawalo 777px przy 407px wolnego miejsca — kontener
       wychodzil 370px POZA panel (zmierzone w Chrome).
       Wczesniej bylo tu `right: 0`, ktore z kolei dawalo ZEROWA szerokosc
       i lamalo kafelki pionowo. `max-content` rozwiazuje oba przypadki.

       Tla ani obramowania NIE dajemy: pod spodem jest biale tlo panelu, wiec
       kontener konczacy sie na tresci nie zostawia widocznej krawedzi. */
    width: max-content;
    display: none;
    padding: var(--wh-space-12, 12px) var(--wh-space-md, 16px);
}

.wh-mainmenu__branch:focus-within > .wh-mainmenu__pro-only,
.wh-mainmenu__branch--open > .wh-mainmenu__pro-only {
    display: block;
}
@media (hover: hover) {
.wh-mainmenu__branch:hover > .wh-mainmenu__pro-only {
    display: block;
}
}

/* Strzalka w prawo sygnalizuje, ze pozycja ma glebszy poziom. */
.wh-mainmenu__chevron--right {
    margin-left: auto;
    flex: 0 0 auto;
}

.wh-mainmenu__submenu-link--has-children {
    display: flex;
    align-items: center;
    gap: var(--wh-space-sm, 8px);
}

/* Ostatnia kolumna, ktora nie miesci sie w oknie, wychodzi w LEWO.
   Klase nadaje JS po zmierzeniu pozycji — bez tego menu przy prawej
   krawedzi ekranu powodowaloby poziomy scroll. */
.wh-mainmenu__col--flip {
    left: auto;
    right: 100%;
}

/* Right column – reserved for future content */
.wh-mainmenu__submenu-right {
    flex: 1;
    min-width: 0;
    padding: 12px 24px;
}

/* ═══════════════════════════════════════════
   Mobile: hamburger
   ═══════════════════════════════════════════ */
.wh-mainmenu__mobile {
    display: block;
}

.wh-mainmenu__hamburger {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    gap: 5px;
    width: 40px;
    height: 40px;
    padding: 8px;
}

.wh-mainmenu__hamburger-line {
    display: block;
    width: 22px;
    height: 2px;
    background-color: currentColor;
    border-radius: 1px;
    transition: transform 0.3s, opacity 0.3s;
}

/* Hamburger → X animation */
.wh-mainmenu__hamburger[aria-expanded="true"] .wh-mainmenu__hamburger-line:nth-child(1) {
    transform: translateY(7px) rotate(45deg);
}
.wh-mainmenu__hamburger[aria-expanded="true"] .wh-mainmenu__hamburger-line:nth-child(2) {
    opacity: 0;
}
.wh-mainmenu__hamburger[aria-expanded="true"] .wh-mainmenu__hamburger-line:nth-child(3) {
    transform: translateY(-7px) rotate(-45deg);
}

/* ═══════════════════════════════════════════
   Mobile: overlay
   ═══════════════════════════════════════════ */
.wh-mainmenu__overlay {
    position: fixed;
    inset: 0;
    z-index: 9998;
    /* Przyciemnienie tla pod menu mobilnym. Zostaje lokalne — paleta trzyma kolory
       BEZ kanalu alfa, wiec nie ma czego tu podstawic. Branza z jasnym motywem
       moze chciec slabszego przyciemnienia, stad token. */
    background: var(--wh-menu-overlay-bg, rgba(0, 0, 0, 0.45));
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s, visibility 0.3s;
}

.wh-mainmenu__overlay--visible {
    opacity: 1;
    visibility: visible;
}

/* ═══════════════════════════════════════════
   Mobile: drawer
   ═══════════════════════════════════════════ */
.wh-mainmenu__drawer {
    position: fixed;
    top: 0;
    z-index: 9999;
    width: 300px;
    max-width: 85vw;
    /* Pelna wysokosc ekranu. Drawer jest teleportowany do <body> w front.js — inaczej
       #header (will-change/transform sticky) tworzy containing block dla `fixed`
       i 100% liczy sie od headera, nie viewportu. dvh = mobile bez paska adresu. */
    height: 100%;
    height: 100dvh;
    background: var(--wh-menu-drawer-bg, var(--wh-color-white, #fff));
    overflow-y: auto;
    /* ⚠️ overflow-x MUSI byc jawny. Same `overflow-y: auto` daje w osi X
       wartosc `auto` (spec: visible + auto -> auto), a panele glebszych
       poziomow czekaja poza ekranem na `translateX(100%)`. Transform, inaczej
       niz przesuniecie pozycja, WLICZA sie do obszaru przewijania rodzica —
       wiec drawer miewal scrollWidth 600 px przy szerokosci 300 px i pokazywal
       poziomy pasek przewijania (zgloszenie 2026-07-24). */
    overflow-x: hidden;
    -webkit-overflow-scrolling: touch;
    transition: transform 0.3s ease;
}

.wh-mainmenu__drawer--left {
    left: 0;
    transform: translateX(-100%);
}

.wh-mainmenu__drawer--right {
    right: 0;
    transform: translateX(100%);
}

.wh-mainmenu__drawer--open {
    transform: translateX(0);
}

/* Drawer header */
.wh-mainmenu__drawer-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px;
    border-bottom: 1px solid var(--wh-menu-drawer-border, var(--wh-color-border-subtle, #e5e5e5));
}

.wh-mainmenu__drawer-title {
    font-size: var(--wh-font-size-base, 16px);
    font-weight: var(--wh-font-weight-semibold, 600);
}

.wh-mainmenu__drawer-close {
    display: flex;
    align-items: center;
    justify-content: center;
    /* RESET UA: <button> ma domyslnie `border: 2px outset`, szare tlo (ButtonFace),
       czarny tekst i wlasny padding — bez resetu przycisk wyglada jak systemowy
       klocek zamiast czystej ikony. */
    padding: 0;
    border: 0;
    background: transparent;
    -webkit-appearance: none;
    appearance: none;
    width: 44px;   /* a11y: min. cel dotykowy 44x44 */
    height: 44px;
    margin-right: -8px;   /* optyczne wyrownanie ikony do krawedzi drawera */
    border-radius: var(--wh-radius-pill, 50%);
    color: var(--wh-color-text-primary, #40362e);
    cursor: pointer;
    transition: background-color var(--wh-duration-fast, 0.2s) ease,
                color var(--wh-duration-fast, 0.2s) ease;
}

@media (hover: hover) {
.wh-mainmenu__drawer-close:hover {
    background-color: var(--wh-menu-drawer-close-hover-bg, var(--wh-color-bg-subtle, #f7f7f7));
    color: var(--wh-color-accent, #9e8264);
}
}

.wh-mainmenu__drawer-close:focus-visible {
    outline: 2px solid var(--wh-color-accent, #9e8264);
    outline-offset: 2px;
}

/* Drawer list */
.wh-mainmenu__drawer-list {
    padding: 8px 0;
}

.wh-mainmenu__drawer-item {
    border-bottom: 1px solid var(--wh-menu-drawer-border, var(--wh-color-border-subtle, #e5e5e5));
}

.wh-mainmenu__drawer-row {
    display: flex;
    align-items: center;
}

.wh-mainmenu__drawer-link {
    display: block;
    flex: 1;
    padding: 14px 20px;
    font-size: var(--wh-font-size-body, 14px);
    font-weight: var(--wh-font-weight-medium, 500);
    transition: color 0.15s, background-color 0.15s;
}

.wh-mainmenu__drawer-link:focus-visible {
    color: var(--wh-menu-hover-color, var(--wh-color-accent, #000));
}
@media (hover: hover) {
.wh-mainmenu__drawer-link:hover {
    color: var(--wh-menu-hover-color, var(--wh-color-accent, #000));
}
}

.wh-mainmenu__drawer-link--label {
    cursor: default;
    color: var(--wh-menu-label-color, var(--wh-color-text-muted, #888));
}

/* Etykieta bez dzieci nie jest interaktywna — dotyk nie moze jej zielenic jak linku
   (sugerowalo klikalnosc, ktorej nie ma). */
.wh-mainmenu__drawer-link--label:focus-visible {
    color: var(--wh-menu-label-color, var(--wh-color-text-muted, #888));
}
@media (hover: hover) {
.wh-mainmenu__drawer-link--label:hover {
    color: var(--wh-menu-label-color, var(--wh-color-text-muted, #888));
}
}

.wh-mainmenu__drawer-link--sub {
    padding-left: 36px;
    font-size: var(--wh-font-size-body, 14px);
    font-weight: var(--wh-font-weight-regular, 400);
}

.wh-mainmenu__drawer-item--active > .wh-mainmenu__drawer-row > .wh-mainmenu__drawer-link,
.wh-mainmenu__drawer-subitem--active > .wh-mainmenu__drawer-link {
    color: var(--wh-menu-active-color, var(--wh-color-accent, #000));
    font-weight: var(--wh-font-weight-semibold, 600);
}

/* Accordion toggle */
/* ===== MOBILE: panele drill-down (od 1.8.0) =====
   Poziom 1 lezy w normalnym przeplywie. Glebsze panele czekaja poza ekranem
   po prawej i wsuwaja sie nad rodzica. Uzywamy transform (kompozytowane przez
   GPU) zamiast animowania left/width. */

.wh-mainmenu__panel--level1 {
    position: static;
}

.wh-mainmenu__panel:not(.wh-mainmenu__panel--level1) {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    /* To samo co w .wh-mainmenu__drawer: panel-dziecko czeka na
       translateX(100%) i bez tego dokladalby rodzicowi poziomy pasek. */
    overflow-x: hidden;
    background-color: var(--wh-menu-mobile-bg, var(--wh-color-bg-base, #fff));
    transform: translateX(100%);
    visibility: hidden;
    transition: transform 0.25s ease, visibility 0.25s;
}

/* ⚠️ Dwie klasy w selektorze SA POTRZEBNE. Regula ukrywajaca wyzej ma
   `.wh-mainmenu__panel:not(.wh-mainmenu__panel--level1)` = specyficznosc (0,2,0).
   Samo `.wh-mainmenu__panel--open` to (0,1,0), wiec PRZEGRYWALO — panel dostawal
   klase, ale zostawal `visibility: hidden`. Zlapane testem computed style. */
.wh-mainmenu__panel.wh-mainmenu__panel--open {
    transform: translateX(0);
    visibility: visible;
}

/* Uzytkownik z prefers-reduced-motion dostaje przelaczenie bez animacji. */
@media (prefers-reduced-motion: reduce) {
    .wh-mainmenu__panel:not(.wh-mainmenu__panel--level1) {
        transition: none;
    }
}

.wh-mainmenu__panel-head {
    display: flex;
    align-items: center;
    gap: var(--wh-space-12, 12px);
    padding: var(--wh-space-12, 12px) var(--wh-space-md, 16px);
    border-bottom: 1px solid var(--wh-menu-dropdown-border, var(--wh-color-border-subtle, #e8e4df));
}

.wh-mainmenu__panel-back {
    display: flex;
    align-items: center;
    justify-content: center;
    /* 44x44 = komfortowy cel dotykowy (WCAG 2.5.8 wymaga min. 24x24) */
    width: 44px;
    height: 44px;
    margin-left: -10px;
    color: inherit;
    background: none;
    border: 0;
    cursor: pointer;
}

.wh-mainmenu__panel-title {
    /* Ten sam stopien co pozycje listy — naglowek wyroznia grubosc, nie rozmiar. */
    font-size: var(--wh-font-size-body, 14px);
    font-weight: var(--wh-font-weight-semibold, 600);
}

.wh-mainmenu__panel-all {
    display: block;
    /* Wciecie jak w pozycjach listy, zeby lewa krawedz tekstu sie nie lamala. */
    padding: 14px 20px;
    font-size: var(--wh-font-size-body, 14px);
    font-weight: var(--wh-font-weight-semibold, 600);
    color: var(--wh-menu-color, var(--wh-color-text-primary, #40362E));
    text-decoration: none;
    border-bottom: 1px solid var(--wh-menu-dropdown-border, var(--wh-color-border-subtle, #e8e4df));
}

/* Przycisk rozwijajacy poziom wyglada jak link, ale jest <button> —
   semantyka: otwiera panel, nie nawiguje.
   ⚠️ Selektor DWUKLASOWY jest konieczny: reset `.wh-mainmenu button` ma
   specyficznosc (0,1,1) i BIJE `.wh-mainmenu__drawer-link` (0,1,0), przez co
   `font: inherit; padding: 0` kasowaly rozmiar, grubosc i wciecie pozycji.
   Efekt byl widoczny: podkategorie 16px/400 bez wciecia obok pozycji 14px/500. */
.wh-mainmenu__drawer-link.wh-mainmenu__drawer-drill {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--wh-space-sm, 8px);
    width: 100%;
    /* 1:1 z .wh-mainmenu__drawer-link — pozycje z podmenu i bez maja wygladac
       tak samo, niezaleznie od poziomu zagniezdzenia. */
    padding: 14px 20px;
    font-family: inherit;
    font-size: var(--wh-font-size-body, 14px);
    font-weight: var(--wh-font-weight-medium, 500);
    line-height: inherit;
    text-align: left;
    background: none;
    border: 0;
    cursor: pointer;
}







.wh-mainmenu__drawer-subitem {
    border-top: 1px solid var(--wh-menu-drawer-border, var(--wh-color-border-subtle, #e5e5e5));
}

/* ═══════════════════════════════════════════
   Body scroll lock
   ═══════════════════════════════════════════ */
body.wh-mainmenu-noscroll {
    overflow: hidden;
    position: fixed;
    width: 100%;
}

/* ═══════════════════════════════════════════
   Responsive breakpoint
   ═══════════════════════════════════════════ */
@media (min-width: 769px) {
    .wh-mainmenu__desktop {
        display: block;
    }

    .wh-mainmenu__mobile {
        display: none;
    }
}

@media (max-width: 768px) {
    .wh-mainmenu__desktop {
        display: none;
    }

    .wh-mainmenu__mobile {
        display: block;
    }
}

/* ═══════════════════════════════════════════════════════════════════════════
   UKŁAD MEGA (1.18.0) — `.wh-mainmenu--mega`

   ⛔ WSZYSTKO niżej jest zawężone do `.wh-mainmenu--mega`, które szablon dokleja
   do <nav> TYLKO przy ustawieniu „Układ rozwijanego menu = mega” (domyślnie
   `list`). Sklep bez tego ustawienia — także matyja z własnym override szablonu
   i własnym CSS `mm-*` — nie dostaje z tego bloku ani jednej reguły.

   Panel: kolumny tekstowe z lewej (pozycja z podpozycjami = TYTUŁ kolumny),
   w wolnym miejscu po prawej polecane produkty addonu wh_mainmenu_pro (karty,
   patrz jego front.css) albo kafelki ze zdjęciem (`mm-kafelek`).
   Miejsce przydziela flex: kolumny NIE kurczą się, resztę zabiera prawy slot,
   a to on decyduje (zapytania kontenera w CSS addonu), ile kart zostaje.

   Szerokość panelu zależy od motywu (kotwica = `.wh-mainmenu__desktop`, w motywie
   można ją przenieść na cały header — wzór: `_header.css` branży supplements).
   ═══ */
.wh-mainmenu--mega {
    --wh-mm-gap-col: clamp(var(--wh-space-md, 16px), 3.2vw, var(--wh-space-xl, 64px));
    --wh-mm-gap-row: var(--wh-space-lg, 32px);
    --wh-mm-gap-title: var(--wh-space-md, 16px);
    --wh-mm-gap-sub: var(--wh-space-lg, 32px);
    --wh-mm-tile-w: 32rem;
    --wh-mm-tile-ratio: 320 / 484;
    --wh-mm-tile-gap: var(--wh-space-md, 16px);
}

.wh-mainmenu--mega .wh-mainmenu__dropdown {
    padding: var(--wh-space-lg, 32px) var(--wh-mm-pad-x, var(--wh-space-lg, 32px));
}

.wh-mainmenu--mega .wh-mainmenu__submenu-row {
    align-items: flex-start;
    gap: var(--wh-mm-gap-col);
    min-height: 0;
}

/* Lewa część: kolumny (+ kafelki). Wygaszamy WĄSKI pasek pionowy listy:
   column, 25 %, border-right, padding. */
.wh-mainmenu--mega .wh-mainmenu__submenu-left {
    position: static;
    flex: 0 0 auto;
    flex-direction: row;
    align-items: flex-start;
    gap: var(--wh-mm-gap-col);
    max-width: none;
    min-width: 0;
    padding: 0;
    border-right: 0;
}

/* Prawy slot = KONTENER zapytań o miejsce. Zabiera resztę panelu i nigdy nie
   zasłoni kolumn tekstowych. */
.wh-mainmenu--mega .wh-mainmenu__submenu-right {
    container: wh-mm-right / inline-size;
    flex: 1 1 0;
    min-width: 0;
    padding: 0;
}

/* Rdzeń chowa prawy slot, gdy najechana pozycja ma kolumnę kaskadową — w układzie
   mega kolumna jest zawsze rozwinięta, więc ta zasada nie może obowiązywać. */
.wh-mainmenu--mega .wh-mainmenu__submenu-left ~ .wh-mainmenu__submenu-right {
    visibility: visible !important;
}

.wh-mainmenu--mega .mm-kolumny {
    display: flex;
    flex: 0 0 auto;
    align-items: flex-start;
    gap: var(--wh-mm-gap-col);
}

.wh-mainmenu--mega .mm-kolumna {
    display: flex;
    flex-direction: column;
    gap: var(--wh-mm-gap-row);
    min-width: 15rem;
}

/* Tytuł kolumny i zwykłe linki */
.wh-mainmenu--mega .wh-mainmenu__submenu-link {
    display: block;
    padding: calc(var(--wh-space-xs, 4px) * 1.5) 0;
    font-size: var(--wh-mm-link-size, var(--wh-font-size-small, 14px));
    font-weight: var(--wh-font-weight-regular, 400);
    white-space: normal;
    border-left: 0;
    background: none;
}

.wh-mainmenu--mega .wh-mainmenu__submenu-link:focus-visible {
    background: none;
    border-left: 0;
    text-decoration: underline;
    text-underline-offset: 0.25em;
}
@media (hover: hover) {
.wh-mainmenu--mega .wh-mainmenu__submenu-link:hover {
    background: none;
    border-left: 0;
    text-decoration: underline;
    text-underline-offset: 0.25em;
}
}

.wh-mainmenu--mega .wh-mainmenu__branch--level2 > .wh-mainmenu__submenu-link--has-children,
.wh-mainmenu--mega .wh-mainmenu__branch--level2 > .wh-mainmenu__submenu-link--label {
    margin-bottom: var(--wh-mm-gap-title);
    padding: 0;
    font-size: var(--wh-mm-title-size, var(--wh-font-size-small, 12px));
    font-weight: var(--wh-font-weight-bold, 700);
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--wh-menu-title-color, var(--wh-color-text-primary, #23272f));
    cursor: default;
}

.wh-mainmenu--mega .wh-mainmenu__branch--level2 > a.wh-mainmenu__submenu-link--has-children {
    cursor: pointer;
}

@media (hover: hover) {
.wh-mainmenu--mega .wh-mainmenu__branch--level2 > .wh-mainmenu__submenu-link--has-children:hover {
    text-decoration: none;
}
}

/* Strzałka „ma dzieci” jest zbędna — cała lista i tak jest widoczna. */
.wh-mainmenu--mega .wh-mainmenu__dropdown .wh-mainmenu__chevron {
    display: none;
}

/* Lista pod tytułem: zwykła, zawsze widoczna (rdzeń robi z niej kolumnę kaskadową). */
.wh-mainmenu--mega .wh-mainmenu__col {
    position: static;
    display: block;
    width: auto;
    min-height: 0;
    padding: 0;
    background: none;
    border: 0;
}

.wh-mainmenu--mega .mm-2kol > .wh-mainmenu__col {
    column-count: 2;
    column-gap: var(--wh-mm-gap-sub);
}

.wh-mainmenu--mega .mm-2kol > .wh-mainmenu__col .wh-mainmenu__branch {
    break-inside: avoid;
}

.wh-mainmenu--mega .mm-bez-tytulu > .wh-mainmenu__submenu-link {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}

/* Kafelki ze zdjęciem (`mm-kafelek`): kurczą się z zachowaniem proporcji,
   jeden kafelek zajmuje miejsce dwóch, poniżej 1280 px znikają. */
.wh-mainmenu--mega .mm-kafelki {
    display: flex;
    flex: 0 1 auto;
    min-width: 0;
    gap: var(--wh-mm-tile-gap);
    margin-left: auto;
}

.wh-mainmenu--mega .mm-kafelek {
    flex: 0 1 var(--wh-mm-tile-w);
    min-width: 0;
}

.wh-mainmenu--mega .mm-kafelek > .wh-mainmenu__submenu-link {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    width: var(--wh-mm-tile-w);
    max-width: 100%;
    margin: 0;
    padding: 0;
    overflow: hidden;
    isolation: isolate;
    aspect-ratio: var(--wh-mm-tile-ratio);
    font-size: 0;
    border-radius: var(--wh-radius-md, 8px);
}

.wh-mainmenu--mega .mm-kafelek .wh-mainmenu__thumb {
    position: absolute;
    inset: 0;
    z-index: -1;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.4s ease;
}

@media (hover: hover) {
.wh-mainmenu--mega .mm-kafelek > .wh-mainmenu__submenu-link:hover {
    text-decoration: none;
}
}

@media (hover: hover) {
.wh-mainmenu--mega .mm-kafelek > .wh-mainmenu__submenu-link:hover .wh-mainmenu__thumb {
    transform: scale(1.04);
}
}

.wh-mainmenu--mega .mm-kafelki:not(:has(.mm-kafelek ~ .mm-kafelek)) .mm-kafelek {
    flex-basis: calc(2 * var(--wh-mm-tile-w) + var(--wh-mm-tile-gap));
}

.wh-mainmenu--mega .mm-kafelki:not(:has(.mm-kafelek ~ .mm-kafelek)) .mm-kafelek > .wh-mainmenu__submenu-link {
    width: calc(2 * var(--wh-mm-tile-w) + var(--wh-mm-tile-gap));
}

.wh-mainmenu--mega .wh-mainmenu__obrazek {
    display: contents;
}

@media (max-width: 1279.98px) {
    .wh-mainmenu--mega .mm-kafelki {
        display: none;
    }
}
