feat: initial commit
This commit is contained in:
commit
e12d1e6bfc
4 changed files with 396 additions and 0 deletions
7
README.md
Normal file
7
README.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# ashhhleyyy-kc
|
||||||
|
|
||||||
|
![Screenshot of the keycloak login screen with this theme applied](./screenshot.png)
|
||||||
|
|
||||||
|
My custom theme for [Keycloak](https://keycloak.org).
|
||||||
|
|
||||||
|
I target whatever version I'm running (usually the latest), and so it may break on different versions.
|
371
login/resources/css/main.css
Normal file
371
login/resources/css/main.css
Normal file
|
@ -0,0 +1,371 @@
|
||||||
|
@import url('https://unpkg.com/@fontsource/poppins@4.5.8/index.css');
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--background: #13092b;
|
||||||
|
--background-2: #090f2b;
|
||||||
|
--foreground: #ddd;
|
||||||
|
--foreground-bright: #fff;
|
||||||
|
--foreground-dim: #aaa;
|
||||||
|
--error: orange;
|
||||||
|
--accent: #f9027a;
|
||||||
|
--accent-dim: hsl(331, 50%, 49%);
|
||||||
|
--primary: #8da1ee;
|
||||||
|
--confirm: #82f1b1;
|
||||||
|
--warning: #fb7185;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Poppins', sans-serif;
|
||||||
|
background-color: var(--background);
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg');
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-position: center;
|
||||||
|
color: var(--foreground);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.error {
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?error=true');
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
body {
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?small=true');
|
||||||
|
}
|
||||||
|
|
||||||
|
body.error {
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?error=true&small=true');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--foreground);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar {
|
||||||
|
margin-top: 16px;
|
||||||
|
margin-right: 8px;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: 2px solid var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
max-width: 100vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin: 16px;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 720px;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-around;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-logo-text {
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 500;
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--foreground-bright);
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-logo-text:hover {
|
||||||
|
color: var(--foreground);
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-logo-text::before {
|
||||||
|
content: "[ ";
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-logo-text::after {
|
||||||
|
content: " ]";
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
margin: 16px;
|
||||||
|
padding: 32px;
|
||||||
|
width: calc(100vw - 32px);
|
||||||
|
max-width: 480px;
|
||||||
|
background-color: var(--background-2);
|
||||||
|
border: 1px solid var(--accent);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error .content {
|
||||||
|
border-color: var(--error);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.generated {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-list {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-list > li {
|
||||||
|
padding: 8px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid var(--accent);
|
||||||
|
width: calc(100% - 16px);
|
||||||
|
max-width: 512px;
|
||||||
|
margin: 8px;
|
||||||
|
display: flex;
|
||||||
|
place-content: center;
|
||||||
|
background-size: 125%;
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?small=true');
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-list > li.about {
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?small=true&star_colour=%23f9027a');
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-list > li.github {
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?small=true&star_colour=%23891ee3');
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-list > li.twitter {
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?small=true&star_colour=%2300acee');
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-list > li.twitch {
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?small=true&star_colour=%236441a5');
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-list > li.twitch {
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?small=true&star_colour=%236441a5');
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-list > li.nucleoid {
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?small=true&star_colour=%232cab6b');
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-list > li.modrinth {
|
||||||
|
background-image: url('https://ashhhleyyy.dev/assets-gen/background.svg?small=true&star_colour=%2330b27b');
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
border-left: var(--accent) 2px solid;
|
||||||
|
margin-block-start: 1em;
|
||||||
|
margin-block-end: 1em;
|
||||||
|
padding-inline-start: 20px;
|
||||||
|
margin-inline-start: 10px;
|
||||||
|
margin-inline-end: 20px;
|
||||||
|
color: var(--foreground-dim);
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow-x: auto;
|
||||||
|
border: var(--accent) 1px solid;
|
||||||
|
padding: 8px;
|
||||||
|
background-color: black !important;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre::-webkit-scrollbar, code::-webkit-scrollbar {
|
||||||
|
height: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre::-webkit-scrollbar-track, code::-webkit-scrollbar-track {
|
||||||
|
background-color: rgba(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
pre::-webkit-scrollbar-thumb, code::-webkit-scrollbar-thumb {
|
||||||
|
background-color: var(--accent);
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre::-webkit-scrollbar-thumb:hover, code::-webkit-scrollbar-thumb:hover {
|
||||||
|
background-color: var(--accent-dim);
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: 'JetBrains Mono', 'Oxygen Mono', monospace;
|
||||||
|
border: var(--accent-dim) 1px solid;
|
||||||
|
padding: 2px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre > code {
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-row {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-row > * {
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-row svg {
|
||||||
|
transition: fill 200ms ease;
|
||||||
|
fill: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover-email:hover {
|
||||||
|
fill: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover-discord:hover {
|
||||||
|
fill: #5865F2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover-github:hover {
|
||||||
|
fill: #24292f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover-mastodon:hover {
|
||||||
|
fill: #3c99dc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover-reddit:hover {
|
||||||
|
fill: #ff4500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover-twitch:hover {
|
||||||
|
fill: #6441a5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover-twitter:hover {
|
||||||
|
fill: #00acee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover-gitea:hover {
|
||||||
|
fill: #609926;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
height: 1.2em;
|
||||||
|
fill: var(--foreground-dim);
|
||||||
|
vertical-align: sub;
|
||||||
|
}
|
||||||
|
|
||||||
|
table, th, td {
|
||||||
|
border: var(--accent-dim) 1px solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-spacing: 0;
|
||||||
|
border-spacing: 0;
|
||||||
|
overflow-x: scroll;
|
||||||
|
border-width: 2px;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-group {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input {
|
||||||
|
margin: 8px 0;
|
||||||
|
background-color: rgba(128, 128, 128, .25);
|
||||||
|
color: white;
|
||||||
|
border: #888 2px solid;
|
||||||
|
padding: 8px;
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: medium;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
border: none;
|
||||||
|
padding: 8px;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: initial;
|
||||||
|
color: black;
|
||||||
|
transition: filter 200ms ease;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"]:focus-visible,
|
||||||
|
input[type="password"]:focus-visible {
|
||||||
|
outline: none;
|
||||||
|
border-color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-message {
|
||||||
|
color: var(--warning);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:hover {
|
||||||
|
filter: brightness(.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button.primary {
|
||||||
|
background-color: var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button.confirm {
|
||||||
|
background-color: var(--confirm);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button.warning {
|
||||||
|
background-color: var(--warning);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.primary {
|
||||||
|
color: var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.confirm {
|
||||||
|
color: var(--confirm);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.warning {
|
||||||
|
color: var(--warning);
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-buttons {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-buttons .button {
|
||||||
|
flex: 1;
|
||||||
|
}
|
18
login/theme.properties
Normal file
18
login/theme.properties
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
parent=base
|
||||||
|
import=common/keycloak
|
||||||
|
styles=css/main.css
|
||||||
|
|
||||||
|
meta=viewport==width=device-width,initial-scale=1
|
||||||
|
|
||||||
|
kcLoginClass=page-container
|
||||||
|
|
||||||
|
kcHeaderClass=site-header
|
||||||
|
kcHeaderWrapperClass=nav
|
||||||
|
|
||||||
|
kcFormCardClass=content
|
||||||
|
kcFormGroupClass=form-group
|
||||||
|
kcInputClass=form-input
|
||||||
|
kcInputErrorMessageClass=error-message
|
||||||
|
|
||||||
|
kcButtonClass=button
|
||||||
|
kcButtonPrimaryClass=primary
|
BIN
screenshot.png
Normal file
BIN
screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
Loading…
Reference in a new issue