/* RR Selector — styled exclusively through the site's design tokens,
   with plain fallbacks. Status colors arrive as --rr-stav-* custom props
   (inline style from plugin settings). */

/* ---------- maps (aerial + floor) ---------- */
.rr-map-stage { position: relative; line-height: 0; }
.rr-map-img { width: 100%; height: auto; display: block; }
.rr-map-svg { position: absolute; inset: 0; width: 100%; height: 100%; }

.rr-map-svg .rr-hot > * ,
.rr-map-svg .rr-hot { cursor: pointer; }
/* NOTE: no fill-opacity anywhere — opacity is controlled solely by the alpha
   of the configured colors, so rgba() settings behave exactly as typed */
.rr-map-svg [id] { fill: transparent; stroke: transparent; transition: fill .15s ease; }
.rr-map-svg .rr-hot:hover [id],
.rr-map-svg .rr-hot:focus-visible [id],
.rr-map-svg .rr-hot.rr-active [id],
.rr-map-svg .rr-sync [id] { fill: var(--rr-m-fill-hover, var(--rr-hover-fill, rgba(240, 106, 20, 0.2))); }
.rr-map-svg .rr-hot.rr-stav-prodane:hover [id],
.rr-map-svg .rr-hot.rr-stav-prodane.rr-active [id] { fill: var(--rr-m-sold-fill, rgba(163, 154, 143, 0.35)); }
.rr-map-svg .rr-disabled [id] { fill: var(--rr-m-prep-fill, rgba(163, 154, 143, 0.25)); }
.rr-map-svg .rr-hot:focus-visible [id] { stroke: var(--rr-m-border, var(--rr-orange, #F06B32)); stroke-width: 2; }
/* chip/badge anchor markers drawn in the overlay (id "A-1-label") stay invisible */
.rr-map-svg [id$="-label"] { visibility: hidden; }

/* hover card */
.rr-card {
	position: absolute; z-index: 20; pointer-events: none;
	min-width: 180px; max-width: 260px; line-height: 1.45;
	background: var(--white, #fff); color: var(--rr-dark-grey, #25262A);
	border: 1px solid var(--rr-light-grey, #D8D6C9); border-radius: 8px;
	padding: 12px 14px; box-shadow: 0 8px 24px rgba(0, 0, 0, .12);
	font-family: var(--body, inherit); font-size: var(--text-body-s, 14px);
}
.rr-card .rr-card-title { font-weight: 600; font-size: var(--text-body, 16px); margin-bottom: 4px; }
.rr-card .rr-card-line { color: inherit; opacity: .8; }
.rr-card .rr-badge { margin-top: 6px; }

/* badges */
.rr-badge {
	display: inline-block; font-size: var(--text-tag, 12px); font-weight: 600;
	line-height: 1; padding: 5px 12px; border-radius: 999px;
	color: #fff; background: var(--rr-stav-prodane, #A39A8F);
	font-family: var(--body, inherit);
}
.rr-stav-volne.rr-badge, .rr-badge.rr-stav-volne { background: var(--rr-stav-volne, #4C9A62); }
.rr-badge.rr-stav-rezervovano { background: var(--rr-stav-rezervovano, #D9A441); }
.rr-badge.rr-stav-prodane { background: var(--rr-stav-prodane, #A39A8F); }

/* ---------- aerial fallback list ---------- */
.rr-areal-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 10px; margin-top: 16px; }
.rr-list-row {
	display: flex; flex-direction: column; gap: 2px; text-decoration: none;
	border: 1px solid var(--rr-light-grey, #D8D6C9); border-radius: 10px;
	padding: 12px 16px; color: var(--rr-dark-grey, #25262A);
	font-family: var(--body, inherit); font-size: var(--text-body-s, 14px);
	transition: border-color .15s ease;
}
a.rr-list-row:hover, a.rr-list-row:focus-visible { border-color: var(--rr-orange, #F06B32); }
.rr-list-title { font-weight: 600; font-size: var(--text-body, 16px); }
.rr-list-sub { opacity: .7; }
.rr-list-disabled { opacity: .55; }
/* with JS active, the list is a mobile fallback only */
.rr-js .rr-areal-list { display: none; }
.rr-js.rr-static .rr-areal-list { display: grid; }
.rr-static .rr-map-svg { pointer-events: none; }
.rr-static .rr-card { display: none !important; }

/* ---------- floor flat list ---------- */
.rr-seznam { display: flex; flex-direction: column; }
.rr-seznam-row {
	display: flex; justify-content: space-between; gap: 16px; align-items: baseline;
	padding: 9px 2px; text-decoration: none; color: var(--rr-dark-grey, #25262A);
	border-bottom: 1px solid var(--rr-light-grey, #D8D6C9);
	font-family: var(--body, inherit); font-size: var(--text-body-s, 14px);
}
.rr-seznam-row:hover .rr-seznam-name, .rr-seznam-row:focus-visible .rr-seznam-name { color: var(--rr-orange, #F06B32); }
.rr-seznam-row.rr-stav-prodane { opacity: .5; }
.rr-seznam-area { font-variant-numeric: tabular-nums; white-space: nowrap; }

/* ---------- floor tabs + building switch ----------
   Tabs/toggles carry the site's btn-primary / btn-secondary classes and
   inherit `.elementor .btn-*` global-class CSS. Rules below only add what
   the site classes don't cover: link/button element resets and a fallback
   look for the (unlikely) case the global classes are missing. */
.rr-taby { display: flex; flex-wrap: wrap; gap: 8px; }
.rr-tab { text-decoration: none; cursor: pointer; }
button.rr-tab {
	appearance: none; -webkit-appearance: none; border: 0; margin: 0;
	background: none; font: inherit;
}
span.rr-tab { cursor: default; }
.rr-prepinac {
	text-decoration: none; color: var(--rr-dark-grey, #25262A);
	font-family: var(--heading, inherit); font-size: var(--title-h3, 28px);
}
.rr-prepinac:hover, .rr-prepinac:focus-visible { color: var(--rr-orange, #F06B32); }

/* ---------- flat parameters ---------- */
.rr-parametry { margin: 0; font-family: var(--body, inherit); }
.rr-parametry-row {
	display: flex; justify-content: space-between; gap: 24px; align-items: baseline;
	padding: 9px 0; border-bottom: 1px solid var(--rr-light-grey, #D8D6C9);
	font-size: var(--text-body-s, 14px);
}
.rr-parametry dt { color: var(--rr-dark-grey, #25262A); opacity: .7; }
.rr-parametry dd { margin: 0; font-weight: 600; text-align: right; font-variant-numeric: tabular-nums; }

/* ---------- back link ---------- */
.rr-zpet {
	display: inline-block; text-decoration: none; color: var(--rr-dark-grey, #25262A);
	font-family: var(--heading, inherit); font-size: var(--title-h3, 28px);
}
.rr-zpet:hover, .rr-zpet:focus-visible { color: var(--rr-orange, #F06B32); }

/* ---------- site button classes, replicated for plugin-rendered buttons ----------
   Elementor loads its global-class CSS (.elementor .btn-primary…) only on
   documents that use those classes in the builder — shortcode markup isn't
   registered, so on floor/byt pages the chunk can be absent. These rules are
   a 1:1 copy of global-39-frontend-desktop.css, scoped to plugin containers:
   identical when both load, complete when Elementor's chunk is missing.
   Hover changes NO background/color — glow box-shadow + text slide only.
   Keep in sync with the site design system if the components change. */
.rr-taby .btn-primary, .rr-pudorys-taby .btn-primary, .rr-karta-btn.btn-primary,
.rr-taby .btn-secondary, .rr-pudorys-taby .btn-secondary, .rr-karta-btn.btn-secondary {
	width: auto; min-height: auto; font-family: var(--body, inherit); font-size: 14px;
	color: var(--white, #fff); line-height: 1.2em; text-align: center;
	padding-block-start: 11px; padding-block-end: 11px;
	padding-inline-start: 20px; padding-inline-end: 20px;
	border-radius: 50px; display: flex; flex-direction: row; gap: 3px;
	flex-wrap: nowrap; justify-content: center; align-items: center;
}
.rr-taby .btn-primary, .rr-pudorys-taby .btn-primary, .rr-karta-btn.btn-primary {
	background-color: var(--rr-orange, #F06B32); transition: box-shadow 500ms;
}
.rr-taby .btn-secondary, .rr-pudorys-taby .btn-secondary, .rr-karta-btn.btn-secondary {
	background-color: var(--rr-dark-grey, #25262A); transition: background-color 500ms, box-shadow 500ms;
}
.rr-taby .btn-primary:hover, .rr-pudorys-taby .btn-primary:hover, .rr-karta-btn.btn-primary:hover,
.rr-taby .btn-primary:focus-visible, .rr-pudorys-taby .btn-primary:focus-visible, .rr-karta-btn.btn-primary:focus-visible {
	box-shadow: 0px 0px 13px -1px var(--rr-orange, #F06B32);
}
.rr-taby .btn-secondary:hover, .rr-pudorys-taby .btn-secondary:hover, .rr-karta-btn.btn-secondary:hover,
.rr-taby .btn-secondary:focus-visible, .rr-pudorys-taby .btn-secondary:focus-visible, .rr-karta-btn.btn-secondary:focus-visible {
	box-shadow: 0px 0px 10px 1px var(--rr-orange, #F06B32) inset, 0px 0px 0px 1px var(--rr-dark-grey, #25262A) inset;
}
.rr-taby .btn_text_wrapper, .rr-pudorys-taby .btn_text_wrapper, .rr-karta-btn .btn_text_wrapper {
	width: auto; min-height: auto; overflow: hidden; position: relative;
	text-align: center; padding: 0px; display: block;
}
.rr-taby .btn_text, .rr-pudorys-taby .btn_text, .rr-karta-btn .btn_text { transition: transform 500ms; display: block; }
.rr-taby .btn_text_2, .rr-pudorys-taby .btn_text_2, .rr-karta-btn .btn_text_2 { position: absolute; }
.rr-taby .btn-primary:hover .btn_text, .rr-pudorys-taby .btn-primary:hover .btn_text, .rr-karta-btn.btn-primary:hover .btn_text,
.rr-taby .btn-secondary:hover .btn_text, .rr-pudorys-taby .btn-secondary:hover .btn_text, .rr-karta-btn.btn-secondary:hover .btn_text,
.rr-taby .btn-primary:focus-visible .btn_text, .rr-pudorys-taby .btn-primary:focus-visible .btn_text, .rr-karta-btn.btn-primary:focus-visible .btn_text,
.rr-taby .btn-secondary:focus-visible .btn_text, .rr-pudorys-taby .btn-secondary:focus-visible .btn_text, .rr-karta-btn.btn-secondary:focus-visible .btn_text {
	transform: translateY(-100%);
}
.rr-btn-outline {
	background: transparent; color: var(--rr-dark-grey, #25262A);
	border: 1px solid var(--rr-dark-grey, #25262A);
}
.rr-btn-outline:hover, .rr-btn-outline:focus-visible { opacity: 1; color: var(--rr-orange, #F06B32); border-color: var(--rr-orange, #F06B32); }

/* ---------- flat plan(s) with optional floor toggle ---------- */
.rr-pudorys { width: 100%; }
.rr-pudorys-taby { display: flex; gap: 8px; margin-bottom: 14px; justify-content: center; }
/* The Elementor kit stylesheet (post-8.css) recolors every bare
   button:hover/:focus site-wide (.elementor-kit-8 button:hover → orange
   semi-trans bg + dark text). Re-assert the resting colors with higher
   specificity — hover feedback stays glow + text slide only. */
.rr-pudorys-taby button.btn-primary:hover,
.rr-pudorys-taby button.btn-primary:focus {
	background-color: var(--rr-orange, #F06B32);
	color: var(--white, #fff);
}
.rr-pudorys-taby button.btn-secondary:hover,
.rr-pudorys-taby button.btn-secondary:focus {
	background-color: var(--rr-dark-grey, #25262A);
	color: var(--white, #fff);
}
.rr-pudorys-plan { display: none; }
.rr-pudorys-plan.rr-plan-active { display: block; }
.rr-pudorys-plan img {
	width: auto; max-width: 100%; height: auto;
	max-height: var(--rr-plan-max-h, 500px);
	display: block; margin-inline: auto;
}

/* ---------- persistent map affordance (setting "Nápověda klikatelnosti") ----------
   Per the 2026-09-02 design: selectable shapes rest with a TRANSPARENT fill
   and a distinct border; the semi-transparent fill appears on hover only.
   Sold-out floors/flats rest with a grey outline + light grey veil;
   buildings v přípravě rest with a white outline + white veil and carry a
   permanent badge (rendered by JS as .rr-map-badge). */
.rr-map-svg [id] { vector-effect: non-scaling-stroke; } /* crisp borders at any scale */
/* All colors/widths come from --rr-m-* custom props emitted per map
   (.rr-map-areal / .rr-map-podlazi) from Settings → RR Selector → Vzhled map;
   podlaží inherits areál where left empty. Fallbacks = the 2026-09-02 design. */
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-hot [id] {
	fill: var(--rr-m-fill, transparent);
	stroke: var(--rr-m-border, var(--rr-orange, #F06B32));
	stroke-width: var(--rr-m-bw, 2px);
	transition: fill .15s ease, stroke .15s ease;
}
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-hot:hover [id],
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-hot:focus-visible [id],
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-hot.rr-active [id],
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-sync [id] {
	fill: var(--rr-m-fill-hover, var(--rr-hover-fill, rgba(240, 106, 20, 0.2)));
}
/* sold out (flats, or floors with 0 volné) — muted, still clickable */
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-hot.rr-stav-prodane [id],
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-hot.rr-stav-prodane:hover [id],
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-hot.rr-stav-prodane:focus-visible [id],
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-hot.rr-stav-prodane.rr-active [id],
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-hot.rr-stav-prodane.rr-sync [id] {
	fill: var(--rr-m-sold-fill, rgba(163, 154, 143, 0.22));
	stroke: var(--rr-m-sold-border, rgba(163, 154, 143, 0.75));
	stroke-width: var(--rr-m-sold-bw, 2px);
}
/* buildings v přípravě — badge always visible */
.rr-map[data-rr-hint="1"] .rr-map-svg .rr-disabled [id] {
	fill: var(--rr-m-prep-fill, rgba(255, 255, 255, 0.28));
	stroke: var(--rr-m-prep-border, rgba(255, 255, 255, 0.95));
	stroke-width: var(--rr-m-prep-bw, 2px);
}
/* optional white halo behind the outlines (setting) — lifts the border off
   busy photo areas so selectability reads on any background */
.rr-map[data-rr-halo="1"] .rr-map-svg .rr-hot [id] {
	filter: drop-shadow(0 0 1.5px rgba(255, 255, 255, 0.9));
}

/* optional affordance animation (setting) — never on sold/disabled shapes,
   stopped while hovered/focused/synced, disabled for reduced-motion users */
@keyframes rr-breathe { 0%, 100% { stroke-opacity: 1; } 50% { stroke-opacity: .35; } }
.rr-map[data-rr-breathe="1"] .rr-map-svg .rr-hot:not(.rr-stav-prodane) [id] {
	animation: rr-breathe 3.2s ease-in-out infinite;
}
.rr-map .rr-map-svg .rr-hot:hover [id],
.rr-map .rr-map-svg .rr-hot:focus-visible [id],
.rr-map .rr-map-svg .rr-hot.rr-active [id],
.rr-map .rr-map-svg .rr-sync [id] { animation: none; }
@media (prefers-reduced-motion: reduce) {
	.rr-map .rr-map-svg .rr-hot [id] { animation: none !important; }
}

/* optional always-visible floor chips (setting) */
.rr-map-chip {
	position: absolute; transform: translate(-50%, -50%); z-index: 9;
	background: var(--white, #fff); color: var(--rr-dark-grey, #25262A);
	border-radius: 999px; padding: 5px 12px; white-space: nowrap;
	font-family: var(--body, inherit); font-size: var(--text-tag, 12px); line-height: 1.2;
	box-shadow: 0 3px 10px rgba(0, 0, 0, .14); pointer-events: none;
}
.rr-map-chip.rr-chip-prodane { color: var(--rr-stav-prodane, #A39A8F); }
@media (max-width: 767px) {
	.rr-map-chip { font-size: 11px; padding: 4px 9px; }
}

/* permanent badge on unavailable buildings ("Budova C – připravujeme") */
.rr-map-badge {
	position: absolute; transform: translate(-50%, -50%); z-index: 10;
	background: var(--white, #fff); color: var(--rr-dark-grey, #25262A);
	border-radius: 999px; padding: 9px 16px; white-space: nowrap;
	font-family: var(--body, inherit); font-size: var(--text-body-s, 14px); line-height: 1.2;
	box-shadow: 0 4px 14px rgba(0, 0, 0, .15); pointer-events: none;
}
.rr-map-badge-title { color: var(--rr-orange, #F06B32); font-weight: 600; }
@media (max-width: 767px) {
	.rr-map-badge { font-size: var(--text-tag, 12px); padding: 6px 12px; }
}

/* ---------- building graphics ---------- */
.rr-grafika { width: 100%; }
.rr-grafika img { width: 100%; max-width: 100%; height: auto; display: block; }

/* ---------- ceník ---------- */
.rr-cenik { font-family: var(--body, inherit); }
.rr-cenik-filtry { display: flex; flex-wrap: wrap; gap: 14px 20px; align-items: flex-end; margin-bottom: 18px; }
.rr-filtr { display: flex; flex-direction: column; gap: 4px; font-size: var(--text-tag, 12px); text-transform: uppercase; letter-spacing: .06em; color: var(--rr-dark-grey, #25262A); }
.rr-filtr select {
	min-width: 130px; padding: 8px 10px; font-size: var(--text-body-s, 14px);
	border: 1px solid var(--rr-light-grey, #D8D6C9); border-radius: 8px;
	background: var(--white, #fff); color: var(--rr-dark-grey, #25262A);
}
.rr-cenik-count { font-size: var(--text-body-s, 14px); opacity: .65; margin-left: auto; }
.rr-cenik-scroll { overflow-x: auto; }
/* Doubled selectors on purpose: Elementor/theme base CSS styles bare
   table/th/td — these must win without !important. Explicit resets first. */
.rr-cenik table.rr-cenik-tabulka {
	/* separate, not collapse: collapsed borders detach from position:sticky
	   header cells and scroll away with the body */
	width: 100%; border-collapse: separate; border-spacing: 0; margin: 0;
	border: none; background: none; table-layout: auto;
	font-size: var(--text-body-s, 14px); min-width: 900px;
}
.rr-cenik .rr-cenik-tabulka thead,
.rr-cenik .rr-cenik-tabulka tbody,
.rr-cenik .rr-cenik-tabulka tr { border: none; background: none; }
.rr-cenik .rr-cenik-tabulka th {
	text-align: center; font-size: var(--text-tag, 12px); font-weight: 500;
	text-transform: none; letter-spacing: normal; vertical-align: middle;
	/* muted via color, not opacity — a sticky th with opacity lets the rows
	   scrolling underneath ghost through its background */
	color: color-mix(in srgb, var(--rr-dark-grey, #25262A) 65%, var(--white, #fff));
	padding: 10px;
	white-space: nowrap; background: none;
	border: none; border-bottom: 1px solid var(--rr-light-grey, #D8D6C9);
}
.rr-cenik .rr-cenik-tabulka th[data-rr-sort] { cursor: pointer; }
.rr-cenik .rr-cenik-tabulka th[data-rr-sort]::after { content: " ↕"; opacity: .5; }
.rr-cenik .rr-cenik-tabulka th.rr-sort-asc::after { content: " ↑"; opacity: 1; }
.rr-cenik .rr-cenik-tabulka th.rr-sort-desc::after { content: " ↓"; opacity: 1; }
.rr-cenik .rr-cenik-tabulka td {
	/* 10px inline padding: with all 14 columns the table must stay inside the
	   site's 1385px boxed container so the fit mode can engage on desktop */
	padding: 12px 10px; background: none; vertical-align: middle; text-align: center;
	border: none; border-bottom: 1px solid var(--rr-light-grey, #D8D6C9);
	white-space: nowrap; font-variant-numeric: tabular-nums; color: var(--rr-dark-grey, #25262A);
}
.rr-cenik .rr-cenik-tabulka tr:nth-child(odd) td,
.rr-cenik .rr-cenik-tabulka tr:nth-child(even) td { background: none; }
.rr-cenik .rr-cenik-tabulka td a { color: inherit; font-weight: 600; text-decoration: none; }
.rr-cenik-row { cursor: pointer; transition: background .12s ease; }
/* scoped like the tr reset above, plus the row class, so hover outranks it —
   a bare .rr-cenik-row:hover loses to the (0,2,1) `… tr` reset and never shows */
.rr-cenik .rr-cenik-tabulka .rr-cenik-row:hover { background: var(--rr-orange-semi-trans, rgba(240, 106, 20, .08)); }
.rr-cenik .rr-cenik-tabulka .rr-cenik-row.rr-sold:hover { background: color-mix(in srgb, var(--rr-stav-prodane, #A39A8F) 20%, transparent); }
.rr-cenik-row.rr-sold td { opacity: .5; }
.rr-cenik-row[hidden] { display: none; }
.rr-cenik .rr-cenik-tabulka .rr-cenik-empty td {
	text-align: center; padding: 32px 12px; white-space: normal;
	color: var(--rr-dark-grey, #25262A); opacity: .6;
}
.rr-cenik-empty[hidden] { display: none; }
.rr-karta { display: inline-block; text-decoration: none; font-weight: 700; color: var(--rr-orange, #F06B32); }

/* Sticky header, two modes — JS measures actual fit and toggles .rr-fit on
   .rr-cenik (a viewport media query can't know the container/column config):
   — table wider than its container (default, also the no-JS fallback):
     the wrapper becomes a bounded two-axis scroll box and the header sticks
     to its top; position:sticky cannot escape an overflow container, so
     stickiness has to live inside the box together with the scrolling.
   — table fits (.rr-fit): wrapper overflow is released and the header sticks
     under the fixed site header while the whole page scrolls. Offset via the
     site's --anchor-offset token (override with --rr-cenik-sticky-top). */
.rr-cenik .rr-cenik-scroll {
	overflow: auto;
	max-height: calc(100vh - var(--anchor-offset, 80px) - 16px);
	max-height: calc(100dvh - var(--anchor-offset, 80px) - 16px);
}
.rr-cenik .rr-cenik-tabulka th {
	position: sticky;
	top: 0;
	background: var(--white, #fff);
	z-index: 2;
}
.rr-cenik.rr-fit .rr-cenik-scroll { overflow: visible; max-height: none; }
.rr-cenik.rr-fit .rr-cenik-tabulka th {
	top: var(--rr-cenik-sticky-top, var(--anchor-offset, 80px));
}
/* sticky header disabled via settings */
.rr-cenik.rr-no-sticky .rr-cenik-scroll,
.rr-cenik.rr-no-sticky.rr-fit .rr-cenik-scroll { overflow-x: auto; overflow-y: visible; max-height: none; }
.rr-cenik.rr-no-sticky .rr-cenik-tabulka th { position: static; }

@media (max-width: 767px) {
	.rr-cenik-filtry { gap: 10px; }
	.rr-filtr select { min-width: 110px; }
}
