/* Visenza Quelle, Landing page CSS (DE + EN trees share this file).
   Ported 1:1 from the approved mockup: plans/Vicenza_Quelle_Adam/visenza-master-look-v5.html
   (Christina + Franz signed off v5). Colors/fonts/radius/maxw live in
   assets/visenza-tokens.css (single source of truth), only page-specific
   deltas and layout rules that don't exist there are declared here.
   Load order in <head>: visenza-tokens.css first, then this file. */

/* ---- deltas vs visenza-tokens.css, to keep the exact v5 pixel values ---- */
:root { --gap: 130px; } /* mockup uses a wider section rhythm than the token default (--section-gap: 120px) */
body { line-height: 1.8; overflow-x: hidden; }
h1, h2, h3 { line-height: 1.2; }
.label { letter-spacing: 0.24em; font-size: 0.7rem; }
.btn { font-size: 0.72rem; letter-spacing: 0.16em; padding: 15px 40px; }
section { padding: var(--gap) 0; }

/* ---- base ---- */
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
img { display: block; max-width: 100%; }
a { text-decoration: none; }
.wrap { max-width: var(--maxw); margin: 0 auto; padding: 0 44px; }
.h-xl { font-family: var(--font-head); text-transform: uppercase; letter-spacing: 0.16em; font-size: clamp(34px, 4.4vw, 58px); font-weight: 300; }
.h-lg { font-family: var(--font-head); text-transform: uppercase; letter-spacing: 0.16em; font-size: clamp(26px, 3.2vw, 42px); font-weight: 300; }
p { font-size: 1rem; max-width: 60ch; line-height: 1.85; }

/* ---- buttons (page-specific names not in the shared tokens file) ---- */
.btn--sek { background: transparent; color: var(--nacht); border-color: var(--nacht); }
.btn--sek:hover { background: var(--nacht); color: var(--kalk); }
.tl { font-family: var(--font-body); font-size: 0.7rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--nacht); opacity: 0.55; transition: opacity 0.2s; }
.tl:hover { opacity: 1; }

/* ---- nav ---- */
nav { position: absolute; top: 0; left: 0; right: 0; z-index: 10; display: flex; justify-content: space-between; align-items: center; padding: 28px 44px; }
nav .brand { font-family: var(--font-head); text-transform: uppercase; letter-spacing: 0.28em; color: var(--kalk); font-size: 1.3rem; line-height: 1; }
nav .brand small { display: block; font-family: var(--font-body); font-size: 0.5rem; letter-spacing: 0.22em; opacity: 0.75; margin-top: 4px; }
nav .nav-right { display: flex; align-items: center; gap: 28px; }
nav .links { display: flex; align-items: center; gap: 32px; }
nav .links a { color: var(--kalk); text-decoration: none; font-size: 0.68rem; letter-spacing: 0.18em; text-transform: uppercase; opacity: 0.85; transition: opacity 0.2s; }
nav .links a:hover { opacity: 1; }
/* deliberately a sibling of .links, not nested inside it, so it stays visible
   when .links collapses on mobile (language switching must always be reachable) */
nav .langswitch { display: flex; gap: 12px; }
nav .langswitch a { color: var(--kalk); text-decoration: none; font-size: 0.66rem; letter-spacing: 0.16em; text-transform: uppercase; opacity: 0.55; transition: opacity 0.2s; }
nav .langswitch a:hover { opacity: 0.9; }
nav .langswitch a[data-active] { opacity: 1; text-decoration: underline; text-underline-offset: 3px; }

/* ---- hero ---- */
.hero { position: relative; height: 92vh; min-height: 640px; display: flex; align-items: flex-end; overflow: hidden; }
.hero img, .hero .placeholder-photo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center top; }
/* Darkened 2026-07-10 (was .62/.18/0): the AI-generated hero photo is
   low native resolution, softer/noisier at full-bleed size than the real
   photos elsewhere on the page, a deeper veil keeps it from competing
   with the overlaid headline instead of trying to hide the softness. */
