/* ==========================================================================
   Shop layer — košík, objednávka, prihlásenie a zákaznícky účet.

   Samostatný súbor zámerne. style.css je prevzatá téma z pôvodného webu;
   miešať do nej eshopové komponenty by znamenalo, že sa jedno nedá zmeniť
   bez rozbitia druhého. Takmer všetko tu má prefix .shop- a načítava sa ako
   posledné, takže nič z témy neprepisuje a zároveň nad ňou vyhráva. Výnimky
   sú na konci súboru a majú pri sebe napísané, čo v téme dopĺňajú.
   ========================================================================== */

/*
 * Farby sú prevzaté z témy, nie vymyslené: #2D2E79 a #E4BE6E sú
 * najpoužívanejšie hodnoty v style.css a zároveň farby loga, #F6F7F9 je
 * pozadie svetlých sekcií homepage. Košík má vyzerať ako jej pokračovanie,
 * takže vlastnú paletu mať nesmie.
 */
:root {
    /* Berie sa zo `style.css`, ktorý sa načítava skôr — jedna hodnota, nie dve. */
    --shop-navy: var(--brand-navy);
    --shop-navy-dark: #21225c;
    --shop-gold: #E4BE6E;
    --shop-gold-dark: #d3a94f;
    --shop-gold-soft: #FDF8F0;
    --shop-gold-line: #f0e2c8;

    --shop-ink: #2E2E2E;
    --shop-muted: #6b6d8a;
    --shop-line: #E5E7EB;
    --shop-bg: #F6F7F9;
    --shop-card: #fff;

    --shop-success: #1f8a5b;
    --shop-danger: #c0392b;
    --shop-danger-dark: #a32f22;
    --shop-danger-soft: #fdf1ef;
    --shop-info: #2f6fd0;

    /*
     * Tvary sú prevzaté z homepage, nie zvolené: každý jej blok má
     * `border-radius: 32px` (.hero-banner-row, .for-clients-data,
     * .help-business-row, .hero-servbox) a tlačidlá 30px (.btn-main).
     * Menšie zaoblenie sa používa len tam, kde 32px na nízkom riadku
     * spraví lozengu.
     */
    --shop-radius: 32px;
    --shop-radius-sm: 20px;

    /*
     * Karty tieň nemajú — sú to plochy na ploche a tieň pod nimi robil
     * len sivý pás. Držia sa na ráme.
     *
     * Tieň ostáva len tomu, čo naozaj pláva nad obsahom: rozbaľovacie
     * menu a vysúvací panel. Tmavomodrý, nie čierny — na svetlosivom
     * pozadí #F6F7F9 čierna špiní.
     */
    --shop-shadow-lg: 0 28px 64px rgba(45, 46, 121, .16), 0 6px 16px rgba(45, 46, 121, .08);
}

/* --------------------------------------------------------------------------
   Stránka
   -------------------------------------------------------------------------- */

.shop {
    background: var(--shop-bg);
    padding: 40px 0 72px;
    font-size: 15px;
    color: var(--shop-ink);
}

/* Bez tmavomodrého pruhu nad sebou potrebuje sekcia väčší odstup od
   hlavičky — inak kroky lepia na navigáciu. */
.shop--top {
    padding-top: 56px;
}

/* Účet je pracovná plocha, nie stránka na čítanie — nadpis aj okraje sú
   menšie, aby sa prehľad zmestil na obrazovku. */
.shop--account {
    padding: 28px 0 48px;
}

.shop--account .shop-head {
    margin-bottom: 18px;
}

.shop--account .shop-head h1 span {
    margin-left: 6px;
    font-size: 16px;
    font-weight: 600;
    color: var(--shop-muted);
}

.shop-head h1 {
    font-size: 26px;
}

.shop .container {
    max-width: 1240px;
}

/* Odkazy v eshope sú tmavomodré — okrem tlačidiel, tie si farbu nesú samy.
   Bez tejto výnimky prebíjal selektor `.shop a` (0,1,1) variant
   .shop-btn--navy (0,1,0) a biely text na tmavomodrej pilulke zmizol:
   tlačidlo „Vytvoriť účet“ vyzeralo prázdne. */
.shop a:not(.shop-btn) {
    color: var(--shop-navy);
}

.shop-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 8px 16px;
    margin: 0 0 28px;
}

.shop-head h1 {
    font-size: 34px;
    line-height: 1.2;
    font-weight: 700;
    color: var(--shop-navy);
    margin: 0;
}

.shop-head p {
    margin: 8px 0 0;
    color: var(--shop-muted);
}

/* --------------------------------------------------------------------------
   Hlavičkový pruh

   Nákup začína farebným blokom, rovnako ako homepage. Bez neho pôsobili
   košík a objednávka ako administratívna stránka mimo webu.
   -------------------------------------------------------------------------- */

.shop-hero {
    background: var(--shop-navy);
    padding: 44px 0 40px;
    color: #fff;
}

.shop-hero .container {
    max-width: 1240px;
}

.shop-hero__title {
    font-size: 34px;
    line-height: 1.2;
    font-weight: 700;
    color: #fff;
    margin: 0;
}

.shop-hero__lead {
    margin: 8px 0 0;
    font-size: 15px;
    color: rgba(255, 255, 255, .72);
}

.shop-hero .shop-steps {
    margin: 26px 0 0;
}

/* Zlatý nadpis skupiny — ten istý štýl, akým homepage uvádza sekcie. */
.shop-eyebrow {
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--shop-gold-dark);
    margin: 32px 0 14px;
}

.shop-eyebrow:first-child {
    margin-top: 0;
}

/* Kroky objednávky. Ukazujú, koľko toho ešte ostáva — bez toho zákazník
   nevie, či je po vyplnení formulára hotovo, alebo príde ďalších päť. */
.shop-steps {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    margin: 0 0 28px;
    padding: 0;
    list-style: none;
    font-size: 13px;
    font-weight: 600;
    color: var(--shop-muted);
}

/* Na svetlom pozadí stoja kroky nad obsahom a sedia na jeho osi. */
.shop-steps--center {
    justify-content: center;
    margin-bottom: 24px;
}

.shop-steps li {
    display: flex;
    align-items: center;
    gap: 8px;
}

/* Čiara medzi krokmi. Prerušovaná znamená „sem si sa ešte nedostal" —
   plná až vtedy, keď je krok pred ňou hotový. */
.shop-steps li::after {
    content: "";
    width: 40px;
    margin: 0 6px;
    border-top: 2px dashed var(--shop-line);
}

.shop-steps li.is-done::after {
    border-top-style: solid;
    border-top-color: var(--shop-success);
}

.shop-steps li:last-child::after {
    display: none;
}

.shop-steps li > a {
    display: flex;
    align-items: center;
    gap: 8px;
    color: inherit;
    text-decoration: none;
}

.shop-steps li > a:hover {
    color: var(--shop-navy);
}

.shop-steps .shop-steps__num {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    flex: 0 0 auto;
    border-radius: 50%;
    background: #fff;
    border: 1px solid var(--shop-line);
    font-size: 12px;
    font-weight: 700;
}

.shop-steps .is-active {
    color: var(--shop-navy);
    font-weight: 700;
}

.shop-steps .is-active .shop-steps__num {
    background: var(--shop-gold);
    border-color: var(--shop-gold);
    color: var(--shop-navy);
    box-shadow: 0 0 0 4px rgba(228, 190, 110, .25);
}

.shop-steps .is-done {
    color: var(--shop-ink);
}

.shop-steps .is-done .shop-steps__num {
    background: var(--shop-success);
    border-color: var(--shop-success);
    color: #fff;
}

.shop-steps .is-done .shop-steps__num svg {
    width: 15px;
    height: 15px;
}

/* Kroky v tmavomodrom pruhu. Krúžky aj čiary sa musia obrátiť — svetlé
   pozadie krúžku by na tmavom podklade svietilo silnejšie než zlatý
   aktívny krok. */
.shop-steps--dark {
    color: rgba(255, 255, 255, .6);
}

.shop-steps--dark .shop-steps__num {
    background: rgba(255, 255, 255, .12);
    border-color: rgba(255, 255, 255, .28);
    color: rgba(255, 255, 255, .75);
}

.shop-steps--dark li::after {
    border-top-color: rgba(255, 255, 255, .3);
}

.shop-steps--dark .is-active {
    color: #fff;
}

.shop-steps--dark .is-active .shop-steps__num {
    background: var(--shop-gold);
    border-color: var(--shop-gold);
    color: var(--shop-navy);
    box-shadow: 0 0 0 4px rgba(228, 190, 110, .22);
}

.shop-steps--dark .is-done {
    color: rgba(255, 255, 255, .9);
}

.shop-steps--dark .is-done .shop-steps__num {
    background: rgba(255, 255, 255, .92);
    border-color: rgba(255, 255, 255, .92);
    color: var(--shop-navy);
}

.shop-steps--dark li.is-done::after {
    border-top-color: rgba(255, 255, 255, .75);
}

.shop-steps--dark li > a:hover {
    color: var(--shop-gold);
}

/* --------------------------------------------------------------------------
   Karta, mriežka
   -------------------------------------------------------------------------- */

.shop-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 380px;
    gap: 28px;
    align-items: start;
}

/* Karta stojí na ráme, nie na tieni. Tieň z homepage patrí kartičkám,
   ktoré naozaj plávajú nad fotkou; tu je karta plocha na ploche a tieň
   pod ňou robil len sivý pás. Rám aj tieň naraz sa nekombinujú. */
.shop-card {
    background: var(--shop-card);
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius);
    box-shadow: none;
    padding: 24px;
    margin: 0 0 20px;
}

/* Prázdny stav nemá čo ohraničovať — je to jediný obsah na stránke. */
.shop-card--plain {
    border: 0;
    box-shadow: none;
    background: transparent;
}

.shop-card:last-child {
    margin-bottom: 0;
}

/* Nadpis karty nemá súťažiť s názvom stránky — ten je 26 px. */
.shop-card__title {
    font-size: 15px;
    font-weight: 600;
    color: var(--shop-navy);
    margin: 0 0 18px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

/* Nadpis súhrnu je nadpisok, nie titulok — panel vedľa zoznamu položiek
   nemá súťažiť s názvami v ňom. */
.shop-card__title--eyebrow {
    font-size: 12px;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--shop-muted);
}

.shop-card__title small {
    font-size: 13px;
    font-weight: 400;
    color: var(--shop-muted);
}

/* --------------------------------------------------------------------------
   Položky košíka
   -------------------------------------------------------------------------- */


.shop-lines {
    margin: 0;
    padding: 0;
}

/* Názov služby nad jej balíčkami. Stojí mimo karty položky — je to nadpis
   skupiny, nie vlastnosť balíčka. */
.shop-lines__group {
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--shop-gold-dark);
    margin: 28px 0 12px;
}

.shop-lines__group:first-child {
    margin-top: 0;
}

/* Medzi položkami medzera aj čiara. Samotná tenká linka ich pri dvoch
   balíčkoch s doplnkami zlievala do jedného dlhého bloku. */
.shop-line {
    padding: 0 0 28px;
    margin: 0 0 28px;
    border-bottom: 1px solid var(--shop-line);
}

.shop-line:last-child {
    border-bottom: 0;
    padding-bottom: 0;
    margin-bottom: 0;
}

.shop-line.is-unavailable {
    opacity: .65;
}

/* --------------------------------------------------------------------------
   Zoznam položiek košíka

   Jedna karta a v nej riadky so stĺpcami, nie karta na položku. Ceny tak
   stoja pod sebou a dajú sa porovnať; pri samostatných kartách mala každá
   suma inú vodorovnú pozíciu.
   -------------------------------------------------------------------------- */

.shop-items {
    padding: 8px 24px 12px;
}

.shop-items__head,
.shop-item {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto 120px 130px;
    gap: 16px;
    align-items: center;
}

.shop-items__head {
    padding: 12px 0;
    border-bottom: 1px solid var(--shop-line);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--shop-muted);
}

/* Hlavička nemá stĺpec pre množstvo — nad stepperom by nadpis len šumel. */
.shop-items__head > span:nth-child(2) {
    grid-column: 3;
}

.shop-items__head > span:nth-child(3) {
    grid-column: 4;
}

.shop-items__col {
    text-align: right;
}

.shop-item {
    padding: 18px 0;
    border-bottom: 1px solid var(--shop-line);
}

.shop-item:last-child {
    border-bottom: 0;
}

.shop-item.is-unavailable {
    opacity: .65;
}

.shop-item__name {
    margin: 0 0 4px;
    font-size: 15px;
    font-weight: 700;
    line-height: 1.35;
    color: var(--shop-navy);
}

.shop-item__unit {
    margin: 0;
    font-size: 12.5px;
    color: var(--shop-muted);
}

.shop-item__qty {
    display: flex;
    align-items: center;
    gap: 6px;
}

.shop-item__col {
    text-align: right;
    font-size: 14px;
    color: var(--shop-muted);
    white-space: nowrap;
}

.shop-item__total {
    font-size: 16px;
    font-weight: 700;
    color: var(--shop-navy);
}

/* Podrobnosti idú pod celý riadok, nie do stĺpca s názvom — inak by sa
   tlačili do tretiny šírky, kým vpravo ostáva prázdno. */
.shop-item__extra {
    grid-column: 1 / -1;
}

.shop-item__extra:empty {
    display: none;
}

/* Zoznam položiek vnútri karty, ktorá už má svoje odsadenie. */
.shop-items--flat {
    padding: 0;
}

/* Hotová objednávka nemá stepper — stĺpce sú položka, množstvo, suma. */
.shop-items--order .shop-items__head,



/* Doplnky v hotovej objednávke: len meno a suma, nič sa neprepína. */
.shop-subrows {
    list-style: none;
    margin: 0;
    padding: 10px 14px;
    border: 1px solid var(--shop-gold-line);
    border-radius: 14px;
    background: var(--shop-gold-soft);
}

.shop-subrows li {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 3px 0;
    font-size: 13px;
    color: var(--shop-ink);
}

.shop-subrows li > span:last-child {
    flex: 0 0 auto;
    font-weight: 600;
    white-space: nowrap;
    color: var(--shop-navy);
}

/* Zlatý nadpisok nad podzoznamom — rovnaký vzor ako inde na stránke. */
.shop-sublist__label {
    display: block;
    margin: 14px 0 8px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--shop-gold-dark);
}

.shop-sublist {
    list-style: none;
    margin: 0;
    padding: 0;
}

.shop-sublist li {
    position: relative;
    padding-left: 22px;
    margin: 0 0 6px;
    font-size: 13px;
    line-height: 1.5;
    color: var(--shop-muted);
}

.shop-sublist li:last-child {
    margin-bottom: 0;
}

.shop-sublist li::before {
    content: "\2713";
    position: absolute;
    left: 0;
    top: 0;
    font-weight: 700;
    color: var(--shop-gold-dark);
}

/* --------------------------------------------------------------------------
   Karta balíčka

   Vlastné svetlé pozadie a rám. Balíček je hlavná položka — musí prebiť
   doplnky pod sebou aj kartu, v ktorej stojí.
   -------------------------------------------------------------------------- */

/* Zvýraznená karta (x-card-highlighted).

   Zvýraznenie je rovnomerné po celom obvode. Pruh po jednej strane je
   akcent, ktorý nič nehovorí — oko hľadá, čo znamená, a nenájde odpoveď.
   Farebný akcent v tomto rozhraní znamená stav (vybrané), nie ozdobu. */
.shop-cardgold {
    border: 1px solid var(--shop-gold-line);
    border-radius: var(--shop-radius);
    background: linear-gradient(120deg, var(--shop-gold-soft) 0%, #fff 72%);
}

.shop-pkg {
    display: grid;
    grid-template-columns: 88px minmax(0, 1fr);
    gap: 20px;
    align-items: start;
    padding: 22px 24px;
}

/* Bez ikony sa stĺpec neváha — prázdny štvorec by vyzeral ako nenačítaný
   obrázok. */
.shop-pkg.has-no-icon {
    grid-template-columns: minmax(0, 1fr);
}

.shop-pkg__icon {
    width: 88px;
    height: 88px;
    border-radius: var(--shop-radius-sm);
    background: #fff;
    box-shadow: 0 2px 8px rgba(45, 46, 121, .08);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.shop-pkg__icon img {
    max-width: 52px;
    max-height: 52px;
    display: block;
}

.shop-pkg__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
}

.shop-pkg__name {
    font-size: 1.25rem;
    font-weight: 700;
    line-height: 1.3;
    color: var(--shop-navy);
    margin: 0;
}

.shop-pkg__price {
    font-size: 1.5rem;
    font-weight: 700;
    line-height: 1.15;
    color: var(--shop-navy);
    white-space: nowrap;
}

.shop-pkg__foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 10px;
}

.shop-pkg__unit {
    font-size: 13px;
    color: var(--shop-muted);
    margin: 0;
}

/* Čo je v cene. Zlatá fajka a šedý text — zoznam má informovať, nie
   súťažiť s názvom balíčka o pozornosť.

   Predel je neutrálny. Zlatá čiara cez kartu bola ozdoba, a to je presne
   to, čím zlatá v tomto rozhraní byť nesmie — nesie stav (pozri komentár
   pri .shop-cardgold). Fajky zlaté ostávajú, tie stav majú. */
.shop-pkg__features {
    list-style: none;
    margin: 16px 0 0;
    padding: 14px 0 0;
    border-top: 1px solid var(--shop-line);
}

.shop-pkg__features li {
    position: relative;
    padding-left: 22px;
    margin: 0 0 6px;
    font-size: 13px;
    line-height: 1.5;
    color: var(--shop-muted);
}

.shop-pkg__features li:last-child {
    margin-bottom: 0;
}

.shop-pkg__features li::before {
    content: "\2713";
    position: absolute;
    left: 0;
    top: 0;
    font-weight: 700;
    color: var(--shop-gold-dark);
}

/* --------------------------------------------------------------------------
   Doplnky položky

   Stoja pod kartou balíčka a bez vlastného rámu. Sú to príplatky — keď
   vyzerali ako druhá karta, prekrikovali balíček, ktorý sa kupuje.
   -------------------------------------------------------------------------- */

.shop-addons-block {
    margin: 20px 0 0;
}

/* Zlatý nadpisok, nie tmavomodrý tučný text — ten si konkuroval s názvom
   balíčka nad ním. Rovnaký vzor ako .shop-eyebrow a popisok v paneli. */
.shop-addons-block__title {
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--shop-gold-dark);
    margin: 0 0 10px;
}

/* Každý doplnok je vlastná mini-karta. Zoznam riadkov oddelených čiarou
   vyzeral ako formulár — doplnok sa má ponúkať, nie vypĺňať. */
.shop-addonrow {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 14px;
    padding: 14px 16px;
    margin: 0 0 10px;
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    font-size: 13px;
    background: #fff;
    transition: background-color .2s ease, border-color .2s ease, box-shadow .2s ease;
}

.shop-addonrow:last-child {
    margin-bottom: 0;
}

.shop-addonrow:hover {
    border-color: var(--shop-gold);
    box-shadow: 0 2px 10px rgba(45, 46, 121, .08);
}

/* Zaškrtnutý doplnok. Zvýraznenie ide po celom obvode a stav hovorí
   predovšetkým zaškrtávacie pole — farba ho len potvrdzuje. */
.shop-addonrow.is-on {
    background: var(--shop-gold-soft);
    border-color: var(--shop-gold-line);
}

.shop-addonrow.is-unavailable {
    color: var(--shop-muted);
}

.shop-addonrow__pick {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin: 0;
    cursor: pointer;
    min-width: 0;
}

/* --------------------------------------------------------------------------
   Zaškrtávacie pole v zlatej (x-checkbox-gold)

   Skutočný input ostáva na mieste a ovládateľný, len je priehľadný —
   nahradiť ho značkou bez inputu by rozbilo klávesnicu aj čítačky.
   -------------------------------------------------------------------------- */

.shop-checkgold {
    position: relative;
    display: inline-flex;
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    margin-top: 1px;
}

.shop-checkgold__input {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    opacity: 0;
    cursor: pointer;
}

