:root {
  --kv-ink: #141a16;
  --kv-ink-2: #26302a;
  --kv-cream: #f6f1e8;
  --kv-cream-2: #ece3d4;
  --kv-gold: #b0813a;
  --kv-gold-2: #cfa056;
  --kv-forest: #1f3327;
  --kv-forest-2: #2c4636;
  --kv-white: #ffffff;
  --kv-soft-gray: #55605a;
  --kv-line: rgba(20, 26, 22, 0.12);
  --kv-shadow-lg: 0 30px 80px -30px rgba(20, 26, 22, 0.4);
  --kv-shadow-sm: 0 12px 30px -12px rgba(20, 26, 22, 0.25);
  --kv-radius: 16px;
  --kv-radius-lg: 26px;
  --kv-serif: Georgia, "Times New Roman", "Noto Serif", serif;
  --kv-sans: "Inter", "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
  --kv-maxw: 1240px;
}

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

html {
  scroll-behavior: smooth;
}

body {
  margin: 0;
  font-family: var(--kv-sans);
  font-size: 1rem;
  line-height: 1.65;
  color: var(--kv-ink);
  background: var(--kv-cream);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

h1,
h2,
h3,
h4,
.kv-display {
  font-family: var(--kv-serif);
  font-weight: 500;
  color: var(--kv-ink);
  line-height: 1.15;
  letter-spacing: -0.01em;
  margin: 0 0 0.5em;
}

h1 { font-size: clamp(2.4rem, 5vw, 4.2rem); }
h2 { font-size: clamp(1.8rem, 3.6vw, 2.9rem); }
h3 { font-size: clamp(1.3rem, 2.2vw, 1.8rem); }
h4 { font-size: 1.15rem; font-weight: 600; }

p {
  margin: 0 0 1rem;
}

a {
  color: var(--kv-gold);
  text-decoration: none;
  transition: color 0.2s ease;
}

a:hover {
  color: var(--kv-ink);
}

img {
  max-width: 100%;
  height: auto;
  display: block;
}

.kv-container {
  width: 100%;
  max-width: var(--kv-maxw);
  margin-inline: auto;
  padding-inline: clamp(1.1rem, 4vw, 2rem);
}

.kv-section {
  padding: clamp(3.5rem, 8vw, 7rem) 0;
  position: relative;
}

.kv-section--cream {
  background: var(--kv-cream-2);
}

.kv-section--dark {
  background: var(--kv-forest);
  color: rgba(246, 241, 232, 0.82);
}

.kv-section--dark h2,
.kv-section--dark h3,
.kv-section--dark h4 {
  color: #ffffff;
}

.kv-section--dark .kv-eyebrow {
  color: var(--kv-gold-2);
}

.kv-section--dark p {
  color: rgba(246, 241, 232, 0.82);
}

.kv-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  font-family: var(--kv-sans);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--kv-gold);
  margin-bottom: 1rem;
}

.kv-eyebrow::before {
  content: "";
  width: 28px;
  height: 1px;
  background: currentColor;
}

.kv-section-head {
  max-width: 660px;
  margin: 0 auto clamp(2rem, 5vw, 3.5rem);
  text-align: center;
}

.kv-lead {
  font-size: 1.1rem;
  color: var(--kv-soft-gray);
  max-width: 44rem;
}

.kv-section--dark .kv-lead {
  color: rgba(246, 241, 232, 0.78);
}

.kv-divider {
  width: 60px;
  height: 2px;
  border: none;
  background: var(--kv-gold);
  margin: 1.5rem auto;
}

.kv-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  padding: 0.95rem 1.9rem;
  font-family: var(--kv-sans);
  font-size: 0.95rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  line-height: 1;
  border-radius: 999px;
  border: 1px solid transparent;
  text-decoration: none;
  cursor: pointer;
  transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}

.kv-btn:active {
  transform: translateY(1px);
}

.kv-btn--primary {
  background: var(--kv-gold);
  color: var(--kv-ink);
  box-shadow: 0 14px 30px -14px rgba(176, 129, 58, 0.7);
}

.kv-btn--primary:hover {
  background: var(--kv-gold-2);
  color: var(--kv-ink);
  box-shadow: 0 18px 34px -14px rgba(176, 129, 58, 0.85);
}

.kv-btn--dark {
  background: var(--kv-forest);
  color: var(--kv-cream);
}

.kv-btn--dark:hover {
  background: var(--kv-forest-2);
  color: #ffffff;
}

.kv-btn--ghost {
  background: transparent;
  color: var(--kv-ink);
  border-color: rgba(20, 26, 22, 0.25);
}

.kv-btn--ghost:hover {
  background: var(--kv-ink);
  color: var(--kv-cream);
  border-color: var(--kv-ink);
}

.kv-btn--light {
  background: #ffffff;
  color: var(--kv-ink);
}

.kv-btn--light:hover {
  background: var(--kv-cream);
  color: var(--kv-ink);
}

.kv-btn--light-outline {
  background: transparent;
  color: #ffffff;
  border-color: rgba(255, 255, 255, 0.55);
}

.kv-btn--light-outline:hover {
  background: #ffffff;
  color: var(--kv-ink);
  border-color: #ffffff;
}

.kv-header {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: 1030;
  padding-block: 0.75rem;
  background: rgba(20, 26, 22, 0.55);
  -webkit-backdrop-filter: blur(16px) saturate(140%);
  backdrop-filter: blur(16px) saturate(140%);
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
  transition: background 0.3s ease, padding 0.3s ease, border-color 0.3s ease;
}

.kv-header.is-scrolled {
  background: rgba(20, 26, 22, 0.94);
  padding-block: 0.5rem;
  border-bottom-color: rgba(207, 160, 86, 0.25);
}

.kv-header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
}

.kv-header__brand {
  display: inline-flex;
  align-items: center;
  gap: 0.65rem;
  color: #ffffff;
  font-family: var(--kv-serif);
  font-size: 1.35rem;
  font-weight: 600;
  letter-spacing: 0.02em;
}

