src/widget.scss
Rama main · réplica de lectura del repositorio original.
:root {
--altcha-border-color: var(--altcha-color-neutral);
--altcha-border-width: 1px;
--altcha-border-radius: 6px;
--altcha-color-base: light-dark(oklch(100% 0.00011 271.152), oklch(20.904% 0.00002 271.152));
--altcha-color-base-content: light-dark(
oklch(20.904% 0.00002 271.152),
oklch(100% 0.00011 271.152)
);
--altcha-color-error: oklch(51.284% 0.20527 28.678);
--altcha-color-error-content: oklch(100% 0.00011 271.152);
--altcha-color-neutral: light-dark(oklch(83.591% 0.0001 271.152), oklch(46.04% 0.00005 271.152));
--altcha-color-neutral-content: light-dark(
oklch(46.76% 0.00005 271.152),
oklch(100% 0.00011 271.152)
);
--altcha-color-primary: oklch(40.279% 0.2449 268.131);
--altcha-color-primary-content: oklch(100% 0.00011 271.152);
--altcha-color-success: oklch(55.748% 0.18968 142.511);
--altcha-color-success-content: oklch(100% 0.00011 271.152);
--altcha-checkbox-border-color: light-dark(
oklch(66.494% 0.00233 15.434),
oklch(51.028% 0.00006 271.152)
);
--altcha-checkbox-border-radius: 5px;
--altcha-checkbox-border-width: var(--altcha-border-width);
--altcha-checkbox-outline: 2px solid var(--altcha-checkbox-outline-color);
--altcha-checkbox-outline-color: -webkit-focus-ring-color;
--altcha-checkbox-outline-offset: 2px;
--altcha-checkbox-size: 22px;
--altcha-checkbox-transition-duration: var(--altcha-transition-duration);
--altcha-input-background-color: var(--altcha-color-base);
--altcha-input-border-radius: 3px;
--altcha-input-border-width: 1px;
--altcha-input-color: var(--altcha-color-base-content);
--altcha-max-width: 320px;
--altcha-padding: 0.75rem;
--altcha-popover-arrow-size: 6px;
--altcha-popover-color: var(--altcha-border-color);
--altcha-shadow: drop-shadow(3px 3px 6px oklch(0% 0 0 / 0.2));
--altcha-spinner-color: var(--altcha-color-base-content);
--altcha-switch-background-color: var(--altcha-color-neutral);
--altcha-switch-border-radius: calc(infinity * 1px);
--altcha-switch-height: var(--altcha-checkbox-size);
--altcha-switch-padding: 0.25rem;
--altcha-switch-width: calc(var(--altcha-checkbox-size) * 1.75);
--altcha-switch-toggle-border-radius: 100%;
--altcha-switch-toggle-color: var(--altcha-color-neutral-content);
--altcha-switch-toggle-size: calc(
var(--altcha-switch-height) - calc(var(--altcha-switch-padding) * 2)
);
--altcha-transition-duration: 0.6s;
--altcha-z-index: 99999999;
--altcha-z-index-popover: 999999999;
}
@supports (-moz-appearance: none) {
:root {
--altcha-checkbox-outline-color: var(--altcha-color-primary);
}
}
.altcha {
all: revert-layer;
display: none;
font-family: inherit;
font-size: inherit;
position: relative;
&[data-visible] {
display: block;
}
&-popover,
&-popover * {
all: revert-layer;
box-sizing: border-box;
font-family: inherit;
font-size: inherit;
line-height: 1.25;
}
& * {
all: revert-layer;
box-sizing: border-box;
font-family: inherit;
font-size: inherit;
line-height: 1.25;
}
& a,
&-popover a {
color: currentColor;
text-decoration: none;
&:hover {
color: currentColor;
}
}
&-main {
align-items: start;
background-color: var(--altcha-color-base);
border: var(--altcha-border-width, 1px) solid var(--altcha-border-color);
border-radius: var(--altcha-border-radius, 0);
color: var(--altcha-color-base-content);
display: flex;
flex-direction: column;
gap: 0.5rem;
justify-content: space-between;
padding: var(--altcha-padding);
max-width: var(--altcha-max-width, 100%);
& > * {
display: flex;
width: 100%;
&:first-child {
flex-grow: 1;
}
}
}
&-checkbox-wrap {
align-items: center;
display: flex;
flex-direction: row;
flex-grow: 1;
gap: 0.5rem;
& > * {
display: flex;
}
}
&-logo {
opacity: 0.7;
}
&-footer {
align-items: center;
display: flex;
flex-grow: 1;
gap: 0.5rem;
justify-content: flex-end;
font-size: 0.7rem;
opacity: 0.7;
& p {
margin: 0;
padding: 0;
}
}
&-error {
font-size: 0.85rem;
}
&-button {
align-items: center;
background: var(--altcha-color-primary);
border: var(--altcha-input-border-width) solid var(--altcha-color-primary);
border-radius: var(--altcha-input-border-radius);
color: var(--altcha-color-primary-content);
cursor: pointer;
display: flex;
font-size: 0.9rem;
gap: 0.5rem;
padding: 0.35rem;
&:focus {
border-color: var(--altcha-color-primary);
outline: var(--altcha-checkbox-outline);
outline-offset: var(--altcha-checkbox-outline-offset);
}
}
&-button > &-spinner,
&-button > svg {
height: 20px;
width: 20px;
}
&-button-secondary {
background: transparent;
border-color: var(--altcha-color-neutral);
color: var(--altcha-color-neutral-content);
}
&-input {
background: var(--altcha-input-background-color);
border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);
border-radius: var(--altcha-input-border-radius);
color: var(--altcha-input-color);
flex-grow: 1;
font-size: 1rem;
min-width: 0;
padding: 0.25rem;
width: auto;
&:focus {
border-color: var(--altcha-color-primary);
outline: var(--altcha-checkbox-outline);
outline-offset: var(--altcha-checkbox-outline-offset);
}
}
&-spinner {
animation: altcha-rotate 0.6s linear infinite;
border-radius: 100%;
border: var(--altcha-checkbox-border-width) solid var(--altcha-spinner-color);
border-bottom-color: transparent;
border-right-color: transparent;
opacity: 0.7;
}
&-popover {
background-color: var(--altcha-color-base);
border: var(--altcha-border-width) solid var(--altcha-border-color);
border-radius: var(--altcha-border-radius);
color: var(--altcha-color-base-content);
filter: var(--altcha-shadow);
position: absolute;
left: calc(var(--altcha-padding) / 2);
max-width: calc(var(--altcha-max-width) - var(--altcha-padding));
top: calc(
var(--altcha-padding) + var(--altcha-checkbox-size) + var(--altcha-popover-arrow-size)
);
z-index: var(--altcha-z-index-popover);
&-arrow {
border: var(--altcha-popover-arrow-size) solid transparent;
border-bottom-color: var(--altcha-popover-color);
content: '';
height: 0;
left: calc(var(--altcha-checkbox-size) / 2);
position: absolute;
top: calc(var(--altcha-popover-arrow-size) * -2);
width: 0;
}
&-content {
max-height: 100dvh;
overflow: auto;
padding: var(--altcha-padding);
}
&[data-top='true'][data-display='standard'] {
bottom: calc(100% - (var(--altcha-padding) - var(--altcha-popover-arrow-size)));
top: auto;
}
&[data-top='true'][data-display='standard'] &-arrow {
border-bottom-color: transparent;
border-top-color: var(--altcha-popover-color);
bottom: calc(var(--altcha-popover-arrow-size) * -2);
top: auto;
}
&[data-variant='error'] {
--altcha-popover-color: var(--altcha-color-error);
background-color: var(--altcha-color-error);
border-color: var(--altcha-color-error);
color: var(--altcha-color-error-content);
}
&[data-variant='error'] &-content {
padding: calc(var(--altcha-padding) / 1.5) var(--altcha-padding);
}
&[data-display='overlay'] {
animation: altcha-overlay-slidein 0.5s forwards;
left: 50%;
position: fixed;
top: 45%;
transform: translate(-50%, -50%);
width: var(--altcha-max-width);
z-index: var(--altcha-z-index);
}
&[data-display='bottomsheet'] {
animation: altcha-bottomsheet-slideup 0.5s forwards;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
border-bottom: 0;
bottom: -100%;
left: 50%;
position: fixed;
top: auto;
transform: translate(-50%, 0);
width: var(--altcha-max-width);
z-index: var(--altcha-z-index);
}
&[data-display='bottomsheet'] &-content {
padding-bottom: calc(var(--altcha-padding) * 2);
}
&-backdrop {
background: var(--altcha-color-base-content);
bottom: 0;
left: 0;
opacity: 0.1;
position: fixed;
right: 0;
top: 0;
transition: opacity 0.5s;
z-index: var(--altcha-z-index);
}
&-close {
color: var(--altcha-color-base-content);
cursor: pointer;
display: inline-block;
font-size: 1rem;
height: 1.25rem;
line-height: 0.95;
position: absolute;
right: 0;
text-align: center;
text-shadow: 0 0 1px var(--altcha-color-base);
top: -1.5rem;
width: 1.25rem;
z-index: var(--altcha-z-index);
}
}
[dir='rtl'] &-popover {
left: auto;
right: calc(var(--altcha-padding) / 2);
&-arrow {
left: auto;
right: calc(var(--altcha-checkbox-size) / 2);
}
&-close {
left: 0;
right: auto;
}
}
&-popover[data-display='bottomsheet'] &-footer,
&-popover[data-display='overlay'] &-footer {
align-items: center;
justify-content: center;
padding-top: 1rem;
gap: 0.5rem;
& svg {
height: 18px;
width: 18px;
vertical-align: middle;
}
}
&-code-challenge {
& > form {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
&-title {
font-weight: 600;
}
&-text {
font-size: 0.85rem;
}
&-image {
background: white;
border: var(--altcha-input-border-width) solid var(--altcha-color-neutral);
border-radius: var(--altcha-input-border-radius);
object-fit: contain;
height: 50px;
}
&-row {
display: flex;
gap: 0.5rem;
}
&-buttons {
align-items: center;
display: flex;
flex-direction: column;
gap: 0.5rem;
margin-top: var(--altcha-padding);
justify-content: space-between;
& button {
justify-content: center;
width: 100%;
}
}
}
&-checkbox {
cursor: pointer;
height: var(--altcha-checkbox-size);
position: relative;
width: var(--altcha-checkbox-size);
& input {
appearance: none;
background: var(--altcha-input-background-color);
border: var(--altcha-checkbox-border-width, 2px) solid var(--altcha-checkbox-border-color);
border-radius: var(--altcha-checkbox-border-radius);
cursor: pointer;
height: var(--altcha-checkbox-size);
left: 0;
margin: 0;
padding: 0;
position: absolute;
top: 0;
width: var(--altcha-checkbox-size);
@supports (hanging-punctuation: first) and (font: -apple-system-body) and
(-webkit-appearance: none) {
/* Safari-only: fixes focus outline */
&:focus {
outline-width: 2px;
outline-style: solid;
}
}
&:before {
border-radius: var(--altcha-checkbox-border-radius);
content: '';
width: 100%;
height: 100%;
background: var(--altcha-color-neutral);
display: block;
transform: scale(0);
}
&:checked {
background-color: var(--altcha-color-success);
border-color: var(--altcha-color-success);
}
&:checked::before {
background-color: var(--altcha-color-success);
opacity: 0;
transform: scale(2.2);
transition: all var(--altcha-checkbox-transition-duration) ease;
transition-delay: 0.1s;
}
}
& svg {
--altcha-radio-svg-size: calc(var(--altcha-checkbox-size) * 0.5);
--altcha-radio-svg-offset: calc(var(--altcha-checkbox-size) * 0.25);
fill: none;
left: var(--altcha-radio-svg-offset);
height: var(--altcha-radio-svg-size);
opacity: 0;
position: absolute;
stroke: currentColor;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
stroke-dasharray: 16px;
stroke-dashoffset: 16px;
top: var(--altcha-radio-svg-offset);
transform: translate3d(0, 0, 0);
width: var(--altcha-radio-svg-size);
}
& input:checked + svg {
color: var(--altcha-color-success-content);
opacity: 1;
stroke-dashoffset: 0;
transition: all var(--altcha-checkbox-transition-duration) ease;
transition-delay: 0.1s;
}
&-spinner {
display: none;
left: 0;
height: var(--altcha-checkbox-size);
position: absolute;
top: 0;
width: var(--altcha-checkbox-size);
}
&[data-loading='true'] input {
appearance: none;
opacity: 0;
pointer-events: none;
}
&[data-loading='true'] &-spinner {
display: block;
}
}
&-checkbox-native {
height: var(--altcha-checkbox-size);
position: relative;
width: var(--altcha-checkbox-size);
& input {
height: var(--altcha-checkbox-size);
margin: 0;
width: var(--altcha-checkbox-size);
}
&-spinner {
display: none;
left: 0;
height: var(--altcha-checkbox-size);
position: absolute;
top: 0;
width: var(--altcha-checkbox-size);
}
&[data-loading='true'] input {
appearance: none;
opacity: 0;
pointer-events: none;
}
&[data-loading='true'] &-spinner {
display: block;
}
}
&-switch {
align-items: center;
border-radius: var(--altcha-switch-border-radius);
background-color: var(--altcha-switch-background-color);
display: flex;
height: var(--altcha-switch-height);
padding: var(--altcha-switch-padding);
position: relative;
width: var(--altcha-switch-width);
&:focus-within {
outline: var(--altcha-checkbox-outline);
outline-offset: var(--altcha-checkbox-outline-offset);
}
& input {
appearance: none;
cursor: pointer;
height: 100%;
left: 0;
opacity: 0;
position: absolute;
top: 0;
width: 100%;
}
&-toggle {
align-items: center;
background-color: var(--altcha-switch-toggle-color);
border-radius: var(--altcha-switch-toggle-border-radius);
cursor: pointer;
display: flex;
height: var(--altcha-switch-toggle-size);
justify-content: center;
left: var(--altcha-switch-padding);
position: absolute;
transition:
width 150ms ease-out,
left 150ms ease-out;
width: var(--altcha-switch-toggle-size);
}
&-spinner {
display: none;
height: var(--altcha-switch-toggle-size);
width: var(--altcha-switch-toggle-size);
}
&[data-loading='true'] {
pointer-events: none;
}
&[data-loading='true'] &-spinner {
display: block;
}
&[data-loading='true'] &-toggle {
background-color: transparent;
left: calc(50% - (var(--altcha-switch-toggle-size) / 2));
}
[data-state='verified'] & {
--altcha-switch-background-color: var(--altcha-color-success);
&-toggle {
background-color: var(--altcha-color-success-content);
left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));
}
}
[dir='rtl'] &-toggle {
left: calc(100% - var(--altcha-switch-height) + var(--altcha-switch-padding));
}
[dir='rtl'][data-state='verified'] &-toggle {
left: var(--altcha-switch-padding);
}
}
&-floating-arrow {
border: 6px solid transparent;
border-bottom-color: var(--altcha-border-color);
content: '';
height: 0;
left: 12px;
position: absolute;
top: -12px;
width: 0;
}
&-overlay-backdrop {
bottom: 0;
left: 0;
position: fixed;
right: 0;
top: 0;
transition: opacity var(--altcha-transition-duration);
z-index: var(--altcha-z-index);
}
&-overlay-close {
display: inline-block;
color: currentColor;
cursor: pointer;
font-size: 1rem;
height: 1rem;
line-height: 0.85;
position: absolute;
right: 0;
text-align: center;
text-shadow: 0 0 1px var(--altcha-color-base);
top: -1.5rem;
width: 1rem;
z-index: var(--altcha-z-index);
}
&[data-display='overlay'] {
animation: altcha-overlay-slidein var(--altcha-transition-duration) forwards;
filter: var(--altcha-shadow);
left: 50%;
opacity: 0;
position: fixed;
top: 45%;
transform: translate(-50%, -50%);
z-index: var(--altcha-z-index);
}
&[data-display='overlay'] &-main {
width: var(--altcha-max-width);
}
&[data-display='floating'] {
display: none;
filter: var(--altcha-shadow);
left: var(--altcha-floating-left, -100%);
position: fixed;
top: var(--altcha-floating-top, -100%);
z-index: var(--altcha-z-index);
}
&[data-display='floating'] &-main {
width: var(--altcha-max-width);
}
&[data-display='floating'][data-floating-position='top'] &-floating-arrow {
border-bottom-color: transparent;
border-top-color: var(--altcha-border-color);
bottom: -12px;
top: auto;
}
&[data-display='floating'][data-visible] {
display: flex;
}
&[data-display='bar'] {
bottom: -100%;
filter: var(--altcha-shadow);
left: 0;
position: fixed;
right: 0;
transition:
bottom var(--altcha-transition-duration),
top var(--altcha-transition-duration);
z-index: var(--altcha-z-index);
}
&[data-display='bar'] &-main {
align-items: center;
border-radius: 0;
border-width: var(--altcha-border-width) 0 0 0;
flex-direction: row;
max-width: 100% !important;
& > * {
width: auto;
}
}
&[data-display='bar'][data-placement='top'] {
bottom: auto;
top: -100%;
}
&[data-display='bar'][data-placement='top'] &-main {
border-width: 0 0 var(--altcha-border-width) 0;
}
&[data-display='bar'][data-placement='bottom']:not([data-state='unverified']) {
bottom: 0;
}
&[data-display='bar'][data-placement='top']:not([data-state='unverified']) {
top: 0;
}
&[data-display='invisible'] {
display: none;
}
}
@keyframes altcha-rotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes altcha-bottomsheet-slideup {
100% {
bottom: 0;
}
}
@keyframes altcha-overlay-slidein {
100% {
opacity: 1;
top: 50%;
}
}