altcha
Version:
GDPR compliant, self-hosted CAPTCHA alternative.
140 lines (117 loc) • 2.59 kB
CSS
.altcha {
background: var(--altcha-color-base, transparent);
border: var(--altcha-border-width, 1px) solid
var(--altcha-color-border, #a0a0a0);
border-radius: var(--altcha-border-radius, 3px);
color: var(--altcha-color-text, currentColor);
display: flex;
flex-direction: column;
max-width: var(--altcha-max-width, 260px);
position: relative;
text-align: left;
}
.altcha:focus-within {
border-color: var(--altcha-color-border-focus, currentColor);
}
.altcha[data-floating] {
background: var(--altcha-color-base, white);
display: none;
filter: drop-shadow(3px 3px 6px rgba(0,0,0,0.2));
left: -100%;
position: fixed;
top: -100%;
width: var(--altcha-max-width, 260px);
z-index: 999999;
}
.altcha[data-floating="top"] .altcha-anchor-arrow {
border-bottom-color: transparent;
border-top-color: var(--altcha-color-border, #a0a0a0);
bottom: -12px;
top: auto;
}
.altcha[data-floating="bottom"]:focus-within::after {
border-bottom-color: var(--altcha-color-border-focus, currentColor);
}
.altcha[data-floating="top"]:focus-within::after {
border-top-color: var(--altcha-color-border-focus, currentColor);
}
.altcha[data-floating]:not([data-state="unverified"]) {
display: block;
}
.altcha-anchor-arrow {
border: 6px solid transparent;
border-bottom-color: var(--altcha-color-border, #a0a0a0);
content: '';
height: 0;
left: 12px;
position: absolute;
top: -12px;
width: 0;
}
.altcha-main {
align-items: center;
display: flex;
gap: 0.4rem;
padding: 0.7rem;
}
.altcha-label {
flex-grow: 1;
}
.altcha-label label {
cursor: pointer;
}
.altcha-logo {
color: currentColor;
opacity: 0.3;
}
.altcha-logo:hover {
opacity: 1;
}
.altcha-error {
color: var(--altcha-color-error-text, #f23939);
display: flex;
font-size: 0.85rem;
gap: 0.3rem;
padding: 0 0.7rem 0.7rem;
}
.altcha-footer {
align-items: center;
background-color: var(--altcha-color-footer-bg, transparent);
display: flex;
font-size: 0.75rem;
opacity: 0.4;
padding: 0.2rem 0.7rem;
text-align: right;
}
.altcha-footer:hover {
opacity: 1;
}
.altcha-footer > *:first-child {
flex-grow: 1;
}
.altcha-footer :global(a) {
color: currentColor;
}
.altcha-checkbox {
display: flex;
align-items: center;
height: 24px;
width: 24px;
}
.altcha-checkbox input {
width: 18px;
height: 18px;
margin: 0;
}
.altcha-hidden {
display: none;
}
.altcha-spinner {
animation: altcha-spinner 0.75s infinite linear;
transform-origin: center;
}
@keyframes altcha-spinner {
100% {
transform: rotate(360deg);
}
}