Files
dezky/apps/website/utils/landingTokens.ts
T
Ronni Baslund c9911cc262 feat(website): add Nuxt 4 marketing landing page
New standalone apps/website (Nuxt 4) serving the public marketing site at
dezky.local / www.dezky.local. The customer portal moves off the root domain
to app.dezky.local only.

Landing page ported from the Dezky design handoff: light theme, Danish
default, hero variant A, with a working da/en toggle. Self-contained colour
system threaded through components (utils/landingTokens.ts), full bilingual
copy (utils/landingCopy.ts), and shared state (composables/useLanding.ts).
Sections live under components/landing/* with the Node logo under
components/brand/*.

Wired into docker-compose (website service, volume, Traefik labels, network
aliases) and bootstrap.sh (hosts list + service URLs).
2026-06-05 10:58:25 +02:00

80 lines
2.1 KiB
TypeScript

// Dezky landing — brand palette, locked logo geometry, and theme helper.
// Ported from the Claude Design handoff (landing-sections.jsx). The marketing
// site is self-contained colour-wise: it does NOT consume the app's tokens.css
// dark/light variables — it threads a `theme` object through components exactly
// like the prototype did, so the handoff stays pixel-faithful.
export const C = {
carbon: '#0A0A0A',
signal: '#D4FF3A',
bone: '#F4F3EE',
slate: '#3D3D38',
fog: '#E6E4DC',
paper: '#FAFAF7',
ok: '#1F8A5B',
warn: '#E89A1F',
bad: '#E23030',
} as const
// Locked Node-mark geometry — the values the user dialled in via Tweaks and
// then froze (chat1). Every NodeMark usage in the design passed exactly these.
export const LOCKED = {
bowlR: 14,
stemW: 7,
contR: 22,
dStyle: 'donut',
dotPos: 'corner',
dotR: 4,
} as const
export interface DezkyTheme {
bg: string
bgAlt: string
surface: string
surfaceAlt: string
border: string
borderStrong: string
fg: string
fgMuted: string
fgDim: string
invert: string
invertFg: string
signal: string
}
export function makeTheme(dark: boolean): DezkyTheme {
return dark
? {
bg: '#0A0A0A',
bgAlt: '#121211',
surface: '#171715',
surfaceAlt: '#1F1F1C',
border: 'rgba(255,255,255,0.08)',
borderStrong: 'rgba(255,255,255,0.18)',
fg: '#F4F3EE',
fgMuted: 'rgba(244,243,238,0.62)',
fgDim: 'rgba(244,243,238,0.42)',
invert: '#F4F3EE',
invertFg: '#0A0A0A',
signal: C.signal,
}
: {
bg: C.paper,
bgAlt: C.bone,
surface: '#FFFFFF',
surfaceAlt: C.bone,
border: C.fog,
borderStrong: 'rgba(10,10,10,0.14)',
fg: C.carbon,
fgMuted: 'rgba(10,10,10,0.62)',
fgDim: 'rgba(10,10,10,0.42)',
invert: C.carbon,
invertFg: C.bone,
signal: C.signal,
}
}
// The destination the nav/login CTA points at. Production is app.dezky.com;
// locally the portal runs at app.dezky.local.
export const APP_URL = 'https://app.dezky.local'