Compare commits

..

No commits in common. "f1c8b5efb63f0d9fae2fbc8c3b6ab9ce94fb130c" and "01f62c8041be32b24c1d1f42f4ca8e5a4337177f" have entirely different histories.

13 changed files with 13 additions and 122 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

View file

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
// Top-of-page hero, the first block inside PageShell's panel. Centered to // Top-of-page hero, the first block inside PageShell's panel. Centered to
// match the site layout; falls back to a left-aligned two-column grid when an // match the Wix layout; falls back to a left-aligned two-column grid when an
// `aside` slot (e.g. a hero image) is supplied. Title uses the Aboreto // `aside` slot (e.g. a hero image) is supplied. Title uses the Aboreto
// display face in the home page's uppercase / wide-tracking idiom. // display face in the home page's uppercase / wide-tracking idiom.
import { useSlots } from 'vue' import { useSlots } from 'vue'

View file

@ -2,7 +2,7 @@
// The floating content panel: a near-black rounded card that sits on the // The floating content panel: a near-black rounded card that sits on the
// tiled celtic-knot page background, leaving a gutter of tile visible around // tiled celtic-knot page background, leaving a gutter of tile visible around
// it. Wrap every secondary page's content in this so they share the home // it. Wrap every secondary page's content in this so they share the home
// page's layout language. Sections go inside as plain blocks. // page / Wix layout language. Sections go inside as plain blocks.
</script> </script>
<template> <template>

View file