/* Tá istá dvojica ako v paneli košíka: tmavomodrá výplň, zlatá fajka.
   Zlatý štvorček na zlato podfarbenom riadku doplnku splýval s pozadím
   a stav sa z neho nedal prečítať. Fajka sa centruje flexom. */
.shop-checkgold__box {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1.5px solid var(--shop-gold-dark);
    border-radius: 6px;
    background: #fff;
    transition: background-color .2s ease, border-color .2s ease;
    pointer-events: none;
}

.shop-checkgold__box::after {
    content: "";
    width: 5px;
    height: 9px;
    margin-top: -2px;
    border: solid var(--shop-gold);
    border-width: 0 2px 2px 0;
    border-radius: 1px;
    transform: rotate(45deg) scale(.4);
    opacity: 0;
    transition: opacity .2s ease, transform .2s ease;
}

.shop-checkgold__input:checked + .shop-checkgold__box {
    background: var(--shop-navy);
    border-color: var(--shop-navy);
}

.shop-checkgold__input:checked + .shop-checkgold__box::after {
    opacity: 1;
    transform: rotate(45deg) scale(1);
}

.shop-checkgold__input:focus-visible + .shop-checkgold__box {
    box-shadow: 0 0 0 3px rgba(228, 190, 110, .45);
}

.shop-addonrow__text {
    display: block;
    min-width: 0;
}

.shop-addonrow__text strong {
    display: block;
    font-weight: 600;
    color: var(--shop-ink);
}

.shop-addonrow__text small {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    line-height: 1.45;
    color: var(--shop-muted);
}

.shop-addonrow__text em {
    display: block;
    margin-top: 4px;
    font-size: 12px;
    font-style: normal;
    color: var(--shop-gold-dark);
}

.shop-addonrow__right {
    display: flex;
    align-items: center;
    gap: 10px;
    white-space: nowrap;
}

.shop-addonrow__price {
    font-weight: 600;
    color: var(--shop-ink);
}

/* --------------------------------------------------------------------------
   Pohyb

   Krátky a jediný na akciu. Košík sa prepočítava na diaľku, takže zmena
   musí byť vidieť — ale nesmie sa na ňu čakať.
   -------------------------------------------------------------------------- */

/* Nový riadok po pridaní z detailu služby. */
.shop-line.is-new {
    animation: shop-slide-in .35s ease both;
}