.kv-header__brand img {
  width: 80px;
  height: 40px;
  object-fit: contain;
}

.kv-header__brand:hover {
  color: var(--kv-gold-2);
}

.kv-nav {
  display: flex;
  align-items: center;
  gap: 1.6rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.kv-nav__link {
  color: rgba(255, 255, 255, 0.82);
  font-size: 0.92rem;
  font-weight: 500;
  letter-spacing: 0.01em;
  padding: 0.35rem 0;
  position: relative;
}

.kv-nav__link::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 0;
  height: 2px;
  background: var(--kv-gold-2);
  transition: width 0.3s ease;
}

.kv-nav__link:hover,
.kv-nav__link.is-active {
  color: #ffffff;
}

.kv-nav__link:hover::after,
.kv-nav__link.is-active::after {
  width: 100%;
}

.kv-header__contact {
  display: flex;
  align-items: center;
  gap: 1.1rem;
}

.kv-header__contact a,
.kv-header__contact span {
  color: rgba(255, 255, 255, 0.85);
  font-size: 0.85rem;
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
}

.kv-header__contact a:hover {
  color: var(--kv-gold-2);
}

.kv-header__contact i {
  color: var(--kv-gold-2);
}

.kv-nav-toggle {
  display: none;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 12px;
  border: 1px solid rgba(255, 255, 255, 0.22);
  background: transparent;
  color: #ffffff;
  font-size: 1.1rem;
  cursor: pointer;
  transition: background 0.2s ease, border-color 0.2s ease;
}

.kv-nav-toggle:hover {
  background: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.4);
}

.kv-hero {
  position: relative;
  min-height: 100vh;
  display: flex;
  align-items: center;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  background-color: var(--kv-forest);
  color: #ffffff;
  overflow: hidden;
}

.kv-hero__content {
  position: relative;
  z-index: 2;
  max-width: 720px;
  padding-block: clamp(7rem, 14vw, 10rem) clamp(4rem, 8vw, 6rem);
}

.kv-hero__title,
.kv-hero h1 {
  color: #ffffff;
  font-size: clamp(2.6rem, 6vw, 4.6rem);
  line-height: 1.05;
  letter-spacing: -0.015em;
}

.kv-hero__lead {
  color: rgba(255, 255, 255, 0.9);
  font-size: clamp(1rem, 1.6vw, 1.2rem);
  max-width: 34rem;
  margin-bottom: 2rem;
}

.kv-hero__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.8rem;
}

.kv-hero-slider {
  position: relative;
  color: #ffffff;
  background-color: var(--kv-forest);
}

.kv-hero-slider .carousel-item {
  min-height: 100vh;
  display: flex;
  align-items: center;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
}

.kv-hero-slider .kv-hero__content {
  max-width: 720px;
  padding-block: clamp(7rem, 14vw, 10rem) clamp(5rem, 9vw, 7rem);
}

.carousel-indicators [data-bs-target] {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.5);
  border: none;
  margin-inline: 0.35rem;
}

.carousel-indicators .active {
  background: var(--kv-gold-2);
}

.carousel-control-prev,
.carousel-control-next {
  width: 6%;
  opacity: 0.7;
}

.carousel-control-prev:hover,
.carousel-control-next:hover {
  opacity: 1;
}

.kv-card {
  display: flex;
  flex-direction: column;
  background: #ffffff;
  border-radius: var(--kv-radius);
  box-shadow: var(--kv-shadow-sm);
  overflow: hidden;
  height: 100%;
  transition: transform 0.35s ease, box-shadow 0.35s ease;
}

.kv-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--kv-shadow-lg);
}

.kv-card__media {
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: var(--kv-cream-2);
}

.kv-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s ease;
}

.kv-card:hover .kv-card__media img {
  transform: scale(1.04);
}

.kv-card__body {
  padding: 1.5rem;
  display: flex;
  flex-direction: column;
  flex: 1;
}

.kv-card__meta {
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--kv-gold);
  margin-bottom: 0.5rem;
}

.kv-card__title {
  margin-bottom: 0.6rem;
}

.kv-card__text {
  color: var(--kv-soft-gray);
  font-size: 0.95rem;
  flex: 1;
}

.kv-card__footer {
  margin-top: 1.2rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}

.kv-price {
  font-family: var(--kv-serif);
  font-size: 1.35rem;
  color: var(--kv-ink);
}

.kv-price small {
  font-family: var(--kv-sans);
  font-size: 0.75rem;
  color: var(--kv-soft-gray);
  font-weight: 500;
}

.kv-stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 1.5rem;
}

.kv-stat {
  text-align: center;
}

.kv-stat__num {
  font-family: var(--kv-serif);
  font-size: clamp(2.2rem, 4vw, 3rem);
  line-height: 1;
  color: var(--kv-gold);
  display: block;
}

.kv-stat__label {
  font-size: 0.88rem;
  color: var(--kv-soft-gray);
  margin-top: 0.5rem;
}

.kv-section--dark .kv-stat__label {
  color: rgba(246, 241, 232, 0.75);
}

.kv-quote {
  background: #ffffff;
  border-left: 3px solid var(--kv-gold);
  border-radius: var(--kv-radius);
  padding: 1.75rem;
  box-shadow: var(--kv-shadow-sm);
}

.kv-quote__text {
  font-family: var(--kv-serif);
  font-size: 1.15rem;
  line-height: 1.5;
  color: var(--kv-ink);
  margin-bottom: 1rem;
}

.kv-quote__author {
  display: flex;
  align-items: center;
  gap: 0.85rem;
}

.kv-quote__author img {
  width: 46px;
  height: 46px;
  border-radius: 50%;
  object-fit: cover;
}

.kv-quote__name {
  font-weight: 600;
  font-size: 0.92rem;
  color: var(--kv-ink);
}

