CasdoorMarketplace
Submit

Halves · Sign-in theme

Halves

A split screen without any HTML: the form sits on white in the left half, the right half is your color with rings and a dot grid. CSS only, so organization admins can install it.

Verified by CasdoorLightSplit screenPatternCSS only
Halves sign-in page

What it sets

Themedefault
Border radius10px
Form positionCenter
Custom CSSYes
Custom CSS MobileYes

Everything is on the application's UI Customization tab in Casdoor, so you can keep adjusting it after applying the theme.

Apply it to an application

  1. Enter the application below, adjust the theme's settings, and copy the JSON.
  2. In the Casdoor console, open Applications, edit that application, click Import JSON at the top, paste the JSON and click OK.
  3. Click Save. The sign-in page uses the theme from the next visit.
{
  "name": "<application name>",
  "organization": "<organization>",
  "themeData": {
    "themeType": "default",
    "colorPrimary": "#4f46e5",
    "borderRadius": 10,
    "isCompact": false,
    "isEnabled": true
  },
  "formOffset": 2,
  "formCss": "<style>\n.login-background {\n  color-scheme: light;\n  --background: 0 0% 100%;\n  --foreground: 222 47% 11%;\n  --card: 0 0% 100%;\n  --card-foreground: 222 47% 11%;\n  --popover: 0 0% 100%;\n  --popover-foreground: 222 47% 11%;\n  --muted: 210 40% 96%;\n  --muted-foreground: 215 16% 47%;\n  --accent: 210 40% 96%;\n  --accent-foreground: 222 47% 11%;\n  --border: 214 32% 91%;\n  --input: 214 32% 85%;\n  font-family: Inter, ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;\n  background: #ffffff;\n}\n.login-background > div:first-of-type,\n.login-content,\n#footer {\n  position: relative;\n  z-index: 1;\n}\n.login-background::before {\n  content: '';\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  width: 50%;\n  background: radial-gradient(circle at 70% 68%, transparent 0 90px, rgba(255, 255, 255, 0.16) 90px 92px, transparent 92px 150px, rgba(255, 255, 255, 0.12) 150px 152px, transparent 152px 220px, rgba(255, 255, 255, 0.08) 220px 222px, transparent 222px 300px, rgba(255, 255, 255, 0.05) 300px 302px, transparent 302px), radial-gradient(rgba(255, 255, 255, 0.22) 1.5px, transparent 1.6px) 0 0 / 24px 24px, linear-gradient(150deg, color-mix(in srgb, #4f46e5 75%, #ffffff) 0%, #4f46e5 45%, color-mix(in srgb, #4f46e5 55%, #000000) 100%);\n}\n.login-background > div:first-of-type {\n  width: 50%;\n  justify-content: flex-start;\n}\n.login-content {\n  justify-content: flex-start !important;\n}\n.login-content > div {\n  max-width: 400px;\n  margin-left: max(0px, calc(25vw - 216px));\n}\n#footer {\n  width: 50%;\n}\n.login-panel {\n  border: none;\n  border-radius: 0;\n  background: transparent;\n  box-shadow: none;\n}\n.login-logo-box {\n  justify-content: flex-start;\n  margin-bottom: 32px;\n}\n.signin-methods > div {\n  background: #f1f5f9;\n}\n.signin-methods [role='tab'][data-state='active'] {\n  color: #4f46e5;\n}\n.login-form label {\n  color: #334155;\n  font-weight: 500;\n}\n.login-form input:not([type='checkbox']):not([type='radio']) {\n  height: 46px;\n  border: 1px solid #cbd5e1;\n  border-radius: 10px;\n  background: #ffffff;\n  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05);\n}\n.login-form input:not([type='checkbox']):not([type='radio']):focus {\n  border-color: #4f46e5;\n  box-shadow: 0 0 0 4px color-mix(in srgb, #4f46e5 18%, transparent);\n}\n.login-form [role='checkbox'][data-state='checked'] {\n  background: #4f46e5;\n  border-color: #4f46e5;\n  color: #ffffff;\n}\n.login-form a {\n  color: #4f46e5;\n  font-weight: 500;\n}\n.login-form .login-button {\n  height: 46px;\n  border-radius: 10px;\n  background: #4f46e5;\n  color: #ffffff;\n  font-weight: 600;\n  box-shadow: 0 8px 20px -8px color-mix(in srgb, #4f46e5 70%, transparent);\n}\n.login-form .login-button:hover {\n  background: color-mix(in srgb, #4f46e5 88%, #000000);\n}\n.login-form .login-signup-link {\n  justify-content: flex-start;\n}\n.login-form .login-forget-password {\n  width: 100%;\n}\n</style>",
  "formCssMobile": "<style>\n.login-background {\n  color-scheme: light;\n  --background: 0 0% 100%;\n  --foreground: 222 47% 11%;\n  --card: 0 0% 100%;\n  --card-foreground: 222 47% 11%;\n  --popover: 0 0% 100%;\n  --popover-foreground: 222 47% 11%;\n  --muted: 210 40% 96%;\n  --muted-foreground: 215 16% 47%;\n  --accent: 210 40% 96%;\n  --accent-foreground: 222 47% 11%;\n  --border: 214 32% 91%;\n  --input: 214 32% 85%;\n  font-family: Inter, ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;\n  background: #ffffff;\n}\n.login-background > div:first-of-type,\n.login-content,\n#footer {\n  position: relative;\n  z-index: 1;\n}\n.login-background::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 132px;\n  background: radial-gradient(circle at 70% 68%, transparent 0 90px, rgba(255, 255, 255, 0.16) 90px 92px, transparent 92px 150px, rgba(255, 255, 255, 0.12) 150px 152px, transparent 152px 220px, rgba(255, 255, 255, 0.08) 220px 222px, transparent 222px 300px, rgba(255, 255, 255, 0.05) 300px 302px, transparent 302px), radial-gradient(rgba(255, 255, 255, 0.22) 1.5px, transparent 1.6px) 0 0 / 24px 24px, linear-gradient(150deg, color-mix(in srgb, #4f46e5 75%, #ffffff) 0%, #4f46e5 45%, color-mix(in srgb, #4f46e5 55%, #000000) 100%);\n}\n.login-background > div:first-of-type button {\n  color: #ffffff;\n}\n.login-content {\n  padding-top: 40px;\n}\n.login-logo-box {\n  margin-bottom: 36px;\n}\n.login-logo-box img {\n  padding: 10px 14px;\n  border-radius: 12px;\n  background: #ffffff;\n  box-shadow: 0 8px 24px -8px rgba(15, 23, 42, 0.35);\n}\n.login-panel {\n  border: none;\n  border-radius: 0;\n  background: transparent;\n  box-shadow: none;\n}\n.login-logo-box {\n  justify-content: flex-start;\n  margin-bottom: 32px;\n}\n.signin-methods > div {\n  background: #f1f5f9;\n}\n.signin-methods [role='tab'][data-state='active'] {\n  color: #4f46e5;\n}\n.login-form label {\n  color: #334155;\n  font-weight: 500;\n}\n.login-form input:not([type='checkbox']):not([type='radio']) {\n  height: 46px;\n  border: 1px solid #cbd5e1;\n  border-radius: 10px;\n  background: #ffffff;\n  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05);\n}\n.login-form input:not([type='checkbox']):not([type='radio']):focus {\n  border-color: #4f46e5;\n  box-shadow: 0 0 0 4px color-mix(in srgb, #4f46e5 18%, transparent);\n}\n.login-form [role='checkbox'][data-state='checked'] {\n  background: #4f46e5;\n  border-color: #4f46e5;\n  color: #ffffff;\n}\n.login-form a {\n  color: #4f46e5;\n  font-weight: 500;\n}\n.login-form .login-button {\n  height: 46px;\n  border-radius: 10px;\n  background: #4f46e5;\n  color: #ffffff;\n  font-weight: 600;\n  box-shadow: 0 8px 20px -8px color-mix(in srgb, #4f46e5 70%, transparent);\n}\n.login-form .login-button:hover {\n  background: color-mix(in srgb, #4f46e5 88%, #000000);\n}\n.login-form .login-signup-link {\n  justify-content: flex-start;\n}\n.login-form .login-forget-password {\n  width: 100%;\n}\n</style>"
}