// ─────────────────────────────────────────────────────────────
// Kelappa — final canonical logo
// Husk-brown coconut disc + 3 cream dots + "kelappa" in Hanken Grotesk
// with coral smile-curve under "app".
// ─────────────────────────────────────────────────────────────
const KELAPPA_BROWN = 'oklch(0.460 0.060 55)';
const KELAPPA_CREAM = 'oklch(0.965 0.014 82)';
const KELAPPA_INK = 'oklch(0.225 0.020 60)';
// The smile — clears descenders, anchored to the "app" span.
function KelappaSmile({ color, height = 40 }) {
return (
);
}
// The full lockup. `size` = wordmark fontSize in px.
// variant: 'horizontal' | 'mark-only' | 'word-only' | 'stacked'
function KelappaLogo({
size = 96,
fg = KELAPPA_INK,
mark = KELAPPA_BROWN,
dots = KELAPPA_CREAM,
accent, // coral, required
variant = 'horizontal',
gap,
capital = true, // K vs k
}) {
const markSize = size * 1.18;
const realGap = gap ?? size * 0.28;
const smileH = Math.max(28, size * 0.45);
const word = (
{capital ? 'Kel' : 'kel'}
app
{accent && }
a
);
const markEl = (
);
if (variant === 'mark-only') return markEl;
if (variant === 'word-only') return word;
return (
{markEl}
{word}
);
}
Object.assign(window, {
KELAPPA_BROWN, KELAPPA_CREAM, KELAPPA_INK,
KelappaLogo, KelappaSmile,
});