Point at anything. Copy the exact design. Or turn it into a prompt.

Works with Works with OpenAI, Claude, Cursor, Windsurf and VS Code.

A free Chrome extension that copies the real CSS behind anything you point at: hover states, breakpoints and design tokens included. Turn it into a ready-made prompt for ChatGPT or Claude, or connect Cursor and Claude Code over MCP so your agent can read the page itself.

Rather see the output before you install anything? Look at what one pick produces.

  • P Pick element
  • M Measure
  • D Design system
  • B Design prompt
  • C Sample a colour
  • F Fonts in use
  • I Images and SVGs
  • E Edit text
  • X Hide elements
  • V Move elements
  • S Screenshot
  • W Save page HTML
  • G Send to agent

The whole toolbar, one keystroke away on any page.

Thirteen tools for taking a site apart.

the toolbar

One key each, on a bar that lives in the page rather than in a popup, with a readout of whatever is under the cursor. Every one of them has its own page, and a recording of it working on a real site.

Two more that are not tools: , opens settings, and Esc puts everything back and gets out of the way. Nothing you hide, move or edit survives it.

Four things you stop doing today.

why bother

Copying a design off a live page is a job everyone does by hand and nobody enjoys. Here is what changes the first time you use this, and the part of the tool that does it.

Stop describing designs in words

Telling a model “a bit more padding, slightly rounder, that blue” is guesswork on both sides, and the third revision is still wrong. Paste the values instead and there is nothing left to guess at.

Pick element gives you 13.5px, #2f6df6 and var(--radius-md), not an adjective

Stop digging through DevTools

The styles pane shows you what won, one property at a time, with the crossed-out rules you have to read around. Getting a whole component out of it means clicking through a dozen selectors and rebuilding the cascade in your head.

One keystroke for every rule that applies, in cascade order, with the layers intact

Stop pasting whole stylesheets into a chat

A site’s full stylesheet runs to hundreds of kilobytes. It fills the context window, the model still has to work out which forty lines matter, and you pay for every token it read on the way to picking the wrong ones.

Design prompt and get_design_context send only what styles the thing you asked about

Stop finding out afterwards that it was wrong

A copied component that looks close is the expensive kind of wrong: you build on it, then spend an afternoon on the shadow that never matched. Verbatim renders what it extracted and diffs it against the live element first.

verify_extraction lists every property that differs, before you build on it

Where it earns its place in a workflow.

who it is for

The same extraction serves four different jobs. Find yours and the shortest path through this page is the tool named at the end of it.

you build with an agent

G

Cursor, Claude Code, Codex, Windsurf

Your agent cannot see a page it has no reader for, so it writes plausible CSS and you correct it. Give it the resolved cascade instead and the first attempt is the right one. Pick anything in your own browser and press G to hand it over, or let the agent fetch a public URL itself over MCP.

you build by hand

P

Front end work against a reference

A component from a live site, out as HTML and CSS, or as a React, Vue, Svelte, Astro or Angular component, or as Tailwind utilities with the theme they depend on. The preview underneath renders the extraction in isolation, so you can see it is right before it reaches your branch.

you work in design, not code

D

Palette, type scale, spacing, contrast

A page’s whole design system in one panel: colours ordered by how much of the screen they actually cover with their roles named, the type scale with the weights in use, spacing, radii, shadows, breakpoints, and a contrast check on the text. Export as Tailwind @theme, CSS variables or W3C tokens.

you ship client sites

B

Briefs, audits, and one prompt per site

A client sends a link and says “like this”. Design prompt turns that link into one document: the palette as custom properties, the type and where it is served from, the CSS of the components that repeat, the sections in order, and the motion. Then hand it to whichever tool builds the page.

Your agent has every layer but this one.

the design layer

It can read your code and query your data. Ask it what colour the button is on a site you admire and it is back to guessing from a picture.

code Your repository. Files, history, types, tests. it reads this
data Your database and your APIs. Schemas, rows, responses. it queries this
design The live page. Cascade, tokens, states, breakpoints, type, assets.Verbatim a screenshot, at best

Verbatim is that third row. One call and the design stops being a picture and becomes something your agent can read: the rules that actually applied, in the order they applied, with the values it would otherwise invent.

Your AI has two bad options.

the problem

Show it a screenshot and there are no values in it. Paste the stylesheet and there are five thousand rules in it. Either way it guesses, and you find out in review. Every CSS extractor that reads getComputedStyle and dumps the result has the same problem in a different shape: the states, the breakpoints, the layers and the tokens are already gone.

A screenshot

