7bee161ac1
Add @nuxtjs/i18n: English is the default locale (no prefix), Danish lives under /da (prefix_except_default). Both server-rendered and indexed with hreflang alternates + per-locale canonical (useLocaleHead in app.vue). First-visit browser language is auto-detected and remembered in the i18n_redirected cookie (redirectOn root). - Keep the hand-authored COPY object; useLang/useCopy now read the i18n locale; useLocalizeHref/useLangToggle added. Every internal link is localized so navigation stays in-locale. - Clear segmented EN|DA language switcher (active segment filled) replacing the ambiguous "en · da" pill. - SEO: useSeoMeta defaults are locale-aware; og:image switches per locale (English / Danish share card); favicon links; robots.txt + sitemap.xml; env-aware siteUrl/baseUrl (localhost in dev, dezky.eu in prod). - Update the cookie policy (dezky-lang -> i18n_redirected). - Gate the Traefik wss:443 HMR behind DEZKY_TRAEFIK so localhost dev/DevTools connect over plain ws (fixes the DevTools disconnect loop).
34 lines
1.8 KiB
Vue
34 lines
1.8 KiB
Vue
<script setup lang="ts">
|
|
// Final CTA — carbon panel with a faint Node-mark watermark.
|
|
// Ported from landing-sections.jsx FinalCTA.
|
|
import { C } from '~/utils/landingTokens'
|
|
import { useCopy } from '~/composables/useLanding'
|
|
const copy = useCopy()
|
|
const localePath = useLocalePath()
|
|
</script>
|
|
|
|
<template>
|
|
<section id="final-cta" :style="{ background: C.carbon, color: C.bone, position: 'relative', overflow: 'hidden', scrollMarginTop: '72px' }">
|
|
<div :style="{ position: 'absolute', right: '-180px', bottom: '-180px', opacity: 0.05 }">
|
|
<BrandNodeMark :size="640" :fg="C.carbon" :accent="C.signal" />
|
|
</div>
|
|
<LandingContainer pad="clamp(56px, 8vw, 140px) clamp(20px, 5vw, 64px)">
|
|
<h2 :style="{ fontFamily: '\'Inter Tight\', sans-serif', fontWeight: 600, fontSize: 'clamp(32px, 6vw, 96px)', letterSpacing: '-0.04em', lineHeight: 0.98, margin: 0, color: C.bone, textWrap: 'balance', maxWidth: '900px' }">
|
|
<template v-for="(part, i) in copy.finalCta.heading" :key="i">
|
|
<template v-if="typeof part === 'string'">{{ part }} </template>
|
|
<span v-else :style="{ color: C.signal }">{{ part.hl }}</span>
|
|
</template>
|
|
</h2>
|
|
<div :style="{ marginTop: '28px', maxWidth: 'min(100%, 520px)', fontFamily: '\'Inter\', sans-serif', fontSize: '19px', color: 'rgba(244,243,238,0.7)' }">{{ copy.finalCta.sub }}</div>
|
|
<div :style="{ marginTop: '40px' }">
|
|
<button @click="navigateTo(localePath('/demo'))" :style="{
|
|
background: C.signal, color: C.carbon, border: 'none',
|
|
padding: '20px 32px', fontFamily: '\'Inter\', sans-serif',
|
|
fontSize: '16px', fontWeight: 600, borderRadius: '4px', cursor: 'pointer',
|
|
letterSpacing: '-0.005em',
|
|
}">{{ copy.finalCta.cta }} →</button>
|
|
</div>
|
|
</LandingContainer>
|
|
</section>
|
|
</template>
|