/* ============================================================================
   AKCO — warstwa stylów poza Vite.

   DLACZEGO TEN PLIK ISTNIEJE:
   W tym środowisku nie ma Node'a, więc Tailwind (`npm run build`) nie może
   przeliczyć nowych klas. Wszystko, co dopisane po 16.09.2026 — mega-menu,
   menu mobilne, strona produktów, panel — stoi na tym pliku, ładowanym
   bezpośrednio przez <link> w layoucie, obok builda Vite.

   Kolejność ma znaczenie: ten plik wchodzi PO CSS-ie z Vite, więc może
   nadpisywać Tailwinda. Klasy mają własne prefiksy (akco-, nav-, prod-,
   mnav-, adm-), żeby nie kolidowały z utility-klasami.

   Uruchomienie `npm run build` niczego tu nie ruszy — ten katalog jest
   poza zasięgiem Vite.
   ========================================================================= */

:root {
    /* Grafit */
    --ink-950: #050506;
    --ink-900: #0a0a0c;
    --ink-850: #0f0f12;
    --ink-800: #141417;
    --ink-750: #18181c;
    --ink-700: #1c1c21;
    --ink-600: #26262d;
    --ink-500: #34343d;

    /* Złoto */
    --gold-100: #f8efd0;
    --gold-200: #f1dfa2;
    --gold-300: #e6c96e;
    --gold-400: #d9b445;
    --gold-500: #c9a227;
    --gold-600: #a8831c;
    --gold-700: #7f6216;

    /*
     * Tekst — wartości ustawione pod WCAG 4.5:1 na najciemniejszym tle
     * (ink-950 #050506). Policzone, nie zgadnięte:
     *   100% -> 20.4:1   72% -> 10.2:1   58% ->  6.8:1   47% -> 4.6:1
     * Biel poniżej 46% krycia NIE przechodzi progu 4.5:1 na tym tle,
     * dlatego dawne --fg-30 (2.53:1) podniesione do poziomu czytelnego.
     * Hierarchię trzymamy rozmiarem i wagą, nie samą przezroczystością.
     */
    --fg: #ffffff;
    --fg-70: rgba(255, 255, 255, 0.72);
    --fg-55: rgba(255, 255, 255, 0.58);
    --fg-45: rgba(255, 255, 255, 0.5);
    --fg-30: rgba(255, 255, 255, 0.47);

    /* WYŁĄCZNIE dekoracje (kreski, separatory, ikony tła) — nigdy tekst. */
    --fg-faint: rgba(255, 255, 255, 0.26);

    /* Linie */
    --line: rgba(255, 255, 255, 0.08);
    --line-strong: rgba(255, 255, 255, 0.14);
    --line-gold: rgba(201, 162, 39, 0.28);

    /* Promienie */
    --r-sm: 0.625rem;
    --r-md: 0.875rem;
    --r-lg: 1.25rem;
    --r-xl: 1.75rem;
    --r-full: 999px;

    /* Cienie */
    --sh-panel: 0 24px 70px -28px rgba(0, 0, 0, 0.85);
    --sh-gold: 0 18px 52px -20px rgba(201, 162, 39, 0.42);

    /* Ruch */
    --ease: cubic-bezier(0.16, 1, 0.3, 1);
    --t-fast: 0.18s;
    --t-mid: 0.32s;
    --t-slow: 0.55s;

    /* Układ */
    --shell: 80rem;
    --header-h: 4.75rem;
}

*,
*::before,
*::after {
    box-sizing: border-box;
}

/* ----------------------------------------------------------------------------
   MINIMALNY RESET ELEMENTÓW FORMULARZA

   Konieczny, bo panel i strona logowania ładują WYŁĄCZNIE ten plik — nie ma
   tam preflightu Tailwinda, który normalnie zeruje wygląd kontrolek.
   Bez tego <button> dostaje systemowe jasne tło (buttonface) i np. przycisk
   „Wyloguj" był białym prostokątem z niewidocznym tekstem, aż do najechania.
   ------------------------------------------------------------------------- */

button,
input,
select,
textarea {
    font: inherit;
    color: inherit;
    letter-spacing: inherit;
}

button {
    background-color: transparent;
    border: 0;
    margin: 0;
    padding: 0;
    cursor: pointer;
    /* iOS/Safari dorzucają własne zaokrąglenia i gradienty */
    -webkit-appearance: none;
    appearance: none;
}

button:disabled {
    cursor: not-allowed;
}

/* ============================================================================
   1. LOGO
   ========================================================================= */

.akco-logo {
    display: inline-flex;
    align-items: center;
    text-decoration: none;
    color: var(--fg);
    line-height: 1;
}

.akco-logo__mark {
    display: block;
    height: 1.75rem;
    width: auto;
    color: currentColor;
    transition: transform var(--t-slow) var(--ease), filter var(--t-mid) var(--ease);
    transform-origin: left center;
}

.akco-logo:hover .akco-logo__mark {
    transform: scale(1.03);
    filter: drop-shadow(0 0 14px rgba(230, 201, 110, 0.35));
}

/* Wariant na jasnym tle (panel) */
.akco-logo--dark {
    color: var(--ink-900);
}

/* ============================================================================
   2. PASEK POSTĘPU SCROLLA  (smaczek)
   ========================================================================= */

.scroll-progress {
    position: fixed;
    inset: 0 auto auto 0;
    z-index: 200;
    height: 2px;
    width: 100%;
    transform: scaleX(var(--progress, 0));
    transform-origin: left center;
    background: linear-gradient(90deg, var(--gold-600), var(--gold-300), var(--gold-500));
    pointer-events: none;
    will-change: transform;
}

/* ============================================================================
   3. NAGŁÓWEK + MEGA-MENU
   ========================================================================= */

.site-header {
    position: fixed;
    inset: 0 0 auto 0;
    z-index: 90;
    transition: background var(--t-mid) var(--ease), border-color var(--t-mid) var(--ease),
        box-shadow var(--t-mid) var(--ease);
    border-bottom: 1px solid transparent;
}

.site-header[data-scrolled] {
    background: rgba(10, 10, 12, 0.88);
    backdrop-filter: blur(18px) saturate(140%);
    border-bottom-color: var(--line);
    box-shadow: var(--sh-panel);
}

/* Górna belka informacyjna — chowa się po przewinięciu */
.site-header__strip {
    overflow: hidden;
    max-height: 2.75rem;
    border-bottom: 1px solid rgba(255, 255, 255, 0.05);
    background: rgba(10, 10, 12, 0.6);
    transition: max-height var(--t-mid) var(--ease), opacity var(--t-mid) var(--ease);
    font-size: 0.75rem;
    color: var(--fg-45);
}

.site-header[data-scrolled] .site-header__strip {
    max-height: 0;
    opacity: 0;
}

.site-header__strip-inner,
.site-header__bar {
    max-width: var(--shell);
    margin-inline: auto;
    padding-inline: 1.5rem;
    display: flex;
    align-items: center;
    gap: 1.5rem;
}

.site-header__strip-inner {
    justify-content: space-between;
    padding-block: 0.5rem;
}

.site-header__bar {
    justify-content: space-between;
    padding-block: 0.9rem;
}

.site-header__strip a {
    color: inherit;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    transition: color var(--t-fast) var(--ease);
}

.site-header__strip a:hover {
    color: var(--gold-300);
}

.site-header__strip-contact {
    display: flex;
    align-items: center;
    gap: 1.5rem;
}

/* --- Nawigacja desktopowa --- */
.nav {
    display: none;
    align-items: center;
    gap: 0.15rem;
}

.nav__link {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    padding: 0.55rem 0.9rem;
    border-radius: var(--r-full);
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--fg-55);
    text-decoration: none;
    transition: color var(--t-fast) var(--ease);
    background: none;
    border: 0;
    cursor: pointer;
    font-family: inherit;
}

.nav__link:hover,
.nav__link[data-active] {
    color: var(--fg);
}

.nav__link[data-active] {
    color: var(--gold-300);
}

/* Podkreślenie wjeżdżające od środka */
.nav__link::after {
    content: '';
    position: absolute;
    left: 0.9rem;
    right: 0.9rem;
    bottom: 0.15rem;
    height: 1px;
    background: linear-gradient(90deg, transparent, var(--gold-400), transparent);
    transform: scaleX(0);
    transition: transform var(--t-mid) var(--ease);
}

.nav__link:hover::after,
.nav__link[data-active]::after,
.nav__item[data-open='true'] .nav__link::after {
    transform: scaleX(1);
}

.nav__caret {
    width: 0.75rem;
    height: 0.75rem;
    transition: transform var(--t-mid) var(--ease);
}

.nav__item[data-open='true'] .nav__caret {
    transform: rotate(180deg);
}

/* --- Mega-menu: rozwijane po najechaniu --- */
.nav__item {
    position: relative;
}

.nav__mega {
    position: absolute;
    top: calc(100% + 0.65rem);
    left: 50%;
    z-index: 95;
    width: min(46rem, calc(100vw - 3rem));
    padding: 1.25rem;
    border-radius: var(--r-xl);
    border: 1px solid var(--line-strong);
    background: linear-gradient(160deg, var(--ink-800), var(--ink-900) 55%, var(--ink-950));
    box-shadow: var(--sh-panel);

    /* Stan zamknięty — bez display:none, żeby dało się animować */
    opacity: 0;
    visibility: hidden;
    transform: translate(-50%, -0.6rem) scale(0.985);
    transition: opacity var(--t-mid) var(--ease), transform var(--t-mid) var(--ease),
        visibility var(--t-mid) linear;
}

.nav__item[data-open='true'] .nav__mega {
    opacity: 1;
    visibility: visible;
    transform: translate(-50%, 0) scale(1);
}

/* Dymek-strzałka nad panelem */
.nav__mega::before {
    content: '';
    position: absolute;
    top: -0.35rem;
    left: 50%;
    width: 0.7rem;
    height: 0.7rem;
    transform: translateX(-50%) rotate(45deg);
    background: var(--ink-800);
    border-left: 1px solid var(--line-strong);
    border-top: 1px solid var(--line-strong);
}

/* Mostek na przerwę między pozycją a panelem — żeby hover nie gasł */
.nav__mega::after {
    content: '';
    position: absolute;
    top: -0.75rem;
    left: 0;
    right: 0;
    height: 0.75rem;
}

.nav__mega-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.5rem;
}

@media (min-width: 60rem) {
    .nav__mega-grid {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

.nav__mega-foot {
    margin-top: 1rem;
    padding-top: 0.9rem;
    border-top: 1px solid var(--line);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    font-size: 0.8rem;
    color: var(--fg-45);
}

.nav__mega-foot a {
    color: var(--gold-300);
    font-weight: 600;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    transition: gap var(--t-fast) var(--ease);
}

.nav__mega-foot a:hover {
    gap: 0.7rem;
}

/* Kafel kategorii w mega-menu */
.cat-tile {
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    gap: 0.8rem;
    padding: 0.8rem;
    border-radius: var(--r-md);
    border: 1px solid transparent;
    text-decoration: none;
    color: var(--fg);
    background: rgba(255, 255, 255, 0.02);
    transition: border-color var(--t-mid) var(--ease), background var(--t-mid) var(--ease),
        transform var(--t-mid) var(--ease);
}

.cat-tile:hover {
    border-color: var(--line-gold);
    background: rgba(201, 162, 39, 0.07);
    transform: translateY(-2px);
}

/* Przesuwający się błysk po najechaniu (smaczek) */
.cat-tile::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(115deg, transparent 35%, rgba(255, 255, 255, 0.07) 50%, transparent 65%);
    transform: translateX(-120%);
    transition: transform var(--t-slow) var(--ease);
    pointer-events: none;
}

.cat-tile:hover::after {
    transform: translateX(120%);
}

.cat-tile__icon {
    flex-shrink: 0;
    display: grid;
    place-items: center;
    width: 2.4rem;
    height: 2.4rem;
    border-radius: var(--r-sm);
    border: 1px solid var(--line);
    background: rgba(255, 255, 255, 0.04);
    color: var(--gold-300);
    transition: border-color var(--t-mid) var(--ease), background var(--t-mid) var(--ease),
        transform var(--t-mid) var(--ease);
}

.cat-tile__icon svg {
    width: 1.15rem;
    height: 1.15rem;
}

.cat-tile:hover .cat-tile__icon {
    border-color: var(--line-gold);
    background: rgba(201, 162, 39, 0.14);
    transform: scale(1.06) rotate(-4deg);
}

.cat-tile__name {
    display: block;
    font-size: 0.9rem;
    font-weight: 600;
    line-height: 1.2;
}

.cat-tile__count {
    display: block;
    margin-top: 0.15rem;
    font-size: 0.72rem;
    color: var(--fg-45);
}

/* Akcje po prawej w nagłówku */
.site-header__actions {
    display: flex;
    align-items: center;
    gap: 0.75rem;
}

@media (min-width: 64rem) {
    .nav {
        display: flex;
    }
}

/* ============================================================================
   4. HAMBURGER + MENU MOBILNE

   Hamburger i całe menu mobilne istnieją WYŁĄCZNIE poniżej 1024 px —
   czyli na telefonach i tabletach. Na desktopie nawigacja jest w pasku.

   Reguła ukrywająca musi stać PO definicji `display: grid`. Wcześniej
   siedziała nad nią i przy równej specyficzności przegrywała z późniejszym
   `display: grid` — dlatego hamburger pokazywał się także na PC.
   ========================================================================= */

.site-header__burger {
    display: grid;
    place-items: center;
    width: 2.75rem;
    height: 2.75rem;
    border-radius: var(--r-md);
    border: 1px solid var(--line-strong);
    background: rgba(255, 255, 255, 0.05);
    color: var(--fg);
    cursor: pointer;
    transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease);
}

