/* ======================================== Local Fonts ======================================== */ @font-face { font-family: "Outfit"; src: url("fonts/outfit-regular.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: "Outfit"; src: url("fonts/outfit-500.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; } @font-face { font-family: "Outfit"; src: url("fonts/outfit-600.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; } @font-face { font-family: "Outfit"; src: url("fonts/outfit-700.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; } @font-face { font-family: "Source Sans 3"; src: url("fonts/source-sans-3-regular.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: "Source Sans 3"; src: url("fonts/source-sans-3-500.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; } @font-face { font-family: "Source Sans 3"; src: url("fonts/source-sans-3-600.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; } /* ======================================== CSS Variables ======================================== */ :root { --color-black: #0a0a0a; --color-anthracite: #141414; --color-dark-grey: #1a1a1a; --color-mid-grey: #2a2a2a; --color-border: #333333; --color-text: #f5f5f5; --color-text-secondary: #c7c5c5; --color-text-muted: #aaaaaa; --font-headline: "Outfit", sans-serif; --font-body: "Source Sans 3", sans-serif; --spacing-xs: 0.5rem; --spacing-sm: 1rem; --spacing-md: 2rem; --spacing-lg: 4rem; --spacing-xl: 8rem; --spacing-2xl: 12rem; --max-width: 1200px; --transition: 0.3s ease; /* MARKE MACHT Signal-Farbe */ --color-mm-accent: #e8175d; --color-mm-accent-soft: #cc527a; } /* ======================================== Reset & Base ======================================== */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; font-size: 16px; } body { font-family: var(--font-body); font-size: 1.125rem; line-height: 1.7; color: var(--color-text); background-color: var(--color-black); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .skip-link { position: absolute; top: -100%; left: var(--spacing-sm); z-index: 10000; padding: 0.5rem 1rem; background: var(--color-text); color: var(--color-black); text-decoration: none; font-weight: 600; } .skip-link:focus { top: var(--spacing-sm); } ::selection { background: var(--color-text); color: var(--color-black); } /* ======================================== Typography ======================================== */ h1, h2, h3, h4 { font-family: var(--font-headline); font-weight: 600; line-height: 1.2; letter-spacing: -0.02em; } h1 { font-size: clamp(2.5rem, 6vw, 4rem); font-weight: 700; } h2 { font-size: clamp(1.75rem, 4vw, 2.5rem); margin-bottom: var(--spacing-md); } h3 { font-size: clamp(1.25rem, 2.5vw, 1.5rem); margin-bottom: var(--spacing-sm); color: var(--color-text); } h4 { font-size: clamp(1rem, 2vw, 1.25rem); margin-bottom: var(--spacing-sm); margin-top: var(--spacing-md); color: var(--color-text); } h5 { font-size: 1rem; margin-bottom: var(--spacing-xs); margin-top: var(--spacing-sm); color: var(--color-text-secondary); } p { margin-bottom: var(--spacing-sm); color: var(--color-text-secondary); } ul { margin-bottom: var(--spacing-sm); padding-left: var(--spacing-md); color: var(--color-text-secondary); } li { margin-bottom: var(--spacing-xs); line-height: 1.7; } hr { border: none; border-top: 1px solid var(--color-border); margin: var(--spacing-lg) 0; } a { color: var(--color-text); text-decoration: none; transition: var(--transition); } a:hover { color: var(--color-text-secondary); } /* ======================================== Layout ======================================== */ .container { width: 100%; max-width: var(--max-width); margin: 0 auto; padding: 0 var(--spacing-md); } section { padding: var(--spacing-xl) 0; } @media (min-width: 768px) { section { padding: var(--spacing-2xl) 0; } } /* ======================================== Navigation ======================================== */ .nav { position: fixed; top: 0; left: 0; right: 0; z-index: 1000; padding: var(--spacing-md) 0; background: linear-gradient( to bottom, var(--color-black) 0%, transparent 100% ); transition: var(--transition); } .nav.scrolled { background: rgba(10, 10, 10, 0.95); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); } .nav-inner { display: flex; justify-content: space-between; align-items: center; } .nav-logo { font-family: var(--font-headline); font-size: 1.125rem; font-weight: 600; letter-spacing: 0.05em; text-transform: uppercase; display: flex; align-items: center; gap: 0.5rem; } .nav-logo-img { height: 28px; width: auto; } .nav-links { display: none; list-style: none; gap: var(--spacing-md); } @media (min-width: 768px) { .nav-links { display: flex; } } .nav-links a { font-family: var(--font-headline); font-size: 0.875rem; font-weight: 500; letter-spacing: 0.05em; text-transform: uppercase; color: var(--color-text-secondary); position: relative; } .nav-links a::after { content: ""; position: absolute; bottom: -4px; left: 0; width: 0; height: 1px; background: var(--color-text); transition: var(--transition); } .nav-links a:hover { color: var(--color-text); } .nav-links a:hover::after { width: 100%; } /* Mobile Menu Toggle */ .nav-toggle { display: flex; flex-direction: column; gap: 5px; background: none; border: none; cursor: pointer; padding: 5px; } @media (min-width: 768px) { .nav-toggle { display: none; } } .nav-toggle span { display: block; width: 24px; height: 2px; background: var(--color-text); transition: var(--transition); } /* Mobile Menu */ .nav-mobile { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: var(--color-black); z-index: 999; padding: var(--spacing-xl) var(--spacing-md); } .nav-mobile.active { display: flex; flex-direction: column; justify-content: center; align-items: center; } .nav-mobile a { font-family: var(--font-headline); font-size: 2rem; font-weight: 600; margin-bottom: var(--spacing-md); } /* ======================================== Hero Section ======================================== */ .hero { min-height: 100vh; display: flex; align-items: center; position: relative; overflow: hidden; } .hero-background { position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: -1; } .hero-background img { width: 100%; height: 100%; object-fit: cover; opacity: 0.4; } .hero-background::before { content: ""; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient( 180deg, rgba(10, 10, 10, 0.6) 0%, rgba(10, 10, 10, 0.3) 50%, rgba(10, 10, 10, 0.8) 100% ); z-index: 1; } /* Abstract geometric shapes */ .hero-shape { position: absolute; background: linear-gradient( 135deg, var(--color-mid-grey) 0%, var(--color-dark-grey) 100% ); opacity: 0.15; } .hero-shape-1 { width: 600px; height: 600px; top: -200px; right: -200px; transform: rotate(45deg); } .hero-shape-2 { width: 300px; height: 800px; bottom: -200px; left: 10%; transform: rotate(-15deg); } .hero-shape-3 { width: 2px; height: 400px; top: 20%; right: 20%; background: var(--color-border); opacity: 0.3; } .hero-content { position: relative; z-index: 1; max-width: 800px; } .hero h1 { margin-bottom: var(--spacing-md); animation: fadeInUp 0.8s ease forwards; } .hero-text { font-size: 1.25rem; color: var(--color-text-secondary); margin-bottom: var(--spacing-lg); max-width: 600px; animation: fadeInUp 0.8s ease 0.2s forwards; opacity: 0; } .hero-text p { margin-bottom: var(--spacing-sm); } .hero-text p:last-child { margin-bottom: 0; } .hero-cta { display: flex; flex-wrap: wrap; gap: var(--spacing-sm); animation: fadeInUp 0.8s ease 0.4s forwards; opacity: 0; } .hero-meta { position: absolute; bottom: var(--spacing-lg); right: var(--spacing-md); animation: fadeIn 1s ease 0.8s forwards; opacity: 0; display: flex; align-items: center; gap: var(--spacing-sm); } .hero-portrait { width: 100px; height: 100px; object-fit: cover; border: 1px solid var(--color-text); } .hero-meta-text p { font-size: 0.875rem; color: var(--color-text-muted); margin-bottom: 0; } .hero-meta-text strong { color: var(--color-text-secondary); font-weight: 500; } /* ======================================== Buttons ======================================== */ .btn { display: inline-flex; align-items: center; gap: var(--spacing-xs); font-family: var(--font-headline); font-size: 0.875rem; font-weight: 600; letter-spacing: 0.05em; text-transform: uppercase; padding: 1rem 2rem; border: 1px solid var(--color-text); background: transparent; color: var(--color-text); cursor: pointer; transition: var(--transition); position: relative; overflow: hidden; } .btn::before { content: ""; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: var(--color-text); transition: var(--transition); z-index: -1; } .btn:hover { color: var(--color-black); } .btn:hover::before { left: 0; } .btn-arrow { transition: var(--transition); } .btn:hover .btn-arrow { transform: translateX(4px); } .btn-arrow-down { line-height: 1; transition: var(--transition); } .btn--next:hover .btn-arrow-down { transform: translateY(3px); } .btn--mm { border-color: var(--color-mm-accent); color: var(--color-mm-accent); } .btn--mm::before { background: var(--color-mm-accent); } .btn--mm:hover { color: var(--color-text); } .section-cta { display: flex; flex-wrap: wrap; gap: var(--spacing-sm); align-items: center; } /* ======================================== Section Headers ======================================== */ .section-header { margin-bottom: var(--spacing-lg); } .section-label { font-family: var(--font-headline); font-size: 0.75rem; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; color: var(--color-text-muted); margin-bottom: var(--spacing-sm); } /* ======================================== Haltung Section ======================================== */ .haltung { background: var(--color-anthracite); position: relative; } .haltung::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient( 90deg, transparent, var(--color-border), transparent ); } .haltung-grid { display: grid; grid-template-columns: 1fr; gap: var(--spacing-lg); } @media (min-width: 768px) { .haltung-grid { grid-template-columns: repeat(2, 1fr); } } .haltung-item { display: flex; transition: var(--transition); overflow: hidden; } .haltung-image { width: 80px; min-width: 80px; overflow: hidden; margin-left: -1px; } .haltung-image img { width: 100%; height: 100%; object-fit: cover; opacity: 0.5; transition: var(--transition); } .haltung-item:hover .haltung-image img { opacity: 0.7; } .haltung-content { padding: var(--spacing-md); } .haltung-item h3 { font-size: 1.25rem; margin-bottom: var(--spacing-sm); } .haltung-item p { font-size: 1rem; line-height: 1.8; } .haltung-cta { margin-top: var(--spacing-xl); padding-top: var(--spacing-lg); border-top: 1px solid var(--color-border); } .haltung-cta p { font-size: 1.125rem; margin-bottom: var(--spacing-md); color: var(--color-text-secondary); } .haltung-cta .section-cta { margin-top: var(--spacing-sm); } /* ======================================== Umsetzung Section ======================================== */ .umsetzung { background: var(--color-black); } .umsetzung-intro { max-width: 700px; margin-bottom: var(--spacing-xl); } .umsetzung-intro p { font-size: 1.25rem; } .umsetzung-grid { display: grid; grid-template-columns: 1fr; gap: var(--spacing-md); } @media (min-width: 768px) { .umsetzung-grid { grid-template-columns: repeat(3, 1fr); } } .umsetzung-item { background: var(--color-dark-grey); padding: var(--spacing-lg); padding-bottom: 0; position: relative; overflow: hidden; transition: var(--transition); display: flex; flex-direction: column; } .umsetzung-item::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 2px; background: linear-gradient(90deg, var(--color-text-muted), transparent); transform: scaleX(0); transform-origin: left; transition: var(--transition); } .umsetzung-item:hover::before { transform: scaleX(1); } .umsetzung-item:hover { background: var(--color-mid-grey); } .umsetzung-number { font-family: var(--font-headline); font-size: 3rem; font-weight: 700; color: var(--color-mid-grey); line-height: 1; margin-bottom: var(--spacing-md); transition: var(--transition); } .umsetzung-item:hover .umsetzung-number { color: var(--color-border); } .umsetzung-item h3 { font-size: 1.125rem; margin-bottom: var(--spacing-sm); } .umsetzung-item p { font-size: 0.95rem; margin-bottom: 0; flex-grow: 1; } .umsetzung-image { width: calc(100% + var(--spacing-lg) * 2); margin-left: calc(var(--spacing-lg) * -1); margin-top: var(--spacing-md); height: 120px; overflow: hidden; } .umsetzung-image img { width: 100%; height: 100%; object-fit: cover; opacity: 0.6; transition: var(--transition); } .umsetzung-item:hover .umsetzung-image img { opacity: 0.8; } .umsetzung-note { margin-top: var(--spacing-lg); padding: var(--spacing-md); border-left: 1px solid var(--color-border); } .umsetzung-note p { font-size: 1rem; font-style: italic; margin-bottom: 0; } .umsetzung-cta { margin-top: var(--spacing-xl); padding-top: var(--spacing-lg); border-top: 1px solid var(--color-border); display: flex; flex-wrap: wrap; gap: var(--spacing-sm); } /* ======================================== Projekte Section ======================================== */ .projekte { background: var(--color-anthracite); position: relative; } .projekte::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient( 90deg, transparent, var(--color-border), transparent ); } .projekte-intro { max-width: 600px; margin-bottom: var(--spacing-xl); } .projekte-intro p { font-size: 1.125rem; } .case-list { display: flex; flex-direction: column; gap: var(--spacing-lg); } .case-item { display: flex; flex-direction: column; background: var(--color-dark-grey); border: 1px solid var(--color-border); transition: var(--transition); overflow: hidden; } .case-item > .case-image { margin-bottom: 0; height: 200px; } @media (min-width: 768px) { .case-item > .case-image { height: 280px; } } .case-item > .case-header { padding: var(--spacing-lg) var(--spacing-lg) var(--spacing-sm); } .case-item > .case-content { padding: 0 var(--spacing-lg) var(--spacing-lg); } .case-item:hover { border-color: var(--color-text-muted); } .case-content { display: grid; grid-template-columns: 1fr; gap: var(--spacing-md); } @media (min-width: 992px) { .case-content { grid-template-columns: repeat(3, 1fr); } } .case-header h3 { font-size: 1.2rem; font-weight: 600; color: var(--color-text); margin-bottom: var(--spacing-xs); } .case-header span { font-size: 0.875rem; color: var(--color-text-muted); } .case-block h4 { font-family: var(--font-headline); font-size: 0.85rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--color-text); margin-bottom: var(--spacing-xs); } .case-block p { font-size: 0.95rem; line-height: 1.7; margin-bottom: 0; } .case-image { width: 100%; background: var(--color-mid-grey); overflow: hidden; } .case-image img { width: 100%; height: 100%; object-fit: cover; opacity: 0.7; transition: var(--transition); } .case-item:hover .case-image img { opacity: 0.9; transform: scale(1.02); } .projekte-cta { margin-top: var(--spacing-xl); padding-top: var(--spacing-lg); border-top: 1px solid var(--color-border); } .projekte-cta p { font-size: 1.125rem; margin-bottom: var(--spacing-md); color: var(--color-text-secondary); } .projekte-cta .section-cta { margin-top: var(--spacing-sm); } /* ======================================== Kontakt Section ======================================== */ .kontakt { background: var(--color-black); position: relative; } .kontakt::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient( 90deg, transparent, var(--color-border), transparent ); } .kontakt-grid { display: grid; grid-template-columns: 1fr; gap: var(--spacing-xl); align-items: stretch; } @media (min-width: 768px) { .kontakt-grid { grid-template-columns: 1fr 1fr; } } .kontakt-text { display: flex; flex-direction: column; } .kontakt-text p { font-size: 1.25rem; line-height: 1.8; margin-bottom: var(--spacing-md); } .kontakt-info { display: flex; flex-direction: column; } .kontakt-card { padding: var(--spacing-lg); background: var(--color-dark-grey); position: relative; flex: 1; display: flex; flex-direction: column; } .kontakt-logo { position: absolute; top: var(--spacing-lg); right: var(--spacing-lg); height: 40px; width: auto; opacity: 0.8; } .kontakt-card h3 { font-size: 1.25rem; margin-bottom: var(--spacing-md); } .kontakt-details p { font-size: 1rem; margin-bottom: var(--spacing-xs); color: var(--color-text-secondary); } .kontakt-details a { color: var(--color-text); border-bottom: 1px solid transparent; transition: var(--transition); } .kontakt-details a:hover { border-bottom-color: var(--color-text); } .kontakt-note { font-size: 0.875rem; color: var(--color-text-muted); margin-top: var(--spacing-md); } .kontakt-portrait { width: 100%; flex: 1; overflow: hidden; } .kontakt-portrait img { width: 100%; height: 100%; object-fit: cover; opacity: 0.9; } /* ======================================== Footer ======================================== */ .footer { padding: var(--spacing-lg) 0; background: var(--color-anthracite); border-top: 1px solid var(--color-border); } .footer-inner { display: flex; flex-direction: column; gap: var(--spacing-md); } @media (min-width: 768px) { .footer-inner { flex-direction: row; justify-content: space-between; align-items: center; } } .footer-copy { font-size: 0.875rem; color: var(--color-text-muted); } .footer-links { display: flex; gap: var(--spacing-md); } .footer-links a { font-size: 0.875rem; color: var(--color-text-muted); } .footer-links a:hover { color: var(--color-text); } /* ======================================== Animations ======================================== */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } /* Scroll Animations */ .reveal { opacity: 0; transform: translateY(30px); transition: opacity 0.6s ease, transform 0.6s ease; } .reveal.active { opacity: 1; transform: translateY(0); } /* ======================================== Content Section (for impressum/datenschutz) ======================================== */ .content-section { background: var(--color-black); padding-top: calc(var(--spacing-xl) + 80px); min-height: 100vh; } .content-wrapper { max-width: 800px; margin: 0 auto; } .content-wrapper h1 { margin-bottom: var(--spacing-lg); } .content-wrapper h3 { margin-top: var(--spacing-lg); margin-bottom: var(--spacing-sm); } .content-wrapper h3:first-of-type { margin-top: 0; } /* ======================================== Utilities ======================================== */ .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }