// ─── Shared content data ────────────────────────────────────────────────

const ARCLINE_DATA = {
  brand: 'Arcline',
  tagline: 'AI product studio',
  hero: {
    eyebrow: 'AI Product Studio · Est. 2022',
    headline: ['We design', 'AI products', 'people', 'actually use.'],
    accent: 2, // index of word to accent ("people")
    sub: 'Arcline is an AI product consultancy. We partner with founders and ambitious teams to ship intelligent products — from research prototypes to production interfaces used by millions.',
    primaryCta: 'Start a project',
    secondaryCta: 'See our work',
    meta: [],
    ticker: ['Anthropic', 'Cresta', 'Linear', 'Mercury', 'Vercel', 'Hugging Face', 'Replicate', 'Modal', 'Pinecone'],
  },

  about: {
    eyebrow: 'About',
    head: ['We build the product layer', 'between models and the people', 'who depend on them.'],
    headAccentLineIdx: 2,
    copy: [
      "Foundation models are commodities. The product around them is not. We design the interfaces, agents, and workflows that turn raw model capability into outcomes — for analysts, doctors, engineers, support teams, students.",
      "We've been shipping interfaces for a decade and AI-native products since GPT-3. We embed deeply, prototype obsessively, and treat the model as a material, not a feature.",
    ],
    stats: [
      { num: '6', lbl: 'AI products shipped' },
      { num: '12', lbl: 'Year-old craft' },
      { num: '8', lbl: 'Designers + engineers' },
    ],
  },

  services: {
    eyebrow: 'Capabilities',
    head: ['How we', 'work with you.'],
    items: [
      {
        num: '01',
        title: 'AI product design',
        desc: 'End-to-end design of LLM-powered interfaces — chat, agents, copilots, and ambient assistants. We design for ambiguity, not happy paths.',
        tags: ['UX', 'Prototyping', 'Eval-driven design'],
      },
      {
        num: '02',
        title: 'Model UX & evals',
        desc: 'We build the harness around the model. Prompt design, tool-use orchestration, eval frameworks, and the interfaces to inspect and tune them.',
        tags: ['Prompting', 'Evals', 'Observability'],
      },
      {
        num: '03',
        title: 'Agent interfaces',
        desc: 'Designing the trust layer for autonomous systems — visibility into what the agent is doing, controls when it goes off-piste, recovery when it fails.',
        tags: ['Agents', 'Tool use', 'HITL'],
      },
      {
        num: '04',
        title: 'Brand & system',
        desc: 'AI-native brand systems and design systems built for products that change weekly. Tokens, components, motion principles, voice.',
        tags: ['Brand', 'Design systems', 'Tokens'],
      },
      {
        num: '05',
        title: 'Research & prototyping',
        desc: 'High-fidelity prototypes with real models in the loop. Pre-product, we help you find what is worth building before you commit eng cycles.',
        tags: ['R&D', 'Hi-fi prototypes', 'Usability'],
      },
      {
        num: '06',
        title: 'Embedded teams',
        desc: 'Drop a designer or design-engineer pair into your team for a quarter. We work in your stack, your repo, your standups.',
        tags: ['Embedded', 'Design eng', 'Pairing'],
      },
    ],
  },

  cases: {
    eyebrow: 'Case studies',
    head: ['Featured', 'projects.'],
    items: [
      {
        idx: '01',
        client: 'Nando’s',
        role: 'Lead engineer',
        title: 'Creating Nando’s Delivery: an on-demand home delivery platform.',
        desc: 'Spearheaded the development of Nando’s customer applications’ core API services — menu management, payments/checkout and authentication. Launched a direct-to-consumer home delivery platform that revolutionised the business model.',
        metrics: [
          { v: '$1.2M+', k: 'Revenue in 5 months' },
          { v: '99.5%', k: 'Platform uptime' },
          { v: '5', k: 'Core API services' },
        ],
        glyph: 'ND',
        year: '2021',
        layout: 'A',
      },
      {
        idx: '02',
        client: 'Burberry',
        role: 'Product delivery lead',
        title: 'Global search microservices across web, mobile and iOS.',
        desc: 'Led delivery of a new microservice enabling product search across Responsive Web App and iOS. Part of an enterprise replatforming from a monolith to microservices across the core eCommerce stack.',
        metrics: [
          { v: '19', k: 'Global markets' },
          { v: '3', k: 'Platforms · RWA + iOS' },
          { v: 'A/B', k: 'Tested & validated' },
        ],
        glyph: 'BB',
        year: '2020',
        layout: 'B',
      },
      {
        idx: '03',
        client: 'Charlotte Tilbury',
        role: 'Engineering squad lead',
        title: 'Personalised recommendations in real time at checkout.',
        desc: 'Led an engineering squad to deliver a new microservice on AWS Lambda providing customers with relevant, contextual product recommendations in real time during checkout — aimed at lifting Average Order Value.',
        metrics: [
          { v: '+25%', k: 'Revenue uplift (4 wks)' },
          { v: '£800K+', k: 'Projected annual revenue' },
          { v: 'Real-time', k: 'Recommendations' },
        ],
        glyph: 'CT',
        year: '2020',
        layout: 'A',
      },
      {
        idx: '04',
        client: 'Style.com · Condé Nast',
        role: 'Product engineering lead',
        title: 'Marketplace integration and product automation for 300 brands.',
        desc: 'Simplified data exchange between Magento, Salesforce Commerce Cloud, Shopify and the internal platform — streamlining orders, stock and product management for up to 300 partner brands.',
        metrics: [
          { v: '+40%', k: 'New products added' },
          { v: '-15%', k: 'Customer-care queries' },
          { v: '300', k: 'Partner brands' },
        ],
        glyph: 'CN',
        year: '2017',
        layout: 'B',
      },
      {
        idx: '05',
        client: 'White & Case',
        role: 'UX/UI design & development lead',
        title: 'Inside White & Case — an interactive content hub.',
        desc: 'Designed and developed an interactive content hub to sell the White & Case brand to prospective recruits. A responsive platform housing video, profiles, articles and thought leadership across themes, audiences and topics.',
        metrics: [
          { v: 'Platinum', k: 'Marcom Awards 2019' },
          { v: 'Multi-format', k: 'Content platform' },
          { v: 'Global', k: 'Recruitment reach' },
        ],
        glyph: 'WC',
        year: '2019',
        layout: 'A',
      },
    ],
  },

  process: {
    eyebrow: 'How we work',
    head: ['A four-step', 'engagement model.'],
    steps: [
      {
        n: '01',
        title: 'Listen.',
        copy: 'Two-week immersion. We sit with your team, your users, and your model. We watch how the current product fails — and where it surprises. No deck yet.',
        visual: 'listen',
      },
      {
        n: '02',
        title: 'Frame.',
        copy: 'We write the problem back to you in plain language. Sharp brief, sharp scope, sharp success criteria. We name the eval set we will hold ourselves to.',
        visual: 'frame',
      },
      {
        n: '03',
        title: 'Prototype.',
        copy: 'Hi-fi prototypes with a real model in the loop, week one. We learn faster from a flawed working thing than from a tidy spec. Iterate weekly.',
        visual: 'prototype',
      },
      {
        n: '04',
        title: 'Ship.',
        copy: 'We hand off in your stack — code, components, evals, and the runbook. Or we stay embedded through launch. You decide which.',
        visual: 'ship',
      },
    ],
  },

  skills: {
    eyebrow: 'Stack',
    head: ['The tools', 'in our hands.'],
    cols: [
      {
        num: '01',
        title: 'Design',
        items: ['Figma', 'Origami', 'Rive', 'After Effects', 'Cavalry', 'Spline'],
      },
      {
        num: '02',
        title: 'Front-end',
        items: ['React', 'Next.js', 'Tailwind', 'Framer Motion', 'GSAP', 'Three.js'],
      },
      {
        num: '03',
        title: 'AI / ML',
        items: ['LangChain', 'LlamaIndex', 'Inspect', 'Braintrust', 'Weights & Biases', 'DSPy'],
      },
      {
        num: '04',
        title: 'Models',
        items: ['Claude', 'GPT', 'Gemini', 'Llama', 'Mistral', 'Open-source'],
      },
      {
        num: '05',
        title: 'Infra',
        items: ['Vercel', 'Modal', 'Pinecone', 'Supabase', 'Cloudflare', 'Replicate'],
      },
    ],
  },

  awards: [
    { year: '2020', title: 'Hermes Creative Awards · Platinum', lbl: 'White & Case' },
    { year: '2019', title: 'Hermes Creative Awards · Platinum', lbl: 'White & Case' },
    { year: '2019', title: 'Marcom Awards · Platinum', lbl: 'Inside White & Case' },
  ],

  contact: {
    head: ['Have an idea', 'worth shipping?'],
    sub: 'We take on three to four engagements per quarter. If you are building something with AI at its core and want a partner who codes the prototype, we should talk.',
    primary: { lbl: 'Start a project', href: '#' },
    secondary: { lbl: 'hello@arcline.studio', href: '#' },
    tertiary: { lbl: 'Book a 20-min intro', href: '#' },
  },
};

