:root {
	--color-teal: #36c2b2;
	--color-teal-dark: #1e607d;
	--color-white: #ffffff;
	--color-text: #5e5e5e;
	--font-primary: 'Open Sans', sans-serif;
}

/* Bootstrap's Reboot sets box-sizing:border-box on every element (`*`), which the
   old site CSS never declared (browser default content-box). This changes width/height
   math for elements with both a fixed size and padding — e.g. #partners .container has
   no position:relative, so its position:absolute child (.slideContainer, bottom:40px)
   anchors to a different, wrong ancestor once box-sizing shifts that ancestor's computed
   height. Restore content-box everywhere except #pocket, which needs Bootstrap's
   border-box for its own grid math to work. Specificity (:not(#pocket) = ID-level) beats
   Bootstrap's bare `*` (zero specificity) regardless of load order. */
body :not(#pocket):not(#pocket *) {
	box-sizing: content-box;
}

/* .row/.col-* are real Bootstrap everywhere now (the old conflicting float-based
   versions were removed from style-inline.css, see
   _audit/removed_bootstrap_colliding_css.txt) — used not just in header/footer/#pocket
   but in ordinary CMS page content too (e.g. /inovacie), so this must be unscoped
   (not just "header .row"/"footer .row"), or any other page's own row/col content
   breaks the same way footer's did. Everything else on the page (buttons, fixed-size
   elements built assuming content-box) is untouched by this — only the grid classes
   themselves get border-box. !important needed: the broad :not(#pocket) rule above has
   ID-level specificity, higher than a plain class selector like ".row".

   Bare .col-1..12 (no breakpoint infix, real Bootstrap 4's "always full width at this
   tier" class) added 2026-09-09: missing from this list, found via pages/pobocka.php's
   `<div class="col-12">` — under the global content-box restore, its 15px+15px default
   padding ADDED to its own 1170px width instead of being included in it, rendering the
   whole box 30px too wide and pushing #mapa's map column 30px past the container's right
   edge. Confirmed via getBoundingClientRect() at every breakpoint, not just visually. */
.row,
.col-1, .col-2, .col-3, .col-4, .col-5, .col-6,
.col-7, .col-8, .col-9, .col-10, .col-11, .col-12,
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6,
.col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12,
.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6,
.col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12,
.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6,
.col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12,
.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6,
.col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12,
.col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6,
.col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12,
.col {
	box-sizing: border-box !important;
}

/* Restores the header mega-menu's own .dropdown/.dropdown-menu base sizing, scoped so it
   doesn't collide with real Bootstrap's own .dropdown-menu used elsewhere (e.g. #pocket).
   Removed from style-inline.css as a bare rule (see
   _audit/removed_bootstrap_colliding_css.txt) because it collided with Bootstrap's own
   .dropdown-menu everywhere; re-declared here scoped to header only. */
header .dropdown {
	height: 45px;
	z-index: 1001;
}
header .dropdown-menu {
	display: none;
	min-height: 26px;
	/* Production keeps this outer div position:relative (its natural flow position,
	   no offset) — the inner .dropdown-menu ul (position:absolute;top:10px) is the only
	   real flyout positioning. Bootstrap's own .dropdown-menu{position:absolute;top:100%}
	   pushes the outer div (and everything anchored to it) down by an extra ~45px
	   (the trigger's own height), creating a gap production doesn't have. Match
	   production exactly here. */
	position: relative;
	top: 0;
	/* Neutralize Bootstrap's own .dropdown-menu decoration (background, border, padding,
	   min-width, border-radius) on this outer element — it's just a positioning anchor;
	   all real visual styling (background-image, border, box-shadow) lives on the inner
	   .dropdown-menu ul, which is what's actually visible to the user. Without this, the
	   outer div renders as a small blank white box above the real menu list. */
	background: transparent;
	border: none;
	border-radius: 0;
	padding: 0;
	min-width: 0;
}

/* Same Bootstrap line-height:1.5-inherited-from-body leak as elsewhere (see
   css/pricelist-page.css for the price-box and heading instances of this same bug) — the site
   never set an explicit line-height for the main nav links, relying on the browser default
   (~1.15, "normal"). Bootstrap's 1.5 inflates each <li> from its intended height, so the whole
   <nav> (position:absolute, vertically placed via a fixed margin-top) grows tall enough to
   overflow past header's own fixed height — visible as a blank strip between the nav row and
   whatever comes after the header. */
header nav,
header nav a,
header nav li {
	line-height: normal;
}