@keyframes shop-slide-in {
    from { opacity: 0; transform: translateY(-14px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* Zmenená suma v súhrne. Vrchol je na 200 ms, zvyšok je dosvit — pri
   200 ms aj s návratom by si zmeny nikto nevšimol. */
.shop-sum li.is-changed span:last-child {
    animation: shop-flash .5s ease;
    border-radius: 4px;
}

@keyframes shop-flash {
    0%   { background: transparent; box-shadow: none; }
    40%  { background: #fdf0d4; box-shadow: 0 0 0 5px #fdf0d4; }
    100% { background: transparent; box-shadow: none; }
}

@media (prefers-reduced-motion: reduce) {
    .shop-line.is-new,
    .shop-sum li.is-changed span:last-child {
        animation: none;
    }

    .shop-addonrow {
        transition: none;
    }
}


/* Stepper množstva. Zaoblený a s obrysom v modrej, nie plochý šedý —
   je to ovládanie, nie výpis. */
.shop-stepper {
    display: inline-flex;
    align-items: center;
    border: 1px solid rgba(45, 46, 121, .22);
    /* Pilulka ako tlačidlá — v košíku stojí hneď vedľa nich. */
    border-radius: 30px;
    background: #fff;
    overflow: hidden;
    transition: border-color .2s ease;
}

.shop-stepper:hover,
.shop-stepper:focus-within {
    border-color: var(--shop-navy);
}

.shop-stepper button {
    width: 38px;
    height: 38px;
    border: 0;
    background: transparent;
    color: var(--shop-navy);
    font-size: 18px;
    font-weight: 600;
    line-height: 1;
    cursor: pointer;
    transition: background-color .2s ease;
}

.shop-stepper button:hover {
    background: var(--shop-gold-soft);
}

.shop-stepper input {
    width: 44px;
    height: 38px;
    border: 0;
    text-align: center;
    font-weight: 600;
    color: var(--shop-ink);
    background: transparent;
    -moz-appearance: textfield;
}

.shop-stepper input::-webkit-outer-spin-button,
.shop-stepper input::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.shop-stepper input:focus {
    outline: none;
}

/* Odstránenie položky. Ikona bez textu — text „Odobrať" pri každom riadku
   preťaží zoznam, ktorý má byť čitateľný na jeden pohľad. */
.shop-remove {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border: 1px solid transparent;
    border-radius: 50%;
    background: transparent;
    color: var(--shop-muted);
    cursor: pointer;
    padding: 0;
    transition: color .2s ease, background-color .2s ease, border-color .2s ease;
}

.shop-remove:hover {
    border-color: var(--shop-danger);
    color: var(--shop-danger);
    background: #fff5f4;
}

.shop-remove svg {
    width: 15px;
    height: 15px;
}

/* --------------------------------------------------------------------------
   Súhrn
   -------------------------------------------------------------------------- */

/* Súhrn ostáva na očiach aj pri dlhom zozname položiek — inak zákazník
   pri scrollovaní stratí sumu aj tlačidlo, ktorým má pokračovať. */
.shop-summary {
    position: sticky;
    top: 24px;
    max-height: calc(100vh - 48px);
    overflow-y: auto;
}

/* Zatváranie spodného panela. Na počítači súhrn nikam nemizne. */
.shop-summary__close {
    display: none;
    background: transparent;
    border: 0;
    padding: 0 4px;
    font-size: 26px;
    line-height: 1;
    color: var(--shop-muted);
    cursor: pointer;
}

/* --------------------------------------------------------------------------
   Spodná lišta na mobile

   Na úzkej obrazovke padne súhrn až pod položky a suma s tlačidlom sú
   mimo dohľadu. Lišta ich drží na očiach a kliknutím na sumu vytiahne
   celý súhrn zdola.
   -------------------------------------------------------------------------- */

.shop-mobilebar {
    display: none;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1035;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    padding: 12px 16px;
    background: var(--shop-navy);
    box-shadow: 0 -6px 24px rgba(45, 46, 121, .28);
}

.shop-mobilebar__sum {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    background: transparent;
    border: 0;
    padding: 0;
    color: #fff;
    text-align: left;
    cursor: pointer;
}

.shop-mobilebar__sum span {
    font-size: 12px;
    color: rgba(255, 255, 255, .7);
}

.shop-mobilebar__sum strong {
    font-size: 17px;
    font-weight: 700;
}

/* Šípka hovorí, že sa suma dá rozkliknúť. */
.shop-mobilebar__sum span::after {
    content: " \25B2";
    font-size: 9px;
}

.shop-sheet-backdrop {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 1030;
    background: rgba(22, 23, 58, .45);
}

.shop-sum {
    margin: 0;
    padding: 0;
}

/* Údaje o platbe pod súčtom. Nie ďalší zoznam súm — sú to fakty o tom,
   čo sa s tou sumou stane, preto dvojice popis/hodnota. */
.shop-payinfo {
    margin: 16px 0 0;
    padding: 14px 0 0;
    border-top: 1px solid var(--shop-line);
}

.shop-payinfo div {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 5px 0;
}

.shop-payinfo dt {
    font-size: 13px;
    font-weight: 400;
    color: var(--shop-muted);
}

.shop-payinfo dd {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    text-align: right;
    color: var(--shop-navy);
}

/* Rozpis súm je oddelený od zoznamu položiek nad ním. */
.shop-sum--totals {
    margin-top: 6px;
    padding-top: 10px;
    border-top: 1px solid var(--shop-line);
}

.shop-sum li {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 16px;
    padding: 9px 0;
    color: var(--shop-muted);
}

/* Doplnok patrí k položke nad sebou, nie vedľa nej — preto hlbšie odsadenie
   a menšie písmo. Znamienko „+" pred názvom kreslí šablóna. */
.shop-sum li.is-child {
    padding: 2px 0 2px 26px;
    font-size: 12.5px;
}

.shop-sum li.is-child span:last-child {
    font-weight: 500;
    font-size: 12.5px;
}

.shop-sum li.is-subtotal {
    border-top: 1px solid var(--shop-line);
    margin-top: 8px;
    padding-top: 14px;
}

/* DPH je podtitul súčtu, nie ďalšia položka na sčítanie. */
.shop-sum li.is-vatnote {
    padding-top: 2px;
    font-size: 12.5px;
}

.shop-sum li.is-vatnote span:last-child {
    font-size: 12.5px;
    font-weight: 500;
    color: var(--shop-muted);
}

.shop-sum li span:last-child {
    color: var(--shop-ink);
    font-weight: 600;
    white-space: nowrap;
}

/* Zľava je jediná suma, ktorá ide dole. Červená so znamienkom mínus to
   povie skôr, než si zákazník prečíta popisku. */
.shop-sum li.is-discount span:last-child {
    color: var(--shop-danger);
    font-weight: 700;
}

/* Pred súčtom zlatá čiara. Šedá by z neho spravila ďalší riadok tabuľky —
   je to suma, ktorú zákazník zaplatí. */
/* Predel nad súčtom je neutrálny. Zlatý 2px pruh bol jediná farebná
   čiara v súhrne a nič nesignalizoval — váhu nesie veľkosť sumy. */
.shop-sum li.is-total {
    border-top: 1px solid var(--shop-line);
    margin-top: 10px;
    padding-top: 16px;
    font-size: 1.05rem;
    font-weight: 700;
    color: var(--shop-navy);
}

.shop-sum li.is-total span:last-child {
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--shop-navy);
}

/* --------------------------------------------------------------------------
   Tlačidlá
   -------------------------------------------------------------------------- */

.shop-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 13px 26px;
    border: 1px solid transparent;
    /* Pilulka ako .btn-main na homepage — eshop nesmie vyzerať ako iná
       aplikácia prilepená k webu. */
    border-radius: 30px;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.2;
    cursor: pointer;
    text-align: center;
    transition: background-color .2s ease, color .2s ease, border-color .2s ease, box-shadow .2s ease;
}

/* Hlavné CTA. Text je tmavomodrý, nie biely — biela na zlatej má kontrast
   pod 2:1. Tá istá dvojica, akú používa .btn-main na homepage. */
/* Bez žiary pod tlačidlom. .btn-main na homepage je plochá zlatá pilulka;
   zlatý opar okolo CTA bol jediný na celom webe. */
.shop-btn--primary {
    background: var(--shop-gold);
    color: var(--shop-navy);
}

.shop-btn--primary:hover {
    background: var(--shop-navy);
    color: #fff;
}

/* Obrys v tmavomodrej — pre akcie vedľa hlavného CTA. */
.shop-btn--outline {
    background: transparent;
    border-color: var(--shop-navy);
    color: var(--shop-navy);
}

.shop-btn--outline:hover {
    background: var(--shop-navy);
    color: #fff;
}

.shop-btn--navy {
    background: var(--shop-navy);
    color: #fff;
}

.shop-btn--navy:hover {
    background: var(--shop-navy-dark);
    color: #fff;
}

/* Červené — pre akcie, ktoré sa nedajú vrátiť. Prepína ho confirm.js
   na OK tlačidle dialógu pri data-confirm-tone="danger". */
.shop-btn--danger {
    background: var(--shop-danger);
    color: #fff;
}

.shop-btn--danger:hover {
    background: var(--shop-danger-dark);
    color: #fff;
}

.shop-btn--ghost {
    background: #fff;
    border-color: var(--shop-line);
    color: var(--shop-navy);
}

.shop-btn--ghost:hover {
    border-color: var(--shop-navy);
    background: var(--shop-bg);
}

.shop-btn--link {
    background: transparent;
    padding: 0;
    border: 0;
    color: var(--shop-muted);
    text-decoration: underline;
    font-weight: 500;
}

.shop-btn--link:hover {
    color: var(--shop-danger);
}

.shop-btn--block {
    display: flex;
    width: 100%;
}

.shop-btn--sm {
    padding: 8px 16px;
    font-size: 13px;
}

/* Hlavné tlačidlo súhrnu. Je to jediná akcia, ktorou sa dá pokračovať —
   musí byť viditeľne väčšie než všetko ostatné v stĺpci. */
.shop-btn--lg {
    padding: 17px 28px;
    font-size: 16px;
}

.shop-btn[disabled] {
    opacity: .5;
    cursor: not-allowed;
}

.shop-actions-row {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    align-items: center;
}

/* Formulár čaká na odpoveď zo servera. Bez tohto by sa dalo dvakrát
   kliknúť skôr, než sa vráti prepočítaný košík. */
.is-busy {
    opacity: .55;
    pointer-events: none;
}

/* --------------------------------------------------------------------------
   Formuláre
   -------------------------------------------------------------------------- */

.shop-fields {
    display: grid;
    grid-template-columns: repeat(12, minmax(0, 1fr));
    gap: 16px;
}

.shop-field {
    grid-column: span 12;
}

.shop-field--2 { grid-column: span 2; }
.shop-field--5 { grid-column: span 5; }
.shop-field--6 { grid-column: span 6; }
.shop-field--4 { grid-column: span 4; }
.shop-field--3 { grid-column: span 3; }
.shop-field--8 { grid-column: span 8; }
.shop-field--9 { grid-column: span 9; }

/*
 * Formulár, kde je povinná väčšina polí. Sedem hviezdičiek nie je signál, je
 * to šum — preto sa značí menšina, ktorá povinná nie je, a nad poľami stojí
 * jedna veta. `required` v HTML ostáva, mizne len hviezdička.
 */
.shop-fields--optional .req {
    display: none;
}

.opt {
    margin-left: 4px;
    font-weight: 500;
    color: var(--shop-muted);
}

/* Veta cez celú šírku mriežky (napr. „Všetky polia sú povinné…"). */
.shop-hint--wide {
    grid-column: 1 / -1;
    margin: -4px 0 0;
}

/* Popiska skupiny, ktorá nemá vlastný input (prepínač typu zákazníka). */
/* Popiska skupiny bez vlastného inputu (prepínač typu, needitovateľný
   údaj). Vyzerá presne ako `label` pri poli — inak by v jednom riadku
   formulára stáli dva rôzne nadpisy. */
.shop-field__label {
    display: block;
    margin: 0 0 6px;
    font-size: 13px;
    font-weight: 600;
    color: var(--shop-ink);
}

/* Tichá linka nad poľom — delí identifikáciu firmy od adresy bez ďalšieho
   nadpisu. Nesie ju prvé pole riadku, ostatné len odsadenie. */
.shop-field--split {
    border-top: 1px solid #F0F2F7;
    padding-top: 18px;
}

/* Typ zákazníka. Dve možnosti vedľa seba — nie rozbaľovací zoznam, z ktorého
   nevidno, čo je druhá voľba. */
.acc-radios {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.acc-radio {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    padding: 10px 16px;
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    background: var(--shop-card);
    font-size: 14px;
    cursor: pointer;
}

.acc-radio:has(input:checked) {
    border-color: var(--shop-navy);
    background: var(--shop-bg);
    font-weight: 600;
    color: var(--shop-navy);
}

.acc-radio input {
    accent-color: var(--shop-navy);
}

/* Vypnuté „Uložiť zmeny" — kým nie je čo uložiť. */
.shop-btn[disabled] {
    opacity: .45;
    cursor: default;
}

.shop-field > label {
    display: block;
    font-size: 13px;
    font-weight: 600;
    color: var(--shop-ink);
    margin: 0 0 6px;
}

.shop-field > label .req {
    color: var(--shop-danger);
}

.shop-input {
    display: block;
    width: 100%;
    padding: 12px 14px;
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    background: #fff;
    font-family: inherit;
    font-size: 14px;
    color: var(--shop-ink);
}

/*
 * Na dotykových obrazovkách 16 px, nie 14.
 *
 * Safari na iPhone pri kliknutí do poľa s menším písmom stránku priblíži
 * a späť ju už neoddiali — zvyšok pokladne sa potom vypĺňa naslepo a s
 * vodorovným posúvaním. Je to jediný dôvod tejto hodnoty; na monitore
 * ostáva 14 px, aby sa vzhľad formulárov nemenil.
 */
@media (max-width: 991px) {
    .shop-input {
        font-size: 16px;
    }
}

.shop-coupon-box .shop-input:focus {
    border-color: var(--shop-gold);
    box-shadow: 0 0 0 3px rgba(228, 190, 110, .28);
}

.shop-input:focus {
    outline: none;
    border-color: var(--shop-navy);
    box-shadow: 0 0 0 3px rgba(45, 46, 121, .10);
}

/* Prehliadač farbí automaticky vyplnené pole nažlto — v našej palete to
   vyzerá ako zvýraznená chyba. Prebíja sa vnútorným tieňom, farbu pozadia
   totiž `:-webkit-autofill` nepustí. */
.shop-input:-webkit-autofill,
.shop-input:-webkit-autofill:hover,
.shop-input:-webkit-autofill:focus {
    -webkit-box-shadow: 0 0 0 40px #fff inset;
    -webkit-text-fill-color: var(--shop-ink);
}

.shop-input::placeholder {
    color: #a8aac0;
}

textarea.shop-input {
    min-height: 96px;
    resize: vertical;
}

/* Chyba poľa. Trieda je bootstrapácka, ale Bootstrap ju skrýva, kým nemá
   pred sebou súrodenca s .is-invalid — my ju vypisujeme len vtedy, keď
   chyba naozaj je, takže sa zobrazuje vždy. */
.invalid-feedback {
    display: block;
    width: 100%;
    margin: 6px 0 0;
    font-size: 12.5px;
    line-height: 1.4;
    color: var(--shop-danger);
}

/* Miesto na hlášku držíme v šablóne aj vtedy, keď chyba nie je — prázdny
   odsek nemá pod poľom nechať medzeru navyše. */
.invalid-feedback:empty {
    display: none;
}

.shop-input.is-invalid,
.shop-select.is-invalid,
textarea.shop-input.is-invalid {
    border-color: var(--shop-danger);
    background: #fef7f6;
}

.shop-input.is-invalid:focus {
    border-color: var(--shop-danger);
    box-shadow: 0 0 0 3px rgba(192, 57, 43, .12);
}

/* Chybné pole má aj popisku v červenej — na dlhom formulári sa oko chytá
   nadpisu poľa, nie hlášky pod ním. */
.shop-field:has(.is-invalid) > label {
    color: var(--shop-danger);
}

/* Telefón s predvoľbou. Dve polia zlepené do jedného tvaru — vizuálne
   jeden prvok, aby zákazník nehľadal, ktoré z nich je „to hlavné“. */
.shop-phone {
    display: flex;
    gap: 8px;
}

.shop-phone__prefix {
    flex: 0 0 auto;
    width: 116px;
    padding: 12px 10px;
    border: 1px solid var(--shop-line);
    border-radius: 30px;
    background: #fff;
    font-family: inherit;
    font-size: 14px;
    color: var(--shop-ink);
    cursor: pointer;
}

.shop-phone__prefix:focus {
    outline: none;
    border-color: var(--shop-navy);
    box-shadow: 0 0 0 3px rgba(45, 46, 121, .10);
}

.shop-phone__number {
    flex: 1 1 auto;
    min-width: 0;
}

/* Vlastný zoznam predvolieb (shop.js). Natívny select ostáva v DOM-e ako
   nositeľ hodnoty, len je skrytý — bez JS sa zobrazí on. */
.shop-dial {
    position: relative;
    flex: 0 0 auto;
}

.shop-dial__native {
    display: none;
}

.shop-dial__toggle {
    display: flex;
    align-items: center;
    gap: 8px;
    height: 100%;
    padding: 12px 16px;
    border: 1px solid var(--shop-line);
    border-radius: 30px;
    background: #fff;
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    color: var(--shop-navy);
    cursor: pointer;
    white-space: nowrap;
    transition: 0.15s linear;
}

.shop-dial__toggle::after {
    content: "";
    width: 6px;
    height: 6px;
    margin-left: 2px;
    border: solid var(--shop-muted);
    border-width: 0 1.5px 1.5px 0;
    transform: translateY(-2px) rotate(45deg);
}

.shop-dial__toggle:hover {
    border-color: var(--shop-navy);
}

.shop-dial__toggle[aria-expanded="true"] {
    border-color: var(--shop-navy);
    box-shadow: 0 0 0 3px rgba(45, 46, 121, .10);
}

.shop-dial__flag {
    font-size: 18px;
    line-height: 1;
}

.shop-dial__panel {
    position: absolute;
    z-index: 30;
    top: calc(100% + 6px);
    left: 0;
    /* Strop podľa okna: na 320 px telefóne by pevných 300 px aj s okrajmi
       stránky vyšlo za pravý kraj a stránka by sa hýbala do strany. */
    width: 300px;
    max-width: calc(100vw - 32px);
    padding: 8px;
    border: 1px solid var(--shop-line);
    border-radius: 18px;
    background: #fff;
    box-shadow: var(--shop-shadow-lg);
}

/* Pri 245 krajinách je hľadanie hlavné ovládanie, nie doplnok — preto
   stojí navrchu a kurzor ide do neho hneď po otvorení. */
.shop-dial__search {
    display: block;
    width: 100%;
    padding: 9px 14px;
    margin: 0 0 6px;
    border: 1px solid var(--shop-line);
    border-radius: 30px;
    background: var(--shop-bg);
    font-family: inherit;
    font-size: 13px;
    color: var(--shop-ink);
}

.shop-dial__search:focus {
    outline: none;
    border-color: var(--shop-navy);
    background: #fff;
}

.shop-dial__list {
    max-height: 260px;
    overflow-y: auto;
}

.shop-dial__empty {
    margin: 0;
    padding: 14px 10px;
    font-size: 13px;
    text-align: center;
    color: var(--shop-muted);
}

.shop-dial__item {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 8px 10px;
    border: 0;
    border-radius: 12px;
    background: none;
    font-family: inherit;
    font-size: 14px;
    text-align: left;
    color: var(--shop-ink);
    cursor: pointer;
}

.shop-dial__item[hidden] {
    display: none;
}

/* Kurzor pri písaní. Odlíšený od vybranej krajiny — pri hľadaní sa ukazuje
   na inú položku, než je práve nastavená. */
.shop-dial__item:hover,
.shop-dial__item.is-cursor {
    background: var(--shop-bg);
}

.shop-dial__item.is-on {
    background: var(--shop-navy);
    color: #fff;
}

.shop-dial__item.is-on.is-cursor {
    background: var(--shop-navy-dark);
}

.shop-dial__name {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.shop-dial__code {
    flex: 0 0 auto;
    font-weight: 600;
    color: inherit;
}

.shop-dial__item .shop-dial__code {
    color: var(--shop-muted);
}

.shop-dial__item.is-on .shop-dial__code {
    color: var(--shop-gold);
}

/* Ten istý zoznam ako predvoľba telefónu, len ako celé pole. Krajina stojí
   vo formulári vedľa bežných inputov, takže tlačidlo kopíruje ich šírku
   aj váhu písma — inak by pôsobilo ako tretí druh poľa medzi dvoma. */
.shop-dial--country {
    display: block;
    width: 100%;
}

.shop-dial--country .shop-dial__toggle {
    width: 100%;
    padding: 14px 18px;
    font-weight: 400;
}

/* Šípka patrí na pravý kraj poľa, nie tesne za názov krajiny. */
.shop-dial--country .shop-dial__toggle::after {
    margin-left: auto;
}

.shop-dial--country .shop-dial__panel {
    width: 100%;
    min-width: 240px;
}

.shop-dial__label {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    text-align: left;
}

/* Našeptávač obce a PSČ. Obal poľa dostáva `position: relative` až od
   skriptu (trieda .shop-ac-host) — polia bez ponuky sa to týkať nemá. */
.shop-ac-host {
    position: relative;
}

.shop-ac {
    position: absolute;
    z-index: 30;
    top: calc(100% + 6px);
    left: 0;
    width: 100%;
    /* PSČ je úzke pole, obec v ponuke sa doň nezmestí — panel je preto širší
       než pole, ale nikdy širší než obrazovka. */
    min-width: 240px;
    max-width: calc(100vw - 48px);
    max-height: 264px;
    overflow-y: auto;
    padding: 8px;
    border: 1px solid var(--shop-line);
    border-radius: 18px;
    background: #fff;
    box-shadow: var(--shop-shadow-lg);
}

.shop-ac__item {
    display: flex;
    align-items: baseline;
    gap: 10px;
    width: 100%;
    padding: 8px 10px;
    border: 0;
    border-radius: 12px;
    background: none;
    font-family: inherit;
    font-size: 14px;
    text-align: left;
    color: var(--shop-ink);
    cursor: pointer;
}

.shop-ac__item:hover,
.shop-ac__item.is-cursor {
    background: var(--shop-bg);
}

.shop-ac__name {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.shop-ac__note {
    flex: 0 0 auto;
    font-size: 12.5px;
    color: var(--shop-muted);
}

/* Riadok „Hľadám…“ v paneli, kým letí odpoveď z registra. Je to ten istý
   panel ako s výsledkami — nie je to tlačidlo, preto ani hover, ani kurzor. */
.shop-ac__busy {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 10px;
    font-size: 14px;
    color: var(--shop-muted);
}

.shop-ac__busy::before {
    content: '';
    flex: 0 0 auto;
    width: 14px;
    height: 14px;
    border: 2px solid var(--shop-line);
    border-top-color: var(--shop-gold);
    border-radius: 50%;
    animation: shop-ac-spin 0.6s linear infinite;
}

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

/* Kto má v systéme vypnuté animácie, dostane statický krúžok — točenie je
   ozdoba, informáciu nesie text vedľa neho. */
@media (prefers-reduced-motion: reduce) {
    .shop-ac__busy::before {
        animation: none;
    }
}

.shop-hint {
    font-size: 12.5px;
    color: var(--shop-muted);
    margin: 6px 0 0;
}

/* Poznámka pod tlačidlami v súhrne — sedí na osi s nimi. */
.shop-hint--center {
    text-align: center;
    margin-top: 12px;
}

/* Poznámka pod väčším blokom (billing v account) — väčší odstup, aby
   nelepila k predchádzajúcemu. Obchádzalo sa to inline štýlom. */
.shop-hint--gap {
    margin-top: 18px;
}

/* Poznámka, pod ktorou hneď nasleduje tlačidlo (thanks) — spodný
   odstup, aby nelepilo k akcii. */
.shop-hint--gap-bottom {
    margin-bottom: 16px;
}

/* Zaškrtávacie polia a rádiá */
.shop-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 4px 0;
    font-size: 14px;
    cursor: pointer;
}

.shop-check input {
    width: 18px;
    height: 18px;
    margin: 1px 0 0;
    accent-color: var(--shop-navy);
    flex: 0 0 auto;
}

/* Voľba v ráme — pre typ zákazníka a spôsob platby, kde je výber
   rozhodnutím, nie súhlasom. */
.shop-choice {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
}

/* V polovičnom stĺpci sa dve možnosti pri základe 200 px nezmestia vedľa
   seba a zalomia sa pod seba — riadok potom nesedí s poľom oproti. */
.shop-field--6 .shop-choice label {
    flex: 1 1 120px;
    padding: 12px 14px;
}

.shop-choice label {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: 1 1 200px;
    padding: 14px 16px;
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    background: #fff;
    font-size: 14px;
    font-weight: 600;
    color: var(--shop-ink);
    cursor: pointer;
}

.shop-choice label:hover {
    border-color: var(--shop-navy);
}

.shop-choice input {
    width: 18px;
    height: 18px;
    accent-color: var(--shop-navy);
}

.shop-choice input:checked + span {
    color: var(--shop-navy);
}

.shop-choice label:has(input:checked) {
    border-color: var(--shop-navy);
    background: #f4f5fc;
    box-shadow: 0 0 0 1px var(--shop-navy) inset;
}

.shop-choice small {
    display: block;
    font-weight: 400;
    color: var(--shop-muted);
}

/* Zľavový kód. V súhrne stojí medzi medzisúčtom a DPH — tam, kde zákazník
   vidí sumu, ktorú chce znížiť. */
.shop-coupon {
    display: flex;
    gap: 10px;
}

/* Pole stojí vedľa pilulkového tlačidla „Uplatniť“ — s menším zaoblením
   pôsobili ako dva kusy z iných sád. */
.shop-coupon .shop-input {
    flex: 1 1 auto;
    border-radius: 30px;
    padding-left: 18px;
    padding-right: 18px;
}

/* Kód stojí medzi zoznamom položiek a rozpisom súm — vlastný pás medzi
   dvoma predelmi. Spodný kreslí .shop-sum--totals. */
.shop-coupon-box {
    margin-top: 12px;
    padding: 14px 0 4px;
    border-top: 1px solid var(--shop-line);
}

/* „Uplatniť" má zlatý obrys — je to vedľajšia akcia v súhrne, nesmie sa
   biť s hlavným CTA pod ním. */
.shop-coupon-box .shop-btn {
    padding: 11px 20px;
    background: #fff;
    border-color: var(--shop-gold);
    color: var(--shop-gold-dark);
}

.shop-coupon-box .shop-btn:hover {
    background: var(--shop-gold);
    color: var(--shop-navy);
}

.shop-coupon-box .invalid-feedback {
    margin-top: 8px;
}

/* Uplatnený kód je pilulka v zlatej, nie zelený pás. Zelená sa na tomto
   webe nikde inde nepoužíva a hlásila „systémový úspech“ — zľava je stav
   košíka, a ten nesie zlatá. Tvar aj zaoblenie sedia so vstupným poľom,
   ktoré pilulka nahradila, takže panel pri uplatnení nepodskočí. */
.shop-coupon-box__applied {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 8px 8px 8px 16px;
    border-radius: 30px;
    background: var(--shop-gold-soft);
    border: 1px solid var(--shop-gold-line);
    color: var(--shop-navy);
    font-size: 14px;
}

.shop-coupon-box__applied > span {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
    color: var(--shop-muted);
}

/* Fajka pred kódom kreslí CSS — v šablóne bola ako znak &check; za textom,
   kde ju oko číta až nakoniec. */
.shop-coupon-box__applied > span::before {
    content: "\2713";
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: var(--shop-navy);
    color: var(--shop-gold);
    font-size: 11px;
    font-weight: 700;
}

.shop-coupon-box__applied strong {
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--shop-navy);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.shop-coupon-box__drop {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 28px;
    height: 28px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: rgba(255, 255, 255, .8);
    font-size: 18px;
    line-height: 1;
    color: var(--shop-muted);
    cursor: pointer;
    transition: 0.15s linear;
}

.shop-coupon-box__drop:hover {
    background: var(--shop-danger);
    color: #fff;
}

/* --------------------------------------------------------------------------
   Oznámenia
   -------------------------------------------------------------------------- */

.shop-alert {
    display: flex;
    gap: 12px;
    padding: 14px 18px;
    border-radius: var(--shop-radius-sm);
    border: 1px solid var(--shop-line);
    background: #fff;
    margin: 0 0 20px;
    font-size: 14px;
}

.shop-alert svg {
    width: 20px;
    height: 20px;
    flex: 0 0 auto;
    margin-top: 1px;
}

.shop-alert ul {
    margin: 0;
    padding: 0;
}

.shop-alert li + li {
    margin-top: 4px;
}

.shop-alert--success {
    border-color: #b9e0cd;
    background: #f0faf5;
    color: #14563a;
}

.shop-alert--error {
    border-color: #f0c2bc;
    background: #fdf4f3;
    color: #8c2a1e;
}

.shop-alert--info {
    border-color: #c6d8f4;
    background: #f3f7fd;
    color: #1e4b91;
}

/*
 * Odznaky sú vyplnené, všetky rovnako. Miešanie vyplnených a obrysových
 * v jednom riadku vyzeralo, akoby každý znamenal iný druh veci — pritom
 * všetky hovoria to isté: v akom je to stave.
 */
.shop-badge {
    display: inline-flex;
    align-items: center;
    padding: 4px 10px;
    border-radius: var(--shop-radius-sm);
    font-size: 11.5px;
    font-weight: 600;
    line-height: 1.3;
    white-space: nowrap;
    color: #fff;
}

.shop-badge.is-success { background: var(--shop-success); }
.shop-badge.is-danger  { background: var(--shop-danger); }
.shop-badge.is-info    { background: var(--shop-navy); }
.shop-badge.is-neutral { background: var(--shop-muted); }

/* Zaplatená stojí vedľa „Dokončená" — svetlejšia zeleň, aby to boli dva
   údaje, nie jeden zdvojený. */
.shop-badge.is-paid { background: #3aa676; }

/* Po splatnosti je červená ako nezaplatená, len hlasnejšia. */
.shop-badge.is-strong { font-weight: 800; }

/* Zlatá si biely text dovoliť nemôže — kontrast pod 2:1. Tmavomodrá na
   zlatej je tá istá dvojica, akú má hlavné tlačidlo webu. */
.shop-badge.is-gold { background: var(--shop-gold); color: var(--shop-navy); }

/* --------------------------------------------------------------------------
   Prázdny stav
   -------------------------------------------------------------------------- */

.shop-empty {
    text-align: center;
    padding: 56px 24px;
}

/* V kompaktných kartách (account) sa prázdny stav nepotrebuje tlačiť
   do stránky — obišlo sa to inline štýlom, teraz je to trieda. */
.shop-empty--tight {
    padding: 32px 0;
}

/* Prázdny stav, pod ktorým hneď nasleduje zoznam — horný priestor
   ostáva, spodný sa zúži (thanks). */
.shop-empty--tight-bottom {
    padding-bottom: 32px;
}

.shop-empty svg {
    width: 72px;
    height: 72px;
    color: var(--shop-gold);
    opacity: .55;
    margin: 0 auto 20px;
    display: block;
}

/* h1 je tu kvôli stránkam, ktoré sú celé jedným prázdnym stavom
   (poďakovanie za správu) — nadpis stránky tam nemá byť h2. */
.shop-empty h1,
.shop-empty h2 {
    font-size: 22px;
    font-weight: 700;
    color: var(--shop-navy);
    margin: 0 0 8px;
}

.shop-empty p {
    color: var(--shop-muted);
    margin: 0 0 24px;
}

/* --------------------------------------------------------------------------
   Prihlásenie a registrácia
   -------------------------------------------------------------------------- */

.shop-auth {
    max-width: 520px;
    margin: 0 auto;
}

/* Registrácia firmy je o deväť polí dlhšia — pri 520 px by boli všetky
   pod sebou v jednom stĺpci a formulár by pôsobil nekonečne. */
.shop-auth--wide {
    max-width: 780px;
}

/* Vnorený blok polí vnútri karty. Rám a podfarbenie oddelia firemné údaje
   od osobných bez toho, aby vznikla druhá karta v karte. */
.shop-subcard {
    padding: 18px;
    border: 1px solid var(--shop-line);
    border-radius: 18px;
    background: var(--shop-bg);
}

.shop-subcard__label {
    display: block;
    margin: 0 0 14px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--shop-gold-dark);
}

/* --- Heslo ---------------------------------------------------------------- */

.shop-pass {
    position: relative;
}

.shop-pass__input {
    padding-right: 48px;
}

.shop-pass__eye {
    position: absolute;
    top: 50%;
    right: 6px;
    transform: translateY(-50%);
    display: flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: none;
    color: var(--shop-muted);
    cursor: pointer;
    transition: 0.15s linear;
}

.shop-pass__eye:hover {
    background: var(--shop-bg);
    color: var(--shop-navy);
}

.shop-pass__eye svg {
    width: 19px;
    height: 19px;
}

/* Prekrížené oko sa ukáže až keď je heslo odkryté — ikona hovorí, čo sa
   stane po kliknutí, nie aký je stav. */
.shop-pass__eye .shop-pass__eye-off,
.shop-pass__eye.is-on .shop-pass__eye-on {
    display: none;
}

.shop-pass__eye.is-on .shop-pass__eye-off {
    display: block;
}

/* Podmienky hesla. Kým sa nezačne písať, sú sivé — nie červené: prázdne
   pole ešte nie je chyba. */
.shop-passrules {
    list-style: none;
    margin: 8px 0 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 4px 16px;
}

.shop-passrules li {
    position: relative;
    padding-left: 20px;
    font-size: 12.5px;
    color: var(--shop-muted);
    transition: color .15s linear;
}

.shop-passrules li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 3px;
    width: 13px;
    height: 13px;
    border: 1.5px solid #cfd3e2;
    border-radius: 50%;
    transition: 0.15s linear;
}

.shop-passrules li.is-ok {
    color: var(--shop-success);
}

.shop-passrules li.is-ok::before {
    border-color: var(--shop-success);
    background: var(--shop-success);
}

/* Fajka v splnenej podmienke. Kreslí ju CSS, aby zoznam nepotreboval
   deväť inline SVG na jednom formulári. */
.shop-passrules li.is-ok::after {
    content: "";
    position: absolute;
    left: 4.5px;
    top: 5.5px;
    width: 3px;
    height: 6px;
    border: solid #fff;
    border-width: 0 1.5px 1.5px 0;
    transform: rotate(45deg);
}

.shop-auth .shop-card {
    padding: 32px;
}

.shop-auth__head {
    text-align: center;
    margin: 0 0 26px;
}

.shop-auth__head h1 {
    font-size: 27px;
    font-weight: 700;
    color: var(--shop-navy);
    margin: 0 0 8px;
}

.shop-auth__head p {
    color: var(--shop-muted);
    margin: 0;
}

.shop-auth__foot {
    margin: 22px 0 0;
    padding: 20px 0 0;
    border-top: 1px solid var(--shop-line);
    text-align: center;
    font-size: 14px;
    color: var(--shop-muted);
}

.shop-auth__foot a {
    font-weight: 600;
}

/* --------------------------------------------------------------------------
   Zákaznícky účet
   -------------------------------------------------------------------------- */

.shop-account-grid {
    display: grid;
    grid-template-columns: 250px minmax(0, 1fr);
    gap: 20px;
    align-items: start;
}

/*
 * Účet je panel, nie stránka na čítanie. Karty košíka dýchajú 24 pixelmi,
 * lebo na nich stojí rozhodnutie o nákupe; tu je hustota informácie vyššia
 * a prehľad sa má zmestiť na obrazovku bez rolovania pod objednávky.
 */
.shop-account-grid .shop-card {
    padding: 16px;
    margin-bottom: 16px;
    border-radius: 16px;
}

.shop-account-grid .shop-card__title {
    margin-bottom: 12px;
}

/*
 * Panel účtu. Lepí sa: na stránke objednávok s dvadsiatimi piatimi riadkami
 * odscrolloval preč hneď na prvej obrazovke a do inej sekcie sa dalo dostať
 * len návratom hore.
 */
.shop-sidenav {
    position: sticky;
    top: 16px;
    background: var(--shop-card);
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    padding: 8px;
}

.shop-sidenav__profile {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 10px 14px;
    border-bottom: 1px solid var(--shop-line);
    margin: 0 0 8px;
}

/* Iniciály namiesto fotky — profilovku zákazník nikde nenahráva a šedý
   obrys človeka by bol prázdne miesto s ikonou. */
.shop-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--shop-gold);
    color: var(--shop-navy);
    font-size: 14px;
    font-weight: 700;
}

.shop-sidenav__who {
    min-width: 0;
}

.shop-sidenav__who strong {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--shop-navy);
    font-size: 15px;
    line-height: 1.3;
}

/* Typ zákazníka a trh v jednom riadku. Boli to dva odznaky pri mene, čo je
   veľa ozdoby na údaj, ktorý sa nemení. */
.shop-sidenav__meta {
    display: block;
    margin-top: 1px;
    font-size: 12px;
    color: var(--shop-muted);
}

.shop-sidenav a,
.shop-sidenav button {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    min-height: 44px;
    padding: 10px 12px;
    border: 0;
    border-radius: 10px;
    background: transparent;
    font-size: 14px;
    font-weight: 500;
    color: var(--shop-ink);
    text-align: left;
    cursor: pointer;
}