no values
a picture of a button
#2E6FF2 or #2F6DF6?
13px or 14px?
what happens on hover?
Pixels carry no tokens, no states, no breakpoints. The model invents the numbers.

The whole stylesheet

no signal
.mt-1 { margin-top: .25rem }
.mt-2 { margin-top: .5rem }
.mt-3 { margin-top: .75rem }
.flex { display: flex }
/* 5,768 more rules, 4 of
   which touch your element */
Thousands of rules, no way to tell which applied. It floods the context and buries the answer.

Verbatim

resolved
/* only what applies, in order */
.pricing-card {
  padding: var(--space-6);
  background: #0b69ff;
}
.pricing-card:hover { … }
@media (min-width: 768px) { … }
The cascade already resolved, with the tokens, the states and the breakpoints named. Nothing left to guess.

The difference is not a longer feature list. It is what survives the copy, which is the only thing that decides whether the rebuild matches.

What survives when a design is copied by each approach
What decides how it looks A screenshot The whole stylesheet Computed style, dumped Verbatim
The exact values guessed from pixels present, buried exact exact, unrounded
Which rules actually applied no nothing says which the winner only all of them, in cascade order
@layer precedence no declared, unresolved flattened away resolved, layers kept
Hover and focus states no somewhere in there not present matched from selectors
Breakpoints that are not active right now no unattributed no kept as media queries
Token names, not just their values no declared elsewhere var() substituted name and literal
Stylesheets the page cannot read back no page cannot read them values only refetched and reparsed
Shorthands as they were written no yes longhands, some empty recombined
Proof the copy matches the original eyeballing it none none rendered and diffed
What it costs your context window an image the whole stylesheet hundreds of properties only what touches it

Columns are approaches rather than brands, because that is where the difference lives: any tool that reads getComputedStyle and prints the result lands in the third column whatever its name is, and so does anything built on a screenshot.

How to copy CSS from any website

the chrome extension

To copy CSS from a website: pin Verbatim, open the site, and hit Alt+Shift+P. A toolbar drops onto the page and stays there while you click around. A popup would close the moment you touched the thing you came for.

  1. first

    Turn it on anywhere

    The icon or the shortcut, on any page including your own localhost. The toolbar lives in a shadow root, so the site's CSS cannot reach into it and it cannot leak into the site. Drag it out of the way by the grip.

  2. then

    Point at what you want

    Choose P first: the toolbar opens with nothing armed, so your clicks still belong to the page until you say otherwise. Then hover and the element is outlined, with its selector and its exact size in the readout. Click to lock it. It reads through shadow roots and iframes on the same origin, so web components are pickable too.

  3. finally

    Take it, four ways

    A window opens with the code: the markup beside every rule that applies, and the extraction rendered back in an isolated frame underneath, so you can see it is right before you paste it. The same pick is also there as Tailwind classes, as a prompt for a chat, and as the raw inspection. Copy any of it, or press G to send it straight to your coding agent.

Press Esc and it leaves. Anything you hid comes back, anything you moved goes back where it was, and the page is as you found it. Chrome, Edge, Brave and Arc. No account, and no page you visit is sent anywhere.

Add to Chrome

One element picked, four ways to copy it.

the window

Pick an element and a window opens over the page: the markup beside the authored CSS, with the extraction rendered back underneath in an isolated frame. Switch the same pick to Tailwind classes, to a prompt for an AI chat, or to the raw inspection. Every mode is the same selection seen differently, and every one copies with a single button.

Code

The markup in one pane, and in the other every rule that applies, in cascade order, with @layer, @media and @supports kept intact, hover and focus states included, and the custom properties the rules read declared alongside. Authored rules, not a dump of computed style. Underneath, the two rendered together in a sandboxed frame.

Framework targets

The markup pane speaks React, Vue, Svelte, Astro, Angular or plain HTML, in JavaScript or TypeScript, chosen in the same window. A depth control runs from the element alone to the entire subtree, and a scope control switches between the whole component and the one element.

Tailwind

The same selection as utility classes, v3 or v4, with an optional theme so the classes point at named tokens instead of repeating raw values.

Prompt

A written brief for a chat: what the thing is, its values, its states, its breakpoints, the tokens it depends on, its contrast. Rendered as formatted markdown so it is readable before you paste it, and it tells the model to deliver the component and nothing else.

Inspect

The raw reading. Tag, classes, id, box model to a tenth of a pixel, how many rules matched, which states and breakpoints exist, pseudo-elements, web fonts, animations, and anything the browser's own computed value disagrees with.