/* Bootstrap's reboot also sets ul{margin-bottom:1rem} (a type selector, beats the site's own
   *{margin:0} reset the same way as every other instance of this leak) — the header's main
   menu <ul> picked up an unwanted 16px trailing margin, adding to the same overflow-past-
   header symptom the line-height fix above addresses. */
header nav ul {
	margin: 0;
}

/* Bootstrap's own bare .container{width:100%;padding:0 15px;max-width:...} (low specificity)
   still applies wherever this site's own selectors don't explicitly override every property
   it sets. Every .container usage on this site has DIFFERENT, sometimes conflicting padding/
   max-width needs that predate Bootstrap — e.g. header .container only zeroes padding-right
   (via its own !important rule) and deliberately keeps Bootstrap's padding-left:15px, while
   footer .container wants zero padding on both sides. There is no single correct blanket
   rule here (a earlier attempt at one broke header's layout — see git history) — each
   .container that actually measures wrong vs. production must be fixed individually, scoped
   to exactly that selector, never as a catch-all. Only footer .container and #footerMenu
   .container have been verified (via production comparison) to need a fix; #pricelist
   .container's own max-width:none already lives directly in style-inline.css next to its
   width:1180px declaration. Do not add a broader selector here without re-verifying EVERY
   existing .container usage (header, #pricelist, #pocket, footer, #footerMenu, and any others)
   against production first. */
footer .container {
	padding-left: 0;
	padding-right: 0;
	max-width: none;
}

/* #footerMenu's accordion widget (shared across pages) uses a bare, unscoped .container for
   its own width — same specificity as Bootstrap's bare .container, so it was a pure load-order
   tie that Bootstrap won (its CDN <link> loads after style-inline.css), collapsing the widget
   to width:100% with no constraint. Padding is untouched here — production's own #footerMenu
   .container keeps Bootstrap's default 15px+15px padding, only the width needed restoring. */
@media (min-width: 1200px) {
	#footerMenu .container {
		width: 1140px;
	}
}
@media (min-width: 992px) and (max-width: 1199px) {
	#footerMenu .container {
		width: 970px;
	}
}

/* Shared component: #pocket .container (duplicated verbatim in pages/botox.php,
   pages/esteticke-zakroky.php, pages/femto.php, pages/evo-icl-page.php,
   pages/magic-pocket.php, css/laserova-blefaroplasticka.css, and css/laserova-new.css).

   :not(#bannerTop .container) added 2026-09-05: some pages (e.g. pages/benefit.php)
   wrap their whole body — including #bannerTop — inside #pocket, so this rule's
   .container also matched #bannerTop's own .container. Both have equal specificity
   (1 ID + 1 class); this one won because it loads later (css/theme.css after
   style-inline.css), silently zeroing #bannerTop .container's own
   margin/max-width/padding (style-inline.css's #bannerTop .container rule) —
   visible as a squashed/padding-less banner. The exclusion restores #bannerTop's
   own styling wherever it's nested inside #pocket, without affecting the 6 pages
   this rule is actually meant for (none of which rely on #pocket .container to
   style their own #bannerTop).

   max-width:none added 2026-09-05: only `width` was ever set here, so Bootstrap's own real
   .container class (max-width:1140px at its own min-width:1200px breakpoint, and Bootstrap
   4.6 has no larger tier) kept constraining the rendered box back down to 1140px even at
   viewports ≥1366px where this rule specifies width:1220px - `max-width` always wins over a
   conflicting `width` per spec. Found via /laserova-operacia-oci: a card's h3 wrapped to 2
   lines locally (1 line on production) because its column was ~27px narrower than production,
   which cascaded into a JS-driven equal-card-height script mismeasuring and causing the
   paragraph text below to overlap an absolutely-positioned button.

   :not(.new-discount-wrap .container) added 2026-09-08: pages/new-discount.php also wraps
   its whole body in #pocket, but it was never one of the 6 pages this rule was built from
   and has no page-specific width:1220px override of its own — its real (production) container
   width comes from a completely different, older bare `.container` cascade in style-inline.css
   (990/1140px tiers only, no 1366px+ tier at all). Applying this rule there anyway widened it
   to 1220px at ≥1366px viewports, a real regression found via bounding-box comparison against
   production during that page's migration. `.new-discount-wrap` is a class added specifically
   to that page's #pocket div to opt back out. */
#pocket .container:not(#bannerTop .container):not(.new-discount-wrap .container):not(.benefit-wrap .container) {
	width: 1220px;
	max-width: none;
	margin: 0px auto;
}