.shop-sidenav a:hover,
.shop-sidenav button:hover {
    background: var(--shop-bg);
}

/*
 * Aktívna položka: svetlé pozadie a tmavomodrý text. Bez pásika po ľavej —
 * v paneli so zaoblenými riadkami z neho bola čiara, ktorá sa nedržala
 * žiadnej hrany. Žltá výplň tu tiež nie je: poloha v menu nie je akcia.
 */
.shop-sidenav a.is-active {
    background: var(--shop-bg);
    color: var(--shop-navy);
    font-weight: 600;
}

.shop-sidenav svg {
    width: 17px;
    height: 17px;
    flex: 0 0 auto;
}

/* Počet objednávok, ktoré niečo chcú. Číslo, nie odznak — odznak by v menu
   kričal rovnako ako výzva na prehľade. */
.shop-sidenav b {
    margin-left: auto;
    font-size: 13px;
    font-weight: 600;
    color: var(--shop-muted);
}

.shop-sidenav a.is-active b {
    color: var(--shop-navy);
}

/* Nedokončený profil. Bodka, nie číslo — nie je čo počítať. */
.shop-sidenav__dot {
    width: 7px;
    height: 7px;
    margin-left: auto;
    border-radius: 50%;
    background: var(--shop-gold);
}

/* Odhlásenie je odchod z účtu — červená, aby sa naň neklikalo omylom pri
   preskakovaní medzi sekciami. Za čiarou, mimo zoznamu sekcií. */
.shop-sidenav__logout {
    margin-top: 6px;
    border-top: 1px solid var(--shop-line);
    padding-top: 6px;
}

.shop-sidenav__logout button {
    color: var(--shop-danger);
}

.shop-sidenav__logout button:hover {
    background: var(--shop-danger-soft);
    color: var(--shop-danger-dark);
}

/*
 * Tri dlaždice na prehľade: čo treba zaplatiť, čo leží v košíku a čo sa
 * rieši. Číslo je hlavné — sumu zákazník prečíta pohľadom, vetu musí čítať.
 *
 * Tmavomodrá je len jedna, tá s peniazmi. Dva vrcholy vedľa seba nie sú
 * vrchol a oko potom nevie, kam ísť.
 */
.acc-tiles {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 16px;
    margin: 0 0 16px;
}

.acc-tile {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    padding: 18px;
    border: 1px solid var(--shop-line);
    border-radius: 16px;
    background: var(--shop-card);
}

.acc-tile h2 {
    margin: 0 0 4px;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--shop-muted);
}

.acc-tile strong {
    font-size: 20px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--shop-navy);
}

/* Odsadenie zdola: riadky dlaždice sú natesno, akcia pod nimi nie. */
.acc-tile p {
    margin: 0;
    padding-bottom: 12px;
    font-size: 13.5px;
    color: var(--shop-muted);
}

/*
 * Akcia sedí na dne dlaždice, nie hneď pod textom: dlaždice sú v mriežke
 * rovnako vysoké a odkaz vedľa tlačidla má stáť na tej istej linke.
 */
.acc-tile__link,
.acc-tile .shop-btn {
    margin-top: auto;
}

/* Odkaz nemá výplň tlačidla, ale musí mať jeho výšku — inak by v rade
   dlaždíc visel vyššie než tlačidlo vedľa neho. */
.acc-tile__link {
    display: inline-flex;
    align-items: center;
    min-height: 34px;
    font-size: 14px;
    font-weight: 600;
}

/* Dlaždica s peniazmi. Tmavomodrá plocha a jediné tlačidlo na obrazovke —
   je to jediná vec, ktorá od zákazníka chce peniaze. */
.acc-tile--due {
    border-color: var(--shop-navy);
    background: var(--shop-navy);
}

.acc-tile--due h2 {
    color: rgba(255, 255, 255, .7);
}

.acc-tile--due strong {
    color: #fff;
}

.acc-tile--due p {
    color: rgba(255, 255, 255, .72);
}

/* Úhrada a nacenená ponuka na detaile objednávky. Bez pruhu po ľavej —
   karta má rám aj vlastné pozadie a tretie zvýraznenie z nej robilo
   výstražnú pásku. */
.acc-pay {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
    margin: 0 0 16px;
    padding: 16px;
    border: 1px solid var(--shop-gold-line);
    border-radius: 16px;
    background: var(--shop-gold-soft);
}

/* Platba kartou: veta a tlačidlo vedľa seba. Veta má strop na šírku, inak by
   na širokej karte natiahla riadok a tlačidlo by odletelo na druhý koniec. */
.acc-pay__card {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 16px;
}

.acc-pay__card .shop-hint {
    margin: 0;
    max-width: 46ch;
}

.acc-pay strong {
    display: block;
    font-size: 16px;
    color: var(--shop-navy);
}

.acc-pay p {
    margin: 2px 0 0;
    font-size: 14px;
    color: var(--shop-muted);
}

/* Prehľad: zoznam objednávok a vedľa neho, čo si zákazník kupuje najčastejšie. */
.acc-cols {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 300px;
    gap: 16px;
    align-items: start;
    margin: 0 0 16px;
}

/* Hlavička karty so zoznamom. Vnútri karty s nulovou výplňou si výplň
   nesie sama — a od zoznamu ju delí tá istá linka ako riadky medzi sebou. */
.acc-cardhead {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 16px;
}

.acc-cardhead--stacked {
    display: block;
}

.acc-cardhead--stacked p {
    margin: 2px 0 0;
    font-size: 13px;
    color: var(--shop-muted);
}

.acc-cardhead h2 {
    margin: 0;
    font-size: 16px;
    font-weight: 700;
    color: var(--shop-navy);
}

.acc-cardhead a {
    font-size: 13.5px;
    font-weight: 600;
}

.acc-cardfoot {
    padding: 12px 16px 16px;
}

.acc-cardfoot .shop-btn {
    width: 100%;
}

/* Najčastejšie služby. Bez ikon: je to zoznam názvov a počtov, nie ponuka —
   ikona pred každým riadkom by bola desaťkrát tá istá ozdoba. */
.acc-toplist {
    list-style: none;
    margin: 0;
    padding: 0;
}

.acc-toplist li {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 11px 16px;
    border-top: 1px solid var(--shop-line);
    font-size: 14px;
}

.acc-toplist a {
    display: block;
    font-weight: 500;
}

.acc-toplist span {
    font-size: 12.5px;
    color: var(--shop-muted);
}

.acc-toplist form {
    flex: 0 0 auto;
}

/* Druhoradá akcia vedľa názvu služby. Tlačidlo tu vážilo viac než názov,
   ku ktorému patrí — preto odkaz, a farbu dostane až pod kurzorom. */
.acc-toplist__again {
    padding: 0;
    border: 0;
    background: none;
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--shop-muted);
    cursor: pointer;
    white-space: nowrap;
}

.acc-toplist__again:hover {
    color: var(--shop-navy);
    text-decoration: underline;
}

.acc-toplist li > div {
    min-width: 0;
}

.acc-toplist li a {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--shop-navy);
    font-weight: 600;
}

/* Cesta preč zo stránky nad nadpisom. */
.acc-back {
    display: inline-block;
    margin: 0 0 10px;
    font-size: 14px;
    color: var(--shop-muted) !important;
}

/*
 * Detail objednávky: rozpis vľavo, zhrnutie vpravo. Karta vpravo sa lepí,
 * takže pri dlhom rozpise ostáva suma aj akcia na obrazovke.
 */
.acc-order {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 300px;
    gap: 16px;
    align-items: start;
}

.acc-order__side {
    position: sticky;
    top: 16px;
}

/* Dlhý e-mail sa láme, ale nie uprostred slova bez potreby. */
.acc-order__mail {
    overflow-wrap: anywhere;
    font-size: 13px;
}

.acc-sum {
    text-align: left;
}

.acc-sum h2 {
    margin: 0 0 2px;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--shop-muted);
}

.acc-sum strong {
    display: block;
    font-size: 22px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--shop-navy);
}

/* Stav ako veta, rovnako ako v zozname: farbu dostane len to, čo niečo chce. */
.acc-sum__state {
    margin: 4px 0 0;
    font-size: 14px;
    color: var(--shop-muted);
}

.acc-sum__state.is-due {
    color: var(--shop-danger);
    font-weight: 600;
}

.acc-sum__state.is-due::before {
    content: "● ";
}

.acc-sum__state.is-wait {
    color: #9A6B00;
    font-weight: 600;
}

.acc-sum__note {
    margin: 2px 0 0;
    font-size: 13px;
    color: var(--shop-muted);
}

.acc-sum .shop-btn {
    width: 100%;
    margin-top: 12px;
}

.acc-sum__link {
    display: block;
    width: 100%;
    margin-top: 10px;
    padding: 0;
    border: 0;
    background: none;
    font-family: inherit;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--shop-navy);
    text-align: left;
    cursor: pointer;
}

.acc-sum__link:hover {
    text-decoration: underline;
}

.acc-sum--links {
    margin-top: 16px;
}

/*
 * Priebeh vodorovne. Štyri kroky sa zmestia do riadku a nezaberú 200 px
 * výšky; platba medzi nimi nie je, tá je nezávislá os v karte vpravo.
 */
/*
 * Priebeh vodorovne. Os je jedna, cez celú kartu — kreslí ju zoznam, nie
 * jednotlivé kroky.
 *
 * Predtým mal každý krok rovnakú tretinu a vlastnú spojnicu, takže posledná
 * bodka sedela v dvoch tretinách šírky a posledná tretina karty ostávala
 * prázdna. Vyzeralo to, že sa čiara stratila alebo že za posledným krokom
 * chýba ďalší.
 *
 * Podiel splnenej časti podáva šablóna cez `--acc-progress` (0–1). Počíta sa
 * z krokov, nie zo stavov: koľko ich je, je vec objednávky (zrušená má dva,
 * bežná tri) a CSS o tom nemá čo vedieť.
 */
.acc-steps {
    position: relative;
    display: flex;
    list-style: none;
    margin: 0;
    padding: 22px 0 0;
}

.acc-steps::before,
.acc-steps::after {
    content: "";
    position: absolute;
    top: 6px;
    left: 7px;
    height: 2px;
}

/* Celá os po pravý okraj karty. */
.acc-steps::before {
    right: 7px;
    background: var(--shop-line);
}

/* Splnená časť. Meria sa medzi stredmi krajných bodiek, preto `100% - 14px`. */
.acc-steps::after {
    width: calc((100% - 14px) * var(--acc-progress, 0));
    background: var(--shop-success);
}

/*
 * Rovnaké diely, nie šírka podľa textu.
 *
 * Pri delení podľa dĺžky popisu sedela prostredná bodka tam, kam ju vytlačili
 * susedné slová — a zelená časť osi, ktorá sa počíta z podielu krokov, k nej
 * o pár pixelov nedosiahla. Pri rovnakých dieloch je stred prostrednej bodky
 * presne v polovici a čiara sadne na ňu.
 */
.acc-steps li {
    position: relative;
    flex: 1 1 0;
    min-width: 0;
    font-size: 13px;
    text-align: center;
    color: var(--shop-muted);
}

/* Krajné popisky sa zarovnávajú k svojej bodke, nie na stred — inak by prvý
   text začínal kúsok pred ľavým okrajom karty a posledný by z nej vyliezal. */
.acc-steps li:first-child { text-align: left; padding-right: 12px; }
.acc-steps li:last-child { text-align: right; padding-left: 12px; }

.acc-steps__mark {
    position: absolute;
    top: -22px;
    left: 50%;
    transform: translateX(-50%);
    box-sizing: border-box;
    width: 14px;
    height: 14px;
    border: 2px solid var(--shop-line);
    border-radius: 50%;
    background: var(--shop-card);
}

.acc-steps li:first-child .acc-steps__mark {
    left: 0;
    transform: none;
}

.acc-steps li:last-child .acc-steps__mark {
    left: auto;
    right: 0;
    transform: none;
}

.acc-steps li.is-done .acc-steps__mark {
    border-color: var(--shop-success);
    background: var(--shop-success);
}

.acc-steps__label {
    display: block;
    font-weight: 600;
    color: var(--shop-ink);
}

.acc-steps li:not(.is-done) .acc-steps__label {
    color: var(--shop-muted);
    font-weight: 500;
}

.acc-steps__at {
    display: block;
    margin-top: 2px;
}

/* Platba pod krokmi. Za čiarou, aby bolo vidieť, že to nie je štvrtý krok —
   objednávka môže byť dokončená a nezaplatená aj naopak. */
.acc-steps__pay {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    margin: 16px 0 0;
    padding-top: 14px;
    border-top: 1px solid var(--shop-line);
    font-size: 13px;
    color: var(--shop-muted);
}

.acc-steps__pay .acc-steps__at {
    display: inline;
    margin: 0;
}

/* Platobné údaje. Riadok = popis, hodnota a kopírovanie. */
.acc-pay__rows {
    margin: 0;
}

.acc-pay__rows > div {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 0;
    border-bottom: 1px solid var(--shop-line);
}

.acc-pay__rows > div:last-child {
    border-bottom: 0;
}

.acc-pay__rows dt {
    font-weight: 500;
    color: var(--shop-muted);
}

.acc-pay__rows dd {
    display: flex;
    align-items: baseline;
    gap: 10px;
    margin: 0;
    font-weight: 700;
    color: var(--shop-navy);
    overflow-wrap: anywhere;
}

.acc-copy {
    padding: 0;
    border: 0;
    background: none;
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--shop-muted);
    white-space: nowrap;
    cursor: pointer;
}

.acc-copy:hover {
    color: var(--shop-navy);
    text-decoration: underline;
}

.acc-copy.is-done {
    color: var(--shop-success);
}

.acc-copy:focus-visible,
.acc-sum__link:focus-visible {
    outline: 2px solid var(--shop-navy);
    outline-offset: 2px;
}

/* Položky objednávky: názov, pod ním jednotková cena, vpravo suma.
   Doplnky odsadené pod balíčkom, ku ktorému patria. */
.shop-lines {
    list-style: none;
    margin: 0;
    padding: 0;
}

.shop-lines > li {
    padding: 12px 0;
    border-bottom: 1px solid var(--shop-line);
}

.shop-lines > li:last-child {
    border-bottom: 0;
}

.shop-lines__row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 16px;
}

.shop-lines__name {
    display: block;
    font-size: 15px;
    font-weight: 600;
    color: var(--shop-navy);
}

.shop-lines__qty {
    color: var(--shop-muted);
}

.shop-lines__unit {
    display: block;
    margin-top: 2px;
    font-size: 13px;
    color: var(--shop-muted);
}

.shop-lines__sum {
    flex: 0 0 auto;
    font-weight: 700;
    color: var(--shop-navy);
    white-space: nowrap;
}

.shop-lines__addons {
    list-style: none;
    margin: 6px 0 0;
    padding: 0 0 0 18px;
}

.shop-lines__addons li {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 16px;
    padding: 3px 0;
    font-size: 13.5px;
    color: var(--shop-muted);
}

/* Stav overenia e-mailu pri poli, nie v inej sekcii — výzva „Dokončite
   profil" z prehľadu vedie sem a musí tu nájsť aj spôsob, ako to vybaviť. */
.acc-verify {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 4px 8px;
    margin: 6px 0 0;
    font-size: 13px;
    color: var(--shop-danger);
}

.acc-verify > span {
    font-weight: 600;
}

.acc-verify.is-ok {
    color: var(--shop-success);
}

.acc-verify .acc-sum__link {
    display: inline;
    width: auto;
    margin: 0;
    font-size: 13px;
}

/*
 * Údaj, ktorý sa v účte nemení (e-mail). Má tvar poľa — rovnaký rám, výšku
 * aj rádius, aby v riadku sedel vedľa mena — ale sivú výplň a bez kurzora:
 * to je rozdiel medzi „sem sa píše" a „takto to je". Vypnutý `<input>` by
 * vyzeral ako rozbité pole a čítačke by tvrdil, že sa dá vyplniť.
 */
.acc-readonly {
    display: flex;
    align-items: center;
    min-height: 46px;
    margin: 0;
    padding: 12px 14px;
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    background: var(--shop-bg);
    font-size: 14px;
    color: var(--shop-muted);
    overflow-wrap: anywhere;
}

/* Notifikácie. Zoznam zaškrtávacích polí, nie mriežka formulára. */
.acc-checks {
    list-style: none;
    margin: 0;
    padding: 0;
}

.acc-checks li {
    padding: 8px 0;
    border-bottom: 1px solid #F0F2F7;
}

.acc-checks li:last-child {
    border-bottom: 0;
}

.acc-checks .shop-hint {
    margin: 2px 0 0 28px;
}

/* Povinná notifikácia. Zaškrtnutá a vypnutá — nie preto, že by sa nedala
   obslúžiť, ale preto, že bez nej môže ponuka prepadnúť. */
.shop-check.is-locked {
    color: var(--shop-muted);
    cursor: default;
}

/*
 * Vaše údaje (GDPR). Posledné na stránke, oddelené linkou a bez tlačidiel:
 * sú to veci, ktoré sa robia raz za život, nie súčasť bežnej práce s účtom.
 */
.acc-gdpr {
    display: flex;
    align-items: center;
    gap: 8px 18px;
    flex-wrap: wrap;
    margin: 20px 0 0;
    padding-top: 16px;
    border-top: 1px solid var(--shop-line);
    font-size: 14px;
}

.acc-gdpr a {
    color: var(--shop-muted) !important;
}

.acc-gdpr a:hover {
    color: var(--shop-navy) !important;
}

.acc-gdpr__danger {
    padding: 0;
    border: 0;
    background: none;
    font-family: inherit;
    font-size: 14px;
    color: #b46a63;
    cursor: pointer;
}

.acc-gdpr__danger:hover {
    color: var(--shop-danger);
    text-decoration: underline;
}

/* Nedorobok na profile vedľa pozdravu. Tichý odkaz, nie žltý pruh — nič
   nebrzdí, len čaká. */
.acc-profilelink {
    flex: 0 0 auto;
    font-size: 14px;
    font-weight: 600;
}

/* Pomoc pod obsahom. Jeden riadok: podporná informácia nepotrebuje kartu,
   ikonu v krúžku ani tlačidlo. */
.acc-helpline {
    margin: 16px 0 0;
    font-size: 13.5px;
    color: var(--shop-muted);
}

.acc-helpline a {
    font-weight: 600;
}

/* Prehľad: zoznam objednávok a vedľa neho, čo si zákazník kupuje najčastejšie. */
.acc-cols {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 300px;
    gap: 16px;
    align-items: start;
    margin: 0 0 16px;
}

/* Hlavička karty so zoznamom. Vnútri karty s nulovou výplňou si výplň
   nesie sama — a od zoznamu ju delí tá istá linka ako riadky medzi sebou. */
.acc-cardhead {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 16px;
}

.acc-cardhead--stacked {
    display: block;
}

.acc-cardhead--stacked p {
    margin: 2px 0 0;
    font-size: 13px;
    color: var(--shop-muted);
}

.acc-cardhead h2 {
    margin: 0;
    font-size: 16px;
    font-weight: 700;
    color: var(--shop-navy);
}

.acc-cardhead a {
    font-size: 13.5px;
    font-weight: 600;
}

.acc-cardfoot {
    padding: 12px 16px 16px;
}

.acc-cardfoot .shop-btn {
    width: 100%;
}

/* Najčastejšie služby. Bez ikon: je to zoznam názvov a počtov, nie ponuka —
   ikona pred každým riadkom by bola desaťkrát tá istá ozdoba. */
.acc-toplist {
    list-style: none;
    margin: 0;
    padding: 0;
}

.acc-toplist li {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 11px 16px;
    border-top: 1px solid var(--shop-line);
    font-size: 14px;
}

.acc-toplist a {
    display: block;
    font-weight: 500;
}

.acc-toplist span {
    font-size: 12.5px;
    color: var(--shop-muted);
}

.acc-toplist form {
    flex: 0 0 auto;
}