Bring your own key, for the two things a model is actually better at. Paste an API key from Anthropic, OpenAI, Gemini or OpenRouter in settings and two buttons appear. Name things turns .css-1x2y3z into .pricing-card, in the markup and the CSS at once. Write the prompt explains the intent behind a component instead of restating its numbers, on the Prompt mode of the same window.

The model is never allowed near a value. After it renames, every declaration is compared with what went in, and an answer that altered one is discarded with the exact output left standing. Requests go from your browser to your provider on your key: not through us, not billed to us, never seen by us. Leave the field empty and nothing is sent anywhere at all. What that means exactly.

Three windows, because a narrow column is the wrong shape for code you actually need to read. Each one drags, resizes, and reopens where you left it.

Component

Code, and proof it renders

Where a pick lands. The markup and the styles side by side, the extraction rendered in a sandboxed iframe below them, and the same selection a mode away as Tailwind, as a prompt, or as the raw inspection with anything the browser disagrees with listed by name.

Page clone

The whole page, cleaned up

The captured markup and the page's stylesheets in their own panes, with a preview rendered without scripts, and a button that downloads the file.

Assets

Everything it loads, zipped

A grid of every asset with its format and rendered size, filterable, click to select. Copy the URLs, or download the selection as one zip packed in the browser with nothing sent to a server.

What the extracted CSS looks like.

the output

Exact values, never rounded to a nearby palette entry. The button below is rendered by the code beneath it, and that code is read from the same stylesheet as the page loads, so the two cannot drift apart.

Live component measuring
CSS read from the stylesheet rendering the button above

          
background#0A0D12
accent#4CC2FF
foreground#E7ECF4
typeInstrument Sans, IBM Plex Mono
spacing4 8 12 14 20 26 32 48
breakpoints760px 900px 960px

Export as a Tailwind theme, CSS custom properties, or W3C design tokens. Contrast is measured while it reads, so your agent does not faithfully reproduce someone else's accessibility bug.

Pages behind a login, that a robot cannot reach.

handoff

Your agent drives a browser with no session and no hands. It cannot log in to your dashboard, and it cannot see a dropdown that only exists while you hold it open. So pick it yourself, in the state you want it, and press G. The extension posts it to the server on your machine and the agent reads it from there.

Nothing is uploaded on the way. The bridge listens on loopback only and accepts the extension on sight, because a web page cannot pretend to be one: Origin is a header a page is not allowed to set. So no site you happen to have open can read your captures or plant one, and there is nothing to paste to make that true.

Add to Chrome

the handoff
you Pick the invoice row inside your own logged-in dashboard, press G.
agent
get_handoff()
verbatim
# Component: .invoice-row
from app.yourcompany.com
markup, CSS, states, tokens

Eight things your coding agent can ask for.

mcp server

Everything the toolbar does by hand, your agent can ask for on its own, through the Verbatim MCP server. Same engine, so what it gets back is exactly what you would see picking that element yourself, and any client that speaks MCP works.

Make our pricing card match the one on stripe.com.

the call

get_design_context({
  url: "stripe.com",
  selector: ".pricing-card",
  task: "rebuild it in our stack"
})

what comes back

# Component: .pricing-card
# from stripe.com, captured at 1440x900

## Every rule that applies, in order
.pricing-card { padding: var(--space-6); ... }
.pricing-card:hover { ... }
@media (min-width: 768px) { ... }

## What a stylesheet cannot say
hover is triggered by the card, not the button
contrast 7.1:1, passes AA and AAA

Buildable markup, every rule that styles it in cascade order with layers preserved, the tokens it reads, its states, its behaviour per breakpoint, its contrast.

Responses are shortened here. The real ones are longer and duller, which is the point.

What you would actually ask for

use cases

