/* ==========================================================================
   WI.NE 71 — premium polish layer
   Loaded LAST, after: bootstrap.min.css -> usn-global.min.css ->
   wine71-footer.css. Scoped to real theme selectors only; the Bootstrap 3
   grid (.container/.row/.col-*) is never touched. The footer and .int-credit
   are owned by wine71-footer.css and are intentionally out of scope here.

   Direction: "premium exaggerated minimalism" — oversized clamp() display
   type, wide-tracked kickers, generous rhythm, refined micro-detail, WCAG AA.

   Palette (theme utilities): c1 #4cb8a6 teal, c2 #7bdccb, c3 #151515 ink,
   c4 #197868 deep green, c5 #fff, c6 #95dcd0 pale teal, red #e84b0f (LOGO ONLY).
   AA strategy: #4cb8a6 becomes decorative/accent + text-on-dark only; the deep
   greens #197868 / #1c7a63 carry every text + fill role on light surfaces; red
   #e84b0f retreats to the WI.NE71 logo mark. Encode Sans is the only font
   (weights 300-900, normal only — never italic; browsers would fake-oblique).
   ========================================================================== */

/* ==========================================================================
   1. Design tokens
   ========================================================================== */
:root {
    --ink: #151515;          /* c3 — deepest surface / text */
    --ink-soft: #374151;     /* body copy on light (10.3:1 on white) */
    --ink-mute: #4b5563;     /* secondary label copy */
    --deep: #1c7a63;         /* brand deep green (accent-bar, borders) */
    --deep-2: #197868;       /* theme c4 — AA workhorse fill (white 5.35:1) */
    --deep-strong: #145f52;  /* hover / pressed */
    --deep-darker: #14604f;  /* darkest green — dropdowns, gradients */
    --teal: #4cb8a6;         /* c1 — decorative + text on dark */
    --teal-light: #7bdccb;   /* c2 — accents on dark, focus ring on dark */
    --teal-pale: #95dcd0;    /* c6 */
    --card: #f2faf8;         /* refined pale card surface */
    --focus: #197868;        /* focus ring on light */
    --focus-dark: #95dcd0;   /* focus ring on dark (11.7:1 on ink) */
    --ring: 0 0 0 3px rgba(28, 122, 99, .25);
    --ease: cubic-bezier(.22, .61, .36, 1);
}

/* ==========================================================================
   2. Typography & vertical rhythm
   German is set on <html lang="de"> — long compounds get wrapping/hyphenation.
   ========================================================================== */

/* Long-word safety on content containers (never on grid classes) */
#content .text,
.content-wrapper,
.promo-pods .item .heading,
.promo-pods .item .text,
.apc.pod-windows .item .heading,
.content.c3-bg .listing .item .heading,
.items-values,
.cookie-notice .text {
    overflow-wrap: break-word;
    -webkit-hyphens: auto;
    hyphens: auto;
}

/* Ink upgrade + rhythm on LIGHT surfaces only (never overrides .c5-text on
   dark bands, which stays scoped away from these selectors). */
.content.c5-bg .base-text,
.content.c5-bg .text,
.promo-pods .item .text,
.content-wrapper,
.content-wrapper p {
    color: var(--ink-soft);
}

.content.c5-bg .text,
.content .content-wrapper,
.content-wrapper p,
.promo-pods .item .text {
    line-height: 1.7;
}

/* Section kickers — wide-tracked premium micro-heading */
.secondary-heading {
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .2em;
    text-transform: uppercase;
}

/* Kicker contrast: teal c1-text fails on white — swap to deep green on light
   surfaces; teal is kept where it sits on dark bands (c3/c4). */
.content.c5-bg .secondary-heading.c1-text,
.contact.form .secondary-heading.c1-text {
    color: var(--deep-2);
}

/* Kicker on a photo hero (mietobjekte overview on the metallic-gray shot): teal
   c1-text has too little luminance contrast against the photo. Brighten the brand
   teal and add a dark halo so the kicker reads on any part of the image. */
.content[style*="background-image"] .overview .secondary-heading.c1-text {
    color: #7fe0cd;
    font-size: 18px;
    text-shadow: 0 1px 2px rgba(0, 0, 0, .6), 0 2px 12px rgba(0, 0, 0, .45);
}

/* Section headings — larger, tighter, with a short brand accent bar that
   replaces the dated JS-injected full-width underline (span.line). */
.heading.main span.line {
    border: 0;      /* neutralize scripts/application.js wrapInner underline */
    padding: 0;
}

.spc .heading.main,
.apc:not(.banner) .heading.main {
    font-size: clamp(1.75rem, 2.2vw + .9rem, 2.6rem);
    font-weight: 700;
    letter-spacing: -.01em;
    line-height: 1.15;
}

.content h1.heading.main {
    font-size: clamp(2.1rem, 3vw + 1rem, 3.25rem);
    font-weight: 800;
    letter-spacing: -.02em;
}

/* Accent bar */
.heading.main::after {
    content: "";
    display: block;
    width: 56px;
    height: 3px;
    margin-top: 14px;
    background: linear-gradient(90deg, var(--deep) 0%, var(--teal) 100%);
    border-radius: 2px;
}

.text-center .heading.main::after {
    margin-left: auto;
    margin-right: auto;
}

/* No accent bar on the hero or on tile headings (photo cards) */
.apc.banner .heading.main::after,
.item .heading.main::after,
.item .heading::after {
    display: none;
}

/* Lead / intro paragraph ("byline" lead sentences). NOTE: the theme sets the
   root font-size to 10px, so 1rem = 10px here — every rem below is half what a
   16px root would give. A prior polish pass sized this in rem assuming a 16px
   root, which quietly shrank the lead text to ~13px (the theme's own intent was
   ~22px). Restored to a comfortable ~20px on tablet rising to ~22px on wide
   desktop, so it reads easily for older visitors on all pages. */