@ -147,7 +147,6 @@
} }
}, },
"home": { "home": {
"heroStrip": "farmstand ✧ land art ✧ residency ✧ events venue",
"welcome": { "welcome": {
"title": "Welcome to The Château du Faune", "title": "Welcome to The Château du Faune",
"body": "A place to create, to grow and to rejuvenate with humble reverence and reciprocity to our natural world. Sitting at the majestic foothills of the Pyrenees in the southwest of France, Château du Faune is an artist residency and a slow living sanctuary for crafters, agroecologists, and nature-enthusiasts seeking a home on the road.", "body": "A place to create, to grow and to rejuvenate with humble reverence and reciprocity to our natural world. Sitting at the majestic foothills of the Pyrenees in the southwest of France, Château du Faune is an artist residency and a slow living sanctuary for crafters, agroecologists, and nature-enthusiasts seeking a home on the road.",

View file

@ -137,7 +137,6 @@
} }
}, },
"home": { "home": {
"heroStrip": "granja ✧ arte de la tierra ✧ residencia ✧ espacio de eventos",
"welcome": { "welcome": {
"title": "Bienvenida al Château du Faune", "title": "Bienvenida al Château du Faune",
"body": "Un lugar para crear, crecer y rejuvenecer, a los pies de los Pirineos. Una residencia de artistas y un santuario de slow living para artesanos, agroecólogos y amantes de la naturaleza que buscan un hogar en el camino.", "body": "Un lugar para crear, crecer y rejuvenecer, a los pies de los Pirineos. Una residencia de artistas y un santuario de slow living para artesanos, agroecólogos y amantes de la naturaleza que buscan un hogar en el camino.",

View file

@ -147,7 +147,6 @@
} }
}, },
"home": { "home": {
"heroStrip": "fermette ✧ art de la terre ✧ résidence ✧ lieu d'événements",
"welcome": { "welcome": {
"title": "Bienvenue au Château du Faune", "title": "Bienvenue au Château du Faune",
"body": "Un lieu pour créer, croître et se ressourcer, avec une humble révérence et une réciprocité envers notre monde naturel. Niché au pied des Pyrénées, dans le sud-ouest de la France, le Château du Faune est une résidence d'artistes et un sanctuaire de slow living pour artisan·es, agroécologues et amoureux·euses de la nature en quête d'un foyer sur le chemin.", "body": "Un lieu pour créer, croître et se ressourcer, avec une humble révérence et une réciprocité envers notre monde naturel. Niché au pied des Pyrénées, dans le sud-ouest de la France, le Château du Faune est une résidence d'artistes et un sanctuaire de slow living pour artisan·es, agroécologues et amoureux·euses de la nature en quête d'un foyer sur le chemin.",

View file

@ -137,7 +137,6 @@
} }
}, },
"home": { "home": {
"heroStrip": "fattoria ✧ land art ✧ residenza ✧ spazio eventi",
"welcome": { "welcome": {
"title": "Benvenuti al Château du Faune", "title": "Benvenuti al Château du Faune",
"body": "Un luogo per creare, crescere e rigenerarsi, ai piedi dei Pirenei. Una residenza per artisti e un santuario di slow living per artigiani, agroecologi e amanti della natura in cerca di una casa lungo il cammino.", "body": "Un luogo per creare, crescere e rigenerarsi, ai piedi dei Pirenei. Una residenza per artisti e un santuario di slow living per artigiani, agroecologi e amanti della natura in cerca di una casa lungo il cammino.",

View file

@ -137,7 +137,6 @@
} }
}, },
"home": { "home": {
"heroStrip": "quinta ✧ arte da terra ✧ residência ✧ espaço de eventos",
"welcome": { "welcome": {
"title": "Bem-vindo ao Château du Faune", "title": "Bem-vindo ao Château du Faune",
"body": "Um lugar para criar, crescer e rejuvenescer, aos pés dos Pirenéus. Uma residência de artistas e um santuário de slow living para artesãos, agroecólogos e amantes da natureza à procura de uma casa pelo caminho.", "body": "Um lugar para criar, crescer e rejuvenescer, aos pés dos Pirenéus. Uma residência de artistas e um santuário de slow living para artesãos, agroecólogos e amantes da natureza à procura de uma casa pelo caminho.",

View file

@ -3,20 +3,8 @@
@custom-variant dark (&:is(.dark *)); @custom-variant dark (&:is(.dark *));
/* Self-hosted blackletter used for the hero title ("Sketch Gothic School").
Only needed to shape the SVG clip glyphs the hero video shows through. */
@font-face {
font-family: 'Sketch Gothic School';
src:
url('./assets/fonts/sketch-gothic-school.woff2') format('woff2'),
url('./assets/fonts/sketch-gothic-school.woff') format('woff');
font-weight: normal;
font-style: normal;
font-display: swap;
}
:root { :root {
/* Brand palette: deep forest green dominant background, cream /* Wix-inspired palette: deep forest green dominant background, cream
foreground, gold (Aboreto/calligraphic spirit) for CTAs and accents. */ foreground, gold (Aboreto/calligraphic spirit) for CTAs and accents. */
--background: hsl(151 100% 8%); --background: hsl(151 100% 8%);
--foreground: hsl(200 32% 94%); --foreground: hsl(200 32% 94%);
@ -98,7 +86,6 @@
'Roboto', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif; 'Roboto', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
--font-display: 'Aboreto', 'Cormorant Garamond', Georgia, serif; --font-display: 'Aboreto', 'Cormorant Garamond', Georgia, serif;
--font-script: 'Tangerine', 'Allura', cursive; --font-script: 'Tangerine', 'Allura', cursive;
--font-blackletter: 'Sketch Gothic School', 'UnifrakturMaguntia', serif;
} }
@layer base { @layer base {

View file

@ -1,5 +1,4 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, nextTick, onMounted, ref } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { RouterLink } from 'vue-router' import { RouterLink } from 'vue-router'
import { Button } from '@/components/ui/button' import { Button } from '@/components/ui/button'
@ -8,8 +7,6 @@ import cosmicStagMorphWebm from '@/assets/cosmic-stag-morph-1024.webm'
import cosmicStagMorphFallback from '@/assets/cosmic-stag-morph-fallback.webp' import cosmicStagMorphFallback from '@/assets/cosmic-stag-morph-fallback.webp'
import heroLandscape from '@/assets/hero-landscape.webp' import heroLandscape from '@/assets/hero-landscape.webp'
import sectionTile from '@/assets/section-tile.webp' import sectionTile from '@/assets/section-tile.webp'
import titleWordmark from '@/assets/title-wordmark.mp4'
import titleWordmarkPoster from '@/assets/title-wordmark-poster.jpg'
const tileStyle = { const tileStyle = {
backgroundImage: `url(${sectionTile})`, backgroundImage: `url(${sectionTile})`,
@ -20,43 +17,6 @@ const tileStyle = {
const { t } = useI18n() const { t } = useI18n()
// The hero title is SVG text (Sketch Gothic School) used as a clip over the
// wordmark video. Measure the rendered glyph box once the font loads and fit
// the viewBox/foreignObject to it, so the wordmark fills the SVG width without
// clipping regardless of the font's metrics.
const titleSvg = ref<SVGSVGElement | null>(null)
const titleText = ref<SVGTextElement | null>(null)
const titleBox = ref({ x: 0, y: 0, w: 1100, h: 200 })
const titleViewBox = computed(
() => `${titleBox.value.x} ${titleBox.value.y} ${titleBox.value.w} ${titleBox.value.h}`,
)
onMounted(async () => {
try {
await (document as Document & { fonts?: FontFaceSet }).fonts?.ready
} catch {
/* fonts API unavailable — keep the default box */
}
await nextTick()
const el = titleText.value
if (!el) return
let bb: DOMRect
try {
bb = el.getBBox()
} catch {
return
}
if (!bb.width) return
const padX = bb.height * 0.08
const padY = bb.height * 0.16
titleBox.value = {
x: Math.round(bb.x - padX),
y: Math.round(bb.y - padY),
w: Math.round(bb.width + padX * 2),
h: Math.round(bb.height + padY * 2),
}
})
const pathways = [ const pathways = [
{ key: 'dayVisit' as const, to: '/reservations' }, { key: 'dayVisit' as const, to: '/reservations' },
{ key: 'activity' as const, to: '/events' }, { key: 'activity' as const, to: '/events' },
@ -99,60 +59,24 @@ const featuredEvents = [
<!-- Hero: full-viewport, transparent over the pinned backdrop. Content is <!-- Hero: full-viewport, transparent over the pinned backdrop. Content is
anchored near the top on mobile (avoids a tall dead band under the anchored near the top on mobile (avoids a tall dead band under the
header) and vertically centered from lg up. --> header) and vertically centered from lg up. -->
<section class="relative isolate flex flex-col items-center justify-start overflow-hidden pt-12 pb-16 sm:pt-16 lg:min-h-screen lg:justify-center lg:pb-0 lg:pt-20"> <section class="relative isolate flex min-h-screen flex-col items-center justify-start overflow-hidden pt-12 sm:pt-16 lg:justify-center lg:pt-0">
<div
class="pointer-events-none absolute inset-0 -z-10 bg-gradient-to-b from-background/55 to-transparent"
></div>
<div <div
class="relative mx-auto flex max-w-7xl flex-col items-center px-4 text-center lg:px-6" class="relative mx-auto flex max-w-7xl flex-col items-center px-4 text-center lg:px-6"
> >
<p <p
class="whitespace-nowrap bg-clip-text font-display text-[clamp(0.85rem,3.7vw,1.875rem)] uppercase tracking-[0.2em] text-transparent drop-shadow-[0_1px_4px_rgba(0,0,0,0.85)]" class="font-display text-xl uppercase tracking-[0.25em] text-accent drop-shadow-[0_1px_4px_rgba(0,0,0,0.85)] md:text-3xl lg:text-4xl"
style="background-image: linear-gradient(to right, #b99f2c, #855c16)"
> >
{{ t('common.tagline') }} {{ t('common.tagline') }}
</p> </p>
<h1 class="sr-only">Château du Faune</h1> <h1
<!-- Hero title: blackletter text clips the forest/cloud video so it class="mt-4 font-script font-bold text-6xl leading-none text-foreground drop-shadow-md md:text-7xl lg:text-8xl"
appears to drift through the letters. The SVG scales by viewBox
(always one line); a gold drop-shadow gives the engraved edge. -->
<svg
ref="titleSvg"
class="hero-title -mt-1 block w-[min(92vw,52rem)] sm:mt-4"
:viewBox="titleViewBox"
aria-hidden="true"
> >
<defs> Château du Faune
<clipPath id="hero-title-clip"> </h1>
<text
ref="titleText"
x="550"
y="122"
text-anchor="middle"
font-family="'Sketch Gothic School', 'UnifrakturMaguntia', serif"
font-size="120"
>
Château du Faune
</text>
</clipPath>
</defs>
<foreignObject
:x="titleBox.x"
:y="titleBox.y"
:width="titleBox.w"
:height="titleBox.h"
clip-path="url(#hero-title-clip)"
>
<video
xmlns="http://www.w3.org/1999/xhtml"
autoplay
muted
loop
playsinline
:poster="titleWordmarkPoster"
class="h-full w-full object-cover"
>
<source :src="titleWordmark" type="video/mp4" />
</video>
</foreignObject>
</svg>
<video <video
autoplay autoplay
muted muted
@ -164,12 +88,6 @@ const featuredEvents = [
<source :src="cosmicStagMorphWebm" type="video/webm" /> <source :src="cosmicStagMorphWebm" type="video/webm" />
<img :src="cosmicStagMorphFallback" alt="" /> <img :src="cosmicStagMorphFallback" alt="" />
</video> </video>
<p
class="mt-4 max-w-[90vw] text-balance bg-clip-text font-display text-[clamp(0.7rem,2.4vw,1.25rem)] uppercase tracking-[0.12em] text-transparent drop-shadow-[0_1px_4px_rgba(0,0,0,0.85)] sm:mt-6 sm:tracking-[0.2em]"
style="background-image: linear-gradient(to right, #b99f2c, #855c16)"
>
{{ t('home.heroStrip') }}
</p>
</div> </div>
</section> </section>
@ -321,12 +239,3 @@ const featuredEvents = [
</section> </section>
</div> </div>
</template> </template>
<style scoped>
/* Gold engraved edge + soft shadow on the video-filled title, for the
engraved look and to keep it legible on the bright sky. */
.hero-title {
filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.55)) drop-shadow(0 0 1px #ffe87b);
overflow: visible;
}
</style>