You never call the tools. You say what you want, in a sentence, and your agent picks. Here are six, playing out.

  1. Make our pricing card look like the one on stripe.com.

    agent
    get_design_context({ url: "stripe.com", selector: ".pricing-card" })
    verbatim
    # every rule that applies, in order
    padding: var(--space-6)   border-radius: 12px
    :hover, the 768px breakpoint, contrast 7.1:1
    agent Builds it against those values, then runs verify_extraction before saying it is done.

    The one to start with: the whole extraction as a brief.

  2. Pull linear.app’s palette and type scale into our Tailwind theme.

    agent
    get_design_system({ url: "linear.app", format: "tailwind" })
    verbatim
    @theme {
      --color-background: #08090A;  /* 41% of screen */
      --color-accent: #5E6AD2;      /* 4% */
    }
    agent Merges it into your theme. Ordered by how much of the screen each colour covers.

    Also emits CSS variables, W3C design tokens, or readable prose.

  3. Rebuild that testimonial as a Svelte component with Tailwind.

    agent
    get_component({ selector: ".testimonial", framework: "svelte", styling: "tailwind" })
    verbatim
    <figure class="flex gap-4 rounded-xl p-[13.5px]">
    arbitrary values kept exact, never snapped to a palette
    agent Drops it into your project as a real component.

    HTML, React, Vue, Svelte, Astro or Angular. CSS or Tailwind.

  4. Does my version actually match theirs?

    agent
    verify_extraction({ url: "stripe.com", selector: ".pricing-card" })
    verbatim
    22 of 22 properties match
    rendered in isolation, diffed against the live page
    agent And when something is off it names it, so the fix is one line rather than an afternoon.

    The tool that makes the other seven trustworthy.

  5. Use the invoice row I just sent you from our dashboard.

    you Pick it in the browser, in the state you want, and press G.
    agent
    list_handoffs()  then  get_handoff()
    verbatim
    # .invoice-row from app.yourcompany.com, behind your login
    markup, CSS, states, tokens, contrast

    How an agent sees a dashboard, or a menu that only exists while you hold it.

  6. Grab their icon set and tell me what is bloated.

    agent
    get_assets({ url: "vercel.com" })
    verbatim
    og-card.png   2400x1260  1.8 MB
                  rendered at 600x315, four times oversized
    agent Downloads what you asked for and flags what is shipping pixels nobody sees.

    Every image, inline SVG, CSS background and video poster, largest first.

It checks its own work.

verification

Verbatim renders what it copied and compares it against the live page, property by property. If anything is off it says so, before your agent writes a line.

verify_extraction .pricing-card 22 of 22 match
PropertyLive pageExtractedResult
colorrgb(255, 255, 255)rgb(255, 255, 255)match
background-colorrgb(11, 105, 255)rgb(11, 105, 255)match
padding-left26px26pxmatch
border-radius8px8pxmatch
letter-spacing-0.16px-0.16pxmatch

This is not a marketing claim. The same check runs in the test suite on every build, and it has caught real bugs: cascade layers being flattened, and inherited styles outranking the rules they were meant to lose to.

Pick your agent. Paste one line.

setup

The server speaks MCP over stdio, so anything that speaks MCP can use it. It runs on your machine: nothing is uploaded, and no page you copy from is sent anywhere.

Nothing to install first: npx fetches the server the first time your client starts it. From source is there for anyone who would rather build it themselves, and wants an absolute path to the built file.

One command in your terminal, from any directory.

Check it took with claude mcp list. Verbatim's nine tools then show up in /mcp.

The first 24 hours need no key. The server starts, all nine tools work, and nothing asks you for a card. After that it wants a one time key.

npx verbatim-mcp activate VB1...

Or put it in the env block of the config above as VERBATIM_LICENSE, which travels with the config between machines. Checked offline against a signature, so no licence call ever leaves your machine. npx verbatim-mcp status says where you stand.

Then just ask for it. Match the hero on linear.app. Take the palette from our marketing site and apply it to this dashboard.

Install it in about a minute.

install

It is not on the Chrome Web Store yet, so for now you install it the way every extension developer installs one. Same build, same thirteen tools, and it works in Chrome, Edge, Brave and Arc.

  1. first

    Download the extension

    One file, 97KB, no installer and no account.

    sha256 a84daadf613b83f655bad60bb60822d10495cbc8d2e4e572bcf3017904472135

  2. then

    Unzip it, and load the folder

    Open chrome://extensions, turn on Developer mode in the top right, click Load unpacked, and choose the folder you just unzipped.

  3. finally

    Press Alt+Shift+P on any page

    Or click the icon. The toolbar drops onto the page with nothing armed, so your clicks still belong to the site until you choose a tool. Esc puts everything back.

what you are agreeing to

  • No account, no sign in, no analytics. There is no server of ours in the browser path, so there is nowhere for a page you visited to be sent.
  • Nothing runs until you ask. The extension declares no content scripts: nothing is injected into any page until you press the shortcut or click the icon.
  • Free forever, and that is not a trial. Every tool in the browser is free with no limit. Only the MCP server for coding agents is paid, once.
  • Uninstall is one click and leaves nothing behind but your settings, which live in your own browser storage.

Working with a coding agent as well? Connect it in one line and it can ask for the same extractions itself.

Installed it already? Getting started has the shortcut, all thirteen keys, and what to do if the shortcut is taken.

Free in the browser. Paid once for your agent.

pricing