.intro {
    font-size: clamp(2rem, .3vw + 1.85rem, 2.25rem);
    line-height: 1.65;
    font-weight: 400;
    color: var(--ink-soft);
}

/* Generous section rhythm on real content bands. Banner, .no-padding and the
   kontakt map band are excluded (they own their own geometry). */
#content > section.content.apc:not(.banner):not(.no-padding):not(.map),
#content > section.content.c5-bg:not(.apc) {
    padding-top: clamp(64px, 9vw, 128px);
    padding-bottom: clamp(64px, 9vw, 128px);
}

/* Intra-section air */
.spc .overview {
    margin-bottom: clamp(24px, 4vw, 48px);
}

.spc .overview .heading.main + .text {
    margin-top: 20px;
}

/* ==========================================================================
   3. Header & primary navigation — boutique sticky bar
   The theme ships a cramped 50px teal/charcoal bar that hides on scroll-down
   and reveals on scroll-up. Here it becomes a taller (72px desktop), frosted,
   ALWAYS-visible bar with a prominent white logo lockup, larger tracked links,
   an animated teal underline, and a frosted-charcoal dropdown. Colours match
   the theme's own scrolled state (#151515 + white links) so AA is preserved.
   ========================================================================== */

/* --- 3a. Sticky & always visible ----------------------------------------- */
/* Defeat the hide-on-scroll-down: while scrolling down (html.nav-up) the theme
   drops the bar to top:-90px, fades the logo to opacity:0, and stretches the
   nav to full width (left:0, items float left). Since we keep the bar pinned,
   all three side-effects must be neutralised so the pinned bar keeps its
   logo and right-aligned links. Equal specificity + later cascade — no
   !important needed. */
html.nav-up header {
    top: 0;
}

html.nav-up header #logo {
    opacity: 1;
}

html.nav-up .navigation nav.main {
    left: auto;
}

/* --- 3b. Frosted bar surface --------------------------------------------- */
/* Over the hero at the very top of banner pages: transparent (the theme paints
   a teal fill here) with a top-down charcoal scrim so white links/logo hold
   contrast on bright photography. */
body.banner-top header {
    background-color: transparent;
    background-image: linear-gradient(180deg, rgba(15, 17, 16, .74) 0%, rgba(15, 17, 16, .30) 60%, rgba(15, 17, 16, 0) 100%);
}

/* Scrolled state + all header-less (non-banner) pages: frosted charcoal glass
   with a hairline and soft drop shadow. Selectors mirror the theme's own
   #151515 rules exactly, so later cascade wins without !important. */
html.nav-down header,
html.nav-up header,
body:not(.banner-top) header {
    background-color: rgba(18, 20, 19, .82);
    -webkit-backdrop-filter: blur(14px) saturate(140%);
    backdrop-filter: blur(14px) saturate(140%);
    box-shadow: 0 1px 0 rgba(255, 255, 255, .06), 0 10px 30px rgba(0, 0, 0, .26);
}

/* --- 3c. Prominent logo lockup ------------------------------------------- */
/* The theme hides the wordmark and paints a 35x40 badge. Promote it to a white
   rounded chip so the WI.NE71 mark reads as a boutique logo on any background.
   body-prefixed selectors out-rank the per-page inline <style> (loaded after
   this file); the url() is relative to /css so ../media works on every page. */
body header #logo {
    top: 5px;
    left: 14px;
    width: auto;
    height: auto;
    z-index: 501;
}

body header #logo a {
    display: inline-block;
    width: 56px;
    height: 40px;
    padding: 0;
    overflow: hidden;
    text-indent: -9999px;
    background-image: url('../media/1033/wine_logo_green_150.png');
    background-repeat: no-repeat;
    background-position: center;
    background-size: auto 26px;
    background-color: #fff;
    border-radius: 10px;
    box-shadow: 0 3px 12px rgba(0, 0, 0, .16), inset 0 0 0 1px rgba(21, 21, 21, .05);
    transition: transform .25s var(--ease), box-shadow .25s var(--ease);
}

html.no-touch body header #logo a:hover {
    transform: translateY(-1px);
    box-shadow: 0 8px 22px rgba(0, 0, 0, .24), inset 0 0 0 1px rgba(21, 21, 21, .06);
}

/* --- 3d. Nav links ------------------------------------------------------- */
/* Larger, tracked links (14 -> 16px, easier to read); drop the heavy green
   block fill in favour of an animated underline. */
.navigation nav.main > ul > li > span a {
    font-weight: 500;
    font-size: 16px;
    letter-spacing: .05em;
    transition: color .2s var(--ease);
}

/* Neutralise the theme's full-item colour fills (green hover/active, teal
   focus) — the underline carries state now. Selectors copied from the theme
   verbatim so equal specificity + later cascade wins. */
.navigation nav.main > ul > li > span.active,
html.no-touch .navigation nav.main > ul > li:hover,
html.touch .navigation nav.main > ul > li.open,
.navigation nav.main > ul > li:focus-within {
    background-color: transparent;
}

/* Hide the theme's left 3px bar; use a centred bottom underline instead. */
.navigation nav.main > ul > li > span > a::before {
    display: none;
}

.navigation nav.main a:focus-visible {
    outline: 2px solid var(--teal-light);
    outline-offset: -3px;
    border-radius: 4px;
}

/* --- 3e. Dropdown (Mietobjekte) — frosted charcoal card ------------------ */
/* Replace the flat teal/green panel with a rounded frosted card matching the
   bar, as a single tidy column (the theme's 2x240 grid reads as a wide, empty
   slab here). Sized to a comfortable 264px so it never overflows the viewport
   edge when the bar widens on scroll. */
