{
  "$schema": "/schemas/registry-item.json",
  "name": "spectrum-studio",
  "type": "registry:page",
  "title": "Spectrum Studio",
  "description": "A high-energy independent creative studio theme for brand, product, web, and motion work.",
  "categories": [
    "agency",
    "creative",
    "portfolio"
  ],
  "dependencies": [],
  "registryDependencies": [
    "button",
    "card",
    "carousel"
  ],
  "files": [
    {
      "path": "site/app/themes/spectrum-studio/preview/page.tsx",
      "type": "registry:page",
      "target": "app/spectrum-studio/page.tsx",
      "content": "import type { Metadata } from \"next\";\nimport SpectrumExperience from \"./SpectrumExperience\";\nimport \"./spectrum-studio.css\";\n\nexport const metadata: Metadata = {\n  title: \"Spectrum Studio — Independent Creative Studio\",\n  description: \"A high-energy creative studio theme for brand, product, web, and motion work, built with Coordiation.\",\n};\n\nexport default function SpectrumStudioPreview() {\n  return <SpectrumExperience />;\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/work/[slug]/page.tsx",
      "type": "registry:page",
      "target": "app/spectrum-studio/work/[slug]/page.tsx",
      "content": "import type { Metadata } from \"next\";\nimport { notFound } from \"next/navigation\";\nimport CaseVisual from \"../../CaseVisual\";\nimport ThemeIcon from \"../../ThemeIcon\";\nimport { getSpectrumProject, spectrumProjects } from \"../../projects\";\nimport \"../../spectrum-studio.css\";\n\nexport function generateStaticParams() {\n  return spectrumProjects.map(({ slug }) => ({ slug }));\n}\n\nexport async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n  const { slug } = await params;\n  const project = getSpectrumProject(slug);\n  if (!project) return { title: \"Project not found\" };\n  return { title: `${project.title} — Spectrum Studio`, description: project.summary, openGraph: { title: `${project.title} — Spectrum Studio`, description: project.summary, images: [project.image] }, twitter: { card: \"summary_large_image\", title: `${project.title} — Spectrum Studio`, description: project.summary, images: [project.image] } };\n}\n\nexport default async function SpectrumProjectDetail({ params }: { params: Promise<{ slug: string }> }) {\n  const { slug } = await params;\n  const project = getSpectrumProject(slug);\n  if (!project) notFound();\n  const index = spectrumProjects.findIndex((item) => item.slug === project.slug);\n  const next = spectrumProjects[(index + 1) % spectrumProjects.length];\n\n  return <main className=\"spectrum-studio sp-case-page\" id=\"top\">\n    <header className=\"sp-header co-flex co-items-center co-justify-between\"><a className=\"sp-wordmark\" href=\"/themes/spectrum-studio/preview\" aria-label=\"Spectrum home\">SPECTRUM<span>*</span></a><nav className=\"sp-case-nav co-flex co-items-center\" aria-label=\"Project navigation\"><a href=\"/themes/spectrum-studio/preview#work\">All projects</a><a href=\"/themes/spectrum-studio/preview#studio\">Studio</a><a href=\"/themes/spectrum-studio/preview/start-project\">Start a project</a></nav></header>\n    <section className=\"sp-case-hero\"><div className=\"sp-case-top co-flex co-items-center co-justify-between\"><p className=\"sp-kicker\">01 / Selected project</p><p>{project.number}</p></div><h1>{project.title}</h1><div className=\"sp-case-meta co-grid\"><div><span>Client</span><strong>{project.client}</strong></div><div><span>Year</span><strong>{project.year}</strong></div><div><span>Scope</span><strong>{project.scope}</strong></div></div><CaseVisual image={project.image} alt={project.alt} /></section>\n    <section className=\"sp-case-intro sp-paper co-grid\"><div className=\"sp-case-label co-flex co-flex-col co-justify-between\"><p className=\"sp-kicker\">02 / The assignment</p><span>{project.discipline}</span></div><div><h2>{project.summary}</h2><div className=\"sp-case-body co-grid\"><p>{project.context}</p><p>{project.approach}</p></div></div></section>\n    <section className=\"sp-case-system\"><div className=\"sp-case-section-head co-grid\"><p className=\"sp-kicker\">03 / The system</p><h2>ONE SIGNAL.<br /><span>ENDLESS RANGE.</span></h2></div><figure className=\"sp-case-prism co-relative co-overflow-hidden\"><img className=\"co-w-full co-h-full co-object-cover\" src={project.image} alt=\"\" /><div aria-hidden=\"true\" /><figcaption>MOVE YOUR POINT OF VIEW</figcaption></figure><div className=\"sp-case-system-copy co-grid\"><p>形に意味を与える</p><p>{project.system}</p></div></section>\n    <section className=\"sp-case-results sp-paper\"><div className=\"sp-case-section-head co-grid\"><p className=\"sp-kicker\">04 / The outcome</p><h2>Built to stay clear<br /><em>while everything moves.</em></h2></div><div className=\"sp-case-results-grid co-grid\">{project.results.map(([title,copy],resultIndex)=><article className=\"co-flex co-flex-col\" key={title}><span>{String(resultIndex+1).padStart(2,\"0\")}</span><h3>{title}</h3><p>{copy}</p></article>)}</div></section>\n    <section className=\"sp-case-gallery sp-paper co-grid\" aria-label=\"Project imagery\"><figure><img className=\"co-w-full co-h-full co-object-cover\" src={project.image} alt={`${project.title} full project view`} /></figure><figure><img className=\"co-w-full co-h-full co-object-cover\" src={project.image} alt={`${project.title} detail view`} /></figure></section>\n    <section className=\"sp-case-next\"><p className=\"sp-kicker\">05 / Continue exploring</p><a className=\"co-grid co-items-end\" href={`/themes/spectrum-studio/preview/work/${next.slug}`}><span>Next project</span><strong>{next.title}</strong><ThemeIcon name=\"arrow-up\" size={32} tone=\"ink\" /></a></section>\n    <footer className=\"sp-case-footer co-grid co-items-center\"><a href=\"mailto:hello@spectrum.studio\">hello@spectrum.studio</a><span>Jakarta · Working worldwide</span><span>© 2026 Coordiation</span><a className=\"co-inline-flex co-items-center\" href=\"#top\">Top <ThemeIcon name=\"arrow-up\" size={14} /></a></footer>\n  </main>;\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/projects.ts",
      "type": "registry:file",
      "target": "app/spectrum-studio/projects.ts",
      "content": "export type SpectrumProject = {\n  slug: string;\n  title: string;\n  client: string;\n  year: string;\n  number: string;\n  scope: string;\n  discipline: string;\n  image: string;\n  alt: string;\n  summary: string;\n  context: string;\n  approach: string;\n  system: string;\n  results: readonly (readonly [string, string])[];\n};\n\nexport const spectrumProjects: readonly SpectrumProject[] = [\n  {\n    slug: \"chromatic-ritual\", title: \"Chromatic Ritual\", client: \"Astra\", year: \"2026\", number: \"01 — 06\", scope: \"Brand system · Campaign\", discipline: \"Identity / Art direction\", image: \"/themes/spectrum-studio/project-01.jpg\", alt: \"Iridescent glass forms against a teal background\",\n    summary: \"A visual identity designed to move between culture, product, and space without losing its signal.\",\n    context: \"Astra was growing beyond a single product. The brand needed a recognisable language that could connect launches, collaborations, and live experiences.\",\n    approach: \"We built a flexible system around refracted light, lucid surfaces, and controlled repetition—giving every expression a shared rhythm while leaving room for surprise.\",\n    system: \"The identity behaves like light through glass: one source becoming many expressions. Typography stays direct while colour, crop, and motion create a different ritual at every scale.\",\n    results: [[\"Recognition\", \"A distinctive visual signature across every touchpoint.\"], [\"Flexibility\", \"A modular system that scales without becoming predictable.\"], [\"Momentum\", \"A launch language designed for continuous evolution.\"]],\n  },\n  {\n    slug: \"motion-engineered\", title: \"Motion, Engineered\", client: \"Vektor\", year: \"2026\", number: \"02 — 06\", scope: \"Digital · Motion · Launch\", discipline: \"Experience / Motion\", image: \"/themes/spectrum-studio/project-02.jpg\", alt: \"Colorful neon illustrations covering a city facade at night\",\n    summary: \"A launch experience that turns an engineered product story into an electric public signal.\",\n    context: \"Vektor needed to introduce a new platform without sounding like every other technology launch. The experience had to feel precise and alive at once.\",\n    approach: \"We translated technical performance into a kinetic language of illuminated lines, directional type, and responsive sequences that accelerate with attention.\",\n    system: \"Every touchpoint follows one motion principle: energy travels, gathers, and releases. The result connects campaign film, product UI, web, and city-scale media as one continuous event.\",\n    results: [[\"Clarity\", \"Complex performance translated into a simple visual story.\"], [\"Energy\", \"A motion language recognisable in less than a second.\"], [\"Launch\", \"One system connecting screens, spaces, and social media.\"]],\n  },\n  {\n    slug: \"nothing-static\", title: \"Nothing Static\", client: \"Kinetik\", year: \"2025\", number: \"03 — 06\", scope: \"Strategy · Identity · Product\", discipline: \"Brand / Product\", image: \"/themes/spectrum-studio/project-03.jpg\", alt: \"Abstract chrome structure with iridescent edges\",\n    summary: \"A product brand shaped around continuous change, without sacrificing precision or trust.\",\n    context: \"Kinetik operates in a category built on speed, but its old identity felt fixed. The challenge was to create movement without relying on familiar performance clichés.\",\n    approach: \"We used tension, reflection, and shifting geometry to make change visible. A restrained base system keeps the brand credible while chromatic edges reveal its energy.\",\n    system: \"The visual language never presents a fully closed form. Frames bend, surfaces respond, and layouts create implied direction—making even still applications feel ready to move.\",\n    results: [[\"Precision\", \"A sharper system for product and commercial teams.\"], [\"Distinction\", \"A category-defying look built from proprietary behaviours.\"], [\"Scale\", \"Shared rules across product, brand, and partner channels.\"]],\n  },\n  {\n    slug: \"form-after-dark\", title: \"Form After Dark\", client: \"Noir Lab\", year: \"2025\", number: \"04 — 06\", scope: \"Identity · Environment\", discipline: \"Culture / Spatial\", image: \"/themes/spectrum-studio/project-04.jpg\", alt: \"Neon-lit skyscrapers rising into the night fog\",\n    summary: \"An identity for nocturnal culture that uses darkness as material rather than background.\",\n    context: \"Noir Lab needed to connect a programme of music, architecture, and late-night events under one name without flattening their individual character.\",\n    approach: \"We designed for low light first: luminous typography, atmospheric gradients, and structures that emerge gradually instead of demanding attention all at once.\",\n    system: \"Contrast controls the experience. Dense black fields create pause; electric cyan and magenta mark moments of discovery across posters, tickets, screens, and spaces.\",\n    results: [[\"Atmosphere\", \"A brand recognised as much by mood as by its mark.\"], [\"Coherence\", \"One visual structure for a diverse cultural programme.\"], [\"Presence\", \"A system engineered to perform in physical space.\"]],\n  },\n  {\n    slug: \"human-interface\", title: \"Human Interface\", client: \"Synapse\", year: \"2026\", number: \"05 — 06\", scope: \"Product · Design system\", discipline: \"UX / Interface\", image: \"/themes/spectrum-studio/project-05.jpg\", alt: \"Rainbow skylight casting color across concrete architecture\",\n    summary: \"A digital system that makes advanced technology feel calm, legible, and unmistakably human.\",\n    context: \"Synapse had powerful technology and a fragmented experience. Users needed a clearer sense of place, progress, and control across an expanding platform.\",\n    approach: \"We created an interface architecture based on natural light: information appears in layers, colour signals context, and motion explains what changed and why.\",\n    system: \"A shared component language connects product and brand. Strong structural grids carry complex information, while spectral accents guide the eye without becoming decoration.\",\n    results: [[\"Orientation\", \"Clearer journeys through complex product workflows.\"], [\"Consistency\", \"A shared component system across every team.\"], [\"Confidence\", \"A calmer experience for high-stakes decisions.\"]],\n  },\n  {\n    slug: \"secret-language\", title: \"Secret Language\", client: \"Orphic\", year: \"2025\", number: \"06 — 06\", scope: \"Brand · Editorial · Digital\", discipline: \"Editorial / Culture\", image: \"/themes/spectrum-studio/project-06.jpg\", alt: \"Iridescent light refracting through textured glass\",\n    summary: \"An editorial identity that rewards curiosity and turns ambiguity into a reason to look closer.\",\n    context: \"Orphic curates emerging ideas across art and technology. It needed a system that could hold strong voices together without explaining away their mystery.\",\n    approach: \"We paired rigorous typography with translucent layers and coded details. The surface stays quiet from a distance and becomes richer as the audience moves closer.\",\n    system: \"Information is organised in visible and hidden layers. Texture distorts the expected reading order, while a disciplined grid ensures the experience never loses clarity.\",\n    results: [[\"Curiosity\", \"A visual language that invites deeper attention.\"], [\"Voice\", \"Editorial tools that amplify different contributors.\"], [\"Continuity\", \"A system connecting print, web, and exhibitions.\"]],\n  },\n] as const;\n\nexport function getSpectrumProject(slug: string) {\n  return spectrumProjects.find((project) => project.slug === slug);\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/CaseVisual.tsx",
      "type": "registry:component",
      "target": "app/spectrum-studio/CaseVisual.tsx",
      "content": "\"use client\";\n\nimport { useRef, type PointerEvent } from \"react\";\n\nexport default function CaseVisual({ image, alt }: { image: string; alt: string }) {\n  const visualRef = useRef<HTMLDivElement>(null);\n\n  const move = (event: PointerEvent<HTMLDivElement>) => {\n    if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n    const rect = event.currentTarget.getBoundingClientRect();\n    const x = (event.clientX - rect.left) / rect.width - 0.5;\n    const y = (event.clientY - rect.top) / rect.height - 0.5;\n    visualRef.current?.style.setProperty(\"--sp-case-x\", `${((x + 0.5) * 100).toFixed(1)}%`);\n    visualRef.current?.style.setProperty(\"--sp-case-y\", `${((y + 0.5) * 100).toFixed(1)}%`);\n    visualRef.current?.style.setProperty(\"--sp-case-tx\", `${(x * -8).toFixed(1)}px`);\n    visualRef.current?.style.setProperty(\"--sp-case-ty\", `${(y * -5).toFixed(1)}px`);\n  };\n\n  return <div className=\"sp-case-visual co-relative co-overflow-hidden\" ref={visualRef} onPointerMove={move} onPointerLeave={() => visualRef.current?.removeAttribute(\"style\")}>\n    <img className=\"sp-case-visual-base co-w-full co-h-full co-object-cover\" src={image} alt={alt} />\n    <img className=\"sp-case-visual-channel is-cyan co-w-full co-h-full co-object-cover\" src={image} alt=\"\" aria-hidden=\"true\" />\n    <img className=\"sp-case-visual-channel is-magenta co-w-full co-h-full co-object-cover\" src={image} alt=\"\" aria-hidden=\"true\" />\n    <div className=\"sp-case-spectrum co-absolute\" aria-hidden=\"true\" />\n    <span>Spectrum Studio / Case Study</span>\n  </div>;\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/studio/[slug]/page.tsx",
      "type": "registry:page",
      "target": "app/spectrum-studio/studio/[slug]/page.tsx",
      "content": "import type { Metadata } from \"next\";\nimport { notFound } from \"next/navigation\";\nimport PortraitVisual from \"../../PortraitVisual\";\nimport ThemeIcon from \"../../ThemeIcon\";\nimport { getSpectrumPerson, spectrumPeople } from \"../../people\";\nimport \"../../spectrum-studio.css\";\n\nexport function generateStaticParams() {\n  return spectrumPeople.map(({ slug }) => ({ slug }));\n}\n\nexport async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n  const { slug } = await params;\n  const person = getSpectrumPerson(slug);\n  if (!person) return { title: \"Profile not found\" };\n  const name = `${person.first} ${person.last}`;\n  return { title: `${name} — Spectrum Studio`, description: person.intro, openGraph: { title: `${name} — Spectrum Studio`, description: person.intro, images: [person.image] }, twitter: { card: \"summary_large_image\", title: `${name} — Spectrum Studio`, description: person.intro, images: [person.image] } };\n}\n\nexport default async function SpectrumProfile({ params }: { params: Promise<{ slug: string }> }) {\n  const { slug } = await params;\n  const person = getSpectrumPerson(slug);\n  if (!person) notFound();\n  const index = spectrumPeople.findIndex((item) => item.slug === person.slug);\n  const next = spectrumPeople[(index + 1) % spectrumPeople.length];\n  const name = `${person.first} ${person.last}`;\n\n  return <main className=\"spectrum-studio sp-profile-page\" id=\"top\">\n    <header className=\"sp-header co-flex co-items-center co-justify-between\"><a className=\"sp-wordmark\" href=\"/themes/spectrum-studio/preview\" aria-label=\"Spectrum home\">SPECTRUM<span>*</span></a><nav className=\"sp-case-nav co-flex co-items-center\" aria-label=\"Profile navigation\"><a href=\"/themes/spectrum-studio/preview#team\">The studio</a><a href=\"/themes/spectrum-studio/preview#work\">Projects</a><a href=\"/themes/spectrum-studio/preview/start-project\">Start a project</a></nav></header>\n    <section className=\"sp-profile-hero\"><div className=\"sp-profile-top co-flex co-items-center co-justify-between\"><p className=\"sp-kicker\">01 / The studio</p><p>{person.number}</p></div><div className=\"sp-profile-hero-grid co-grid co-items-end\"><div className=\"sp-profile-hero-copy co-flex co-flex-col\"><h1><span>{person.first}</span><span>{person.last}</span></h1><div className=\"sp-profile-role co-grid\"><span>Role</span><strong>{person.role}</strong></div><p>{person.intro}</p></div><PortraitVisual image={person.image} name={name} /></div></section>\n    <section className=\"sp-profile-bio sp-paper co-grid\"><div className=\"sp-profile-label co-flex co-flex-col co-justify-between\"><p className=\"sp-kicker\">02 / Perspective</p><span>形に意味を与える</span></div><div><h2>{person.statement}</h2><div className=\"sp-profile-bio-body co-grid\"><p>{person.bio[0]}</p><p>{person.bio[1]}</p></div></div></section>\n    <section className=\"sp-profile-quote co-relative co-overflow-hidden\"><p className=\"sp-kicker\">03 / Point of view</p><blockquote>“{person.quote}”</blockquote><p className=\"sp-profile-credit\">— {name}, Spectrum Studio</p><div className=\"sp-profile-orbit co-absolute\" aria-hidden=\"true\"><i/><i/><i/></div></section>\n    <section className=\"sp-profile-focus sp-paper\"><div className=\"sp-profile-section-head co-grid\"><p className=\"sp-kicker\">04 / Areas of focus</p><h2>Where perspective<br /><em>becomes practice.</em></h2></div><div className=\"sp-profile-focus-grid co-grid\">{person.focus.map((focus,focusIndex)=><article className=\"co-flex co-flex-col\" key={focus}><span>{String(focusIndex+1).padStart(2,\"0\")}</span><h3>{focus}</h3></article>)}</div></section>\n    <section className=\"sp-profile-work\"><div className=\"sp-profile-section-head co-grid\"><p className=\"sp-kicker\">05 / Selected work</p><h2>Work shaped<br />with <span>{person.first}</span>.</h2></div><div className=\"sp-profile-work-grid co-grid\">{person.work.map((project)=><a href={`/themes/spectrum-studio/preview/work/${project.slug}`} key={project.slug}><div className=\"co-overflow-hidden\"><img className=\"co-w-full co-h-full co-object-cover\" src={project.image} alt={project.alt} /></div><p className=\"co-flex co-justify-between\"><strong>{project.title}</strong><span>{project.client}</span></p></a>)}</div></section>\n    <section className=\"sp-profile-next\"><p className=\"sp-kicker\">06 / Meet the studio</p><a className=\"co-grid co-items-end\" href={`/themes/spectrum-studio/preview/studio/${next.slug}`}><span>Next person</span><strong>{next.first} {next.last}</strong><ThemeIcon name=\"arrow-up\" size={32} tone=\"ink\" /></a></section>\n    <footer className=\"sp-case-footer co-grid co-items-center\"><a href=\"mailto:hello@spectrum.studio\">hello@spectrum.studio</a><span>Jakarta · Working worldwide</span><span>© 2026 Coordiation</span><a className=\"co-inline-flex co-items-center\" href=\"#top\">Top <ThemeIcon name=\"arrow-up\" size={14} /></a></footer>\n  </main>;\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/people.ts",
      "type": "registry:file",
      "target": "app/spectrum-studio/people.ts",
      "content": "export type SpectrumPerson = {\n  slug: string;\n  first: string;\n  last: string;\n  number: string;\n  role: string;\n  image: string;\n  intro: string;\n  statement: string;\n  bio: readonly [string, string];\n  quote: string;\n  focus: readonly string[];\n  work: readonly { slug: string; title: string; client: string; image: string; alt: string }[];\n};\n\nexport const spectrumPeople: readonly SpectrumPerson[] = [\n  {\n    slug: \"arka-wijaya\", first: \"Arka\", last: \"Wijaya\", number: \"01 — 03\", role: \"Founder / Creative Direction\", image: \"/themes/spectrum-studio/person-01.avif\",\n    intro: \"Building identities that stay clear as brands, products, and culture move around them.\",\n    statement: \"Clarity is not the absence of character. It is what allows character to travel.\",\n    bio: [\"Arka founded Spectrum to keep strategy, design, and making in the same room. He believes the best creative direction begins by identifying the one idea a team can return to when everything else changes.\", \"His practice connects identity and experience, helping organisations turn complex ambitions into systems people can actually use—from a first positioning decision to the final detail in motion.\"],\n    quote: \"The strongest work does not ask for attention. It gives attention somewhere useful to go.\",\n    focus: [\"Creative Direction\", \"Brand Architecture\", \"Editorial Design\", \"Studio Leadership\"],\n    work: [{ slug: \"chromatic-ritual\", title: \"Chromatic Ritual\", client: \"Astra — 2026\", image: \"/themes/spectrum-studio/project-01.jpg\", alt: \"Iridescent glass forms against a teal background\" }, { slug: \"form-after-dark\", title: \"Form After Dark\", client: \"Noir Lab — 2025\", image: \"/themes/spectrum-studio/project-04.jpg\", alt: \"Neon-lit skyscrapers rising into the night fog\" }],\n  },\n  {\n    slug: \"maya-adelia\", first: \"Maya\", last: \"Adelia\", number: \"02 — 03\", role: \"Strategy / Brand Systems\", image: \"/themes/spectrum-studio/person-02.avif\",\n    intro: \"Finding the simple decision that helps ambitious organisations move with confidence.\",\n    statement: \"Strategy matters when it changes what a team can see, choose, and make together.\",\n    bio: [\"Maya leads strategy and brand systems at Spectrum. Her work begins inside the organisation—listening for the tension between what a business says, what it makes, and what people actually experience.\", \"She turns research into practical direction, shaping positioning, architecture, and decision tools that keep creative work coherent long after the first launch.\"],\n    quote: \"A useful strategy should reduce noise without reducing possibility.\",\n    focus: [\"Brand Strategy\", \"Positioning\", \"Portfolio Systems\", \"Research & Insight\"],\n    work: [{ slug: \"human-interface\", title: \"Human Interface\", client: \"Synapse — 2026\", image: \"/themes/spectrum-studio/project-05.jpg\", alt: \"Rainbow skylight casting color across concrete architecture\" }, { slug: \"secret-language\", title: \"Secret Language\", client: \"Orphic — 2025\", image: \"/themes/spectrum-studio/project-06.jpg\", alt: \"Iridescent light refracting through textured glass\" }],\n  },\n  {\n    slug: \"keiko-tan\", first: \"Keiko\", last: \"Tan\", number: \"03 — 03\", role: \"Design / Motion\", image: \"/themes/spectrum-studio/person-03.avif\",\n    intro: \"Designing movement that reveals meaning, rhythm, and personality instead of adding noise.\",\n    statement: \"Motion is not what happens after design. It is how a system explains itself over time.\",\n    bio: [\"Keiko leads design and motion across Spectrum’s identity and digital work. She moves fluently between typography, interface, and animation, treating each as part of the same behaviour.\", \"Her process combines precise systems with expressive prototyping, allowing teams to understand not only how a design looks, but how it responds and feels in use.\"],\n    quote: \"When movement has a reason, people understand the system before they notice the animation.\",\n    focus: [\"Design Systems\", \"Motion Language\", \"Interaction Design\", \"Creative Prototyping\"],\n    work: [{ slug: \"motion-engineered\", title: \"Motion, Engineered\", client: \"Vektor — 2026\", image: \"/themes/spectrum-studio/project-02.jpg\", alt: \"Colorful neon illustrations covering a city facade at night\" }, { slug: \"nothing-static\", title: \"Nothing Static\", client: \"Kinetik — 2025\", image: \"/themes/spectrum-studio/project-03.jpg\", alt: \"Abstract chrome structure with iridescent edges\" }],\n  },\n] as const;\n\nexport function getSpectrumPerson(slug: string) {\n  return spectrumPeople.find((person) => person.slug === slug);\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/PortraitVisual.tsx",
      "type": "registry:component",
      "target": "app/spectrum-studio/PortraitVisual.tsx",
      "content": "\"use client\";\n\nimport { useRef, type PointerEvent } from \"react\";\n\nexport default function PortraitVisual({ image, name }: { image: string; name: string }) {\n  const frameRef = useRef<HTMLDivElement>(null);\n\n  const move = (event: PointerEvent<HTMLDivElement>) => {\n    if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n    const rect = event.currentTarget.getBoundingClientRect();\n    const x = (event.clientX - rect.left) / rect.width - 0.5;\n    const y = (event.clientY - rect.top) / rect.height - 0.5;\n    frameRef.current?.style.setProperty(\"--sp-portrait-x\", `${((x + 0.5) * 100).toFixed(1)}%`);\n    frameRef.current?.style.setProperty(\"--sp-portrait-y\", `${((y + 0.5) * 100).toFixed(1)}%`);\n    frameRef.current?.style.setProperty(\"--sp-portrait-tx\", `${(x * -13).toFixed(1)}px`);\n    frameRef.current?.style.setProperty(\"--sp-portrait-ty\", `${(y * -9).toFixed(1)}px`);\n  };\n\n  return <div className=\"sp-profile-portrait co-relative co-overflow-hidden\" ref={frameRef} onPointerMove={move} onPointerLeave={() => frameRef.current?.removeAttribute(\"style\")}><img className=\"co-w-full co-h-full co-object-cover\" src={image} alt={`Portrait of ${name}`} /><div className=\"sp-profile-spectrum co-absolute\" aria-hidden=\"true\" /><span>Spectrum Studio / Jakarta</span></div>;\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/start-project/page.tsx",
      "type": "registry:page",
      "target": "app/spectrum-studio/start-project/page.tsx",
      "content": "import type { Metadata } from \"next\";\nimport ThemeIcon from \"../ThemeIcon\";\nimport ProjectBriefForm from \"./ProjectBriefForm\";\nimport \"../spectrum-studio.css\";\n\nexport const metadata: Metadata = { title: \"Start a Project — Spectrum Studio\", description: \"Tell Spectrum what you are building, changing, or launching.\" };\n\nexport default function SpectrumStartProject() {\n  return <main className=\"spectrum-studio sp-inquiry-page\" id=\"top\">\n    <header className=\"sp-header co-flex co-items-center co-justify-between\"><a className=\"sp-wordmark\" href=\"/themes/spectrum-studio/preview\" aria-label=\"Spectrum home\">SPECTRUM<span>*</span></a><nav className=\"sp-case-nav co-flex co-items-center\" aria-label=\"Inquiry navigation\"><a href=\"/themes/spectrum-studio/preview#work\">Projects</a><a href=\"/themes/spectrum-studio/preview#studio\">Studio</a><a href=\"mailto:hello@spectrum.studio\">Email us</a></nav></header>\n    <section className=\"sp-inquiry-hero co-relative co-overflow-hidden co-flex co-flex-col\"><div className=\"sp-inquiry-top co-flex co-items-center co-justify-between\"><p className=\"sp-kicker\">New business / 2026</p><p className=\"sp-inquiry-availability co-flex co-items-center\"><span />Accepting selected projects</p></div><h1><span>START SOMETHING</span><span>THAT <em>MATTERS.</em></span></h1><div className=\"sp-inquiry-bottom co-flex co-items-end co-justify-between\"><p>Tell us what you are building, changing, or launching. A clear starting point helps us make the first conversation useful.</p><a className=\"co-inline-flex co-items-center\" href=\"#brief\">Begin the brief <ThemeIcon name=\"arrow-right\" size={18} /></a></div><div className=\"sp-inquiry-spectrum co-absolute\" aria-hidden=\"true\" /></section>\n    <section className=\"sp-brief sp-paper\" id=\"brief\"><div className=\"sp-brief-heading co-grid\"><p className=\"sp-kicker\">01 / Project brief</p><h2>A few useful details.<br /><em>Nothing unnecessary.</em></h2></div><ProjectBriefForm /></section>\n    <section className=\"sp-inquiry-direct\"><p className=\"sp-kicker\">Prefer a direct conversation?</p><a className=\"co-flex co-justify-between\" href=\"mailto:hello@spectrum.studio\">hello@spectrum.studio <ThemeIcon name=\"arrow-up\" size={34} tone=\"ink\" /></a><div className=\"co-flex co-justify-between\"><span>Jakarta · Indonesia</span><span>Working worldwide</span></div></section>\n    <footer className=\"sp-case-footer co-grid co-items-center\"><a href=\"/themes/spectrum-studio/preview\">Spectrum Studio</a><span>Jakarta · Working worldwide</span><span>© 2026 Coordiation</span><a className=\"co-inline-flex co-items-center\" href=\"#top\">Top <ThemeIcon name=\"arrow-up\" size={14} /></a></footer>\n  </main>;\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/start-project/ProjectBriefForm.tsx",
      "type": "registry:component",
      "target": "app/spectrum-studio/start-project/ProjectBriefForm.tsx",
      "content": "\"use client\";\n\nimport { useState, type FormEvent } from \"react\";\nimport ThemeIcon from \"../ThemeIcon\";\n\nconst services = [\"Brand strategy\", \"Visual identity\", \"Product design\", \"Website\", \"Motion system\", \"Not sure yet\"];\nconst budgets = [\"$10k–25k\", \"$25k–50k\", \"$50k–100k\", \"$100k+\", \"Let’s discuss\"];\n\nexport default function ProjectBriefForm() {\n  const [count, setCount] = useState(0);\n  const [success, setSuccess] = useState<{ name: string; mailto: string } | null>(null);\n\n  const submit = (event: FormEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    const form = event.currentTarget;\n    if (!form.reportValidity()) return;\n    const data = new FormData(form);\n    const name = String(data.get(\"name\") ?? \"\").trim();\n    const selectedServices = data.getAll(\"service\");\n    const body = [\"Hello Spectrum,\", \"\", `My name is ${name}. I would like to discuss a new project.`, \"\", `Company: ${data.get(\"company\") || \"—\"}`, `Website: ${data.get(\"website\") || \"—\"}`, `Email: ${data.get(\"email\") || \"—\"}`, `Services: ${selectedServices.length ? selectedServices.join(\", \") : \"Open to discussion\"}`, `Budget: ${data.get(\"budget\") || \"—\"}`, `Ideal start: ${data.get(\"timeline\") || \"—\"}`, `How I found Spectrum: ${data.get(\"source\") || \"—\"}`, \"\", \"Project context:\", String(data.get(\"details\") || \"\")].join(\"\\n\");\n    setSuccess({ name, mailto: `mailto:hello@spectrum.studio?subject=${encodeURIComponent(`New project enquiry — ${data.get(\"company\") || name}`)}&body=${encodeURIComponent(body)}` });\n    requestAnimationFrame(() => document.querySelector<HTMLElement>(\".sp-form-success\")?.focus({ preventScroll: false }));\n  };\n\n  if (success) return <section className=\"sp-form-success\" tabIndex={-1} aria-live=\"polite\"><p className=\"sp-kicker\">Brief prepared</p><h2>THANK YOU,<br /><span>{success.name.toUpperCase()}, WE&apos;RE READY.</span></h2><p>Your project brief is ready to send. Continue by email so it reaches the Spectrum team directly.</p><a className=\"co-inline-flex co-items-center\" href={success.mailto}>Continue by email <ThemeIcon name=\"arrow-right\" size={18} /></a><button type=\"button\" onClick={() => setSuccess(null)}>Edit your brief</button></section>;\n\n  return <form className=\"sp-project-form\" onSubmit={submit}>\n    <fieldset className=\"sp-form-step\"><legend><span>01</span><strong>About you</strong></legend><div className=\"sp-form-grid is-two co-grid\"><label className=\"sp-field\"><span>Your name *</span><input type=\"text\" name=\"name\" autoComplete=\"name\" placeholder=\"How should we address you?\" required /></label><label className=\"sp-field\"><span>Work email *</span><input type=\"email\" name=\"email\" autoComplete=\"email\" placeholder=\"you@company.com\" required /></label><label className=\"sp-field\"><span>Company / organisation</span><input type=\"text\" name=\"company\" autoComplete=\"organization\" placeholder=\"Where do you work?\" /></label><label className=\"sp-field\"><span>Website</span><input type=\"url\" name=\"website\" inputMode=\"url\" placeholder=\"https://\" /></label></div></fieldset>\n    <fieldset className=\"sp-form-step\"><legend><span>02</span><strong>What do you need?</strong></legend><div className=\"sp-choice-grid is-services co-grid\">{services.map((service)=><label className=\"sp-choice\" key={service}><input type=\"checkbox\" name=\"service\" value={service} /><span>{service}</span></label>)}</div></fieldset>\n    <fieldset className=\"sp-form-step\"><legend><span>03</span><strong>Shape of the project</strong></legend><div className=\"sp-form-block\"><p className=\"sp-form-label\">Indicative budget *</p><div className=\"sp-choice-grid is-budget co-grid\">{budgets.map((budget,index)=><label className=\"sp-choice\" key={budget}><input type=\"radio\" name=\"budget\" value={budget} required={index === 0} /><span>{budget}</span></label>)}</div></div><div className=\"sp-form-grid is-two is-spaced co-grid\"><label className=\"sp-field\"><span>Ideal start *</span><select name=\"timeline\" defaultValue=\"\" required><option value=\"\" disabled>Choose a timeframe</option><option>As soon as possible</option><option>Within 1–2 months</option><option>Within 3–6 months</option><option>Later this year</option><option>Still exploring</option></select></label><label className=\"sp-field\"><span>How did you hear about us?</span><input type=\"text\" name=\"source\" placeholder=\"Referral, search, social…\" /></label></div></fieldset>\n    <fieldset className=\"sp-form-step\"><legend><span>04</span><strong>The useful context</strong></legend><label className=\"sp-field is-textarea\"><span>What should we know? *</span><textarea name=\"details\" rows={7} maxLength={1200} placeholder=\"What is changing, why now, and what would a successful outcome look like?\" onChange={(event)=>setCount(event.target.value.length)} required /><small>{count} / 1200</small></label></fieldset>\n    <div className=\"sp-form-submit co-flex co-items-center co-justify-between\"><p>We usually reply within 2–3 working days. Your details are only used to respond to this enquiry.</p><button className=\"co-inline-flex co-items-center co-justify-center\" type=\"submit\">Send project brief <ThemeIcon name=\"arrow-right\" size={19} /></button></div>\n  </form>;\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/SpectrumExperience.tsx",
      "type": "registry:component",
      "target": "app/spectrum-studio/SpectrumExperience.tsx",
      "content": "\"use client\";\n\nimport { useEffect, useRef, useState, type PointerEvent as ReactPointerEvent } from \"react\";\nimport { MetricCard, ProjectCard, RoundLink, SectionHeading } from \"./DashboardComponents\";\nimport ThemeIcon from \"./ThemeIcon\";\n\nconst projects = [\n  [\"chromatic-ritual\", \"/themes/spectrum-studio/project-01.jpg\", \"Chromatic Ritual\", \"Astra\", \"2026\"],\n  [\"motion-engineered\", \"/themes/spectrum-studio/project-02.jpg\", \"Motion, Engineered\", \"Vektor\", \"2026\"],\n  [\"nothing-static\", \"/themes/spectrum-studio/project-03.jpg\", \"Nothing Static\", \"Kinetik\", \"2025\"],\n  [\"form-after-dark\", \"/themes/spectrum-studio/project-04.jpg\", \"Form After Dark\", \"Noir Lab\", \"2025\"],\n  [\"human-interface\", \"/themes/spectrum-studio/project-05.jpg\", \"Human Interface\", \"Synapse\", \"2026\"],\n  [\"secret-language\", \"/themes/spectrum-studio/project-06.jpg\", \"Secret Language\", \"Orphic\", \"2025\"],\n] as const;\n\nconst services = [\n  { title: \"Brand Identity\", heading: \"Recognition before decoration.\", copy: \"We define the visual logic that makes every touchpoint feel unmistakably yours—from a single mark to an entire living system.\", items: [\"Positioning\", \"Visual systems\", \"Typography\", \"Guidelines\", \"Asset libraries\"] },\n  { title: \"Product Design\", heading: \"Complexity made instinctive.\", copy: \"We turn product logic into experiences that feel clear on first use and become more valuable with every return.\", items: [\"Product strategy\", \"UX architecture\", \"Interface design\", \"Prototypes\", \"Design systems\"] },\n  { title: \"Web Systems\", heading: \"A digital home with a pulse.\", copy: \"We design and build expressive websites where story, interaction, and performance move as one system.\", items: [\"Creative direction\", \"Web design\", \"Development\", \"CMS systems\", \"Quality assurance\"] },\n  { title: \"Motion & Interaction\", heading: \"Movement with a reason.\", copy: \"Motion creates hierarchy, rhythm, and memory. We use it to guide attention without competing for it.\", items: [\"Motion language\", \"Micro-interactions\", \"3D direction\", \"Campaign films\", \"Prototyping\"] },\n] as const;\n\nconst process = [\n  [\"Discovery\", \"2—3 days\", \"Understanding the problem comes first.\", \"Study the context · Clarify constraints · Define the goal\"],\n  [\"Strategy\", \"3—5 days\", \"We decide what matters before making anything.\", \"Map the approach · Align priorities · Set the measure\"],\n  [\"Concept\", \"4—5 days\", \"Ideas tested before they become designs.\", \"Explore directions · Pressure-test · Choose the path\"],\n  [\"Design\", \"2—3 weeks\", \"Every part resolved as one coherent system.\", \"Build the system · Refine hierarchy · Present rationale\"],\n  [\"Build\", \"4—8 weeks\", \"What was designed is exactly what ships.\", \"Develop precisely · Test every edge · Launch with care\"],\n] as const;\n\nconst people = [\n  [\"arka-wijaya\", \"/themes/spectrum-studio/person-01.avif\", \"Arka Wijaya\", \"Founder / Creative Direction\"],\n  [\"maya-adelia\", \"/themes/spectrum-studio/person-02.avif\", \"Maya Adelia\", \"Strategy / Brand Systems\"],\n  [\"keiko-tan\", \"/themes/spectrum-studio/person-03.avif\", \"Keiko Tan\", \"Design / Motion\"],\n] as const;\n\nconst quotes = [\n  [\"Spectrum turned a complicated ambition into a system everyone could understand—and a brand nobody could ignore.\", \"Raina Prasetyo · Founder, Astra\"],\n  [\"Decisions happened early, stayed clear, and carried through every detail. The work feels inevitable.\", \"Daniel Kessler · Product Lead, Vektor\"],\n  [\"They brought focus to the work and calm to the process. That combination is remarkably rare.\", \"Clara Hartono · Brand Director, Orphic\"],\n] as const;\n\nexport default function SpectrumExperience() {\n  const [menuOpen, setMenuOpen] = useState(false);\n  const [serviceIndex, setServiceIndex] = useState(0);\n  const [quoteIndex, setQuoteIndex] = useState(0);\n  const processRef = useRef<HTMLDivElement>(null);\n  const heroRef = useRef<HTMLElement>(null);\n  const activeService = services[serviceIndex];\n\n  useEffect(() => {\n    const reduceMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n    const reveals = document.querySelectorAll<HTMLElement>(\".spectrum-studio .sp-reveal\");\n    if (reduceMotion || !(\"IntersectionObserver\" in window)) {\n      reveals.forEach((element) => element.classList.add(\"is-visible\"));\n      document.querySelectorAll<HTMLElement>(\".spectrum-studio [data-sp-count]\").forEach((element) => { element.textContent = `${element.dataset.spCount}${element.dataset.spSuffix ?? \"\"}`; });\n      return;\n    }\n    const revealObserver = new IntersectionObserver((entries) => entries.forEach((entry) => { if (entry.isIntersecting) { entry.target.classList.add(\"is-visible\"); revealObserver.unobserve(entry.target); } }), { threshold: 0.14, rootMargin: \"0px 0px -6% 0px\" });\n    reveals.forEach((element) => revealObserver.observe(element));\n    const countObserver = new IntersectionObserver((entries) => entries.forEach((entry) => {\n      if (!entry.isIntersecting) return;\n      const element = entry.target as HTMLElement;\n      const end = Number(element.dataset.spCount ?? 0);\n      const suffix = element.dataset.spSuffix ?? \"\";\n      const started = performance.now();\n      const tick = (now: number) => {\n        const progress = Math.min((now - started) / 1200, 1);\n        const eased = 1 - Math.pow(1 - progress, 4);\n        element.textContent = `${Math.round(end * eased)}${suffix}`;\n        if (progress < 1) requestAnimationFrame(tick);\n      };\n      requestAnimationFrame(tick);\n      countObserver.unobserve(element);\n    }), { threshold: 0.65 });\n    document.querySelectorAll<HTMLElement>(\".spectrum-studio [data-sp-count]\").forEach((element) => countObserver.observe(element));\n    return () => { revealObserver.disconnect(); countObserver.disconnect(); };\n  }, []);\n\n  const moveProcess = (direction: number) => processRef.current?.scrollBy({ left: processRef.current.clientWidth * 0.72 * direction, behavior: \"smooth\" });\n  const moveQuote = (direction: number) => setQuoteIndex((current) => (current + direction + quotes.length) % quotes.length);\n  const moveHero = (event: ReactPointerEvent<HTMLElement>) => {\n    if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n    const rect = event.currentTarget.getBoundingClientRect();\n    const x = (event.clientX - rect.left) / rect.width - 0.5;\n    const y = (event.clientY - rect.top) / rect.height - 0.5;\n    heroRef.current?.style.setProperty(\"--sp-x\", `${(x * 22).toFixed(1)}px`);\n    heroRef.current?.style.setProperty(\"--sp-y\", `${(y * 14).toFixed(1)}px`);\n    heroRef.current?.style.setProperty(\"--sp-field-x\", `${((x + 0.5) * 100).toFixed(1)}%`);\n    heroRef.current?.style.setProperty(\"--sp-field-y\", `${((y + 0.5) * 100).toFixed(1)}%`);\n  };\n\n  return <main className=\"spectrum-studio co-overflow-hidden\" id=\"top\">\n    <div className=\"sp-loader\" aria-hidden=\"true\"><strong>SPECTRUM<span>*</span></strong><i /><i /><i /></div>\n    <header className=\"sp-header co-flex co-items-center co-justify-between\"><a className=\"sp-wordmark\" href=\"#top\" aria-label=\"Spectrum home\">SPECTRUM<span>*</span></a><button className=\"sp-menu-toggle co-inline-flex co-items-center\" type=\"button\" aria-expanded={menuOpen} aria-controls=\"sp-nav\" onClick={() => setMenuOpen((open) => !open)}><ThemeIcon name=\"hamburger-menu\" size={20} /> Menu</button><nav className={`sp-nav co-flex co-items-center${menuOpen ? \" is-open\" : \"\"}`} id=\"sp-nav\" aria-label=\"Primary navigation\">{[[\"Projects\",\"#work\"],[\"Studio\",\"#studio\"],[\"Services\",\"#services\"],[\"Contact\",\"#contact\"]].map(([label,href])=><a className=\"sp-flip-link\" href={href} onClick={()=>setMenuOpen(false)} key={label}><span>{label}</span><span aria-hidden=\"true\">{label}</span></a>)}</nav></header>\n\n    <section className=\"sp-hero co-relative co-overflow-hidden co-min-h-screen\" ref={heroRef} onPointerMove={moveHero} onPointerLeave={() => { heroRef.current?.style.removeProperty(\"--sp-x\"); heroRef.current?.style.removeProperty(\"--sp-y\"); }} aria-labelledby=\"sp-hero-title\"><div className=\"sp-hero-media co-absolute\"><img className=\"sp-hero-base co-w-full co-h-full co-object-cover\" src=\"/themes/spectrum-studio/hero-spectrum.jpg\" alt=\"\" /><img className=\"sp-hero-channel is-cyan co-w-full co-h-full co-object-cover\" src=\"/themes/spectrum-studio/hero-spectrum.jpg\" alt=\"\" /><img className=\"sp-hero-channel is-magenta co-w-full co-h-full co-object-cover\" src=\"/themes/spectrum-studio/hero-spectrum.jpg\" alt=\"\" /></div><div className=\"sp-spectrum-field co-absolute\" aria-hidden=\"true\" /><div className=\"sp-tech-grid co-absolute\" aria-hidden=\"true\" /><div className=\"sp-hero-shade co-absolute\" aria-hidden=\"true\" /><div className=\"sp-hero-intro\"><p className=\"sp-eyebrow co-flex co-items-center\"><i />独立系デザインスタジオ</p><h2>Independent<br />Creative Studio</h2><p>Jakarta · Indonesia<br />Working worldwide</p></div><div className=\"sp-hero-services\"><span>EST. 2026</span><p>Brand<br />Product<br />Web<br />Motion</p></div><h1 className=\"sp-hero-title\" id=\"sp-hero-title\"><span>WE DON&apos;T MAKE NOISE<b>✣</b></span><span>WE MAKE IMPACT</span></h1><div className=\"sp-hero-rail\">Spectrum Design / Always in motion<i /></div><a className=\"sp-scroll-cue co-inline-flex co-items-center\" href=\"#work\">Scroll to explore <ThemeIcon name=\"arrow-right\" size={17} /></a></section>\n\n    <section className=\"sp-work sp-paper\" id=\"work\"><SectionHeading index=\"01\" eyebrow=\"Selected projects\">A curated selection of work<br /><em>built to refuse the ordinary.</em></SectionHeading><div className=\"sp-project-grid co-grid\">{projects.map(([slug,image,title,client,year])=><ProjectCard slug={slug} image={image} title={title} client={client} year={year} key={title} />)}</div><a className=\"sp-text-link co-inline-flex co-items-center\" href=\"#services\">Explore our approach <ThemeIcon name=\"arrow-right\" size={17} tone=\"ink\" /></a></section>\n\n    <section className=\"sp-client-strip\" aria-label=\"Selected clients\"><div className=\"sp-marquee co-flex co-items-center\">{[\"ASTRA\",\"VEKTOR\",\"MONOLITH\",\"ORPHIC\",\"KINETIK\",\"NOIR LAB\",\"ASTRA\",\"VEKTOR\",\"MONOLITH\",\"ORPHIC\",\"KINETIK\",\"NOIR LAB\"].map((client,index)=><span className=\"co-inline-flex co-items-center\" key={`${client}-${index}`}>{client}<i>✣</i></span>)}</div></section>\n\n    <section className=\"sp-statement co-relative co-overflow-hidden\" id=\"studio\"><div className=\"sp-orbit co-absolute\" aria-hidden=\"true\"><i /><i /><i /></div><p className=\"sp-kicker sp-reveal\">02 / Studio</p><h2 className=\"sp-statement-title sp-reveal\"><span>WE BUILD BRANDS.</span><span>THEN WE GIVE THEM</span><span>SOMEWHERE TO LIVE.</span></h2><div className=\"sp-statement-copy sp-reveal co-grid\"><p>形に意味を与える</p><p>Strategy, identity, digital, and motion—kept in one room so the idea never gets lost in translation.</p></div></section>\n\n    <section className=\"sp-services sp-paper\" id=\"services\"><SectionHeading index=\"03\" eyebrow=\"Capabilities\">Design systems for brands<br /><em>that intend to move.</em></SectionHeading><div className=\"sp-services-layout co-grid\"><div className=\"sp-services-list\" role=\"tablist\" aria-label=\"Services\">{services.map((service,index)=><button className={`sp-service-row co-grid co-items-center${serviceIndex===index?\" is-active\":\"\"}`} type=\"button\" role=\"tab\" aria-selected={serviceIndex===index} onClick={()=>setServiceIndex(index)} key={service.title}><span>{String(index+1).padStart(2,\"0\")}</span><strong>{service.title}</strong><ThemeIcon name=\"arrow-right\" size={20} tone=\"ink\" /></button>)}</div><article className=\"sp-service-panel sp-reveal\" aria-live=\"polite\" key={serviceIndex}><strong>.{String(serviceIndex+1).padStart(2,\"0\")}</strong><h3>{activeService.heading}</h3><p>{activeService.copy}</p><ul>{activeService.items.map(item=><li key={item}>{item}</li>)}</ul></article></div></section>\n\n    <section className=\"sp-metrics co-grid\"><div className=\"sp-metrics-intro sp-reveal co-relative co-overflow-hidden\"><p className=\"sp-kicker\">04 / Proof</p><h2>THE WORK<br />EARNS<br /><span>ATTENTION.</span></h2><p>We take on fewer projects. Each one gets the full weight of the studio.</p></div><div className=\"sp-metrics-grid co-grid\"><MetricCard value={45} suffix=\"+\" label=\"Brands partnered\" copy=\"From first systems to global launches.\" /><MetricCard value={94} suffix=\"%\" label=\"Retention rate\" copy=\"The clearest signal that the process works.\" /><MetricCard value={24} label=\"Sectors served\" copy=\"Context changes. Standards do not.\" /><MetricCard value={78} suffix=\"%\" label=\"Long-term work\" copy=\"Built beyond the first engagement.\" /></div></section>\n\n    <section className=\"sp-process sp-paper\"><SectionHeading index=\"05\" eyebrow=\"Process\">We don&apos;t start with answers.<br /><em>We start with the right questions.</em></SectionHeading><div className=\"sp-process-stage\"><div className=\"sp-process-track co-grid\" ref={processRef} tabIndex={0} aria-label=\"Our five stage process\">{process.map(([title,time,copy,steps],index)=><article className=\"sp-process-card co-flex co-flex-col\" key={title}><div className=\"co-flex co-justify-between\"><span>{String(index+1).padStart(2,\"0\")}</span><span>{time}</span></div><h3>{title}</h3><p>{copy}</p><small>{steps}</small></article>)}</div><div className=\"sp-controls co-flex co-justify-end\"><button type=\"button\" onClick={()=>moveProcess(-1)} aria-label=\"Previous process stage\"><ThemeIcon name=\"arrow-right\" size={19} tone=\"ink\" /></button><button type=\"button\" onClick={()=>moveProcess(1)} aria-label=\"Next process stage\"><ThemeIcon name=\"arrow-right\" size={19} tone=\"ink\" /></button></div></div></section>\n\n    <section className=\"sp-team\" id=\"team\"><SectionHeading index=\"06\" eyebrow=\"The studio\">The people you meet<br /><em>are the people doing the work.</em></SectionHeading><div className=\"sp-team-grid co-grid\">{people.map(([slug,image,name,role])=><a className=\"sp-person sp-reveal co-block\" href={`/themes/spectrum-studio/preview/studio/${slug}`} key={name}><div className=\"sp-person-image co-relative co-overflow-hidden\"><img className=\"co-w-full co-h-full co-object-cover\" src={image} alt={`Portrait of ${name}`} /><span className=\"co-inline-flex co-items-center\">Studio profile <ThemeIcon name=\"arrow-right\" size={14} tone=\"ink\" /></span></div><div className=\"co-flex co-justify-between\"><h3>{name}</h3><p>{role}</p></div></a>)}</div></section>\n\n    <section className=\"sp-testimonials co-grid\"><p className=\"sp-kicker\">07 / What clients say</p><div className=\"sp-quote-slider\"><article className=\"sp-quote\" key={quoteIndex}><blockquote>“{quotes[quoteIndex][0]}”</blockquote><p>{quotes[quoteIndex][1]}</p></article><div className=\"sp-quote-controls co-flex co-items-center co-justify-between\"><button type=\"button\" onClick={()=>moveQuote(-1)} aria-label=\"Previous testimonial\"><ThemeIcon name=\"arrow-right\" size={20} tone=\"ink\" /></button><span>{String(quoteIndex+1).padStart(2,\"0\")} / {String(quotes.length).padStart(2,\"0\")}</span><button type=\"button\" onClick={()=>moveQuote(1)} aria-label=\"Next testimonial\"><ThemeIcon name=\"arrow-right\" size={20} tone=\"ink\" /></button></div></div></section>\n\n    <section className=\"sp-contact sp-paper co-relative co-overflow-hidden\" id=\"contact\"><div className=\"sp-contact-copy sp-reveal\"><p>Have a project in mind?</p><h2>LET&apos;S MAKE<br />IT <span>MATTER.</span></h2></div><RoundLink href=\"/themes/spectrum-studio/preview/start-project\">Start a project</RoundLink></section>\n\n    <footer className=\"sp-footer\"><div className=\"sp-footer-statement\"><span>WE LEAVE</span><span>THE WORK</span><span>BETTER THAN</span><span>THE BRIEF.</span></div><div className=\"sp-footer-links co-grid\"><div className=\"co-flex co-flex-col\"><strong>Navigation</strong><a href=\"#top\">Home</a><a href=\"#work\">Projects</a><a href=\"#studio\">Studio</a><a href=\"#services\">Services</a></div><div className=\"co-flex co-flex-col\"><strong>Contact</strong><a className=\"co-inline-flex co-items-center\" href=\"mailto:hello@spectrum.studio\"><ThemeIcon name=\"letter\" size={15} />hello@spectrum.studio</a><span className=\"co-inline-flex co-items-center\"><ThemeIcon name=\"global\" size={15} />Jakarta · Worldwide</span></div></div><div className=\"sp-footer-bottom co-grid co-items-center\"><span>© 2026 Coordiation. All rights reserved.</span><span>Spectrum Studio</span><a className=\"co-inline-flex co-items-center\" href=\"#top\">Back to top <ThemeIcon name=\"arrow-up\" size={15} /></a></div></footer>\n  </main>;\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/spectrum-studio.css",
      "type": "registry:style",
      "target": "app/spectrum-studio/spectrum-studio.css",
      "content": ".spectrum-studio{--sp-ink:#050609;--sp-paper:#e8d9c8;--sp-accent:#f94137;--sp-blue:#1429ff;--sp-lime:#d8ff37;--sp-line:rgba(232,217,200,.18);min-height:100vh;background:var(--sp-ink);color:var(--sp-paper);font:15px/1.45 Arial,\"Helvetica Neue\",sans-serif;overflow-x:hidden}\n.spectrum-studio *,.spectrum-studio *::before,.spectrum-studio *::after{box-sizing:border-box}\n.spectrum-studio h1,.spectrum-studio h2,.spectrum-studio h3,.spectrum-studio p,.spectrum-studio blockquote,.spectrum-studio figure{margin:0}.spectrum-studio h1,.spectrum-studio h2,.spectrum-studio h3,.spectrum-studio blockquote{max-width:100%;overflow-wrap:break-word;text-wrap:balance}.spectrum-studio a{color:inherit;text-decoration:none}.spectrum-studio button{font:inherit}.spectrum-studio img{display:block;max-width:100%}\n.spectrum-studio .co-flex{display:flex}.spectrum-studio .co-inline-flex{display:inline-flex}.spectrum-studio .co-grid{display:grid}.spectrum-studio .co-block{display:block}.spectrum-studio .co-items-center{align-items:center}.spectrum-studio .co-items-start{align-items:flex-start}.spectrum-studio .co-justify-between{justify-content:space-between}.spectrum-studio .co-justify-center{justify-content:center}.spectrum-studio .co-justify-end{justify-content:flex-end}.spectrum-studio .co-flex-col{flex-direction:column}.spectrum-studio .co-relative{position:relative}.spectrum-studio .co-absolute{position:absolute}.spectrum-studio .co-overflow-hidden{overflow:hidden}.spectrum-studio .co-w-full{width:100%}.spectrum-studio .co-h-full{height:100%}.spectrum-studio .co-object-cover{object-fit:cover}.spectrum-studio .co-min-w-0{min-width:0}.spectrum-studio .co-min-h-screen{min-height:100svh}.spectrum-studio .co-gap-6{gap:1.5rem}.spectrum-studio .co-text-center{text-align:center}.spectrum-studio .co-flex-wrap{flex-wrap:wrap}.spectrum-studio .co-items-end{align-items:flex-end}.spectrum-studio .co-max-w-full{max-width:100%}.spectrum-studio .motion-reduce\\:co-animate-none{animation:none}\n.sp-icon{display:block;flex:none}.sp-icon-paper{filter:invert(92%) sepia(7%) saturate(629%) hue-rotate(343deg) brightness(100%)}.sp-icon-ink{filter:brightness(0)}.sp-icon-accent{filter:invert(32%) sepia(98%) saturate(2443%) hue-rotate(347deg) brightness(102%)}\n.sp-loader{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;pointer-events:none}.sp-loader strong{position:relative;z-index:2;font-size:clamp(17px,2vw,28px);letter-spacing:.34em;animation:spLoaderBrand 1.05s cubic-bezier(.76,0,.24,1) both}.sp-loader strong span,.sp-wordmark span{color:var(--sp-accent)}.sp-loader>i{position:absolute;top:0;bottom:0;width:34%;background:var(--sp-ink);animation:spLoaderPanel 1.05s cubic-bezier(.76,0,.24,1) 1s both}.sp-loader>i:nth-of-type(1){left:0}.sp-loader>i:nth-of-type(2){left:33%;animation-delay:1.08s}.sp-loader>i:nth-of-type(3){right:0;animation-delay:1.16s}\n.sp-header{position:fixed;inset:0 0 auto;z-index:50;height:60px;padding:0 25px;border-bottom:1px solid rgba(255,255,255,.06);background:rgba(5,6,9,.76);color:#fff;backdrop-filter:blur(18px);animation:spHeaderIn .8s cubic-bezier(.16,1,.3,1) 1.7s both}.sp-wordmark{position:relative;z-index:3;font-size:20px;font-weight:760;line-height:1;letter-spacing:.27em}.sp-nav{gap:clamp(42px,8vw,128px)}.sp-flip-link{height:23px;overflow:hidden;font-size:17px;letter-spacing:-.04em}.sp-flip-link span{display:block;transition:transform .5s cubic-bezier(.16,1,.3,1),color .35s}.sp-flip-link span:last-child{color:var(--sp-accent)}.sp-flip-link:hover span{transform:translateY(-100%)}.sp-menu-toggle{display:none;gap:8px;border:0;background:none;color:#fff;font-size:12px}\n.spectrum-studio .sp-menu-toggle{display:none}\n.sp-hero{height:max(720px,100svh);isolation:isolate;background:#07080b}.sp-hero-media,.sp-spectrum-field,.sp-tech-grid,.sp-hero-shade{inset:0}.sp-hero-media{z-index:-4}.sp-hero-media img{position:absolute;inset:-2%;width:104%;height:104%;object-position:50% 48%;will-change:transform,filter,opacity}.sp-hero-base{filter:saturate(1.08) contrast(1.12) brightness(.68);transform:translate3d(var(--sp-x,0),var(--sp-y,0),0) scale(1.12);animation:spImageIn 2s cubic-bezier(.16,1,.3,1) 1.05s forwards;transition:transform .5s ease-out}.sp-hero-channel{position:absolute;opacity:.17;pointer-events:none;mix-blend-mode:screen}.sp-hero-channel.is-cyan{filter:sepia(1) saturate(8) hue-rotate(125deg) contrast(1.35) brightness(.7);clip-path:polygon(0 7%,100% 0,100% 31%,0 42%);animation:spChannelCyan 7s ease-in-out infinite alternate}.sp-hero-channel.is-magenta{filter:sepia(1) saturate(9) hue-rotate(278deg) contrast(1.45) brightness(.64);clip-path:polygon(0 55%,100% 40%,100% 91%,0 100%);animation:spChannelMagenta 8.5s ease-in-out -2s infinite alternate}.sp-spectrum-field{z-index:-2;inset:-25%;opacity:.45;pointer-events:none;mix-blend-mode:screen;filter:blur(28px) saturate(1.45);background:radial-gradient(circle at var(--sp-field-x,68%) var(--sp-field-y,38%),rgba(255,30,0,.48) 0 7%,rgba(255,170,0,.36) 12%,rgba(229,255,0,.25) 18%,rgba(0,255,185,.22) 25%,rgba(0,80,255,.27) 33%,rgba(174,0,255,.2) 40%,transparent 57%);animation:spSpectrum 7s ease-in-out infinite alternate}.sp-tech-grid{z-index:-1;opacity:.55;background-image:linear-gradient(45deg,transparent 48.5%,rgba(255,255,255,.1) 49%,rgba(255,255,255,.1) 51%,transparent 51.5%),linear-gradient(-45deg,transparent 48.5%,rgba(255,255,255,.1) 49%,rgba(255,255,255,.1) 51%,transparent 51.5%);background-size:40px 40px;mask-image:linear-gradient(to bottom,#000 7%,rgba(0,0,0,.65) 78%,transparent)}.sp-hero-shade{z-index:-3;background:linear-gradient(90deg,rgba(3,4,7,.86),rgba(3,4,7,.12) 52%,rgba(3,4,7,.57)),linear-gradient(0deg,rgba(3,4,7,.55),transparent 52%,rgba(3,4,7,.36))}\n.sp-hero-intro{position:absolute;z-index:2;top:clamp(105px,15vh,145px);left:25px;animation:spRevealUp .9s cubic-bezier(.16,1,.3,1) 1.8s both}.sp-eyebrow{gap:8px;margin-bottom:10px!important;font-size:13px;font-weight:600}.sp-eyebrow i{width:13px;height:13px;border-radius:50%;background:var(--sp-accent);box-shadow:8px 0 0 rgba(232,217,200,.8)}.sp-hero-intro h2{font-size:clamp(45px,4.3vw,70px);font-weight:450;line-height:.93;letter-spacing:-.065em}.sp-hero-intro>p:last-child{margin-top:20px;font-size:12px;font-weight:700;line-height:1.25;text-transform:uppercase}.sp-hero-services{position:absolute;z-index:2;top:clamp(110px,15vh,150px);left:51%;animation:spRevealUp .9s cubic-bezier(.16,1,.3,1) 1.95s both}.sp-hero-services span{font-size:11px;font-weight:700}.sp-hero-services p{margin-top:10px;font-size:clamp(27px,2.7vw,44px);line-height:1.02;letter-spacing:-.06em}.sp-hero-title{position:absolute;z-index:3;right:24px;bottom:29px;left:24px;font-size:clamp(68px,8.25vw,140px);font-weight:500;line-height:.88;letter-spacing:-.078em;text-transform:uppercase}.sp-hero-title>span{display:block;overflow:hidden;padding:.08em 0 .11em;animation:spTitleIn 1.05s cubic-bezier(.16,1,.3,1) 2s both}.sp-hero-title>span:first-child{color:var(--sp-accent)}.sp-hero-title>span:last-child{color:var(--sp-paper);animation-delay:2.12s}.sp-hero-title b{display:inline-block;margin-left:.04em;font-size:.55em;vertical-align:.17em;animation:spSpin 8s linear infinite}.sp-hero-rail{position:absolute;z-index:4;right:25px;bottom:64px;display:flex;align-items:center;gap:16px;writing-mode:vertical-rl;transform:rotate(180deg);font-size:10px;font-weight:700}.sp-hero-rail i{width:2px;height:50px;background:var(--sp-paper)}.sp-scroll-cue{position:absolute;right:28px;bottom:22px;z-index:5;gap:12px;font-size:10px;letter-spacing:.12em;text-transform:uppercase}.sp-scroll-cue .sp-icon{transition:transform .3s}.sp-scroll-cue:hover .sp-icon{transform:translateX(5px)}\n.sp-paper{background:var(--sp-paper);color:var(--sp-ink)}.sp-kicker{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.sp-section-heading{gap:32px}.sp-section-heading>*{min-width:0}.sp-section-heading h2{width:min(850px,72%);font-size:clamp(43px,5.3vw,99px);font-weight:470;line-height:.98;letter-spacing:-.075em}.sp-section-heading h2 em{font-family:Georgia,serif;font-weight:400}.sp-reveal{opacity:0;transform:translateY(55px);transition:opacity .8s ease,transform 1.05s cubic-bezier(.16,1,.3,1)}.sp-reveal.is-visible{opacity:1;transform:none}\n.sp-work{padding:110px 24px 120px}.sp-project-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:3px;margin-top:84px}.sp-project-card:nth-child(3n+2){transition-delay:.08s}.sp-project-card:nth-child(3n){transition-delay:.16s}.sp-project-media{aspect-ratio:1.22;background:#bbb}.sp-project-media>span{position:absolute;right:12px;bottom:12px;gap:8px;padding:9px 11px;background:var(--sp-accent);color:var(--sp-ink);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:0;transform:translateY(12px);transition:.45s cubic-bezier(.16,1,.3,1)}.sp-project-media img{filter:saturate(.9);transition:transform .9s cubic-bezier(.16,1,.3,1),filter .6s}.sp-project-card:hover img{transform:scale(1.07);filter:saturate(1.1)}.sp-project-card:hover .sp-project-media>span,.sp-project-card:focus-visible .sp-project-media>span{opacity:1;transform:none}.sp-project-meta{gap:16px;padding:12px 2px 31px;font-size:12px;text-transform:uppercase}.sp-project-meta strong{font-weight:700}.sp-project-meta span{opacity:.55;text-align:right}.sp-text-link{gap:18px;width:max-content;margin:44px auto 0;padding:14px 0;border-bottom:1px solid;font-size:12px;font-weight:700;text-transform:uppercase}.sp-text-link .sp-icon{transition:transform .3s}.sp-text-link:hover .sp-icon{transform:translateX(5px)}\n.sp-client-strip{overflow:hidden;border-block:1px solid var(--sp-line)}.sp-marquee{width:max-content;gap:34px;padding:26px 0;animation:spMarquee 26s linear infinite}.sp-marquee span{gap:34px;font-size:18px;font-weight:700;letter-spacing:.18em}.sp-marquee i{color:var(--sp-accent);font-size:22px;font-style:normal}\n.sp-statement{min-height:920px;padding:112px 24px 80px;background:var(--sp-blue);color:#f1e7d9}.sp-statement-title{position:relative;z-index:2;margin-top:170px;font-size:clamp(64px,8.6vw,150px);font-weight:480;line-height:.9;letter-spacing:-.078em}.sp-statement-title span{display:block}.sp-statement-title span:nth-child(2){margin-left:10vw}.sp-statement-title span:nth-child(3){margin-left:3vw;color:var(--sp-accent)}.sp-statement-copy{position:relative;z-index:3;grid-template-columns:1fr 2fr;gap:28px;width:min(470px,88%);margin:75px 7vw 0 auto;font-size:15px;line-height:1.4}.sp-statement-copy p:first-child{font-weight:700}.sp-orbit{width:min(600px,70vw);aspect-ratio:1;top:43%;left:50%;border:1px solid rgba(255,255,255,.22);border-radius:50%;transform:translate(-50%,-50%);animation:spOrbit 16s linear infinite}.sp-orbit::before,.sp-orbit::after{position:absolute;inset:13%;border:1px solid rgba(255,255,255,.17);border-radius:50%;content:\"\"}.sp-orbit::after{inset:32%}.sp-orbit i{position:absolute;width:12px;aspect-ratio:1;border-radius:50%;background:var(--sp-paper)}.sp-orbit i:nth-child(1){top:18%;left:10%}.sp-orbit i:nth-child(2){top:50%;right:-6px;background:var(--sp-accent)}.sp-orbit i:nth-child(3){bottom:-6px;left:40%}\n.sp-services{padding:120px 24px 130px}.sp-services-layout{grid-template-columns:minmax(0,1.3fr) minmax(300px,.7fr);gap:5vw;margin-top:110px}.sp-services-list{border-top:1px solid rgba(5,6,9,.3)}.sp-service-row{width:100%;grid-template-columns:50px 1fr 30px;gap:12px;padding:25px 0;border:0;border-bottom:1px solid rgba(5,6,9,.3);background:transparent;color:var(--sp-ink);text-align:left;cursor:pointer;transition:color .35s,padding .45s cubic-bezier(.16,1,.3,1)}.sp-service-row>span{font-size:10px}.sp-service-row strong{font-size:clamp(29px,3.7vw,64px);font-weight:470;letter-spacing:-.06em}.sp-service-row .sp-icon{transition:transform .35s}.sp-service-row:hover,.sp-service-row.is-active{padding-left:14px;color:var(--sp-accent)}.sp-service-row:hover .sp-icon,.sp-service-row.is-active .sp-icon{transform:rotate(-45deg)}.sp-service-panel{position:sticky;top:100px;align-self:start;padding:28px;background:var(--sp-ink);color:var(--sp-paper);animation:spPanel .5s cubic-bezier(.16,1,.3,1)}.sp-service-panel>strong{color:var(--sp-accent);font-size:52px;font-weight:500;line-height:1;letter-spacing:-.07em}.sp-service-panel h3{margin:90px 0 18px;font-size:30px;font-weight:480;line-height:1;letter-spacing:-.055em}.sp-service-panel p{font-size:14px;line-height:1.45;opacity:.76}.sp-service-panel ul{margin:55px 0 0;padding:0;border-top:1px solid var(--sp-line);list-style:none}.sp-service-panel li{padding:11px 0;border-bottom:1px solid var(--sp-line);font-size:11px;text-transform:uppercase}\n.sp-metrics{grid-template-columns:.85fr 1.15fr;min-height:850px}.sp-metrics-intro{padding:100px 24px;border-right:1px solid var(--sp-line)}.sp-metrics-intro::after{position:absolute;bottom:-180px;left:-240px;width:520px;aspect-ratio:1;border-radius:50%;background:var(--sp-accent);content:\"\"}.sp-metrics-intro h2{position:relative;z-index:2;margin:140px 0 30px;font-size:clamp(59px,6.4vw,106px);font-weight:470;line-height:.9;letter-spacing:-.07em}.sp-metrics-intro h2 span{color:var(--sp-accent)}.sp-metrics-intro>p:last-child{position:relative;z-index:2;width:62%;margin-left:auto;font-size:14px}.sp-metrics-grid{grid-template-columns:1fr 1fr}.sp-metric{min-height:425px;padding:34px;border-right:1px solid var(--sp-line);border-bottom:1px solid var(--sp-line)}.sp-metric strong{margin-top:auto;color:var(--sp-accent);font-size:clamp(80px,8vw,144px);font-weight:430;line-height:.8;letter-spacing:-.08em}.sp-metric span{margin-top:25px;font-size:13px;font-weight:700;text-transform:uppercase}.sp-metric p{max-width:260px;margin-top:12px;font-size:12px;opacity:.6}\n.sp-process{padding:120px 24px 135px;overflow:hidden}.sp-process-stage{margin-top:105px}.sp-process-track{grid-auto-flow:column;grid-auto-columns:minmax(360px,38vw);gap:4px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;outline:none}.sp-process-track::-webkit-scrollbar{display:none}.sp-process-card{min-height:490px;padding:28px;background:var(--sp-ink);color:var(--sp-paper);scroll-snap-align:start;transition:background .45s,color .45s}.sp-process-card:nth-child(2n){background:#202227}.sp-process-card:hover{background:var(--sp-accent);color:var(--sp-ink)}.sp-process-card>div{font-size:11px;text-transform:uppercase}.sp-process-card h3{margin:auto 0 16px;font-size:clamp(48px,4.2vw,77px);font-weight:450;line-height:.94;letter-spacing:-.07em}.sp-process-card p{max-width:300px;margin-bottom:40px;font-size:15px}.sp-process-card small{padding-top:15px;border-top:1px solid;font-size:10px;line-height:1.7;text-transform:uppercase}.sp-controls{gap:4px;margin-top:24px}.sp-controls button,.sp-quote-controls button{width:52px;height:52px;display:grid;place-items:center;border:1px solid;border-radius:50%;background:transparent;cursor:pointer}.sp-controls button:first-child .sp-icon,.sp-quote-controls button:first-child .sp-icon{transform:rotate(180deg)}.sp-controls button:hover{background:var(--sp-ink)}.sp-controls button:hover .sp-icon{filter:invert(1)}\n.sp-team{padding:115px 24px 125px;background:var(--sp-lime);color:var(--sp-ink)}.sp-team .sp-section-heading h2 em{color:#425800}.sp-team-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;margin-top:105px}.sp-person:nth-child(2){transition-delay:.09s}.sp-person:nth-child(3){transition-delay:.18s}.sp-person-image{aspect-ratio:.78;background:#c6c6c6}.sp-person-image img{filter:grayscale(1) contrast(1.08);transition:filter .6s,transform .9s cubic-bezier(.16,1,.3,1)}.sp-person:hover img{filter:grayscale(0);transform:scale(1.035)}.sp-person-image>span{position:absolute;right:12px;bottom:12px;gap:8px;padding:9px 11px;background:var(--sp-accent);font-size:9px;font-weight:700;text-transform:uppercase;opacity:0;transform:translateY(12px);transition:.4s}.sp-person:hover .sp-person-image>span{opacity:1;transform:none}.sp-person>div:last-child{gap:16px;padding:13px 3px;border-bottom:1px solid rgba(5,6,9,.5)}.sp-person h3{font-size:22px;font-weight:530;letter-spacing:-.04em}.sp-person p{font-size:10px;text-transform:uppercase;text-align:right}\n.sp-testimonials{grid-template-columns:.28fr .72fr;min-height:820px;padding:110px 24px 70px;background:var(--sp-accent);color:var(--sp-ink)}.sp-quote-slider{display:grid;grid-template-rows:minmax(560px,auto) auto}.sp-quote{padding:40px 0 52px;display:flex;flex-direction:column;justify-content:space-between;animation:spQuote .75s cubic-bezier(.16,1,.3,1)}.sp-quote blockquote{font-size:clamp(45px,4.6vw,83px);font-weight:480;line-height:1;letter-spacing:-.055em}.sp-quote p{font-size:12px;font-weight:700;text-transform:uppercase}.sp-quote-controls{gap:20px}.sp-quote-controls span{margin-left:auto}.sp-quote-controls button:hover{background:var(--sp-ink)}.sp-quote-controls button:hover .sp-icon{filter:invert(37%) sepia(91%) saturate(3242%) hue-rotate(345deg)}\n.sp-contact{min-height:850px;padding:110px 24px 50px;display:flex;flex-direction:column;justify-content:space-between;color:var(--sp-ink)}.sp-contact::before{position:absolute;inset:0;background-image:linear-gradient(45deg,transparent 49%,rgba(5,6,9,.06) 49.5%,rgba(5,6,9,.06) 50.5%,transparent 51%),linear-gradient(-45deg,transparent 49%,rgba(5,6,9,.06) 49.5%,rgba(5,6,9,.06) 50.5%,transparent 51%);background-size:48px 48px;content:\"\"}.sp-contact-copy{position:relative;z-index:2}.sp-contact-copy>p{margin-bottom:85px;font-size:12px;text-transform:uppercase}.sp-contact h2{font-size:clamp(80px,11.8vw,200px);font-weight:480;line-height:.84;letter-spacing:-.078em}.sp-contact h2 span{color:var(--sp-accent)}.sp-round-link{position:absolute;right:9vw;bottom:13%;z-index:3;width:clamp(180px,20vw,280px);aspect-ratio:1;gap:30px;border-radius:50%;background:var(--sp-blue);color:#fff;font-size:12px;font-weight:700;text-transform:uppercase;transition:transform .35s,background .35s}.sp-round-link:hover{background:var(--sp-accent);transform:rotate(-4deg) scale(1.03)}\n.sp-footer{padding:110px 24px 24px}.sp-footer-statement{font-size:clamp(66px,9vw,157px);font-weight:470;line-height:.86;letter-spacing:-.075em}.sp-footer-statement span{display:block}.sp-footer-statement span:nth-child(2),.sp-footer-statement span:nth-child(4){color:var(--sp-accent)}.sp-footer-links{grid-template-columns:1fr 1fr;gap:6vw;width:47%;margin:120px 0 100px auto}.sp-footer-links>div{align-items:flex-start;gap:9px}.sp-footer-links strong{margin-bottom:14px;color:var(--sp-accent);font-size:10px;text-transform:uppercase}.sp-footer-links a,.sp-footer-links span{gap:8px;font-size:17px}.sp-footer-links a:hover{color:var(--sp-accent)}.sp-footer-bottom{grid-template-columns:1.2fr 1fr auto;gap:20px;padding-top:18px;border-top:1px solid var(--sp-line);font-size:10px;text-transform:uppercase}.sp-footer-bottom a{gap:8px;justify-self:end}\n.sp-case-page{background:var(--sp-ink)}.sp-case-nav{gap:clamp(32px,6vw,96px)}.sp-case-nav a{font-size:14px}.sp-case-nav a:hover{color:var(--sp-accent)}.sp-case-hero{padding:118px 24px 0}.sp-case-top>p:last-child{color:var(--sp-accent);font-size:11px;font-weight:700;letter-spacing:.08em}.sp-case-hero>h1{margin:88px 0 62px;font-size:clamp(80px,11.8vw,205px);font-weight:470;line-height:.84;letter-spacing:-.078em;text-transform:uppercase;animation:spCaseTitle 1.1s cubic-bezier(.16,1,.3,1) both}.sp-case-meta{grid-template-columns:.8fr .45fr 1.15fr;width:min(760px,64%);margin:0 0 36px auto;border-top:1px solid var(--sp-line)}.sp-case-meta>div{display:grid;gap:8px;padding:13px 20px 12px 0;border-bottom:1px solid var(--sp-line)}.sp-case-meta span{color:var(--sp-accent);font-size:9px;font-weight:700;text-transform:uppercase}.sp-case-meta strong{font-size:13px;font-weight:500}.sp-case-visual{--sp-case-x:72%;--sp-case-y:36%;height:min(76vw,920px);min-height:590px;margin:0 -24px;isolation:isolate;background:#101216}.sp-case-visual>img{position:absolute;inset:-2%;width:104%;height:104%;will-change:transform}.sp-case-visual-base{z-index:-3;filter:saturate(.94) contrast(1.05) brightness(.82);transform:translate(var(--sp-case-tx,0),var(--sp-case-ty,0)) scale(1.03);transition:transform .45s ease-out}.sp-case-visual-channel{position:absolute;z-index:-2;opacity:.17;mix-blend-mode:screen;pointer-events:none}.sp-case-visual-channel.is-cyan{filter:sepia(1) saturate(9) hue-rotate(128deg) contrast(1.5);clip-path:polygon(0 8%,100% 0,100% 37%,0 46%);animation:spChannelCyan 7s ease-in-out infinite alternate}.sp-case-visual-channel.is-magenta{filter:sepia(1) saturate(9) hue-rotate(278deg) contrast(1.5);clip-path:polygon(0 55%,100% 43%,100% 88%,0 100%);animation:spChannelMagenta 8.5s ease-in-out -2s infinite alternate}.sp-case-spectrum{z-index:-1;inset:-20%;opacity:.38;pointer-events:none;mix-blend-mode:screen;filter:blur(24px) saturate(1.45);background:radial-gradient(circle at var(--sp-case-x) var(--sp-case-y),rgba(255,34,0,.48),rgba(244,255,0,.28) 17%,rgba(0,255,201,.25) 28%,rgba(28,72,255,.3) 39%,rgba(194,0,255,.18) 48%,transparent 64%)}.sp-case-visual>span{position:absolute;right:24px;bottom:22px;padding-left:55px;color:#fff;font-size:9px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.sp-case-visual>span::before{position:absolute;top:50%;left:0;width:40px;height:1px;background:currentColor;content:\"\"}\n.sp-case-intro{grid-template-columns:.36fr .64fr;gap:6vw;padding:120px 24px 140px}.sp-case-label{min-height:350px}.sp-case-label>span{font-size:11px;text-transform:uppercase}.sp-case-intro h2{font-size:clamp(53px,6.2vw,112px);font-weight:470;line-height:.94;letter-spacing:-.075em}.sp-case-body{grid-template-columns:1fr 1fr;gap:45px;width:min(680px,88%);margin:85px 0 0 auto;font-size:14px;line-height:1.55}.sp-case-system{padding:115px 24px 125px;overflow:hidden;background:var(--sp-blue)}.sp-case-section-head{grid-template-columns:.32fr .68fr;gap:6vw}.sp-case-section-head h2{font-size:clamp(58px,8.4vw,146px);font-weight:470;line-height:.87;letter-spacing:-.075em}.sp-case-section-head h2 span{color:var(--sp-accent)}.sp-case-prism{aspect-ratio:1.95;margin:110px 8vw 0;isolation:isolate;background:#07080b}.sp-case-prism img{position:absolute;z-index:-2;inset:-12%;width:124%;height:124%;filter:saturate(1.2) contrast(1.15) brightness(.72);animation:spCaseDrift 14s ease-in-out infinite alternate}.sp-case-prism>div{position:absolute;z-index:-1;inset:0;background:linear-gradient(115deg,rgba(0,0,0,.5),transparent 42%,rgba(255,57,46,.38),rgba(53,255,230,.25),transparent 76%),linear-gradient(0deg,rgba(0,0,0,.55),transparent 50%);mix-blend-mode:screen}.sp-case-prism figcaption{position:absolute;bottom:16px;left:18px;font-size:9px;font-weight:700;letter-spacing:.13em}.sp-case-system-copy{grid-template-columns:.55fr 1.45fr;gap:34px;width:min(680px,62%);margin:75px 8vw 0 auto;font-size:14px;line-height:1.5}.sp-case-system-copy p:first-child{font-weight:700}\n.sp-case-results{padding:120px 24px 130px}.sp-case-results .sp-case-section-head h2{font-size:clamp(54px,6.4vw,112px)}.sp-case-results .sp-case-section-head h2 em{font-family:Georgia,serif;font-weight:400}.sp-case-results-grid{grid-template-columns:repeat(3,1fr);gap:3px;margin-top:100px}.sp-case-results-grid article{min-height:390px;padding:24px;background:var(--sp-ink);color:var(--sp-paper)}.sp-case-results-grid article>span{color:var(--sp-accent);font-size:11px;font-weight:700}.sp-case-results-grid h3{margin:auto 0 18px;font-size:clamp(45px,4.5vw,80px);font-weight:470;line-height:.9;letter-spacing:-.07em}.sp-case-results-grid p{max-width:300px;font-size:13px;opacity:.72}.sp-case-gallery{grid-template-columns:1.45fr .55fr;gap:4px;padding:4px 24px 120px}.sp-case-gallery figure{margin:0;overflow:hidden;background:#111}.sp-case-gallery figure:first-child{aspect-ratio:1.32}.sp-case-gallery figure:last-child{aspect-ratio:.5}.sp-case-gallery figure:last-child img{object-position:78% 48%;transform:scale(1.35)}.sp-case-gallery img{transition:transform 1.2s cubic-bezier(.16,1,.3,1)}.sp-case-gallery figure:hover img{transform:scale(1.04)}.sp-case-gallery figure:last-child:hover img{transform:scale(1.4)}.sp-case-next{padding:110px 24px 130px;background:var(--sp-accent);color:var(--sp-ink)}.sp-case-next>a{grid-template-columns:.25fr 1fr auto;gap:28px;margin-top:85px;padding-bottom:22px;border-bottom:2px solid}.sp-case-next>a>span{padding-bottom:8px;font-size:11px;font-weight:700;text-transform:uppercase}.sp-case-next strong{font-size:clamp(64px,8.2vw,141px);font-weight:470;line-height:.86;letter-spacing:-.075em;text-transform:uppercase}.sp-case-next .sp-icon{transform:rotate(45deg);transition:transform .35s}.sp-case-next a:hover .sp-icon{transform:translate(8px,-8px) rotate(45deg)}.sp-case-footer{grid-template-columns:1.2fr 1fr 1fr auto;gap:20px;padding:24px;border-top:1px solid var(--sp-line);font-size:10px;text-transform:uppercase}.sp-case-footer a:last-child{gap:7px}\n.sp-profile-hero{min-height:100svh;padding:118px 24px 28px}.sp-profile-top>p:last-child{color:var(--sp-accent);font-size:11px;font-weight:700}.sp-profile-hero-grid{grid-template-columns:1.08fr .92fr;gap:4vw;margin-top:65px}.sp-profile-hero-copy{min-height:710px}.sp-profile-hero h1{overflow:hidden;font-size:clamp(96px,11.2vw,192px);font-weight:470;line-height:.82;letter-spacing:-.078em;text-transform:uppercase}.sp-profile-hero h1 span{display:block;animation:spProfileName 1.05s cubic-bezier(.16,1,.3,1) both}.sp-profile-hero h1 span:last-child{color:var(--sp-accent);animation-delay:.12s}.sp-profile-role{grid-template-columns:.4fr 1fr;gap:24px;width:min(510px,84%);margin:auto 0 0;padding:14px 0;border-block:1px solid var(--sp-line)}.sp-profile-role span{color:var(--sp-accent);font-size:9px;font-weight:700;text-transform:uppercase}.sp-profile-role strong{font-size:13px;font-weight:500}.sp-profile-hero-copy>p{width:min(510px,84%);margin:28px 0 0 auto;font-size:18px}.sp-profile-portrait{--sp-portrait-x:67%;--sp-portrait-y:34%;min-height:710px;isolation:isolate;background:#17191e}.sp-profile-portrait img{position:absolute;z-index:-2;inset:-3%;width:106%;height:106%;filter:grayscale(1) contrast(1.08) brightness(.86);transform:translate(var(--sp-portrait-tx,0),var(--sp-portrait-ty,0)) scale(1.045);transition:transform .5s ease-out}.sp-profile-spectrum{z-index:-1;inset:-24%;opacity:.42;pointer-events:none;mix-blend-mode:screen;filter:blur(28px) saturate(1.4);background:radial-gradient(circle at var(--sp-portrait-x) var(--sp-portrait-y),rgba(255,50,30,.62),rgba(255,235,0,.28) 17%,rgba(0,255,189,.24) 28%,rgba(28,78,255,.34) 39%,rgba(193,0,255,.22) 47%,transparent 64%);animation:spProfileSpectrum 7.5s ease-in-out infinite alternate}.sp-profile-portrait>span{position:absolute;right:16px;bottom:16px;color:#fff;font-size:9px;font-weight:700;text-transform:uppercase}.sp-profile-bio{grid-template-columns:.34fr .66fr;gap:6vw;padding:120px 24px 140px}.sp-profile-label{min-height:390px}.sp-profile-label>span{font-size:11px;font-weight:700}.sp-profile-bio h2{font-size:clamp(56px,6.7vw,118px);font-weight:470;line-height:.93;letter-spacing:-.078em}.sp-profile-bio-body{grid-template-columns:1fr 1fr;gap:44px;width:min(720px,92%);margin:90px 0 0 auto;font-size:14px}.sp-profile-quote{min-height:860px;padding:115px 24px 75px;background:var(--sp-blue)}.sp-profile-quote blockquote{position:relative;z-index:2;width:min(1140px,84%);margin:150px 0 0 auto;font-size:clamp(59px,6.8vw,118px);font-weight:470;line-height:.94;letter-spacing:-.065em}.sp-profile-credit{position:relative;z-index:2;width:max-content;margin:85px 5vw 0 auto;font-size:11px;font-weight:700;text-transform:uppercase}.sp-profile-orbit{bottom:-32%;left:7%;width:min(670px,70vw);aspect-ratio:1;border:1px solid rgba(255,255,255,.2);border-radius:50%;animation:spOrbit 18s linear infinite}.sp-profile-orbit::before,.sp-profile-orbit::after{position:absolute;inset:18%;border:1px solid rgba(255,255,255,.15);border-radius:50%;content:\"\"}.sp-profile-orbit::after{inset:36%}.sp-profile-orbit i{position:absolute;width:11px;aspect-ratio:1;border-radius:50%;background:var(--sp-paper)}.sp-profile-orbit i:nth-child(1){top:10%;left:23%}.sp-profile-orbit i:nth-child(2){top:50%;right:-5px;background:var(--sp-accent)}.sp-profile-orbit i:nth-child(3){bottom:-5px;left:48%}\n.sp-profile-focus{padding:120px 24px 130px}.sp-profile-section-head{grid-template-columns:.34fr .66fr;gap:6vw}.sp-profile-section-head h2{font-size:clamp(56px,6.4vw,112px);font-weight:470;line-height:.94;letter-spacing:-.075em}.sp-profile-section-head h2 em{font-family:Georgia,serif;font-weight:400}.sp-profile-focus-grid{grid-template-columns:1fr 1fr;margin-top:100px;border-top:1px solid rgba(5,6,9,.3)}.sp-profile-focus-grid article{min-height:260px;padding:24px;border-right:1px solid rgba(5,6,9,.3);border-bottom:1px solid rgba(5,6,9,.3)}.sp-profile-focus-grid article:nth-child(2n){border-right:0}.sp-profile-focus-grid span{color:var(--sp-accent);font-size:10px;font-weight:700}.sp-profile-focus-grid h3{margin:auto 0 0;font-size:clamp(42px,4.2vw,74px);font-weight:470;line-height:.94;letter-spacing:-.06em}.sp-profile-work{padding:115px 24px 130px}.sp-profile-work .sp-profile-section-head h2 span{color:var(--sp-accent)}.sp-profile-work-grid{grid-template-columns:1fr 1fr;gap:4px;margin-top:100px}.sp-profile-work-grid a>div{aspect-ratio:1.28}.sp-profile-work-grid img{filter:saturate(.9);transition:transform .9s cubic-bezier(.16,1,.3,1)}.sp-profile-work-grid a:hover img{transform:scale(1.055)}.sp-profile-work-grid a>p{gap:20px;padding:13px 2px 28px;border-bottom:1px solid var(--sp-line);font-size:11px;text-transform:uppercase}.sp-profile-work-grid a>p span{opacity:.55}.sp-profile-next{padding:110px 24px 130px;background:var(--sp-lime);color:var(--sp-ink)}.sp-profile-next>a{grid-template-columns:.25fr 1fr auto;gap:28px;margin-top:85px;padding-bottom:22px;border-bottom:2px solid}.sp-profile-next>a>span{font-size:11px;font-weight:700;text-transform:uppercase}.sp-profile-next strong{font-size:clamp(64px,8.4vw,144px);font-weight:470;line-height:.86;letter-spacing:-.075em;text-transform:uppercase}.sp-profile-next .sp-icon{transform:rotate(45deg)}\n.sp-inquiry-hero{min-height:100svh;padding:118px 24px 42px;isolation:isolate}.sp-inquiry-hero::before{position:absolute;z-index:-3;inset:0;opacity:.5;background-image:linear-gradient(45deg,transparent 48.5%,rgba(255,255,255,.08) 49%,rgba(255,255,255,.08) 51%,transparent 51.5%),linear-gradient(-45deg,transparent 48.5%,rgba(255,255,255,.08) 49%,rgba(255,255,255,.08) 51%,transparent 51.5%);background-size:48px 48px;content:\"\"}.sp-inquiry-top{position:relative;z-index:2}.sp-inquiry-availability{gap:8px;font-size:10px;font-weight:700;text-transform:uppercase}.sp-inquiry-availability span{width:10px;aspect-ratio:1;border-radius:50%;background:var(--sp-lime);box-shadow:0 0 20px rgba(216,255,55,.75);animation:spAvailability 2s ease-in-out infinite}.sp-inquiry-hero h1{position:relative;z-index:2;margin:auto 0 70px;font-size:clamp(86px,11.4vw,198px);font-weight:470;line-height:.82;letter-spacing:-.078em}.sp-inquiry-hero h1 span{display:block;animation:spCaseTitle 1s cubic-bezier(.16,1,.3,1) both}.sp-inquiry-hero h1 em{color:var(--sp-accent);font-style:normal}.sp-inquiry-bottom{position:relative;z-index:2;gap:50px}.sp-inquiry-bottom>p{width:min(490px,46%);margin-left:34%;font-size:15px}.sp-inquiry-bottom>a{gap:28px;padding-bottom:9px;border-bottom:1px solid;font-size:10px;font-weight:700;text-transform:uppercase}.sp-inquiry-bottom .sp-icon{transform:rotate(90deg)}.sp-inquiry-spectrum{z-index:-2;top:-22%;right:-8%;width:min(760px,68vw);aspect-ratio:1;border-radius:50%;opacity:.66;filter:blur(50px) saturate(1.35);background:conic-gradient(from 210deg,rgba(255,45,32,.95),rgba(255,221,0,.72),rgba(0,255,191,.62),rgba(30,82,255,.83),rgba(190,0,255,.7),rgba(255,45,32,.95));mix-blend-mode:screen;animation:spSpin 13s linear infinite}.sp-brief{padding:120px 24px 140px}.sp-brief-heading{grid-template-columns:.32fr .68fr;gap:6vw}.sp-brief-heading h2{font-size:clamp(56px,6.4vw,112px);font-weight:470;line-height:.94;letter-spacing:-.07em}.sp-brief-heading h2 em{font-family:Georgia,serif;font-weight:400}.sp-project-form{margin-top:120px}.sp-form-step{margin:0;padding:0 0 100px;border:0;border-top:1px solid rgba(5,6,9,.34)}.sp-form-step legend{display:grid;grid-template-columns:.32fr .68fr;gap:6vw;width:100%;padding:22px 0 55px}.sp-form-step legend span{color:var(--sp-accent);font-size:11px;font-weight:700}.sp-form-step legend strong{font-size:clamp(35px,4vw,67px);font-weight:470}.sp-form-grid{gap:34px 4vw;margin-left:32%}.sp-form-grid.is-two{grid-template-columns:1fr 1fr}.sp-form-grid.is-spaced{margin-top:55px}.sp-field{display:grid;gap:14px;min-width:0}.sp-field>span,.sp-form-label{font-size:10px;font-weight:700;text-transform:uppercase}.sp-field input,.sp-field select,.sp-field textarea{width:100%;min-width:0;padding:8px 0 15px;border:0;border-bottom:1px solid rgba(5,6,9,.42);border-radius:0;outline:0;background:transparent;color:var(--sp-ink);font:19px/1.35 inherit}.sp-field input:focus,.sp-field select:focus,.sp-field textarea:focus{border-color:var(--sp-accent);box-shadow:0 2px 0 var(--sp-accent)}.sp-field textarea{min-height:180px;resize:vertical}.sp-field.is-textarea,.sp-form-block,.sp-form-submit{margin-left:32%}.sp-field small{justify-self:end;font-size:10px;opacity:.55}.sp-choice-grid{gap:3px;margin-left:32%}.sp-choice-grid.is-services{grid-template-columns:repeat(3,1fr)}.sp-choice-grid.is-budget{grid-template-columns:repeat(5,1fr);margin:18px 0 0}.sp-choice{position:relative;cursor:pointer}.sp-choice input{position:absolute;width:1px;height:1px;opacity:0}.sp-choice span{display:flex;align-items:flex-end;min-height:88px;padding:18px;border:1px solid rgba(5,6,9,.32);font-size:15px;transition:.3s}.sp-choice:hover span{border-color:var(--sp-ink);transform:translateY(-3px)}.sp-choice input:checked+span{border-color:var(--sp-ink);background:var(--sp-ink);color:var(--sp-paper)}.sp-form-submit{gap:45px;padding-top:35px;border-top:1px solid rgba(5,6,9,.34)}.sp-form-submit>p{width:min(390px,48%);font-size:11px;opacity:.65}.sp-form-submit button{width:clamp(190px,18vw,250px);aspect-ratio:1;gap:25px;border:0;border-radius:50%;background:var(--sp-blue);color:#fff;font-size:11px;font-weight:700;text-transform:uppercase;cursor:pointer}.sp-form-submit button:hover{background:var(--sp-accent);transform:rotate(-4deg)}\n.sp-form-success{padding:90px 0 20px 32%;outline:0}.sp-form-success h2{margin:90px 0 34px;font-size:clamp(69px,8.6vw,150px);font-weight:470;line-height:.86;letter-spacing:-.075em}.sp-form-success h2 span{color:var(--sp-accent)}.sp-form-success>p:not(.sp-kicker){width:min(520px,74%)}.sp-form-success>a{gap:25px;margin-top:50px;padding:16px 22px;background:var(--sp-blue);color:#fff;font-size:11px;font-weight:700;text-transform:uppercase}.sp-form-success>button{display:block;margin-top:35px;padding:0 0 7px;border:0;border-bottom:1px solid;background:transparent;font:11px inherit;cursor:pointer}.sp-inquiry-direct{padding:115px 24px 45px;background:var(--sp-accent);color:var(--sp-ink)}.sp-inquiry-direct>a{align-items:baseline;gap:24px;margin-top:100px;padding-bottom:18px;border-bottom:2px solid;font-size:clamp(56px,7.8vw,134px);font-weight:470;line-height:.9;letter-spacing:-.07em}.sp-inquiry-direct>a .sp-icon{transform:rotate(45deg)}.sp-inquiry-direct>div{margin-top:90px;font-size:10px;font-weight:700;text-transform:uppercase}\n.sp-field input,.sp-field select,.sp-field textarea{font:inherit;font-size:19px;line-height:1.35}.sp-form-success>button{font:inherit;font-size:11px}\n@keyframes spLoaderBrand{0%{opacity:0;transform:translateY(24px)}45%{opacity:1;transform:none}100%{opacity:0;transform:translateY(-20px)}}@keyframes spLoaderPanel{to{transform:translateY(-102%)}}@keyframes spHeaderIn{from{opacity:0;transform:translateY(-100%)}}@keyframes spImageIn{to{transform:translate3d(var(--sp-x,0),var(--sp-y,0),0) scale(1)}}@keyframes spChannelCyan{from{transform:translate3d(-13px,-4px,0) scale(1.045)}to{transform:translate3d(17px,7px,0) scale(1.065)}}@keyframes spChannelMagenta{from{transform:translate3d(14px,7px,0) scale(1.05)}to{transform:translate3d(-16px,-5px,0) scale(1.075)}}@keyframes spSpectrum{from{transform:rotate(-3deg) scale(.96);opacity:.3}to{transform:rotate(4deg) scale(1.05);opacity:.55}}@keyframes spRevealUp{from{opacity:0;transform:translateY(28px)}}@keyframes spTitleIn{from{opacity:0;transform:translateY(110%)}}@keyframes spSpin{to{transform:rotate(360deg)}}@keyframes spMarquee{to{transform:translateX(-50%)}}@keyframes spOrbit{to{rotate:360deg}}@keyframes spPanel{from{opacity:0;transform:translateY(20px)}}@keyframes spQuote{from{opacity:0;transform:translateY(40px)}}@keyframes spCaseTitle{from{opacity:0;transform:translateY(60px)}}@keyframes spCaseDrift{from{transform:translate3d(-2%,-1%,0) scale(1.02)}to{transform:translate3d(3%,2%,0) scale(1.09)}}@keyframes spProfileName{from{opacity:0;transform:translateY(70px)}}@keyframes spProfileSpectrum{from{transform:rotate(-4deg) scale(.94);opacity:.25}to{transform:rotate(4deg) scale(1.05);opacity:.5}}@keyframes spAvailability{50%{opacity:.45;transform:scale(.72)}}\n@media(max-width:980px){.sp-nav{position:fixed;top:60px;right:0;left:0;display:none!important;align-items:stretch!important;flex-direction:column;gap:0;padding:12px 20px 24px;background:var(--sp-ink);border-bottom:1px solid var(--sp-line)}.sp-nav.is-open{display:flex!important}.sp-flip-link{height:auto;padding:17px 0;border-bottom:1px solid var(--sp-line);font-size:25px}.sp-flip-link span:last-child{display:none}.sp-menu-toggle{display:inline-flex}.sp-hero-services{left:auto;right:25px}.sp-section-heading{flex-direction:column;gap:36px}.sp-section-heading h2{width:100%}.sp-project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.sp-services-layout{grid-template-columns:1fr;gap:50px}.sp-service-panel{position:relative;top:auto}.sp-metrics{grid-template-columns:1fr}.sp-metrics-intro{min-height:650px;border-right:0;border-bottom:1px solid var(--sp-line)}.sp-team-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.sp-testimonials{grid-template-columns:1fr;gap:55px}.sp-quote-slider{grid-template-rows:minmax(440px,auto) auto}.sp-footer-links{width:65%}}\n@media(max-width:680px){.sp-header{height:58px;padding:0 14px}.sp-wordmark{font-size:15px}.sp-nav{top:58px}.sp-hero{height:max(700px,100svh)}.sp-hero-intro{top:95px;left:14px}.sp-eyebrow{font-size:10px}.sp-hero-intro h2{font-size:40px}.sp-hero-services{top:230px;right:auto;left:14px}.sp-hero-services p{font-size:24px}.sp-hero-title{right:14px;bottom:55px;left:14px;font-size:clamp(50px,15.5vw,72px);line-height:.91;letter-spacing:-.065em}.sp-hero-rail{display:none}.sp-scroll-cue{right:14px;bottom:20px}.sp-work,.sp-services,.sp-process,.sp-team{padding:82px 14px 90px}.sp-section-heading h2{font-size:45px}.sp-project-grid{grid-template-columns:1fr;margin-top:58px}.sp-project-card:nth-child(n){transition-delay:0s}.sp-project-media>span,.sp-person-image>span{opacity:1;transform:none}.sp-statement{min-height:720px;padding:82px 14px 70px}.sp-statement-title{margin-top:125px;font-size:49px;line-height:.94;letter-spacing:-.06em}.sp-statement-title span:nth-child(2),.sp-statement-title span:nth-child(3){margin-left:0}.sp-statement-copy{grid-template-columns:1fr;width:100%;margin-top:70px}.sp-services-layout{margin-top:65px}.sp-service-row{grid-template-columns:34px 1fr 24px;padding:20px 0}.sp-service-row strong{font-size:28px}.sp-service-panel h3{margin-top:65px}.sp-metrics-intro{min-height:620px;padding:82px 14px}.sp-metrics-intro h2{margin-top:120px;font-size:56px}.sp-metrics-intro>p:last-child{width:72%}.sp-metrics-grid{grid-template-columns:1fr}.sp-metric{min-height:320px;padding:24px}.sp-metric strong{font-size:90px}.sp-process-stage{margin-top:65px}.sp-process-track{grid-auto-columns:minmax(280px,88vw)}.sp-process-card{min-height:440px}.sp-team-grid{grid-template-columns:1fr;margin-top:65px;gap:28px}.sp-person>div:last-child{align-items:flex-start;flex-direction:column}.sp-person p{text-align:left}.sp-testimonials{min-height:0;padding:80px 14px 42px}.sp-quote-slider{grid-template-rows:minmax(500px,auto) auto}.sp-quote blockquote{font-size:39px}.sp-contact{min-height:700px;padding:80px 14px 35px}.sp-contact-copy>p{margin-bottom:80px}.sp-contact h2{font-size:clamp(59px,16.5vw,68px);line-height:.9}.sp-round-link{right:16px;bottom:11%;width:170px}.sp-footer{padding:80px 14px 20px}.sp-footer-statement{font-size:clamp(49px,14vw,58px);line-height:.92}.sp-footer-links{grid-template-columns:1fr;width:100%;margin:85px 0 70px}.sp-footer-bottom{grid-template-columns:1fr;gap:15px}.sp-footer-bottom a{justify-self:start}}\n@media(max-width:980px){.sp-case-nav{gap:24px}.sp-case-meta{width:80%}.sp-case-intro,.sp-case-section-head{grid-template-columns:1fr;gap:45px}.sp-case-label{min-height:0;gap:80px}.sp-case-results-grid{grid-template-columns:1fr}.sp-case-results-grid article{min-height:300px}.sp-case-footer{grid-template-columns:1fr 1fr}}\n@media(max-width:680px){.sp-case-nav a:nth-child(2){display:none}.sp-case-nav{gap:14px}.sp-case-nav a{font-size:10px}.sp-case-hero{padding:100px 14px 0}.sp-case-hero>h1{margin:68px 0 45px;font-size:59px;line-height:.9}.sp-case-meta{grid-template-columns:1fr;width:100%;margin-bottom:28px}.sp-case-visual{height:520px;min-height:0;margin:0 -14px}.sp-case-intro,.sp-case-system,.sp-case-results{padding:82px 14px 90px}.sp-case-intro h2,.sp-case-results .sp-case-section-head h2{font-size:43px}.sp-case-body{grid-template-columns:1fr;width:100%;margin-top:55px}.sp-case-section-head h2{font-size:52px}.sp-case-prism{aspect-ratio:.82;margin:70px 0 0}.sp-case-system-copy{grid-template-columns:1fr;width:100%;margin:55px 0 0}.sp-case-results-grid{margin-top:65px}.sp-case-gallery{grid-template-columns:1fr;padding:4px 14px 80px}.sp-case-gallery figure:last-child{aspect-ratio:1}.sp-case-next{padding:80px 14px 90px}.sp-case-next>a{grid-template-columns:1fr auto;margin-top:60px}.sp-case-next>a>span{grid-column:1/-1}.sp-case-next strong{font-size:48px}.sp-case-footer{grid-template-columns:1fr;gap:14px;padding:22px 14px}}\n@media(max-width:980px){.sp-profile-hero-grid,.sp-profile-bio,.sp-profile-section-head{grid-template-columns:1fr}.sp-profile-hero-copy{min-height:520px}.sp-profile-portrait{min-height:72svh}.sp-profile-bio,.sp-profile-focus,.sp-profile-work{padding:82px 14px 90px}.sp-profile-label{min-height:0;gap:42px}.sp-profile-bio-body{grid-template-columns:1fr;width:100%;margin-top:55px}.sp-profile-quote{min-height:720px;padding:82px 14px 55px}.sp-profile-quote blockquote{width:100%;margin-top:115px}.sp-profile-focus-grid,.sp-profile-work-grid{grid-template-columns:1fr}.sp-profile-focus-grid article{border-right:0}.sp-profile-next{padding:82px 14px 90px}.sp-inquiry-bottom{align-items:flex-start;flex-direction:column}.sp-inquiry-bottom>p{width:88%;margin-left:auto}.sp-brief-heading{grid-template-columns:1fr}.sp-form-grid,.sp-choice-grid,.sp-form-block,.sp-field.is-textarea,.sp-form-submit{margin-left:0}}\n@media(max-width:680px){.sp-profile-hero{padding:92px 14px 14px}.sp-profile-hero-grid{margin-top:55px}.sp-profile-hero h1{font-size:72px}.sp-profile-role{width:100%}.sp-profile-hero-copy>p{width:86%;margin-bottom:45px}.sp-profile-bio h2,.sp-profile-section-head h2{font-size:49px}.sp-profile-quote blockquote{font-size:48px}.sp-profile-focus-grid,.sp-profile-work-grid{margin-top:65px}.sp-profile-focus-grid article{min-height:220px}.sp-profile-work-grid{gap:28px}.sp-profile-work-grid a>p{align-items:flex-start;flex-direction:column;gap:7px}.sp-profile-next>a{grid-template-columns:1fr auto;margin-top:65px}.sp-profile-next>a>span{grid-column:1/-1}.sp-profile-next strong{font-size:50px}.sp-inquiry-hero{min-height:760px;padding:92px 14px 32px}.sp-inquiry-availability{max-width:150px;text-align:right}.sp-inquiry-hero h1{margin-bottom:65px;font-size:54px}.sp-inquiry-spectrum{top:8%;right:-46%;width:105vw}.sp-brief{padding:82px 14px 95px}.sp-brief-heading{gap:65px}.sp-brief-heading h2{font-size:49px}.sp-project-form{margin-top:80px}.sp-form-step{padding-bottom:75px}.sp-form-step legend{grid-template-columns:34px 1fr;gap:10px}.sp-form-step legend strong{font-size:38px}.sp-form-grid.is-two{grid-template-columns:1fr}.sp-choice-grid.is-services,.sp-choice-grid.is-budget{grid-template-columns:1fr 1fr}.sp-choice span{min-height:80px;padding:14px;font-size:13px}.sp-form-submit{align-items:flex-start;flex-direction:column}.sp-form-submit>p{width:88%}.sp-form-submit button{width:190px;align-self:flex-end}.sp-form-success{padding:60px 0 10px}.sp-form-success h2{font-size:56px}.sp-form-success>p:not(.sp-kicker){width:100%}.sp-inquiry-direct{padding:82px 14px 38px}.sp-inquiry-direct>a{margin-top:75px;font-size:37px;overflow-wrap:anywhere}.sp-inquiry-direct>div{align-items:flex-start;flex-direction:column;gap:8px;margin-top:65px}}\n@media(max-width:360px){.sp-hero-intro h2{font-size:35px}.sp-hero-title{font-size:48px}.sp-section-heading h2{font-size:39px}.sp-work,.sp-services,.sp-process,.sp-team{padding-inline:12px}.sp-service-row strong{font-size:24px}.sp-statement-title{font-size:42px}.sp-contact h2{font-size:55px}.sp-footer-statement{font-size:45px}}\n@media(max-width:980px){.spectrum-studio .sp-menu-toggle{display:inline-flex}}\n@media(prefers-reduced-motion:reduce){.spectrum-studio *,.spectrum-studio *::before,.spectrum-studio *::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-delay:0ms!important;transition-duration:.01ms!important}.sp-reveal{opacity:1;transform:none}}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/ThemeIcon.tsx",
      "type": "registry:component",
      "target": "app/spectrum-studio/ThemeIcon.tsx",
      "content": "type SpectrumIconName = \"arrow-right\" | \"arrow-up\" | \"hamburger-menu\" | \"letter\" | \"global\" | \"stars\";\n\nconst iconFiles: Record<SpectrumIconName, string> = {\n  \"arrow-right\": \"arrow-right\",\n  \"arrow-up\": \"arrow-up\",\n  \"hamburger-menu\": \"hamburger-menu\",\n  letter: \"letter\",\n  global: \"global\",\n  stars: \"stars\",\n};\n\nexport default function ThemeIcon({ name, size = 18, tone = \"paper\" }: { name: SpectrumIconName; size?: number; tone?: \"paper\" | \"ink\" | \"accent\" }) {\n  return <img className={`sp-icon sp-icon-${tone}`} src={`/icons/solar-linear/${iconFiles[name]}.svg`} width={size} height={size} alt=\"\" aria-hidden=\"true\" />;\n}\n"
    },
    {
      "path": "site/app/themes/spectrum-studio/preview/DashboardComponents.tsx",
      "type": "registry:component",
      "target": "app/spectrum-studio/DashboardComponents.tsx",
      "content": "import type { ReactNode } from \"react\";\nimport ThemeIcon from \"./ThemeIcon\";\n\nexport function SectionHeading({ index, eyebrow, children, light = false }: { index: string; eyebrow: string; children: ReactNode; light?: boolean }) {\n  return <div className={`sp-section-heading sp-reveal co-flex co-items-start co-justify-between${light ? \" is-light\" : \"\"}`}><p className=\"sp-kicker\">{index} / {eyebrow}</p><h2>{children}</h2></div>;\n}\n\nexport function ProjectCard({ slug, image, title, client, year }: { slug: string; image: string; title: string; client: string; year: string }) {\n  return <a className=\"sp-project-card sp-reveal co-block co-min-w-0\" href={`/themes/spectrum-studio/preview/work/${slug}`}><div className=\"sp-project-media co-relative co-overflow-hidden\"><img className=\"co-w-full co-h-full co-object-cover\" src={image} alt={`${title} project for ${client}`} /><span className=\"co-inline-flex co-items-center\">View project <ThemeIcon name=\"arrow-right\" size={14} tone=\"ink\" /></span></div><div className=\"sp-project-meta co-flex co-justify-between\"><strong>{title}</strong><span>{client} · {year}</span></div></a>;\n}\n\nexport function MetricCard({ value, suffix, label, copy }: { value: number; suffix?: string; label: string; copy: string }) {\n  return <article className=\"sp-metric sp-reveal co-flex co-flex-col\"><strong data-sp-count={value} data-sp-suffix={suffix ?? \"\"} aria-label={`${value}${suffix ?? \"\"}`}>0</strong><span>{label}</span><p>{copy}</p></article>;\n}\n\nexport function RoundLink({ href, children }: { href: string; children: ReactNode }) {\n  return <a className=\"sp-round-link co-inline-flex co-items-center co-justify-center\" href={href}><span>{children}</span><ThemeIcon name=\"arrow-right\" size={18} /></a>;\n}\n"
    },
    {
      "path": "site/public/icons/solar-linear/arrow-right.svg",
      "type": "registry:file",
      "target": "public/icons/solar-linear/arrow-right.svg",
      "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" class=\"solar solar-arrow-right-linear\"><path d=\"M4 12H20M14 18L20 12L14 6\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>"
    },
    {
      "path": "site/public/icons/solar-linear/arrow-up.svg",
      "type": "registry:file",
      "target": "public/icons/solar-linear/arrow-up.svg",
      "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" class=\"solar solar-arrow-up-linear\"><path d=\"M12 20L12 4M6 10L12 4L18 10\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>"
    },
    {
      "path": "site/public/icons/solar-linear/hamburger-menu.svg",
      "type": "registry:file",
      "target": "public/icons/solar-linear/hamburger-menu.svg",
      "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" class=\"solar solar-hamburger-menu-linear\"><path d=\"M20 7L4 7\" stroke=\"currentColor\" stroke-linecap=\"round\"/>\n<path d=\"M20 12L4 12\" stroke=\"currentColor\" stroke-linecap=\"round\"/>\n<path d=\"M20 17L4 17\" stroke=\"currentColor\" stroke-linecap=\"round\"/></svg>"
    },
    {
      "path": "site/public/icons/solar-linear/letter.svg",
      "type": "registry:file",
      "target": "public/icons/solar-linear/letter.svg",
      "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" class=\"solar solar-letter-linear\"><path d=\"M2 12C2 8.22876 2 6.34315 3.17157 5.17157C4.34315 4 6.22876 4 10 4H14C17.7712 4 19.6569 4 20.8284 5.17157C22 6.34315 22 8.22876 22 12C22 15.7712 22 17.6569 20.8284 18.8284C19.6569 20 17.7712 20 14 20H10C6.22876 20 4.34315 20 3.17157 18.8284C2 17.6569 2 15.7712 2 12Z\" stroke=\"currentColor\"/>\n<path d=\"M6 8L8.1589 9.79908C9.99553 11.3296 10.9139 12.0949 12 12.0949C13.0861 12.0949 14.0045 11.3296 15.8411 9.79908L18 8\" stroke=\"currentColor\" stroke-linecap=\"round\"/></svg>"
    },
    {
      "path": "site/public/icons/solar-linear/global.svg",
      "type": "registry:file",
      "target": "public/icons/solar-linear/global.svg",
      "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" class=\"solar solar-global-linear\"><path d=\"M22 12C22 13.3132 21.7413 14.6136 21.2388 15.8268C20.7362 17.0401 19.9997 18.1425 19.0711 19.0711C18.1425 19.9997 17.0401 20.7362 15.8268 21.2388C14.6136 21.7413 13.3132 22 12 22C10.6868 22 9.38642 21.7413 8.17317 21.2388C6.95991 20.7362 5.85752 19.9997 4.92893 19.0711C4.00035 18.1425 3.26375 17.0401 2.7612 15.8268C2.25866 14.6136 2 13.3132 2 12C2 10.6868 2.25866 9.38642 2.76121 8.17316C3.26375 6.95991 4.00035 5.85752 4.92893 4.92893C5.85752 4.00035 6.95991 3.26375 8.17317 2.7612C9.38642 2.25866 10.6868 2 12 2C13.3132 2 14.6136 2.25866 15.8268 2.76121C17.0401 3.26375 18.1425 4.00035 19.0711 4.92893C19.9997 5.85752 20.7362 6.95991 21.2388 8.17317C21.7413 9.38642 22 10.6868 22 12L22 12Z\" stroke=\"currentColor\"/>\n<path d=\"M16 12C16 13.3132 15.8965 14.6136 15.6955 15.8268C15.4945 17.0401 15.1999 18.1425 14.8284 19.0711C14.457 19.9997 14.016 20.7362 13.5307 21.2388C13.0454 21.7413 12.5253 22 12 22C11.4747 22 10.9546 21.7413 10.4693 21.2388C9.98396 20.7362 9.54301 19.9997 9.17157 19.0711C8.80014 18.1425 8.5055 17.0401 8.30448 15.8268C8.10346 14.6136 8 13.3132 8 12C8 10.6868 8.10346 9.38642 8.30448 8.17316C8.5055 6.95991 8.80014 5.85752 9.17157 4.92893C9.54301 4.00035 9.98396 3.26375 10.4693 2.7612C10.9546 2.25866 11.4747 2 12 2C12.5253 2 13.0454 2.25866 13.5307 2.76121C14.016 3.26375 14.457 4.00035 14.8284 4.92893C15.1999 5.85752 15.4945 6.95991 15.6955 8.17317C15.8965 9.38642 16 10.6868 16 12L16 12Z\" stroke=\"currentColor\"/>\n<path d=\"M2 12H22\" stroke=\"currentColor\" stroke-linecap=\"round\"/></svg>"
    },
    {
      "path": "site/public/icons/solar-linear/stars.svg",
      "type": "registry:file",
      "target": "public/icons/solar-linear/stars.svg",
      "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.5\" class=\"solar solar-stars-linear\"><path d=\"M8.03339 3.65784C8.37932 2.78072 9.62068 2.78072 9.96661 3.65785L11.0386 6.37599C11.1442 6.64378 11.3562 6.85576 11.624 6.96137L14.3422 8.03339C15.2193 8.37932 15.2193 9.62068 14.3422 9.96661L11.624 11.0386C11.3562 11.1442 11.1442 11.3562 11.0386 11.624L9.96661 14.3422C9.62067 15.2193 8.37932 15.2193 8.03339 14.3422L6.96137 11.624C6.85575 11.3562 6.64378 11.1442 6.37599 11.0386L3.65784 9.96661C2.78072 9.62067 2.78072 8.37932 3.65785 8.03339L6.37599 6.96137C6.64378 6.85575 6.85576 6.64378 6.96137 6.37599L8.03339 3.65784Z\" stroke=\"currentColor\"/>\n<path d=\"M16.4885 13.3481C16.6715 12.884 17.3285 12.884 17.5115 13.3481L18.3121 15.3781C18.368 15.5198 18.4802 15.632 18.6219 15.6879L20.6519 16.4885C21.116 16.6715 21.116 17.3285 20.6519 17.5115L18.6219 18.3121C18.4802 18.368 18.368 18.4802 18.3121 18.6219L17.5115 20.6519C17.3285 21.116 16.6715 21.116 16.4885 20.6519L15.6879 18.6219C15.632 18.4802 15.5198 18.368 15.3781 18.3121L13.3481 17.5115C12.884 17.3285 12.884 16.6715 13.3481 16.4885L15.3781 15.6879C15.5198 15.632 15.632 15.5198 15.6879 15.3781L16.4885 13.3481Z\" stroke=\"currentColor\"/></svg>"
    }
  ],
  "docs": "/docs/themes#spectrum-studio",
  "meta": {
    "status": "stable",
    "copyright": "Coordiation",
    "framework": "Next.js App Router",
    "style": "chromatic experimental creative studio",
    "palette": "near black, warm sand, signal red and electric blue",
    "namespace": "spectrum-studio",
    "classPrefix": "sp-",
    "preview": "/themes/spectrum-studio/preview",
    "cover": "/themes/spectrum-studio/hero-spectrum.jpg",
    "components": [
      "SectionHeading",
      "ProjectCard",
      "MetricCard",
      "RoundLink",
      "CaseVisual",
      "PortraitVisual",
      "ProjectBriefForm",
      "ThemeIcon"
    ],
    "sections": [
      "header",
      "hero",
      "selected projects",
      "client marquee",
      "studio statement",
      "capabilities",
      "proof metrics",
      "process",
      "team",
      "testimonials",
      "project detail hero",
      "project assignment",
      "project system",
      "project outcomes",
      "project gallery",
      "team profile hero",
      "perspective",
      "areas of focus",
      "profile work",
      "project brief",
      "contact",
      "footer"
    ],
    "assets": [
      "/themes/spectrum-studio/hero-spectrum.jpg",
      "/themes/spectrum-studio/project-01.jpg",
      "/themes/spectrum-studio/project-02.jpg",
      "/themes/spectrum-studio/project-03.jpg",
      "/themes/spectrum-studio/project-04.jpg",
      "/themes/spectrum-studio/project-05.jpg",
      "/themes/spectrum-studio/project-06.jpg",
      "/themes/spectrum-studio/person-01.avif",
      "/themes/spectrum-studio/person-02.avif",
      "/themes/spectrum-studio/person-03.avif"
    ],
    "frameworkName": "Coordiation CSS",
    "sourceOwnership": "open-code"
  }
}