.site-header__burger:hover {
    border-color: var(--line-gold);
    background: rgba(201, 162, 39, 0.1);
}

/* Desktop: żaden hamburger. Panel .mnav ukrywamy niżej — po jego definicji,
   inaczej późniejsze `display: flex` znów by tę regułę przebiło. */
@media (min-width: 64rem) {
    .site-header__burger {
        display: none;
    }
}

/* Trzy kreski morfujące w krzyżyk */
.burger {
    position: relative;
    width: 1.15rem;
    height: 0.75rem;
}

.burger span {
    position: absolute;
    left: 0;
    height: 1.5px;
    width: 100%;
    border-radius: 2px;
    background: currentColor;
    transition: transform var(--t-mid) var(--ease), opacity var(--t-fast) var(--ease),
        width var(--t-mid) var(--ease);
}

.burger span:nth-child(1) {
    top: 0;
}

.burger span:nth-child(2) {
    top: 50%;
    transform: translateY(-50%);
    width: 72%;
}

.burger span:nth-child(3) {
    bottom: 0;
}

[aria-expanded='true'] .burger span:nth-child(1) {
    transform: translateY(0.375rem) rotate(45deg);
}

[aria-expanded='true'] .burger span:nth-child(2) {
    opacity: 0;
    width: 0;
}

[aria-expanded='true'] .burger span:nth-child(3) {
    transform: translateY(-0.375rem) rotate(-45deg);
}

/* --- Panel menu mobilnego --- */
.mnav {
    position: fixed;
    inset: 0;
    z-index: 120;
    display: flex;
    flex-direction: column;

    /* zamknięte */
    visibility: hidden;
    pointer-events: none;
}

.mnav[data-open='true'] {
    visibility: visible;
    pointer-events: auto;
}

.mnav__backdrop {
    position: absolute;
    inset: 0;
    background: rgba(5, 5, 6, 0.72);
    backdrop-filter: blur(6px);
    opacity: 0;
    transition: opacity var(--t-mid) var(--ease);
}

.mnav[data-open='true'] .mnav__backdrop {
    opacity: 1;
}

.mnav__sheet {
    position: relative;
    margin-left: auto;
    display: flex;
    flex-direction: column;
    width: min(23rem, 100%);
    height: 100%;
    background: linear-gradient(190deg, var(--ink-850), var(--ink-950));
    border-left: 1px solid var(--line-strong);
    box-shadow: var(--sh-panel);
    transform: translateX(100%);
    transition: transform var(--t-slow) var(--ease);
    overflow-y: auto;
    overscroll-behavior: contain;
}

.mnav[data-open='true'] .mnav__sheet {
    transform: translateX(0);
}

.mnav__head {
    position: sticky;
    top: 0;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 1.15rem 1.25rem;
    border-bottom: 1px solid var(--line);
    background: rgba(10, 10, 12, 0.9);
    backdrop-filter: blur(12px);
}

.mnav__close {
    display: grid;
    place-items: center;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: var(--r-md);
    border: 1px solid var(--line-strong);
    background: rgba(255, 255, 255, 0.05);
    color: var(--fg);
    cursor: pointer;
    transition: border-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease),
        transform var(--t-mid) var(--ease);
}

.mnav__close:hover {
    border-color: var(--line-gold);
    color: var(--gold-300);
    transform: rotate(90deg);
}

.mnav__close svg {
    width: 1.1rem;
    height: 1.1rem;
}

.mnav__body {
    flex: 1;
    padding: 1rem 1.25rem 1.5rem;
}

/* Pozycje wjeżdżają kaskadowo */
.mnav__item {
    opacity: 0;
    transform: translateX(1.25rem);
    transition: opacity var(--t-mid) var(--ease), transform var(--t-mid) var(--ease);
    transition-delay: var(--d, 0ms);
}

.mnav[data-open='true'] .mnav__item {
    opacity: 1;
    transform: translateX(0);
}

.mnav__link {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    width: 100%;
    padding: 0.95rem 0.9rem;
    border-radius: var(--r-md);
    font-size: 1rem;
    font-weight: 500;
    color: var(--fg-70);
    text-decoration: none;
    background: none;
    border: 0;
    cursor: pointer;
    font-family: inherit;
    text-align: left;
    transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease),
        padding-left var(--t-mid) var(--ease);
}

.mnav__link:hover,
.mnav__link:focus-visible {
    background: rgba(255, 255, 255, 0.05);
    color: var(--gold-300);
    padding-left: 1.2rem;
}

.mnav__link svg {
    width: 1rem;
    height: 1rem;
    flex-shrink: 0;
    color: var(--fg-30);
    transition: transform var(--t-mid) var(--ease), color var(--t-fast) var(--ease);
}

.mnav__link:hover svg {
    color: var(--gold-400);
}

/* Zagnieżdżony akordeon kategorii */
.mnav__sub-toggle[aria-expanded='true'] {
    color: var(--gold-300);
    background: rgba(201, 162, 39, 0.08);
}

.mnav__sub-toggle[aria-expanded='true'] svg {
    transform: rotate(180deg);
    color: var(--gold-400);
}

.mnav__sub {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows var(--t-mid) var(--ease);
}

.mnav__sub[data-open='true'] {
    grid-template-rows: 1fr;
}

.mnav__sub > div {
    overflow: hidden;
}

.mnav__sub-list {
    margin: 0.35rem 0 0.5rem;
    padding: 0.35rem 0 0.35rem 0.75rem;
    list-style: none;
    border-left: 1px solid var(--line-gold);
    display: grid;
    gap: 0.15rem;
}

.mnav__sub-link {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.7rem 0.75rem;
    border-radius: var(--r-sm);
    font-size: 0.9rem;
    color: var(--fg-55);
    text-decoration: none;
    transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease),
        transform var(--t-fast) var(--ease);
}

.mnav__sub-link:hover {
    background: rgba(255, 255, 255, 0.04);
    color: var(--fg);
    transform: translateX(3px);
}

.mnav__sub-link svg {
    width: 1rem;
    height: 1rem;
    color: var(--gold-400);
}

.mnav__sub-count {
    margin-left: auto;
    font-size: 0.7rem;
    color: var(--fg-30);
}

.mnav__divider {
    height: 1px;
    margin: 1rem 0.9rem;
    background: var(--line);
}

.mnav__foot {
    padding: 0 1.25rem 1.75rem;
    display: grid;
    gap: 0.75rem;
}

.mnav__contact {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    font-size: 0.9rem;
    color: var(--fg-55);
    text-decoration: none;
    padding: 0.55rem 0.9rem;
    border-radius: var(--r-sm);
    transition: color var(--t-fast) var(--ease), background var(--t-fast) var(--ease);
}

.mnav__contact:hover {
    color: var(--gold-300);
    background: rgba(255, 255, 255, 0.04);
}

.mnav__contact svg {
    width: 1rem;
    height: 1rem;
    color: var(--gold-400);
}

body.mnav-open {
    overflow: hidden;
}

/*
 * Desktop: menu mobilne nie istnieje.
 * Ta reguła MUSI stać po `.mnav { display: flex }` — przy równej
 * specyficzności wygrywa reguła późniejsza w pliku, nie ta w media query.
 */
@media (min-width: 64rem) {
    .mnav {
        display: none;
    }
}

/* ============================================================================
   5. PRZYCISKI
   ========================================================================= */

.btn {
    position: relative;
    overflow: hidden;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    border-radius: var(--r-full);
    border: 1px solid transparent;
    /* Jawnie, żeby wariant bez własnego tła (.btn--ghost) nigdy nie
       odziedziczył systemowego tła kontrolki. */
    background-color: transparent;
    font-family: inherit;
    font-weight: 600;
    letter-spacing: -0.01em;
    text-decoration: none;
    cursor: pointer;
    transition: transform var(--t-fast) var(--ease), box-shadow var(--t-mid) var(--ease),
        background var(--t-mid) var(--ease), border-color var(--t-mid) var(--ease),
        color var(--t-mid) var(--ease);
}

.btn:active {
    transform: translateY(1px) scale(0.99);
}

.btn svg {
    width: 1rem;
    height: 1rem;
    flex-shrink: 0;
}

.btn--sm {
    padding: 0.5rem 1rem;
    font-size: 0.8rem;
}

.btn--md {
    padding: 0.7rem 1.35rem;
    font-size: 0.875rem;
}

.btn--lg {
    padding: 0.9rem 1.75rem;
    font-size: 0.95rem;
}

.btn--gold {
    background: linear-gradient(135deg, var(--gold-300), var(--gold-500) 55%, var(--gold-600));
    color: var(--ink-950);
    box-shadow: 0 10px 30px -14px rgba(201, 162, 39, 0.6);
}

.btn--gold:hover {
    box-shadow: var(--sh-gold);
    transform: translateY(-2px);
}

/* Przesuwający się błysk (smaczek) */
.btn--gold::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(115deg, transparent 38%, rgba(255, 255, 255, 0.45) 50%, transparent 62%);
    transform: translateX(-130%);
    transition: transform 0.7s var(--ease);
}

.btn--gold:hover::after {
    transform: translateX(130%);
}

.btn--outline {
    border-color: var(--line-strong);
    background: rgba(255, 255, 255, 0.03);
    color: var(--fg);
}

.btn--outline:hover {
    border-color: var(--line-gold);
    background: rgba(201, 162, 39, 0.09);
    color: var(--gold-200);
    transform: translateY(-2px);
}

.btn--ghost {
    color: var(--fg-70);
    /* Delikatna obwódka, żeby dało się poznać, że to przycisk,
       nawet gdy tło jest przezroczyste. */
    border-color: var(--line);
}

.btn--ghost:hover {
    color: var(--fg);
    background: rgba(255, 255, 255, 0.06);
    border-color: var(--line-strong);
}

.btn--danger {
    border-color: rgba(248, 113, 113, 0.3);
    background: rgba(248, 113, 113, 0.1);
    color: #fca5a5;
}

.btn--danger:hover {
    background: rgba(248, 113, 113, 0.18);
    color: #fecaca;
}

.btn--block {
    width: 100%;
}

/* ============================================================================
   6. STRONA PRODUKTÓW
   ========================================================================= */

.shell {
    max-width: var(--shell);
    margin-inline: auto;
    padding-inline: 1.5rem;
}

.page-head {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    padding-block: calc(var(--header-h) + 5rem) 3rem;
}

.page-head::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    background:
        radial-gradient(ellipse 60% 70% at 15% 0%, rgba(201, 162, 39, 0.13), transparent 70%),
        radial-gradient(ellipse 50% 60% at 90% 10%, rgba(127, 98, 22, 0.1), transparent 70%);
}

/*
 * Nadnagłówek bez pigułki i bez kropki — kreska plus tekst.
 * Wcześniej była tu obwódka z okrągłą kropką; wzór zdjęty świadomie.
 */
.eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 0.85rem;
    font-size: 0.72rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    color: var(--gold-300);
}

.eyebrow::before {
    content: '';
    width: 2.5rem;
    height: 1px;
    background: linear-gradient(90deg, var(--gold-500), transparent);
    flex-shrink: 0;
}

.page-title {
    margin: 1.4rem 0 0;
    font-size: clamp(2rem, 5vw, 3rem);
    font-weight: 800;
    line-height: 1.1;
    letter-spacing: -0.02em;
    color: var(--fg);
}

.page-title em {
    font-style: normal;
    background: linear-gradient(100deg, var(--gold-200), var(--gold-400) 45%, var(--gold-600));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.page-lead {
    margin: 1.1rem 0 0;
    max-width: 44rem;
    font-size: 1rem;
    line-height: 1.7;
    color: var(--fg-55);
}

/* --- Pasek filtrów kategorii --- */
.cat-filter {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-top: 2rem;
}

.cat-filter__item {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.55rem 1rem;
    border-radius: var(--r-full);
    border: 1px solid var(--line);
    background: rgba(255, 255, 255, 0.03);
    font-size: 0.83rem;
    font-weight: 500;
    color: var(--fg-55);
    text-decoration: none;
    transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease),
        color var(--t-fast) var(--ease), transform var(--t-fast) var(--ease);
}

.cat-filter__item:hover {
    border-color: var(--line-gold);
    color: var(--fg);
    transform: translateY(-1px);
}

.cat-filter__item[data-active] {
    border-color: var(--line-gold);
    background: rgba(201, 162, 39, 0.13);
    color: var(--gold-200);
}

.cat-filter__item svg {
    width: 0.95rem;
    height: 0.95rem;
}

.cat-filter__count {
    font-size: 0.7rem;
    color: var(--fg-30);
}

.cat-filter__item[data-active] .cat-filter__count {
    color: rgba(241, 223, 162, 0.7);
}

/* --- Siatka kart --- */
.prod-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 16rem), 1fr));
    gap: 1.25rem;
    padding-block: 2.5rem 5rem;
}

.prod-card {
    position: relative;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    border-radius: var(--r-lg);
    border: 1px solid var(--line);
    background: linear-gradient(180deg, var(--ink-850), var(--ink-900));
    text-decoration: none;
    color: inherit;
    transition: border-color var(--t-mid) var(--ease), transform var(--t-mid) var(--ease),
        box-shadow var(--t-mid) var(--ease);
}