.navigation nav.main > ul > li.has-child.multi-col > ul {
    width: 264px;
    padding: 8px;
    border-radius: 14px;
    border: 1px solid rgba(255, 255, 255, .08);
    background-color: rgba(18, 20, 19, .94);
    -webkit-backdrop-filter: blur(16px) saturate(140%);
    backdrop-filter: blur(16px) saturate(140%);
    box-shadow: 0 22px 50px rgba(0, 0, 0, .36);
}

/* Collapse the theme's floated 2-column grid to one column. */
.navigation nav.main > ul > li.has-child.multi-col > ul > li {
    float: none;
    clear: none;
    width: 100%;
}

.navigation nav.main ul li ul li > span > a {
    padding: 11px 16px;
    font-size: 15px;
    border-radius: 9px;
    color: rgba(255, 255, 255, .88);
    transition: background-color .18s var(--ease), color .18s var(--ease);
}

/* Move hover/focus to the inner <a> so the highlight sits inside the card
   with rounded corners; neutralise the theme's full-row fill. */
html.no-touch .navigation nav.main > ul > li.has-child ul li:hover,
.navigation nav.main > ul > li.has-child ul li:focus-within {
    background-color: transparent;
}

html.no-touch .navigation nav.main ul li ul li > span > a:hover,
.navigation nav.main ul li ul li > span > a:focus-visible {
    background-color: rgba(76, 184, 166, .18);
    color: #fff;
}

/* Touch-mode submenu chevron — widen the hit zone */
html.touch .navigation nav.main ul li span i {
    width: 44px;
}

/* --- 3f. Desktop (>=992px): taller bar, centred items, underline --------- */
/* Bar height is 94px (a 30% increase over the previous 72px). Every coupled
   height/offset below is recomputed from 94px so the logo, links, chevron and
   underline stay vertically centred (aligned) in the taller bar, and the nav
   font is scaled up to 18px so it reads in proportion rather than floating in
   empty space. */
@media (min-width: 992px) {
    header,
    header .container {
        height: 94px;
    }

    /* Reserve space on header-less pages (theme reserves 50px). */
    body:not(.no-header):not(.banner-top) {
        padding-top: 94px;
    }

    /* Bigger logo chip, vertically centred in the taller bar: (94-60)/2 = 17. */
    body header #logo {
        top: 17px;
        left: clamp(18px, 3vw, 34px);
    }

    body header #logo a {
        width: 82px;
        height: 60px;
        background-size: auto 38px;
        border-radius: 12px;
    }

    /* Nav fills the 94px bar; links flex-centre vertically. */
    .navigation nav.main {
        height: 94px;
    }

    .navigation nav.main > ul > li > span > a {
        display: flex;
        align-items: center;
        height: 94px;
        padding: 0 20px;
        font-size: 18px;
    }

    .navigation nav.main > ul > li.has-child > span > a {
        padding-right: 46px;
    }

    /* Chevron centred in the 94px bar (icon ~10px; padding-top ≈ 41). */
    .navigation nav.main > ul > li > span i {
        height: 94px;
        padding-top: 41px;
        color: rgba(255, 255, 255, .7);
    }

    /* Animated teal underline — grows from the left on hover / when active.
       Sits just below the centred link text (bottom tracks the taller bar). */
    .navigation nav.main > ul > li > span > a::after {
        content: "";
        position: absolute;
        left: 20px;
        right: 20px;
        bottom: 28px;
        height: 2px;
        background: var(--teal-light);
        transform: scaleX(0);
        transform-origin: left center;
        transition: transform .28s var(--ease);
    }

    html.no-touch .navigation nav.main > ul > li:hover > span > a::after,
    .navigation nav.main > ul > li > span.active > a::after,
    .navigation nav.main > ul > li:focus-within > span > a::after {
        transform: scaleX(1);
    }

    /* Dropdown sits just below the taller bar. */
    .navigation nav.main > ul > li.has-child ul {
        top: 94px;
    }
}

/* ==========================================================================
   4. Hero banner (home + subpage banners share .item.short.c3-bg markup)
   ========================================================================== */

/* Taller stage. Matches the theme's triple selector so equal specificity wins. */
.apc.banner .item.short,
.apc.banner .item.short .container,
.apc.banner .item.short .row {
    height: 56vh;
    min-height: 430px;
}

/* Full-bleed photographic gradient replacing the boxy dark strip. .info is the
   absolute inset-0 / z-index 11 layer, so this never disturbs slick/lazysizes. */
.apc.banner .item .info {
    background: linear-gradient(180deg, rgba(10, 16, 14, .10) 0%, rgba(10, 16, 14, .38) 55%, rgba(10, 16, 14, .64) 100%);
}

/* Display-scale hero title. High specificity (#content ... .item ...) to beat
   the theme's ID rule #content>.apc.banner:first-child .heading.main. */
#content .apc.banner .item .heading.main {
    font-size: clamp(2.6rem, 5vw + 1rem, 4.25rem);
    font-weight: 800;
    letter-spacing: -.02em;
    line-height: 1.05;
    text-shadow: 0 2px 24px rgba(0, 0, 0, .35);
    text-wrap: balance;
}

/* Hero kicker — wide brand tracking */
.apc.banner .secondary-heading {
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .22em;
    margin-bottom: 14px;
}

/* ==========================================================================
   5. Statement / accent bands & deliberate "empty" surfaces
   ========================================================================== */

/* Deep-green statement bands get a refined gradient (index-only ids) */
section#pos_2543.c4-bg,
section#pos_1205.c4-bg {
    background-image: linear-gradient(135deg, var(--deep-darker) 0%, var(--deep) 55%, #238a72 100%);
}

section#pos_2543 .text-side .text,
section#pos_2543 .text-side .info {
    line-height: 1.7;
}

/* The kontakt map band: offline the vendored embed is blank, exposing a flat
   #4cb8a6 slab. Turn it into a compact brand gradient band. #map.c1-bg (1,1,0)
   beats the page-level inline #map media rules (1,0,0) — no !important needed. */
