Weraldiz - Stimmen einer vergessenen Welt
/* ========================================================================== LANDING.CSS — Landing page only (loaded via PHP) Depends on core.css (variables) and components.css (shared button base). NO :root block — all tokens live in core.css. ========================================================================== */
/* -------------------------------------------------------------------------- 0. PAGE-SPECIFIC VARIABLES -------------------------------------------------------------------------- */ :root { --landing-content-max: 1352px; --landing-reading-max: 800px; --landing-section-pad: clamp(48px, 8vw, 100px); --landing-inline-pad: clamp(16px, 4vw, 32px); --transition-base: all .4s ease; --transition-smooth: all .5s cubic-bezier(.55, .25, .50, .85); }
/* --------------------------------------------------------------------------
- KEYFRAMES -------------------------------------------------------------------------- */ @keyframes border-pulse { 0%, 100% { opacity: .6; } 50% { opacity: 1; } }
@keyframes shimmer { 0% { left: -100%; opacity: .7; } 100% { left: 200%; opacity: 0; } }
@keyframes gentle-pulse { 0%, 100% { filter: drop-shadow(0 2px 4px rgba(0, 0, 0, .3)) drop-shadow(0 0 8px rgba(207, 204, 186, .4)) drop-shadow(0 0 16px rgba(207, 204, 186, .2)); } 50% { filter: drop-shadow(0 2px 4px rgba(0, 0, 0, .3)) drop-shadow(0 0 10px rgba(207, 204, 186, .5)) drop-shadow(0 0 20px rgba(207, 204, 186, .3)); } }
@keyframes hero-drift { 0%, 100% { background-position: 50% 50%; } 50% { background-position: 52% 48%; } }
@keyframes triptych-reveal { from { clip-path: inset(100% 0 0 0); opacity: 0; } to { clip-path: inset(0 0 0 0); opacity: 1; } }
/* -------------------------------------------------------------------------- 2. TRI-LAYOUT OVERRIDES — full-width landing -------------------------------------------------------------------------- */ #content { padding-inline: 0 !important; }
.tri-layout-container { display: block !important; max-width: 100% !important; column-gap: 0 !important; padding: 0 !important; margin: 0 !important; }
.tri-layout-sides, .tri-layout-mobile-tabs { display: none !important; }
.tri-layout-middle { padding: 0 !important; max-width: 100% !important; width: 100% !important; }
.tri-layout-middle-contents { max-width: 100% !important; width: 100% !important; padding: 0 !important; }
/* BookStack .mt-m spacer above content */ .mt-m { margin-top: 0 !important; }
.content-wrap.card { max-width: 100% !important; border: none !important; border-radius: 0 !important; box-shadow: none !important; padding: 0 !important; margin: 0 !important; background: transparent !important; }
.content-wrap::before { display: none !important; }
/* BookStack page-content wrapper — remove width cap */ .page-content { max-width: 100% !important; width: 100% !important; margin: 0 !important; padding: 0 !important; }
h1#bkmrk-page-title { display: none !important; }
/* -------------------------------------------------------------------------- 3. SECTION WIDTH CONTAINERS -------------------------------------------------------------------------- */ .landing-contained { max-width: var(--landing-content-max); margin-inline: auto; padding-inline: var(--landing-inline-pad); }
/* ========================================================================== 4. HERO SECTION Texture/gradient based — no heavy image, fast LCP. Radial vignette creates depth. Logo is focal anchor. ========================================================================== */
.landing-hero { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 80vh; min-height: 80svh; padding: clamp(100px, 15vh, 160px) var(--landing-inline-pad) clamp(80px, 12vh, 140px); text-align: center; overflow: hidden;
/* Layered texture + radial vignette */ background: radial-gradient(ellipse 70% 55% at 50% 40%, rgba(175, 170, 140, .06) 0%, transparent 70%), radial-gradient(ellipse 120% 80% at 50% 100%, rgba(0, 0, 0, .04) 0%, transparent 50%), var(--texture-light) repeat; background-size: auto, auto, 200px; animation: hero-drift 30s ease-in-out infinite; }
html.dark-mode .landing-hero { background: radial-gradient(ellipse 70% 55% at 50% 40%, rgba(197, 193, 172, .03) 0%, transparent 70%), radial-gradient(ellipse 120% 80% at 50% 100%, rgba(0, 0, 0, .15) 0%, transparent 50%), var(--texture-dark) repeat; background-size: auto, auto, 150px; }
/* Bottom fade into page bg */ .hero-fade { position: absolute; bottom: 0; left: 0; right: 0; height: 120px; background: linear-gradient(to bottom, transparent, var(--light-bg-primary)); pointer-events: none; z-index: 1; } html.dark-mode .hero-fade { background: linear-gradient(to bottom, transparent, var(--dark-bg-primary)); }
/* -------------------------------------------------------------------------- 4a. HERO LOGO — preserved from original, repositioned -------------------------------------------------------------------------- */ .landing-hero .hero-logo-overlap { position: relative; z-index: 10; display: flex; justify-content: center; margin-bottom: 0; pointer-events: none; }
.landing-hero .hero-logo { display: flex; align-items: center; justify-content: center; width: 300px; }
.magical-logo-container { position: relative; display: inline-flex; align-items: center; justify-content: center; width: auto; height: auto; margin: 0 auto; cursor: pointer; pointer-events: auto; }
.logo-glow-background { position: absolute; inset: 0; background: radial-gradient(circle, rgba(207, 204, 186, .2) 0%, rgba(175, 170, 140, .1) 45%, rgba(190, 186, 161, 0) 70%); border-radius: 50%; z-index: 1; opacity: .6; pointer-events: none; }
.magical-aura { position: absolute; inset: 0; background: radial-gradient(circle, rgba(190, 186, 161, .06) 0%, rgba(207, 204, 186, .03) 40%, rgba(207, 204, 186, 0) 70%); filter: blur(12px); border-radius: 50%; z-index: 0; opacity: .5; pointer-events: none; }
.magical-logo { position: relative; z-index: 2; width: 100%; max-width: 300px; height: auto; filter: drop-shadow(0 2px 4px rgba(0, 0, 0, .3)) drop-shadow(0 0 8px rgba(207, 204, 186, .4)) drop-shadow(0 0 16px rgba(207, 204, 186, .2)); }
.magical-logo-container::before, .magical-logo-container::after { content: ''; position: absolute; width: 4px; height: 4px; background: radial-gradient(circle, rgba(207, 204, 186, .8) 0%, transparent 70%); border-radius: 50%; opacity: 0; pointer-events: none; z-index: 0; } .magical-logo-container::before { top: 20%; left: 15%; } .magical-logo-container::after { bottom: 25%; right: 20%; }
/* -------------------------------------------------------------------------- 4b. HERO BODY — tagline, subtitle, CTA -------------------------------------------------------------------------- */ .hero-body { position: relative; z-index: 10; max-width: 640px; margin-top: clamp(24px, 4vw, 40px); }
.hero-tagline { font-family: var(--font-heading); font-size: clamp(1.1rem, 2.8vw, 1.7rem); font-weight: 700; line-height: 1.35; color: var(--light-text-primary); margin-bottom: clamp(8px, 2vw, 16px); } html.dark-mode .hero-tagline { color: var(--dark-accent-primary); }
.hero-subtitle { font-size: clamp(.85rem, 1.4vw, 1rem); line-height: 1.6; color: var(--light-text-secondary); margin-bottom: clamp(24px, 4vw, 36px); } html.dark-mode .hero-subtitle { color: var(--dark-text-secondary); }
.hero-cta { display: inline-flex; width: auto; padding: 14px 32px; }
/* ========================================================================== 5. MOOD TRIPTYCH Three atmospheric images, no text. Full viewport width. Pure visual rhythm break — anti-banner-blindness. ========================================================================== */
.mood-triptych { display: grid; grid-template-columns: repeat(3, 1fr); width: 100%; overflow: hidden; }
.mood-cell { position: relative; min-height: clamp(150px, 20vw, 280px); background-size: cover; background-position: center; background-repeat: no-repeat; filter: sepia(12%) saturate(85%) brightness(1.05); transition: filter .6s ease, transform .6s ease; overflow: hidden; } html.dark-mode .mood-cell { filter: sepia(8%) saturate(90%) brightness(.8); }
.mood-cell:hover { filter: sepia(0%) saturate(110%) brightness(1.1); z-index: 1; } html.dark-mode .mood-cell:hover { filter: sepia(0%) saturate(100%) brightness(.9); }
/* Shimmer overlay on hover */ .mood-cell::after { content: ''; position: absolute; top: 0; left: -100%; width: 50%; height: 100%; background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, .2) 50%, rgba(255, 255, 255, 0) 100%); transform: skewX(-25deg); opacity: 0; transition: opacity .3s ease; } html.dark-mode .mood-cell::after { background: linear-gradient(to right, rgba(197, 193, 172, 0) 0%, rgba(197, 193, 172, .12) 50%, rgba(197, 193, 172, 0) 100%); } .mood-cell:hover::after { opacity: 1; animation: shimmer 3s infinite; }
/* Triptych images — swap URLs as needed */ .mood-cell--sky { background-image: url('https://weraldiz.de/uploads/images/gallery/2026-02/nightsky01.webp'); } .mood-cell--city { background-image: url('https://weraldiz.de/uploads/images/gallery/2026-02/cel-marish-s.webp'); } .mood-cell--wild { background-image: url('https://weraldiz.de/uploads/images/gallery/2026-02/durphan-s.webp'); }
@media (max-width: 640px) { .mood-triptych { grid-template-columns: 1fr; } .mood-cell { min-height: clamp(120px, 30vw, 180px); } }
/* ========================================================================== 6. INTERLUDE Narrow philosophical line. Breathing room between sections. ========================================================================== */
.interlude { max-width: var(--landing-reading-max); margin-inline: auto; padding: var(--landing-section-pad) var(--landing-inline-pad); text-align: center; }
.interlude-line { width: 60px; height: 2px; margin: 0 auto 24px; background: linear-gradient(90deg, transparent, var(--primary-color), transparent); } .interlude-line:last-child { margin: 24px auto 0; }
.interlude-text { font-family: var(--font-heading); font-size: clamp(1rem, 2.5vw, 1.4rem); font-weight: 700; line-height: 1.5; color: var(--primary-color); letter-spacing: .02em; }
.interlude-text--small { font-size: clamp(.9rem, 2vw, 1.15rem); font-weight: 400; font-family: var(--font-body); color: var(--light-text-secondary); font-style: italic; } html.dark-mode .interlude-text--small { color: var(--dark-text-secondary); }
/* ========================================================================== 7. CULTURE SECTION Grid layout with featured first card + 4 equal cards. ========================================================================== */
.culture-section { max-width: var(--landing-content-max); margin-inline: auto; padding-inline: var(--landing-inline-pad); padding-bottom: var(--landing-section-pad); }
/* -------------------------------------------------------------------------- 7a. SHARED CARD STYLES -------------------------------------------------------------------------- */ .culture-card { position: relative; background: var(--texture-light) repeat; border-radius: 12px; overflow: hidden; box-shadow: var(--neu-shadow); transition: var(--transition-base); transform: translateZ(0); } html.dark-mode .culture-card { background: var(--texture-dark) repeat; background-size: 150px; }
.culture-card:hover { box-shadow: var(--neu-shadow-hover); }
/* Animated gradient border */ .culture-card::before { content: ''; position: absolute; inset: 0; border-radius: 12px; padding: 2px; background: linear-gradient(45deg, rgba(175, 170, 140, 0) 0%, rgba(175, 170, 140, .6) 25%, rgba(207, 180, 124, .4) 50%, rgba(175, 170, 140, .6) 75%, rgba(175, 170, 140, 0) 100%); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; opacity: .7; z-index: 3; animation: border-pulse 3s ease-in-out infinite; pointer-events: none; } .culture-card:hover::before { opacity: 1; animation-duration: 2s; }
/* -------------------------------------------------------------------------- 7b. CARD IMAGE -------------------------------------------------------------------------- */ .culture-card__image { min-height: 220px; background-size: cover; background-position: center 20%; background-repeat: no-repeat; filter: sepia(15%) saturate(85%) brightness(1.05); transition: var(--transition-smooth); position: relative; overflow: hidden; box-shadow: var(--img-shadow); } html.dark-mode .culture-card__image { filter: sepia(10%) saturate(90%) brightness(.85); }
.culture-card:hover .culture-card__image { filter: sepia(5%) saturate(100%) brightness(1.1); box-shadow: var(--img-shadow-hover); } html.dark-mode .culture-card:hover .culture-card__image { filter: sepia(5%) saturate(100%) brightness(.9); }
/* Shimmer overlay */ .culture-card__image::after { content: ''; position: absolute; top: 0; left: -100%; width: 50%; height: 100%; background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, .25) 50%, rgba(255, 255, 255, 0) 100%); transform: skewX(-25deg); opacity: 0; transition: opacity .3s ease; } .culture-card:hover .culture-card__image::after { opacity: 1; animation: shimmer 3s infinite; }
/* Culture image assignments (reuse from original) */ .kulturen-image { background-image: url('https://weraldiz.de/uploads/images/gallery/2026-02/valgerd-s.webp'); } .kosmologie-image { background-image: url('https://weraldiz.de/uploads/images/gallery/2026-02/tuomo02-s.webp'); } .reise-image { background-image: url('https://weraldiz.de/uploads/images/gallery/2026-02/mikel-s.webp'); } .spiritualitat-image { background-image: url('https://weraldiz.de/uploads/images/gallery/2026-02/turms-s.webp'); } .void-image { background-image: url('https://weraldiz.de/uploads/images/gallery/2026-02/veyn-s.webp'); }
/* -------------------------------------------------------------------------- 7c. CARD BODY -------------------------------------------------------------------------- */ .culture-card__body { padding: clamp(20px, 3vw, 30px); position: relative; z-index: 2; }
.culture-card__title { margin: 0 0 12px; font-size: 1.3em; color: var(--primary-color); font-family: var(--font-heading); font-weight: 700; position: relative; display: inline-block; }
/* Underline reveal on hover */ .culture-card__title::after { content: ''; position: absolute; bottom: -4px; left: 0; width: 0; height: 2px; background: linear-gradient(90deg, var(--primary-color), var(--primary-color-hover)); transition: width .6s ease; } .culture-card:hover .culture-card__title::after { width: 100%; }
.culture-card__text { margin-bottom: 12px; line-height: 1.6; font-size: .9rem; }
.culture-card__question { font-weight: 900; font-style: italic; color: var(--primary-color); font-size: .85rem; line-height: 1.5; }
/* -------------------------------------------------------------------------- 7d. FEATURED CARD — spans full width, internal 2-col -------------------------------------------------------------------------- */ .culture-card--featured { display: grid; grid-template-columns: 1fr 1fr; margin-bottom: clamp(16px, 3vw, 28px); }
.culture-card--featured .culture-card__image { min-height: 300px; border-radius: 12px 0 0 12px; }
.culture-card--featured .culture-card__body { display: flex; flex-direction: column; justify-content: center; }
.culture-card--featured .culture-card__title { font-size: 1.5em; }
.culture-card--featured .culture-card__text { font-size: .95rem; }
@media (max-width: 768px) { .culture-card--featured { grid-template-columns: 1fr; } .culture-card--featured .culture-card__image { min-height: 200px; border-radius: 12px 12px 0 0; } }
/* -------------------------------------------------------------------------- 7e. CULTURE GRID — remaining 4 cards -------------------------------------------------------------------------- */ .culture-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); gap: clamp(16px, 3vw, 28px); }
/* ========================================================================== 8. LIBRARY FEATURE Split image + text CTA. Dual-image reveal (clip-path). ========================================================================== */
.library-feature { max-width: var(--landing-content-max); margin-inline: auto; padding-inline: var(--landing-inline-pad); display: grid; grid-template-columns: 1fr 1fr; gap: 0; border-radius: 12px; overflow: hidden; background: var(--bg-primary); box-shadow: var(--neu-shadow); position: relative; transition: var(--transition-base); transform: translateZ(0); }
.library-feature:hover { box-shadow: var(--neu-shadow-hover); }
/* Border pulse */ .library-feature::before { content: ''; position: absolute; inset: 0; border-radius: 12px; padding: 2px; background: linear-gradient(45deg, rgba(175, 170, 140, 0) 0%, rgba(175, 170, 140, .6) 25%, rgba(207, 180, 124, .4) 50%, rgba(175, 170, 140, .6) 75%, rgba(175, 170, 140, 0) 100%); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; opacity: .7; z-index: 5; animation: border-pulse 3s ease-in-out infinite; pointer-events: none; } .library-feature:hover::before { opacity: 1; animation-duration: 2s; }
/* -------------------------------------------------------------------------- 8a. LIBRARY IMAGE — dual-image reveal -------------------------------------------------------------------------- */ .library-feature__image { position: relative; overflow: hidden; min-height: 300px; }
.library-feature__img-primary, .library-feature__img-secondary { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; transition: filter 1.2s ease; }
.library-feature__img-primary { filter: blur(0); z-index: 1; }
.library-feature__img-secondary { filter: blur(6px); z-index: 2; }
.library-feature__reveal { position: absolute; inset: 0; clip-path: circle(0% at 50% 50%); transition: clip-path 1.8s cubic-bezier(.4, 0, .2, 1); z-index: 2; }
.library-feature:hover .library-feature__reveal { clip-path: circle(150% at 50% 50%); } .library-feature:hover .library-feature__img-secondary { filter: blur(0); } .library-feature:hover .library-feature__img-primary { filter: blur(4px); }
/* Shimmer on hover */ .library-feature__image::after { content: ''; position: absolute; top: 0; left: -100%; width: 50%; height: 100%; background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, .25) 50%, rgba(255, 255, 255, 0) 100%); transform: skewX(-25deg); opacity: 0; z-index: 4; transition: opacity .2s ease; } .library-feature:hover .library-feature__image::after { opacity: 1; animation: shimmer 3s infinite; }
/* -------------------------------------------------------------------------- 8b. LIBRARY BODY -------------------------------------------------------------------------- */ .library-feature__body { padding: clamp(24px, 5vw, 48px); display: flex; flex-direction: column; justify-content: center; position: relative; z-index: 2; background: var(--texture-light) repeat; } html.dark-mode .library-feature__body { background: var(--texture-dark) repeat; background-size: 150px; }
.library-feature__title { font-family: var(--font-heading); font-size: clamp(1.2rem, 2.5vw, 1.6rem); font-weight: 700; color: var(--primary-color); margin: 0 0 12px; }
.library-feature__text { font-size: .9rem; line-height: 1.6; margin-bottom: 24px; color: var(--light-text-secondary); } html.dark-mode .library-feature__text { color: var(--dark-text-secondary); }
.library-cta { align-self: flex-start; width: auto; padding: 12px 28px; }
@media (max-width: 768px) { .library-feature { grid-template-columns: 1fr; padding-inline: 0; margin-inline: var(--landing-inline-pad); } .library-feature__image { min-height: 200px; } }
/* ========================================================================== 9. DM / GM TEASER Deliberately compact. Exclusivity through restraint. ========================================================================== */
.dm-container { max-width: 640px; margin-inline: auto; padding: var(--landing-section-pad) var(--landing-inline-pad); }
.dm-section { padding: clamp(24px, 4vw, 40px); border-radius: 12px; background: var(--light-bg-primary) var(--texture-light) repeat; box-shadow: var(--neu-shadow); position: relative; overflow: hidden; transition: var(--transition-base); transform: translateZ(0); text-align: center; } html.dark-mode .dm-section { background: var(--dark-bg-primary) var(--texture-dark) repeat; background-size: 150px; }
.dm-section:hover { box-shadow: var(--neu-shadow-hover); }
/* Border pulse */ .dm-section::before { content: ''; position: absolute; inset: 0; border-radius: 12px; padding: 2px; background: linear-gradient(45deg, rgba(175, 170, 140, 0) 0%, rgba(175, 170, 140, .6) 25%, rgba(207, 180, 124, .4) 50%, rgba(175, 170, 140, .6) 75%, rgba(175, 170, 140, 0) 100%); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; opacity: .7; z-index: 1; animation: border-pulse 3s ease-in-out infinite; pointer-events: none; } .dm-section:hover::before { opacity: 1; animation-duration: 2s; }
.dm-heading { margin: 0 0 16px; font-size: clamp(1.1rem, 2vw, 1.3rem); color: var(--primary-color); font-family: var(--font-heading); font-weight: 700; position: relative; display: inline-block; z-index: 2; }
/* Underline reveal */ .dm-heading::after { content: ''; position: absolute; bottom: -4px; left: 0; width: 0; height: 2px; background: linear-gradient(90deg, var(--primary-color), var(--primary-color-hover)); transition: width .8s ease; } .dm-section:hover .dm-heading::after { width: 100%; }
.dm-content { position: relative; z-index: 2; margin-bottom: 24px; }
.dm-content p { font-size: .9rem; line-height: 1.6; color: var(--light-text-secondary); } html.dark-mode .dm-content p { color: var(--dark-text-secondary); }
/* ========================================================================== 10. WERALDIZ BUTTON — landing page overrides Inherits base from components.css. Adds gradient, border, pseudo-elements. ========================================================================== */
/* Shine sweep */ .weraldiz-button::after { content: ""; position: absolute; inset: 0; background: linear-gradient(120deg, transparent 0%, rgba(255, 255, 255, .6) 45%, rgba(255, 255, 255, .8) 50%, rgba(255, 255, 255, .6) 55%, transparent 100%); border-radius: inherit; opacity: 0; transition: opacity .3s; pointer-events: none; } .weraldiz-button:hover::after { opacity: 1; animation: button-shine 1.5s ease-out infinite; }
/* Border glow */ .weraldiz-button::before { content: ""; position: absolute; inset: -1px; background: linear-gradient(45deg, rgba(207, 204, 186, .3) 0%, rgba(175, 170, 140, .5) 25%, rgba(207, 180, 124, .3) 50%, rgba(175, 170, 140, .5) 75%, rgba(207, 204, 186, .3) 100%); border-radius: inherit; z-index: -1; opacity: 0; transition: opacity .4s ease; } .weraldiz-button:hover::before { opacity: 1; }
/* ========================================================================== 11. LANDING FOOTER ========================================================================== */
/* ========================================================================== 12. GSAP ANIMATION STATES Initial states for scroll-triggered reveals. GSAP sets these via class or inline; CSS provides fallback defaults. Elements start hidden, GSAP animates to visible on scroll. ========================================================================== */
/* Fade up — default entrance for most elements */ .fade-in { opacity: 0; transform: translateY(30px); will-change: transform, opacity; }
/* Text elements: staggered fade with slight upward drift */ .text-fade-up-delay { opacity: 0; transform: translateY(20px); will-change: transform, opacity; }
/* Slide in from sides — culture cards, split layouts */ .container-slide-left { opacity: 0; transform: translateX(-30px); will-change: transform, opacity; }
.container-slide-right { opacity: 0; transform: translateX(30px); will-change: transform, opacity; }
/* Hero elements: visible by default (above fold, no scroll trigger) */ .landing-hero .hero-logo-overlap, .landing-hero .hero-body { opacity: 1; transform: none; }
/* Reduced motion: skip all entrance animations */ @media (prefers-reduced-motion: reduce) { .fade-in, .text-fade-up-delay, .container-slide-left, .container-slide-right { opacity: 1 !important; transform: none !important; transition: none !important; } }
/* ========================================================================== 13. RESPONSIVE — Tablet (≤1024px) ========================================================================== */
@media (max-width: 1024px) { .culture-card__image { min-height: 180px; } .culture-card--featured .culture-card__image { min-height: 250px; } }
/* ========================================================================== 14. RESPONSIVE — Mobile (≤768px) ========================================================================== */
@media (max-width: 768px) { .landing-hero { min-height: 70vh; min-height: 70svh; }
.landing-hero .hero-logo { width: 220px; }
.magical-logo { max-width: 220px; }
.magical-logo-container::before, .magical-logo-container::after { display: none; }
.hero-cta { width: 100%; max-width: 280px; }
.culture-card__image { min-height: 200px; }
.dm-container { max-width: 100%; } }
/* ========================================================================== 15. RESPONSIVE — Small mobile (≤480px) ========================================================================== */
@media (max-width: 480px) { .landing-hero { min-height: 65vh; min-height: 65svh; }
.landing-hero .hero-logo { width: 180px; }
.magical-logo { max-width: 180px !important; }
.mood-cell { min-height: 120px; }
.culture-card--featured .culture-card__title { font-size: 1.25em; }
.culture-card__title { font-size: 1.15em; }
.culture-card__text, .culture-card__question { font-size: .85rem; } }
/* ========================================================================== 16. RESPONSIVE — Very small (≤320px) ========================================================================== */
@media (max-width: 320px) { .landing-hero .hero-logo { width: 140px; }
.magical-logo { max-width: 140px !important; }
.mood-cell { min-height: 100px; } }