.prod-card:hover {
    border-color: var(--line-gold);
    transform: translateY(-4px);
    box-shadow: 0 26px 60px -30px rgba(0, 0, 0, 0.9), 0 0 0 1px rgba(201, 162, 39, 0.12);
}

/* Podświetlenie idące za kursorem (smaczek) */
.prod-card::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 1;
    opacity: 0;
    pointer-events: none;
    background: radial-gradient(
        16rem circle at var(--mx, 50%) var(--my, 50%),
        rgba(201, 162, 39, 0.13),
        transparent 65%
    );
    transition: opacity var(--t-mid) var(--ease);
}

.prod-card:hover::before {
    opacity: 1;
}

.prod-card__media {
    position: relative;
    overflow: hidden;
    aspect-ratio: 4 / 3;
    background: linear-gradient(140deg, var(--ink-800), var(--ink-850));
}

.prod-card__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform var(--t-slow) var(--ease);
}

.prod-card:hover .prod-card__media img {
    transform: scale(1.06);
}

/* Zastępnik, gdy oferta nie ma zdjęcia */
.prod-card__media--empty {
    display: grid;
    place-items: center;
    color: rgba(201, 162, 39, 0.22);
}

.prod-card__media--empty svg {
    width: 3.5rem;
    height: 3.5rem;
}

.prod-card__badges {
    position: absolute;
    inset: 0.7rem 0.7rem auto 0.7rem;
    z-index: 2;
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
}

.badge {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    padding: 0.28rem 0.6rem;
    border-radius: var(--r-full);
    font-size: 0.66rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    backdrop-filter: blur(8px);
}

.badge--gold {
    background: rgba(201, 162, 39, 0.9);
    color: var(--ink-950);
}

.badge--dark {
    background: rgba(5, 5, 6, 0.75);
    border: 1px solid var(--line-strong);
    color: var(--fg-70);
}

.badge--cat {
    background: rgba(5, 5, 6, 0.7);
    border: 1px solid var(--line-gold);
    color: var(--gold-200);
}

.prod-card__body {
    position: relative;
    z-index: 2;
    display: flex;
    flex-direction: column;
    flex: 1;
    padding: 1.1rem 1.15rem 1.25rem;
}

.prod-card__name {
    margin: 0;
    font-size: 1rem;
    font-weight: 650;
    line-height: 1.3;
    color: var(--fg);
}

.prod-card__desc {
    margin: 0.5rem 0 0;
    font-size: 0.83rem;
    line-height: 1.6;
    color: var(--fg-45);

    /* dwie linijki i wielokropek */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.prod-card__meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem 0.9rem;
    margin-top: 0.85rem;
    font-size: 0.75rem;
    color: var(--fg-45);
}

.prod-card__meta span {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
}

.prod-card__meta svg {
    width: 0.85rem;
    height: 0.85rem;
    color: var(--gold-500);
}

.prod-card__foot {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1rem;
    margin-top: auto;
    padding-top: 1rem;
}

.prod-card__price {
    font-size: 1.35rem;
    font-weight: 800;
    letter-spacing: -0.02em;
    background: linear-gradient(100deg, var(--gold-200), var(--gold-400) 50%, var(--gold-600));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.prod-card__unit {
    display: block;
    font-size: 0.7rem;
    font-weight: 500;
    color: var(--fg-30);
    letter-spacing: 0;
}

.prod-card__cta {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--gold-300);
    transition: gap var(--t-fast) var(--ease);
}

.prod-card:hover .prod-card__cta {
    gap: 0.7rem;
}

.prod-card__cta svg {
    width: 0.9rem;
    height: 0.9rem;
}

/* --- Stan pusty --- */
.empty {
    grid-column: 1 / -1;
    display: grid;
    place-items: center;
    gap: 0.9rem;
    padding: 4.5rem 1.5rem;
    border-radius: var(--r-lg);
    border: 1px dashed var(--line-strong);
    background: rgba(255, 255, 255, 0.015);
    text-align: center;
}

.empty svg {
    width: 2.75rem;
    height: 2.75rem;
    color: rgba(201, 162, 39, 0.3);
}

.empty__title {
    margin: 0;
    font-size: 1.05rem;
    font-weight: 600;
    color: var(--fg);
}

.empty__text {
    margin: 0;
    max-width: 26rem;
    font-size: 0.875rem;
    line-height: 1.65;
    color: var(--fg-45);
}

/* ============================================================================
   7. KARTA SZCZEGÓŁÓW OFERTY
   ========================================================================= */

.offer {
    display: grid;
    gap: 2.5rem;
    padding-block: 2rem 5rem;
}

@media (min-width: 60rem) {
    .offer {
        grid-template-columns: 1.1fr 0.9fr;
        gap: 3.5rem;
        align-items: start;
    }
}

.offer__media {
    position: relative;
    overflow: hidden;
    border-radius: var(--r-xl);
    border: 1px solid var(--line);
    background: linear-gradient(140deg, var(--ink-800), var(--ink-900));
    aspect-ratio: 4 / 3;
}

.offer__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.offer__media--empty {
    display: grid;
    place-items: center;
    color: rgba(201, 162, 39, 0.2);
}

.offer__media--empty svg {
    width: 5rem;
    height: 5rem;
}

.offer__title {
    margin: 1rem 0 0;
    font-size: clamp(1.6rem, 4vw, 2.35rem);
    font-weight: 800;
    line-height: 1.15;
    letter-spacing: -0.02em;
    color: var(--fg);
}

.offer__price {
    margin-top: 1.5rem;
    display: flex;
    align-items: baseline;
    gap: 0.6rem;
}

.offer__price strong {
    font-size: 2.25rem;
    font-weight: 800;
    letter-spacing: -0.03em;
    background: linear-gradient(100deg, var(--gold-200), var(--gold-400) 50%, var(--gold-600));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.offer__price span {
    font-size: 0.85rem;
    color: var(--fg-45);
}

.offer__desc {
    margin-top: 1.5rem;
    font-size: 0.95rem;
    line-height: 1.75;
    color: var(--fg-55);
    white-space: pre-line;
}

.offer__specs {
    margin: 1.75rem 0 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: 1px;
    border-radius: var(--r-md);
    overflow: hidden;
    border: 1px solid var(--line);
    background: var(--line);
}

.offer__specs li {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.85rem 1rem;
    background: var(--ink-900);
    font-size: 0.85rem;
}

.offer__specs dt,
.offer__specs .k {
    color: var(--fg-45);
}

.offer__specs .v {
    font-weight: 600;
    color: var(--fg);
}

.offer__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    margin-top: 2rem;
}

/* ============================================================================
   8. FORMULARZE (wspólne dla panelu i strony)
   ========================================================================= */

.field {
    display: grid;
    gap: 0.45rem;
}

.field__label {
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--fg-70);
}

.field__label span {
    color: var(--gold-400);
}

.field__hint {
    font-size: 0.75rem;
    line-height: 1.5;
    color: var(--fg-30);
}

.field__error {
    font-size: 0.78rem;
    font-weight: 500;
    color: #fca5a5;
}

.input,
.textarea,
.select {
    width: 100%;
    padding: 0.7rem 0.9rem;
    border-radius: var(--r-sm);
    border: 1px solid var(--line-strong);
    background: rgba(255, 255, 255, 0.04);
    color: var(--fg);
    font-family: inherit;
    font-size: 0.9rem;
    line-height: 1.5;
    transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease),
        box-shadow var(--t-fast) var(--ease);
}

.input::placeholder,
.textarea::placeholder {
    color: var(--fg-30);
}

.input:focus,
.textarea:focus,
.select:focus {
    outline: none;
    border-color: var(--gold-500);
    background: rgba(255, 255, 255, 0.06);
    box-shadow: 0 0 0 3px rgba(201, 162, 39, 0.16);
}

.input[aria-invalid='true'],
.textarea[aria-invalid='true'],
.select[aria-invalid='true'] {
    border-color: rgba(248, 113, 113, 0.55);
}

.textarea {
    min-height: 8rem;
    resize: vertical;
}

.select {
    appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23d9b445' stroke-width='2.5' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 0.75rem center;
    background-size: 1rem;
    padding-right: 2.4rem;
}

.select option {
    background: var(--ink-850);
    color: var(--fg);
}

/* Przełącznik */
.switch {
    display: inline-flex;
    align-items: center;
    gap: 0.7rem;
    cursor: pointer;
    font-size: 0.875rem;
    color: var(--fg-70);
}

.switch input {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}

.switch__track {
    position: relative;
    width: 2.6rem;
    height: 1.5rem;
    flex-shrink: 0;
    border-radius: var(--r-full);
    border: 1px solid var(--line-strong);
    background: rgba(255, 255, 255, 0.06);
    transition: background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);
}

.switch__track::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 0.2rem;
    width: 1rem;
    height: 1rem;
    border-radius: 50%;
    background: var(--fg-45);
    transform: translateY(-50%);
    transition: transform var(--t-mid) var(--ease), background var(--t-fast) var(--ease);
}

.switch input:checked + .switch__track {
    background: rgba(201, 162, 39, 0.28);
    border-color: var(--line-gold);
}

.switch input:checked + .switch__track::after {
    transform: translate(1.05rem, -50%);
    background: var(--gold-300);
}

.switch input:focus-visible + .switch__track {
    box-shadow: 0 0 0 3px rgba(201, 162, 39, 0.2);
}

/* Upload zdjęcia */
.upload {
    position: relative;
    display: grid;
    place-items: center;
    gap: 0.6rem;
    padding: 1.75rem 1.25rem;
    border-radius: var(--r-md);
    border: 1px dashed var(--line-strong);
    background: rgba(255, 255, 255, 0.02);
    text-align: center;
    cursor: pointer;
    transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease);
}

.upload:hover,
.upload[data-drag='true'] {
    border-color: var(--line-gold);
    background: rgba(201, 162, 39, 0.06);
}

.upload input[type='file'] {
    position: absolute;
    inset: 0;
    opacity: 0;
    cursor: pointer;
}

.upload svg {
    width: 1.75rem;
    height: 1.75rem;
    color: rgba(201, 162, 39, 0.5);
}

.upload__text {
    font-size: 0.85rem;
    color: var(--fg-55);
}

.upload__text strong {
    color: var(--gold-300);
}

.upload__preview {
    margin-top: 0.9rem;
    display: flex;
    align-items: center;
    gap: 0.9rem;
    padding: 0.7rem;
    border-radius: var(--r-sm);
    border: 1px solid var(--line);
    background: rgba(255, 255, 255, 0.03);
}

.upload__preview img {
    width: 4rem;
    height: 4rem;
    object-fit: cover;
    border-radius: var(--r-sm);
    border: 1px solid var(--line);
}

/* ============================================================================
   9. PANEL ADMINISTRACYJNY
   ========================================================================= */

.adm {
    min-height: 100vh;
    display: grid;
    grid-template-columns: 1fr;
    background: var(--ink-950);
}

@media (min-width: 64rem) {
    .adm {
        grid-template-columns: 16rem 1fr;
    }
}

/* --- Sidebar --- */
.adm__side {
    display: none;
    flex-direction: column;
    gap: 1.5rem;
    padding: 1.5rem 1.15rem;
    border-right: 1px solid var(--line);
    background: linear-gradient(180deg, var(--ink-900), var(--ink-950));
    position: sticky;
    top: 0;
    height: 100vh;
}

@media (min-width: 64rem) {
    .adm__side {
        display: flex;
    }
}

.adm__nav {
    display: grid;
    gap: 0.2rem;
}

.adm__nav-label {
    padding: 0 0.75rem;
    margin-bottom: 0.4rem;
    font-size: 0.66rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.16em;
    color: var(--fg-30);
}

.adm__nav-link {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.65rem 0.75rem;
    border-radius: var(--r-sm);
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--fg-55);
    text-decoration: none;
    transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}

.adm__nav-link:hover {
    background: rgba(255, 255, 255, 0.05);
    color: var(--fg);
}

.adm__nav-link[data-active] {
    background: rgba(201, 162, 39, 0.12);
    color: var(--gold-200);
    box-shadow: inset 2px 0 0 var(--gold-500);
}

.adm__nav-link svg {
    width: 1.05rem;
    height: 1.05rem;
    flex-shrink: 0;
}

.adm__nav-count {
    margin-left: auto;
    padding: 0.1rem 0.45rem;
    border-radius: var(--r-full);
    background: rgba(255, 255, 255, 0.07);
    font-size: 0.7rem;
    font-weight: 600;
    color: var(--fg-45);
}

.adm__side-foot {
    margin-top: auto;
    padding-top: 1.15rem;
    border-top: 1px solid var(--line);
    display: grid;
    gap: 0.6rem;
}

.adm__user {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.5rem 0.25rem;
}

.adm__avatar {
    display: grid;
    place-items: center;
    width: 2.2rem;
    height: 2.2rem;
    flex-shrink: 0;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--gold-300), var(--gold-600));
    color: var(--ink-950);
    font-size: 0.8rem;
    font-weight: 700;
}

.adm__user-name {
    font-size: 0.83rem;
    font-weight: 600;
    color: var(--fg);
    line-height: 1.3;
}

.adm__user-mail {
    font-size: 0.72rem;
    color: var(--fg-30);
    word-break: break-all;
}

