/**
 * Kisvirág Nyaraló – Joomla 6 site template
 * Colours come from the logo: teal #55ada7, navy #031f3b, coral #cb595b, gold #debd5f.
 */

@layer reset, base, layout, components, utilities;

/* Fonts (self-hosted, SIL OFL – no request to Google) ------------------- */
@font-face { font-family: "Comfortaa"; font-style: normal; font-weight: 300 700; font-display: swap;
  src: url("../fonts/comfortaa-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Comfortaa"; font-style: normal; font-weight: 300 700; font-display: swap;
  src: url("../fonts/comfortaa-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: "Nunito"; font-style: normal; font-weight: 200 1000; font-display: swap;
  src: url("../fonts/nunito-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Nunito"; font-style: normal; font-weight: 200 1000; font-display: swap;
  src: url("../fonts/nunito-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: "Nunito"; font-style: italic; font-weight: 200 1000; font-display: swap;
  src: url("../fonts/nunito-italic-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Nunito"; font-style: italic; font-weight: 200 1000; font-display: swap;
  src: url("../fonts/nunito-italic-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }

/* Design tokens ---------------------------------------------------------- */
:root {
  --kv-teal: #55ada7;
  --kv-teal-strong: #2f7f79;
  --kv-navy: #031f3b;
  --kv-coral: #cb595b;
  --kv-gold: #debd5f;
  --kv-mint: #b5d5d0;

  --kv-bg: #fbfaf6;
  --kv-bg-soft: #eef6f4;
  --kv-surface: #ffffff;
  --kv-ink: #0d2236;
  --kv-ink-soft: #4a5d6e;
  --kv-line: #dbe6e3;
  --kv-accent: var(--kv-teal-strong);
  --kv-accent-ink: #ffffff;
  --kv-link: #22706b;
  --kv-logo-line: var(--kv-navy);
  --kv-header-bg: color-mix(in srgb, var(--kv-bg) 82%, transparent);
  --kv-shadow: 0 1px 2px rgb(3 31 59 / .06), 0 8px 24px -8px rgb(3 31 59 / .14);
  --kv-shadow-lg: 0 24px 60px -20px rgb(3 31 59 / .35);

  --kv-radius: 1.1rem;
  --kv-radius-sm: .65rem;
  --kv-font: "Nunito", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --kv-font-display: "Comfortaa", "Nunito", system-ui, sans-serif;
  --kv-max: 76rem;
  --kv-gutter: clamp(1rem, 4vw, 2rem);
  --kv-header-h: 5.75rem;
  color-scheme: light;
}



/* Reset ------------------------------------------------------------------ */
@layer reset {
  *, *::before, *::after { box-sizing: border-box; }
  html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-padding-top: calc(var(--kv-header-h) + 1rem); overflow-x: clip; }
  body, h1, h2, h3, h4, p, figure, blockquote, dl, dd, ul, ol { margin: 0; }
  img, svg, video, iframe { display: block; max-width: 100%; }
  img { height: auto; }
  input, button, select, textarea { font: inherit; color: inherit; }
  @media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } }
}

/* Base ------------------------------------------------------------------- */
@layer base {
  body {
    background: var(--kv-bg);
    color: var(--kv-ink);
    font-family: var(--kv-font);
    font-size: clamp(1rem, .96rem + .2vw, 1.0875rem);
    line-height: 1.65;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    -webkit-font-smoothing: antialiased;
  }
  h1, h2, h3, h4 { font-family: var(--kv-font-display); line-height: 1.2; letter-spacing: -.01em; text-wrap: balance; color: var(--kv-ink); }
  h1 { font-size: clamp(2rem, 1.4rem + 2.6vw, 3.25rem); font-weight: 700; }
  h2 { font-size: clamp(1.5rem, 1.2rem + 1.3vw, 2.2rem); font-weight: 700; }
  h3 { font-size: clamp(1.15rem, 1.05rem + .45vw, 1.35rem); font-weight: 700; }
  p, ul, ol, dl { text-wrap: pretty; }
  a { color: var(--kv-link); text-underline-offset: .18em; text-decoration-thickness: .08em; }
  a:hover { text-decoration-thickness: .14em; }
  :focus-visible { outline: 3px solid var(--kv-gold); outline-offset: 3px; border-radius: 4px; }
  strong { font-weight: 800; }
  small { font-size: .85em; color: var(--kv-ink-soft); }
  hr { border: 0; border-top: 1px solid var(--kv-line); margin: 2.5rem 0; }
  ::selection { background: color-mix(in srgb, var(--kv-teal) 35%, transparent); }
}

/* Layout ----------------------------------------------------------------- */
@layer layout {
  .kv-container { width: min(100% - 2 * var(--kv-gutter), var(--kv-max)); margin-inline: auto; }
  .kv-main { flex: 1; outline: none; }
  .kv-layout { padding-block: 0 4rem; }
  .is-home .kv-layout { padding-top: 0; }
  .kv-layout__crumbs { padding-top: 1rem; }

  .kv-skip { position: absolute; left: 1rem; top: -4rem; z-index: 100; background: var(--kv-navy); color: #fff; padding: .6rem 1rem; border-radius: var(--kv-radius-sm); }
  .kv-skip:focus { top: 1rem; }

  /* Header */
  .kv-header {
    position: sticky; top: 0; z-index: 50;
    background: var(--kv-header-bg);
    backdrop-filter: saturate(1.4) blur(14px);
    -webkit-backdrop-filter: saturate(1.4) blur(14px);
    border-bottom: 1px solid transparent;
    transition: border-color .3s, box-shadow .3s;
  }
  .kv-header[data-scrolled] { border-color: var(--kv-line); box-shadow: 0 6px 24px -18px rgb(3 31 59 / .5); }
  .kv-header__inner { display: flex; align-items: center; gap: 1rem; min-height: var(--kv-header-h); }
  .kv-header__actions { display: flex; align-items: center; gap: .5rem; margin-left: auto; }

  .kv-brand { display: inline-flex; align-items: center; gap: .65rem; text-decoration: none; color: var(--kv-logo-line); flex-shrink: 0; }
  .kv-brand__flower { width: 5rem; height: auto; color: var(--kv-logo-line); transition: transform .6s cubic-bezier(.2, .8, .2, 1); }
  .kv-brand:hover .kv-brand__flower { transform: rotate(-12deg) scale(1.04); }
  .kv-brand__text { display: flex; flex-direction: column; line-height: 1; font-family: var(--kv-font-display); }
  .kv-brand__name { font-size: 1.9rem; font-weight: 700; letter-spacing: -.01em; color: var(--kv-ink); }
  .kv-brand__sub { font-size: 1.15rem; font-weight: 600; color: var(--kv-teal); margin-top: .25rem; padding-left: 2.1rem; }

  /* Navigation (mod_menu) */
  .kv-nav ul { list-style: none; padding: 0; margin: 0; }
  .kv-nav .mod-menu { display: flex; gap: .15rem; }
  .kv-nav a, .kv-nav .nav-header { display: block; padding: .5rem .8rem; border-radius: 999px; color: var(--kv-ink); text-decoration: none; font-weight: 700; font-size: .98rem; white-space: nowrap; transition: background .2s, color .2s; }
  .kv-nav a:hover { background: var(--kv-bg-soft); color: var(--kv-accent); }
  .kv-nav .current > a, .kv-nav .active > a { background: color-mix(in srgb, var(--kv-teal) 18%, transparent); color: var(--kv-accent); }

  @media (min-width: 72rem) {
    .kv-nav { margin-left: auto; }
    .kv-header__actions { margin-left: 0; }
  }
  @media (max-width: 71.99rem) {
    .kv-nav {
      position: fixed; inset: var(--kv-header-h) 0 auto 0;
      background: var(--kv-surface); border-bottom: 1px solid var(--kv-line); box-shadow: var(--kv-shadow-lg);
      padding: 1rem var(--kv-gutter) 1.5rem; max-height: calc(100dvh - var(--kv-header-h)); overflow-y: auto;
      visibility: hidden; opacity: 0; transform: translateY(-.5rem); transition: opacity .2s, transform .2s, visibility 0s .2s;
    }
    .kv-nav[data-open] { visibility: visible; opacity: 1; transform: none; transition: opacity .2s, transform .2s; }
    .kv-nav .mod-menu { flex-direction: column; }
    .kv-nav a { font-size: 1.1rem; padding: .8rem 1rem; border-radius: var(--kv-radius-sm); }
  }
  @media (max-width: 30rem) {
    .kv-brand__flower { width: 3.6rem; }
    .kv-brand__name { font-size: 1.5rem; }
    .kv-brand__sub { font-size: 1rem; padding-left: 1.6rem; }
  }

  /* Footer */
  .kv-footer { background: var(--kv-navy); color: #c9d8e0; padding-top: 3.5rem; margin-top: auto; }
  .kv-footer a { color: #fff; }
  .kv-footer .kv-brand { color: #e8f1f0; }
  .kv-footer .kv-brand__name { color: #fff; }
  .kv-footer__grid { display: grid; gap: 2.5rem; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); padding-bottom: 2.5rem; }
  .kv-footer__about p { margin-top: 1rem; max-width: 34ch; }
  .kv-footer__title, .kv-footer .kv-module__title { font-size: 1.05rem; color: #fff; margin-bottom: 1rem; }
  .kv-footer ul { list-style: none; padding: 0; display: grid; gap: .5rem; }
  .kv-footer .mod-menu a { text-decoration: none; }
  .kv-footer .mod-menu a:hover { text-decoration: underline; }
  .kv-footer__bottom { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1rem; border-top: 1px solid rgb(255 255 255 / .12); padding-block: 1.25rem; font-size: .9rem; }
  .kv-totop { text-decoration: none; }
}

/* Components ------------------------------------------------------------- */
@layer components {
  /* Icons in the template chrome */
  .kv-icon { width: 1.2em; height: 1.2em; flex-shrink: 0; }
  .kv-iconbtn { display: inline-grid; place-items: center; width: 2.75rem; height: 2.75rem; border-radius: 999px; border: 1px solid var(--kv-line); background: var(--kv-surface); color: var(--kv-ink); cursor: pointer; transition: background .2s, transform .2s; }
  .kv-iconbtn:hover { background: var(--kv-bg-soft); }
  .kv-burger { position: relative; width: 1.2rem; height: .85rem; }
  .kv-burger::before, .kv-burger::after, .kv-burger span { content: ""; position: absolute; left: 0; right: 0; height: 2px; border-radius: 2px; background: currentColor; transition: transform .25s, opacity .2s, top .25s; }
  .kv-burger::before { top: 0; }
  .kv-burger span { top: calc(50% - 1px); }
  .kv-burger::after { top: calc(100% - 2px); }
  [aria-expanded="true"] .kv-burger::before { top: calc(50% - 1px); transform: rotate(45deg); }
  [aria-expanded="true"] .kv-burger::after { top: calc(50% - 1px); transform: rotate(-45deg); }
  [aria-expanded="true"] .kv-burger span { opacity: 0; }

  .kv-iconlist { list-style: none; padding: 0; display: grid; gap: .6rem; }
  .kv-iconlist li { display: flex; gap: .6rem; align-items: flex-start; }
  .kv-iconlist .kv-icon { margin-top: .2em; color: var(--kv-teal); }

  /* Buttons */
  .kv-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
    padding: .8rem 1.4rem; border-radius: 999px; border: 2px solid var(--kv-accent);
    background: var(--kv-accent); color: var(--kv-accent-ink); font-weight: 800; text-decoration: none; line-height: 1.2;
    cursor: pointer; transition: transform .2s, background .2s, box-shadow .2s;
  }
  .kv-btn:hover { transform: translateY(-1px); box-shadow: 0 10px 22px -12px var(--kv-accent); text-decoration: none; }
  .kv-btn--ghost { background: transparent; color: var(--kv-accent); }
  .kv-btn--light { background: #fff; border-color: #fff; color: var(--kv-navy); }
  .kv-btn--outline-light { background: transparent; border-color: rgb(255 255 255 / .8); color: #fff; }
  .kv-btn--coral { background: var(--kv-coral); border-color: var(--kv-coral); color: #fff; }
  .kv-btn--small { padding: .5rem 1rem; font-size: .92rem; }
  .kv-actions { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: 1.25rem; }

  /* Breadcrumbs */
  .mod-breadcrumbs { display: flex; flex-wrap: wrap; gap: .25rem; list-style: none; padding: 0; margin: 0; font-size: .9rem; color: var(--kv-ink-soft); }
  .mod-breadcrumbs li + li::before { content: "›"; margin-right: .35rem; opacity: .6; }
  .mod-breadcrumbs a { color: var(--kv-ink-soft); }
  .mod-breadcrumbs .float-start, .mod-breadcrumbs__here { display: none; }

  /* Home hero */
  .kv-hero { position: relative; isolation: isolate; min-height: min(86vh, 48rem); display: grid; align-items: end; color: #fff; overflow: hidden; }
  .kv-hero__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -2; animation: kv-zoom 18s ease-out both; }
  .kv-hero::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(180deg, rgb(3 31 59 / .15) 0%, rgb(3 31 59 / .05) 35%, rgb(3 31 59 / .78) 100%); }
  .kv-hero__inner { padding-block: 7rem 3.5rem; }
  .kv-hero h1 { color: #fff; max-width: 18ch; text-shadow: 0 2px 30px rgb(0 0 0 / .35); }
  .kv-hero__lead { font-size: clamp(1.05rem, 1rem + .5vw, 1.35rem); max-width: 46ch; margin-top: 1rem; text-shadow: 0 1px 12px rgb(0 0 0 / .4); }
  .kv-hero__eyebrow { display: inline-flex; align-items: center; gap: .5rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; font-size: .8rem; background: rgb(255 255 255 / .16); backdrop-filter: blur(6px); padding: .4rem .85rem; border-radius: 999px; margin-bottom: 1.1rem; }
  .kv-hero .kv-chips { margin-top: 1.5rem; }
  .kv-hero .kv-chip { background: rgb(255 255 255 / .14); border-color: rgb(255 255 255 / .35); color: #fff; backdrop-filter: blur(6px); }
  @keyframes kv-zoom { from { transform: scale(1.08); } to { transform: scale(1); } }

  /* Page header (article banner) */
  .kv-pagehead { padding-block: 2.5rem 1.5rem; }
  .kv-pagehead--banner {
    position: relative; isolation: isolate; color: #fff; display: grid; align-items: end;
    min-height: clamp(15rem, 38vw, 26rem); margin-inline: calc(50% - 50vw); padding: 0; overflow: hidden; margin-bottom: 2.5rem;
  }
  .kv-pagehead__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -2; }
  .page-nyaralo .kv-pagehead__img { object-position: center 46%; }
  .kv-pagehead--banner::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(180deg, transparent 30%, rgb(3 31 59 / .75)); }
  .kv-pagehead--banner .kv-pagehead__text { width: min(100% - 2 * var(--kv-gutter), var(--kv-max)); margin-inline: auto; padding-block: 2.5rem; }
  .kv-pagehead--banner h1 { color: #fff; text-shadow: 0 2px 24px rgb(0 0 0 / .35); }
  .kv-pagehead__lead { font-size: 1.15rem; margin-top: .5rem; max-width: 60ch; }
  .kv-pagehead:not(.kv-pagehead--banner) .kv-pagehead__lead { color: var(--kv-ink-soft); }
  .kv-layout__crumbs + .kv-article .kv-pagehead--banner, .kv-layout__crumbs ~ * .kv-pagehead--banner { margin-top: 1rem; }

  /* Article body typography */
  .kv-article__body > * + * { margin-top: 1.1rem; }
  .kv-article__body > h2 { margin-top: 3rem; }
  .kv-article__body > h3 { margin-top: 2rem; }
  .kv-article__body ul:not([class]), .kv-article__body ol:not([class]) { padding-left: 1.3rem; }
  .kv-article__body li + li { margin-top: .3rem; }
  .kv-lead { font-size: clamp(1.1rem, 1.02rem + .4vw, 1.3rem); color: var(--kv-ink-soft); max-width: 62ch; }

  /* Sections */
  .kv-section { margin-top: clamp(3rem, 6vw, 5.5rem); }
  .kv-section:first-child { margin-top: 2.5rem; }
  .kv-section--band { background: var(--kv-bg-soft); margin-inline: calc(50% - 50vw); padding: clamp(3rem, 6vw, 5rem) max(var(--kv-gutter), calc(50vw - var(--kv-max) / 2)); }
  .kv-section__head { max-width: 46rem; margin-bottom: 2rem; }
  .kv-section__head p { color: var(--kv-ink-soft); margin-top: .75rem; }
  .kv-section__head--center { margin-inline: auto; text-align: center; }
  .kv-eyebrow { display: inline-block; font-family: var(--kv-font); font-weight: 800; font-size: .8rem; letter-spacing: .12em; text-transform: uppercase; color: var(--kv-coral); margin-bottom: .6rem; }
  .kv-section > * + * { margin-top: 1rem; }
  .kv-section > .kv-section__head + * { margin-top: 0; }

  /* Grids */
  .kv-grid { display: grid; gap: clamp(1rem, 2vw, 1.5rem); grid-template-columns: repeat(auto-fill, minmax(min(100%, 17rem), 1fr)); }
  .kv-grid--wide { grid-template-columns: repeat(auto-fill, minmax(min(100%, 22rem), 1fr)); }
  .kv-grid--3 { grid-template-columns: 1fr; }
  @media (min-width: 40rem) { .kv-grid--3 { grid-template-columns: repeat(2, 1fr); } }
  @media (min-width: 60rem) { .kv-grid--3 { grid-template-columns: repeat(3, 1fr); } }
  .kv-grid--narrow { grid-template-columns: repeat(auto-fill, minmax(min(100%, 13rem), 1fr)); }

  /* Split: image + text */
  .kv-split { display: grid; gap: clamp(1.5rem, 4vw, 3.5rem); align-items: center; }
  @media (min-width: 56rem) { .kv-split { grid-template-columns: 1.05fr 1fr; } .kv-split--reverse > :first-child { order: 2; } }
  .kv-split__media { position: relative; }
  .kv-split__media img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: var(--kv-radius); box-shadow: var(--kv-shadow-lg); }
  .kv-split__media--stack img + img { position: absolute; width: 46%; right: -4%; bottom: -10%; border: 6px solid var(--kv-bg); aspect-ratio: 1; }
  .kv-split__text > * + * { margin-top: 1rem; }

  /* Cards */
  .kv-card { background: var(--kv-surface); border: 1px solid var(--kv-line); border-radius: var(--kv-radius); box-shadow: var(--kv-shadow); overflow: hidden; display: flex; flex-direction: column; }
  .kv-card__img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; background: var(--kv-bg-soft); }
  .kv-card__body { padding: 1.25rem 1.35rem 1.4rem; display: flex; flex-direction: column; gap: .6rem; flex: 1; }
  .kv-card__body > .kv-actions { margin-top: auto; padding-top: .5rem; }
  .kv-card h3 { font-size: 1.2rem; }

  /* Features */
  .kv-feature { display: flex; gap: 1rem; align-items: flex-start; padding: 1.25rem; background: var(--kv-surface); border: 1px solid var(--kv-line); border-radius: var(--kv-radius); }
  .kv-feature h3 { font-size: 1.05rem; font-family: var(--kv-font); font-weight: 800; letter-spacing: 0; }
  .kv-feature p { color: var(--kv-ink-soft); font-size: .95rem; margin-top: .2rem; }

  /* Icon set used in content (CSS masks so editors only need a class name) */
  .kv-ico { --ico: none; display: inline-grid; place-items: center; width: 3rem; height: 3rem; flex-shrink: 0; border-radius: 1rem; background: color-mix(in srgb, var(--kv-teal) 16%, transparent); }
  .kv-ico::before { content: ""; width: 1.55rem; height: 1.55rem; background: var(--kv-accent); -webkit-mask: var(--ico) center / contain no-repeat; mask: var(--ico) center / contain no-repeat; }
  .kv-ico--coral { background: color-mix(in srgb, var(--kv-coral) 15%, transparent); }
  .kv-ico--coral::before { background: var(--kv-coral); }
  .kv-ico--gold { background: color-mix(in srgb, var(--kv-gold) 22%, transparent); }
  .kv-ico--gold::before { background: #a9842a; }
  .kv-ico--water { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M2 7c2.5-2 4.5-2 7 0s4.5 2 7 0 4.5-2 6 0M2 12c2.5-2 4.5-2 7 0s4.5 2 7 0 4.5-2 6 0M2 17c2.5-2 4.5-2 7 0s4.5 2 7 0 4.5-2 6 0'/%3E%3C/svg%3E"); }
  .kv-ico--boat { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 14h18l-2.5 5h-13zM12 3v11M12 4l6 8h-6M2 21c2-1 3-1 5 0s3 1 5 0 3-1 5 0 3 1 5 0'/%3E%3C/svg%3E"); }
  .kv-ico--grill { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 9h16a8 8 0 0 1-16 0zM8 17l-2 4M16 17l2 4M9 5c0-1 1-1 1-2M13 5c0-1 1-1 1-2'/%3E%3C/svg%3E"); }
  .kv-ico--snow { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M12 2v20M4 7l16 10M20 7 4 17M9 3l3 3 3-3M9 21l3-3 3 3'/%3E%3C/svg%3E"); }
  .kv-ico--parking { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='18' height='18' rx='4'/%3E%3Cpath d='M9 17V7h4a3 3 0 0 1 0 6H9'/%3E%3C/svg%3E"); }
  .kv-ico--card { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Crect x='2' y='5' width='20' height='14' rx='3'/%3E%3Cpath d='M2 10h20M6 15h4'/%3E%3C/svg%3E"); }
  .kv-ico--bed { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 18V6M3 14h18v4M21 14v-2a3 3 0 0 0-3-3h-7v5M7 11.5a1.5 1.5 0 1 0 0-.01'/%3E%3C/svg%3E"); }
  .kv-ico--sofa { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 11V8a3 3 0 0 1 3-3h8a3 3 0 0 1 3 3v3M3 13a2 2 0 0 1 4 0v2h10v-2a2 2 0 0 1 4 0v4H3zM5 17v2M19 17v2'/%3E%3C/svg%3E"); }
  .kv-ico--kitchen { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 10h16v3a7 7 0 0 1-7 7h-2a7 7 0 0 1-7-7zM2 10h2M20 10h2M9 3v3M15 3v3M12 2v4'/%3E%3C/svg%3E"); }
  .kv-ico--tv { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='6' width='20' height='13' rx='2'/%3E%3Cpath d='m8 2 4 4 4-4'/%3E%3C/svg%3E"); }
  .kv-ico--bath { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12h18v2a6 6 0 0 1-6 6H9a6 6 0 0 1-6-6zM6 12V5a2 2 0 0 1 4 0M7 20l-1 2M17 20l1 2'/%3E%3C/svg%3E"); }
  .kv-ico--terrace { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3 3 8h18zM12 8v9M7 21v-4h10v4M4 13h4v4M20 13h-4v4'/%3E%3C/svg%3E"); }
  .kv-ico--leaf { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 21c0-9 5-15 16-17-1 11-7 16-16 17zM5 21 13 12'/%3E%3C/svg%3E"); }
  .kv-ico--wifi-off { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M2 8.5a15 15 0 0 1 20 0M5 12a10 10 0 0 1 14 0M8.5 15.5a5 5 0 0 1 7 0M12 19h.01M3 3l18 18'/%3E%3C/svg%3E"); }
  .kv-ico--fish { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 12s4-6 11-6c4 0 7 3 8 6-1 3-4 6-8 6-7 0-11-6-11-6zM2 12l-1-4M2 12l-1 4M16 11h.01'/%3E%3C/svg%3E"); }
  .kv-ico--sun { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4'/%3E%3C/svg%3E"); }
  .kv-ico--pin { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 21s-7-5.5-7-11a7 7 0 0 1 14 0c0 5.5-7 11-7 11z'/%3E%3Ccircle cx='12' cy='10' r='2.5'/%3E%3C/svg%3E"); }
  .kv-ico--phone { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 4h4l2 5-2.5 1.5a11 11 0 0 0 5 5L15 13l5 2v4a2 2 0 0 1-2 2A16 16 0 0 1 3 6a2 2 0 0 1 2-2'/%3E%3C/svg%3E"); }
  .kv-ico--clock { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E"); }
  .kv-ico--key { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='8' cy='15' r='4'/%3E%3Cpath d='m11 12 9-9M17 6l3 3M14 9l2 2'/%3E%3C/svg%3E"); }
  .kv-ico--users { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='8' r='3.5'/%3E%3Cpath d='M2 20a7 7 0 0 1 14 0M16 4.5a3.5 3.5 0 0 1 0 7M18 13.5a7 7 0 0 1 4 6.5'/%3E%3C/svg%3E"); }
  .kv-ico--pill { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='8' width='20' height='8' rx='4' transform='rotate(-45 12 12)'/%3E%3Cpath d='m9 9 6 6'/%3E%3C/svg%3E"); }
  .kv-ico--doctor { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 3v6a4 4 0 0 0 8 0V3M10 13v2a5 5 0 0 0 10 0v-2'/%3E%3Ccircle cx='20' cy='11' r='2'/%3E%3C/svg%3E"); }
  .kv-ico--tooth { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 3c2 0 3 1 5 1s3-1 5-1c3 0 4 3 3 6-1 2-1 4-2 8-.5 2-1 4-2 4s-1.5-2-2-5c-.3-1.5-1.7-1.5-2 0-.5 3-1 5-2 5s-1.5-2-2-4c-1-4-1-6-2-8-1-3 0-6 3-6z'/%3E%3C/svg%3E"); }
  .kv-ico--baby { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M9 10h.01M15 10h.01M9.5 15a3.5 3.5 0 0 0 5 0M12 3c-1 1.5 0 3 1.5 3'/%3E%3C/svg%3E"); }
  .kv-ico--heart { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20s-8-5-8-11a4.5 4.5 0 0 1 8-2.8A4.5 4.5 0 0 1 20 9c0 6-8 11-8 11z'/%3E%3C/svg%3E"); }
  .kv-ico--alert { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3 2 20h20zM12 10v4M12 17h.01'/%3E%3C/svg%3E"); }
  .kv-ico--cart { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 3h3l2.5 12h11L21 7H6M9 20h.01M18 20h.01'/%3E%3C/svg%3E"); }
  .kv-ico--beer { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 8h11v12a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1zM16 10h2a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2h-2M5 8a3 3 0 0 1 3-4 3 3 0 0 1 5 0 2.5 2.5 0 0 1 3 4M9 12v5M12 12v5'/%3E%3C/svg%3E"); }
  .kv-ico--bread { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a8 6 0 0 1 16 0v7a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zM9 9l-1 3M13 8l-1 3M17 9l-1 3'/%3E%3C/svg%3E"); }
  .kv-ico--meat { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 4c4 0 7 3 6 7-1 5-7 9-11 9-3 0-5-2-5-5 0-4 5-11 10-11zM6 17l-3 3M3 17v3h3'/%3E%3Ccircle cx='14' cy='10' r='2'/%3E%3C/svg%3E"); }
  .kv-ico--carrot { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 21s9-3 13-7a3.5 3.5 0 0 0-5-5c-4 4-8 12-8 12zM15 9l3-3M14 6c0-2 1-3 3-4M18 10c2 0 3-1 4-3'/%3E%3C/svg%3E"); }
  .kv-ico--tools { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.5 6.5a4 4 0 0 0 5 5L21 13l-8 8-3-3 6.5-6.5M3 21l6-6M14 4l-2-2-3 3 2 2'/%3E%3C/svg%3E"); }
  .kv-ico--flower { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2'%3E%3Ccircle cx='12' cy='9' r='2.5'/%3E%3Ccircle cx='12' cy='4.5' r='2.5'/%3E%3Ccircle cx='16.5' cy='9' r='2.5'/%3E%3Ccircle cx='7.5' cy='9' r='2.5'/%3E%3Ccircle cx='12' cy='13.5' r='2.5'/%3E%3Cpath d='M12 16v6M12 20c-2-2-4-2-5-1M12 19c2-2 4-2 5-1'/%3E%3C/svg%3E"); }
  .kv-ico--fuel { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 21V5a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v16M3 21h12M4 10h10M14 13h2a2 2 0 0 1 2 2v3a1.5 1.5 0 0 0 3 0V9l-3-3'/%3E%3C/svg%3E"); }
  .kv-ico--mail { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Cpath d='m3 7 9 6 9-6'/%3E%3C/svg%3E"); }
  .kv-ico--cake { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 21v-8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8M2 21h20M4 16c2 1 3 1 4 0s3-1 4 0 3 1 4 0 3-1 4 0M12 11V7M12 4h.01'/%3E%3C/svg%3E"); }
  .kv-ico--fork { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 2v7a2 2 0 0 0 4 0V2M8 11v11M18 22V2c-3 2-4 6-4 10h4'/%3E%3C/svg%3E"); }
  .kv-ico--bike { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='5.5' cy='16.5' r='3.5'/%3E%3Ccircle cx='18.5' cy='16.5' r='3.5'/%3E%3Cpath d='M5.5 16.5 9 9h7l2.5 7.5M12 16.5 9 9M15 5h2l-1 4'/%3E%3C/svg%3E"); }
  .kv-ico--route { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='6' cy='19' r='2'/%3E%3Ccircle cx='18' cy='5' r='2'/%3E%3Cpath d='M8 19h8.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H16'/%3E%3C/svg%3E"); }
  .kv-ico--star { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Cpath d='m12 2 3 6.5 7 .8-5.2 4.8 1.5 7L12 17.6 5.7 21l1.5-7L2 9.3l7-.8z'/%3E%3C/svg%3E"); }
  .kv-ico--info { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 11v6M12 7.5h.01'/%3E%3C/svg%3E"); }
  .kv-ico--calendar { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cpath d='M3 10h18M8 3v4M16 3v4M8 14h.01M12 14h.01M16 14h.01M8 17h.01M12 17h.01'/%3E%3C/svg%3E"); }
  .kv-ico--ban { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='m5.7 5.7 12.6 12.6'/%3E%3C/svg%3E"); }
  .kv-ico--museum { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9 12 3l9 6M4 9h16M5 9v9M9 9v9M15 9v9M19 9v9M3 21h18M3 18h18'/%3E%3C/svg%3E"); }
  .kv-ico--post { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16v12H4zM4 4l8 7 8-7M8 20h8M12 16v4'/%3E%3C/svg%3E"); }
  .kv-ico--book { --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h6a2 2 0 0 1 2 2v14a2 2 0 0 0-2-2H4zM20 4h-6a2 2 0 0 0-2 2v14a2 2 0 0 1 2-2h6z'/%3E%3C/svg%3E"); }

  /* Chips & badges */
  .kv-chips { display: flex; flex-wrap: wrap; gap: .5rem; list-style: none; padding: 0; }
  .kv-chip { display: inline-flex; align-items: center; gap: .4rem; padding: .35rem .85rem; border-radius: 999px; border: 1px solid var(--kv-line); background: var(--kv-surface); font-weight: 700; font-size: .9rem; }
  .kv-badge { display: inline-block; padding: .15rem .6rem; border-radius: 999px; font-size: .78rem; font-weight: 800; letter-spacing: .02em; background: color-mix(in srgb, var(--kv-teal) 18%, transparent); color: var(--kv-accent); }
  .kv-badge--coral { background: color-mix(in srgb, var(--kv-coral) 16%, transparent); color: var(--kv-coral); }
  .kv-badge--gold { background: color-mix(in srgb, var(--kv-gold) 25%, transparent); color: #8a6a1c; }

  /* Gallery */
  .kv-gallery { display: grid; gap: .6rem; grid-template-columns: repeat(auto-fill, minmax(min(100%, 14rem), 1fr)); grid-auto-flow: dense; }
  .kv-gallery a { position: relative; display: block; overflow: hidden; border-radius: var(--kv-radius-sm); background: var(--kv-bg-soft); }
  .kv-gallery img { width: 100%; height: 100%; aspect-ratio: 4 / 3; object-fit: cover; transition: transform .6s cubic-bezier(.2, .8, .2, 1), filter .3s; }
  .kv-gallery a:hover img { transform: scale(1.05); }
  .kv-gallery a.is-wide { grid-column: span 2; }
  .kv-gallery a.is-wide img { aspect-ratio: auto; }
  .kv-gallery a.is-tall { grid-row: span 2; }
  .kv-gallery a.is-tall img { aspect-ratio: auto; }
  @media (max-width: 34rem) { .kv-gallery a.is-wide { grid-column: auto; } .kv-gallery a.is-tall { grid-row: auto; } .kv-gallery a.is-wide img, .kv-gallery a.is-tall img { aspect-ratio: 4 / 3; } }

  /* Lightbox */
  .kv-lightbox { border: 0; padding: 0; background: transparent; max-width: 100vw; max-height: 100vh; width: 100vw; height: 100vh; }
  .kv-lightbox::backdrop { background: rgb(3 15 28 / .92); backdrop-filter: blur(4px); }
  .kv-lightbox__figure { display: grid; place-items: center; height: 100%; padding: 3.5rem 1rem 1rem; gap: .75rem; grid-template-rows: 1fr auto; }
  .kv-lightbox__figure img { max-height: calc(100vh - 7rem); max-width: min(100%, 110rem); object-fit: contain; border-radius: .4rem; box-shadow: 0 20px 80px rgb(0 0 0 / .5); }
  .kv-lightbox__figure figcaption { color: #dfe9ee; text-align: center; font-weight: 600; }
  .kv-lightbox__btn { position: fixed; display: grid; place-items: center; width: 3rem; height: 3rem; border-radius: 999px; border: 0; background: rgb(255 255 255 / .12); color: #fff; font-size: 2rem; line-height: 1; cursor: pointer; }
  .kv-lightbox__btn:hover { background: rgb(255 255 255 / .25); }
  .kv-lightbox__close { top: 1rem; right: 1rem; }
  .kv-lightbox__prev { left: 1rem; top: 50%; translate: 0 -50%; }
  .kv-lightbox__next { right: 1rem; top: 50%; translate: 0 -50%; }

  /* Prices */
  .kv-price { position: relative; padding: 2rem; border-radius: var(--kv-radius); background: linear-gradient(145deg, var(--kv-navy), #0b3557); color: #fff; overflow: hidden; }
  .kv-price::after { content: ""; position: absolute; right: -4rem; bottom: -4.5rem; width: 11rem; height: 11rem; border-radius: 50%; border: 2px solid rgb(85 173 167 / .45); box-shadow: -2.5rem -2.5rem 0 -1.6rem rgb(222 189 95 / .55); pointer-events: none; }
  .kv-price > * { position: relative; z-index: 1; }
  .kv-price h3 { color: #fff; }
  .kv-price__amount { font-family: var(--kv-font-display); font-size: clamp(2.2rem, 1.8rem + 2vw, 3.2rem); font-weight: 700; margin-top: .5rem; color: #fff; }
  .kv-price__amount small { font-size: 1rem; color: #b9cfd8; font-family: var(--kv-font); font-weight: 600; }
  .kv-price ul { list-style: none; padding: 0; margin-top: 1rem; display: grid; gap: .45rem; }
  .kv-price li::before { content: "✓"; color: var(--kv-gold); font-weight: 900; margin-right: .5rem; }

  .kv-table { width: 100%; border-collapse: collapse; background: var(--kv-surface); border-radius: var(--kv-radius); overflow: hidden; box-shadow: var(--kv-shadow); }
  .kv-table th, .kv-table td { padding: .85rem 1rem; text-align: left; border-bottom: 1px solid var(--kv-line); vertical-align: top; }
  .kv-table th { font-weight: 800; background: var(--kv-bg-soft); }
  .kv-table tr:last-child td { border-bottom: 0; }
  .kv-table td:last-child { white-space: nowrap; }
  .kv-table--plain td:last-child { white-space: normal; }

  /* Notes & alerts */
  .kv-note { display: flex; gap: 1rem; align-items: flex-start; padding: 1.1rem 1.25rem; border-radius: var(--kv-radius); background: var(--kv-bg-soft); border: 1px solid var(--kv-line); }
  .kv-note > div > * + * { margin-top: .4rem; }
  .kv-note--coral { background: color-mix(in srgb, var(--kv-coral) 9%, var(--kv-surface)); border-color: color-mix(in srgb, var(--kv-coral) 35%, transparent); }
  .kv-note--gold { background: color-mix(in srgb, var(--kv-gold) 14%, var(--kv-surface)); border-color: color-mix(in srgb, var(--kv-gold) 45%, transparent); }
  .kv-emergency { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr)); }
  .kv-emergency a.kv-callcard { display: flex; flex-direction: column; gap: .2rem; padding: 1.25rem; border-radius: var(--kv-radius); text-decoration: none; color: #fff; background: var(--kv-coral); box-shadow: var(--kv-shadow); transition: transform .2s; }
  .kv-emergency a.kv-callcard:hover { transform: translateY(-2px); }
  .kv-emergency a.kv-callcard--navy { background: var(--kv-navy); }
  .kv-emergency a.kv-callcard--teal { background: var(--kv-teal-strong); }
  .kv-callcard__num { font-family: var(--kv-font-display); font-size: 2.1rem; font-weight: 700; line-height: 1.1; }
  .kv-callcard__label { font-weight: 800; }
  .kv-callcard__sub { font-size: .9rem; opacity: .9; }

  /* Place cards (shops, attractions, doctors) */
  .kv-place { background: var(--kv-surface); border: 1px solid var(--kv-line); border-radius: var(--kv-radius); box-shadow: var(--kv-shadow); overflow: hidden; display: flex; flex-direction: column; }
  .kv-place__img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; }
  .kv-place__body { padding: 1.2rem 1.3rem 1.3rem; display: flex; flex-direction: column; gap: .55rem; flex: 1; }
  .kv-place__head { display: flex; gap: .85rem; align-items: center; }
  .kv-place__head .kv-ico { width: 2.6rem; height: 2.6rem; border-radius: .85rem; }
  .kv-place__head .kv-ico::before { width: 1.35rem; height: 1.35rem; }
  .kv-place h3 { font-size: 1.12rem; }
  .kv-place__meta { display: grid; gap: .3rem; font-size: .93rem; color: var(--kv-ink-soft); }
  .kv-place__meta > div { display: grid; grid-template-columns: 5.6rem 1fr; gap: .5rem; }
  .kv-place__meta dt { font-weight: 800; color: var(--kv-ink); }
  .kv-place__meta dd { margin: 0; }
  .kv-place__desc { font-size: .97rem; }
  .kv-place .kv-actions { margin-top: auto; padding-top: .4rem; }
  .kv-place .kv-btn { padding: .45rem .95rem; font-size: .88rem; }
  .kv-credit { font-size: .72rem; color: var(--kv-ink-soft); padding: .35rem 1.3rem 0; }
  .kv-credit a { color: inherit; }

  /* In-page navigation pills */
  .kv-toc { display: flex; flex-wrap: wrap; gap: .5rem; list-style: none; padding: 0; margin-top: 1.5rem; }
  .kv-toc a { display: inline-flex; align-items: center; gap: .4rem; padding: .5rem 1rem; border-radius: 999px; background: var(--kv-surface); border: 1px solid var(--kv-line); text-decoration: none; font-weight: 800; color: var(--kv-ink); }
  .kv-toc a:hover { border-color: var(--kv-teal); color: var(--kv-accent); }

  /* Facts / stats */
  .kv-facts { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(min(100%, 9.5rem), 1fr)); }
  .kv-facts > div { padding: 1.1rem; border-radius: var(--kv-radius); background: var(--kv-surface); border: 1px solid var(--kv-line); text-align: center; }
  .kv-facts dt { font-family: var(--kv-font-display); font-size: 1.7rem; font-weight: 700; color: var(--kv-accent); }
  .kv-facts dd { margin: .2rem 0 0; color: var(--kv-ink-soft); font-size: .9rem; font-weight: 700; }

  /* Reviews */
  .kv-rating { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem 1.5rem; padding: 1.5rem; border-radius: var(--kv-radius); background: var(--kv-surface); border: 1px solid var(--kv-line); box-shadow: var(--kv-shadow); }
  .kv-rating__score { font-family: var(--kv-font-display); font-size: 3rem; font-weight: 700; line-height: 1; }
  .kv-stars { color: var(--kv-gold); letter-spacing: .1em; font-size: 1.2rem; }
  .kv-rating__text { color: var(--kv-ink-soft); }
  .kv-rating .kv-btn { margin-left: auto; }
  .kv-reviews { display: grid; gap: 1.25rem; grid-template-columns: 1fr; margin-top: 1.5rem; align-items: stretch; }
  @media (min-width: 48rem) { .kv-reviews { grid-template-columns: repeat(3, 1fr); } }
  .kv-review { display: flex; flex-direction: column; position: relative; padding: 1.5rem 1.5rem 1.25rem; background: var(--kv-surface); border: 1px solid var(--kv-line); border-radius: var(--kv-radius); box-shadow: var(--kv-shadow); }
  .kv-review::before { content: "“"; position: absolute; top: .4rem; right: 1.1rem; font-family: Georgia, serif; font-size: 4.5rem; line-height: 1; color: color-mix(in srgb, var(--kv-teal) 35%, transparent); }
  .kv-review blockquote { margin: .6rem 0 0; }
  .kv-review blockquote p + p { margin-top: .6rem; }
  .kv-review footer { display: flex; align-items: center; gap: .75rem; margin-top: auto; padding-top: 1rem; font-weight: 800; }
  .kv-review footer small { display: block; font-weight: 600; }
  .kv-avatar { display: grid; place-items: center; width: 2.6rem; height: 2.6rem; border-radius: 50%; background: var(--kv-teal); color: #fff; font-family: var(--kv-font-display); font-weight: 700; }
  .kv-review:nth-child(3n+2) .kv-avatar { background: var(--kv-coral); }
  .kv-review:nth-child(3n) .kv-avatar { background: var(--kv-navy); }
  .kv-review details summary { cursor: pointer; color: var(--kv-link); font-weight: 800; margin-top: .5rem; }

  /* Map */
  .kv-map { border-radius: var(--kv-radius); overflow: hidden; border: 1px solid var(--kv-line); box-shadow: var(--kv-shadow); background: var(--kv-bg-soft); }
  .kv-map iframe { width: 100%; height: clamp(18rem, 45vw, 26rem); border: 0; }
  .kv-map__bar { display: flex; flex-wrap: wrap; gap: .5rem 1rem; align-items: center; justify-content: space-between; padding: .85rem 1.1rem; background: var(--kv-surface); }

  /* Bike route map */
  .kv-bikemap { display: grid; gap: 1rem; }
  @media (min-width: 60rem) { .kv-bikemap { grid-template-columns: 1.6fr 1fr; align-items: start; } }
  .kv-bikemap__map { height: clamp(22rem, 55vw, 32rem); border-radius: var(--kv-radius); overflow: hidden; border: 1px solid var(--kv-line); box-shadow: var(--kv-shadow); background: var(--kv-bg-soft); z-index: 0; }
  .kv-bikemap__list { list-style: none; padding: 0; display: grid; gap: .6rem; }
  .kv-bikemap__list button { width: 100%; text-align: left; display: grid; grid-template-columns: .9rem 1fr auto; gap: .2rem .7rem; align-items: start; padding: .85rem 1rem; border-radius: var(--kv-radius-sm); border: 1px solid var(--kv-line); background: var(--kv-surface); cursor: pointer; transition: border-color .2s, box-shadow .2s; }
  .kv-bikemap__list button[aria-pressed="true"] { border-color: currentColor; box-shadow: var(--kv-shadow); }
  .kv-bikemap__swatch { width: .9rem; height: .9rem; border-radius: 50%; margin-top: .3rem; }
  .kv-bikemap__name { font-weight: 800; color: var(--kv-ink); }
  .kv-bikemap__km { font-weight: 800; color: var(--kv-ink-soft); }
  .kv-bikemap__desc { grid-column: 2 / -1; font-size: .92rem; color: var(--kv-ink-soft); }
  .kv-bikemap__note { font-size: .82rem; color: var(--kv-ink-soft); }

  /* Booking placeholder */
  .kv-booking { position: relative; padding: clamp(1.5rem, 4vw, 2.5rem); border-radius: var(--kv-radius); border: 2px dashed color-mix(in srgb, var(--kv-teal) 55%, transparent); background: color-mix(in srgb, var(--kv-teal) 7%, var(--kv-surface)); }
  .kv-booking > * + * { margin-top: .8rem; }

  /* CTA band */
  .kv-cta { position: relative; overflow: hidden; background: var(--kv-teal-strong); color: #fff; }
  .kv-cta__inner { display: flex; flex-wrap: wrap; gap: 1.5rem; align-items: center; justify-content: space-between; padding-block: clamp(2.5rem, 5vw, 3.5rem); }
  .kv-cta h2 { color: #fff; }
  .kv-cta p { margin-top: .4rem; opacity: .92; }
  .kv-cta::after { content: ""; position: absolute; right: -5rem; bottom: -6rem; width: 18rem; height: 18rem; border-radius: 50%; border: 3px solid rgb(255 255 255 / .18); box-shadow: -6rem -2rem 0 -5rem rgb(222 189 95 / .8); pointer-events: none; }

  /* Ügyeletes patika module */
  .kv-patika { display: grid; gap: 1rem; }
  .kv-patika__list { display: grid; gap: .75rem; grid-template-columns: repeat(auto-fill, minmax(min(100%, 19rem), 1fr)); list-style: none; padding: 0; }
  .kv-patika__item { padding: 1rem 1.15rem; border-radius: var(--kv-radius); background: var(--kv-surface); border: 1px solid var(--kv-line); border-left: 5px solid var(--kv-teal); display: grid; gap: .3rem; }
  .kv-patika__item.is-duty { border-left-color: var(--kv-coral); background: color-mix(in srgb, var(--kv-coral) 6%, var(--kv-surface)); }
  .kv-patika__item.is-closed { border-left-color: var(--kv-line); }
  .kv-patika__name { font-weight: 800; font-size: 1.05rem; }
  .kv-patika__name small { font-weight: 700; }
  .kv-patika__status { font-size: .95rem; }
  .kv-patika__meta { font-size: .9rem; color: var(--kv-ink-soft); }
  .kv-patika__foot { font-size: .85rem; color: var(--kv-ink-soft); }

  /* Error / offline pages */
  .kv-error { padding-block: 4rem; display: grid; gap: 1rem; justify-items: start; max-width: 40rem; }
  .kv-error__code { font-family: var(--kv-font-display); font-size: 5rem; font-weight: 700; color: var(--kv-teal); line-height: 1; }
  .kv-offline-form { display: grid; gap: .5rem; width: min(100%, 22rem); }
  .kv-offline-form input { padding: .6rem .8rem; border-radius: var(--kv-radius-sm); border: 1px solid var(--kv-line); background: var(--kv-surface); }

  /* Joomla system messages */
  #system-message-container joomla-alert { display: block; margin-block: 1rem; padding: 1rem 1.25rem; border-radius: var(--kv-radius); background: var(--kv-bg-soft); border: 1px solid var(--kv-line); }

  /* Scroll-driven reveal where supported */
  @supports (animation-timeline: view()) {
    @media (prefers-reduced-motion: no-preference) {
      .kv-card, .kv-place, .kv-review, .kv-feature, .kv-split__media {
        animation: kv-reveal linear both; animation-timeline: view(); animation-range: entry 0% entry 35%;
      }
    }
  }
  @keyframes kv-reveal { from { opacity: 0; transform: translateY(1.5rem); } to { opacity: 1; transform: none; } }
}

@layer utilities {
  @media (max-width: 30rem) { .kv-header__cta { display: none; } }
  @media (min-width: 72rem) { .kv-menu-toggle { display: none; } }
  .visually-hidden { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .kv-center { text-align: center; }
  .kv-muted { color: var(--kv-ink-soft); }
  @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } }
  @media print { .kv-header, .kv-footer, .kv-lightbox, .kv-cta { display: none; } }
}