.hero .veil { position: absolute; inset: 0; background: linear-gradient(to top, rgba(30, 29, 27, .78) 0%, rgba(30, 29, 27, .34) 48%, rgba(30, 29, 27, .06) 100%); }
.hero .inner { position: relative; padding-bottom: 88px; }
.hero .h-xl { color: var(--kalk); letter-spacing: 0.2em; text-shadow: 0 2px 20px rgba(30, 29, 27, .5); }
.hero p { color: rgba(244, 241, 236, .9); margin: 18px 0 28px; font-size: .95rem; text-shadow: 0 1px 14px rgba(30, 29, 27, .5); }
.hero .akzent { display: block; font-size: 1.6rem; margin-bottom: 20px; color: #f3ead9; text-shadow: 0 1px 14px rgba(30, 29, 27, .55); }

/* ---- fullscreen image section, text inside the image, like hero ---- */
.fs { position: relative; min-height: 80vh; display: flex; align-items: center; overflow: hidden; }
.fs img, .fs .placeholder-photo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; }
.fs .veil-l { position: absolute; inset: 0; background: linear-gradient(to right, rgba(30, 29, 27, .72) 0%, rgba(30, 29, 27, .38) 55%, rgba(30, 29, 27, .0) 100%); }
.fs .veil-r { position: absolute; inset: 0; background: linear-gradient(to left, rgba(30, 29, 27, .72) 0%, rgba(30, 29, 27, .38) 55%, rgba(30, 29, 27, .0) 100%); }
.fs .inner { position: relative; max-width: 560px; padding: 80px 44px; }
.fs.right .inner { margin-left: auto; }
.fs .label { color: rgba(244, 241, 236, .65); margin-bottom: 20px; }
.fs h2 { color: var(--kalk); text-shadow: 0 2px 18px rgba(30, 29, 27, .45); margin-bottom: 24px; }
.fs p { color: rgba(244, 241, 236, .85); font-size: .95rem; text-shadow: 0 1px 12px rgba(30, 29, 27, .45); margin-bottom: 20px; }
.fs .akzent { color: #f3ead9; display: block; font-size: 1.4rem; margin: 4px 0 32px; text-shadow: 0 1px 14px rgba(30, 29, 27, .5); }

/* ---- center ---- */
.center { text-align: center; }
.center .label { display: block; margin-bottom: 22px; }
.center p { margin: 26px auto 0; }
.center .akzent { display: block; font-size: 1.7rem; margin-top: 34px; }

/* ---- 5 rooms ---- */
.raeume { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0; margin-top: 64px; border-top: 1px solid var(--stein); }
.raum { padding: 52px 24px; text-align: center; border-right: 1px solid var(--stein); }
.raum:last-child { border-right: none; }
.raum h3 { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.14em; font-family: var(--font-body); font-weight: 500; margin-bottom: 14px; color: var(--nacht); }
.raum p { font-size: 0.84rem; margin: 0 auto; opacity: .65; max-width: 160px; }

/* ---- my world / carousel ---- */
.welt { background: var(--sand); border-top: 1px solid var(--stein); }
.welt-hdr { padding: 90px 64px 0; text-align: center; }
.welt-hdr .label { color: var(--erde); }
.welt-hdr h2 { color: var(--nacht); margin: 16px 0 14px; }
.welt-hdr p { color: rgba(30, 29, 27, .52); max-width: 440px; margin: 0 auto; font-size: .9rem; }
/* Continuous marquee: .welt-track is duplicated once in the markup (two
   identical, back-to-back copies of the same 10 cards), so animating the
   flex row by exactly -50% of its own width loops seamlessly, the second
   copy is already in the visual position the first one just vacated. The
   duplicate carries aria-hidden so screen readers only ever hear it once.
   Keeps moving on mouse hover by design (only pauses for :focus-within,
   since a keyboard user tabbing through cards needs it to hold still to
   land on anything). Individual-card highlight (.welt-card:hover below)
   still fires independently of the track's own motion. Skipped entirely
   under prefers-reduced-motion (falls back to a plain, static,
   overflow-hidden strip of the first 10 cards). */
.welt-scroll { display: flex; overflow: hidden; margin-top: 52px; }
.welt-track { display: flex; flex: 0 0 auto; gap: 3px; animation: welt-marquee 50s linear infinite; }
.welt-scroll:focus-within .welt-track { animation-play-state: paused; }
@keyframes welt-marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) {
  .welt-track { animation: none; }
  .welt-track[aria-hidden="true"] { display: none; }
}
.welt-card { flex: 0 0 240px; aspect-ratio: 3/4; position: relative; overflow: hidden; cursor: pointer; transition: opacity .35s; }
.welt-card:hover { opacity: .88; }
.welt-card img, .welt-card .placeholder-photo { width: 100%; height: 100%; object-fit: cover; object-position: center; transition: transform .5s; }
.welt-card:hover img, .welt-card:hover .placeholder-photo { transform: scale(1.03); }
.welt-label { position: absolute; bottom: 0; left: 0; right: 0; padding: 22px 14px 16px; background: linear-gradient(to top, rgba(30, 29, 27, .72), transparent); font-family: var(--font-body); font-size: 0.58rem; letter-spacing: 0.18em; text-transform: uppercase; color: rgba(244, 241, 236, .8); text-align: center; }
.welt-footer { padding: 52px 64px; text-align: center; border-top: 1px solid var(--stein); margin-top: 3px; }
.welt-footer a { font-family: var(--font-body); font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase; color: rgba(30, 29, 27, .4); text-decoration: none; transition: color .2s; }
.welt-footer a:hover { color: var(--nacht); }
.welt-footer a::after { content: ' →'; }