#map.c1-bg {
    height: 220px;
    background: linear-gradient(120deg, var(--deep-darker) 0%, var(--deep) 45%, var(--teal) 100%);
    border: 0;
}

#pos_1430 {
    padding: 0;
}

#pos_1430 .spc {
    margin-bottom: 0;
}

/* Genuinely image-less checkerboard tiles (data-bg="") read as accidents — make
   them a deliberate brand-wash panel. The [data-bg=""] attr only matches empty
   tiles, so lazysizes tiles with real photos are untouched.
   !important: lazysizes may write an inline background-image onto .image. */
.apc.pod-windows .item .info .image[data-bg=""] {
    background-image: linear-gradient(150deg, #f4faf8 0%, #e2f3ee 60%, #cdeae2 100%) !important;
    filter: none;
    transform: none;
}

.apc.pod-windows .item .info.c5-bg .secondary-heading {
    color: var(--deep-2);
}

/* AA safety: white text on a solid c1 teal tile fails — deepen to green */
.apc.pod-windows .item .info.c1-bg {
    background-color: var(--deep-2);
}

/* On c1-bg tiles the text is white (c5-text), so an empty .image overlay must
   carry the DEEP wash, not the light mint one above — the .image div paints on
   top of the .info background and would put white text back on near-white.
   !important: same lazysizes inline-style constraint as the light-wash rule. */
.apc.pod-windows .item .info.c1-bg .image[data-bg=""] {
    background-image: linear-gradient(150deg, #1f8a70 0%, var(--deep-2, #14614f) 55%, #0f4a3c 100%) !important;
}

.apc.pod-windows .item .info.c1-bg .image[data-bg=""] ~ .table .text,
.apc.pod-windows .item .info.c1-bg .image[data-bg=""] ~ .table .text p {
    color: rgba(255, 255, 255, .88);
}

/* Off-center centered blockquote column (col-md-8 without offset) + drop the
   ragged empty spacer paragraphs. float:none only affects this text-center
   pattern, so the Bootstrap grid stays intact. */
.apc .row.overview.text-center .info {
    float: none;
    margin-left: auto;
    margin-right: auto;
}

#pos_1502 .text .intro {
    display: block;
    max-width: 62ch;
    margin-left: auto;
    margin-right: auto;
    font-size: clamp(2rem, 1.2vw, 2.25rem);
    line-height: 1.75;
    color: var(--ink-soft);
}

/* Collapse the ragged whitespace-only spacer paragraphs after the intro. They
   are `<p> </p>` (a text node), so `:empty` never matched; the intro is the
   first `<p>`, so :not(:first-child) precisely targets the spacers. */
#pos_1502 .text p:not(:first-child) {
    margin: 0;
    font-size: 0;
    line-height: 0;
}

/* "Ihre Vorteile" list rhythm + brand ticks */
#pos_1205 .text ul {
    padding-left: 0;
    list-style: none;
}

#pos_1205 .text ul li {
    position: relative;
    padding: 7px 0 7px 26px;
    line-height: 1.6;
}

#pos_1205 .text ul li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 16px;
    width: 12px;
    height: 2px;
    background: var(--teal-light);
}

/* ==========================================================================
   6. Home offer cards (pale-teal promo pods)
   ========================================================================== */

/* Refine the ::before slab surface (theme paints rgba(123,220,203,.3)). Same
   specificity as theme -> later cascade wins. */
.content.c5-bg .promo-pods .row:not(.alt) .item::before {
    background-color: var(--card);
    background-image: none;
    border: 1px solid rgba(28, 122, 99, .14);
    border-radius: 14px;
    box-shadow: 0 1px 2px rgba(17, 24, 39, .05);
    transition: box-shadow .25s var(--ease), transform .25s var(--ease);
}

html.no-touch .content.c5-bg .promo-pods .row:not(.alt) .item:hover::before {
    box-shadow: 0 16px 40px rgba(17, 24, 39, .10);
    transform: translateY(-2px);
}

/* Breathing room + larger card heading */
.promo-pods .row:not(.alt) .item .heading,
.promo-pods .row:not(.alt) .item .text,
.promo-pods .row:not(.alt) .item .link {
    padding-left: 28px;
    padding-right: 28px;
}

.promo-pods .row:not(.alt) .item .heading {
    padding-top: 28px;
    font-size: 20px;
    font-weight: 700;
    letter-spacing: -.005em;
}

.promo-pods .row:not(.alt) .item .link {
    padding-bottom: 28px;
}

/* Recolor the failing red contact links — red stays reserved for the logo. */
.content.c5-bg .promo-pods .text a {
    color: var(--deep-2);
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 2px;
}

html.no-touch .content.c5-bg .promo-pods .text a:hover {
    color: var(--deep-strong);
}

/* ==========================================================================
   7. Tiles — pod-windows feature grid & mietobjekte listing grid
   ========================================================================== */

/* pod-windows tile headings on photos — display weight + legibility shadow */
.apc.pod-windows .item .heading.main {
    font-size: clamp(1.4rem, 2vw, 1.8rem);
    font-weight: 700;
    letter-spacing: -.01em;
    text-shadow: 0 1px 12px rgba(0, 0, 0, .30);
}

/* Slow the theme's hover image zoom to feel premium */
.apc.pod-windows .item .image {
    transition-duration: .4s;
}

/* --------------------------------------------------------------------------
   Text-on-photo overlay zone — bottom-anchored gradient band. Every pod-windows
   tile paints a real photo (.image, position:absolute inset-0 z-index:-1) behind
   text with no contrast layer, so a dark c3-text heading vanishes on a bright
   shot and a white c5-text heading vanishes on a light one. Fix: keep the top of
   the photo clear, raise a strong charcoal gradient from the bottom, and SINK the
   text onto that band (the theme centres it via div.table-cell vertical-align).
   Every label unifies to white / pale-brand. Scoped to :not([data-bg=""]) so the
   brand-wash empty tiles (section 5) keep their centred treatment. The band rides
   ::after on the photo layer, below the z-index:5 .table text sibling, and it
   scales/unblurs WITH the lazysizes image. */