@media (max-width: 768px){
	#pocket .container:not(#bannerTop .container):not(.new-discount-wrap .container):not(.benefit-wrap .container) {
		width: 95%;
		max-width: none;
	}
}

/* Missing until 2026-09-05: all 6 pages that duplicate this block also carry a SEPARATE
   max-width:960px rule (redundant with the 768px one above in the original per-page source,
   but both existed there) that this consolidated version never captured. Because this
   selector's :not() makes it more specific than any page's own leftover copy, this rule was
   silently winning at 769-991px anyway and falling through to the unconditional 1220px base
   width instead of 95% — found via /sosovky-evo-icl at 800-991px viewports.

   Boundary corrected 961px -> 991px on 2026-09-07: at exactly 961-991px this still fell
   through to the unconditional 1220px base (max-width:960 doesn't match, min-width:992
   doesn't match either), a real regression vs production (960px container there) — found
   via /zlavy-a-benefity. 991px is the correct upper edge: one pixel below the min-width:992
   tier below, so the two rules meet with zero gap. */
@media (max-width: 991px){
	#pocket .container:not(#bannerTop .container):not(.new-discount-wrap .container):not(.benefit-wrap .container) {
		width: 95%;
		max-width: none;
	}
}

@media (min-width: 992px) {
  #pocket .container:not(#bannerTop .container):not(.new-discount-wrap .container):not(.benefit-wrap .container) {
	width: 970px;
	max-width: none;
  }
}
@media (min-width: 1200px) {
  #pocket .container:not(#bannerTop .container):not(.new-discount-wrap .container):not(.benefit-wrap .container) {
	width: 1140px;
	max-width: none;
  }
}

@media (min-width: 1366px) {
  #pocket .container:not(#bannerTop .container):not(.new-discount-wrap .container):not(.benefit-wrap .container) {
	width: 1220px;
	max-width: none;
  }
}

/* Same Bootstrap line-height:1.5 + p/ul{margin-bottom:1rem} leak as everywhere else in this
   migration (see css/pricelist-page.css, header nav fixes above) — never scoped for
   #textPage .content (the CMS rich-text body used by pages/generic_page.php and others),
   so long articles rendered much taller than production (e.g. /darcekovy-poukaz measured
   ~1050px taller on mobile despite identical text/images — found via mobile screenshot
   comparison, 2026-09-05). */
#textPage .content p,
#textPage .content ul,
#textPage .content ol,
#textPage .content h1,
#textPage .content h2,
#textPage .content h3,
#textPage .content h4,
#textPage .content h5,
#textPage .content h6 {
	line-height: normal;
	margin-bottom: 0;
}
#textPage .content li {
	line-height: normal;
}

/* Homepage tech slider (#technologia, pages/homepage_page.php) sits outside #pocket, so the
   global content-box restore above overrides its own box-sizing:border-box declarations
   (style-inline.css: ".pristroj-obrazok"/"#technologia .pristroj-popis", both width:50% floats,
   popis also has padding-left:60px). Under content-box that padding adds on top of the 50%
   width instead of being included in it, so obrazok (650px) + popis (now 710px instead of
   650px) overflow the 1300px slider and popis wraps below the image instead of beside it —
   found 2026-09-08 via bounding-box comparison against production (prod: border-box/650px,
   local: content-box/710px). Same !important reasoning as #bloger .container below: the broad
   :not(#pocket) rule above has 2 IDs of specificity, higher than these single-ID selectors. */
#technologia .pristroj-obrazok,
#technologia .pristroj-popis {
	box-sizing: border-box !important;
}

/* Blog article container (#bloger, pages/blog_page.php) sits outside #pocket, so the global
   content-box restore above applies to it — but Bootstrap's real .container still carries
   padding:15px each side. Under content-box that padding adds 30px on top of the declared
   width, silently inflating the container 15px past each edge. Everything inside (.row's
   negative margins, .col-sm-4's own padding) is computed relative to that inflated box, which
   is what threw off .bottom-navi's pagination position on mobile (found 2026-09-05, comparing
   against production). Forcing border-box here keeps the container's own box flush with its
   parent's edges, matching production and letting the row/col math resolve correctly again.
   !important needed: the broad :not(#pocket) rule above has 2 IDs of specificity (body +
   #pocket), higher than this single-ID selector, same reason the .row/.col-* override above
   needs it too. */
#bloger .container {
	box-sizing: border-box !important;
}