/* --- Główna kolumna --- */
.adm__main {
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.adm__topbar {
    position: sticky;
    top: 0;
    z-index: 20;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 1rem 1.5rem;
    border-bottom: 1px solid var(--line);
    background: rgba(10, 10, 12, 0.9);
    backdrop-filter: blur(14px);
}

.adm__crumbs {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.8rem;
    color: var(--fg-30);
    flex-wrap: wrap;
}

.adm__crumbs a {
    color: var(--fg-55);
    text-decoration: none;
}

.adm__crumbs a:hover {
    color: var(--gold-300);
}

.adm__content {
    flex: 1;
    padding: 1.75rem 1.5rem 4rem;
}

.adm__head {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.75rem;
}

.adm__title {
    margin: 0;
    font-size: 1.5rem;
    font-weight: 750;
    letter-spacing: -0.02em;
    color: var(--fg);
}

.adm__subtitle {
    margin: 0.4rem 0 0;
    font-size: 0.875rem;
    color: var(--fg-45);
}

/* --- Kafle statystyk --- */
.adm__stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 11rem), 1fr));
    gap: 1rem;
    margin-bottom: 2rem;
}

.stat {
    position: relative;
    overflow: hidden;
    padding: 1.15rem 1.25rem;
    border-radius: var(--r-md);
    border: 1px solid var(--line);
    background: linear-gradient(160deg, var(--ink-850), var(--ink-900));
}

.stat::after {
    content: '';
    position: absolute;
    top: -3rem;
    right: -3rem;
    width: 8rem;
    height: 8rem;
    border-radius: 50%;
    background: rgba(201, 162, 39, 0.07);
    filter: blur(24px);
}

.stat__label {
    display: flex;
    align-items: center;
    gap: 0.45rem;
    font-size: 0.72rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    color: var(--fg-30);
}

.stat__label svg {
    width: 0.9rem;
    height: 0.9rem;
    color: var(--gold-500);
}

.stat__value {
    margin-top: 0.5rem;
    font-size: 1.85rem;
    font-weight: 800;
    letter-spacing: -0.03em;
    color: var(--fg);
    line-height: 1;
}

/* --- Karta / panel --- */
.card {
    border-radius: var(--r-lg);
    border: 1px solid var(--line);
    background: var(--ink-900);
    overflow: hidden;
}

.card__head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 1.1rem 1.25rem;
    border-bottom: 1px solid var(--line);
}

.card__title {
    margin: 0;
    font-size: 0.95rem;
    font-weight: 650;
    color: var(--fg);
}

.card__body {
    padding: 1.25rem;
}

.form-grid {
    display: grid;
    gap: 1.15rem;
}

@media (min-width: 48rem) {
    .form-grid--2 {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .form-grid__wide {
        grid-column: 1 / -1;
    }
}

.form-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem;
    padding-top: 0.5rem;
}

.form-actions--split {
    justify-content: space-between;
}

/* --- Tabela --- */
.table-wrap {
    overflow-x: auto;
}

.table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.875rem;
    min-width: 44rem;
}

.table th {
    padding: 0.8rem 1rem;
    text-align: left;
    font-size: 0.7rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    color: var(--fg-30);
    border-bottom: 1px solid var(--line);
    white-space: nowrap;
    background: rgba(255, 255, 255, 0.02);
}

.table td {
    padding: 0.85rem 1rem;
    border-bottom: 1px solid var(--line);
    color: var(--fg-70);
    vertical-align: middle;
}

.table tbody tr {
    transition: background var(--t-fast) var(--ease);
}

.table tbody tr:hover {
    background: rgba(255, 255, 255, 0.025);
}

.table tbody tr:last-child td {
    border-bottom: 0;
}

.table__thumb {
    width: 3rem;
    height: 3rem;
    object-fit: cover;
    border-radius: var(--r-sm);
    border: 1px solid var(--line);
    display: block;
}

.table__thumb--empty {
    display: grid;
    place-items: center;
    background: rgba(255, 255, 255, 0.03);
    color: rgba(201, 162, 39, 0.3);
}

.table__thumb--empty svg {
    width: 1.1rem;
    height: 1.1rem;
}

.table__name {
    font-weight: 600;
    color: var(--fg);
}

.table__sub {
    margin-top: 0.15rem;
    font-size: 0.75rem;
    color: var(--fg-30);
}

.table__actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 0.4rem;
}

.icon-btn {
    display: grid;
    place-items: center;
    width: 2.1rem;
    height: 2.1rem;
    border-radius: var(--r-sm);
    border: 1px solid var(--line);
    background: rgba(255, 255, 255, 0.03);
    color: var(--fg-55);
    cursor: pointer;
    text-decoration: none;
    transition: border-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease),
        background var(--t-fast) var(--ease);
}

.icon-btn svg {
    width: 1rem;
    height: 1rem;
}

.icon-btn:hover {
    border-color: var(--line-gold);
    color: var(--gold-300);
    background: rgba(201, 162, 39, 0.1);
}

.icon-btn--danger:hover {
    border-color: rgba(248, 113, 113, 0.4);
    color: #fca5a5;
    background: rgba(248, 113, 113, 0.12);
}

/* Znacznik statusu */
.dot {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    font-size: 0.8rem;
    white-space: nowrap;
}

.dot::before {
    content: '';
    width: 0.45rem;
    height: 0.45rem;
    border-radius: 50%;
    flex-shrink: 0;
}

.dot--on::before {
    background: #4ade80;
    box-shadow: 0 0 0 3px rgba(74, 222, 128, 0.15);
}

.dot--off::before {
    background: var(--fg-30);
}

/* --- Komunikaty --- */
.alert {
    display: flex;
    align-items: flex-start;
    gap: 0.7rem;
    padding: 0.9rem 1.1rem;
    border-radius: var(--r-md);
    border: 1px solid var(--line);
    font-size: 0.875rem;
    line-height: 1.6;
    margin-bottom: 1.5rem;
}

.alert svg {
    width: 1.05rem;
    height: 1.05rem;
    flex-shrink: 0;
    margin-top: 0.1rem;
}

.alert--ok {
    border-color: rgba(74, 222, 128, 0.3);
    background: rgba(74, 222, 128, 0.08);
    color: #bbf7d0;
}

.alert--err {
    border-color: rgba(248, 113, 113, 0.32);
    background: rgba(248, 113, 113, 0.08);
    color: #fecaca;
}

.alert--info {
    border-color: var(--line-gold);
    background: rgba(201, 162, 39, 0.07);
    color: var(--gold-100);
}

.alert ul {
    margin: 0.4rem 0 0;
    padding-left: 1.1rem;
}

/* --- Logowanie --- */
.login {
    min-height: 100vh;
    display: grid;
    place-items: center;
    padding: 1.5rem;
    background:
        radial-gradient(ellipse 50% 50% at 50% 0%, rgba(201, 162, 39, 0.1), transparent 70%),
        var(--ink-950);
}

.login__box {
    width: 100%;
    max-width: 24rem;
}

.login__card {
    margin-top: 1.75rem;
    padding: 1.75rem;
    border-radius: var(--r-lg);
    border: 1px solid var(--line-strong);
    background: linear-gradient(170deg, var(--ink-850), var(--ink-900));
    box-shadow: var(--sh-panel);
}

.login__title {
    margin: 0 0 0.4rem;
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--fg);
}

.login__hint {
    margin: 0 0 1.5rem;
    font-size: 0.83rem;
    line-height: 1.6;
    color: var(--fg-45);
}

.login__back {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    margin-top: 1.5rem;
    font-size: 0.8rem;
    color: var(--fg-30);
    text-decoration: none;
    transition: color var(--t-fast) var(--ease);
}

.login__back:hover {
    color: var(--gold-300);
}

.login__back svg {
    width: 0.9rem;
    height: 0.9rem;
}

/* ============================================================================
   10. PAGINACJA
   ========================================================================= */

.pager {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 0.35rem;
    margin-top: 2rem;
}

.pager a,
.pager span {
    display: grid;
    place-items: center;
    min-width: 2.35rem;
    height: 2.35rem;
    padding-inline: 0.6rem;
    border-radius: var(--r-sm);
    border: 1px solid var(--line);
    background: rgba(255, 255, 255, 0.03);
    font-size: 0.83rem;
    font-weight: 500;
    color: var(--fg-55);
    text-decoration: none;
    transition: border-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}

.pager a:hover {
    border-color: var(--line-gold);
    color: var(--fg);
}

.pager [aria-current='page'] {
    border-color: var(--line-gold);
    background: rgba(201, 162, 39, 0.14);
    color: var(--gold-200);
}

.pager .disabled {
    opacity: 0.35;
}

/* ============================================================================
   11. RESZTKI POMOCNICZE
   ========================================================================= */

/*
 * UWAGA na display w tych utilities.
 * `display: initial` to NIE `block` — wartość początkowa właściwości display
 * to `inline`. Użycie `initial` psuło pasek informacyjny w nagłówku (div) oraz
 * przycisk CTA (.btn ma inline-flex, a `inline` zabijało mu układ).
 * Dlatego element deklaruje swój display przez --u-display, a utility tylko
 * go przywraca albo chowa.
 */

.u-hide-lg {
    display: var(--u-display, block);
}

@media (min-width: 64rem) {
    .u-hide-lg {
        display: none;
    }
}

.u-only-lg {
    display: none;
}

@media (min-width: 64rem) {
    .u-only-lg {
        display: var(--u-display, block);
    }
}

/* Elementy o niestandardowym display zgłaszają go same. */
.btn.u-only-lg,
.btn.u-hide-lg {
    --u-display: inline-flex;
}

.u-row.u-hide-lg,
.u-row.u-only-lg {
    --u-display: flex;
}

/* Pasek akcji widoczny tylko na węższych ekranach (topbar panelu) */
.u-row {
    display: flex;
    align-items: center;
    gap: 0.4rem;
}

.u-sr {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* Wjazd elementów przy scrollu — bliźniak .reveal z Tailwinda, ale własny */
.rise {
    opacity: 0;
    transform: translateY(1.1rem);
    transition: opacity var(--t-slow) var(--ease), transform var(--t-slow) var(--ease);
    transition-delay: var(--d, 0ms);
}

.rise.is-in {
    opacity: 1;
    transform: none;
}

/* ============================================================================
   12. SZANUJ USTAWIENIA DOSTĘPNOŚCI
   ========================================================================= */

@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }

    .rise {
        opacity: 1;
        transform: none;
    }

    .mnav__item {
        opacity: 1;
        transform: none;
    }

    .prod-card:hover {
        transform: none;
    }
}

:where(a, button, input, textarea, select, [tabindex]):focus-visible {
    outline: 2px solid var(--gold-400);
    outline-offset: 2px;
    border-radius: var(--r-sm);
}

/* ============================================================================
   13. SEKCJA KATEGORII NA STRONIE GŁÓWNEJ
   ========================================================================= */

.cat-section {
    position: relative;
    isolation: isolate;
    /*
     * Duży górny zapas — pasek z kategoriami stoi bezpośrednio nad tą
     * sekcją i bez tego oba bloki zlewały się w jeden.
     */
    padding-block: 9rem 6rem;
}

@media (min-width: 64rem) {
    .cat-section {
        padding-block: 12rem 7rem;
    }
}

.cat-section__head {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1.5rem;
    margin-bottom: 2.5rem;
}

.cat-section__title {
    margin: 1.25rem 0 0;
    font-size: clamp(1.75rem, 4vw, 2.6rem);
    font-weight: 800;
    line-height: 1.15;
    letter-spacing: -0.02em;
    color: var(--fg);
}

.cat-section__title em {
    font-style: normal;
    background: linear-gradient(100deg, var(--gold-200), var(--gold-400) 45%, var(--gold-600));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.cat-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
    gap: 1rem;
}

/* Duży kafel kategorii — najechanie odsłania liczbę ofert i strzałkę */
.cat-card {
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    gap: 0.9rem;
    min-height: 11.5rem;
    padding: 1.4rem;
    border-radius: var(--r-lg);
    border: 1px solid var(--line);
    background: linear-gradient(165deg, var(--ink-850), var(--ink-900) 60%, var(--ink-950));
    text-decoration: none;
    color: inherit;
    transition: border-color var(--t-mid) var(--ease), transform var(--t-mid) var(--ease),
        box-shadow var(--t-mid) var(--ease);
}

.cat-card:hover {
    border-color: var(--line-gold);
    transform: translateY(-5px);
    box-shadow: 0 28px 64px -32px rgba(0, 0, 0, 0.9);
}

/* Poświata za kursorem */
.cat-card::before {
    content: '';
    position: absolute;
    inset: 0;
    opacity: 0;
    pointer-events: none;
    background: radial-gradient(
        14rem circle at var(--mx, 50%) var(--my, 50%),
        rgba(201, 162, 39, 0.16),
        transparent 62%
    );
    transition: opacity var(--t-mid) var(--ease);
}

.cat-card:hover::before {
    opacity: 1;
}

/* Duża, przygaszona ikona w tle — rozjaśnia się przy hoverze */
.cat-card__ghost {
    position: absolute;
    right: -1.25rem;
    bottom: -1.75rem;
    color: rgba(201, 162, 39, 0.07);
    transition: transform var(--t-slow) var(--ease), color var(--t-mid) var(--ease);
    pointer-events: none;
}

.cat-card__ghost svg {
    width: 8rem;
    height: 8rem;
}

.cat-card:hover .cat-card__ghost {
    transform: translate(-0.4rem, -0.4rem) rotate(-6deg);
    color: rgba(201, 162, 39, 0.14);
}