.apc.pod-windows .item .info .image:not([data-bg=""])::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(to top,
        rgba(9, 15, 13, .84) 0%,
        rgba(9, 15, 13, .70) 18%,
        rgba(9, 15, 13, .32) 42%,
        rgba(9, 15, 13, 0) 66%);
}

/* Sink the text block to the bottom, over the band. Applied to ALL pod-windows
   tiles (not just photo ones) so a photo tile and its paired solid-colour empty
   tile keep their headings on the same baseline within a row. */
.apc.pod-windows .item .info .table .table-cell {
    vertical-align: bottom;
    padding: 0 clamp(20px, 3vw, 36px) clamp(22px, 4vh, 40px);
}

.apc.pod-windows .item .info .image:not([data-bg=""]) ~ .table .heading.main {
    color: #fff;
    text-shadow: 0 1px 14px rgba(0, 0, 0, .5);
}

.apc.pod-windows .item .info .image:not([data-bg=""]) ~ .table .secondary-heading {
    color: var(--teal-pale);
    text-shadow: 0 1px 10px rgba(0, 0, 0, .45);
}

.apc.pod-windows .item .info .image:not([data-bg=""]) ~ .table .text,
.apc.pod-windows .item .info .image:not([data-bg=""]) ~ .table .text p {
    color: rgba(255, 255, 255, .92);
}

/* "mehr Info" chip: light outline on the band (the resting state was overridden
   to deep green for light tiles, which fails on a dark band). Hover keeps the
   theme's solid-green fill with white text. */
.apc.pod-windows .item .info .image:not([data-bg=""]) ~ .table .link .btn {
    color: #fff;
    border-color: rgba(255, 255, 255, .8);
}

/* Mietobjekte dark translucent tiles — legible surface + hover elevation.
   Matches the theme's ::before selector exactly, later cascade wins. */
.content.c3-bg .listing:not(.short) .item::before {
    background-color: rgba(15, 23, 20, .55);
    border: 1px solid rgba(76, 184, 166, .35);
    border-radius: 12px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, .28);
    transition: background-color .2s var(--ease), transform .2s var(--ease), border-color .2s var(--ease);
}

html.no-touch .content.c3-bg .listing:not(.short) .item:hover::before {
    background-color: rgba(15, 23, 20, .72);
    border-color: var(--teal);
    transform: translateY(-3px);
}

.content.c3-bg .listing .item .heading {
    font-size: 19px;
    font-weight: 600;
    letter-spacing: .02em;
    margin: 0;
}

/* Grow the tile hit target to >=44px and give it a focus ring */
.content.c3-bg .listing .item .info a {
    display: block;
    padding: 18px 15px;
    min-height: 44px;
}

.content.c3-bg .listing .item .info a:focus-visible {
    outline: 2px solid var(--teal);
    outline-offset: 4px;
}

/* Detail-page gallery — uniform aspect thumbs + hover lift (lazysizes untouched) */
.spc.gallery .slides .item .image a {
    display: block;
    border-radius: 6px;
    overflow: hidden;
    transition: transform .25s var(--ease), box-shadow .25s var(--ease);
}

.spc.gallery .slides .item .image img {
    width: 100%;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    border-radius: 6px;
}

html.no-touch .spc.gallery .slides .item .image a:hover {
    transform: translateY(-3px);
    box-shadow: 0 10px 28px rgba(0, 0, 0, .28);
}

/* ==========================================================================
   8. Spec / price rows on detail pages
   Rows carry inline style="font-size:16px;border-bottom:1px solid #151515".
   ========================================================================== */

/* !important: the harsh row hairline colour is an inline style; only
   border-bottom-color:!important can out-rank it. */
.listing-with-form .items {
    border-bottom-color: #e2ece8 !important;
    padding: 10px 0;
    line-height: 1.6;
}

.listing-with-form .items-attributes {
    color: var(--ink-mute);
}

.listing-with-form .items-values {
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    color: var(--ink);
}

/* ==========================================================================
   9. Forms
   ========================================================================== */

.contact.form .form-control {
    min-height: 48px;
    padding: 10px 14px;
    font-size: 16px;
    color: #111827;
    border: 1px solid var(--deep-2);   /* 5.35:1 non-text — passes WCAG 1.4.11 */
    border-radius: 8px;
    box-shadow: none;
    transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
}

.contact.form textarea.form-control {
    min-height: 140px;
}

.contact.form .form-control:focus {
    border-color: #111827;
    box-shadow: var(--ring);          /* replaces the theme blur-glow focus */
    outline: 0;
}

/* Preserve jQuery-validate's red invalid border: the .contact.form .form-control
   rule above (0,3,0) out-ranks the theme's .input-validation-error rule (0,1,0),
   so match its specificity here to let the error state show. */
.contact.form .form-control.input-validation-error {
    border-color: #a94442;
}

.contact.form .form-control.input-validation-error:focus {
    border-color: #a94442;
    box-shadow: 0 0 0 3px rgba(169, 68, 66, .28);
}

.contact.form .form-control::placeholder {
    color: #6b7280;                    /* 4.83:1 — passes AA */
    opacity: 1;
}

.contact.form label.control-label {
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .04em;
    color: var(--ink-soft);
    padding-left: 0;
    margin-bottom: 6px;
}