window.ARCLINE_DATA = ARCLINE_DATA;

// ─── Process step visuals (animated SVGs) ───────────────────────────────
function ProcessVisual({ kind }) {
  if (kind === 'listen') {
    return (
      <svg viewBox="0 0 200 240" fill="none" stroke="currentColor" strokeWidth="0.8">
        <g className="pv-listen">
          {[...Array(12)].map((_, i) => (
            <circle key={i} cx="100" cy="120" r={20 + i * 8} opacity={1 - i * 0.07} />
          ))}
          <circle cx="100" cy="120" r="4" fill="var(--accent)" stroke="none" />
          <line x1="100" y1="120" x2="180" y2="40" />
          <text x="182" y="38" fontSize="6" fontFamily="var(--mono)" fill="currentColor" stroke="none">USER_03</text>
          <line x1="100" y1="120" x2="30" y2="60" />
          <text x="10" y="58" fontSize="6" fontFamily="var(--mono)" fill="currentColor" stroke="none">USER_01</text>
          <line x1="100" y1="120" x2="40" y2="200" />
          <text x="14" y="214" fontSize="6" fontFamily="var(--mono)" fill="currentColor" stroke="none">USER_05</text>
          <line x1="100" y1="120" x2="170" y2="190" />
          <text x="148" y="206" fontSize="6" fontFamily="var(--mono)" fill="currentColor" stroke="none">USER_08</text>
        </g>
      </svg>
    );
  }
  if (kind === 'frame') {
    return (
      <svg viewBox="0 0 200 240" fill="none" stroke="currentColor" strokeWidth="0.8">
        <rect x="20" y="30" width="160" height="180" />
        <line x1="20" y1="60" x2="180" y2="60" />
        <text x="28" y="50" fontSize="7" fontFamily="var(--mono)" fill="currentColor" stroke="none">// BRIEF.md</text>
        <line x1="30" y1="80" x2="160" y2="80" strokeWidth="3" stroke="var(--accent)" />
        <line x1="30" y1="92" x2="140" y2="92" />
        <line x1="30" y1="102" x2="160" y2="102" />
        <line x1="30" y1="112" x2="120" y2="112" />
        <line x1="30" y1="132" x2="100" y2="132" strokeWidth="3" stroke="var(--accent)" />
        <line x1="30" y1="144" x2="160" y2="144" />
        <line x1="30" y1="154" x2="150" y2="154" />
        <line x1="30" y1="164" x2="130" y2="164" />
        <line x1="30" y1="184" x2="80" y2="184" strokeWidth="3" stroke="var(--accent)" />
        <line x1="30" y1="196" x2="120" y2="196" />
      </svg>
    );
  }
  if (kind === 'prototype') {
    return (
      <svg viewBox="0 0 200 240" fill="none" stroke="currentColor" strokeWidth="0.8">
        <rect x="14" y="28" width="84" height="100" />
        <line x1="14" y1="42" x2="98" y2="42" />
        <circle cx="22" cy="35" r="2" />
        <circle cx="30" cy="35" r="2" />
        <rect x="22" y="52" width="68" height="12" stroke="var(--accent)" />
        <line x1="22" y1="72" x2="80" y2="72" />
        <line x1="22" y1="82" x2="68" y2="82" />
        <line x1="22" y1="92" x2="76" y2="92" />

        <rect x="102" y="44" width="84" height="100" />
        <line x1="102" y1="58" x2="186" y2="58" />
        <rect x="110" y="68" width="68" height="12" fill="var(--accent)" stroke="none" />
        <line x1="110" y1="90" x2="168" y2="90" />
        <line x1="110" y1="100" x2="156" y2="100" />
        <line x1="110" y1="110" x2="172" y2="110" />

        <rect x="58" y="124" width="84" height="100" />
        <line x1="58" y1="138" x2="142" y2="138" />
        <line x1="66" y1="150" x2="124" y2="150" />
        <line x1="66" y1="162" x2="134" y2="162" />
        <rect x="66" y="178" width="68" height="20" stroke="var(--accent)" strokeWidth="1.4" />
      </svg>
    );
  }
  // ship
  return (
    <svg viewBox="0 0 200 240" fill="none" stroke="currentColor" strokeWidth="0.8">
      <path d="M40 200 L100 40 L160 200 Z" />
      <path d="M100 40 L100 200" strokeDasharray="2 4" />
      <circle cx="100" cy="40" r="6" fill="var(--accent)" stroke="none" />
      <line x1="60" y1="155" x2="140" y2="155" stroke="var(--accent)" strokeWidth="1.4" />
      <text x="68" y="148" fontSize="6" fontFamily="var(--mono)" fill="currentColor" stroke="none">LAUNCH</text>
      <text x="44" y="218" fontSize="6" fontFamily="var(--mono)" fill="currentColor" stroke="none">EVALS</text>
      <text x="100" y="218" fontSize="6" fontFamily="var(--mono)" fill="currentColor" stroke="none">CODE</text>
      <text x="146" y="218" fontSize="6" fontFamily="var(--mono)" fill="currentColor" stroke="none">RUNBOOK</text>
    </svg>
  );
}

window.ProcessVisual = ProcessVisual;