.kv-quote__role {
  font-size: 0.8rem;
  color: var(--kv-soft-gray);
}

.kv-gallery {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1rem;
}

.kv-gallery__item {
  position: relative;
  border-radius: var(--kv-radius);
  overflow: hidden;
  aspect-ratio: 1;
  background: var(--kv-cream-2);
}

.kv-gallery__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s ease;
}

.kv-gallery__item:hover img {
  transform: scale(1.06);
}

.kv-gallery__item--wide {
  grid-column: span 2;
  aspect-ratio: 2 / 1;
}

.kv-gallery__item--tall {
  grid-row: span 2;
  aspect-ratio: auto;
}

.kv-faq .accordion-item {
  border: 1px solid var(--kv-line);
  border-radius: var(--kv-radius) !important;
  margin-bottom: 0.9rem;
  overflow: hidden;
  background: #ffffff;
}

.kv-faq .accordion-button {
  font-family: var(--kv-serif);
  font-size: 1.08rem;
  color: var(--kv-ink);
  background: #ffffff;
  box-shadow: none;
  padding: 1.2rem 1.4rem;
}

.kv-faq .accordion-button:not(.collapsed) {
  color: var(--kv-gold);
  background: #ffffff;
}

.kv-faq .accordion-button:focus {
  box-shadow: none;
  border-color: transparent;
}

.kv-faq .accordion-button::after {
  background-size: 1rem;
}

.kv-faq .accordion-body {
  color: var(--kv-soft-gray);
  padding: 0 1.4rem 1.3rem;
}

.kv-form .form-label {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--kv-ink-2);
  margin-bottom: 0.35rem;
}

.form-control,
.form-select {
  border-radius: 12px;
  border: 1px solid var(--kv-line);
  background: #ffffff;
  color: var(--kv-ink);
  padding: 0.8rem 1rem;
  font-size: 0.95rem;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

.form-control::placeholder {
  color: #8a938c;
}

.form-control:focus,
.form-select:focus {
  border-color: var(--kv-gold);
  box-shadow: 0 0 0 4px rgba(176, 129, 58, 0.18);
  background: #ffffff;
  color: var(--kv-ink);
}

textarea.form-control {
  min-height: 130px;
  resize: vertical;
}

.kv-form__note {
  font-size: 0.8rem;
  color: var(--kv-soft-gray);
}

.kv-cta {
  position: relative;
  background-size: cover;
  background-position: center;
  background-color: var(--kv-forest);
  color: #ffffff;
  border-radius: var(--kv-radius-lg);
  padding: clamp(2.5rem, 6vw, 5rem);
  overflow: hidden;
}

.kv-cta h2,
.kv-cta h3 {
  color: #ffffff;
}

.kv-cta__inner {
  position: relative;
  z-index: 2;
  max-width: 620px;
}

.kv-cta__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.8rem;
  margin-top: 1.5rem;
}

.kv-footer {
  background: var(--kv-forest);
  color: rgba(246, 241, 232, 0.75);
  padding-block: clamp(3rem, 6vw, 5rem) 1.5rem;
  font-size: 0.92rem;
}

.kv-footer a {
  color: rgba(246, 241, 232, 0.78);
}

.kv-footer a:hover {
  color: var(--kv-gold-2);
}

.kv-footer h3,
.kv-footer h4 {
  color: #ffffff;
  font-family: var(--kv-sans);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin-bottom: 1.1rem;
}

.kv-footer__brand img {
  width: 80px;
  height: 40px;
  object-fit: contain;
  margin-bottom: 1rem;
}

.kv-footer__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0.55rem;
}

.kv-footer__contact {
  display: grid;
  gap: 0.55rem;
}

.kv-footer__contact div {
  display: flex;
  align-items: flex-start;
  gap: 0.55rem;
}

.kv-footer__contact i {
  color: var(--kv-gold-2);
  margin-top: 0.25rem;
}

.kv-footer__bottom {
  border-top: 1px solid rgba(246, 241, 232, 0.12);
  padding-top: 1.5rem;
  margin-top: 2.5rem;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 1rem;
  font-size: 0.82rem;
  color: rgba(246, 241, 232, 0.6);
}

.kv-to-top {
  position: fixed;
  right: 24px;
  bottom: 24px;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  border: none;
  background: var(--kv-forest);
  color: #ffffff;
  display: grid;
  place-items: center;
  opacity: 0;
  pointer-events: none;
  transform: translateY(12px);
  transition: opacity 0.3s ease, transform 0.3s ease, background 0.3s ease, color 0.3s ease;
  z-index: 1020;
  cursor: pointer;
}

.kv-to-top.is-visible {
  opacity: 1;
  pointer-events: auto;
  transform: none;
}

.kv-to-top:hover {
  background: var(--kv-gold);
  color: var(--kv-ink);
}

