How to override styles in the consumption layer.
Stitches provides a css prop for overriding styles easily. It’s like the style attribute, but it supports tokens, media queries, nesting and token-aware values.
All Stitches Components include a css prop. Use it to pass in overrides.
const Button = styled('button', {});
() => (
  <Button
    css={{
      borderRadius: '0',
      '&:hover': {
        backgroundColor: 'black',
        color: 'white',
      },
    }}
  >
    Button
  </Button>
);
You can use tokens in the css prop.
const Button = styled('button', {});
() => (
  <Button
    css={{
      borderRadius: '$1',
      '&:hover': {
        backgroundColor: '$blue9',
      },
    }}
  >
    Button
  </Button>
);
You can also use media queries in the css prop.
const Button = styled('button', {});
() => (
  <Button
    css={{
      borderRadius: '0',
      color: 'white',
      '&:hover': { backgroundColor: '$blue9' },
      '@bp1': { backgroundColor: '$green9' },
      '@bp2': { backgroundColor: '$purple9' },
    }}
  >
    Button
  </Button>
);
You may want to make the css prop available on a custom component which already contains some pre-defined overrides.
If you're setting responsive styles, you need to make sure to deep merge the style objects.
const PageTitle = styled('h1', {});
function BlogTitle({ css, ...props }) {
  return (
    <PageTitle
      css={{
        ...css,
        '@bp1': {
          ...css['@bp1'],
          lineHeight: 1.2,
        },
        '@bp2': {
          ...css['@bp2'],
          lineHeight: 1.4,
        },
      }}
      {...props}
    />
  );
}
() => (
  <BlogTitle
    css={{
      marginBottom: 10,
      '@bp1': { marginBottom: 20 },
      '@bp2': { marginBottom: 30 },
    }}
  >
    Blog title
  </BlogTitle>
);
Note: You can use lodash.merge to do that for you!
Stitches provides an as prop for changing which tag a component outputs.
const Button = styled('button', {});
() => (
  <Button as="a" href="#">
    Button
  </Button>
);