Files
landingpage-haus-schleusingen/public/css/haus-schleusingen.css
Hermes a765497bc9
Some checks failed
Deploy Feature Branch to Test (haus.test.kies-media.de) / Deploy to Test Environment (push) Failing after 52s
Lint / PHP Syntax Check (push) Successful in 1m7s
PHPUnit / PHP Unit Tests (push) Failing after 37s
Lint / PHP Syntax Check (pull_request) Successful in 31s
Lint / HTML Lint (htmlhint) (push) Successful in 1m46s
Lint / CSS Lint (stylelint) (push) Successful in 1m51s
PHPUnit / PHP Unit Tests (pull_request) Failing after 45s
Lint / CSS Lint (stylelint) (pull_request) Successful in 1m20s
Lint / HTML Lint (htmlhint) (pull_request) Successful in 1m20s
fix(css): verhindere horizontalen scrollbalken in hero und pricing auf mobile
Zwei weitere Overflow-Quellen identifiziert nach intro-fix:

1. .hero-content: 397.47px breit auf 320px viewport
   Ursache: Flex-item ohne width/min-width constraint, h1 min-content
   (~349px) erweitert das parent bis ueber viewport
   Fix: max-width: 100%, min-width: 0, width: 100% in @media (width <= 900px)

2. .pricing-section: ohne mobile-padding override, .rent-notes grid
   '12rem 1fr' = 192px + 1fr (min ~272px) passt nicht in 320px-24px-24px
   Fix: padding: 4rem 1.5rem + .rent-notes grid-template-columns: 1fr
   (dt/dd stapeln sich auf mobile, dt als mini-label oben)

Vorher: docScrollW=359 bei viewport=320 (3 Overflow-Quellen)
Nachher: docScrollW=320 (intro, hero, pricing alle im viewport)

Tests: 141/141 gruen.
2026-06-05 20:12:18 +00:00