Every tool in this category gets the same complaint: a subscription for something you use in bursts. So the extension is free forever with no account, and the server your agent talks to is a single payment. Run it free for a day first, and no card is involved in that day.

The extension

$0
  • Thirteen tools, unlimited use
  • CSS, Tailwind, components, AI briefs
  • Design system, fonts, assets, screenshots
  • No account, and every future update
Add to Chrome

For your agent

$29 once
  • The MCP server, nine tools
  • Claude, Cursor, Codex, Windsurf, VS Code
  • Free for 24 hours, then one key
  • Verified offline, no phone home
  • Yours for good, updates included
Buy a key Try it free for a day

Five seats

$99 once
  • Five keys for your team
  • One invoice, no renewals
  • Same server, same offline check
Buy five keys

Questions people actually ask

faq

How to copy CSS from a website, what makes the output accurate, and what it costs.

How do I copy CSS from a website?

Install the Verbatim Chrome extension, open any site, and press Alt+Shift+P. Hover to outline an element, click to lock it, and the panel shows the CSS. Copy it as authored CSS, as Tailwind classes, as a React, Vue, Svelte, Astro or Angular component, or as a written brief for an AI agent. It is free and needs no account.

Why is the CSS more accurate than other extensions?

Most tools read getComputedStyle and dump the result, which throws away the five things that decide what you see. Verbatim resolves the cascade instead: the rules that actually matched with their original selectors and specificity, @layer precedence, hover and focus states found by matching selectors, media queries that do not currently apply, and var() both as the token name and the literal value. It also refetches cross-origin stylesheets the page itself is forbidden to read.

Does it copy hover states and media queries?

Yes. States are found by matching selectors rather than by whatever the mouse is doing, including ancestor triggers like .card:hover .title. Breakpoints come through as breakpoints, including queries that are not active at your current window size, so the output is responsive rather than a snapshot of one viewport.

Can it convert a website's CSS to Tailwind?

Yes, Tailwind v3 or v4, with states as modifiers and breakpoints as prefixes. Colours are never snapped to Tailwind's palette, because bg-sky-500 is not the brand colour the site used: you get the exact value, or a reference to a generated @theme token.

Does it work on pages behind a login?

Yes. The extension runs in the page you are already looking at, so anything you can see, it can read, including dashboards behind a login and menus that only exist while you hold them open. For a coding agent, press G to hand that capture to the local MCP server, which is how an agent reaches pages its own headless browser cannot.

How does the MCP server work with Cursor and Claude Code?

Run npx -y verbatim-mcp, or add it with claude mcp add verbatim -- npx -y verbatim-mcp. It speaks MCP over stdio, so Claude Code, Claude Desktop, Cursor, Codex CLI, Windsurf and VS Code all work. Your agent gets nine tools, including get_design_prompt for a whole site’s look, get_design_context for a buildable brief and verify_extraction, which renders what it copied and diffs it against the live page.

Is Verbatim free?

The Chrome extension is free forever with no account: thirteen tools, unlimited use, CSS, Tailwind, components, design tokens, fonts, assets and screenshots. The MCP server for coding agents is free for 24 hours, then a one time 29 USD key with no subscription.

Can it extract design tokens from a website?

Yes. Press D for the whole page at once: the palette ordered by how much of the screen each colour covers with its role named, the type scale with weights and use counts, spacing, radii, shadows, breakpoints, and the site's own custom properties. Export as a Tailwind @theme block, CSS variables, or W3C DTCG design tokens JSON.

Does anything I extract get sent to your servers?

No, and there are no servers of ours to send it to. There is no account, no analytics and no telemetry. The only outbound requests are stylesheet refetches to the same origin that already served them, loopback to the Verbatim server on your own machine, and, if you choose to set your own AI key, that provider on your key.

Am I allowed to copy CSS from another site?

Reading a page you can already open in your browser is what a browser does, and Verbatim does not bypass anything to do it. What you then do with what you read is the part that matters: values like a spacing scale, a radius or a contrast ratio are facts about a page, while a logo, a photo, a font file or a whole page copied wholesale belongs to whoever made it. Verbatim reports asset URLs and font licences rather than bundling them, and its prompts tell a model to write its own copy and use its own imagery. Use it to match a design language, not to clone a site, and take your own advice on anything you would put in front of a client.

How is this different from CSS Scan or DivMagic?

The cascade is resolved rather than computed, so states, breakpoints, layers and tokens survive the copy. The output is checked: Verbatim renders what it extracted in isolation and reports any property that differs from the live page. And it is built for coding agents as well as people, with the same engine behind an MCP server.

Free, no account. Thirteen tools on any page.

Add to Chrome, free