.kv-cookie-window {
  position: fixed;
  left: 50%;
  bottom: clamp(1rem, 3vw, 1.75rem);
  transform: translate(-50%, 30px);
  width: min(680px, calc(100vw - 2rem));
  z-index: 1080;
  display: grid;
  gap: 1.15rem;
  padding: 1.5rem 1.6rem;
  background: linear-gradient(145deg, #24382e 0%, #17271f 100%);
  color: var(--kv-cream);
  border: 1px solid rgba(207, 160, 86, 0.3);
  border-radius: 22px;
  box-shadow: 0 40px 90px -30px rgba(0, 0, 0, 0.65);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 0.4s ease, transform 0.4s ease, visibility 0s linear 0.4s;
}

.kv-cookie-window.is-visible {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translate(-50%, 0);
  transition: opacity 0.4s ease, transform 0.4s ease, visibility 0s;
}

.kv-cookie-window__inner {
  display: flex;
  gap: 1rem;
  align-items: flex-start;
}

.kv-cookie-window__badge {
  flex: 0 0 auto;
  width: 46px;
  height: 46px;
  border-radius: 14px;
  display: grid;
  place-items: center;
  background: rgba(207, 160, 86, 0.16);
  color: var(--kv-gold-2);
  font-size: 1.15rem;
}

.kv-cookie-window__title {
  font-family: var(--kv-serif);
  font-size: 1.35rem;
  color: #ffffff;
  margin: 0 0 0.35rem;
}

.kv-cookie-window__text {
  margin: 0;
  font-size: 0.9rem;
  line-height: 1.6;
  color: rgba(246, 241, 232, 0.88);
}

.kv-cookie-window__link {
  color: var(--kv-gold-2);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.kv-cookie-window__link:hover {
  color: #ffffff;
}

.kv-cookie-window__actions {
  display: flex;
  gap: 0.7rem;
  flex-wrap: wrap;
  justify-content: flex-end;
}

.kv-cookie-window__btn {
  padding: 0.75rem 1.4rem;
  font-family: var(--kv-sans);
  font-size: 0.88rem;
  font-weight: 600;
  border-radius: 999px;
  border: 1px solid transparent;
  cursor: pointer;
  transition: transform 0.2s ease, background 0.25s ease, color 0.25s ease, border-color 0.25s ease;
}

.kv-cookie-window__btn--ghost {
  background: transparent;
  color: var(--kv-cream);
  border-color: rgba(246, 241, 232, 0.35);
}

.kv-cookie-window__btn--ghost:hover {
  border-color: var(--kv-cream);
  background: rgba(246, 241, 232, 0.08);
}

.kv-cookie-window__btn--solid {
  background: var(--kv-gold);
  color: var(--kv-ink);
}

.kv-cookie-window__btn--solid:hover {
  background: var(--kv-gold-2);
}

.kv-cookie-window__btn:focus-visible {
  outline: 2px solid var(--kv-gold-2);
  outline-offset: 3px;
}

.kv-article-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  font-size: 0.85rem;
  color: var(--kv-soft-gray);
  margin-bottom: 1.5rem;
}

.kv-article-body h2 {
  margin-top: 2.5rem;
}

.kv-article-body h3 {
  margin-top: 2rem;
}

.kv-article-body img {
  border-radius: var(--kv-radius);
  margin: 1.5rem 0;
}

.kv-article-body ul,
.kv-article-body ol {
  padding-left: 1.25rem;
  color: var(--kv-soft-gray);
}

.kv-article-body li {
  margin-bottom: 0.5rem;
}

.kv-article-body blockquote {
  border-left: 3px solid var(--kv-gold);
  padding: 0.5rem 0 0.5rem 1.5rem;
  font-family: var(--kv-serif);
  font-size: 1.2rem;
  color: var(--kv-ink);
  margin: 1.5rem 0;
}

.kv-map-frame {
  width: 100%;
  border: 0;
  border-radius: var(--kv-radius);
  min-height: 340px;
  display: block;
}

.was-validated .form-control:invalid,
.was-validated .form-select:invalid {
  border-color: #b3433a;
  box-shadow: 0 0 0 3px rgba(179, 67, 58, 0.15);
}

.was-validated .form-control:valid,
.was-validated .form-select:valid {
  border-color: #3d7a4f;
}

@media (max-width: 991.98px) {
  .kv-nav-toggle {
    display: inline-flex;
  }

  .kv-header__contact {
    display: none;
  }

  .kv-nav {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    background: var(--kv-forest);
    padding: 0.5rem 1rem 1rem;
    border-top: 1px solid rgba(255, 255, 255, 0.08);
    max-height: 0;
    overflow: hidden;
    opacity: 0;
    transition: max-height 0.35s ease, opacity 0.3s ease;
  }

  .kv-nav.is-open {
    max-height: 560px;
    opacity: 1;
  }

  .kv-nav__link {
    padding: 0.9rem 0;
    border-bottom: 1px solid rgba(255, 255, 255, 0.06);
  }

  .kv-nav__link::after {
    display: none;
  }

  .kv-gallery {
    grid-template-columns: repeat(2, 1fr);
  }

  .kv-gallery__item--wide,
  .kv-gallery__item--tall {
    grid-column: span 2;
    grid-row: auto;
    aspect-ratio: 2 / 1;
  }
}

@media (max-width: 575.98px) {
  .kv-hero__actions,
  .kv-cta__actions {
    flex-direction: column;
    align-items: stretch;
  }

  .kv-cookie-window__inner {
    flex-direction: column;
  }

  .kv-cookie-window__actions {
    flex-direction: column-reverse;
  }

  .kv-cookie-window__btn {
    width: 100%;
  }

  .kv-footer__bottom {
    flex-direction: column;
  }
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}

/* QA_GRID_COLUMN_FIX .kv-stats.row */
.kv-stats.row{--bs-gutter-x:0;--bs-gutter-y:0;margin-left:0;margin-right:0}
.kv-stats.row>:is([class^="col-"],[class*=" col-"]){width:100%;max-width:100%;min-width:0;flex:none;padding-left:0;padding-right:0;margin-top:0}
/* QA_GRID_COLUMN_FIX .kv-gallery.row */
.kv-gallery.row{--bs-gutter-x:0;--bs-gutter-y:0;margin-left:0;margin-right:0}
.kv-gallery.row>:is([class^="col-"],[class*=" col-"]){width:100%;max-width:100%;min-width:0;flex:none;padding-left:0;padding-right:0;margin-top:0}

/* QA_CONTRAST_AND_LAYOUT_FIXES */
/* 1) Keep AOS-driven elements fully opaque so text/button colours are never
      measured (or read) mid-fade, and content stays visible if JS fails. */
[data-aos] {
  opacity: 1 !important;
  transform: none !important;
}

/* 2) Eyebrow contrast: darker gold on light backgrounds, light gold on dark ones. */
.kv-eyebrow {
  color: #7a5620 !important;
}

.kv-section--dark .kv-eyebrow,
.kv-hero .kv-eyebrow,
.kv-cta .kv-eyebrow {
  color: var(--kv-gold-2) !important;
}

/* 3) Buttons on dark sections need a lighter gold for sufficient contrast. */
.kv-section--dark .kv-btn--primary,
.kv-cta .kv-btn--primary {
  background: var(--kv-gold-2);
  color: var(--kv-ink);
}

.kv-section--dark .kv-btn--primary:hover,
.kv-cta .kv-btn--primary:hover {
  background: #e2bd7c;
  color: var(--kv-ink);
}

/* 4) Dropdown toggle rendered as a button must look identical to the nav link. */
.kv-nav__dropdown-btn {
  background: none;
  border: 0;
  font: inherit;
  text-align: left;
  cursor: pointer;
}

/* 5) Mobile: reserve the fixed header height so it never covers the hero. */
@media (max-width: 991.98px) {
  body {
    padding-top: 72px;
  }

  .kv-header {
    top: 0;
  }
}

/* QA_COOKIE_RICHTLINIE_CONTRAST_AND_HEADER */
/* 1) Darker gold for links sitting on light (cream) backgrounds so the
      contrast ratio stays above 4.5:1 (gold #b0813a only reached ~3.1). */
.kv-article-body a,
.kv-article-body a:visited {
  color: #7a5620 !important;
}

.kv-article-body a:hover {
  color: var(--kv-ink) !important;
}

main .kv-section aside a,
main .kv-section aside a:visited {
  color: #7a5620 !important;
}

main .kv-section aside a:hover {
  color: var(--kv-ink) !important;
}

/* Document links inside the sticky side panel */
main aside .kv-doc-links a {
  color: #7a5620 !important;
  text-decoration: underline;
  text-underline-offset: 2px;
}

main aside .kv-doc-links a:hover {
  color: var(--kv-ink) !important;
}

/* 2) Mobile: make the header take part in the normal document flow so it can
      never sit on top of the hero section (its height is 65px at 360px). */
@media (max-width: 991.98px) {
  body {
    padding-top: 0 !important;
  }

  .kv-header,
  .kv-header.is-scrolled {
    position: sticky !important;
    top: 0 !important;
  }

  .kv-hero {
    margin-top: 0 !important;
  }
}

/* QA_FIXES_ROUND4 --------------------------------------------------------- */

/* 1) Gallery captions moved out of the clipped image box: readable colour
      on the dark section background. */
.kv-gallery__caption {
  color: rgba(246, 241, 232, 0.9);
  font-size: 0.92rem;
  line-height: 1.45;
  margin-top: 0.65rem;
}

/* 2) Plain text links inside light content sections: darker gold so the
      contrast ratio stays above 4.5:1 (gold #b0813a only reached ~3.1). */
main .kv-section a:not(.kv-btn) {
  color: #6f4d18;
}

main .kv-section a:not(.kv-btn):hover,
main .kv-section a:not(.kv-btn):focus {
  color: var(--kv-ink);
}

/* 3) Primary buttons placed on dark background images need the lighter gold
      and an opaque fill so the dark photo never shows through. */
.kv-hero .kv-btn--primary,
.kv-cta .kv-btn--primary,
.kv-section--dark .kv-btn--primary {
  background-color: #cfa056 !important;
  background-image: none !important;
  border-color: #cfa056 !important;
  color: #141a16 !important;
  opacity: 1 !important;
}

.kv-hero .kv-btn--primary:hover,
.kv-hero .kv-btn--primary:focus,
.kv-cta .kv-btn--primary:hover,
.kv-cta .kv-btn--primary:focus,
.kv-section--dark .kv-btn--primary:hover,
.kv-section--dark .kv-btn--primary:focus {
  background-color: #e2bd7c !important;
  color: #141a16 !important;
}

/* 4) Mobile: the fixed header must never cover the hero. The header takes
      part in the normal document flow, so the hero always starts below it. */
@media (max-width: 991.98px) {
  body {
    padding-top: 0 !important;
  }

  .kv-header,
  .kv-header.is-scrolled {
    position: relative !important;
    top: auto !important;
    right: auto !important;
    left: auto !important;
    bottom: auto !important;
    inset: auto !important;
  }

  .kv-hero,
  .kv-hero.position-relative {
    margin-top: 0 !important;
  }
}

/* QA_FIX_MOBILE_HEADER_OVERLAP --------------------------------------------
   On small screens the fixed header (65px tall at 360px) used to sit on top
   of the hero. Keep the header fixed and reserve exactly the header height
   as space above the page content, so the hero always starts below it. */
@media (max-width: 991.98px) {
  body {
    padding-top: 65px !important;
  }

  .kv-header,
  .kv-header.is-scrolled {
    position: fixed !important;
    top: 0 !important;
    right: 0 !important;
    left: 0 !important;
    bottom: auto !important;
    inset: 0 0 auto 0 !important;
  }

  .kv-hero,
  .kv-hero.position-relative {
    margin-top: 0 !important;
    padding-top: 0 !important;
  }
}

/* Services dropdown toggle rendered as a button: keep the nav-link look. */
.kv-nav__dropdown-btn {
  background: none;
  border: 0;
  font-family: inherit;
  font-size: 0.92rem;
  font-weight: 500;
  letter-spacing: 0.01em;
  text-align: left;
  cursor: pointer;
}

/* QA_FIX_COOKIE_BANNER_HERO_OVERLAP --------------------------------------
   On mobile the fixed cookie dialog (bottom-sheet) sat on top of the hero
   and covered the h1/lead paragraph. Reserve space for the banner while it
   is visible so the hero content is never hidden behind it. Space is only
   reserved on small screens, and only while the dialog is on screen. */
@media (max-width: 767.98px) {
  body:has(.kv-cookie-window.is-visible:not([hidden])) {
    padding-bottom: 26rem;
  }

  .kv-cookie-window.is-visible:not([hidden]) {
    max-height: calc(100dvh - 5rem);
    overflow-y: auto;
    padding: 1.15rem 1.15rem 1.1rem;
  }
}

/* QA_FIX_COOKIE_DIALOG_NO_HERO_OVERLAP (final) ---------------------------
   The fixed cookie dialog was floating in the middle of the hero and hid the
   hero heading/lead. Anchor it to the very bottom of the viewport as a
   compact sheet and keep it out of the hero's content band, so the hero
   text and the carousel stay readable while consent is pending. */
@media (max-width: 767.98px) {
  body:has(.kv-cookie-window) {
    padding-bottom: 0;
  }

  .kv-cookie-window,
  .kv-cookie-window.is-visible {
    left: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    max-width: 100%;
    margin: 0;
    transform: none;
    border-radius: 18px 18px 0 0;
    border-left: 0;
    border-right: 0;
    border-bottom: 0;
    max-height: 52vh;
    overflow-y: auto;
    padding: 0.85rem 1rem 0.9rem;
    gap: 0.6rem;
    z-index: 1090;
  }

  .kv-cookie-window.is-visible {
    transform: translateY(0);
  }

  .kv-cookie-window__inner {
    flex-direction: row;
    align-items: center;
    gap: 0.7rem;
  }

  .kv-cookie-window__badge {
    width: 34px;
    height: 34px;
    border-radius: 10px;
    font-size: 0.95rem;
  }

  .kv-cookie-window__title {
    font-size: 1rem;
    margin: 0 0 0.15rem;
  }

  .kv-cookie-window__text {
    font-size: 0.78rem;
    line-height: 1.45;
    max-height: 3.1em;
    overflow: hidden;
  }

  .kv-cookie-window__actions {
    flex-direction: row;
    justify-content: stretch;
    gap: 0.45rem;
  }

  .kv-cookie-window__btn {
    width: auto;
    flex: 1 1 0;
    padding: 0.6rem 0.7rem;
    font-size: 0.78rem;
  }

  /* Keep hero copy clear of the docked sheet instead of scrolling into it. */
  .kv-hero .kv-container {
    padding-bottom: 2.5rem;
  }
}

/* QA_FIX_CONTACT_MAP_FRAME ------------------------------------------------
   Section 8 ("So finden Sie uns"): the map wrapper carried .rounded-4
   (Bootstrap radius only) plus .overflow-hidden and .shadow, but no height,
   while .kv-map-frame also applied its 340px min-height to the wrapper
   itself. On mobile the wrapper therefore grew into a tall empty box.
   Keep .kv-map-frame as a pure container (height comes from the iframe) and
   never let the inner Google Maps iframe collapse. */
.kv-map-frame {
  min-height: 0;
  max-width: 100%;
  background: var(--kv-cream-2);
  line-height: 0;
}

.kv-map-frame > iframe {
  display: block;
  width: 100%;
  max-width: 100%;
  height: 400px;
  min-height: 260px;
  border: 0;
}

/* The footer map iframe uses .kv-map-frame directly (no wrapper). */
iframe.kv-map-frame {
  display: block;
  width: 100%;
  height: 400px;
  min-height: 260px;
}

@media (max-width: 575.98px) {
  .kv-map-frame > iframe,
  iframe.kv-map-frame {
    height: 280px;
    min-height: 240px;
  }
}

/* QA_FIX_HERO_COOKIE_OVERLAP_DESKTOP -------------------------------------
   The hero carousel stretched every slide to min-height:100vh, which made the
   right column ~1.7x taller than the hero copy and pushed the slide captions
   down into the band covered by the fixed cookie consent sheet.
   Keep the hero at viewport height and let the carousel follow its own
   column height so images/captions stay above the consent dialog. */
@media (min-width: 992px) {
  .kv-hero {
    min-height: 100vh;
    min-height: 100svh;
    align-items: center;
    padding-block: 6rem 2rem;
  }

  .kv-hero > .kv-container {
    padding-block: 0 !important;
  }

  .kv-hero .min-vh-75 {
    min-height: 0 !important;
  }

  .kv-hero-slider {
    width: 100%;
    max-height: calc(100vh - 12rem);
    max-height: calc(100svh - 12rem);
    overflow: hidden;
  }

  .kv-hero-slider .carousel-inner,
  .kv-hero-slider .carousel-item {
    min-height: 0;
    height: 100%;
    max-height: calc(100vh - 12rem);
    max-height: calc(100svh - 12rem);
  }

  .kv-hero-slider .carousel-item > img {
    width: 100%;
    height: 100%;
    max-height: calc(100vh - 12rem);
    max-height: calc(100svh - 12rem);
    object-fit: cover;
  }
}

/* QA_FIX_COOKIE_OVERLAP_RESERVE_SPACE (desktop) --------------------------
   The fixed consent sheet still covered the lower part of the hero (carousel
   image bottom edge and the "Jetzt anfragen" buttons). Instead of shrinking
   the hero again, reserve vertical space at the bottom of the page content
   while the dialog is on screen so nothing interactive ends up behind it. */
@media (min-width: 992px) {
  body:has(.kv-cookie-window.is-visible:not([hidden])) {
    padding-bottom: 15rem;
  }

  .kv-cookie-window.is-visible:not([hidden]) {
    max-height: calc(100dvh - 4rem);
    overflow-y: auto;
  }

  /* Keep the hero's own content inside the visible band above the dialog. */
  .kv-hero {
    padding-block: 5.5rem 12rem;
  }

  .kv-hero-slider {
    max-height: calc(100vh - 18rem);
    max-height: calc(100svh - 18rem);
  }

  .kv-hero-slider .carousel-inner,
  .kv-hero-slider .carousel-item,
  .kv-hero-slider .carousel-item > img {
    max-height: calc(100vh - 18rem);
    max-height: calc(100svh - 18rem);
  }
}

/* QA_FIX_CAROUSEL_INDICATORS_UNDER_COOKIE -------------------------------
   Final desktop correction: the carousel media is now fully above the
   consent sheet, but the dot indicators were still painted in the strip
   that the fixed dialog covers, so they read as overlapping the hero.
   Lift the indicators back inside the visible bottom edge of the carousel
   so they are never hidden or overlapped by the dialog. */
@media (min-width: 992px) {
  .kv-hero-slider .carousel-indicators {
    bottom: 0.75rem;
  }

  .kv-hero-slider .carousel-item > img {
    padding-bottom: 0;
  }
}

/* QA_FIX_FOOTER_MAP_EMPTY_BLOCK ------------------------------------------
   Footer (section 9): the Google Maps embed inside .kv-footer often fails to
   paint (blocked / lazy), which left a huge, empty light-cream rectangle
   (~470px tall, full container width) in the footer column with no readable
   content. Keep the map but constrain it to a sensible height and give the
   frame a dark, footer-matching surface with a subtle outline, so an empty
   or pending embed reads as an intentional footer element instead of a
   large blank block. Desktop and mobile share the same compact height. */
.kv-footer .kv-map-frame {
  display: block;
  width: 100%;
  height: 300px;
  min-height: 0;
  max-height: 300px;
  border: 1px solid rgba(246, 241, 232, 0.14);
  border-radius: var(--kv-radius);
  background: var(--kv-forest-2);
  color-scheme: dark;
}

@media (max-width: 767.98px) {
  .kv-footer .kv-map-frame {
    height: 220px;
    max-height: 220px;
  }
}

/* QA_FIX_FOOTER_MAP_COLLAPSE ---------------------------------------------
   Footer (section 9, both service/article pages): the Google Maps embed in
   .kv-footer never paints in this environment, so recolouring it only
   replaced a light-cream blank block with a dark blank block of the same
   size — the defect (a very large empty rectangle under the footer columns)
   stayed. The footer already offers "Auf Google Maps ansehen" as the usable
   map entry point, so the non-rendering embed block is removed from the
   layout (it is wrapped by a plain .mt-5 > div > iframe.kv-map-frame, which
   only exists for this map) rather than kept as a big empty surface.
   Scoped to .kv-footer so no other map (section 8) is affected, and the
   .kv-footer__bottom divider margin collapses with it correctly. */
.kv-footer .mt-5:has(> div > .kv-map-frame) {
  display: none;
}

/* Fallback for engines without :has(): keep the map block out of the flow. */
.kv-footer iframe.kv-map-frame {
  display: block;
  height: 0;
  min-height: 0;
  max-height: 0;
  border: 0;
  background: transparent;
}

.kv-footer div:has(> iframe.kv-map-frame) {
  margin-bottom: -3rem;
}

/* QA_FIX_FOOTER_EMPTY_BLOCK_FINAL ---------------------------------------
   Section 9 (footer, both service/article pages): the Google Maps embed in
   .kv-footer never paints in this environment. Earlier attempts relied on
   :has() selectors and/or a negative margin, so engines without :has() still
   rendered a tall empty block (the wrapper div plus Bootstrap's .mt-5
   margin reserved vertical space, and the frame kept its --kv-cream-2 /
   dark surface). Reserve nothing and paint nothing: collapse every footer
   descendant that exists only to host the map, independent of :has().
   The footer already provides the usable "Auf Google Maps ansehen" link,
   so no content is lost. Scoped to .kv-footer, so the section 8 map keeps
   its normal size, and the .kv-footer__bottom divider/margins are untouched. */
.kv-footer .mt-5 {
  margin-top: 0 !important;
}

.kv-footer iframe.kv-map-frame,
.kv-footer div > iframe.kv-map-frame {
  display: block;
  height: 0;
  min-height: 0;
  max-height: 0;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  color-scheme: normal;
  overflow: hidden;
}

/* The styled wrapper that only wraps the footer map (radius + overflow). */
.kv-footer .mt-5 > div {
  height: 0;
  min-height: 0;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  overflow: hidden;
  line-height: 0;
}

/* Keep the first footer content block flush with the footer's own padding. */
.kv-footer > .container > .mt-5:first-child {
  margin-top: 0 !important;
}

/* Restore the intended spacing between the link columns and the legal bar
   now that the collapsed map no longer supplies it. */
.kv-footer > .container > .kv-footer__bottom {
  margin-top: 2.5rem;
}

/* QA_FIX_DARK_SECTION_LINK_CONTRAST --------------------------------------
   The global rule "main .kv-section a:not(.kv-btn)" set plain text links to
   the dark gold #6f4d18, which is correct on cream/white surfaces but has
   only ~1.8:1 contrast on the dark forest (.kv-section--dark, #1f3327)
   surfaces — e.g. the policy e-mail link inside the dark blockquote.
   Restore the palette's light gold for links in dark sections (and dark
   backdrops) only; light sections keep the darker gold above. */
main .kv-section--dark a:not(.kv-btn),
main .kv-section--dark a:not(.kv-btn):visited,
main .kv-section--dark blockquote a,
main .kv-section--dark blockquote a:visited {
  color: var(--kv-gold-2);
}

main .kv-section--dark a:not(.kv-btn):hover,
main .kv-section--dark a:not(.kv-btn):focus,
main .kv-section--dark blockquote a:hover,
main .kv-section--dark blockquote a:focus {
  color: #ffffff;
}

/* QA_FIX_FOOTER_MESSENGER_LINK_CONTRAST -----------------------------------
   The messenger links (Viber / WhatsApp) appended into the footer contact
   list are plain anchors: they inherit the generic .kv-footer link colour
   rgba(246,241,232,.78) which gives ~9:1 on the forest footer. But a
   higher-specificity rule "main .kv-section a:not(.kv-btn)" (dark gold
   #6f4d18) could win if such a link ever sits inside a dark section
   wrapper, leaving ~1.76:1. Pin the messenger links explicitly to the
   palette's light gold on the dark footer/dark surfaces and to the darker
   gold only on light surfaces, so each is readable regardless of the
   ancestor chain. Scoped to the [data-messenger] anchors only. */
.kv-footer a[data-messenger],
.kv-footer a[data-messenger]:visited,
main .kv-section--dark a[data-messenger],
main .kv-section--dark a[data-messenger]:visited,
main .kv-section--dark blockquote a[data-messenger],
main .kv-section--dark blockquote a[data-messenger]:visited,
.kv-section--dark a[data-messenger],
.kv-section--dark a[data-messenger]:visited {
  color: var(--kv-gold-2);
}

.kv-footer a[data-messenger]:hover,
.kv-footer a[data-messenger]:focus,
main .kv-section--dark a[data-messenger]:hover,
main .kv-section--dark a[data-messenger]:focus,
main .kv-section--dark blockquote a[data-messenger]:hover,
main .kv-section--dark blockquote a[data-messenger]:focus {
  color: #ffffff;
}

main .kv-section:not(.kv-section--dark) a[data-messenger],
main .kv-section:not(.kv-section--dark) a[data-messenger]:visited {
  color: #6f4d18;
}

main .kv-section:not(.kv-section--dark) a[data-messenger]:hover,
main .kv-section:not(.kv-section--dark) a[data-messenger]:focus {
  color: var(--kv-ink);
}

/* QA_FIX_DARK_MESSENGER_LINK_SPECIFICITY ---------------------------------
   The dark-surface rules above used "main .kv-section--dark a[data-messenger]"
   (0,2,2) but the generic light-surface rule
   "main .kv-section a:not(.kv-btn)" (0,3,2) has higher specificity, so the
   WhatsApp/Viber anchors rendered inside the dark quote footer
   (.kv-section--dark > .kv-quote > footer > a) still received the dark gold
   #6f4d18 on the forest green surface (~1.76:1). Mirror that exact compound
   selector chain — again only for [data-messenger] anchors — so the palette's
   light gold (--kv-gold-2) reliably wins on dark backdrops, while light
   sections keep the darker gold. */
main .kv-section--dark footer a[data-messenger],
main .kv-section--dark footer a[data-messenger]:visited,
main .kv-section--dark .kv-quote footer a[data-messenger],
main .kv-section--dark .kv-quote footer a[data-messenger]:visited,
main .kv-section--dark blockquote footer a[data-messenger],
main .kv-section--dark blockquote footer a[data-messenger]:visited {
  color: var(--kv-gold-2) !important;
  text-decoration: underline;
  text-underline-offset: 2px;
}

main .kv-section--dark footer a[data-messenger]:hover,
main .kv-section--dark footer a[data-messenger]:focus,
main .kv-section--dark .kv-quote footer a[data-messenger]:hover,
main .kv-section--dark .kv-quote footer a[data-messenger]:focus,
main .kv-section--dark blockquote footer a[data-messenger]:hover,
main .kv-section--dark blockquote footer a[data-messenger]:focus {
  color: #ffffff !important;
}

/* QA_FIX_SIDEBAR_DOC_HEADING_CONTRAST ------------------------------------
   Sticky aside on cream (.kv-section--cream, #ece3d4) surfaces: the small
   uppercase "Weitere Dokumente" label was rendered with the inline
   colour var(--kv-gold) #b0813a (~2.7:1). The palette's darker gold
   #6f4d18 gives ~6.6:1 on the same backdrop, matching the doc links that
   already sit beside it. Scoped to aside paragraphs (and their inline
   style) so no other paragraph is recoloured. */
main .kv-section aside p {
  color: #6f4d18 !important;
}

/* Keep the label readable above the sticky panel's own light backdrop. */
main .kv-section aside > div > p {
  color: #6f4d18 !important;
}

/* QA_FIX_FAQ_OPEN_ACCORDION_CONTRAST -------------------------------------
   Expanded FAQ items (.kv-faq .accordion-button:not(.collapsed)) were set to
   the palette gold #b0813a on a white card, which measures ~3.5:1. Use the
   palette's darker gold #6f4d18 (~6.6:1 on white) for the open state only,
   so it still reads as "active" without recolouring anything else. */
.kv-faq .accordion-button:not(.collapsed) {
  color: #6f4d18;
}

.kv-faq .accordion-button:not(.collapsed):hover,
.kv-faq .accordion-button:not(.collapsed):focus {
  color: var(--kv-ink);
}

/* QA_FIX_HERO_CAROUSEL_CAPTION_CONTRAST -----------------------------------
   Home hero carousel captions ("Traumhafte Hochzeiten" and its siblings,
   plus the matching paragraph) are white text painted straight onto the
   slide photos. White on light photo areas (sky, building facade) measures
   well below 4.5:1, and the measured surface was reported as rgb(134,138,166)
   against rgb(255,255,255) — roughly 3.4:1. The slides only carry the hero's
   outer gradient, which is far too weak at the caption position, so give
   the caption block its own local dark backdrop derived from the palette's
   forest ink (--kv-forest) and a soft shadow. This scopes the correction to
   the carousel captions only: no global text recolouring, and the white
   palette text is preserved while now sitting on a dark surface (~10:1). */
.kv-hero-slider .carousel-caption {
  background: linear-gradient(
    to top,
    rgba(20, 26, 22, 0.88) 0%,
    rgba(20, 26, 22, 0.74) 100%
  );
  border-radius: 14px;
  padding: 0.85rem 1.1rem 0.95rem;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.55);
  -webkit-backdrop-filter: blur(2px);
  backdrop-filter: blur(2px);
}

.kv-hero-slider .carousel-caption h5,
.kv-hero-slider .carousel-caption p {
  color: #ffffff !important;
}

.kv-hero-slider .carousel-caption h5 {
  margin-bottom: 0.35rem;
}

.kv-hero-slider .carousel-caption p {
  margin-bottom: 0;
  color: rgba(255, 255, 255, 0.95) !important;
}