.cat-card__icon {
    position: relative;
    display: grid;
    place-items: center;
    width: 2.9rem;
    height: 2.9rem;
    border-radius: var(--r-md);
    border: 1px solid var(--line);
    background: rgba(255, 255, 255, 0.04);
    color: var(--gold-300);
    transition: border-color var(--t-mid) var(--ease), background var(--t-mid) var(--ease),
        transform var(--t-mid) var(--ease);
}

.cat-card__icon svg {
    width: 1.35rem;
    height: 1.35rem;
}

.cat-card:hover .cat-card__icon {
    border-color: var(--line-gold);
    background: rgba(201, 162, 39, 0.15);
    transform: scale(1.08) rotate(-5deg);
}

.cat-card__name {
    position: relative;
    margin: auto 0 0;
    font-size: 1.1rem;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--fg);
}

.cat-card__tagline {
    position: relative;
    margin: 0.35rem 0 0;
    font-size: 0.8rem;
    line-height: 1.5;
    color: var(--fg-45);
}

.cat-card__foot {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin-top: 0.9rem;
    padding-top: 0.8rem;
    border-top: 1px solid var(--line);
    font-size: 0.75rem;
    color: var(--fg-30);
}

.cat-card__foot svg {
    width: 0.9rem;
    height: 0.9rem;
    color: var(--gold-400);
    transform: translateX(-0.35rem);
    opacity: 0;
    transition: transform var(--t-mid) var(--ease), opacity var(--t-mid) var(--ease);
}

.cat-card:hover .cat-card__foot svg {
    transform: translateX(0);
    opacity: 1;
}

/* ============================================================================
   14. KONTRAST W SEKCJACH OPARTYCH NA TAILWINDZIE

   Stare sekcje strony (klasy towaru, galeria, opinie, FAQ, kontakt) używają
   utility-klas typu text-white/40, których nie mogę przeliczyć bez Node'a.
   Policzony kontrast na tle ink-950:
       /25 -> 2.2:1    /30 -> 2.5:1    /35 -> 3.0:1    /40 -> 3.7:1
   Wszystkie poniżej progu 4.5:1 z WCAG AA.

   Ten plik wchodzi PO CSS-ie z Vite, więc przy równej specyficzności wygrywa
   — bez !important. Podnosimy najniższe stopnie do czytelnego poziomu,
   zachowując różnicę względem jaśniejszych stopni.
   ========================================================================= */

.text-white\/25,
.text-white\/30,
.text-white\/35 {
    color: rgba(255, 255, 255, 0.47);
}

.text-white\/40,
.text-white\/45 {
    color: rgba(255, 255, 255, 0.5);
}

.text-white\/50,
.text-white\/55 {
    color: rgba(255, 255, 255, 0.58);
}

/* Ikony i kreski dekoracyjne mogą zostać przygaszone — nie są tekstem. */
svg.text-white\/25,
svg.text-white\/30,
svg.text-white\/35 {
    color: var(--fg-faint);
}

/* ============================================================================
   15. HERO 2026 — typografia edytorska, układ poza siatką, kształty organiczne

   Z wytycznych na 2026:
   - kinetyczna typografia tylko w nagłówku, nigdy w treści do czytania
   - mikrointerakcje z funkcją, nie dekoracyjne
   - asymetria zamiast sztywnej siatki
   - zero pigułek z migającą kropką
   - wszystko wygasza się przy prefers-reduced-motion
   ========================================================================= */

.hero {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    padding-block: calc(var(--header-h) + 4.5rem) 4rem;
}

@media (min-width: 64rem) {
    .hero {
        padding-block: calc(var(--header-h) + 7rem) 6rem;
    }
}

/* --- Tło: organiczne plamy zamiast prostokątnych gradientów --- */
.hero__bg {
    position: absolute;
    inset: 0;
    z-index: -1;
    pointer-events: none;
}

.hero__blob {
    position: absolute;
    filter: blur(70px);
    opacity: 0.5;
    /* Nieregularny kształt, nie okrąg */
    border-radius: 62% 38% 46% 54% / 55% 44% 56% 45%;
    animation: blob-drift 26s var(--ease) infinite alternate;
}

.hero__blob--a {
    top: -14rem;
    right: -10rem;
    width: 44rem;
    height: 38rem;
    background: radial-gradient(circle at 35% 35%, rgba(201, 162, 39, 0.3), transparent 68%);
}

.hero__blob--b {
    bottom: -20rem;
    left: -14rem;
    width: 40rem;
    height: 34rem;
    background: radial-gradient(circle at 60% 40%, rgba(127, 98, 22, 0.28), transparent 70%);
    animation-delay: -13s;
}

@keyframes blob-drift {
    from {
        transform: translate3d(0, 0, 0) rotate(0deg) scale(1);
    }
    to {
        transform: translate3d(-2.5rem, 1.75rem, 0) rotate(14deg) scale(1.07);
    }
}

/* Delikatna siatka wycięta organiczną maską */
.hero__mesh {
    position: absolute;
    inset: 0;
    background-image:
        linear-gradient(to right, rgba(255, 255, 255, 0.04) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(255, 255, 255, 0.04) 1px, transparent 1px);
    background-size: 4.5rem 4.5rem;
    -webkit-mask-image: radial-gradient(ellipse 65% 55% at 25% 30%, black, transparent 72%);
    mask-image: radial-gradient(ellipse 65% 55% at 25% 30%, black, transparent 72%);
}

/* --- Układ celowo asymetryczny --- */
.hero__grid {
    position: relative;
    max-width: var(--shell);
    margin-inline: auto;
    padding-inline: 1.5rem;
    display: grid;
    gap: 3.5rem;
}

@media (min-width: 64rem) {
    .hero__grid {
        /* 7:5 zamiast 50/50 — łamie symetrię */
        grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
        gap: 4rem;
        align-items: center;
    }
}

/* --- Nadnagłówek: cienka kreska i tekst, bez kropki --- */
.hero__kicker {
    display: flex;
    align-items: center;
    gap: 0.85rem;
    font-size: 0.72rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    color: var(--gold-300);
}

.hero__kicker::before {
    content: '';
    width: 2.5rem;
    height: 1px;
    background: linear-gradient(90deg, var(--gold-500), transparent);
    flex-shrink: 0;
}

/* Wariant wyśrodkowany — kreska z obu stron, żeby układ był symetryczny. */
.hero__kicker--center {
    justify-content: center;
}

.hero__kicker--center::before {
    background: linear-gradient(90deg, transparent, var(--gold-500));
}

.hero__kicker--center::after {
    content: '';
    width: 2.5rem;
    height: 1px;
    background: linear-gradient(90deg, var(--gold-500), transparent);
    flex-shrink: 0;
}

/* --- Nagłówek --- */
.hero__title {
    margin: 1.5rem 0 0;
    font-size: clamp(2.6rem, 7.5vw, 5.25rem);
    font-weight: 800;
    line-height: 0.98;
    letter-spacing: -0.035em;
    color: var(--fg);
    text-wrap: balance;
}

.hero__title-line {
    display: block;
}

.hero__gold {
    background: linear-gradient(96deg, var(--gold-200), var(--gold-400) 42%, var(--gold-600));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

/*
 * Nagłówek jest statyczny — wcześniej stały tu klasy .kin (kinetyczne
 * wjeżdżanie słów) i .rotator (podmiana nazwy kategorii). Zdjęte, bo
 * przeskok źle się sprawdzał. Zostaje sama typografia.
 */

/* --- Treść pod nagłówkiem --- */
.hero__lead {
    margin: 1.9rem 0 0;
    max-width: 34rem;
    font-size: clamp(1rem, 1.6vw, 1.16rem);
    line-height: 1.68;
    color: var(--fg-55);
}

.hero__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    margin-top: 2.25rem;
}

/*
 * Pasek zaufania: zwykły tekst rozdzielony kreskami.
 * Świadomie bez pigułek i bez kropek — to najbardziej opatrzony wzór
 * ostatnich lat i nie wnosi żadnej informacji.
 */
.hero__trust {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.6rem 1.35rem;
    margin: 2.5rem 0 0;
    padding: 0;
    list-style: none;
    font-size: 0.83rem;
    color: var(--fg-45);
}

.hero__trust li {
    position: relative;
    padding-left: 1.35rem;
}

/* Znacznik: krótka kreska, nie kropka */
.hero__trust li::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0.62em;
    width: 0.8rem;
    height: 1px;
    background: var(--gold-500);
}

/* --- Prawa kolumna: realne kategorie z bazy --- */
.hero__panel {
    position: relative;
}

@media (min-width: 64rem) {
    .hero__panel {
        margin-left: -2rem;
    }
}

.hero__stack {
    display: grid;
    gap: 0.7rem;
}

.hero-cat {
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 1.05rem 1.15rem;
    border-radius: var(--r-lg);
    border: 1px solid var(--line);
    background: linear-gradient(120deg, rgba(20, 20, 23, 0.9), rgba(10, 10, 12, 0.75));
    backdrop-filter: blur(8px);
    text-decoration: none;
    color: inherit;
    transition: transform var(--t-mid) var(--ease), border-color var(--t-mid) var(--ease),
        background var(--t-mid) var(--ease);
}

/* Przesunięcie co drugiej karty — układ rozsypany, nie kolumna */
.hero-cat:nth-child(even) {
    margin-left: 1.75rem;
}

.hero-cat:hover {
    border-color: var(--line-gold);
    transform: translateX(0.5rem);
    background: linear-gradient(120deg, rgba(201, 162, 39, 0.1), rgba(10, 10, 12, 0.8));
}

.hero-cat__icon {
    display: grid;
    place-items: center;
    width: 2.5rem;
    height: 2.5rem;
    flex-shrink: 0;
    border-radius: var(--r-md);
    border: 1px solid var(--line);
    background: rgba(255, 255, 255, 0.04);
    color: var(--gold-300);
    transition: transform var(--t-mid) var(--ease), background var(--t-mid) var(--ease);
}

.hero-cat__icon svg {
    width: 1.15rem;
    height: 1.15rem;
}

.hero-cat:hover .hero-cat__icon {
    background: rgba(201, 162, 39, 0.16);
    transform: scale(1.08) rotate(-6deg);
}

.hero-cat__name {
    display: block;
    font-size: 0.95rem;
    font-weight: 650;
    color: var(--fg);
    line-height: 1.25;
}

.hero-cat__meta {
    display: block;
    margin-top: 0.15rem;
    font-size: 0.75rem;
    color: var(--fg-30);
}

.hero-cat__go {
    margin-left: auto;
    flex-shrink: 0;
    color: var(--gold-400);
    opacity: 0;
    transform: translateX(-0.4rem);
    transition: opacity var(--t-mid) var(--ease), transform var(--t-mid) var(--ease);
}

.hero-cat__go svg {
    width: 1rem;
    height: 1rem;
}

.hero-cat:hover .hero-cat__go {
    opacity: 1;
    transform: translateX(0);
}

.hero__panel-note {
    margin: 1.15rem 0 0 1.75rem;
    font-size: 0.78rem;
    line-height: 1.6;
    color: var(--fg-30);
}

.hero__panel-note a {
    color: var(--gold-300);
    font-weight: 600;
    text-decoration: none;
}

