diff --git a/src/components/layout/PageHero.vue b/src/components/layout/PageHero.vue new file mode 100644 index 0000000..0e68417 --- /dev/null +++ b/src/components/layout/PageHero.vue @@ -0,0 +1,58 @@ + + + diff --git a/src/components/layout/PageSection.vue b/src/components/layout/PageSection.vue new file mode 100644 index 0000000..c96b824 --- /dev/null +++ b/src/components/layout/PageSection.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/components/layout/PageShell.vue b/src/components/layout/PageShell.vue new file mode 100644 index 0000000..fb804d1 --- /dev/null +++ b/src/components/layout/PageShell.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/style.css b/src/style.css index 5b12c48..36e5ccf 100644 --- a/src/style.css +++ b/src/style.css @@ -25,6 +25,8 @@ --border: hsl(151 50% 18%); --input: hsl(151 50% 18%); --ring: hsl(43 64% 50%); + /* Near-black green of the content panel that floats on the tiled bg. */ + --panel: hsl(151 55% 4%); --radius: 0.5rem; } @@ -48,6 +50,7 @@ --border: hsl(151 50% 15%); --input: hsl(151 50% 15%); --ring: hsl(43 64% 52%); + --panel: hsl(151 55% 3%); } @theme inline { @@ -70,6 +73,7 @@ --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); + --color-panel: var(--panel); --radius-lg: var(--radius); --radius-md: calc(var(--radius) - 2px); --radius-sm: calc(var(--radius) - 4px); @@ -85,6 +89,12 @@ } body { @apply bg-background text-foreground; + /* Celtic-knot tile is the page background; it shows in the gutters + around the floating content panel (see PageShell). The home page's + fixed landscape image sits above this layer, so home is unaffected. */ + background-image: url('./assets/section-tile.webp'); + background-repeat: repeat; + background-position: center top; font-family: var(--font-sans); font-weight: 300; } diff --git a/src/views/AccommodationView.vue b/src/views/AccommodationView.vue index a84aad4..a5a37d9 100644 --- a/src/views/AccommodationView.vue +++ b/src/views/AccommodationView.vue @@ -4,6 +4,9 @@ import { RouterLink } from 'vue-router' import { Button } from '@/components/ui/button' import { Card, CardContent } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' +import PageHero from '@/components/layout/PageHero.vue' +import PageSection from '@/components/layout/PageSection.vue' +import PageShell from '@/components/layout/PageShell.vue' const { t, tm, rt } = useI18n() @@ -59,29 +62,21 @@ const exteriorItems = tm('accommodation.exterior.items') as string[] diff --git a/src/views/ConceptView.vue b/src/views/ConceptView.vue index d099c19..761a563 100644 --- a/src/views/ConceptView.vue +++ b/src/views/ConceptView.vue @@ -2,6 +2,9 @@ import { useI18n } from 'vue-i18n' import { RouterLink } from 'vue-router' import { Card } from '@/components/ui/card' +import PageHero from '@/components/layout/PageHero.vue' +import PageSection from '@/components/layout/PageSection.vue' +import PageShell from '@/components/layout/PageShell.vue' const { t } = useI18n() @@ -13,35 +16,27 @@ const pillars = [ diff --git a/src/views/EventsView.vue b/src/views/EventsView.vue index b060aac..80199d0 100644 --- a/src/views/EventsView.vue +++ b/src/views/EventsView.vue @@ -4,6 +4,9 @@ import { RouterLink } from 'vue-router' import { Button } from '@/components/ui/button' import { Card, CardContent } from '@/components/ui/card' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import PageHero from '@/components/layout/PageHero.vue' +import PageSection from '@/components/layout/PageSection.vue' +import PageShell from '@/components/layout/PageShell.vue' const { t } = useI18n() @@ -37,30 +40,23 @@ const events = [ diff --git a/src/views/GalleryView.vue b/src/views/GalleryView.vue index ed895a4..a17f49a 100644 --- a/src/views/GalleryView.vue +++ b/src/views/GalleryView.vue @@ -1,6 +1,9 @@ diff --git a/src/views/LongStaysView.vue b/src/views/LongStaysView.vue index 355a7f0..7241b2d 100644 --- a/src/views/LongStaysView.vue +++ b/src/views/LongStaysView.vue @@ -3,6 +3,9 @@ import { useI18n } from 'vue-i18n' import { RouterLink } from 'vue-router' import { Button } from '@/components/ui/button' import { Card } from '@/components/ui/card' +import PageHero from '@/components/layout/PageHero.vue' +import PageSection from '@/components/layout/PageSection.vue' +import PageShell from '@/components/layout/PageShell.vue' const { t } = useI18n() @@ -10,30 +13,22 @@ const paths = ['exchange', 'rental', 'partial', 'funded'] as const diff --git a/src/views/MarketplaceView.vue b/src/views/MarketplaceView.vue index cb79bc2..c758ae9 100644 --- a/src/views/MarketplaceView.vue +++ b/src/views/MarketplaceView.vue @@ -2,6 +2,9 @@ import { useI18n } from 'vue-i18n' import { Button } from '@/components/ui/button' import { Card } from '@/components/ui/card' +import PageHero from '@/components/layout/PageHero.vue' +import PageSection from '@/components/layout/PageSection.vue' +import PageShell from '@/components/layout/PageShell.vue' const { t } = useI18n() @@ -9,28 +12,20 @@ const categories = ['fresh', 'pantry', 'craft'] as const diff --git a/src/views/NotFoundView.vue b/src/views/NotFoundView.vue index 9f5032e..0366658 100644 --- a/src/views/NotFoundView.vue +++ b/src/views/NotFoundView.vue @@ -4,7 +4,7 @@ import { RouterLink } from 'vue-router'