diff --git a/theme/keywind/login/login-oauth-grant.ftl b/theme/keywind/login/login-oauth-grant.ftl
new file mode 100644
index 0000000..4b67d69
--- /dev/null
+++ b/theme/keywind/login/login-oauth-grant.ftl
@@ -0,0 +1,64 @@
+<#import "template.ftl" as layout>
+<#import "components/button/primary.ftl" as buttonPrimary>
+<#import "components/button/secondary.ftl" as buttonSecondary>
+
+<@layout.registrationLayout; section>
+ <#if section="header">
+ <#if client.attributes.logoUri??>
+
+ #if>
+
+ <#if client.name?has_content>
+ ${msg("oauthGrantTitle",advancedMsg(client.name))}
+ <#else>
+ ${msg("oauthGrantTitle",client.clientId)}
+ #if>
+
+ <#elseif section="form">
+ ${msg("oauthGrantRequest")}
+
+ <#if oauth.clientScopesRequested??>
+ <#list oauth.clientScopesRequested as clientScope>
+ -
+ <#if !clientScope.dynamicScopeParameter??>
+ ${advancedMsg(clientScope.consentScreenText)}
+ <#else>
+ ${advancedMsg(clientScope.consentScreenText)}: ${clientScope.dynamicScopeParameter}
+ #if>
+
+ #list>
+ #if>
+
+ <#if client.attributes.policyUri?? || client.attributes.tosUri??>
+
+ <#if client.name?has_content>
+ ${msg("oauthGrantInformation",advancedMsg(client.name))}
+ <#else>
+ ${msg("oauthGrantInformation",client.clientId)}
+ #if>
+ <#if client.attributes.tosUri??>
+ ${msg("oauthGrantReview")}
+ ${msg("oauthGrantTos")}
+ #if>
+ <#if client.attributes.policyUri??>
+ ${msg("oauthGrantReview")}
+ ${msg("oauthGrantPolicy")}
+ #if>
+
+ #if>
+
+
+ #if>
+@layout.registrationLayout>