kahulogic.com · brand kit · developer handover
Everything the website is built from
Logo files, colour tokens, type scale, buttons, cards, the Kahu orb and the grain gradients. Values here are the exact ones used across every page in this project; copy them as-is.
01 · Logo
One wordmark, one mark, two grounds
The full logo sits in the nav (52px tall) and footer (56px). The mark alone is used at 28–30px as a favicon, in eyebrows and on tiles. Never recolour, stretch or add effects. Clear space is the height of the mark on every side.

brand/kahulogic-logo.png
brand/kahulogic-logo-white.pngbrand/kahulogic-mark.svg · brand/kahulogic-mark.png02 · Colour
White ground, ink type, one coral accent
Pages are white with warm paper sections for rhythm. Coral is the only accent and is reserved for primary buttons, eyebrow labels, links on hover and live indicators. The brand spectrum appears only in the gradient mark, the growth gradient and the orb, never as flat UI colour.
Core tokens
Brand spectrum · gradient mark, orb, growth gradient only
--brand-grad: linear-gradient(105deg,#0048ff 0%,#00a4ff 22%,#00ffff 38%,#ffe8b4 52%,#ffc43a 66%,#ff6c36 82%,#3a61fe 100%)Soft tints · mega-menu promos, icon chips
Product heroes carry one soft radial glow in the top-left, never a full gradient background.
radial-gradient(ellipse 42% 55% at 18% 22%, rgba(0,164,255,.22), rgba(0,164,255,0) 70%)
radial-gradient(ellipse 42% 55% at 12% 18%, rgba(255,77,0,.16), rgba(255,77,0,0) 70%)Body text is #16161d or #5c5c66 on white or paper (both above 4.5:1). #9a9aa3 is for mono captions only, never body copy. White text on coral #FF4D00 is for buttons at 16px 600 and above; use #d94100 for coral text on white.
03 · Typography
Three families from Google Fonts
Space Grotesk for headings and buttons, Hanken Grotesk for everything you read, Space Mono for small labels and code. Headings use tight negative tracking; body never does.
Display · weights 500, 600, 700. Headings, buttons, card titles, big numbers.
Body · weights 400, 500, 600. Paragraphs, nav links, form fields, UI copy.
Labels · weights 400, 700. Eyebrows, captions, timestamps, code.
https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Hanken+Grotesk:wght@400;500;600&family=Space+Mono:wght@400;700&display=swapfont:600 clamp(38px,5.4vw,72px)/1 'Space Grotesk'; letter-spacing:-0.035em; text-wrap:balancefont:600 clamp(30px,3.6vw,48px)/1.05 'Space Grotesk'; letter-spacing:-0.03emfont:600 19px 'Space Grotesk' · card titles 16–20px, letter-spacing:-0.02emfont-size:clamp(17px,1.4vw,20px); line-height:1.5; color:#5c5c66; max-width:64chfont-size:15px (14–18px); line-height:1.5; color:#16161d or #5c5c66font:400 12px 'Space Mono'; letter-spacing:.14em; text-transform:uppercase; color:#d94100font:400 11–12.5px 'Space Mono'; letter-spacing:.06em; color:#9a9aa304 · Buttons, pills, cards
Soft corners, hairline borders, no drop shadows on rest
One coral primary per view. Secondary actions are ghost buttons. Cards are white with a 1px ink hairline; shadow appears only on hover or when a card floats over a photo.
Primary font:600 16px 'Space Grotesk'; background:#FF4D00; color:#fff; padding:15px 26px; border-radius:14px
hover: translateY(-2px) + 0 10px 24px -10px rgba(0,0,0,.11)
Ghost background:#fff; color:#16161d; border:1px solid rgba(22,22,29,.12); same padding/radius
hover: background:#16161d; color:#fff
Nav CTA 14.5px; padding:12px 22px Small: 15px; padding:12px 22px; radius 100px (pill variant)On ink primary flips to white/ink; ghost border rgba(255,255,255,.35), hover fills white
Glass rgba(255,255,255,.14) + 1px rgba(255,255,255,.35); backdrop-filter:blur(6px); radius 999px
Ink card background:#16161d; text #fff; dim text rgba(247,246,242,.6); hairline rgba(247,246,242,.12)background:#fff; border:1px solid rgba(22,22,29,.1); border-radius:16px; padding:24px
hover: translateY(-2px); box-shadow:0 24px 48px -32px rgba(22,22,29,.14)Image or gradient inset 10px, radius 12 inside 18.
outer radius 18px, padding 10px; media radius 12px; white tag pill 12px 600Accordion question
−
Answer copy at 15px, dim ink.
Second question
+
Hidden until opened.
FAQ rows: border-top 1px rgba(22,22,29,.12); padding 20px 0; H3 19px; first item open8–9px chips · 12px inner media · 14px buttons, small cards · 16–18px cards · 24px hero frames · 28px feature wraps · 999px pillsrgba(22,22,29,.08) card edge · .10 dividers · .12 inputs, buttons · on ink rgba(247,246,242,.12)hover 0 24px 48px -32px rgba(22,22,29,.14) · floating over photo 0 30px 60px -28px rgba(22,22,29,.55) · hero frame 0 40px 80px -40pxborder 1px rgba(22,22,29,.12); radius 9–12px; padding 9–12px 14px; focus border #FF4D00; label 10.5px mono #9a9aa305 · Layout & motion
1320 wide, sections that breathe
Every page is the same shell: fixed nav, white main, ink footer. Sections alternate white and paper. Motion is slow and eased; nothing bounces.
.wrap max-width:1320px; margin:0 auto; padding:0 24px (16px under 600px)
nav-inner padding 18px 36px; nav height ~73–89pxpadding: clamp(56px,7vw,88px) 0
hero: 64–72px top
heading → content gap: 36–40px
grid gap: 16px cards · 48px two-column text1160px mega-menu tightens
980px 3-col → 2-col, 2-col text stacks
940px nav collapses to burger
600px everything single column, 16px gutters--ease cubic-bezier(.22,1,.36,1)
--ease-out cubic-bezier(.16,1,.3,1)
hover .3–.35s · reveals .6–.8s · gradient drift 22s#fff · #faf9f6 · #f6f5f1 · #16161d (footer, dark feature bands)06 · Kahu orb
The assistant has one face
A particle sphere in the brand spectrum with a coral glow. It stands for Kahu wherever the assistant speaks, drafts or acts: composers, chat bubbles, "sent by Kahu" pills, the mega-menu promo. Four states, rendered live by kahu-orb.js.
Resting in the composer. Slow breathe.
User typing or speaking. Soft squash.
Kahu is working. The swarm churns.
Done. Particles settle into the Kahu mark.
On white · theme="light"
<script src="./kahu-orb.js"></script> <kahu-orb state="idle" theme="auto" size="96"></kahu-orb> state idle | listening | thinking | shipped theme auto | dark | light (auto samples the background) size px, square // JS el.state = 'thinking'; el.theme = 'light';
07 · Grain gradients
Colour fields with film grain
The ground for placeholders, announcement tiles and index cards, wherever there is no product screen or photo to show. Six palettes built from the brand colours, one recipe, rendered live so the grain stays crisp at any size.
Six palettes
Built from colours the brand already owns
Soft, dusty versions of the brand hues, never the saturated colours themselves. Each palette pairs a ground with four or five field colours and white text, so tiles read calm next to the white product UI.
The recipe
Four layers, always in this order
Blobs are placed, not random, a seed only mirrors the field. Grain is monochrome noise blended over the top and must be visible at 100%. Lines are optional and never on more than one tile per view.
paper.overlay at .45–.65. This is the signature.waves) or a two-way mesh, soft-light.In use
Around the product, never inside it
Dashboard recreations stay on white. Gradients carry the surfaces beside them: index cards, changelog tiles, photo placeholders, dark assistant cards.
One brief, four channels, one budget.
Gradient rules
Usage
<script src="./kahu-grain.js"></script> <kahu-grain palette="tide" lines="waves" seed="1" style="border-radius:18px;height:220px"></kahu-grain> <!-- as a placeholder ground --> <div style="position:relative;aspect-ratio:4/3;overflow:hidden"> <kahu-grain palette="kelp" style="position:absolute;inset:0"></kahu-grain> <image-slot id="team-photo" style="position:absolute;inset:0;color:#fff"></image-slot> </div>
Full spec in brand/gradients.md. Component: kahu-grain.js. Attributes: palette, lines (none · waves · mesh), seed 0–3, grain 0–1, animate.
08 · Icons
Lucide for UI, official marks for partners
Interface icons are Lucide at 1.5px stroke, 18–22px, in the current text colour. Partner and channel logos are the official marks, unchanged, kept in icons/. No emoji anywhere on the site.
https://cdn.jsdelivr.net/npm/lucide-static@latest/icons/{name}.svg
chip: 30–44px, radius 9–12px, background #f6f5f1 or a soft tint (#FFF1EA coral · #d8ecfe azure · #e9e2ff violet · #ffeeca gold)
icons/brand-google · brand-meta · brand-facebook · brand-instagram · brand-tiktok · brand-linkedin · brand-whatsapp · brand-gmail · brand-xero
Also: icons/direct-url.svg, icons/wa-read.svg (WhatsApp read ticks)09 · Files
Where everything lives
Paths are relative to the project root. Shared components are built once and imported by every page; edit them in one place.
brand/kahulogic-logo.pngcolourbrand/kahulogic-logo-white.pngon inkbrand/kahulogic-mark.svgvector markbrand/kahulogic-mark.pngraster markkahu-orb.jsassistant orbkahu-grain.jsgrain gradientskahu-magnet.jsbutton magnet hoverkahu-director.jshero demo sequencingimage-slot.jsphoto placeholderSiteNav.dc.htmlnav + mega menuSiteFooter.dc.htmlfootersite-chrome.cssnav/footer tokenssite-chrome.jsnav behaviourShowcase.dc.htmlbusiness carouselTabWorkspace.dc.htmltabbed feature demoFeatureCards.dc.htmlphoto cardsIndustryDay.dc.htmlsolutions day timelineWhyStatement.dc.html"why" listimg/photography (Wix-licensed under img/wix)icons/partner marksog/social share cards, 1200×630brand/demo/demo customer logosblog-posts.js · articles/blog datasitemap.xml · robots.txt · llms.txtcrawl filesbrand/gradients.mdgradient specIndex.dc.htmlpage map