/* Same Bootstrap line-height:1.5 (body, inherited by p/li) + line-height:1.2 (h1-h6, reboot
   type-selector) leak as #textPage .content above, but for #pocket's own CMS content blocks
   (the heading+paragraph text next to each banner image) - found 2026-09-05 via .row-relex
   height comparison on /laserova-operacia-oci (694px local vs 580px production, traced to p
   line-height:24px vs production's "normal", h3 line-height:43.2px vs "normal"). #pocket
   already gets real Bootstrap grid math (border-box, see the .row/.col-* rule above) but never
   got this typography restore - only #textPage .content did, in an earlier, different fix.

   line-height only, NOT margin-bottom: css/laserova-new.css has many existing
   ".row-XXX h2/h3{margin-bottom:...}" component rules (e.g. .row-trash h2, .row-tabulka h2,
   .row-laser h2) with their own intentional values. Those are class-scoped (0 ID + 1 class +
   1 type), and this ID-scoped rule (1 ID + 1 type) would beat them on specificity regardless
   of source order - confirmed by testing margin-bottom:0 here first, which incorrectly zeroed
   .row-trash h2's real 20px margin (524px prod vs 484px local, the wrong direction). Bootstrap's
   own margin-bottom leak is a bare type selector (lowest specificity), so it already loses to
   any of those existing component rules wherever one exists - only line-height has no such
   competing rule anywhere, which is why it's safe to restore broadly here.

   :where(#pocket) update (2026-09-05, found via /sosovky-galaxy's .toric-content p): that
   assumption was wrong - .toric-content p{line-height:27px} (css/sosovky-galaxy.css) is exactly
   such a competing rule, and this ID-scoped selector's specificity (1 ID + 1 type) beat it
   regardless of load order, silently zeroing an intentional design value back to "normal".
   :where(#pocket) keeps the same #pocket scoping but contributes zero specificity, so this rule
   still beats Bootstrap's own bare `p{line-height:1.5}` (equal-or-lower specificity, but this
   file loads later) while correctly losing to any page-specific class-scoped override. */
:where(#pocket) p,
:where(#pocket) ul,
:where(#pocket) ol,
:where(#pocket) h1,
:where(#pocket) h2,
:where(#pocket) h3,
:where(#pocket) h4,
:where(#pocket) h5,
:where(#pocket) h6,
:where(#pocket) li {
	line-height: normal;
}

/* Footer trust-badge overlap (mobile, found 2026-09-05 via screenshot comparison on
   /skulenie and /darcekovy-poukaz): .ndz-holder shares the .bottom-menu class with the
   footer's real text links, so style-inline.css's generic ".bottom-menu a{height:32px}"
   also squashes the <a> wrapping each 150px-tall trust-badge image (see
   pages/body_page.php's .ndz img, body-extracted.css's ".ndz{height:150px}" at
   max-width:767px). The oversized image then visually overflows past its own 32px-tall
   anchor into where the next footer column starts. Restoring the anchor's natural height
   here for just this component fixes the overlap without touching the shared
   .bottom-menu a rule (which is correct for the real text links). */
@media (max-width: 767px) {
	.ndz-holder a {
		height: auto;
		min-height: 150px;
	}
}

/* BS3 grid-class compatibility shim (found 2026-09-05 via /sosovky-galaxy): WYSIWYG-authored
   CMS content (database var* columns, e.g. pages.var29/var30) still contains raw Bootstrap 3
   grid HTML (col-xs-N) written before this project's Bootstrap 4.6.2 migration. col-xs-* has
   no Bootstrap 4 equivalent (the -xs- infix was dropped) and now Bootstrap 4 governs the page,
   so these classes silently do nothing, collapsing icon+text layouts to full width. Confirmed
   across 11 rows / multiple page types (sosovky-galaxy, zlasik, generic, esteticke-zakroky) —
   only col-xs-2/6/10/12 are actually used, so only those are shimmed here. Editing the CMS
   content directly is out of scope; this keeps the existing content rendering correctly. */
.col-xs-2, .col-xs-6, .col-xs-10, .col-xs-12 {
	position: relative;
	width: 100%;
	padding-right: 15px;
	padding-left: 15px;
}
.col-xs-2 { flex: 0 0 16.666667%; max-width: 16.666667%; }
.col-xs-6 { flex: 0 0 50%; max-width: 50%; }
.col-xs-10 { flex: 0 0 83.333333%; max-width: 83.333333%; }
.col-xs-12 { flex: 0 0 100%; max-width: 100%; }