/* Druhoradá akcia vedľa názvu služby. Tlačidlo tu vážilo viac než názov,
   ku ktorému patrí — preto odkaz, a farbu dostane až pod kurzorom. */
.acc-toplist__again {
    padding: 0;
    border: 0;
    background: none;
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--shop-muted);
    cursor: pointer;
    white-space: nowrap;
}

.acc-toplist__again:hover {
    color: var(--shop-navy);
    text-decoration: underline;
}

.acc-toplist li > div {
    min-width: 0;
}

.acc-toplist li a {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--shop-navy);
    font-weight: 600;
}

/*
 * Chipy namiesto rozbaľovacích zoznamov. Chip ukáže počet bez toho, aby ho
 * niekto otvoril — a to je väčšina úžitku filtrov: „Na úhradu 6" je vidno
 * hneď. Sú to odkazy, takže fungujú aj bez JavaScriptu.
 */
.acc-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0 0 14px;
}

.acc-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 14px;
    border: 1px solid #E6E9F2;
    border-radius: 20px;
    background: var(--shop-card);
    font-size: 14px;
    font-weight: 500;
    color: var(--shop-ink);
}

.acc-chip b {
    font-weight: 700;
    color: var(--shop-muted);
}

.acc-chip:hover {
    border-color: var(--shop-navy);
}

/* Trieda navyše zámerne: `.shop a:not(.shop-btn)` je špecifickejšia než
   `.acc-chip.is-on` a tmavomodrý text na tmavomodrej ploche zmizol. */
.shop .acc-chip.is-on {
    background: var(--shop-navy);
    border-color: var(--shop-navy);
    color: #fff;
}

.acc-chip.is-on b {
    color: rgba(255, 255, 255, .75);
}

/* Prázdny chip nezmizne, len zošedivie — kontroly, ktoré sa objavujú
   a miznú, pôsobia nestabilne. */
.acc-chip.is-off {
    opacity: .5;
    cursor: default;
}

/*
 * Akčný pruh nad zoznamom. Je to ten istý objekt ako tmavomodrá dlaždica na
 * prehľade — rovnaká farba, rovnaké číslo, rovnaká akcia. Zákazník klikne na
 * prehľade a príde tam, kde ho čaká to isté.
 */
.acc-actionbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    margin: 0 0 14px;
    padding: 14px 18px;
    border-radius: 16px;
    background: var(--shop-navy);
    color: #fff;
}

.acc-actionbar strong {
    font-size: 15px;
}

.acc-actionbar span {
    margin-left: 8px;
    font-size: 15px;
    font-weight: 700;
    color: rgba(255, 255, 255, .82);
}

/* Koľko z koľkých. Tichý riadok, nie panel. */
.acc-shown {
    margin: 0 0 10px;
    font-size: 13.5px;
    color: var(--shop-muted);
}

/* Nadpis nad zoznamom, ktorý si kartu nesie sám. */
.acc-panel__head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    margin: 0 0 10px;
}

.acc-panel__head h2 {
    margin: 0;
    font-size: 17px;
    font-weight: 700;
    color: var(--shop-navy);
}

.acc-panel__head a {
    font-size: 13.5px;
    font-weight: 600;
}

/* Filtre nad zoznamom: hľadanie a za ním obdobie, ktoré si otvorí ten,
   kto ho hľadá. Nižšie polia než vo formulároch — je to nástroj nad
   zoznamom, nie miesto, kde sa niečo vypĺňa. */
.acc-filters {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin: 0 0 14px;
}

.acc-filters .shop-input {
    width: auto;
    padding: 10px 14px;
    border-color: #E6E9F2;
    font-size: 14px;
}

.acc-filters__search {
    position: relative;
    flex: 1 1 260px;
}

.acc-filters__search .shop-input {
    width: 100%;
    padding-right: 40px;
}

.acc-filters__search svg {
    position: absolute;
    top: 50%;
    right: 14px;
    width: 17px;
    height: 17px;
    transform: translateY(-50%);
    color: var(--shop-muted);
    pointer-events: none;
}

/* Obdobie je najmenej používaný filter a zaberalo najviac miesta. Vysunie
   sa nad obsah, nie do riadku — inak by otvorenie posunulo celý zoznam. */
.acc-more {
    position: relative;
}

.acc-more summary {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 10px 14px;
    border: 1px solid #E6E9F2;
    border-radius: var(--shop-radius-sm);
    background: var(--shop-card);
    font-size: 14px;
    color: var(--shop-ink);
    cursor: pointer;
    list-style: none;
}

.acc-more summary::-webkit-details-marker {
    display: none;
}

.acc-more summary::after {
    content: "";
    width: 6px;
    height: 6px;
    margin-left: 2px;
    border-right: 2px solid var(--shop-muted);
    border-bottom: 2px solid var(--shop-muted);
    transform: translateY(-2px) rotate(45deg);
}

.acc-more[open] summary::after {
    transform: translateY(1px) rotate(225deg);
}

.acc-more__body {
    position: absolute;
    top: calc(100% + 6px);
    right: 0;
    z-index: 30;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px;
    border: 1px solid var(--shop-line);
    border-radius: 16px;
    background: var(--shop-card);
    box-shadow: var(--shop-shadow-lg);
}

.acc-more__body .shop-input {
    width: 130px;
}

/*
 * Výbery v našich formulároch (Tom Select). Knižnica prenesie triedy
 * pôvodného `<select>` na svoj obal, takže obal aj ovládací prvok vnútri
 * dostanú rámik zo `.shop-input` — dva rámiky nad sebou. Rámik patrí len
 * tomu vnútornému.
 */
.shop .ts-wrapper,
.acc .ts-wrapper {
    width: 100%;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
}

.shop .ts-control {
    min-height: 46px;
    padding: 12px 34px 12px 14px;
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    background: #fff;
    font-family: inherit;
    font-size: 14px;
    color: var(--shop-ink);
    box-shadow: none;
    cursor: pointer;
}

.shop .ts-wrapper.focus .ts-control {
    border-color: var(--shop-gold);
    box-shadow: 0 0 0 3px rgba(228, 190, 110, .28);
}

.shop .ts-wrapper.is-invalid .ts-control {
    border-color: var(--shop-danger);
}

/* Vlastná šípka — natívna patrí `<select>`, ktorý knižnica skryla. */
.shop .ts-control::after {
    content: "";
    position: absolute;
    right: 14px;
    top: 50%;
    width: 7px;
    height: 7px;
    margin-top: -5px;
    border-right: 2px solid var(--shop-muted);
    border-bottom: 2px solid var(--shop-muted);
    transform: rotate(45deg);
    pointer-events: none;
}

.shop .dropdown-active .ts-control::after {
    margin-top: -2px;
    transform: rotate(225deg);
}

.shop .ts-control input {
    font-family: inherit;
    font-size: 14px;
    color: var(--shop-ink);
}

.shop .ts-dropdown {
    margin: 6px 0 0;
    border: 1px solid var(--shop-line);
    border-radius: 14px;
    box-shadow: var(--shop-shadow-lg);
    overflow: hidden;
    font-size: 14px;
}

.shop .ts-dropdown .option {
    padding: 9px 14px;
    color: var(--shop-ink);
}

.shop .ts-dropdown .active {
    background: var(--shop-bg);
    color: var(--shop-navy);
}

.shop .ts-dropdown .selected {
    font-weight: 600;
    color: var(--shop-navy);
}

.shop .ts-dropdown .no-results {
    padding: 9px 14px;
    color: var(--shop-muted);
}

/*
 * Výber stavu a typu (Tom Select). Knižnica prenesie triedy pôvodného
 * `<select>` na svoj obal, takže obal aj ovládací prvok vnútri dostanú rámik
 * zo `.shop-input` — dva rámiky nad sebou. Rámik patrí len tomu vnútornému.
 */
.acc-filters .ts-wrapper {
    width: auto;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
}

.acc-filters .ts-control {
    min-width: 150px;
    min-height: 0;
    padding: 10px 34px 10px 14px;
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    background: #fff;
    font-family: inherit;
    font-size: 14px;
    color: var(--shop-ink);
    box-shadow: none;
    cursor: pointer;
}

.acc-filters .ts-wrapper.focus .ts-control {
    border-color: var(--shop-gold);
    box-shadow: 0 0 0 3px rgba(228, 190, 110, .28);
}

/* Vlastná šipka — natívna patrí `<select>`, ktorý knižnica skryla. */
.acc-filters .ts-control::after {
    content: "";
    position: absolute;
    right: 14px;
    top: 50%;
    width: 7px;
    height: 7px;
    margin-top: -5px;
    border-right: 2px solid var(--shop-muted);
    border-bottom: 2px solid var(--shop-muted);
    transform: rotate(45deg);
    pointer-events: none;
}

.acc-filters .dropdown-active .ts-control::after {
    margin-top: -2px;
    transform: rotate(225deg);
}

.acc-filters .ts-dropdown {
    margin: 6px 0 0;
    border: 1px solid var(--shop-line);
    border-radius: 14px;
    box-shadow: var(--shop-shadow-lg);
    overflow: hidden;
    font-size: 14px;
}

.acc-filters .ts-dropdown .option {
    padding: 9px 14px;
    color: var(--shop-ink);
}

.acc-filters .ts-dropdown .active {
    background: var(--shop-bg);
    color: var(--shop-navy);
}

.acc-filters .ts-dropdown .selected {
    font-weight: 600;
    color: var(--shop-navy);
}

.acc-filters__search {
    position: relative;
    flex: 1 1 220px;
}

.acc-filters__search .shop-input {
    width: 100%;
    padding-right: 40px;
}

.acc-filters__search svg {
    position: absolute;
    top: 50%;
    right: 14px;
    width: 17px;
    height: 17px;
    transform: translateY(-50%);
    color: var(--shop-muted);
    pointer-events: none;
}

/*
 * Zoznam objednávok. Dva riadky na položku: čo si zákazník objednal a koľko
 * to stálo hore, pod tým číslo, dátum a stav ako meta. Celý riadok je odkaz.
 *
 * Karta okolo neho nemá vnútorný okraj — mriežku si nesie zoznam sám a
 * dvojitý okraj by z riadkov spravil ostrovy.
 */
.acc-tablecard {
    padding: 0 !important;
    overflow: hidden;
}

/* Prázdny zoznam je v tej istej karte — bez výplne by text lepil na okraj. */
.acc-tablecard .shop-empty {
    padding: 28px 16px;
}

/* Predel mesiaca. Nie je to riadok zoznamu, je to nadpis nad ním. */
.acc-list__month {
    margin: 0;
    padding: 12px 16px 6px;
    border-top: 1px solid var(--shop-line);
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--shop-muted);
}

.acc-list__month:first-child {
    border-top: 0;
}

.acc-list__month + .acc-list__row {
    border-top: 0;
}

.acc-list__row {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 14px 16px;
    border-top: 1px solid var(--shop-line);
}

.acc-list__row:first-child {
    border-top: 0;
}

.acc-list__row:hover {
    background: #fbfbfd;
}

/* Riadok je odkaz cez celú šírku — bez viditeľného zamerania by sa po ňom
   klávesnicou chodilo naslepo. */
.acc-list__row:focus-visible,
.acc-chip:focus-visible {
    outline: 2px solid var(--shop-navy);
    outline-offset: -2px;
}

.acc-list__main {
    display: block;
    min-width: 0;
    flex: 1 1 auto;
}

/* Názov cez celú šírku a na jeden riadok: dlhý názov lámaný na tri robil
   zo susedných riadkov dva rôzne formáty. */
.acc-list__name {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 15px;
    font-weight: 600;
    color: var(--shop-navy);
}

/* Číslo objednávky a dátum. Meta, nie údaj — číslo si nikto nepamätá,
   hľadá sa podľa služby. */
.acc-list__meta {
    display: block;
    margin-top: 2px;
    font-size: 13px;
    color: var(--shop-muted);
}

.acc-list__side {
    display: block;
    flex: 0 0 auto;
    text-align: right;
}

.acc-list__sum {
    display: block;
    font-size: 15px;
    font-weight: 700;
    color: var(--shop-navy);
    white-space: nowrap;
}

.acc-list__sum.is-muted {
    font-weight: 500;
    color: var(--shop-muted);
}

/*
 * Stav ako veta. Dokončená objednávka nič nechce, preto je sivá a tichá —
 * farebná plocha na piatich riadkoch pod sebou nehovorí, ktorý je dôležitý.
 */
.acc-list__state {
    display: block;
    margin-top: 2px;
    font-size: 13px;
    color: var(--shop-muted);
    white-space: nowrap;
}

/* Peniaze. Bodka pred textom, nie plocha za ním — vyskočí jediný riadok
   v pokojnom zozname. */
.acc-list__state.is-due {
    color: var(--shop-danger);
    font-weight: 600;
}

.acc-list__state.is-due::before {
    content: "● ";
}

/* Čaká sa: naceňujeme my alebo rozhoduje zákazník. Tmavšia zlatá, aby sa
   dala prečítať na bielej. */
.acc-list__state.is-wait {
    color: #9A6B00;
    font-weight: 600;
}

.acc-list__go {
    flex: 0 0 auto;
    font-size: 20px;
    line-height: 1;
    color: #c3c4d4;
}

.acc-list__row:hover .acc-list__go {
    color: var(--shop-navy);
}

/* Stopa a stránkovanie pod tabuľkou: koľko z koľkých a kam ďalej. Stojí
   v tej istej karte, preto má výplň a linku — inak by čísla strán viseli
   na okraji tabuľky. */
.acc-pager {
    padding: 12px 16px;
    border-top: 1px solid var(--shop-line);
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 10px;
}

.acc-pager p {
    margin: 0;
    font-size: 13.5px;
    color: var(--shop-muted);
}

/* Počet riadkov na stranu. Voľba, nie ovládací prvok — tri čísla vedľa
   stopy vážia menej než ďalší rozbaľovací zoznam. */
.acc-perpage {
    margin-left: 4px;
}

.acc-perpage a,
.acc-perpage b {
    margin-left: 4px;
    font-weight: 600;
}

.acc-perpage b {
    color: var(--shop-navy);
}

/* Čísla strán ako v admine: štvorčeky, aktívna je tmavomodrá. */
.acc-pages {
    display: flex;
    align-items: center;
    gap: 6px;
    list-style: none;
    margin: 0;
    padding: 0;
}

.acc-pages a,
.acc-pages span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 32px;
    height: 32px;
    padding: 0 8px;
    border: 1px solid var(--shop-line);
    border-radius: 8px;
    background: var(--shop-card);
    font-size: 14px;
    font-weight: 600;
    color: var(--shop-navy);
}

.acc-pages a:hover {
    border-color: var(--shop-navy);
}

.acc-pages .is-on span {
    background: var(--shop-navy);
    border-color: var(--shop-navy);
    color: #fff;
}

.acc-pages .is-off span {
    color: #b9bacd;
}

/*
 * Upozornenie na prehľade. Jeden riadok, jedno tlačidlo.
 *
 * Malý rádius zámerne: pri 20 px z nízkeho pruhu vznikne lozenga.
 * Pruh po ľavej tu nie je — pozadie aj rám povedia to isté a tretia vrstva
 * zvýraznenia už len kričí.
 */
.shop-notice {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    background: var(--shop-gold-soft);
    border: 1px solid var(--shop-gold-line);
    border-radius: 10px;
    padding: 10px 14px;
    margin: 0 0 16px;
}

.shop-notice p {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--shop-navy);
}

.shop-notice__mark {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
    margin-right: 6px;
    border-radius: 4px;
    background: var(--shop-gold);
    color: var(--shop-navy);
    font-size: 12px;
    font-weight: 800;
}

.shop-notice--error {
    background: #fdf4f3;
    border-color: #f0c2bc;
}

.shop-notice--error p {
    color: var(--shop-danger);
    font-weight: 500;
}

/* Odznaky stavu vedľa seba. Zoznam objednávok ich má v stĺpci Stav,
   detail v hlavičke — je to ten istý riadok odznakov. */
/* Filtre v zozname objednávok */
.shop-filters {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
    margin: 0 0 20px;
}

.shop-filters__field {
    min-width: 150px;
}

.shop-filters__field--grow {
    flex: 1 1 220px;
}

/* Hlavička detailu objednávky */








/* Priebeh objednávky. Zvislý, nie vodorovný ako kroky objednávania —
   krokov je päť aj s dátumami a v riadku by sa nezmestili. */


/* Spojnica medzi značkami. Posledný krok ju nemá — nič po ňom nenasleduje. */






/* Priebeh dopytu. Zákazník tu len číta — písať sa dá odpoveďou na e-mail. */
/*
 * Komunikácia k dopytu ako rozhovor.
 *
 * Boli to dva rovnako široké bloky pod sebou, líšiace sa len odtieňom
 * pozadia — kto čo povedal, sa dalo zistiť až prečítaním popisky. Rozhovor
 * to hovorí polohou: naše správy vľavo, zákazníkove vpravo, obe užšie než
 * karta, takže je medzi nimi vidieť striedanie.
 *
 * Bublina sa nezmestí cez celú šírku zámerne — pri 100 % by strany splynuli
 * a z rozhovoru by bol zase zoznam.
 */
.shop-chat {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.shop-chat__row {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    max-width: 88%;
}

.shop-chat__row.is-mine {
    align-items: flex-end;
    align-self: flex-end;
}

/*
 * Naša správa je sivá plocha, zákazníkova tmavomodrá s bielym textom.
 *
 * Dve bledé bubliny na bielej karte splývali — rozdiel medzi „my" a „vy"
 * niesol len odtieň, ktorý sa dal prehliadnuť. Plná farba na jednej strane to
 * povie na prvý pohľad, tak ako to robí každý četový program.
 *
 * Tmavomodrá, nie zlatá: zlatá na tomto webe znamená „tu klikni" a nosí ju
 * tlačidlo Zaplatiť. Správa nie je akcia.
 *
 * Spodná hranica šírky je tu preto, že z jednoslovnej odpovede („áno")
 * vznikala poštová známka, ktorú bolo treba hľadať očami.
 */
.shop-chat__bubble {
    min-width: min(260px, 100%);
    padding: 12px 16px;
    border: 0;
    /* Roh pri „svojej" strane je ostrý — to je to, čo z dvoch obdĺžnikov
       spraví rozhovor namiesto dvoch kariet. */
    border-radius: 14px 14px 14px 4px;
    background: var(--shop-bg);
}

.shop-chat__row.is-mine .shop-chat__bubble {
    border-radius: 14px 14px 4px 14px;
    background: var(--shop-navy);
}

/* Kto hovorí, je menšie než to, čo hovorí — v dvojici je podstatná správa,
   meno je len jej štítok. */
.shop-chat__who {
    margin: 0 0 4px;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--shop-muted);
}

.shop-chat__row.is-mine .shop-chat__who {
    color: rgba(255, 255, 255, .6);
}

.shop-chat__row.is-mine .shop-chat__text {
    color: #fff;
}

.shop-chat__text {
    margin: 0;
    font-size: 15px;
    line-height: 1.6;
    color: var(--shop-ink);
    /* Zalomenia z e-mailu ostávajú zalomeniami; dlhá adresa nerozšíri kartu. */
    white-space: pre-line;
    overflow-wrap: anywhere;
}

/* Čas pod bublinou, nie v nej: je to údaj o správe, nie jej súčasť, a v
   hlavičke odtláčal meno pisateľa na druhý koniec riadku. */
.shop-chat__at {
    margin-top: 3px;
    padding: 0 2px;
    font-size: 11.5px;
    color: var(--shop-muted);
}

@media screen and (max-width: 575px) {
    .shop-chat__row {
        max-width: 92%;
    }
}

/* Prehľadová dvojica údajov */
.shop-dl {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 16px 24px;
    margin: 0;
}

.shop-dl div {
    min-width: 0;
}

.shop-dl dt {
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--shop-muted);
    margin: 0 0 4px;
}

.shop-dl dd {
    margin: 0;
    font-size: 14.5px;
    color: var(--shop-ink);
    word-break: break-word;
}