.hero__panel-note a:hover {
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* ============================================================================
   23. DOPRACOWANIE POD TELEFONY

   Osobny blok na końcu, żeby nadpisania były przewidywalne.
   Zasady: cele dotykowe min. 44 px (wytyczne dostępności), mniej
   marnowanego miejsca na węższych ekranach, żadnego przewijania w poziomie.
   ========================================================================= */

/* Bardzo wąskie telefony (iPhone SE, 360 px) — węższe marginesy boczne */
@media (max-width: 24rem) {
    .shell,
    .hero__grid,
    .site-header__bar,
    .site-header__strip-inner {
        padding-inline: 1.1rem;
    }
}

@media (max-width: 47.99rem) {
    /* Nagłówek hero: niżej zaczyna skalowanie, żeby nie łamał się brzydko */
    .hero__title {
        font-size: clamp(2.1rem, 9.5vw, 3.4rem);
        letter-spacing: -0.03em;
    }

    .hero {
        padding-block: calc(var(--header-h) + 3rem) 3rem;
    }

    .hero__grid {
        gap: 2.75rem;
    }

    /* Przyciski w hero na pełną szerokość — większy i pewniejszy cel */
    .hero__actions {
        flex-direction: column;
        align-items: stretch;
    }

    .hero__actions .btn {
        width: 100%;
    }

    /* Karty kategorii bez przesunięcia — na wąskim ekranie tylko przeszkadza */
    .hero-cat:nth-child(even) {
        margin-left: 0;
    }

    .hero__panel-note {
        margin-left: 0;
    }

    /* Sekcje: mniej pionowego zapasu */
    .cat-section {
        padding-block: 5.5rem 4rem;
    }

    .faq-section,
    .reviews-section {
        padding-block: 4.5rem;
    }

    .steps-section {
        padding-top: 4.5rem;
        padding-bottom: 1rem;
    }

    .steps {
        gap: 2.5rem;
        margin-top: 3rem;
    }

    /* FAQ: pytania bliżej krawędzi, numer nad treścią gdy brak miejsca */
    .faq-q {
        gap: 0.7rem;
    }

    .faq-aside__cta .btn {
        width: 100%;
    }

    /* Stopka i nagłówek: logo nieco mniejsze */
    .akco-logo__mark {
        height: 1.55rem;
    }
}

/*
 * Cele dotykowe. Dotyczy tylko urządzeń bez precyzyjnego wskaźnika —
 * na desktopie mniejsze przyciski są w porządku.
 */
@media (pointer: coarse) {
    .icon-btn,
    .mnav__close,
    .site-header__burger,
    .shot-view__close {
        min-width: 2.75rem;
        min-height: 2.75rem;
    }

    .btn--sm {
        padding: 0.7rem 1.1rem;
    }

    .cat-filter__item {
        padding: 0.7rem 1rem;
    }

    /* Linki w listach: wyższy wiersz = łatwiejsze trafienie */
    .mnav__sub-link {
        padding-block: 0.85rem;
    }

    .faq-list [data-faq-trigger] {
        padding-block: 1.4rem;
    }
}

/* Nic nie ma prawa rozpychać strony w poziomie */
img,
svg,
video,
table {
    max-width: 100%;
}

/* Długie adresy e-mail i URL-e łamią się, zamiast rozciągać układ */
.msg__meta dd,
.review__quote,
.table__sub,
.prod-card__desc {
    overflow-wrap: anywhere;
}

/* ============================================================================
   22. SKRZYNKA WIADOMOŚCI w panelu
   ========================================================================= */

/* Wiersz nieprzeczytanej wiadomości — wyraźnie odróżniony */
.table tbody tr[data-unread='true'] {
    background: rgba(201, 162, 39, 0.05);
}

.table tbody tr[data-unread='true'] .table__name {
    font-weight: 750;
}

.table tbody tr[data-unread='true'] .table__name::before {
    content: '';
    display: inline-block;
    width: 0.4rem;
    height: 0.4rem;
    margin-right: 0.5rem;
    border-radius: 50%;
    background: var(--gold-400);
    vertical-align: middle;
}

/* Licznik nieprzeczytanych w nawigacji panelu */
.adm__nav-count--alert {
    background: var(--gold-500);
    color: var(--ink-950);
    font-weight: 700;
}

/* --- Widok pojedynczej wiadomości --- */
.msg {
    display: grid;
    gap: 1.25rem;
}

@media (min-width: 60rem) {
    .msg {
        grid-template-columns: minmax(0, 7fr) minmax(0, 4fr);
        gap: 1.5rem;
        align-items: start;
    }
}

.msg__head {
    display: flex;
    align-items: center;
    gap: 0.9rem;
    padding: 1.25rem;
    border-bottom: 1px solid var(--line);
}

.msg__avatar {
    display: grid;
    place-items: center;
    width: 2.75rem;
    height: 2.75rem;
    flex-shrink: 0;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--gold-300), var(--gold-600));
    color: var(--ink-950);
    font-size: 1rem;
    font-weight: 700;
}

.msg__who {
    min-width: 0;
}

.msg__name {
    margin: 0;
    font-size: 1.05rem;
    font-weight: 700;
    color: var(--fg);
    line-height: 1.25;
}

.msg__when {
    margin: 0.2rem 0 0;
    font-size: 0.78rem;
    color: var(--fg-30);
}

.msg__body {
    padding: 1.25rem;
}

/* Treść wiadomości — zachowuje łamanie linii wpisane przez nadawcę */
.msg__text {
    margin: 0;
    font-size: 0.95rem;
    line-height: 1.75;
    color: var(--fg-70);
    white-space: pre-line;
    overflow-wrap: anywhere;
}

.msg__none {
    margin: 0;
    font-size: 0.9rem;
    font-style: italic;
    color: var(--fg-30);
}

/* Dane kontaktowe jako lista par */
.msg__meta {
    margin: 0;
    padding: 0;
    display: grid;
    gap: 1px;
    background: var(--line);
}

.msg__meta > div {
    display: grid;
    gap: 0.25rem;
    padding: 0.9rem 1.25rem;
    background: var(--ink-900);
}

.msg__meta dt {
    font-size: 0.66rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    color: var(--fg-30);
}

.msg__meta dd {
    margin: 0;
    font-size: 0.92rem;
    color: var(--fg);
    overflow-wrap: anywhere;
}

.msg__meta dd a {
    color: var(--gold-300);
    text-decoration: none;
}

.msg__meta dd a:hover {
    text-decoration: underline;
    text-underline-offset: 3px;
}

.msg__nav {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-top: 1.5rem;
}

/* ============================================================================
   24. PARALAKSA w prawej kolumnie hero

   Kilka planów o różnej głębi w jednej perspektywie. Ruch składa się z dwóch
   źródeł: pozycji kursora (przechył całej sceny) i przewinięcia strony
   (dryf pionowy). Każda warstwa ma własny mnożnik, więc plany rozjeżdżają się
   względem siebie — to daje wrażenie głębi, a nie płaskiego przesuwania.

   Sterowanie w JS przez zmienne --px/--py/--sy; CSS tylko je konsumuje,
   dzięki czemu wszystko idzie po transformach (bez reflow).
   ========================================================================= */

.plx {
    position: relative;
    aspect-ratio: 1 / 1;
    max-width: 30rem;
    margin-inline: auto;
    /* Perspektywa na kontenerze — dzieci przechylają się w 3D */
    perspective: 1100px;
    perspective-origin: 50% 45%;
}

.plx__stage {
    position: absolute;
    inset: 0;
    transform-style: preserve-3d;
    /* Przechył sceny zależny od kursora */
    transform: rotateX(calc(var(--py, 0) * -7deg)) rotateY(calc(var(--px, 0) * 9deg));
    transition: transform 0.45s var(--ease);
    will-change: transform;
}

.plx__layer {
    position: absolute;
    inset: 0;
    display: grid;
    place-items: center;
    pointer-events: none;
    /*
     * --d = głębia warstwy (ujemna = dalej). Im głębiej, tym mniejszy ruch
     * od kursora i większy dryf od scrolla — odwrotnie niż w typowej
     * paralaksie, co daje mniej oczywisty efekt.
     */
    transform: translate3d(
            calc(var(--px, 0) * var(--d, 0) * 26px),
            calc(var(--py, 0) * var(--d, 0) * 22px + var(--sy, 0) * var(--dz, 1) * 56px),
            0
        )
        scale(calc(1 + var(--dz, 0) * 0.04));
    will-change: transform;
}

/* --- Plan najdalszy: poświata --- */
.plx__glow {
    width: 100%;
    height: 100%;
    border-radius: 58% 42% 51% 49% / 47% 54% 46% 53%;
    background: radial-gradient(circle at 42% 38%, rgba(201, 162, 39, 0.42), transparent 66%);
    filter: blur(46px);
}

/* --- Pierścienie: cienkie, obracające się wolno --- */
.plx__rings {
    width: 86%;
    height: 86%;
}

.plx__ring {
    position: absolute;
    inset: 0;
    margin: auto;
    border-radius: 50%;
    border: 1px solid rgba(201, 162, 39, 0.22);
}

.plx__ring--a {
    width: 100%;
    height: 100%;
    border-style: dashed;
    animation: plx-spin 78s linear infinite;
}

.plx__ring--b {
    width: 72%;
    height: 72%;
    border-color: rgba(255, 255, 255, 0.08);
    animation: plx-spin 54s linear infinite reverse;
}

.plx__ring--c {
    width: 46%;
    height: 46%;
    border-color: rgba(201, 162, 39, 0.3);
}

@keyframes plx-spin {
    to {
        transform: rotate(360deg);
    }
}

/* --- Znak AKCO jako środek kompozycji --- */
.plx__mark {
    width: 58%;
    color: rgba(255, 255, 255, 0.9);
    filter: drop-shadow(0 18px 40px rgba(0, 0, 0, 0.6));
}

.plx__mark svg {
    display: block;
    width: 100%;
    height: auto;
}

/* --- Ikony kategorii rozrzucone na różnych planach --- */
.plx__chip {
    position: absolute;
    display: grid;
    place-items: center;
    width: 3.4rem;
    height: 3.4rem;
    border-radius: var(--r-md);
    border: 1px solid var(--line-strong);
    background: linear-gradient(140deg, rgba(20, 20, 23, 0.95), rgba(10, 10, 12, 0.85));
    backdrop-filter: blur(6px);
    color: var(--gold-300);
    box-shadow: 0 14px 34px -16px rgba(0, 0, 0, 0.8);
}

.plx__chip svg {
    width: 1.5rem;
    height: 1.5rem;
}

/* Rozmieszczenie: celowo nieregularne, poza siatką */
.plx__chip:nth-child(1) {
    top: 6%;
    left: 10%;
}

.plx__chip:nth-child(2) {
    top: 22%;
    right: 4%;
}

.plx__chip:nth-child(3) {
    bottom: 16%;
    left: 2%;
}

.plx__chip:nth-child(4) {
    bottom: 5%;
    right: 18%;
}

/* --- Drobne iskry na pierwszym planie --- */
.plx__spark {
    position: absolute;
    width: 0.35rem;
    height: 0.35rem;
    border-radius: 50%;
    background: var(--gold-300);
    box-shadow: 0 0 12px rgba(230, 201, 110, 0.8);
    opacity: 0.7;
}

.plx__spark:nth-child(1) {
    top: 14%;
    right: 26%;
}

.plx__spark:nth-child(2) {
    bottom: 28%;
    left: 22%;
}

.plx__spark:nth-child(3) {
    top: 46%;
    right: 8%;
    width: 0.25rem;
    height: 0.25rem;
}

/* --- Refleks wodzony kursorem po znaku --- */
.plx__shine {
    position: absolute;
    inset: 0;
    background: radial-gradient(
        12rem circle at calc(50% + var(--px, 0) * 40%) calc(45% + var(--py, 0) * 40%),
        rgba(255, 255, 255, 0.14),
        transparent 62%
    );
    mix-blend-mode: screen;
}

/* Na telefonie paralaksa robi się mniejsza i bez przechyłu */
@media (max-width: 47.99rem) {
    .plx {
        max-width: 20rem;
    }

    .plx__stage {
        transform: none;
    }

    .plx__chip {
        width: 2.75rem;
        height: 2.75rem;
    }

    .plx__chip svg {
        width: 1.2rem;
        height: 1.2rem;
    }
}

@media (prefers-reduced-motion: reduce) {
    .plx__stage {
        transform: none;
    }

    .plx__layer {
        transform: none;
    }

    .plx__ring--a,
    .plx__ring--b {
        animation: none;
    }

    .plx__shine {
        display: none;
    }
}

/* ============================================================================
   20. STATYSTYKI pod hero — wyśrodkowane, czytelne na telefonie
   ========================================================================= */

.stats {
    padding-block: 3.5rem 0;
}

.stats__grid {
    display: grid;
    /* Na telefonie dwie kolumny — cztery jedna pod drugą to za długa kolumna */
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 2.25rem 1rem;
    margin: 0;
    text-align: center;
}

@media (min-width: 48rem) {
    .stats__grid {
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: 1.5rem;
    }
}

@media (min-width: 64rem) {
    .stats {
        padding-block: 4.5rem 0;
    }
}

.stats__item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.5rem;
    min-width: 0;
}

.stats__value {
    display: block;
    font-size: clamp(1.75rem, 6vw, 2.6rem);
    font-weight: 800;
    letter-spacing: -0.03em;
    line-height: 1;
    /* Cyfry o równej szerokości — licznik nie skacze przy animacji */
    font-variant-numeric: tabular-nums;
    background: linear-gradient(96deg, var(--gold-200), var(--gold-400) 42%, var(--gold-600));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.stats__label {
    display: block;
    /* dd ma domyślny margines w przeglądarce — zdejmujemy */
    margin: 0;
    font-size: 0.8rem;
    line-height: 1.45;
    color: var(--fg-45);
    text-wrap: balance;
}

/* Cienka kreska między kolumnami na szerszych ekranach */
@media (min-width: 48rem) {
    .stats__item + .stats__item {
        border-left: 1px solid var(--line);
    }
}

/* ============================================================================
   19. OPINIE — zrzuty ekranu z Vinted / Google

   Screeny mają różne proporcje, więc siatka jest kolumnowa (CSS columns),
   a nie grid — karty układają się bez dziur, jak w murze.
   ========================================================================= */

.reviews-section {
    padding-block: 7rem;
}

.reviews-grid {
    margin-top: 3.5rem;
    columns: 1;
    column-gap: 1.25rem;
}

@media (min-width: 40rem) {
    .reviews-grid {
        columns: 2;
    }
}

@media (min-width: 64rem) {
    .reviews-grid {
        columns: 3;
    }
}

.review {
    /* break-inside zapobiega rozerwaniu karty między kolumnami */
    break-inside: avoid;
    margin-bottom: 1.25rem;
    border-radius: var(--r-lg);
    border: 1px solid var(--line);
    background: linear-gradient(170deg, var(--ink-850), var(--ink-900));
    overflow: hidden;
    transition: border-color var(--t-mid) var(--ease), transform var(--t-mid) var(--ease);
}

.review:hover {
    border-color: var(--line-gold);
    transform: translateY(-3px);
}

/* Zrzut ekranu — klikalny, otwiera podgląd */
.review__shot {
    display: block;
    width: 100%;
    padding: 0;
    border: 0;
    background: none;
    cursor: zoom-in;
    position: relative;
    line-height: 0;
}

.review__shot img {
    display: block;
    width: 100%;
    height: auto;
}

/* Delikatna lupa w narożniku, pojawia się przy hoverze */
.review__zoom {
    position: absolute;
    right: 0.6rem;
    bottom: 0.6rem;
    display: grid;
    place-items: center;
    width: 2rem;
    height: 2rem;
    border-radius: var(--r-sm);
    background: rgba(5, 5, 6, 0.8);
    border: 1px solid var(--line-strong);
    color: var(--gold-300);
    opacity: 0;
    transition: opacity var(--t-mid) var(--ease);
}

.review__zoom svg {
    width: 0.95rem;
    height: 0.95rem;
}

.review:hover .review__zoom {
    opacity: 1;
}

.review__body {
    padding: 1.1rem 1.15rem;
}

.review__head {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    flex-wrap: wrap;
}

/* Plakietka źródła */
.review__source {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.25rem 0.6rem;
    border-radius: var(--r-full);
    border: 1px solid var(--line-gold);
    background: rgba(201, 162, 39, 0.09);
    font-size: 0.68rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--gold-200);
}

