Rebuild package
Handoff
Everything needed to move Responser into a Next.js monorepo: the theme as one config block, the archived logo files, the component inventory (shadcn/ui names) and the full page inventory with routes.
01 · Tokens
Tailwind theme tokens — single config block
/* Responser theme — single Tailwind v4 config block (src/styles.css).
* Luminous dark is the default; .dark mirrors the same branded surfaces;
* .app-light is the app.responser.com light theme. */
@theme inline {
--font-sans: "Inter", ui-sans-serif, system-ui, sans-serif;
--font-mono: "JetBrains Mono", ui-monospace, monospace;
--font-display: "Outfit", "Inter", ui-sans-serif, sans-serif;
--radius-control: 0.5rem; /* buttons, inputs, chips */
--radius-card: 0.75rem; /* cards, panels, dialogs */
--radius-sm: 0.25rem;
--duration-control: 120ms; /* hovers, tab switches */
--duration-overlay: 180ms; /* dialogs, toasts, entrances */
--spacing: 0.25rem; /* 4px base scale: 4 8 12 16 24 32 48 64 */
}
:root {
/* Neutrals (grey ramp 50–950, cool hue 265) */
--grey-50: oklch(0.985 0.002 265); --grey-500: oklch(0.6 0.015 265);
--grey-100: oklch(0.965 0.003 265); --grey-600: oklch(0.49 0.017 265);
--grey-200: oklch(0.925 0.005 265); --grey-700: oklch(0.395 0.018 265);
--grey-300: oklch(0.872 0.007 265); --grey-800: oklch(0.3 0.018 265);
--grey-400: oklch(0.72 0.012 265); --grey-900: oklch(0.225 0.018 265);
--grey-950: oklch(0.155 0.017 265);
/* Surfaces & ink — dark canvas default */
--background: oklch(0.105 0.012 285);
--paper: oklch(0.145 0.02 285);
--foreground: oklch(0.985 0.004 285);
--muted-foreground: oklch(0.76 0.024 285);
--subtle-foreground: oklch(0.64 0.026 285);
--border: oklch(0.985 0.004 285 / 0.13);
--rule: oklch(0.985 0.004 285 / 0.17);
--track: oklch(0.985 0.004 285 / 0.12);
/* Brand — Signal violet primary, luminous spectrum */
--primary: oklch(0.74 0.22 308); /* Signal violet #B56BFF */
--primary-strong: oklch(0.79 0.2 326); /* Kinetic pink #F65BB7 */
--primary-soft: oklch(0.74 0.22 308 / 0.16);
--luminous-hot: oklch(0.7 0.26 326); /* hot pink */
--luminous-cyan: oklch(0.8 0.14 205); /* Signal cyan #74DDE9 */
--teal: oklch(0.82 0.14 202);
/* Accents */
--amber: oklch(0.84 0.17 78); /* Score amber #F5C657 */
--success: oklch(0.8 0.17 153);
--warning: oklch(0.84 0.17 78);
--danger: oklch(0.72 0.2 25);
--info: oklch(0.82 0.13 220);
/* Logo gradient — violet → hot → cyan (underline, fetch pulse) */
--spectrum-violet: oklch(0.72 0.2 272); /* #8B7CF6 */
--spectrum-pink: oklch(0.7 0.26 326); /* #E85BC7 */
--spectrum-amber: oklch(0.84 0.17 78);
/* Elevation — minimal, luminous */
--shadow-1: 0 1px 0 oklch(0.985 0.004 285 / 0.08),
0 10px 32px oklch(0.03 0.015 285 / 0.22);
--shadow-2: 0 28px 80px oklch(0.03 0.015 285 / 0.56),
0 0 0 1px oklch(0.985 0.004 285 / 0.05);
}02 · Logos
Logo files (archived under src/assets/logo-explorations/v03-fetch-gradient/)
responser-lockup-dark.svg
Full lockup on dark backgrounds (site default)
responser-lockup-light.svg
Full lockup on light backgrounds
responser-lockup-mono-black.svg
One-colour black — print, emboss, single ink
responser-lockup-mono-white.svg
One-colour white — print, emboss, single ink
responser-lockup-animated.svg
Lockup with the fetch pulse (SMIL; static fallback)
responser-mark-dark.svg / -light.svg
Compact R mark with gradient underline
responser-mark-mono-black.svg / -mono-white.svg
One-colour compact marks
responser-mark-animated.svg
Compact mark with pulse
responser-favicon.svg
64×64 app icon on #111015
favicon set (16/32/180/192/512)
Derive from responser-mark + favicon; PNG app icons for iOS/Android
Wordmark is Outfit 700 italic, uppercase — convert text to outlines before print. The underline carries the gradient #8B7CF6 → #E85BC7 → #7DEBEE and pulses forward (fetch motion); animated variants fall back to static where SMIL is unsupported.
03 · Components
Component inventory (shadcn/ui names)
Button
brand/primitives — primary, secondary, ghost, danger, link; sm/md/lg/icon, loading
Input / Select / Field
brand/primitives — invalid state, hint, focus ring
Badge
brand/primitives — neutral, primary, teal, amber, success, warning, danger, info
Card / SpecCard
brand/primitives — luminous-panel surface
Tabs
brand/primitives — segmented control, aria-selected
Dialog
brand/primitives — Escape close, overlay click
Toast
brand/primitives — success state (use Sonner in app shell)
Skeleton
brand/primitives — track-coloured pulse
EmptyState
brand/primitives — icon, title, body, action
ScoreRing
brand/primitives — 0–100 ring, amber ≥80, violet ≥50
ConfidenceBar
brand/primitives — labelled progress bar
TimerChip
brand/primitives — “Replied in 0:42”, live pulse
SourceTag / IntentBadge / StatusBadge
app/ui — lead metadata tags
Switch / Segmented / Panel / Bar / MiniRing / ReplyTimer
app/ui — app-shell controls
04 · Pages
Page & screen inventory with routes
Marketing — Home
/
index.tsx
Marketing — Product
/product · /product/capture · qualify · respond · recover · attribute
product.tsx, product.$slug.tsx
Marketing — Solutions
/solutions · /solutions/$industry
solutions*.tsx
Marketing — Pricing
/pricing
pricing.tsx
Marketing — Compare
/compare/$competitor
compare.$competitor.tsx
Marketing — Resources
/resources · speed-to-lead-europe · tools · glossary · form-providers/$provider
resources*.tsx
Marketing — Developers / Security / About / Contact
/developers · /security · /about · /contact
developers.tsx et al.
Brand manual
/brand
brand.tsx
Email templates
/emails
emails.tsx
Handoff
/handoff
handoff.tsx
App — Dashboard
/app
app.index.tsx
App — Inbox / Lead card
/app/inbox · /app/leads/$id
app.inbox.tsx, app.leads.*.tsx
App — Approvals / Leads / Analytics
/app/approvals · /app/leads · /app/analytics
app.approvals.tsx et al.
App — Forms / Knowledge / Integrations / Settings
/app/forms · /app/knowledge · /app/integrations · /app/settings
app.*.tsx
App — States gallery
/app/states
app.states.tsx
App — Support
/app/support
app.support.tsx
Operator desk
/admin · /admin/customers/$id · /admin/support · /admin/growth
admin*.tsx
Onboarding
/onboarding
onboarding.tsx
05 · Emails
Email templates (React Email + Resend)
Eleven table-safe templates at 600 px live at /emails: three filled customer replies (logo slot, brand colour slot, plain-text-first body, booking button, signature, optional AI footer, optional unsubscribe), one recovery message with a single resume button, and seven Responser product emails. All colours are hex in src/components/emails/primitives.tsx so the React Email build needs no Tailwind.