/* Uložené firmy a adresy */
.shop-cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 20px;
}

.shop-minicard {
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    padding: 20px;
    background: #fff;
    position: relative;
}

.shop-minicard.is-default {
    border-color: var(--shop-navy);
    box-shadow: 0 0 0 1px var(--shop-navy) inset;
}

.shop-minicard__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    margin: 0 0 8px;
}

.shop-minicard h3 {
    font-size: 16px;
    font-weight: 700;
    color: var(--shop-navy);
    margin: 0;
    min-width: 0;
}

.shop-minicard__flags {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    flex: 0 0 auto;
}

/* Hviezdička namiesto odznaku „Predvolená". Predvolená je práve jedna
   a v mriežke kariet sa hľadá očami, nie čítaním. */
.shop-star {
    color: var(--shop-gold-dark);
    font-size: 17px;
    line-height: 1;
}

.shop-minicard__country {
    font-size: 12px;
    font-weight: 600;
    color: var(--shop-muted);
    letter-spacing: .04em;
}

.shop-minicard p {
    margin: 0 0 4px;
    font-size: 14px;
    color: var(--shop-muted);
}

.shop-minicard__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
    margin: 16px 0 0;
    padding: 14px 0 0;
    border-top: 1px solid var(--shop-line);
}

/* --------------------------------------------------------------------------
   Hlavička — ikona košíka a účtu
   -------------------------------------------------------------------------- */

.shop-nav {
    display: flex;
    align-items: center;
    gap: 10px;
}

/* Účet a košík zdieľajú tvar pilulky s navigáciou, ale nie váhu. Účet je
   pomocná akcia — obrys, žiadna výplň. Košík je jediná konverzia v hlavičke,
   preto ako jediný nesie zlatú výplň a nezanikne v rade tmavomodrých pilúl. */
.shop-iconbtn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 9px 15px;
    border: 1px solid var(--shop-navy);
    border-radius: 2rem;
    background: transparent;
    font-size: 16px;
    font-weight: 600;
    color: var(--shop-navy);
    cursor: pointer;
    white-space: nowrap;
    transition: 0.15s linear;
}


/* Účet, v ktorom práve stojím. Rovnaký tvar, len vyplnený — hlavička tak
   povie, kde som, bez ďalšieho prvku navyše. */
.shop-iconbtn.is-here {
    background: var(--shop-navy);
    color: #fff;
}

.shop-iconbtn:hover {
    background: var(--shop-navy);
    color: var(--shop-gold);
}

.shop-iconbtn svg {
    width: 19px;
    height: 19px;
    flex: 0 0 auto;
}

.shop-iconbtn.dropdown-toggle::after {
    display: none;
}

/* Košík. Bublina s počtom je to, čo z ikony robí eshopový košík — bez nej
   je to len odkaz a zákazník nevidí, že už niečo pridal. */
.shop-cart {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 10px 1.25rem;
    border-radius: 2rem;
    background: var(--shop-gold);
    color: var(--shop-navy);
    font-weight: 700;
    font-size: 16px;
    white-space: nowrap;
    transition: 0.15s linear;
}

.shop-cart:hover {
    background: var(--shop-navy);
    color: var(--shop-gold);
}

.shop-cart svg {
    width: 21px;
    height: 21px;
    flex: 0 0 auto;
}

.shop-cart__badge {
    position: absolute;
    top: -4px;
    left: 26px;
    min-width: 20px;
    height: 20px;
    padding: 0 6px;
    border-radius: 999px;
    background: var(--shop-navy);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    line-height: 20px;
    text-align: center;
    box-shadow: 0 0 0 2px #fff;
}

.shop-cart:hover .shop-cart__badge {
    background: var(--shop-gold);
    color: var(--shop-navy);
    box-shadow: 0 0 0 2px var(--shop-navy);
}

/* --------------------------------------------------------------------------
   Hlavička na úzkom desktope (992–1450 px)

   Rad je logo + šesť pilúl menu + účet + košík. Nad 1450 px sa zmestí, pod
   ňou nie: logo sa začne stláčať, pilulky vytlačia košík a stránka dostane
   vodorovný posuvník. Menu sa pritom na hamburger prepína až pod 992 px,
   takže tie dva pásma treba prežiť.

   Preto tu účet a košík strácajú popisok a ostávajú ako ikony — sú to dve
   akcie, ktoré zákazník pozná podľa tvaru, a text pri nich stojí najviac
   miesta za najmenej informácie. Popisok sa neruší, len sa skryje pre oči:
   čítačka ho prečíta ďalej, inak by z tlačidla ostal odkaz bez názvu.

   Pilulky sa zmenšujú plynulo cez clamp(), nie skokom na hranici — skok by
   znamenal, že tesne nad ňou stránka vyzerá inak než tesne pod.
   -------------------------------------------------------------------------- */
/* --------------------------------------------------------------------------
   Účet a košík ako ikony na celom počítači.

   Popisky boli pôvodne vidieť nad 1450 px. Kým bola v menu jedna kategória
   navyše, prestalo to vychádzať aj tam — logo sa muselo zmenšovať, aby sa
   rad zmestil. Ikona s bublinkou počtu nesie tú istú informáciu na tretine
   šírky; suma z košíka ostáva v `title` a v samotnom paneli košíka.

   Vysúvacie menu na mobile je výnimka: tam popisky ostávajú, lebo v zozname
   odkazov pod sebou by holá ikona vyzerala ako cudzí prvok.
   -------------------------------------------------------------------------- */
@media screen and (min-width: 992px) {
    .shop-nav__label {
        position: absolute !important;
        width: 1px;
        height: 1px;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }

    .shop-nav {
        gap: 10px;
    }

    .shop-iconbtn,
    .shop-cart {
        width: 44px;
        height: 44px;
        padding: 0;
        gap: 0;
        justify-content: center;
    }

    /* Bublinka sedí na ikone, nie vedľa popisku, ktorý tu už nie je. */
    .shop-cart__badge {
        top: -3px;
        right: -3px;
        left: auto;
    }

    .nav-drawer .shop-nav__label {
        position: static !important;
        width: auto;
        height: auto;
        overflow: visible;
        clip-path: none;
    }

    .nav-drawer .shop-iconbtn,
    .nav-drawer .shop-cart {
        width: auto;
        height: auto;
        padding: 9px 15px;
        gap: 8px;
    }
}

@media screen and (min-width: 992px) and (max-width: 1450px) {
    .shop-nav__label {
        position: absolute !important;
        width: 1px;
        height: 1px;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }

    .shop-nav {
        gap: 8px;
    }

    .shop-iconbtn,
    .shop-cart {
        width: clamp(40px, 3vw, 44px);
        height: clamp(40px, 3vw, 44px);
        padding: 0;
        gap: 0;
        justify-content: center;
    }

    /* Bublinka sedí na ikone, nie vedľa popisku, ktorý tu už nie je. */
    .shop-cart__badge {
        top: -3px;
        right: -3px;
        left: auto;
    }

    /* Logo je jediné, čo sa nesmie stlačiť — bez neho stránka stratí značku. */
    .navbar-brand {
        flex: 0 0 auto;
    }

    .navbar-brand img {
        width: clamp(140px, 13vw, 190px);
    }

    .navbar-light .navbar-nav .nav-link {
        font-size: clamp(12px, 1.05vw, 16px);
        padding: 9px clamp(0.4rem, 0.82vw, 1rem);
    }

    .navbar-light .navbar-nav li {
        margin-right: clamp(0.1rem, 0.35vw, 0.5rem);
    }
}

/*
 * Pod 1025 px sa sedem položiek do jedného radu nezmestí ani v najmenšej
 * veľkosti — hlavička pretekala von zo stránky o ~47 px a celý web sa dal
 * na tablete ťahať do strany. Namiesto pretečenia sa zoznam zalomí do
 * druhého riadku; drawer sa sem púšťať nedá, ten platí až do 991 px.
 */
@media screen and (min-width: 992px) and (max-width: 1024px) {
    .navbar-light .navbar-nav {
        flex-wrap: wrap;
        justify-content: flex-end;
        row-gap: 6px;
        min-width: 0;
    }
}

.shop-menu.dropdown-menu {
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    box-shadow: var(--shop-shadow-lg);
    padding: 8px;
    min-width: 220px;
}

.shop-menu .dropdown-item {
    border-radius: 8px;
    padding: 10px 12px;
    font-size: 14px;
    color: var(--shop-ink);
}

.shop-menu .dropdown-item:hover {
    background: var(--shop-bg);
    color: var(--shop-navy);
}

.shop-menu hr {
    margin: 6px 4px;
    border: 0;
    border-top: 1px solid var(--shop-line);
}

.shop-menu button.dropdown-item {
    width: 100%;
    text-align: left;
    background: transparent;
    border: 0;
    cursor: pointer;
    color: var(--shop-danger);
}

/* --------------------------------------------------------------------------
   Doplnky pri balíčku v cenníku služby

   Cenník patrí prevzatej téme, ale zaškrtávacie doplnky sú eshopový prvok —
   preto sú tu a nie v style.css. Pravidlo zhora platí: do témy sa nesiaha.
   -------------------------------------------------------------------------- */

.package-addons {
    margin: 0 0 24px;
    padding: 16px 0 4px;
    border-top: 1px solid rgba(45, 46, 121, .12);
}

/*
 * Selektor musí byť takto zdĺhavý: téma má `.populer-serviceplan label`, čo
 * je odznak „Odporúčame" — tmavá pilulka. To pravidlo trafí ktorýkoľvek
 * <label> v karte vrátane doplnkov a samotné `.package-addon` ho špecificitou
 * neprebije. Preto sa tu odznak najprv vyresetuje.
 */
.service-price-box label.package-addon {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin: 0 0 10px;
    padding: 0;
    background: none;
    border-radius: 0;
    position: static;
    font-size: 14px;
    font-weight: 300;
    line-height: 20px;
    color: #2D2E79;
    cursor: pointer;
}

/* Na zlatej karte je tmavý text čitateľnejší než tmavomodrý. */
.populer-serviceplan label.package-addon {
    color: #2E2E2E;
}

.package-addon input[type="checkbox"] {
    flex: 0 0 auto;
    width: 16px;
    height: 16px;
    margin: 2px 0 0;
    /* Zaškrtnutie v odtieni karty, nie v predvolenej modrej prehliadača. */
    accent-color: #2D2E79;
    cursor: pointer;
}

.populer-serviceplan .package-addon input[type="checkbox"] {
    accent-color: #2E2E2E;
}

.package-addon__price {
    margin-left: auto;
    font-weight: 600;
    white-space: nowrap;
}

/*
 * .btn-main je v téme navrhnuté pre <a>. Na <button> sa k nemu pridá
 * predvolený rám prehliadača (`border: 2px outset`) — to je ten obrys navyše.
 * Téma ho neruší, lebo v nej žiadne tlačidlo nebolo.
 */
button.btn-main {
    border: 0;
    font-family: inherit;
    cursor: pointer;
}

/*
 * Obrys pri kliknutí preč, pri prechode klávesnicou ostáva. Úplné
 * `outline: none` by web znefunkčnilo pre každého, kto nepoužíva myš —
 * nemal by ako zistiť, kde sa nachádza.
 */
button.btn-main:focus {
    outline: none;
}

button.btn-main:focus-visible {
    outline: 2px solid var(--shop-navy);
    outline-offset: 2px;
}

/* --------------------------------------------------------------------------
   Záložky kategórií na výpise služieb
   -------------------------------------------------------------------------- */

.group-tabs {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 10px;
    list-style: none;
    margin: 0 0 32px;
    padding: 0;
}

.group-tabs a {
    display: inline-block;
    padding: 10px 22px;
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    background: #fff;
    font-size: 14px;
    font-weight: 500;
    line-height: 20px;
    color: var(--shop-navy);
    text-decoration: none;
}

.group-tabs a:hover {
    border-color: var(--shop-navy);
}

.group-tabs a.is-active {
    background: var(--shop-navy);
    border-color: var(--shop-navy);
    color: #fff;
}

/* --------------------------------------------------------------------------
   Vysúvací košík

   Pozicovanie, prekrytie a animáciu rieši bootstrapový .offcanvas — tu je
   len vzhľad a rozvrhnutie. Šírka ide cez --bs-offcanvas-width, nie cez
   width: Bootstrap z tej premennej počíta aj posun pri zasúvaní, takže
   priame width by animáciu rozladilo.

   Hlavička a pätička držia, scrolluje sa len telo — preto min-height: 0.
   Bez neho flexový potomok nikdy nezmenší pod obsah a scrollbar sa objaví
   na celom paneli aj s odsunutou pätičkou.
   -------------------------------------------------------------------------- */

.shop-drawer {
    /* Názov balíčka aj doplnok s cenou sa musia zmestiť na jeden riadok —
       pri 420 px sa lámali na dva a panel pôsobil natlačene. */
    --bs-offcanvas-width: 500px;

    background: var(--shop-card);
    color: var(--shop-ink);
    font-size: 15px;
    /* Zaoblená hrana ako karty na homepage — panel má pôsobiť ako časť
       webu, nie ako systémové okno prilepené k okraju. */
    border-radius: var(--shop-radius) 0 0 var(--shop-radius);
    overflow: hidden;
}

.shop-drawer__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
    padding: 22px 24px 18px;
    border-bottom: 1px solid var(--shop-line);
}

/* Zlatý nadpisok nad titulkom je ten istý vzor ako .titlebar h6 na
   homepage („O NÁS“, „SLUŽBY“). */
.shop-drawer__eyebrow {
    display: block;
    margin: 0 0 4px;
    font-family: 'Kumbh Sans', 'Poppins', sans-serif;
    font-size: 12px;
    font-weight: 800;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--shop-gold);
}

.shop-drawer__title {
    margin: 0;
    font-size: 20px;
    font-weight: 700;
    line-height: 1.3;
    color: var(--shop-navy);
}

.shop-drawer__close {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 34px;
    height: 34px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: var(--shop-bg);
    font-size: 22px;
    line-height: 1;
    color: var(--shop-navy);
    cursor: pointer;
    transition: 0.15s linear;
}

.shop-drawer__close:hover {
    background: var(--shop-navy);
    color: var(--shop-gold);
}

.shop-drawer__body {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    padding: 8px 24px 16px;
}

.shop-drawer__foot {
    flex: 0 0 auto;
    padding: 18px 24px 22px;
    border-top: 1px solid var(--shop-line);
    background: var(--shop-bg);
}

.shop-drawer__total {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    margin: 0 0 14px;
}

.shop-drawer__total strong {
    font-size: 22px;
    font-weight: 700;
    color: var(--shop-navy);
}

.shop-drawer .shop-empty {
    padding: 48px 8px;
}

.shop-drawer .shop-empty h3 {
    margin: 0 0 8px;
    font-size: 18px;
    font-weight: 700;
    color: var(--shop-navy);
}

.shop-drawer .shop-hint {
    margin: 0 0 14px;
}

/* Riadok vysúvacieho košíka. Užší variant .shop-line — ikona, obsah
   a kôš, bez stĺpca so sumou: tá sa v paneli nezmestí vedľa steppera,
   preto je pod ním.

   Horný riadok je flex, nie grid. Pri gride bez ikony ostal jeden prvok
   navyše a obsah aj kôš sa posunuli o stĺpec doľava — kôš potom visel
   hneď za názvom namiesto pri okraji panela. */
.shop-drawerline {
    padding: 18px 0;
    border-bottom: 1px solid var(--shop-line);
}

.shop-drawerline__top {
    display: flex;
    align-items: flex-start;
    gap: 14px;
}

.shop-drawerline__main {
    flex: 1 1 auto;
    min-width: 0;
}

.shop-drawerline__top > form {
    flex: 0 0 auto;
}

.shop-drawerline:last-child {
    border-bottom: 0;
}

.shop-drawerline.is-unavailable {
    opacity: .55;
}

.shop-drawerline__icon {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 52px;
    height: 52px;
    border-radius: var(--shop-radius-sm);
    background: var(--shop-bg);
}

.shop-drawerline__icon img {
    width: 28px;
    height: 28px;
    object-fit: contain;
}

.shop-drawerline__main h3 {
    margin: 0 0 4px;
    font-size: 15px;
    font-weight: 700;
    line-height: 1.35;
    color: var(--shop-navy);
}

.shop-drawerline__unit {
    margin: 0;
    font-size: 13px;
    color: var(--shop-muted);
}

.shop-drawerline__foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin: 12px 0 0;
}

.shop-drawerline__price {
    font-size: 15px;
    font-weight: 700;
    white-space: nowrap;
    color: var(--shop-navy);
}

/* Doplnkové služby. Zoznam stojí otvorený a každá položka je prepínač —
   zákazník vidí, čo v cene je, a mení to jedným kliknutím kdekoľvek
   v riadku, nie na podčiarknutom slove. */
.shop-addons {
    margin: 10px 0 0;
    padding: 10px 12px;
    border: 1px solid var(--shop-gold-line);
    border-radius: 14px;
    background: var(--shop-gold-soft);
}

.shop-addons__label {
    display: block;
    margin: 0 0 6px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--shop-gold-dark);
}

.shop-addon + .shop-addon {
    margin-top: 4px;
}

.shop-addon button {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 6px 8px;
    border: 0;
    border-radius: 10px;
    background: none;
    font-size: 13px;
    line-height: 1.3;
    text-align: left;
    color: var(--shop-muted);
    cursor: pointer;
    transition: background-color .15s linear, color .15s linear;
}

.shop-addon button:hover {
    background: rgba(255, 255, 255, .7);
    color: var(--shop-ink);
}

/* Štvorček namiesto textu „Pridať/Odobrať“ — stav sa číta pohľadom.
   Fajka sa centruje flexom, nie dopočítanými pixelmi: otočenie o 45°
   nemení stred elementu, takže sedí bez ohľadu na veľkosť štvorčeka. */
.shop-addon__mark {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    border: 1.5px solid var(--shop-gold-dark);
    border-radius: 6px;
    background: #fff;
    transition: 0.15s linear;
}

.shop-addon.is-on .shop-addon__mark {
    border-color: var(--shop-navy);
    background: var(--shop-navy);
}

.shop-addon__mark::after {
    content: "";
    width: 5px;
    height: 9px;
    /* Fajka má ťažisko nižšie než jej rám — bez posunu pôsobí utopene. */
    margin-top: -2px;
    border: solid var(--shop-gold);
    border-width: 0 2px 2px 0;
    border-radius: 1px;
    transform: rotate(45deg);
    opacity: 0;
}

.shop-addon.is-on .shop-addon__mark::after {
    opacity: 1;
}

.shop-addon__name {
    flex: 1 1 auto;
    min-width: 0;
}

.shop-addon__price {
    flex: 0 0 auto;
    font-weight: 600;
    white-space: nowrap;
    color: var(--shop-ink);
}

.shop-addon.is-on button {
    color: var(--shop-ink);
    font-weight: 600;
}

.shop-addon.is-on .shop-addon__price {
    color: var(--shop-navy);
}

/* --------------------------------------------------------------------------
   Responzívne
   -------------------------------------------------------------------------- */

@media screen and (max-width: 1199px) {
    .shop-grid {
        grid-template-columns: minmax(0, 1fr) 330px;
        gap: 20px;
    }

    .shop-items__head,
    .shop-item {
        grid-template-columns: minmax(0, 1fr) auto 100px 110px;
        gap: 12px;
    }
}

/* Pod túto šírku sa štyri stĺpce nezmestia. Riadok sa preskladá na dva
   pásy a sumy dostanú popisky z hlavičky cez data-label — bez nich by
   pod sebou stáli dve čísla bez vysvetlenia. */
@media screen and (max-width: 767px) {
    .shop-items {
        padding: 8px 16px 12px;
    }

    .shop-items__head {
        display: none;
    }

    .shop-item {
        grid-template-columns: minmax(0, 1fr) auto;
        gap: 10px;
    }

    .shop-item__col {
        display: flex;
        align-items: baseline;
        justify-content: space-between;
        gap: 12px;
        text-align: left;
    }

    .shop-item__col::before {
        content: attr(data-label);
        font-size: 11px;
        font-weight: 700;
        letter-spacing: .08em;
        text-transform: uppercase;
        color: var(--shop-muted);
    }

    .shop-item__main,
    .shop-item__col {
        grid-column: 1 / -1;
    }

    .shop-item__qty {
        grid-column: 1 / -1;
        justify-content: space-between;
    }
}

