4c57d41350
Hero headline was a broken comma-splice ("Den produktivitetssuite, dine data
bliver i Danmark med."); replace with a clean two-sentence line in both
languages:
da: "Din digitale arbejdsplads. Data der bliver i EU."
en: "Your digital workplace. Data that stays in the EU."
Also move all brand references off the unowned dezky.com to dezky.eu
(status page, app dashboard mockup, config/comments). External domains
(zulip.com, Google Fonts) are left untouched.
80 lines
2.1 KiB
TypeScript
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.eu;
|
|
// locally the portal runs at app.dezky.local.
|
|
export const APP_URL = 'https://app.dezky.local'
|