/* Solid deep-green submit (theme teal #4cb8a6 fill failed AA at 2.4:1) */
.contact.form fieldset.buttons .btn.c1-bg {
    background-color: var(--deep-2);
    border-color: var(--deep-2);
    min-height: 48px;
    padding: 13px 32px;
    font-size: 15px;
    border-radius: 8px;
    box-shadow: 0 1px 2px rgba(17, 24, 39, .10);
    transition: background-color .2s var(--ease), transform .2s var(--ease), box-shadow .2s var(--ease);
}

html.no-touch .contact.form fieldset.buttons .btn.c1-bg:hover {
    background-color: var(--deep-strong);
    transform: translateY(-1px);
    box-shadow: 0 8px 20px rgba(25, 120, 104, .32);
}

/* Form cards — refined elevation */
.contact.form .inner.has-borders.c6-borders {
    border: 1px solid rgba(28, 122, 99, .16);
    border-radius: 14px;
    box-shadow: 0 12px 36px rgba(17, 24, 39, .06);
}

.apc.text-with-form .contact.form .inner {
    border-radius: 14px;
    box-shadow: 0 20px 50px rgba(0, 0, 0, .18);
}

/* ==========================================================================
   10. Buttons
   ========================================================================== */

.btn {
    border-radius: 8px;
    letter-spacing: .02em;
    transition: transform .2s var(--ease), box-shadow .2s var(--ease), background-color .2s var(--ease), color .2s var(--ease);
}

/* !important: theme sets .btn{outline:0 none !important}; restoring a keyboard
   focus ring requires !important to out-rank it. */
.btn:focus-visible {
    outline: 3px solid rgba(28, 122, 99, .45) !important;
    outline-offset: 2px;
}

/* Small chips ('Read more', 'mehr Infos', 'Google Map', cookie buttons) —
   one consistent premium pill with a >=44px target. */
.promo-pods .link .btn.btn-xs,
.apc.pod-windows .link .btn.btn-xs,
.swp .link .btn.btn-xs,
.cookie-notice .link .btn.btn-xs {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    padding: 11px 22px;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    border-width: 1.5px;
    border-radius: 999px;
}

/* Readable ink chips on light surfaces (teal text/border failed AA) */
.content.c5-bg .promo-pods .link .btn.c4-borders.c4-text,
.content.c5-bg .promo-pods .link .btn.c1-borders.c1-text,
.apc.pod-windows .item a.info.c5-bg .btn.c1-borders.c1-text {
    color: var(--deep-2);
    border-color: var(--deep-2);
}

html.no-touch .content.c5-bg .promo-pods .link .btn.c4-borders:hover,
html.no-touch .content.c5-bg .promo-pods .link .btn.c1-borders:hover,
html.no-touch .apc.pod-windows .item a.info.c5-bg .btn.c1-borders:hover {
    color: #fff;
    background-color: var(--deep-2);
    border-color: var(--deep-2);
}

/* ==========================================================================
   11. Cookie banner (fixed bottom-left card)
   Class toggling (.open/.closed) and the bottom:-100% closed state are owned
   by application.js — only geometry/decoration is restyled here.
   ========================================================================== */

.cookie-notice {
    left: 20px;
    max-width: 400px;
    border-radius: 14px;
    box-shadow: 0 18px 48px rgba(17, 24, 39, .18);
    border: 1px solid rgba(17, 24, 39, .08);
}

.cookie-notice.open {
    bottom: 20px;
}

.cookie-notice .inner {
    padding: 24px;
}

.cookie-notice .heading {
    font-size: 17px;
    font-weight: 700;
}

.cookie-notice .text {
    font-size: 14px;
    line-height: 1.6;
    color: var(--ink-soft);
}

.cookie-notice .link .accept-cookies {
    background-color: var(--deep-2);
    border-color: var(--deep-2);
    color: #fff;
}

.cookie-notice .link .decline-cookies {
    color: var(--ink-soft);
    border-color: #d1d5db;
}

html.no-touch .cookie-notice .link .accept-cookies:hover {
    background-color: var(--deep-strong);
    border-color: var(--deep-strong);
}

/* ==========================================================================
   12. Breadcrumb bar & back-to-top button
   ========================================================================== */

/* Blend the breadcrumb into the polished footer's #121212 stack */
.breadcrumb-trail {
    background-color: #121212;
    height: 56px;
}

.breadcrumb-trail ol {
    font-size: 13px;
    letter-spacing: .06em;
}

.breadcrumb-trail ol li a {
    height: 56px;
    color: rgba(255, 255, 255, .74);
    transition: color .2s var(--ease);
}

.breadcrumb-trail ol li span {
    padding-top: 21px;
    height: 56px;
}

html.no-touch .breadcrumb-trail ol li a:hover {
    color: var(--teal-light);
}

.breadcrumb-trail ol li.active {
    color: #a3a3a3;
}

.breadcrumb-trail ol li::before,
.breadcrumb-trail ol li::after {
    background-color: rgba(255, 255, 255, .18);
}

/* Back-to-top — detached, rounded, deep-green (teal-on-white icon failed) */
#top-link-block {
    right: 24px;
}

#top-link-block.affix.show {
    bottom: 24px;
}

#top-link-block a.btn {
    width: 52px;
    height: 52px;
    padding: 13px 0;
    border-radius: 50%;
    background-color: var(--deep-2);
    box-shadow: 0 8px 24px rgba(17, 24, 39, .22);
    transition: transform .2s var(--ease), background-color .2s var(--ease), box-shadow .2s var(--ease);
}

html.no-touch #top-link-block a.btn:hover {
    background-color: var(--deep-strong);
    transform: translateY(-2px);
}

/* !important: overrides .btn{outline:0 !important} */
#top-link-block a.btn:focus-visible {
    outline: 2px solid var(--teal-light) !important;
    outline-offset: 3px;
}

/* ==========================================================================
   13. Legal / long-form reading pages
   ========================================================================== */

.content-wrapper p {
    max-width: 72ch;
}