@media screen and (max-width: 991px) {
    .shop-grid,
    .shop-account-grid,
    .acc-cols {
        grid-template-columns: minmax(0, 1fr);
    }

    /* Na tablete by 500 px zabralo dve tretiny obrazovky a zákazník by
       nevidel, z ktorej stránky si košík otvoril. */
    .shop-drawer {
        --bs-offcanvas-width: 420px;
    }

    /* Z bočnej navigácie sa stáva vodorovná lišta záložiek pod nadpisom.
       Je to ten istý zoznam odkazov — druhá kópia navigácie pre mobil by sa
       skôr či neskôr rozišla s tou pre desktop. */
    .shop-sidenav {
        position: static;
        background: transparent;
        border: 0;
        padding: 0;
    }

    .shop-sidenav__profile {
        background: var(--shop-card);
        border: 1px solid var(--shop-line);
        border-radius: var(--shop-radius-sm);
        padding: 14px 16px;
        margin: 0 0 12px;
    }

    .shop-sidenav__links {
        display: flex;
        align-items: center;
        gap: 6px;
        overflow-x: auto;
        scrollbar-width: none;
        background: var(--shop-card);
        border: 1px solid var(--shop-line);
        border-radius: var(--shop-radius-sm);
        padding: 6px;
    }

    .shop-sidenav__links::-webkit-scrollbar {
        display: none;
    }

    /*
     * Bez podčiarknutia aktívnej záložky.
     *
     * Odkazy majú zaoblené rohy, takže rovný 3 px okraj spodku nekopíroval
     * tvar pilulky — vytŕčal spod nej ako tmavý pásik zavesený vo vzduchu.
     * Ktorá záložka je otvorená, hovorí výplň a tmavomodrý text, rovnako
     * ako v bočnom paneli na širokej obrazovke.
     */
    .shop-sidenav__links a,
    .shop-sidenav__links button {
        width: auto;
        min-height: 0;
        white-space: nowrap;
        padding: 9px 14px;
    }

    /* Výplň musí byť v lište výraznejšia než v paneli: tam je `--shop-bg`
       na bielej karte rozoznateľné podľa polohy v stĺpci, tu sú záložky
       vedľa seba a rozdiel jedného percenta jasu nevidno. Stále je to
       svetlá výplň s tmavomodrým textom, nie farebná pilulka. */
    .shop-sidenav__links a.is-active {
        background: rgba(45, 46, 121, .09);
    }

    /* V lište je počet aj bodka hneď za textom — `margin-left: auto` by ich
       na vodorovnom riadku odtlačil na koniec obrazovky. */
    .shop-sidenav b,
    .shop-sidenav__dot {
        margin-left: 6px;
    }

    /* Odhlásenie ostáva na konci lišty — na mobile inde v účte nie je. */
    .shop-sidenav__logout {
        margin: 0;
        padding: 0 0 0 6px;
        border-top: 0;
        border-left: 1px solid var(--shop-line);
    }

    .acc-filters__search {
        flex-basis: 100%;
    }

    /*
     * Názov a suma na prvý riadok, meta a stav pod ne. Šípka na mobile nič
     * nepridáva — celý riadok je aj tak odkaz.
     */
    .acc-list__row {
        display: grid;
        grid-template-columns: minmax(0, 1fr) auto;
        gap: 2px 10px;
        padding: 12px 14px;
    }

    .acc-list__main,
    .acc-list__side {
        display: contents;
    }

    .acc-list__name {
        grid-column: 1;
    }

    .acc-list__sum {
        grid-column: 2;
        grid-row: 1;
    }

    .acc-list__meta {
        grid-column: 1;
        margin-top: 0;
    }

    .acc-list__state {
        grid-column: 2;
        margin-top: 0;
        text-align: right;
    }

    .acc-list__go {
        display: none;
    }

    /* Zhrnutie s tlačidlom ide nad rozpis — inak sa k akcii scrolluje cez
       celý zoznam položiek. */
    .acc-order {
        grid-template-columns: minmax(0, 1fr);
    }

    .acc-order__side {
        position: static;
        order: -1;
    }

    /* Kroky pod seba: tri vodorovné popisy sa do 400 px nezmestia. Os sa
       otočí na zvislú a bodky sadnú k ľavému okraju. */
    .acc-steps {
        flex-direction: column;
        align-items: stretch;
        gap: 14px;
        padding: 0 0 0 24px;
    }

    .acc-steps::before,
    .acc-steps::after {
        top: 7px;
        left: 6px;
        right: auto;
        width: 2px;
    }

    .acc-steps::before {
        bottom: 7px;
        height: auto;
    }

    .acc-steps::after {
        height: calc((100% - 14px) * var(--acc-progress, 0));
    }

    /* Popisky sú v stĺpci pod sebou — krajné sa už nemajú k čomu zarovnávať. */
    .acc-steps li,
    .acc-steps li:first-child,
    .acc-steps li:last-child {
        padding: 0;
        text-align: left;
    }

    .acc-steps__mark,
    .acc-steps li:first-child .acc-steps__mark,
    .acc-steps li:last-child .acc-steps__mark {
        top: 0;
        left: -24px;
        right: auto;
        transform: none;
    }

    .acc-more {
        flex: 1 1 100%;
    }

    .acc-more summary {
        justify-content: center;
    }

    .acc-more__body {
        left: 0;
        right: 0;
        flex-wrap: wrap;
    }

    .acc-more__body .shop-input {
        flex: 1 1 120px;
        width: auto;
    }

    .shop-summary {
        position: static;
        max-height: none;
    }

    /* Vytiahnuteľný panel je len tam, kde ho má čo vytiahnuť — v košíku.
       Súhrn objednávky nesie súhlasy a tlačidlo „Záväzne objednať", takže
       schovať ho pod okraj obrazovky bez lišty by checkout na mobile
       zamkol. Je to ten istý uzol, nie druhá kópia: dva rovnaké formuláre
       zľavového kódu na jednej stránke by si prekážali. */
    .shop-summary--sheet {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        top: auto;
        z-index: 1040;
        max-height: 82vh;
        overflow-y: auto;
        transform: translateY(101%);
        transition: transform .3s ease;
    }

    .shop-summary--sheet.is-open {
        transform: translateY(0);
    }

    .shop-summary--sheet .shop-card {
        border-radius: var(--shop-radius) var(--shop-radius) 0 0;
        margin: 0;
        padding-bottom: 28px;
    }

    .shop-summary--sheet .shop-summary__close {
        display: inline-flex;
    }

    .shop-mobilebar {
        display: flex;
    }

    .shop-sheet-backdrop.is-open {
        display: block;
    }

    /* Miesto pre lištu, aby neprekryla posledné tlačidlo na stránke. */
    .shop {
        padding-bottom: 104px;
    }

    .shop-nav {
        width: 100%;
        justify-content: flex-start;
        flex-wrap: wrap;
        margin: 12px 0 0;
    }
}

@media screen and (max-width: 767px) {
    .shop {
        padding: 24px 0 104px;
    }


    .shop-hero {
        padding: 26px 0 24px;
    }

    .shop-hero__title {
        font-size: 26px;
    }

    /* Kroky sa zmenšia na čísla. Tri popisky vedľa seba sa na úzkej
       obrazovke zalomia do troch riadkov a pruh narastie na pol displeja. */
    .shop-steps__label {
        display: none;
    }

    .shop-steps li::after {
        width: 24px;
        margin: 0 2px;
    }

    .shop-addonrow {
        flex-direction: column;
        align-items: stretch;
    }

    .shop-card {
        padding: 18px;
    }

    .shop-pkg {
        grid-template-columns: 52px minmax(0, 1fr);
        gap: 14px;
        padding: 16px;
    }

    .shop-pkg__icon {
        width: 52px;
        height: 52px;
    }

    .shop-pkg__icon img {
        max-width: 30px;
        max-height: 30px;
    }

    /* Cena ide pod názov, aby sa nadpis nelámal na tri znaky na riadok. */
    .shop-pkg__head {
        display: block;
    }

    .shop-pkg__name {
        font-size: 19px;
    }

    .shop-pkg__price {
        font-size: 22px;
        margin-top: 6px;
    }

    /* Cena doplnku a jeho ovládanie pod popis — vedľa seba by na úzkej
       obrazovke nezostalo miesto ani na jedno. */
    .shop-addonrow__right {
        width: 100%;
        justify-content: flex-end;
        margin-top: 8px;
        padding-left: 32px;
    }

    .shop-field--2,
    .shop-field--3,
    .shop-field--4,
    .shop-field--5,
    .shop-field--6,
    .shop-field--8,
    .shop-field--9 {
        grid-column: span 12;
    }

    /* Linka nad adresou ostáva, ale len raz — polia sú pod sebou. */
    .shop-field--split + .shop-field--split {
        border-top: 0;
        padding-top: 0;
    }






    .shop-steps {
        font-size: 12px;
        gap: 6px;
    }

    .shop-steps li::after {
        width: 12px;
    }

    .shop-coupon {
        flex-wrap: wrap;
    }

    .shop-coupon .shop-btn {
        width: 100%;
    }

    /* Na telefóne panel cez celú šírku — pevná šírka by na 360 px displeji
       pretiekla a Bootstrap by ho zasúval mimo obrazovku. */
    .shop-drawer {
        --bs-offcanvas-width: 100%;
    }

    .shop-drawer__head,
    .shop-drawer__body,
    .shop-drawer__foot {
        padding-left: 16px;
        padding-right: 16px;
    }

    .shop-drawerline__top {
        gap: 12px;
    }

    .shop-drawerline__icon {
        width: 44px;
        height: 44px;
    }
}

/* --- Kód v redakčnom texte ---------------------------------------------------
 * Voľba „kód" v admin editore ukladá <code> a <pre>. Bez týchto pravidiel by
 * dlhý riadok roztiahol celú stránku do šírky namiesto toho, aby sa posúval
 * sám v sebe.
 */
code {
    padding: .1em .35em;
    border-radius: 4px;
    background: #f2f3f7;
    font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: .9em;
    color: #2d2e79;
}

pre {
    max-width: 100%;
    padding: 16px 18px;
    border-radius: 10px;
    background: #23241f;
    color: #f8f8f2;
    overflow-x: auto;
}

pre code { padding: 0; background: none; color: inherit; }

/* --------------------------------------------------------------------------
   Vlajka kategórie v hlavnom menu

   Výška je viazaná na riadok textu, nie na pevné pixely — názov „Služby
   Nemecko" a vlajka tak sedia na jednej linke aj v rozbalenom menu na mobile.
   -------------------------------------------------------------------------- */
.navbar-nav .nav-flag {
    width: auto;
    height: 0.9em;
    margin-right: 8px;
    border-radius: 2px;
    vertical-align: -1px;
}

/* --------------------------------------------------------------------------
   Ceny na dlaždici služby

   Dlaždica ukazuje obe ceny — živnostník aj firma — a typ patrí k sume, nie
   nad ňu. Zvyšok dlaždice je téma, tu je len to, čo v nej pre dva riadky
   chýbalo.
   -------------------------------------------------------------------------- */

.price-act h4 + h4 {
    margin-top: 6px;
}

.price-act h4 small {
    margin-left: 6px;
    font-size: 13px;
    font-weight: 400;
    color: var(--shop-muted);
}

.price-act h4 em {
    font-size: 18px;
    font-style: normal;
    color: var(--shop-muted);
}

/* --------------------------------------------------------------------------
   Súhlas so spracovaním údajov na svetlom pozadí

   Zaškrtávacie políčko je na celom webe jedno: .custome-chackbx z témy.
   Tá ho kreslí pre tmavomodrý panel — biele okienko, biely text. Na svetlej
   kontaktnej stránke by biele okienko na bielom nebolo vidieť, preto tu
   dostáva tmavomodrý rám a text. Zaškrtnuté vyzerá rovnako na oboch
   pozadiach: zlaté okienko s tmavomodrou fajkou.
   -------------------------------------------------------------------------- */

.contact-profile .custome-chackbx .styled-checkbox + label,
.contact-profile .custome-chackbx .styled-checkbox + label a {
    color: var(--shop-navy);
}

.contact-profile .custome-chackbx .styled-checkbox + label:before {
    border: 1px solid var(--shop-navy);
}

.contact-profile .custome-chackbx .styled-checkbox:focus-visible + label:before {
    outline: 3px solid rgba(45, 46, 121, .25);
    outline-offset: 2px;
}

/* ==========================================================================
   Katalóg služieb

   Výpis kategórie je prvý krok nákupu, nie iná stránka — má preto tie isté
   karty a farby ako košík. Hlavička ostáva rovnaká ako na kontaktnej stránke
   a pod ňou sú rovno kategórie.
   ========================================================================== */

/* Banner bez fotky. Téma necháva .service-banner-wrp spodok otvorený, lebo
   počíta s obrázkom, ktorý doň zapadá zospodu. Bez fotky sa obsah lepil na
   dolný okraj sivého bloku. */
.service-banner-wrp.shop-herobox {
    padding: 40px 60px;
}

@media (max-width: 767px) {
    .service-banner-wrp.shop-herobox {
        padding: 32px 24px;
    }
}

/* --------------------------------------------------------------------------
   Kategórie pod nadpisom

   Vlajka je tá istá ako v hlavnom menu a v pätičke — kategória vyzerá na
   celom webe rovnako.
   -------------------------------------------------------------------------- */

.shop-cattabs {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin: 4px 0 0;
}

.shop-cattab {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 9px 18px;
    border: 1px solid var(--shop-line);
    border-radius: 30px;
    background: var(--shop-card);
    color: var(--shop-navy);
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    transition: background-color .2s ease, border-color .2s ease, color .2s ease;
}

.shop-cattab:hover {
    border-color: var(--shop-navy);
    color: var(--shop-navy);
}

/* Zlatá znamená stav — tu „toto práve pozeráte". */
.shop-cattab.is-on {
    background: var(--shop-gold);
    border-color: var(--shop-gold);
    color: var(--shop-navy);
}

.shop-cattab__flag {
    width: 18px;
    height: auto;
    border-radius: 2px;
}

/* --------------------------------------------------------------------------
   Lišta nad výpisom — počet a hľadanie
   -------------------------------------------------------------------------- */

/* Lišta nad výpisom nie je karta — je to riadok. Rám okolo počtu a poľa
   pridával tretiu plochu medzi banner a dlaždice, kde nič nie je. */
.shop-catbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    margin: 0 0 24px;
}

.shop-catbar__count {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--shop-navy);
}

.shop-catsearch {
    flex: 0 1 280px;
}

.shop-catsearch .shop-input {
    padding: 9px 16px;
    border-radius: 30px;
}

@media (max-width: 767px) {
    .shop-catbar {
        flex-direction: column;
        align-items: stretch;
    }

    .shop-catsearch {
        flex: auto;
    }
}

/* --------------------------------------------------------------------------
   Dlaždice služieb
   -------------------------------------------------------------------------- */

/* Tri v rade ako .col-md-4 v téme. Automatické delenie podľa šírky sa na
   veľkých obrazovkách rozpadlo na štyri úzke stĺpce a názvy služieb sa lámali
   na tri riadky. */
.shop-svcgrid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 24px;
}

@media (max-width: 991px) {
    .shop-svcgrid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 575px) {
    /* `minmax(0, 1fr)`, nie `1fr`: `1fr` má spodnú hranicu na min-content,
       takže jeden dlhý nemecký názov („Umsatzsteuererklärung") roztiahol
       dlaždicu — a s ňou celú stránku — širšie než telefón. */
    .shop-svcgrid {
        grid-template-columns: minmax(0, 1fr);
    }

    .shop-svc {
        padding: 24px;
        overflow-wrap: anywhere;
    }
}

/* Tvar aj výplň má dlaždica z témy: 32px zaoblenie a #F6F7F9, rovnako ako
   .price-list-box, .hero-servbox či bloky na úvodnej stránke. Bez rámu —
   na svetlej sekcii ju vykresľuje plocha, nie linka. */
.shop-svc {
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 32px;
    border-radius: var(--shop-radius);
    background: var(--shop-bg);
    text-decoration: none;
    transition: background-color .2s ease, transform .2s ease;
}

.shop-svc[hidden] {
    display: none;
}

.shop-svc:hover {
    background: #EEF0F5;
    transform: translateY(-2px);
}

.shop-svc:focus-visible {
    outline: 3px solid rgba(45, 46, 121, .35);
    outline-offset: 2px;
}

.shop-svc__icon {
    width: 40px;
    height: 40px;
    margin: 0;
}

.shop-svc__icon img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.shop-svc__title {
    margin: 0;
    font-size: 20px;
    line-height: 1.3;
    font-weight: 700;
    color: var(--shop-navy);
}

/* Popis sa skracuje až tu, nie v šablóne. Tri riadky sú tri riadky bez
   ohľadu na šírku karty — orezanie na počet znakov končilo raz v polovici
   riadku, raz uprostred slova. */
.shop-svc__text {
    margin: 0;
    font-size: 14px;
    line-height: 1.55;
    color: var(--shop-muted);
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* Ceny nad sebou a odkaz pod nimi vpravo. Vedľa seba sa dve sumy a „Zistite
   viac" na šírku karty nezmestili a lámali sa v polovici slova. */
.shop-svc__foot {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-top: auto;
    padding-top: 16px;
    /* Na sivej ploche by --shop-line splynula. */
    border-top: 1px solid #E1E4EC;
}

/* Obe ceny naraz — živnostník aj firma. Typ je vľavo, suma vpravo, takže
   sa čítajú ako dva riadky cenníka, nie ako dve ceny za sebou. */
.shop-svc__prices {
    display: grid;
    gap: 4px;
    margin: 0;
    min-width: 0;
}

.shop-svc__prices > div {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
}

.shop-svc__prices dt {
    font-size: 12px;
    font-weight: 500;
    color: var(--shop-muted);
}

.shop-svc__prices dd {
    margin: 0;
    font-size: 15px;
    font-weight: 700;
    color: var(--shop-navy);
    white-space: nowrap;
}

.shop-svc__prices dd small {
    font-size: 12px;
    font-weight: 500;
    color: var(--shop-muted);
}

/* Bez sumy sa dohaduje podľa rozsahu — text nesmie kričať ako cena. */
.shop-svc__prices dd em {
    font-size: 13px;
    font-weight: 500;
    font-style: normal;
    color: var(--shop-muted);
}

.shop-svc__more {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-left: auto;
    font-size: 13px;
    font-weight: 600;
    color: var(--shop-navy);
    white-space: nowrap;
}

.shop-svc__more svg {
    transition: transform .2s ease;
}

.shop-svc:hover .shop-svc__more svg {
    transform: translateX(3px);
}

.shop-svcempty {
    margin: 0;
    padding: 40px 24px;
    border-radius: var(--shop-radius);
    background: var(--shop-bg);
    text-align: center;
    color: var(--shop-muted);
}

@media (prefers-reduced-motion: reduce) {
    .shop-svc,
    .shop-svc__more svg {
        transition: none;
    }

    .shop-svc:hover {
        transform: none;
    }
}

/* --------------------------------------------------------------------------
   Odkazy v odrážkach banneru

   Odrážka „Rozsah našich služieb zahŕňa" je pilulka s tmavomodrým textom.
   Odkaz v nej si bral svetlomodrú farbu odkazov z témy a text bol na bielej
   pilulke svetlejší než v zozname vedľa — farbu si preto berie z odrážky.
   -------------------------------------------------------------------------- */

.service-banner-data ul li a {
    color: inherit;
}

.service-banner-data ul li a:hover {
    color: var(--shop-gold-dark);
}

/* --------------------------------------------------------------------------
   Stránka sa nenašla

   Stojí na .shop-empty, len s číslom navrchu a radom akcií pod textom.
   Číslo je ozdoba, nie nadpis — má veľkosť, ktorú nadpis mať nesmie, a pre
   čítačku obrazovky je skryté.
   -------------------------------------------------------------------------- */

.shop-404__code {
    margin: 0 0 4px;
    font-size: 72px;
    font-weight: 700;
    line-height: 1;
    color: var(--shop-gold);
}

/* Rad akcií pod prázdnym stavom. Nie .shop-404__: to isté používa aj
   poďakovanie za správu, a trieda s číslom chyby by tam bola lož. */
.shop-empty__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: center;
    margin-top: 28px;
}