.review__source svg {
    width: 0.75rem;
    height: 0.75rem;
}

/* Ocena gwiazdkami */
.review__stars {
    display: inline-flex;
    gap: 0.1rem;
    color: var(--gold-400);
}

.review__stars svg {
    width: 0.85rem;
    height: 0.85rem;
}

.review__stars .is-off {
    color: var(--fg-faint);
}

.review__quote {
    margin: 0.85rem 0 0;
    font-size: 0.92rem;
    line-height: 1.7;
    color: var(--fg-55);
}

.review__author {
    margin: 0.7rem 0 0;
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--fg-30);
}

/* --- Podgląd pełnoekranowy screenów --- */
.shot-view {
    position: fixed;
    inset: 0;
    z-index: 300;
    display: grid;
    place-items: center;
    padding: 1.5rem;
    background: rgba(5, 5, 6, 0.9);
    backdrop-filter: blur(10px);
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--t-mid) var(--ease), visibility var(--t-mid) linear;
}

.shot-view[data-open='true'] {
    opacity: 1;
    visibility: visible;
}

.shot-view img {
    max-width: min(60rem, 100%);
    max-height: 88vh;
    width: auto;
    height: auto;
    border-radius: var(--r-md);
    border: 1px solid var(--line-strong);
    box-shadow: var(--sh-panel);
    transform: scale(0.97);
    transition: transform var(--t-mid) var(--ease);
}

.shot-view[data-open='true'] img {
    transform: scale(1);
}

.shot-view__close {
    position: absolute;
    top: 1.25rem;
    right: 1.25rem;
    display: grid;
    place-items: center;
    width: 2.75rem;
    height: 2.75rem;
    border-radius: var(--r-md);
    border: 1px solid var(--line-strong);
    background: rgba(10, 10, 12, 0.85);
    color: var(--fg);
    cursor: pointer;
    transition: color var(--t-fast) var(--ease), transform var(--t-mid) var(--ease);
}

.shot-view__close:hover {
    color: var(--gold-300);
    transform: rotate(90deg);
}

.shot-view__close svg {
    width: 1.2rem;
    height: 1.2rem;
}

/* ============================================================================
   18. FAQ — układ dwukolumnowy, lista zamiast pudełek

   Zachowuje hooki JS z resources/js/app.js (.faq-item, [data-faq-trigger],
   .faq-panel, .faq-chevron, data-open) oraz animację grid-template-rows
   z builda Tailwinda — zmieniamy tylko warstwę wizualną.
   ========================================================================= */

.faq-section {
    padding-block: 7rem;
}

.faq-layout {
    display: grid;
    gap: 3rem;
}

@media (min-width: 64rem) {
    .faq-layout {
        /* Asymetria: węższa kolumna opisowa, szersza lista pytań */
        grid-template-columns: minmax(0, 4fr) minmax(0, 7fr);
        gap: 5rem;
        align-items: start;
    }

    .faq-aside {
        position: sticky;
        top: 8rem;
    }
}

.faq-aside__title {
    margin: 1.4rem 0 0;
    font-size: clamp(1.9rem, 3.6vw, 2.75rem);
    font-weight: 800;
    line-height: 1.08;
    letter-spacing: -0.03em;
    color: var(--fg);
}

.faq-aside__text {
    margin: 1.15rem 0 0;
    font-size: 0.95rem;
    line-height: 1.7;
    color: var(--fg-55);
}

.faq-aside__cta {
    margin-top: 1.9rem;
}

/* --- Lista --- */
.faq-list {
    display: grid;
}

/* Każde pytanie to wiersz listy z cienką kreską, nie karta w ramce */
.faq-list .faq-item {
    position: relative;
    border: 0;
    border-top: 1px solid var(--line);
    border-radius: 0;
    background: none;
    transition: border-color var(--t-mid) var(--ease);
}

.faq-list .faq-item:last-child {
    border-bottom: 1px solid var(--line);
}

.faq-list .faq-item[data-open='true'] {
    border-top-color: var(--gold-500);
}

.faq-list [data-faq-trigger] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1.5rem;
    width: 100%;
    padding: 1.6rem 0;
    background: none;
    border: 0;
    text-align: left;
    cursor: pointer;
    font-family: inherit;
    transition: padding-left var(--t-mid) var(--ease);
}

.faq-list [data-faq-trigger]:hover {
    padding-left: 0.5rem;
}

.faq-q {
    display: flex;
    align-items: baseline;
    gap: 1rem;
    min-width: 0;
}

/* Numer pytania — element typograficzny */
.faq-q__num {
    flex-shrink: 0;
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    color: var(--gold-500);
    font-variant-numeric: tabular-nums;
}

.faq-q__text {
    font-size: clamp(1rem, 1.7vw, 1.15rem);
    font-weight: 650;
    line-height: 1.4;
    letter-spacing: -0.01em;
    color: var(--fg);
}

/* Znacznik rozwinięcia: plus zmieniający się w minus, bez ramki */
.faq-list .faq-chevron {
    flex-shrink: 0;
    display: grid;
    place-items: center;
    width: 1.75rem;
    height: 1.75rem;
    margin-top: 0.15rem;
    border: 0;
    border-radius: 0;
    background: none;
    color: var(--gold-400);
    position: relative;
}

/* Ukrywamy ikonę z Blade — rysujemy plus dwiema kreskami */
.faq-list .faq-chevron svg {
    display: none;
}

.faq-list .faq-chevron::before,
.faq-list .faq-chevron::after {
    content: '';
    position: absolute;
    background: currentColor;
    transition: transform var(--t-mid) var(--ease), opacity var(--t-mid) var(--ease);
}

.faq-list .faq-chevron::before {
    width: 0.95rem;
    height: 1.5px;
}

.faq-list .faq-chevron::after {
    width: 1.5px;
    height: 0.95rem;
}

/* Otwarte: pionowa kreska znika, zostaje minus */
.faq-list .faq-item[data-open='true'] .faq-chevron {
    transform: none;
}

.faq-list .faq-item[data-open='true'] .faq-chevron::after {
    transform: rotate(90deg);
    opacity: 0;
}

/* --- Odpowiedź --- */
.faq-a {
    padding: 0 0 1.75rem;
    max-width: 44rem;
}

.faq-a > p {
    margin: 0;
    font-size: 0.97rem;
    line-height: 1.75;
    color: var(--fg-55);
}

.faq-a__points {
    margin: 1.15rem 0 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: 0.9rem;
}

.faq-a__points li {
    position: relative;
    padding-left: 1.5rem;
    font-size: 0.95rem;
    line-height: 1.7;
    color: var(--fg-55);
}

/* Znacznik punktu: kreska, nie kropka */
.faq-a__points li::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0.82em;
    width: 0.85rem;
    height: 1px;
    background: var(--gold-600);
}

.faq-a__points strong {
    font-weight: 650;
    color: var(--fg);
}

.faq-foot {
    margin-top: 2.5rem;
    font-size: 0.9rem;
    color: var(--fg-45);
}

.faq-foot a {
    color: var(--gold-300);
    font-weight: 600;
    text-decoration: none;
}

.faq-foot a:hover {
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* ============================================================================
   17. KROKI — układ edytorski, asymetryczny, bez ramek

   Zamiast trzech identycznych kart w ramkach: duży numer, cienka linia
   i tekst. Kolumny są przesunięte w pionie, żeby złamać siatkę.
   ========================================================================= */

/* Padding sekcji trzymamy w CSS, nie w style="" w widoku —
   inaczej nadpisania pod telefony wymagałyby !important. */
.steps-section {
    padding-top: 6rem;
}

.steps {
    display: grid;
    gap: 3rem;
    margin-top: 4rem;
}

@media (min-width: 60rem) {
    .steps {
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: 2.5rem;
        margin-top: 5rem;
    }

    /* Schodkowe przesunięcie — środkowa kolumna niżej, trzecia jeszcze niżej */
    .steps__item:nth-child(2) {
        transform: translateY(3rem);
    }

    .steps__item:nth-child(3) {
        transform: translateY(6rem);
    }
}

.steps__item {
    position: relative;
    padding-top: 2rem;
    border-top: 1px solid var(--line);
    transition: border-color var(--t-mid) var(--ease);
}

.steps__item:hover {
    border-top-color: var(--gold-500);
}

/* Numer jako element typograficzny, nie plakietka */
.steps__num {
    display: block;
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.24em;
    color: var(--gold-500);
}

.steps__icon {
    display: inline-grid;
    place-items: center;
    width: 3rem;
    height: 3rem;
    margin-top: 1.6rem;
    border-radius: var(--r-md);
    color: var(--gold-300);
    background: rgba(201, 162, 39, 0.09);
    transition: background var(--t-mid) var(--ease), transform var(--t-mid) var(--ease);
}

.steps__icon svg {
    width: 1.4rem;
    height: 1.4rem;
}

.steps__item:hover .steps__icon {
    background: rgba(201, 162, 39, 0.18);
    transform: translateY(-3px);
}

.steps__title {
    margin: 1.5rem 0 0;
    font-size: clamp(1.25rem, 2.2vw, 1.6rem);
    font-weight: 750;
    letter-spacing: -0.02em;
    line-height: 1.2;
    color: var(--fg);
}

.steps__text {
    margin: 0.85rem 0 0;
    font-size: 0.95rem;
    line-height: 1.7;
    color: var(--fg-55);
}

/* Na desktopie przesunięcie kolumn zwiększa wysokość sekcji */
@media (min-width: 60rem) {
    .steps-section {
        padding-bottom: 12rem;
    }
}

@media (prefers-reduced-motion: reduce) {
    .steps__item:nth-child(2),
    .steps__item:nth-child(3) {
        transform: none;
    }

    /* Bez przesunięcia kolumn dolny zapas nie jest już potrzebny. */
    .steps-section {
        padding-bottom: 6rem;
    }
}

/* ============================================================================
   16. PASEK PRZEWIJANY (marquee) — własna implementacja
   ========================================================================= */

.ticker {
    position: relative;
    overflow: hidden;
    padding-block: 1.6rem;
    /* Powietrze nad paskiem — pod nim odstęp daje .cat-section */
    margin-top: 4rem;
    border-block: 1px solid var(--line);
    background: rgba(10, 10, 12, 0.5);
    -webkit-mask-image: linear-gradient(90deg, transparent, black 7%, black 93%, transparent);
    mask-image: linear-gradient(90deg, transparent, black 7%, black 93%, transparent);
}

.ticker__track {
    display: flex;
    width: max-content;
    /*
     * Przesuwamy się dokładnie o szerokość JEDNEJ kopii listy, a nie o -50%
     * szerokości toru. Wcześniej było -50%: przy dwóch kopiach węższych niż
     * okno (np. 2204 px toru na monitorze 1920 px) po przesunięciu zostawała
     * pusta przestrzeń po prawej i kategorie znikały.
     * Szerokość kopii i czas trwania wylicza JS (stała prędkość), a --ticker-w
     * ma awaryjną wartość 50% na wypadek braku JS.
     */
    animation: ticker-run var(--ticker-dur, 42s) linear infinite;
}

.ticker:hover .ticker__track,
.ticker:focus-within .ticker__track {
    animation-play-state: paused;
}

@keyframes ticker-run {
    from {
        transform: translate3d(0, 0, 0);
    }
    to {
        transform: translate3d(calc(-1 * var(--ticker-w, 50%)), 0, 0);
    }
}

.ticker__item {
    display: flex;
    align-items: center;
    gap: 2.4rem;
    padding-inline: 1.2rem;
    white-space: nowrap;
    font-size: 0.8rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.24em;
    color: var(--fg-45);
}

/* Separator: cienka kreska zamiast obróconego kwadratu */
.ticker__item::after {
    content: '';
    width: 1.75rem;
    height: 1px;
    background: var(--gold-600);
    flex-shrink: 0;
}

@media (prefers-reduced-motion: reduce) {
    .ticker__track {
        animation: none;
        /* Bez ruchu pokazujemy tylko pierwszą kopię, wyśrodkowaną */
        width: 100%;
        justify-content: center;
        flex-wrap: wrap;
        gap: 0.5rem 0;
    }

    .ticker__track > .ticker__copy:nth-child(2) {
        display: none;
    }
}

/* --- Organiczne przejście na dole hero --- */
.hero__curve {
    position: absolute;
    inset: auto 0 -1px 0;
    z-index: -1;
    width: 100%;
    height: 5rem;
    color: var(--ink-900);
    pointer-events: none;
}

.hero__curve svg {
    display: block;
    width: 100%;
    height: 100%;
}

@media (prefers-reduced-motion: reduce) {
    .hero__blob {
        animation: none;
    }
}

/* ============================================================================
   24. FORMULARZ KONTAKTOWY

   Wcześniej pola i przycisk stały na klasach Tailwinda. Przeniesione tutaj,
   bo bez Node'a nie da się dobudować nowych klas, a formularz wymagał
   realnej roboty: większe cele dotykowe, 16 px w polach (poniżej tej
   wartości iOS przy focusie przybliża całą stronę) i przycisk, który
   wygląda jak główna akcja strony, a nie jak zwykły pasek.
   ========================================================================= */

.cform {
    display: grid;
    gap: 1.1rem;
}

@media (min-width: 40rem) {
    .cform {
        grid-template-columns: 1fr 1fr;
        gap: 1.15rem 1rem;
    }
}

.cform__wide {
    grid-column: 1 / -1;
}

/* --- Pole --- */

.cfield {
    display: grid;
    gap: 0.45rem;
    min-width: 0;
}

.cfield__label {
    font-size: 0.8125rem;
    font-weight: 500;
    color: var(--fg-55);
    letter-spacing: -0.005em;
}

.cfield__req {
    color: var(--gold-400);
}

.cinput {
    width: 100%;
    /* 1rem = 16 px — próg, poniżej którego iOS przybliża stronę przy focusie */
    font-size: 1rem;
    line-height: 1.4;
    color: var(--fg);
    background: rgba(255, 255, 255, 0.025);
    border: 1px solid var(--line);
    border-radius: var(--r-md);
    padding: 0.85rem 1rem;
    -webkit-appearance: none;
    appearance: none;
    transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease),
        box-shadow var(--t-fast) var(--ease);
}

