/* ═══════════════════════════════════════════════════════════════════
   DC PREMIUM v3 - vizualny system Denticor (19 komercnych stranok)
   Vrstvy: farebne platno -> plavajuce panely -> karty -> akcenty

   ─────────────────────────────────────────────────────────────────
   PRAVIDLA TEJTO VRSTVY. Porusenie ktorehokolvek z nich vyrobi presne
   tu triedu chyb, ktora sa v tomto projekte uz dvakrat opakovala
   (biely text na bielom, tmavy text na tmavom):

   1) FAROVY PAR. Kazde pravidlo, ktore meni `background`, MUSI v tom
      istom bloku nastavit aj `color`. Ak ma prvok deti s vlastnou
      farbou (napr. <span style="color:var(--brand)"> v tlacidle
      dopravy), musi nastavit aj `<selektor> *{color:...!important}`.
      Nikdy nemenit len jednu polovicu paru.

   2) ZIADNY SUBOJ S JS. Vlastnosti, ktore JS zapisuje inline
      (background, color, borderColor, display, opacity, cursor),
      sa tu NIKDY neprepisuju cez !important. Kde treba prebit stranku,
      pouziva sa VYSSIA SPECIFICITA - `.btn.bo` (0,2,0) uz prebije
      `.bo` (0,1,0) a inline styl z JS potom prirodzene vyhra.

   3) STAVY VLASTNI STRANKA. `.selected`, `:disabled`, `:hover`
      a `.active` sa neprekresluju. Premium k nim pridava len
      vlastnosti, ktore nikto iny nenastavuje (box-shadow, transform).
      Ak premium predsa musi nakreslit `.active` (kvoli prvemu
      vykresleniu pred behom JS), kresli PRESNE tu istu hodnotu, aku
      neskor zapise JS - aby sa vzhlad po kliknuti nezmenil.

   4) ZIADNE `[style*=...]` pre JS-riadene prvky. Ostali len bridge
      selektory pre RUCNE pisane inline styly, zamerne v zapise BEZ
      medzery (`background:var(--brand)`). CSSOM serializuje vzdy
      S medzerou (`background: var(--brand)`), takze taky selektor
      NEMOZE chytit prvok, ktoremu styl nastavil skript. Cielovy stav:
      dat tym tlacidlam triedu `.dc-btn-primary` a bridge zmazat.

   5) VLASTNE TOKENY. Premium nepremaluje zdielane tokeny stranok
      (--bg / --bg-alt / --border / --border-light). Ma vlastny
      `--dc-*` namespace, takze teple platno stranok a studene platno
      premium vrstvy si uz neprotirecia.
   ═══════════════════════════════════════════════════════════════════ */