/* ---- quote / stillness ---- */
.stille { position: relative; height: 66vh; min-height: 440px; display: flex; align-items: center; justify-content: center; text-align: center; overflow: hidden; }
.stille img, .stille .placeholder-photo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.stille .veil { position: absolute; inset: 0; background: rgba(30, 29, 27, .50); }
.stille .inner { position: relative; max-width: 760px; padding: 0 40px; }
.stille blockquote { font-family: var(--font-head); font-style: italic; font-weight: 300; color: var(--kalk); font-size: clamp(24px, 3.2vw, 38px); line-height: 1.45; margin: 0; }
.stille .akzent { display: block; margin-top: 28px; font-size: 1.4rem; color: #e9ddc9; }

/* ---- compass fullscreen ---- */
.kompass-fs { position: relative; min-height: 75vh; display: flex; align-items: center; overflow: hidden; border-top: 1px solid var(--stein); }
.kompass-fs img, .kompass-fs .placeholder-photo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; }
.kompass-fs .veil { position: absolute; inset: 0; background: linear-gradient(to right, rgba(30, 29, 27, .78) 0%, rgba(30, 29, 27, .42) 55%, rgba(30, 29, 27, .0) 100%); }
.kompass-fs .inner { position: relative; max-width: 580px; padding: 80px 44px; }
.kompass-fs .label { color: rgba(244, 241, 236, .65); margin-bottom: 20px; }
.kompass-fs h2 { color: var(--kalk); text-shadow: 0 2px 18px rgba(30, 29, 27, .45); margin-bottom: 18px; }
.kompass-fs .akzent { color: #f3ead9; display: block; font-size: 1.35rem; margin: 4px 0 22px; text-shadow: 0 1px 14px rgba(30, 29, 27, .5); }
.kompass-checks { list-style: none; margin: 0 0 32px; padding: 0; }
.kompass-checks li { font-size: 0.85rem; color: rgba(244, 241, 236, .75); padding: 9px 0; border-bottom: 1px solid rgba(244, 241, 236, .15); display: flex; align-items: center; gap: 12px; text-shadow: 0 1px 8px rgba(30, 29, 27, .4); }
.kompass-checks li::before { content: ''; width: 13px; height: 13px; border-radius: 50%; border: 1px solid rgba(244, 241, 236, .45); flex-shrink: 0; }
.kompass-preis { font-size: 0.7rem; letter-spacing: 0.08em; color: rgba(244, 241, 236, .4); margin-top: 14px; }

/* ---- offerings / value ladder ---- */
.angebote-hdr { text-align: center; margin-bottom: 60px; }
.angebote-hdr .label { margin-bottom: 20px; }
.angebote-hdr p { opacity: .65; max-width: 500px; margin: 20px auto 0; font-size: .92rem; }
.angebote-grid { display: grid; grid-template-columns: repeat(4, 1fr); border-top: 1px solid var(--stein); }
.ang-card { padding: 52px 38px; border-right: 1px solid var(--stein); position: relative; display: flex; flex-direction: column; }
.ang-card:last-child { border-right: none; }
.ang-card .no { font-family: var(--font-head); font-size: 2.2rem; color: var(--erde); font-weight: 300; line-height: 1; margin-bottom: 18px; }
.ang-card .label { margin-bottom: 14px; }
.ang-card h3 { font-family: var(--font-head); font-weight: 300; font-size: 1.3rem; letter-spacing: 0.1em; text-transform: uppercase; margin-bottom: 14px; }
.ang-card p { font-size: 0.86rem; line-height: 1.75; opacity: .65; margin-bottom: 28px; flex-grow: 1; }
.ang-card .tl { margin-top: auto; }

/* ---- closing cta ---- */
.closing { position: relative; min-height: 72vh; display: flex; align-items: center; justify-content: center; text-align: center; overflow: hidden; padding: 0; }
.closing img, .closing .placeholder-photo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.closing .veil { position: absolute; inset: 0; background: linear-gradient(rgba(30, 29, 27, .3), rgba(30, 29, 27, .55)); }
.closing .inner { position: relative; max-width: 760px; padding: 60px 40px; }
.closing .label { color: rgba(244, 241, 236, .7); }
.closing .h-lg { color: var(--kalk); margin: 16px 0; text-shadow: 0 2px 18px rgba(30, 29, 27, .5); }
.closing .akzent { display: block; font-size: 1.5rem; color: #f3ead9; margin: 18px 0 36px; text-shadow: 0 1px 14px rgba(30, 29, 27, .5); }
.closing .btn--light { margin-right: 14px; }

/* ---- footer ---- */
footer { background: var(--nacht); color: var(--kalk); padding: 80px 0 48px; }
footer .top { display: flex; justify-content: space-between; gap: 40px; flex-wrap: wrap; padding-bottom: 40px; border-bottom: 1px solid rgba(244, 241, 236, .12); }
footer .brand { font-family: var(--font-head); text-transform: uppercase; letter-spacing: 0.28em; font-size: 1.45rem; line-height: 1; }
footer .brand small { display: block; font-family: var(--font-body); font-size: 0.52rem; letter-spacing: 0.22em; opacity: .6; margin-top: 6px; }
footer .akzent { color: var(--lehm); display: block; margin-top: 18px; font-size: 1.1rem; }
footer nav.fnav { position: static; padding: 0; display: flex; gap: 28px; flex-wrap: wrap; align-items: flex-start; margin-top: 6px; }
footer nav.fnav a { color: var(--kalk); text-decoration: none; font-size: 0.68rem; letter-spacing: 0.18em; text-transform: uppercase; opacity: .65; }
footer nav.fnav a:hover { opacity: 1; }
footer .meta { display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap; margin-top: 34px; font-size: 0.72rem; letter-spacing: 0.06em; opacity: .45; }

/* ---- cta popup (membership / touch / retreats / kontakt only, "quelle" bypasses this) ---- */
.wl-overlay { position: fixed; inset: 0; background: rgba(30, 29, 27, .72); display: none; align-items: center; justify-content: center; z-index: 100; padding: 24px; }
.wl-overlay.open { display: flex; }
.wl-modal { background: var(--kalk); max-width: 520px; width: 100%; padding: 56px 44px 48px; position: relative; border-radius: var(--radius); box-shadow: 0 30px 80px rgba(30, 29, 27, .45); text-align: center; }
.wl-modal .label { display: block; margin-bottom: 16px; }
.wl-modal h2 { margin-bottom: 16px; }
.wl-modal p { max-width: 100%; margin: 0 auto 30px; opacity: .7; font-size: .92rem; }
.wl-close { position: absolute; top: 14px; right: 20px; background: none; border: none; font-size: 1.7rem; line-height: 1; color: var(--nacht); opacity: .45; cursor: pointer; }
.wl-close:hover { opacity: 1; }
.wl-modal .akzent { display: block; margin-top: 26px; font-size: 1.3rem; }
.wl-form { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; }
.wl-form input[type=text], .wl-form input[type=email] { flex: 1; min-width: 100%; background: #fbfaf7; border: 1px solid var(--stein); border-radius: var(--radius); padding: 15px 18px; font-family: var(--font-body); font-weight: 300; font-size: .9rem; color: var(--nacht); }
.wl-form input::placeholder, .wl-form textarea::placeholder { color: #9a938a; }
.wl-form input:focus, .wl-form textarea:focus { outline: none; border-color: var(--erde); }
.wl-form textarea { width: 100%; background: #fbfaf7; border: 1px solid var(--stein); border-radius: var(--radius); padding: 15px 18px; font-family: var(--font-body); font-weight: 300; font-size: .9rem; color: var(--nacht); resize: vertical; }
.wl-form .btn { border: 1px solid var(--erde); cursor: pointer; width: 100%; margin-top: 4px; }

/* ---- palette harmonization · every photo slot pulled into the Visenza palette
   (kept wired for when real photography replaces the .placeholder-photo blocks) ---- */
.hero img, .hero .placeholder-photo,
.fs img, .fs .placeholder-photo,
.kompass-fs img, .kompass-fs .placeholder-photo,
.stille img, .stille .placeholder-photo,
.closing img, .closing .placeholder-photo {
  filter: sepia(8%) saturate(85%) brightness(0.96);
}
.welt-card img, .welt-card .placeholder-photo {
  filter: sepia(5%) saturate(88%) brightness(0.97);
}

/* ---- responsive ---- */
@media (max-width: 900px) {
  .fs .inner, .kompass-fs .inner { max-width: 100%; margin: 0; padding: 60px 26px; }
  .fs .veil-l, .fs .veil-r, .kompass-fs .veil { background: rgba(30, 29, 27, .62); }
  .fs.right .inner { margin: 0; }
  .raeume { grid-template-columns: 1fr 1fr; }
  .raum { border-right: none; border-bottom: 1px solid var(--stein); }
  nav .links { display: none; }
  .wrap { padding: 0 26px; }
  .angebote-grid { grid-template-columns: 1fr 1fr; }
  .ang-card { border-right: none; border-bottom: 1px solid var(--stein); }
  .ang-card:last-child { border-bottom: none; }
  .welt-hdr { padding: 60px 26px 0; }
  .welt-card { flex: 0 0 200px; }
}