.cinput::placeholder {
    color: var(--fg-faint);
}

.cinput:hover {
    border-color: var(--line-strong);
}

.cinput:focus {
    outline: none;
    border-color: rgba(201, 162, 39, 0.55);
    background: rgba(201, 162, 39, 0.04);
    box-shadow: 0 0 0 3px rgba(201, 162, 39, 0.14);
}

.cinput:focus-visible {
    outline: none;
}

textarea.cinput {
    resize: vertical;
    min-height: 7rem;
}

/* Select — własna strzałka, bo systemowa na Androidzie bywa biała na białym */
select.cinput {
    padding-right: 2.75rem;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23d9b445' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 1rem center;
    background-size: 1.05rem;
    cursor: pointer;
}

select.cinput option {
    background: var(--ink-850);
    color: var(--fg);
}

.cfield__error {
    font-size: 0.75rem;
    color: #fca5a5;
}

/* --- Zgoda --- */

.cconsent {
    display: flex;
    align-items: flex-start;
    gap: 0.75rem;
    font-size: 0.8125rem;
    line-height: 1.6;
    color: var(--fg-45);
    cursor: pointer;
}

.cconsent input {
    flex-shrink: 0;
    width: 1.15rem;
    height: 1.15rem;
    margin: 0.15rem 0 0;
    border: 1px solid var(--line-strong);
    border-radius: 0.3rem;
    background: rgba(255, 255, 255, 0.03);
    -webkit-appearance: none;
    appearance: none;
    cursor: pointer;
    transition: background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);
}

.cconsent input:checked {
    background: var(--gold-500)
        url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23050506' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E")
        center / 0.8rem no-repeat;
    border-color: var(--gold-500);
}

.cconsent input:focus-visible {
    outline: 2px solid var(--gold-400);
    outline-offset: 2px;
}

/* --- Przycisk wysyłki --- */

.cform__foot {
    grid-column: 1 / -1;
    display: grid;
    gap: 0.85rem;
    justify-items: center;
    margin-top: 0.35rem;
}

.send-btn {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    width: 100%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.7rem;
    min-height: 3.5rem;
    padding: 0 1.5rem;
    border: 0;
    border-radius: var(--r-full);
    font-family: inherit;
    font-size: 1rem;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--ink-950);
    background: linear-gradient(135deg, #f4e4b0 0%, var(--gold-400) 42%, var(--gold-500) 72%, var(--gold-600) 100%);
    box-shadow: 0 12px 34px -16px rgba(201, 162, 39, 0.75), inset 0 1px 0 rgba(255, 255, 255, 0.5);
    cursor: pointer;
    transition: transform var(--t-fast) var(--ease), box-shadow var(--t-mid) var(--ease),
        filter var(--t-mid) var(--ease);
}

@media (min-width: 40rem) {
    .send-btn {
        width: auto;
        min-width: 17rem;
        padding-inline: 2.25rem;
    }
}

.send-btn__label {
    position: relative;
    z-index: 1;
}

/* Strzałka w kółku — sygnał, że to jedzie dalej, nie sama ikonka */
.send-btn__chip {
    position: relative;
    z-index: 1;
    display: grid;
    place-items: center;
    width: 1.85rem;
    height: 1.85rem;
    border-radius: var(--r-full);
    background: rgba(5, 5, 6, 0.14);
    transition: transform var(--t-mid) var(--ease), background var(--t-mid) var(--ease);
}

.send-btn__chip svg {
    width: 0.95rem;
    height: 0.95rem;
}

/* Błysk przejeżdżający przy najechaniu */
.send-btn::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(115deg, transparent 36%, rgba(255, 255, 255, 0.55) 50%, transparent 64%);
    transform: translateX(-130%);
    transition: transform 0.75s var(--ease);
}

@media (hover: hover) and (pointer: fine) {
    .send-btn:hover {
        transform: translateY(-2px);
        box-shadow: 0 20px 48px -18px rgba(201, 162, 39, 0.85), inset 0 1px 0 rgba(255, 255, 255, 0.55);
    }

    .send-btn:hover::after {
        transform: translateX(130%);
    }

    .send-btn:hover .send-btn__chip {
        transform: translateX(3px);
        background: rgba(5, 5, 6, 0.22);
    }
}

.send-btn:active {
    transform: translateY(1px) scale(0.995);
    box-shadow: 0 8px 22px -14px rgba(201, 162, 39, 0.7), inset 0 1px 0 rgba(255, 255, 255, 0.4);
}

.send-btn:focus-visible {
    outline: 2px solid var(--gold-200);
    outline-offset: 3px;
}

/* Stan wysyłki — blokuje dubla i pokazuje, że coś się dzieje */
.send-btn[data-sending] {
    pointer-events: none;
    filter: saturate(0.85);
}

.send-btn[data-sending] .send-btn__chip svg {
    display: none;
}

.send-btn[data-sending] .send-btn__chip::before {
    content: '';
    width: 0.95rem;
    height: 0.95rem;
    border-radius: 50%;
    border: 2px solid rgba(5, 5, 6, 0.28);
    border-top-color: var(--ink-950);
    animation: send-spin 0.65s linear infinite;
}

@keyframes send-spin {
    to {
        transform: rotate(360deg);
    }
}

.cform__note {
    margin: 0;
    font-size: 0.75rem;
    color: var(--fg-30);
    text-align: center;
}

/* Potwierdzenie po wysłaniu */
.cform__status {
    display: flex;
    align-items: flex-start;
    gap: 0.75rem;
    margin-bottom: 1.6rem;
    padding: 1rem 1.15rem;
    border: 1px solid var(--line-gold);
    border-radius: var(--r-lg);
    background: rgba(201, 162, 39, 0.1);
    color: var(--gold-100);
    font-size: 0.875rem;
    line-height: 1.55;
}

.cform__status svg {
    width: 1.05rem;
    height: 1.05rem;
    margin-top: 0.15rem;
    flex-shrink: 0;
    color: var(--gold-300);
}

@media (prefers-reduced-motion: reduce) {
    .send-btn,
    .send-btn::after,
    .send-btn__chip {
        transition: none;
    }

    .send-btn::after {
        display: none;
    }
}

/* ============================================================================
   25. TELEFON — RYTM, CZYTELNOŚĆ I PŁYNNOŚĆ

   Blok świadomie na samym końcu pliku: ma nadpisywać zarówno Tailwinda
   z builda Vite, jak i wcześniejsze reguły tego pliku.

   Trzy rzeczy, po kolei:
   a) odstępy — 12 sekcji po 96 px na 6-calowym ekranie to samo przewijanie,
   b) czytelność — nic poniżej 12,5 px, cele dotykowe min. 44 px,
   c) płynność — rozmycia (`filter: blur`, `backdrop-filter`) są na GPU
      telefonu najdroższą rzeczą na stronie; przy scrollu i przy otwieraniu
      menu każda taka warstwa kosztuje klatki. Zostawiamy efekt, ścinamy
      promień; tam gdzie warstwa i tak jest nieprzezroczysta — wyłączamy.
   ========================================================================= */

/* --- a) Rytm pionowy ---------------------------------------------------- */

@media (max-width: 47.99rem) {
    /* Sekcje strony głównej stoją na Tailwindowym py-24 (96 px) */
    .py-24 {
        padding-block: 4.25rem;
    }

    .py-16 {
        padding-block: 3.25rem;
    }

    .mt-24 {
        margin-top: 3rem;
    }

    .mt-20,
    .mt-16 {
        margin-top: 2.5rem;
    }

    .mt-14 {
        margin-top: 2.25rem;
    }

    .mt-12,
    .mt-10 {
        margin-top: 2rem;
    }

    .gap-20 {
        gap: 2.75rem;
    }

    .gap-14,
    .gap-12 {
        gap: 2.5rem;
    }

    /*
     * Na telefonie pasek informacyjny nad nagłówkiem jest ukryty (u-only-lg),
     * więc realna wysokość nagłówka to ~3,4 rem, a nie 4,75. Zmienna sterowała
     * górnym zapasem hero i lądowaniem kotwic — obie rzeczy miały przez to
     * nadmiar pustego miejsca.
     */
    :root {
        --header-h: 3.4rem;
    }

    html {
        scroll-padding-top: calc(var(--header-h) + 1rem);
    }
}

/* Karty: 2,5 rem paddingu na ekranie 360 px zjada połowę szerokości.
   Granica 40 rem, żeby nie deptać Tailwindowym wariantom `sm:`. */
@media (max-width: 39.99rem) {
    .p-10,
    .p-8 {
        padding: 1.5rem;
    }

    .p-7 {
        padding: 1.35rem;
    }

    .p-6 {
        padding: 1.25rem;
    }
}

/* --- b) Czytelność i cele dotykowe -------------------------------------- */

@media (max-width: 47.99rem) {
    /* Drobne nadnagłówki i przypisy — 11–12 px na telefonie jest za mało */
    .text-\[11px\] {
        font-size: 0.75rem;
    }

    .text-\[12px\] {
        font-size: 0.8125rem;
    }

    .text-\[13px\] {
        font-size: 0.85rem;
    }

    /* Rozstrzelone wersaliki przy tej wielkości robią się nieczytelne */
    .tracking-\[0\.18em\] {
        letter-spacing: 0.12em;
    }

    .tracking-\[0\.14em\] {
        letter-spacing: 0.1em;
    }
}

@media (pointer: coarse) {
    /* Link w treści to też cel dotykowy — minimum wysokości wiersza */
    .cconsent {
        padding-block: 0.25rem;
    }

    /* Usuwa 300 ms opóźnienia tapnięcia tam, gdzie jeszcze bywa */
    a,
    button,
    label,
    summary,
    [role='button'] {
        touch-action: manipulation;
    }
}

/* --- c) Płynność: mniej rozmyć na telefonie ----------------------------- */

@media (max-width: 63.99rem) {
    /*
     * Dekoracyjne plamy w tle sekcji (Tailwind: blur-[130px] / blur-[140px]).
     * Nadpisujemy zmienną, a nie cały `filter`, żeby nie zerwać łańcucha
     * pozostałych filtrów Tailwinda. 60 px daje ten sam klimat poświaty
     * przy ułamku kosztu rasteryzacji.
     */
    [class*="blur-["] {
        --tw-blur: blur(60px);
    }

    .hero__blob {
        filter: blur(40px);
        opacity: 0.42;
        /* Dryf rozmytej plamy = ciągłe przerysowywanie dużej warstwy */
        animation: none;
    }

    .plx__glow {
        filter: blur(28px);
    }

    /*
     * Paralaksa i tak jest na telefonie wyłączona (transform: none),
     * a `will-change` trzymał pięć osobnych warstw kompozytora w pamięci.
     */
    .plx__layer {
        will-change: auto;
    }

    /* Cztery kafelki z rozmyciem tła siedzą w hero, czyli dokładnie tam,
       gdzie zaczyna się przewijanie. Kryjące tło robi tę samą robotę. */
    .plx__chip {
        background: linear-gradient(140deg, var(--ink-800), var(--ink-950));
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
    }
}

@media (max-width: 63.99rem) {
    /*
     * Przyklejony nagłówek: backdrop-filter przelicza tło pod paskiem
     * przy każdej klatce przewijania. Nieprzezroczyste tło wygląda tu
     * praktycznie tak samo, a scroll robi się gładki.
     */
    .site-header[data-scrolled] {
        background: rgba(8, 8, 10, 0.97);
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
    }

    /* To samo w menu mobilnym — blur pod przyciemnieniem zżerał animację wjazdu */
    .mnav__backdrop {
        background: rgba(5, 5, 6, 0.82);
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
    }

    .mnav__head {
        background: var(--ink-900);
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
    }

    /* Tailwindowe backdrop-blur-* — pod spodem i tak jest kryjące tło */
    [class*="backdrop-blur"] {
        -webkit-backdrop-filter: none;
        backdrop-filter: none;
    }
}

/*
 * iOS w poziomie sam powiększa tekst w długich akapitach — wyłączamy,
 * bo układ przestaje się zgadzać z resztą.
 */
html {
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}
