---
title: "Custom CSS"
description: "Customize the appearance of the Login for Stripe Customer Portal form with custom CSS."
url: "https://docs.customerportalplugin.com/customization/custom-css/"
---
The plugin renders the login form with **inline styles** in PHP. There is no settings panel for colors or typography yet (styling options are planned for a future release).

You can still customize appearance with **Custom CSS** from your theme or the WordPress **Additional CSS** panel (**Appearance → Customize → Additional CSS**).

## What you can target

Both the [endpoint](../../usage/customer-portal-endpoint/) and [shortcode](../../usage/shortcode/) forms use similar structure:

*   Outer wrapper `div` with flex centering
*   Inner `form` with white background, padding, border-radius, and box shadow
*   Email `input` and submit button with inline styles

Because styles are inline, use **`!important`** sparingly and target elements by attribute where needed:

```
/* Dedicated endpoint — full-page gray background */
body:has(form input[name="email"]) {
  /* page-level tweaks if needed */
}

/* Login form card */
form input[name="email"] {
  font-size: 16px !important;
}

form input[type="submit"] {
  background-color: #635bff !important; /* Stripe-like purple */
  border-radius: 8px !important;
}
```

## Shortcode on themed pages

The shortcode wrapper uses a transparent outer background so your page background shows through. Style the inner white card to match your brand:

```
/* Example: match Gaucho Plugins brand accent */
form input[type="submit"] {
  background-color: #0073aa !important;
  cursor: pointer;
}

form input[type="submit"]:hover {
  filter: brightness(0.95);
}
```

## Limitations (v1.0.6)

*   No enqueued plugin stylesheet or CSS custom properties.
*   No admin UI for colors, fonts, or button labels.
*   No public WordPress filter hooks for email subject/body, return URL, or portal session parameters (see [Security and Privacy → Extensibility](../../security-and-privacy/security-and-privacy/#extensibility)).

For advanced branding, consider a child theme or custom page template that wraps the shortcode in your own markup and CSS. The email input now ships with a per-instance unique `id` (via `wp_unique_id()`), so you can safely embed multiple shortcode instances on the same page without breaking `<label for>` binding.

## Related docs

[Shortcode›](../../usage/shortcode/) [FAQs›](../../faqs/faqs/)