.content-wrapper h3 {
    margin-top: 2.2em;
    font-size: 1.35rem;
    letter-spacing: -.005em;
}

/* Blockquote pods — no faux-italics (no italic face is vendored); recolor the
   failing red cite mark to teal on the dark surface. */
.swp .blockquote-pod blockquote,
.swp .blockquote-pod blockquote p,
.blockquote-pod blockquote,
.blockquote-pod blockquote p {
    font-style: normal;
}

.c3-bg cite span.who {
    color: var(--teal-light);
}

/* ==========================================================================
   14. Utilities — focus, skip link, slick controls
   ========================================================================== */

/* Consistent focus-visible ring (theme suppressed focus site-wide) */
a:focus-visible,
button:focus-visible,
.form-control:focus-visible {
    outline: 2px solid var(--focus);
    outline-offset: 2px;
    border-radius: 2px;
}

/* Lighter ring on dark surfaces */
.content.c3-bg a:focus-visible,
.apc.banner a:focus-visible,
.breadcrumb-trail a:focus-visible {
    outline-color: var(--focus-dark);
}

/* Make the skip link visible & sized when focused */
.skip-to-content:focus {
    position: fixed;
    top: 8px;
    left: 8px;
    width: auto;
    height: auto;
    padding: 12px 20px;
    background: #111827;
    color: #fff;
    font-size: 14px;
    z-index: 2000;
    border-radius: 6px;
    outline: 3px solid var(--focus-dark);
    clip: auto;
    -webkit-clip-path: none;
    clip-path: none;
}

/* Slick dots/arrows — keep marks small but hold contrast on light frames */
.slick-prev,
.slick-next,
.slick-dots li button::before {
    filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .55));
}

/* ==========================================================================
   15. Responsive refinements (grid untouched)
   ========================================================================== */

@media (max-width: 1024px) {
    #map.c1-bg {
        height: 200px;
    }
}

@media (max-width: 767px) {
    /* Hero: keep it tall enough to breathe without dominating small screens */
    .apc.banner .item.short,
    .apc.banner .item.short .container,
    .apc.banner .item.short .row {
        height: 60vh;
        min-height: 360px;
    }

    /* Cookie card spans the width with even side gaps */
    .cookie-notice {
        left: 12px;
        right: 12px;
        max-width: none;
    }

    .cookie-notice.open {
        bottom: 12px;
    }

    .cookie-notice .inner {
        padding: 20px;
    }

    /* Detached controls closer to the mobile edge */
    #top-link-block {
        right: 16px;
    }

    #top-link-block.affix.show {
        bottom: 16px;
    }

    #map.c1-bg {
        height: 160px;
    }

    /* Slightly tighter card padding at phone widths */
    .promo-pods .row:not(.alt) .item .heading,
    .promo-pods .row:not(.alt) .item .text,
    .promo-pods .row:not(.alt) .item .link {
        padding-left: 22px;
        padding-right: 22px;
    }
}

/* ==========================================================================
   17. Lightbox / gallery popup (ekko-lightbox)
   Overrides the theme's fixed-1140px, top-anchored modal so the popup is
   centred, the frame shrinks to the image, and the prev/next + close controls
   hug the image instead of floating at a phantom 1140px box. Deep-green
   controls (#197868 = white 5.35:1, on-brand) replace the low-contrast teal.
   `!important` is confined to beating the theme's forced widths and paddings.
   ========================================================================== */

/* Stronger scrim so the page (slick carousel arrows) can't bleed through the
   transparent lightbox content. Only the lightbox uses a modal on this site. */
.modal-backdrop.in {
    background-color: #0a0f0d;
    opacity: .9 !important;
}

/* The fixed site header sits in the #site stacking context, so the backdrop
   can't dim it. Hide it while the (only) modal — the lightbox — is open, for a
   clean full-focus scrim. position:fixed means no reflow; reverts on close. */
body.modal-open header {
    visibility: hidden;
}

/* Centre the dialog and let it shrink to the image. Flex centring is scoped to
   `.in` (the shown state) so it never overrides Bootstrap's inline
   `display:none` on hide, and `transform:none` kills Bootstrap's own animated
   `.modal.in .modal-dialog` translate that would otherwise fight the centring. */
.ekko-lightbox {
    padding: clamp(16px, 4vh, 40px) clamp(16px, 4vw, 40px) !important;
}

.ekko-lightbox.modal.in {
    display: flex !important;
    align-items: center;
    justify-content: center;
    overflow: auto;
}

.ekko-lightbox .modal-dialog {
    position: static;
    transform: none !important;
    margin: 0 !important;
    padding: 0 !important;
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
}

/* Neutralise the theme's forced 1140px min/max on EVERY wrapper (header and
   footer included, or they drag the dialog back to 1140) so the frame
   collapses to the image, which is what the nav-overlay is measured against. */
.ekko-lightbox .modal-content,
.ekko-lightbox .modal-body,
.ekko-lightbox .modal-header,
.ekko-lightbox .modal-footer,
.ekko-lightbox .ekko-lightbox-container {
    min-width: 0 !important;
    max-width: none !important;
    width: auto !important;
    margin: 0 auto !important;
}

/* The card: WI.NE71 header bar + image, framed as one unit with rounded
   corners and a deep lift off the scrim. overflow:hidden clips the image to
   the card radius (the inset nav arrows stay inside the image, so uncut). */
.ekko-lightbox .modal-content {
    position: relative;
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 26px 70px rgba(0, 0, 0, .6);
}

/* Cap to the viewport, leaving room for the header bar above it. */
.ekko-lightbox img {
    max-width: min(1160px, 92vw);
    max-height: 80vh;
    width: auto !important;
    height: auto !important;
    border-radius: 0;
    box-shadow: none;
    display: block;
}

/* Prev / next: circular deep-green buttons inset over the image edges,
   vertically centred on the image. */
