.validator {
    opacity: 0;
    max-height: 0;
    padding: 0 1rem;
    margin-top: 0;
    overflow: hidden;
    width: 100%;
    display: flex;
    flex-direction: column;
    font-size: var(--text-xs);
    line-height: var(--text-xs--line-height);
    transition:
        max-height 0.3s ease,
        opacity 0.3s ease,
        padding 0.3s ease,
        margin-top 0.3s ease,
        border-color 0.3s ease,
        background-color 0.3s ease;
}

.validator.active {
    opacity: 1;
    max-height: 500px;
    padding: 0.875rem 1rem;
    margin-top: 0;
}

.validator .validator-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 0.625rem;
}

.validator .title {
    font-weight: 600;
    font-size: var(--text-sm);
    line-height: var(--text-sm--line-height);
    color: var(--color-gray-700);
}

.validator .strength-label {
    flex-shrink: 0;
    font-weight: 600;
    font-size: var(--text-xs);
    line-height: var(--text-xs--line-height);
    color: var(--color-gray-400);
}

.validator .strength {
    margin-bottom: 0.75rem;
}

.validator .strength-bar {
    height: 0.3125rem;
    overflow: hidden;
    border-radius: 999px;
    background: var(--color-gray-200);
}

.validator .strength-fill {
    height: 100%;
    width: 0;
    border-radius: inherit;
    background: currentColor;
    transition: width 0.18s ease;
}

.validator .strength-empty {
    color: var(--color-gray-400);
}

.validator .strength-weak {
    color: var(--color-red-600);
}

.validator .strength-fair {
    color: var(--color-yellow-600);
}

.validator .strength-good {
    color: var(--color-blue-600);
}

.validator .strength-strong {
    color: var(--color-green-600);
}

.validator .requirements {
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
}

.validator .item {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;

    color: var(--color-gray-400);
    transition: color var(--anim-duration) ease;
}

.validator .item::before {
    content: "○";
    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: 1rem;
    min-width: 1rem;

    font-size: 0.7rem;
    line-height: 1;
    color: var(--color-gray-400);

    transition: color var(--anim-duration) ease;
}

.validator .item.valid {
    color: var(--color-green-600);
}

.validator .item.valid::before {
    content: "✔";
    color: currentColor;
}

.validator .symbols {
    color: inherit;
    opacity: 0.85;
}