/* --------------------------------------------------------------------------
   Dialóg

   Jediné vyskakovacie okno obchodu — potvrdenie akcie (confirm.js) aj výber
   balíčka pri „Objednať znova" (order-again.js). Prehliadač <dialog> nijako
   neštylizuje, takže bez tohto to je biely rám uprostred obrazovky.
   -------------------------------------------------------------------------- */

.shop-dialog {
    /* Vlastné vycentrovanie: téma má v style.css `* { margin: 0 }` a tým
       zhodila `margin: auto`, ktorým prehliadač dialóg centruje sám — okno
       potom viselo v ľavom hornom rohu obrazovky. */
    position: fixed;
    inset: 0;
    margin: auto;
    width: min(520px, calc(100vw - 32px));
    max-height: calc(100vh - 32px);
    overflow-y: auto;
    padding: 28px;
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    background: var(--shop-card);
    color: var(--shop-ink);
    box-shadow: var(--shop-shadow-lg);
}

.shop-dialog::backdrop {
    background: rgba(45, 46, 121, .38);
}

.shop-dialog h2 {
    margin: 0 0 6px;
    font-size: 20px;
    font-weight: 700;
}

.shop-dialog__text {
    margin: 0;
    color: var(--shop-muted);
    font-size: 14px;
}

.shop-dialog__actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 12px;
    margin-top: 20px;
}

/* Odkaz na detail stojí naľavo od tlačidiel — je to únik z dialógu, nie
   jeho tretia akcia. */
.shop-dialog__actions .shop-link {
    margin-right: auto;
    font-size: 13px;
    font-weight: 600;
}

/* Výber balíčka pri „Objednať znova". Sú to tie isté karty ako v cenníku
   na stránke služby, preto je dialóg široký ako cenník — tri karty vedľa
   seba v 600 px by boli tri stĺpce po pár slovách. */
.shop-dialog--packages {
    width: min(1240px, calc(100vw - 32px));
}

.pkgpick {
    margin-top: 18px;
}

/* Karta v dialógu nemá dôvod byť vysoká ako v cenníku — ten sa prezerá,
   tu si zákazník vyberá z toho, čo už pozná. */
.pkgpick .service-price-box {
    margin-bottom: 0;
}

@media (max-width: 575px) {
    .shop-dialog {
        padding: 20px;
    }
}

/* ------------------------------------------------------------------
   Firmy v účte

   Jeden účet môže fakturovať za viacero firiem. Karta na firmu, nie riadok
   tabuľky: údajov je málo a tabuľka z nich robila sedem stĺpcov, z ktorých
   polovica bola prázdna — to isté rozhodnutie ako v admine (minicards).

   Predvolená firma sa značí odznakom, nie farbou celej karty: je to jedna
   vlastnosť zo štyroch, nie stav, ktorý mení význam ostatných údajov.
   ------------------------------------------------------------------ */
.acc-firm__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 10px;
}

.acc-firm__head strong {
    display: block;
    font-size: 17px;
    color: var(--shop-navy);
}

.acc-firm__badge {
    display: inline-block;
    margin-top: 4px;
    padding: 2px 10px;
    border-radius: 999px;
    background: var(--shop-gold-soft);
    border: 1px solid var(--shop-gold-line);
    font-size: 12px;
    font-weight: 600;
    color: var(--shop-gold-dark);
}

.acc-firm__ids,
.acc-firm__addr {
    margin: 0 0 4px;
    font-size: 14px;
    color: var(--shop-muted);
}

/* Akcie sú text, nie tlačidlá: na karte s dvoma riadkami údajov by tri
   tlačidlá vedľa seba prekričali samotnú firmu. */
.acc-firm__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 18px;
    margin-top: 14px;
    padding-top: 12px;
    border-top: 1px solid var(--shop-line);
}

.acc-firm__link {
    padding: 0;
    border: 0;
    background: none;
    font-size: 14px;
    font-weight: 600;
    color: var(--shop-navy);
    cursor: pointer;
}

.acc-firm__link:hover {
    text-decoration: underline;
}

.acc-firm__link.is-danger {
    color: var(--shop-danger);
}

@media (max-width: 575px) {
    .acc-firm__head {
        flex-direction: column;
    }
}

/* ------------------------------------------------------------------
   Výber firmy v objednávke

   Zoznam uložených firiem nad firemnými poľami. Vyzerá ako výber, lebo ním
   je — pole s hviezdičkou „predvolená" by nepovedalo, že sa dá prepnúť.
   ------------------------------------------------------------------ */
.shop-pick {
    display: grid;
    gap: 8px;
    margin-bottom: 16px;
}

.shop-pick__item {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin: 0;
    padding: 12px 16px;
    border: 1px solid var(--shop-line);
    border-radius: var(--shop-radius-sm);
    background: var(--shop-card);
    cursor: pointer;
}

.shop-pick__item:has(input:checked) {
    border-color: var(--shop-navy);
    background: var(--shop-bg);
}

.shop-pick__item input {
    margin-top: 3px;
    accent-color: var(--shop-navy);
}

.shop-pick__item strong {
    display: block;
    font-size: 15px;
    color: var(--shop-navy);
}

.shop-pick__item small {
    display: block;
    font-size: 13px;
    color: var(--shop-muted);
}

/* ------------------------------------------------------------------
   Blog

   Karty článkov stoja v tej istej mriežke a v tom istom tvare ako karty
   služieb — blog nie je iná stránka, je to tá istá stránka s iným obsahom.
   Rozdiel je obrázok navrchu: pri článku je to jeho tvár, pri službe by bola
   ozdoba.
   ------------------------------------------------------------------ */
.shop-postgrid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 24px;
}

@media (max-width: 991px) {
    .shop-postgrid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 575px) {
    .shop-postgrid {
        grid-template-columns: 1fr;
    }
}

.shop-post {
    display: flex;
    flex-direction: column;
    overflow: hidden;
    border-radius: var(--shop-radius);
    background: var(--shop-bg);
    text-decoration: none;
    transition: background-color .2s ease, transform .2s ease;
}

.shop-post:hover {
    background: #EEF0F5;
    transform: translateY(-2px);
}

.shop-post:focus-visible {
    outline: 2px solid var(--shop-navy);
    outline-offset: 3px;
}

/* Pevný pomer strán, nie výška obrázka: karty vedľa seba musia mať rovnaký
   začiatok textu aj vtedy, keď redaktor nahrá fotku na výšku. */
.shop-post__img {
    margin: 0;
    aspect-ratio: 16 / 9;
    background: #E7E9EF;
}

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

.shop-post__body {
    display: flex;
    flex-direction: column;
    gap: 10px;
    flex: 1;
    padding: 28px 32px 32px;
}

.shop-post__date {
    font-size: 13px;
    font-weight: 600;
    color: var(--shop-gold-dark);
}

.shop-post__title {
    margin: 0;
    font-size: 20px;
    line-height: 1.35;
    color: var(--shop-navy);
}

.shop-post__text {
    margin: 0;
    font-size: 15px;
    line-height: 1.6;
    color: var(--shop-muted);
}

/* Šípka sa lepí na spodok karty — inak by pri kratšom perexe skočila hore
   a karty by mali návestie v troch rôznych výškach. */
.shop-post__more {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: auto;
    padding-top: 8px;
    font-size: 14px;
    font-weight: 600;
    color: var(--shop-navy);
}

.shop-post:hover .shop-post__more svg {
    transform: translateX(3px);
}

.shop-post__more svg {
    transition: transform .2s ease;
}

.shop-postpager {
    display: flex;
    justify-content: center;
    margin-top: 32px;
}

/* Nadpis nad ďalším čítaním pod článkom. */
.shop-morehead {
    margin: 0 0 24px;
    font-size: 24px;
    color: var(--shop-navy);
}

/* ------------------------------------------------------------------
   Detail článku

   Text stojí v tom istom sivom bloku ako právne dokumenty a stránky — je to
   súvislé čítanie, nie mriežka.
   ------------------------------------------------------------------ */
.shop-article__back {
    display: inline-block;
    margin-bottom: 12px;
    font-size: 14px;
    font-weight: 600;
    color: var(--shop-muted);
}

.shop-article__date {
    display: block;
    margin-bottom: 6px;
    font-size: 13px;
    font-weight: 600;
    color: var(--shop-gold-dark);
}

/* Perex je zhrnutie, nie prvý odsek: väčšie písmo a tmavší tón ho oddelia
   od textu bez ďalšieho nadpisu. */
.shop-article__perex {
    margin: 0 0 24px;
    font-size: 18px;
    line-height: 1.7;
    font-weight: 500;
    color: var(--shop-ink);
}

.shop-article__img {
    margin: 0 0 28px;
    border-radius: var(--shop-radius-sm);
    overflow: hidden;
}

.shop-article__img img {
    width: 100%;
    height: auto;
    display: block;
}

/* Telo článku. Sekcia `terms` dáva zoznamom odrážky a modrý text, tu sa
   dorovnáva už len rytmus — nadpisy, odsadenie odsekov a šírka riadku. */
.shop-article h1 {
    margin: 0 0 16px;
    font-size: 40px;
    line-height: 1.25;
    color: var(--shop-navy);
}

.shop-article__body h2 {
    margin: 36px 0 14px;
    font-size: 26px;
    line-height: 1.3;
    color: var(--shop-navy);
}

.shop-article__body h3 {
    margin: 28px 0 12px;
    font-size: 20px;
    color: var(--shop-navy);
}

.shop-article__body p {
    margin: 0 0 18px;
    font-size: 17px;
    line-height: 1.75;
    color: var(--shop-navy);
}

.shop-article__body ul,
.shop-article__body ol {
    margin: 0 0 22px;
    padding-left: 26px;
}

.shop-article__body li {
    margin-bottom: 8px;
    font-size: 17px;
    line-height: 1.7;
    color: var(--shop-navy);
}

.shop-article__body a {
    color: var(--shop-navy);
    text-decoration: underline;
}

@media (max-width: 767px) {
    .shop-article h1 {
        font-size: 30px;
    }

    .shop-article__body p,
    .shop-article__body li {
        font-size: 16px;
    }
}

/* Karta bez nahratého obrázka. Nie prázdny sivý rámik — tmavomodrá plocha
   so značkou vyzerá ako zámer, nie ako chýbajúci súbor. */
.shop-post__img--empty {
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, var(--shop-navy) 0%, var(--shop-navy-dark) 100%);
}

.shop-post__img--empty span {
    font-size: 20px;
    font-weight: 700;
    letter-spacing: .04em;
    color: var(--shop-gold);
    opacity: .9;
}

/* ==========================================================================
   Výzvy k recenzii

   Tri miesta, tri tvary. Zámerne nie jeden komponent trikrát: plávajúci box
   na webe oslovuje návštevníka, v účte je to tichý pruh pod objednávkami
   a na poďakovaní karta v rade s ostatnými. Rovnaký objekt na všetkých troch
   by na dvoch z nich kričal.
   ========================================================================== */

/* 1. Plávajúca výzva na webe. Pri pravom okraji, scrolluje s návštevníkom. */
/* Šírka je 340 px, nie 260: v užšom boxe sa veta lámala do štyroch riadkov
   a z troch viet bol odsek. Strop podľa okna kvôli malým obrazovkám. */
.rev-float {
    position: fixed;
    right: 20px;
    bottom: 24px;
    z-index: 1030;
    width: 340px;
    max-width: calc(100vw - 40px);
    padding: 24px 26px 26px;
    border-radius: var(--shop-radius-sm);
    background: var(--shop-card);
    border: 1px solid var(--shop-line);
    box-shadow: 0 14px 40px rgba(45, 46, 121, .16);
}

.rev-float__x {
    position: absolute;
    top: 8px;
    right: 10px;
    padding: 4px 8px;
    border: 0;
    background: none;
    font-size: 20px;
    line-height: 1;
    color: var(--shop-muted);
    cursor: pointer;
}

.rev-float__x:hover {
    color: var(--shop-navy);
}

.rev-float__stars {
    display: block;
    margin-bottom: 8px;
    font-size: 16px;
    letter-spacing: 2px;
    color: var(--shop-gold);
}

.rev-float__title {
    display: block;
    margin-bottom: 6px;
    font-size: 16px;
    color: var(--shop-navy);
}

.rev-float__text {
    margin: 0 0 14px;
    font-size: 13px;
    line-height: 1.6;
    color: var(--shop-muted);
}

/* Zlaté tlačidlo: je to jediná akcia v boxe a na tomto webe znamená žltá
   „tu klikni". */
.rev-float__cta {
    display: inline-block;
    padding: 10px 18px;
    border-radius: 30px;
    background: var(--shop-gold);
    font-size: 14px;
    font-weight: 600;
    color: var(--shop-navy);
}

.rev-float__cta:hover {
    background: var(--shop-gold-dark);
    color: var(--shop-navy);
}

/* Na malej obrazovke by plávajúci box prekrýval obsah a na košíku by sa bil
   s lištou so sumou. Výzva nie je taká dôležitá, aby si to zaslúžila. */
@media (max-width: 767px) {
    .rev-float {
        display: none;
    }
}

/* 2. Pruh v účte pod zoznamom objednávok. Tichý — zákazník si tu niečo
      vybavuje a hodnotenie nie je jeho úloha. */
.acc-review {
    position: relative;
    display: flex;
    align-items: center;
    gap: 16px;
    margin-top: 24px;
    padding: 18px 48px 18px 24px;
    border-radius: var(--shop-radius-sm);
    background: var(--shop-bg);
}

.acc-review__stars {
    font-size: 15px;
    letter-spacing: 2px;
    color: var(--shop-gold);
}

.acc-review__text {
    flex: 1;
    min-width: 0;
}

.acc-review__text strong {
    display: block;
    font-size: 15px;
    color: var(--shop-navy);
}

.acc-review__text span {
    font-size: 13px;
    color: var(--shop-muted);
}

.acc-review__x {
    position: absolute;
    top: 10px;
    right: 12px;
    padding: 2px 6px;
    border: 0;
    background: none;
    font-size: 18px;
    line-height: 1;
    color: var(--shop-muted);
    cursor: pointer;
}

.acc-review__x:hover {
    color: var(--shop-navy);
}

@media (max-width: 575px) {
    .acc-review {
        flex-wrap: wrap;
    }
}

/* 3. Karta na poďakovaní. Hviezdičky vľavo, text a tichá akcia vedľa —
      žltým tlačidlom sa tu netlačí, objednávka sa práve prijala. */
.rev-thanks {
    display: flex;
    align-items: center;
    gap: 18px;
}

.rev-thanks > div {
    flex: 1;
    min-width: 0;
}

.rev-thanks .shop-card__title {
    margin-bottom: 4px;
}

.rev-thanks__stars {
    font-size: 18px;
    letter-spacing: 2px;
    color: var(--shop-gold);
}

@media (max-width: 575px) {
    .rev-thanks {
        flex-wrap: wrap;
    }
}

/* 4. Karta v detaile dokončenej objednávky. Stojí v pravom stĺpci medzi
      súhrnom a odkazmi, takže má ich tvar — nie plávanie, nie sivý pruh. */
.rev-order {
    text-align: left;
}

.rev-order__stars {
    display: block;
    margin-bottom: 8px;
    font-size: 15px;
    letter-spacing: 2px;
    color: var(--shop-gold);
}

.rev-order__title {
    display: block;
    margin-bottom: 4px;
    font-size: 15px;
    color: var(--shop-navy);
}

.rev-order__text {
    margin: 0 0 12px;
    font-size: 13px;
    line-height: 1.6;
    color: var(--shop-muted);
}

/* ------------------------------------------------------------------
   Podklady k objednávke v účte

   Čeklist toho, čo od zákazníka potrebujeme, a zoznam toho, čo už poslal.
   Odškrtnutá položka je tmavá s fajkou, chýbajúca svetlá — rozdiel má byť
   vidieť pohľadom, nie čítaním.
   ------------------------------------------------------------------ */
.acc-docs li {
    display: flex;
    align-items: baseline;
    gap: 10px;
}

.acc-docs__mark {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    border: 1px solid var(--shop-line);
    font-size: 12px;
    font-weight: 700;
    color: transparent;
}

.acc-docs li.is-done .acc-docs__mark {
    border-color: var(--shop-success);
    background: var(--shop-success);
    color: #fff;
}

.acc-files {
    margin: 18px 0 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: 10px;
}

.acc-files li {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 16px;
    border-radius: var(--shop-radius-sm);
    background: var(--shop-bg);
}

.acc-files li > a {
    font-weight: 600;
    color: var(--shop-navy);
}

.acc-files__meta {
    flex: 1;
    font-size: 13px;
    color: var(--shop-muted);
}

.acc-files__x {
    padding: 0 4px;
    border: 0;
    background: none;
    font-size: 20px;
    line-height: 1;
    color: var(--shop-muted);
    cursor: pointer;
}

.acc-files__x:hover {
    color: var(--shop-danger);
}

/* Nahrávanie oddelené linkou — najprv čo tu je, potom čo pridať. */
.acc-upload {
    margin-top: 20px;
    padding-top: 20px;
    border-top: 1px solid var(--shop-line);
}

@media (max-width: 575px) {
    .acc-files li {
        flex-wrap: wrap;
    }
}

/* ==========================================================================
   COOKIE LIŠTA
   Pruh cez spodok okna, nie box v rohu: je to oznam, nie ponuka, a musí sa
   dať prečítať aj na mobile. Ostáva viditeľný, kým ho návštevník nezavrie.
   ========================================================================== */
.cookie-bar {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1040;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 20px;
    flex-wrap: wrap;
    padding: 16px 24px;
    background: var(--shop-navy);
    box-shadow: 0 -8px 30px rgba(45, 46, 121, .18);
}

.cookie-bar__text {
    margin: 0;
    max-width: 900px;
    font-size: 13px;
    line-height: 1.6;
    color: #fff;
}

.cookie-bar__link {
    color: var(--shop-gold);
    text-decoration: underline;
}

.cookie-bar__link:hover {
    color: #fff;
}

/* Jediná akcia v lište, preto zlatá — rovnako ako všade inde na webe. */
.cookie-bar__ok {
    flex: none;
    padding: 10px 22px;
    border: 0;
    border-radius: 30px;
    background: var(--shop-gold);
    font-size: 14px;
    font-weight: 600;
    color: var(--shop-navy);
    cursor: pointer;
}

.cookie-bar__ok:hover {
    background: var(--shop-gold-dark);
}

/* Kým lišta stojí, plávajúca výzva k recenzii by ju prekrývala. Selektor je
   dynamický: `dismissible.js` lištu z DOM odstráni a výzva sa vráti dole. */
body:has(.cookie-bar) .rev-float {
    bottom: 110px;
}

/*
 * Spodná lišta košíka stojí na tom istom mieste ako cookie pruh a pruh je
 * nad ňou (1040 : 1035). Prekryté tlačidlo „Do pokladne" je pritom jediná
 * cesta ďalej — kým návštevník cookies neodklikne, nemá ako objednať.
 *
 * Ustúpi pruh, nie lišta: oznam sa dá prečítať kedykoľvek, nakúpiť sa dá
 * len tu. Nad 991 px lišta nie je (má `display: none`), preto media query —
 * `:has()` samotné by pruh dvíhalo aj na monitore.
 */
@media (max-width: 991px) {
    body:has(.shop-mobilebar) .cookie-bar {
        bottom: 76px;
    }
}

@media (max-width: 575px) {
    .cookie-bar {
        gap: 12px;
        padding: 14px 16px;
        text-align: center;
    }
}