.ekko-lightbox-nav-overlay a::before {
    width: 52px;
    height: 52px;
    line-height: 52px !important;
    border-radius: 50%;
    font-size: 22px;
    background-color: #197868;
    box-shadow: 0 2px 12px rgba(0, 0, 0, .4);
}

.ekko-lightbox-nav-overlay .ion-chevron-left::before {
    left: 18px;
}

.ekko-lightbox-nav-overlay a.ion-chevron-right::before {
    right: 18px;
}

.ekko-lightbox-nav-overlay a:hover::before,
.ekko-lightbox-nav-overlay a:focus-visible::before {
    background-color: #14604f;
}

.ekko-lightbox-nav-overlay a:focus-visible::before {
    outline: 3px solid #fff;
    outline-offset: 2px;
}

/* WI.NE71 header bar: a charcoal strip across the top of the card carrying the
   brand wordmark (left) and the close button (right), with a deep-green brand
   accent line. Sits above the image because it is the first child of
   .modal-content in the stacked (block) flow. */
.ekko-lightbox .modal-header {
    display: flex !important;
    align-items: center;
    justify-content: space-between;
    height: 54px;
    padding: 0 10px 0 18px !important;
    background-color: #4bb8a5;
    border: 0 !important;
    border-bottom: 2px solid #197868 !important;
}

.ekko-lightbox .modal-header::before {
    content: "WI.NE71";
    color: #0e3a31;
    font-weight: 600;
    font-size: 15px;
    letter-spacing: .16em;
    line-height: 1;
}

.ekko-lightbox .modal-title {
    display: none;
}

/* The $5000 close button: a jewel-cut deep-green disc with a sheen gradient, a
   soft white ring, layered shadows, a crisp drawn X (not the raw glyph), and a
   90-degree spin on hover. Honours reduced-motion via the global block below. */
.ekko-lightbox .modal-header .close {
    position: relative;
    flex: 0 0 auto;
    width: 42px;
    height: 42px;
    margin: 0 0 0 auto;
    padding: 0;
    border: 1px solid rgba(255, 255, 255, .22);
    border-radius: 50%;
    opacity: 1;
    font-size: 0;
    color: transparent;
    text-shadow: none;
    /* Glossy dark orb: top-left highlight fading into near-black. */
    background-image: radial-gradient(120% 120% at 30% 24%, #3d3d3d 0%, #1d1d1d 54%, #0b0b0b 100%);
    /* Layered depth: drop shadow, a translucent halo ring that glows on the
       teal bar, a top bevel highlight, and an inner base shadow. */
    box-shadow:
        0 5px 16px rgba(0, 0, 0, .45),
        0 0 0 4px rgba(255, 255, 255, .14),
        inset 0 1px 1px rgba(255, 255, 255, .3),
        inset 0 -3px 6px rgba(0, 0, 0, .5);
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .25s ease, border-color .25s ease, filter .25s ease;
}

/* Drawn X — two rounded bars, centred, crisp at any scale. */
.ekko-lightbox .modal-header .close > span {
    font-size: 0;
    color: transparent;
}

.ekko-lightbox .modal-header .close::before,
.ekko-lightbox .modal-header .close::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 15px;
    height: 2px;
    border-radius: 2px;
    background-color: #fff;
    box-shadow: 0 0 1px rgba(0, 0, 0, .35);
}

.ekko-lightbox .modal-header .close::before {
    transform: translate(-50%, -50%) rotate(45deg);
}

.ekko-lightbox .modal-header .close::after {
    transform: translate(-50%, -50%) rotate(-45deg);
}

.ekko-lightbox .modal-header .close:hover,
.ekko-lightbox .modal-header .close:focus-visible {
    transform: scale(1.1);
    border-color: rgba(255, 255, 255, .45);
    filter: brightness(1.1);
    box-shadow:
        0 8px 24px rgba(0, 0, 0, .55),
        0 0 0 6px rgba(255, 255, 255, .22),
        inset 0 1px 1px rgba(255, 255, 255, .38),
        inset 0 -3px 6px rgba(0, 0, 0, .5);
}

.ekko-lightbox .modal-header .close:hover::before,
.ekko-lightbox .modal-header .close:focus-visible::before {
    transform: translate(-50%, -50%) rotate(135deg);
}

.ekko-lightbox .modal-header .close:hover::after,
.ekko-lightbox .modal-header .close:focus-visible::after {
    transform: translate(-50%, -50%) rotate(45deg);
}

.ekko-lightbox .modal-header .close:active {
    transform: scale(.96);
}

.ekko-lightbox .modal-header .close:focus-visible {
    outline: 3px solid #4cb8a6;
    outline-offset: 3px;
}

/* Drop the empty footer strip ekko appends. */
.ekko-lightbox .modal-footer:empty {
    display: none;
}

/* Compact controls on small screens (kept >= 40px for touch). */
@media (max-width: 600px) {
    .ekko-lightbox-nav-overlay a::before {
        width: 44px;
        height: 44px;
        line-height: 44px !important;
        font-size: 18px;
    }

    .ekko-lightbox-nav-overlay .ion-chevron-left::before {
        left: 8px;
    }

    .ekko-lightbox-nav-overlay a.ion-chevron-right::before {
        right: 8px;
    }

    .ekko-lightbox .modal-header {
        height: 48px;
        padding: 0 8px 0 14px !important;
    }

    .ekko-lightbox .modal-header::before {
        font-size: 13px;
        letter-spacing: .14em;
    }
}

/* ==========================================================================
   16. Reduced motion (mirrors wine71-footer.css; kept last)
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .01ms !important;
        scroll-behavior: auto !important;
    }

    /* Guarantee scroll-reveal content is never stuck invisible */
    .os-animation {
        opacity: 1 !important;
        transform: none !important;
    }
}