1667 lines
29 KiB
CSS
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* SKIP LINK */
.skip-link {
position: absolute;
left: -9999px;
top: 0;
background: var(--accent);
color: var(--white);
padding: 0.75rem 1.5rem;
font-size: 0.85rem;
font-weight: 500;
z-index: 200;
text-decoration: none;
transition: none;
}
.skip-link:focus {
left: 0;
outline: 2px solid var(--white);
outline-offset: 2px;
}
/* FOCUS VISIBLE */
*:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
.lightbox-close:focus-visible {
outline: 2px solid var(--white);
outline-offset: 2px;
}
button:focus-visible,
a:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
.grid-item:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
.floor-header:focus-visible {
outline: 2px solid var(--accent);
outline-offset: -2px;
}
:root {
--cream: #f5f0e8;
--warm: #e8dfd0;
--stone: #7a7062;
--stone-strong: #5a5043;
--dark: #1c1a17;
--charcoal: #2e2b26;
--accent: #8b6914;
--accent-light: #c49a2a;
--accent-strong: #5a450d;
--white: #fdfcfa;
/* Text variants — keep light text consistent across dark backgrounds */
--text-muted: #6e6557;
--text-muted-on-dark: rgb(245 240 232 / 82%);
--text-faint-on-dark: rgb(245 240 232 / 65%);
/* Nav: always visible, glass effect on top of hero */
--nav-bg: rgb(253 252 250 / 92%);
--nav-border: rgb(232 223 208 / 70%);
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
scroll-behavior: smooth;
}
body {
font-family: "DM Sans", sans-serif;
background: var(--white);
color: var(--dark);
overflow-x: hidden;
}
/* NAV — always visible, glass effect over hero */
nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 100;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.95rem 3rem;
background: var(--nav-bg);
backdrop-filter: saturate(180%) blur(14px);
border-bottom: 1px solid var(--nav-border);
transition:
padding 0.3s ease,
box-shadow 0.3s ease;
box-shadow: 0 1px 12px rgb(28 26 23 / 4%);
}
nav.scrolled {
padding: 0.65rem 3rem;
box-shadow: 0 2px 16px rgb(28 26 23 / 8%);
}
.nav-logo a {
display: inline-flex;
align-items: center;
gap: 0.5rem;
text-decoration: none;
color: var(--dark);
font-family: "Cormorant Garamond", serif;
font-size: 1.15rem;
font-weight: 600;
letter-spacing: 0.04em;
}
.nav-logo a:hover {
color: var(--accent);
}
.logo-icon {
font-size: 1.4rem;
line-height: 1;
}
/* Hide logo text everywhere — logo icon is the only brand mark */
.logo-text {
display: none !important;
}
.nav-links {
display: flex;
gap: 2.5rem;
list-style: none;
margin: 0;
padding: 0;
}
.nav-links a {
font-size: 0.8rem;
font-weight: 500;
letter-spacing: 0.1em;
text-transform: uppercase;
text-decoration: none;
color: var(--stone-strong);
transition: color 0.3s;
}
.nav-links a:hover {
color: var(--accent);
}
.nav-cta {
font-family: "DM Sans", sans-serif;
font-size: 0.82rem;
font-weight: 600;
letter-spacing: 0.12em;
text-transform: uppercase;
background: var(--accent);
color: var(--white);
border: none;
padding: 0.8rem 2rem;
cursor: pointer;
border-radius: 2px;
box-shadow: 0 2px 12px rgb(139 105 20 / 35%);
transition:
background 0.3s,
transform 0.2s,
box-shadow 0.3s;
text-decoration: none;
}
.nav-cta:hover {
background: var(--accent-light);
transform: translateY(-2px);
box-shadow: 0 4px 20px rgb(139 105 20 / 50%);
color: var(--white);
}
/* HAMBURGER */
.nav-hamburger {
display: none;
width: 44px;
height: 44px;
background: none;
border: none;
cursor: pointer;
position: relative;
z-index: 110;
align-items: center;
justify-content: center;
padding: 0;
color: var(--dark);
}
.nav-hamburger span,
.nav-hamburger span::before,
.nav-hamburger span::after {
display: block;
width: 22px;
height: 2px;
background: var(--dark);
border-radius: 1px;
transition:
transform 0.3s ease,
opacity 0.3s ease;
position: absolute;
left: 50%;
top: 50%;
}
.nav-hamburger span::before,
.nav-hamburger span::after {
content: "";
}
.nav-hamburger span::before {
transform: translate(-50%, calc(-50% - 7px));
}
.nav-hamburger span::after {
transform: translate(-50%, calc(-50% + 7px));
}
.nav-hamburger.active span {
background: transparent;
transform: translate(-50%, -50%);
}
.nav-hamburger.active span::before {
transform: translate(-50%, -50%) rotate(45deg);
background: var(--dark);
}
.nav-hamburger.active span::after {
transform: translate(-50%, -50%) rotate(-45deg);
background: var(--dark);
}
.nav-mobile-overlay {
display: none;
position: fixed;
inset: 0;
background: rgb(28 26 23 / 50%);
z-index: 90;
opacity: 0;
transition: opacity 0.3s ease;
}
.nav-mobile-overlay.active {
display: block;
opacity: 1;
}
/* HERO */
.hero {
position: relative;
height: 100vh;
min-height: 650px;
display: flex;
align-items: flex-end;
overflow: hidden;
}
.hero-bg {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center 20%;
transform: scale(1.05);
transition: transform 8s ease-out;
z-index: 0;
}
.hero-bg.loaded {
transform: scale(1);
}
.hero-overlay {
position: absolute;
inset: 0;
z-index: 1;
background: linear-gradient(
to top,
rgb(20 18 15 / 92%) 0%,
rgb(20 18 15 / 60%) 30%,
rgb(20 18 15 / 35%) 60%,
rgb(20 18 15 / 20%) 100%
);
pointer-events: none;
}
.hero-content {
position: relative;
z-index: 2;
padding: 0 3rem 5rem;
max-width: 900px;
opacity: 0;
transform: translateY(30px);
transition:
opacity 0.9s ease,
transform 0.9s ease;
}
.hero-content.visible {
opacity: 1;
transform: translateY(0);
}
.hero-tag {
display: inline-flex;
align-items: center;
gap: 8px;
font-size: 0.72rem;
font-weight: 500;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--accent-light);
margin-bottom: 1.25rem;
text-shadow: 0 1px 8px rgb(0 0 0 / 40%);
}
.hero-tag::before {
content: "";
width: 28px;
height: 1px;
background: var(--accent-light);
}
.hero h1 {
font-family: "Cormorant Garamond", serif;
font-size: clamp(2.8rem, 6vw, 5rem);
font-weight: 300;
line-height: 1.08;
color: var(--white);
letter-spacing: -0.01em;
margin-bottom: 1.5rem;
text-shadow:
0 2px 24px rgb(0 0 0 / 50%),
0 1px 3px rgb(0 0 0 / 30%);
}
.hero h1 em {
font-style: italic;
color: var(--accent-light);
}
.hero-meta {
display: flex;
gap: 2.5rem;
align-items: center;
font-size: 0.82rem;
color: var(--text-muted-on-dark);
letter-spacing: 0.05em;
text-shadow: 0 1px 6px rgb(0 0 0 / 40%);
}
.hero-meta strong {
color: var(--white);
}
.hero-scroll {
position: absolute;
bottom: 2rem;
right: 3rem;
display: flex;
flex-direction: column;
align-items: center;
gap: 6px;
font-size: 0.68rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: rgb(255 255 255 / 50%);
cursor: pointer;
}
.scroll-line {
width: 1px;
height: 40px;
background: rgb(255 255 255 / 30%);
animation: scroll-anim 2s infinite;
}
@keyframes scroll-anim {
0%,
100% {
transform: scaleY(1);
opacity: 0.3;
}
50% {
transform: scaleY(0.5);
opacity: 0.8;
}
}
/* FACTS STRIP */
.facts-strip {
display: grid;
grid-template-columns: repeat(4, 1fr);
background: var(--dark);
}
.fact {
padding: 2.25rem 2rem;
border-right: 1px solid rgb(255 255 255 / 7%);
text-align: center;
opacity: 0;
transform: translateY(20px);
transition:
opacity 0.6s ease,
transform 0.6s ease;
}
.fact:last-child {
border-right: none;
}
.fact.visible {
opacity: 1;
transform: translateY(0);
}
.fact-val {
font-family: "Cormorant Garamond", serif;
font-size: 2.2rem;
font-weight: 600;
color: var(--accent-light);
line-height: 1;
margin-bottom: 0.4rem;
}
.fact-label {
font-size: 0.72rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--text-muted-on-dark);
}
/* INTRO */
.intro {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0;
padding: 6rem 3rem;
max-width: 1200px;
margin: 0 auto;
align-items: center;
}
.intro-text {
padding-right: 4rem;
}
.section-eyebrow {
font-size: 0.72rem;
font-weight: 600;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--accent-strong);
margin-bottom: 1rem;
}
.intro-text h2 {
font-family: "Cormorant Garamond", serif;
font-size: clamp(2rem, 3.5vw, 3rem);
font-weight: 300;
line-height: 1.2;
margin-bottom: 1.5rem;
color: var(--charcoal);
}
.intro-text p {
font-size: 0.95rem;
line-height: 1.85;
color: var(--stone);
margin-bottom: 1rem;
}
.intro-stats {
display: flex;
gap: 2rem;
margin-top: 2rem;
padding-top: 2rem;
border-top: 1px solid var(--warm);
}
.istat-val {
font-family: "Cormorant Garamond", serif;
font-size: 1.8rem;
font-weight: 600;
color: var(--accent);
line-height: 1;
}
.istat-label {
font-size: 0.72rem;
letter-spacing: 0.08em;
color: var(--stone);
margin-top: 4px;
}
.intro-img {
position: relative;
height: 480px;
overflow: hidden;
}
.intro-img img {
width: 100%;
height: 100%;
object-fit: cover;
}
.intro-img-badge {
position: absolute;
bottom: -1px;
left: -1px;
background: var(--accent);
color: var(--white);
padding: 1rem 1.5rem;
font-size: 0.72rem;
letter-spacing: 0.12em;
text-transform: uppercase;
}
/* GALLERY — CSS Columns Masonry */
.gallery-section {
padding: 0 0 6rem;
background: var(--cream);
}
.gallery-header {
padding: 5rem 3rem 3rem;
max-width: 1400px;
margin: 0 auto;
}
.gallery-header h2 {
font-family: "Cormorant Garamond", serif;
font-size: clamp(2rem, 3vw, 2.8rem);
font-weight: 300;
color: var(--charcoal);
}
.masonry-grid {
max-width: 1400px;
margin: 0 auto;
padding: 0 1.5rem;
column-count: 4;
column-gap: 8px;
}
/* Hide the sizer not needed for CSS columns */
.grid-sizer {
display: none;
}
.grid-item {
break-inside: avoid;
margin-bottom: 8px;
overflow: hidden;
cursor: pointer;
position: relative;
border-radius: 3px;
}
.grid-item img {
width: 100%;
display: block;
border-radius: 3px;
transition:
transform 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94),
filter 0.5s ease;
}
.grid-item:hover img {
transform: scale(1.04);
filter: brightness(0.9);
}
.grid-item-label {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 2rem 1rem 0.85rem;
background: linear-gradient(transparent, rgb(28 26 23 / 75%));
font-size: 0.72rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--text-muted-on-dark);
border-radius: 0 0 3px 3px;
transform: translateY(6px);
opacity: 0;
transition:
transform 0.35s ease,
opacity 0.35s ease;
pointer-events: none;
}
.grid-item:hover .grid-item-label {
transform: translateY(0);
opacity: 1;
}
@media (width <= 1100px) {
.masonry-grid {
column-count: 3;
}
}
@media (width <= 768px) {
.masonry-grid {
column-count: 2;
column-gap: 6px;
padding: 0 1rem;
}
.grid-item {
margin-bottom: 6px;
}
.gallery-header {
padding: 3rem 1.5rem 2rem;
}
}
@media (width <= 480px) {
.masonry-grid {
column-count: 1;
padding: 0 1.5rem;
}
}
/* FLOORS */
.floors-section {
padding: 6rem 3rem;
max-width: 1200px;
margin: 0 auto;
}
.floors-section h2 {
font-family: "Cormorant Garamond", serif;
font-size: clamp(2rem, 3vw, 2.8rem);
font-weight: 300;
margin-bottom: 3rem;
color: var(--charcoal);
}
.floor-accordion {
border-top: 1px solid var(--warm);
}
.floor-item {
border-bottom: 1px solid var(--warm);
overflow: hidden;
}
.floor-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1.5rem 0;
cursor: pointer;
transition: color 0.2s;
}
.floor-header:hover .floor-title {
color: var(--accent);
}
.floor-title {
font-family: "Cormorant Garamond", serif;
font-size: 1.35rem;
font-weight: 400;
transition: color 0.2s;
}
.floor-size {
font-size: 0.78rem;
letter-spacing: 0.1em;
color: var(--stone);
display: flex;
align-items: center;
gap: 1rem;
}
.floor-icon {
width: 24px;
height: 24px;
border: 1px solid var(--warm);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.8rem;
color: var(--stone);
transition:
transform 0.3s,
border-color 0.3s;
}
.floor-item.open .floor-icon {
transform: rotate(45deg);
border-color: var(--accent);
color: var(--accent);
}
.floor-body {
display: none;
padding: 0 0 1.5rem;
max-width: 100%;
overflow: hidden;
}
.floor-rooms-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
gap: 8px;
}
.room-chip {
background: var(--cream);
padding: 0.75rem 1rem;
font-size: 0.82rem;
color: var(--charcoal);
display: flex;
justify-content: space-between;
align-items: center;
}
.room-chip-area {
font-size: 0.72rem;
color: var(--stone);
}
.floor-plan {
margin-top: 1.5rem;
border: 1px solid var(--warm);
background: var(--white);
overflow: hidden;
max-width: 100%;
}
.floor-plan img {
width: 100%;
max-width: 100%;
height: auto;
display: block;
object-fit: contain;
}
.floor-plan-multi {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1px;
background: var(--warm);
}
.floor-plan-multi img {
width: 100%;
max-width: 100%;
height: auto;
display: block;
object-fit: contain;
background: var(--white);
}
@media (width <= 768px) {
.floor-plan-multi {
grid-template-columns: 1fr;
}
}
/* PRICING */
.pricing-section {
background: var(--dark);
padding: 6rem 3rem;
}
.pricing-inner {
max-width: 1200px;
margin: 0 auto;
}
.pricing-section .section-eyebrow {
color: var(--accent-light);
}
.pricing-section h2 {
font-family: "Cormorant Garamond", serif;
font-size: clamp(2rem, 3vw, 2.8rem);
font-weight: 300;
color: var(--white);
margin-bottom: 3rem;
}
.price-cards {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1px;
background: rgb(255 255 255 / 7%);
}
.price-card {
background: var(--charcoal);
padding: 2.5rem 2rem;
transition: background 0.3s;
}
.price-card:hover {
background: #383530;
}
.price-card.highlight {
background: var(--accent);
}
.price-card.highlight:hover {
background: var(--accent-light);
}
.pc-label {
font-size: 0.72rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--text-muted-on-dark);
margin-bottom: 1rem;
}
.price-card .price-label {
display: block;
font-size: 0.72rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--text-muted-on-dark);
margin-bottom: 0.8rem;
}
.price-card .price-value {
display: block;
font-family: "Cormorant Garamond", serif;
font-size: 2.8rem;
font-weight: 600;
line-height: 1;
color: var(--white);
margin-bottom: 0.3rem;
}
.price-card .price-unit {
display: block;
font-size: 0.78rem;
color: var(--text-muted-on-dark);
}
.price-card.highlight .price-label,
.price-card.highlight .price-unit {
color: var(--text-muted-on-dark);
}
.pricing-section .rent-notes {
margin-top: 2.5rem;
display: grid;
grid-template-columns: 12rem 1fr;
gap: 0.5rem 1.5rem;
}
.pricing-section .rent-notes dt {
font-size: 0.78rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--text-muted-on-dark);
}
.pricing-section .rent-notes dd {
margin: 0;
color: var(--white);
font-size: 0.95rem;
}
.price-note {
margin-top: 2.5rem;
padding-top: 2.5rem;
border-top: 1px solid rgb(255 255 255 / 7%);
display: flex;
gap: 3rem;
}
.pn-item {
font-size: 0.85rem;
color: var(--stone);
line-height: 1.7;
}
.pn-item strong {
color: var(--white);
display: block;
font-weight: 500;
margin-bottom: 2px;
}
/* LAGE */
.lage-section {
padding: 6rem 3rem 0;
max-width: 1200px;
margin: 0 auto;
}
.lage-section h2 {
font-family: "Cormorant Garamond", serif;
font-size: clamp(2rem, 3vw, 2.8rem);
font-weight: 300;
margin-bottom: 3rem;
color: var(--charcoal);
}
.lage-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
margin-bottom: 4rem;
}
.lage-features {
list-style: none;
margin: 0;
padding: 0;
display: contents;
}
.lage-features > li {
background: var(--white);
padding: 2rem;
display: flex;
flex-direction: column;
gap: 0.5rem;
border: 1px solid var(--warm);
border-radius: 2px;
transition:
background 0.3s,
transform 0.3s,
box-shadow 0.3s;
}
.lage-features > li::before {
content: "";
display: block;
width: 32px;
height: 32px;
background: var(--accent);
mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5z'/></svg>")
center/contain no-repeat;
margin-bottom: 0.5rem;
}
.lage-features > li:hover {
background: var(--cream);
transform: translateY(-2px);
box-shadow: 0 6px 24px rgb(28 26 23 / 8%);
}
.lage-feature-title {
font-size: 1rem;
font-weight: 600;
color: var(--dark);
letter-spacing: 0.01em;
}
.lage-feature-desc {
font-size: 0.88rem;
color: var(--text-muted);
line-height: 1.6;
}
.lage-map-wrapper {
position: relative;
left: 50%;
right: 50%;
width: 100vw;
margin: 0 -50vw;
border-top: 1px solid var(--warm);
border-bottom: 1px solid var(--warm);
background: var(--white);
overflow: hidden;
}
.lage-map-wrapper iframe {
display: block;
width: 100%;
height: 480px;
border: 0;
filter: grayscale(30%) contrast(1.05);
transition: filter 0.4s ease;
}
.lage-map-wrapper:hover iframe {
filter: grayscale(0%) contrast(1);
}
.lage-address {
max-width: 1200px;
margin: 0 auto;
padding: 1.5rem 3rem;
font-size: 0.9rem;
line-height: 1.6;
color: var(--text-muted);
text-align: center;
}
.lage-address strong {
color: var(--dark);
font-weight: 600;
}
@media (width <= 900px) {
.lage-grid {
grid-template-columns: 1fr;
gap: 1rem;
}
.lage-map-wrapper iframe {
height: 320px;
}
.lage-address {
padding: 1.25rem 1.5rem;
}
}
/* CONTACT */
.contact-section {
background: var(--cream);
padding: 6rem 3rem;
}
.contact-inner {
max-width: 700px;
margin: 0 auto;
text-align: center;
}
.contact-inner h2 {
font-family: "Cormorant Garamond", serif;
font-size: clamp(2.2rem, 4vw, 3.5rem);
font-weight: 300;
line-height: 1.15;
color: var(--charcoal);
margin-bottom: 1rem;
}
.contact-inner h2 em {
font-style: italic;
color: var(--accent);
}
.contact-inner p {
font-size: 0.9rem;
color: var(--stone);
line-height: 1.8;
margin-bottom: 2.5rem;
}
.contact-form {
text-align: left;
}
.form-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin-bottom: 1rem;
}
.form-field {
display: flex;
flex-direction: column;
gap: 0.4rem;
}
.form-field label {
font-size: 0.72rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--stone);
}
.form-field input,
.form-field textarea,
.form-field select {
font-family: "DM Sans", sans-serif;
font-size: 0.88rem;
background: var(--white);
border: 1px solid var(--warm);
border-radius: 2px;
padding: 0.85rem 1rem;
color: var(--dark);
outline: none;
transition:
border-color 0.2s,
box-shadow 0.2s;
resize: none;
}
.form-field input:hover,
.form-field textarea:hover,
.form-field select:hover {
border-color: var(--stone);
}
.form-field input:focus,
.form-field textarea:focus,
.form-field select:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px rgb(139 105 20 / 12%);
}
.form-field select {
appearance: none;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' stroke='%237a7062' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/></svg>");
background-repeat: no-repeat;
background-position: right 1rem center;
padding-right: 2.5rem;
cursor: pointer;
}
.form-field.full {
grid-column: span 2;
}
.btn-submit,
.form-submit {
font-family: "DM Sans", sans-serif;
font-size: 0.78rem;
font-weight: 600;
letter-spacing: 0.15em;
text-transform: uppercase;
background: var(--accent);
color: var(--white);
border: none;
border-radius: 2px;
width: 100%;
padding: 1.15rem;
cursor: pointer;
margin-top: 0.5rem;
box-shadow: 0 2px 12px rgb(139 105 20 / 25%);
transition:
background 0.3s,
transform 0.2s,
box-shadow 0.3s;
}
.btn-submit:hover,
.form-submit:hover {
background: var(--accent-light);
transform: translateY(-1px);
box-shadow: 0 4px 20px rgb(139 105 20 / 40%);
}
.btn-submit:active,
.form-submit:active {
transform: translateY(0);
}
.form-errors {
background: #fdf2f2;
border: 1px solid #e8a0a0;
padding: 1rem 1.2rem;
margin-bottom: 1.2rem;
}
.form-errors ul {
margin: 0;
padding: 0 0 0 1.2rem;
list-style: disc;
}
.form-errors li {
font-size: 0.85rem;
color: #9e2c2c;
line-height: 1.6;
}
.hp-field {
position: absolute;
left: -9999px;
top: -9999px;
width: 0;
height: 0;
overflow: hidden;
opacity: 0;
pointer-events: none;
}
.form-success {
display: none;
text-align: center;
padding: 3rem;
background: var(--white);
border: 1px solid var(--warm);
}
.form-success p {
font-family: "Cormorant Garamond", serif;
font-size: 1.5rem;
color: var(--charcoal);
}
.form-success small {
font-size: 0.82rem;
color: var(--stone);
}
.contact-direct {
text-align: center;
margin-top: 1.5rem;
font-size: 0.85rem;
color: var(--text-muted);
}
.contact-direct a {
color: var(--accent);
text-decoration: none;
font-weight: 600;
transition: color 0.2s;
}
.contact-direct a:hover {
color: var(--accent-light);
text-decoration: underline;
}
.contact-details {
text-align: center;
margin-top: 2rem;
padding-top: 1.5rem;
border-top: 1px solid var(--warm);
}
.contact-details p {
font-size: 0.95rem;
color: var(--stone);
}
.contact-details a {
color: var(--accent);
text-decoration: none;
font-weight: 600;
transition: color 0.2s;
}
.contact-details a:hover {
color: var(--accent-light);
}
/* FOOTER */
footer {
background: var(--dark);
padding: 2.5rem 3rem;
display: flex;
justify-content: space-between;
align-items: center;
border-top: 1px solid rgb(255 255 255 / 6%);
}
.footer-logo {
font-family: "Cormorant Garamond", serif;
font-size: 1rem;
font-weight: 600;
color: var(--white);
letter-spacing: 0.04em;
}
.footer-links {
display: flex;
gap: 2rem;
}
.footer-links a {
font-size: 0.72rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--stone);
text-decoration: none;
transition: color 0.2s;
}
.footer-links a:hover {
color: var(--accent-light);
}
/* LIGHTBOX */
.lightbox {
display: none;
position: fixed;
inset: 0;
z-index: 1000;
background: rgb(28 26 23 / 96%);
align-items: center;
justify-content: center;
}
.lightbox.open {
display: flex;
}
.lightbox img {
max-width: 90vw;
max-height: 85vh;
object-fit: contain;
}
.lightbox-close {
position: absolute;
top: 1.5rem;
right: 2rem;
font-size: 1.5rem;
color: var(--white);
cursor: pointer;
background: none;
border: none;
transition: color 0.2s;
}
.lightbox-close:hover {
color: var(--accent-light);
}
/* RESPONSIVE */
@media (width <= 900px) {
nav,
nav.scrolled {
padding: 1rem 1.5rem;
}
.nav-cta {
display: none;
}
.nav-links {
display: none;
}
.nav-hamburger {
display: flex;
}
/* Logo: keep icon, hide text on small viewports */
.logo-text {
display: none;
}
/* Mobile slide-down nav */
nav.mobile-open .nav-links {
display: flex;
flex-direction: column;
position: fixed;
top: 0;
left: 0;
right: 0;
background: rgb(253 252 250 / 98%);
backdrop-filter: blur(12px);
padding: 5rem 1.5rem 2rem;
gap: 0;
z-index: 95;
border-bottom: 1px solid var(--warm);
animation: slide-down 0.3s ease;
}
nav.mobile-open .nav-links a {
color: var(--charcoal);
font-size: 1rem;
padding: 1rem 0;
border-bottom: 1px solid var(--warm);
display: flex;
align-items: center;
min-height: 44px;
}
nav.mobile-open .nav-hamburger span,
nav.mobile-open .nav-hamburger span::before,
nav.mobile-open .nav-hamburger span::after {
background: var(--dark);
}
nav.mobile-open .nav-hamburger.active span {
background: transparent;
}
@keyframes slide-down {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.hero-content {
padding: 0 1.5rem 4rem;
max-width: 100%;
min-width: 0;
width: 100%;
}
.facts-strip {
grid-template-columns: repeat(2, 1fr);
}
.fact {
border-right: none;
border-bottom: 1px solid rgb(255 255 255 / 7%);
}
.intro {
grid-template-columns: 1fr;
padding: 3rem 1.5rem;
}
.intro-grid {
min-width: 0;
}
.intro-text {
padding-right: 0;
margin-bottom: 2rem;
}
.intro-stats {
flex-wrap: wrap;
gap: 1.5rem 2rem;
}
.intro-stats > .stat {
flex: 1 1 auto;
min-width: 0;
}
.masonry-grid {
column-count: 2;
}
.gallery-header {
padding: 3rem 1.5rem 2rem;
}
.price-cards {
grid-template-columns: 1fr;
}
.price-note {
flex-direction: column;
gap: 1.5rem;
}
.lage-grid {
grid-template-columns: 1fr;
}
.form-row {
grid-template-columns: 1fr;
}
.form-field.full {
grid-column: span 1;
}
.floors-section,
.lage-section,
.contact-section {
padding: 4rem 1.5rem;
}
.pricing-section {
padding: 4rem 1.5rem;
}
.pricing-section .rent-notes {
grid-template-columns: 1fr;
gap: 0.25rem 0;
}
footer {
flex-direction: column;
gap: 1.5rem;
text-align: center;
}
}
/* LOCALE SWITCHER — single <details> dropdown, flag-sized trigger.
Design goals (after Martin-feedback round 3):
- The flag is the visual anchor of every row, not a tiny icon
drowning in padding.
- Trigger is a 44×44 touch target with the flag centred, no
artificial 1px outline (real flag-icons need no border).
- Menu rows are 40px+ tall with comfortable flag+label spacing.
- No FOUC on open: SVGs load eager (4 small files). */
.locale-switcher {
position: relative;
display: inline-block;
}
.locale-switcher__trigger {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 6px;
min-height: 44px;
border: none;
border-radius: 6px;
background: transparent;
cursor: pointer;
list-style: none;
color: var(--dark);
transition:
background 0.2s,
transform 0.15s;
}
.locale-switcher__trigger::-webkit-details-marker {
display: none;
}
.locale-switcher__trigger::marker {
content: "";
}
.locale-switcher__trigger:hover,
.locale-switcher__trigger:focus-visible {
background: rgb(0 0 0 / 6%);
outline: none;
}
.locale-switcher__current {
display: inline-flex;
align-items: center;
}
.locale-switcher__caret {
font-size: 0.7rem;
line-height: 1;
color: inherit;
transition: transform 0.2s ease;
}
.locale-switcher[open] .locale-switcher__caret {
transform: rotate(180deg);
}
.locale-switcher__menu,
.locale-switcher__menu li {
list-style: none;
}
.locale-switcher__menu {
position: absolute;
top: calc(100% + 6px);
right: 0;
min-width: 180px;
margin: 0;
padding: 6px;
background: var(--white);
border: 1px solid var(--warm);
border-radius: 10px;
box-shadow:
0 1px 2px rgb(0 0 0 / 6%),
0 8px 24px rgb(0 0 0 / 14%);
z-index: 60;
}
.locale-switcher__option {
display: flex;
align-items: center;
gap: 10px;
padding: 8px 10px;
border-radius: 6px;
text-decoration: none;
color: var(--dark);
font-size: 0.9rem;
font-weight: 500;
}
.locale-switcher__option.is-current {
background: var(--cream);
color: var(--accent-strong);
font-weight: 600;
}
.locale-switcher__option:hover,
.locale-switcher__option:focus-visible {
background: var(--warm);
outline: none;
}
/* Flag is the visual anchor: 32×24, no border, no rounded corners
(flags look better as crisp rectangles than as pills). */
.locale-switcher .flag {
width: 32px;
height: 24px;
flex: 0 0 32px;
display: block;
}
.locale-switcher__label {
white-space: nowrap;
}
/* Trigger on transparent nav (top-of-page): white caret on dark bg */
nav:not(.scrolled) .locale-switcher__trigger {
color: var(--white);
}
nav:not(.scrolled) .locale-switcher__trigger:hover,
nav:not(.scrolled) .locale-switcher__trigger:focus-visible {
background: rgb(255 255 255 / 12%);
}
/* Flag stays the same regardless of nav state — SVG defines its own colours */
/* VISUALLY HIDDEN (a11y) */
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip-path: inset(50%);
white-space: nowrap;
border: 0;
}
/* FORM FIELD ERRORS (sub-Issue E) */
.form-field-error {
margin: 0.375rem 0 0;
font-size: 0.875rem;
color: #b91c1c;
line-height: 1.4;
}
.form-field input[aria-invalid="true"],
.form-field textarea[aria-invalid="true"] {
border-color: #b91c1c;
outline-color: #b91c1c;
}
.form-field input[aria-invalid="true"]:focus-visible,
.form-field textarea[aria-invalid="true"]:focus-visible {
outline: 2px solid #b91c1c;
outline-offset: 2px;
}