/* ── TOKENY (vylucne premium namespace, ziadny zdielany token) ── */
:root{
  --dc-elev1:0 1px 2px rgba(14,42,51,.05),0 10px 28px -14px rgba(14,42,51,.13);
  --dc-elev2:0 2px 5px rgba(14,42,51,.05),0 28px 64px -30px rgba(14,42,51,.22);
  --dc-teal:linear-gradient(180deg,#2E5866 0%,#244651 55%,#1C3A44 100%);
  --dc-ring:#2E5866;      /* focus ring na svetlom podklade */
  --dc-ring-dark:#E8F2F5; /* focus ring na tmavych plochach */
  --dc-glass:rgba(255,255,255,.7);
}

/* ── PLATNO: porcelan s farebnymi nadychmi (teal, gold, green) ──
   !important #1/7: `background` na <body>. Ziadny JS ho nezapisuje
   a stranky si ho samy nulujuu (`body{background:transparent}`),
   takze bez !important by platno na vacsine stranok zaniklo.
   Farebny par netreba - text na <body> priamo nelezi (vsetok obsah
   je v .site-box / .wt / kartach). */
body{
  background:
    radial-gradient(1200px 640px at 12% -6%, rgba(36,70,81,.08), transparent 60%),
    radial-gradient(1000px 560px at 108% 14%, rgba(139,115,53,.06), transparent 60%),
    radial-gradient(900px 640px at -8% 58%, rgba(45,110,76,.05), transparent 62%),
    radial-gradient(1100px 700px at 110% 88%, rgba(36,70,81,.06), transparent 60%),
    linear-gradient(180deg,#F8FAFA 0%,#F1F5F5 100%) !important;
}
html,body{overflow-x:clip}

/* ── PLOCHE PASY SEKCII -> priehladne, nech vrstvy zdielaju platno ──
   !important #2/7: prebija RUCNE napisany inline `style="background:var(--bg-alt)"`
   na <section>. Sekcie nie su JS-riadene a menime len pozadie z jedneho
   svetleho odtienu na iny svetly - farebny par sa nerozpadne
   (kontrast textu voci platnu je merane rovnaky alebo lepsi). */
section[style*="background:var(--bg-alt)"],
section.sec[style*="--bg-alt"]{background:transparent!important}
/* to iste pre jediny pas, ktory je stylovany triedou, nie inline
   (index.html:767 .hp-ba) - specificita staci, !important netreba */
body .hp-ba{background:transparent}

/* ── PANELY: velke plavajuce boxy homepage - jednotna elevacia a ram ──
   `body` prefix zdviha specificitu na (0,3,4), takze pravidlo prebije
   index.html:570 (rovnaky selektor, neskor v dokumente) BEZ !important. */
body main.hp-float section.hero.hero-v3 > .hp3-box-wrap > .wt,
body main.hp-float section.sec > .hp3-box-wrap > .wt{
  box-shadow:var(--dc-elev2);
  border:1px solid rgba(14,42,51,.07);
  border-radius:24px;
}

/* ── HLBKA: karty ── */
body .pk-card,
body .hp-ba-card,
body .hp-ba-quote,
body .hp-def-card,
body .hp-m5-frame,
body .hp-sit-imginner,
body .hp-ba-price{box-shadow:var(--dc-elev1)}
body .pk-card{transition:box-shadow .25s ease,transform .25s ease}
/* .pk-card.selected (0,2,0) si vlastnu zlatu ziaru drzi - premium (0,1,1)
   ju zamerne neprebija. */
@media(hover:hover){
  body .pk-card:not(.selected):hover{box-shadow:var(--dc-elev2);transform:translateY(-3px)}
}

/* ══ TLACIDLA ══════════════════════════════════════════════════════ */

/* ── PRIMARNE: gradient + biely text, VZDY ako par ──
   Specificita, nie !important:
     .btn.bp (0,2,0)                      > .bp (0,1,0)
     body .mobile-cta-bar .mcb-primary (0,2,1) > .mobile-cta-bar .mcb-primary (0,2,0)
     body .pk-card:not(.selected) .pk-cta (0,3,1) > .pk-cta (0,1,0)
   Dolezite, co tu ZAMERNE NIE JE:
   - `.pk-card.selected .pk-cta` (zlate CTA vybraneho baliku) - vlastni ho
     stranka, premium sa ho nedotyka -> koniec tmaveho textu na tmavom teale.
   - `#hp-dignity-start` (1,0,0) - jeho `:hover` aj `.is-ready` stavy
     teraz opat funguju, lebo id prebije nasu triedu. */
.btn.bp,
.dc-btn-primary,
body .mobile-cta-bar .mcb-primary,
body .pk-card:not(.selected) .pk-cta{
  background:var(--dc-teal);
  color:#fff;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16),0 10px 24px -10px rgba(20,50,60,.45);
  transition:transform .18s ease,box-shadow .18s ease;
}
.btn.bp *,
.dc-btn-primary *,
body .mobile-cta-bar .mcb-primary *,
body .pk-card:not(.selected) .pk-cta *{color:#fff}

/* LEGACY BRIDGE pre rucne pisane inline primarne tlacidla
   (obchod.html 7x, produkt-denticor-1/2/3 4x, fazety 1x).
   !important #3/7 a #4/7: inline `background` sa inak preblt neda.
   Preto tu MUSI byt aj `color:#fff!important` - par sa nesmie rozdelit.
   Zapis BEZ medzery je zamerny, pozri pravidlo 4 v hlavicke suboru.
   MIGRACIA: pridat tymto <a>/<button> triedu `dc-btn-primary`
   a tento blok zmazat. */
a[style*="background:var(--brand)"],
a[style*="background:#244651"],
button[style*="background:var(--brand)"]{
  background:var(--dc-teal)!important;
  color:#fff!important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16),0 10px 24px -10px rgba(20,50,60,.45);
  transition:transform .18s ease,box-shadow .18s ease;
}

/* HOVER primarnych - tiez mimo media bloku a s kompletnym parom.
   Stranky maju `.bp:hover{background:var(--cta-hover)}`; ak premenna na
   danej stranke chyba, pozadie spadne na transparentne a biely text zmizne.
   Preto pozadie aj farbu drzime my. */
.btn.bp:not(:disabled):hover,
.dc-btn-primary:not(:disabled):hover,
body .mobile-cta-bar .mcb-primary:hover,
body .pk-card:not(.selected) .pk-cta:hover{
  background:var(--dc-teal);
  color:#fff;
}
a[style*="background:var(--brand)"]:hover,
a[style*="background:#244651"]:hover,
button[style*="background:var(--brand)"]:not(:disabled):hover{
  background:var(--dc-teal)!important;
  color:#fff!important;
}
.btn.bp:not(:disabled):hover *,
.dc-btn-primary:not(:disabled):hover *,
body .mobile-cta-bar .mcb-primary:hover *,
body .pk-card:not(.selected) .pk-cta:hover *,
a[style*="background:var(--brand)"]:hover *,
button[style*="background:var(--brand)"]:not(:disabled):hover *{color:#fff!important}
@media(hover:hover){
  .btn.bp:not(:disabled):hover,
  .dc-btn-primary:not(:disabled):hover,
  body .mobile-cta-bar .mcb-primary:hover,
  body .pk-card:not(.selected) .pk-cta:hover,
  a[style*="background:var(--brand)"]:hover,
  a[style*="background:#244651"]:hover,
  button[style*="background:var(--brand)"]:not(:disabled):hover{
    transform:translateY(-1px);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 16px 32px -12px rgba(20,50,60,.55);
  }
}

/* ── SEKUNDARNE (obrysove): jemne sklo ──
   Par je kompletny uz v pokojovom stave (background + color + border),
   takze ani "sticky :hover" na dotykovom zariadeni nemoze vyrobit
   biely text na bielom: nase pravidlo (0,4,0) prebije `.bo:hover` (0,2,0)
   v OBOCH vlastnostiach naraz.
   `:not(:disabled)` chrani zablokovane tlacidlo (#gap-add-btn).
   Ziadne !important -> inline styly z activateBtn()/setPayment()
   prirodzene vyhraju. */
.btn.bo:not(.active):not(:disabled),
a[style*="border:2px solid var(--brand)"]:not(.active){
  background:var(--dc-glass);
  color:var(--brand,#244651);
  border:2px solid var(--brand,#244651);
  -webkit-backdrop-filter:blur(6px);
  backdrop-filter:blur(6px);
  transition:transform .18s ease,box-shadow .18s ease,background .18s ease,color .18s ease;
}

/* HOVER sekundarnych tlacidiel - ZAMERNE MIMO @media(hover:hover).
   Dovod: na dotykovych zariadeniach (hover:none) sa `:hover` po tuknuti
   aj tak spusti a plati hover stranky `.bo:hover{background:var(--brand)}`.
   Keby nas par bol len v media bloku, na mobile by vznikol tmavy text
   na tmavom pozadi. Preto par plati vzdy; v media bloku ostava uz len
   dekorativny zdvih.
   !important na OBOCH polovciach paru je nutny: tieto tlacidla maju casto
   RUCNE pisany inline `color:var(--brand)` (obchod, produktove stranky),
   ktory by inak kazdu CSS farbu prebil a text by ostal tmavy na tmavom. */
.btn.bo:not(.active):not(:disabled):hover,
a[style*="border:2px solid var(--brand)"]:not(.active):hover{
  background:var(--dc-teal)!important;
  color:#fff!important;
  border-color:#244651!important;
}
.btn.bo:not(.active):not(:disabled):hover *,
a[style*="border:2px solid var(--brand)"]:not(.active):hover *{color:#fff!important}
@media(hover:hover){
  .btn.bo:not(.active):not(:disabled):hover,
  a[style*="border:2px solid var(--brand)"]:not(.active):hover{
    transform:translateY(-1px);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.14),0 12px 26px -12px rgba(20,50,60,.45);
  }
}

/* ── VYBRANA MOZNOST (krajina / doprava / platba) ──
   Premium kresli PRESNE to, co zapise JS inline
   (`background:var(--brand); color:#fff; borderColor:var(--brand)`),
   takze prvy render pred behom skriptu vyzera rovnako ako po nom
   a inline styl nema s cim kolidovat. Hlbku pridava box-shadow,
   ktory JS nikdy nenastavuje. */
.btn.bo.active,
.sel-btn.active,
.pay-btn.active{
  background:var(--brand,#244651);
  color:#fff;
  border:2px solid var(--brand,#244651);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16),0 10px 24px -12px rgba(20,50,60,.45);
}
/* !important #6/7: opat len druha polovica paru - inline zafarbene deti. */
.btn.bo.active *,
.sel-btn.active *,
.pay-btn.active *{color:#fff!important}

/* ── VIDEO KARTA (obchod) ── */
.dc-video-card{
  display:grid;grid-template-columns:1.35fr 1fr;
  background:linear-gradient(180deg,#FFFFFF 0%,#FAFCFC 100%);
  color:var(--text,#1E2328);
  border:1px solid rgba(14,42,51,.08);
  border-radius:22px;overflow:hidden;box-shadow:var(--dc-elev2);
}
@media(max-width:760px){.dc-video-card{grid-template-columns:1fr}}

/* ── DETAILY, ktore robia "znacku" ── */
::selection{background:#244651;color:#fff}

/* FOCUS RING. Ziadny `border-radius` - to nie je vlastnost outlinu
   a menila tvar samotneho prvku (kruhove ikony hlavicky a pilulkove CTA
   sa pri tabovani menili na hranate obdlzniky).
   Na tmavych plochach (paticka, otvorena mobilna zasuvka, AI lista,
   tmavy blok /otestujte-sa/) sa ring prepne na svetly - tmavy #2E5866
   mal voci nim kontrast 1.19-2.16:1, teda pod pozadovanymi 3:1. */
:focus-visible{outline:2px solid var(--dc-ring);outline-offset:2px}
:is(.ftr,.hdr-d-nav-wrap.open,.ai-float,.dc-topbar,.odx-final) :focus-visible{
  outline-color:var(--dc-ring-dark);
}

/* SCROLLBAR: jazdec ztmaveny na >=3:1 voci drahe (WCAG 1.4.11)
   a ram zuzeny z 3px na 2px, aby zostalo 8px viditelnej plochy. */
::-webkit-scrollbar{width:12px;height:12px}
::-webkit-scrollbar-track{background:#EEF3F4}
::-webkit-scrollbar-thumb{background:#63787D;border-radius:8px;border:2px solid #EEF3F4}
::-webkit-scrollbar-thumb:hover{background:#4A5F63}

h1,h2{letter-spacing:-.025em}

/* obrazky v obsahu: jemny ram, nech nesplyvaju s platnom */
.hp-ba-pair img,.hp-sit-imginner img{outline:1px solid rgba(14,42,51,.06);outline-offset:-1px}

/* ── MOBIL: upratanie a plynulost ── */
@media(max-width:768px){

  /* vykon: ciste dekoracie a pulzy prec.
     POZN.: index.html:552-553 si `.hp3-spotlight`/`.hp3-mesh` vracia
     spat vlastnym `display:block!important` neskor v dokumente - tato
     dvojica je teda na homepage bez ucinku uz dnes a zamerne to
     nemenime (zmena by odstranila hero glow, co nie je ciel refaktoru).
     Ucinne to je na .hp-proof-aurora a .hp-proof-scanline. */
  .hp3-spotlight,.hp3-mesh,.hp-proof-aurora,.hp-proof-scanline{display:none!important}
  body .hp3-cta-pulse{animation:none}

  /* LOGO. `max-*` namiesto `width/height`, takze pravidlo zmensi
     index.html-ovsku dlazdicu (154x142 -> 86x78, obrazok 116 -> 60px),
     ale na zvysnych 18 strankach, kde ziadna dlazdica nie je,
     NEROBI NIC - kotva zostane obalkou obrazka a poistka
     main.css:230 (`img{height:52px}` pod 480px) prezije,
     lebo 52px sa do max-height:60px zmesti. */

  /* AI lista: jeden stihly riadok namiesto dvoch */
  .ai-float-in{flex-direction:row;align-items:center;gap:10px;padding:9px 12px}
  .ai-float-btn{width:auto;flex:1;justify-content:center;padding:9px 14px;min-height:40px;font-size:13px}
  .ai-float-text{min-width:0}

  /* JEDNA SPODNA LISTA NA STRANKU.
     `:has()` testuje EXISTENCIU prvku, nie jeho viditelnost. Produktove
     stranky maju listu v DOM od zaciatku so `style="display:none"`
     a odkryju ju az po ~420px scrollu - stara podmienka preto skryvala
     AI listu uz od scrollY=0 a v prvom screenfule nezostalo ziadne
     spodne CTA. Testujeme teda oba zapisy `display:none`:
     rucny (bez medzery) aj zapis z JS/CSSOM (s medzerou). */
  body:has(.mobile-cta-bar:not([style*="display:none"]):not([style*="display: none"])) #ai-float{display:none}

  /* CTA-BAR: kompaktne len tam, kde ma lista dva rovnocenne odkazy
     (homepage, .mcb-primary/.mcb-secondary). Produktove listy maju iny
     obsah - cenovy blok + jedno nakupne tlacidlo - a tie sa uz nezmensuju
     (skoncilo to tym, ze hlavne CTA "Pridat do kosika" bolo mensie
     nez cena vedla neho). Specificita (0,2,1) prebije index.html:2644. */
  body .mobile-cta-bar .mcb-primary,
  body .mobile-cta-bar .mcb-secondary{font-size:13.5px;padding:12px 6px;white-space:nowrap}
  body .mobile-cta-bar .mcb-primary{flex:1.35}

  /* Plavajuce prvky (chat / kosik / toast) uz riesi jednotny stack
     v assets/css/main.css - plati pre vsetkych 117 stranok, ktore tie
     widgety pouzivaju, nielen pre 19 s premium vrstvou. Zamerne tu
     nic neduplikujeme, aby existoval jediny zdroj pravdy. */
}

/* CHAT: launcher sa ma pri otvorenom paneli skryt. Widget to skusa
   inline (`btn.style.display='none'`), ale prehrava s vlastnym
   `.dcw-btn{display:flex!important}` z toho isteho suboru - tlacidlo
   preto zostavalo v layoute, v tab poradi aj v strome pristupnosti
   a na tabletoch vykukalo spod panela. Toto pravidlo ma vyssiu
   specificitu (0,3,1) a plati presne vtedy, ked to JS chce.
   Poznamka: `.dcw-btn{padding:7px!important}` bolo odstranene -
   zmensovalo launcher na 42x42 a prebijalo vlastne mobilne pravidlo
   widgetu (`padding:14px` -> 56x56 ikona). */
body:has(.dcw-panel.open) .dcw-btn{display:none!important}

/* velmi uzke displeje: dlhy text v AI liste prec, ostane badge + tlacidlo */
@media(max-width:430px){
  .ai-float-text > span:not(.ai-float-badge){display:none}
}

/* ── TOPBAR - announcement lista ── */
.dc-topbar{background:linear-gradient(90deg,#1C3A44 0%,#244651 50%,#1C3A44 100%);color:rgba(255,255,255,.92)}
.dc-topbar-in{max-width:1240px;margin:0 auto;padding:8px 16px;display:flex;align-items:center;justify-content:center;gap:14px;font-size:12.5px;font-weight:600;letter-spacing:.02em}
.dc-topbar-in i{width:4px;height:4px;border-radius:50%;background:rgba(255,255,255,.45)}
@media(max-width:560px){.dc-topbar-3{display:none}.dc-topbar-in i:last-of-type{display:none}.dc-topbar-in{font-size:11.5px;gap:10px}}

/* ── DENTICOR V CISLACH - trust band ── */
.dc-numbers{padding:0 0 clamp(1.5rem,3vw,2.5rem)}
body main.hp-float section.sec.dc-numbers{padding:0 0 clamp(1.5rem,3vw,2.5rem)}
.dc-numbers-panel{max-width:1120px;margin:0 auto;background:linear-gradient(180deg,#FFFFFF 0%,#FAFCFC 100%);color:var(--text,#1E2328);border:1px solid rgba(14,42,51,.08);border-radius:22px;box-shadow:var(--dc-elev2);padding:clamp(18px,3vw,28px) clamp(16px,3vw,32px)}
.dc-numbers-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}
.dc-num{text-align:center;padding:6px 10px;position:relative}
.dc-num + .dc-num::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);height:60%;width:1px;background:rgba(14,42,51,.09)}
.dc-num strong{display:block;font-size:clamp(1.25rem,2vw,1.7rem);font-weight:800;color:#244651;letter-spacing:-.02em;line-height:1.15}
.dc-num span{display:block;margin-top:4px;font-size:12px;line-height:1.45;color:var(--text-m,#6B7280)}
.dc-experts{margin:16px auto 0;padding-top:14px;border-top:1px solid rgba(14,42,51,.08);text-align:center;font-size:12.5px;line-height:1.6;color:var(--text-m,#6B7280)}
.dc-experts a{color:var(--brand,#244651);font-weight:700}
@media(max-width:900px){.dc-numbers-grid{grid-template-columns:repeat(3,1fr);row-gap:14px}.dc-num:nth-child(4)::before{display:none}}
@media(max-width:480px){.dc-numbers-grid{grid-template-columns:repeat(2,1fr)}.dc-num:nth-child(2n+1)::before{display:none}.dc-num:nth-child(4)::before{content:"";display:block}}
/* denticor-inter-2026-09-18 */
@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;
src:url('/assets/fonts/InterVariable.woff2') format('woff2')}
:root{--font:'Inter',arial,sans-serif !important}
*,*::before,*::after{font-family:'Inter',arial,sans-serif !important}
html [data-dh-hero] .dh-copy h1,html [data-dh-hero] .dh-copy .homepage-question-draft{font-family:'Inter',arial,sans-serif !important}
