* {
    box-sizing: border-box;
}

*:active {
    outline: none;
}

*:focus {
    outline: none;
    box-shadow: var(--const-global-focus);
}

input,
button {
    font-family: inherit;
    font-size: inherit;
}

.sr,
.sr button {
    border: 0;
    clip: rect(0 0 0 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px;
    white-space: nowrap;
}

.hidden,
[hidden] {
    display: none;
}

.invisible {
    visibility: hidden;
}


q2-input {
    display: block;
    margin-top: var(--tct-input-margin-top, var(--app-scale-4, 30px));
    margin-bottom: var(--tct-input-margin-bottom, var(--app-scale-4, 30px));
    font-size: var(--tct-input-font-size, var(--app-font-size, inherit));
}

q2-input[hidden] {
    display: none;
}

q2-input .field-container,
q2-input .input-container {
    position: relative;
}

q2-input .field-container label {
    display: block;
    padding-left: var(--tct-input-label-padding-left, 0);
    padding-right: var(--tct-input-label-padding-right, 0);
    margin-bottom: var(
        --tct-input-label-margin-bottom,
        var(--tct-scale-1, var(--app-scale-1, 5px))
    );
    color: var(--tct-input-label-font-color, inherit);
    font-size: var(--tct-input-label-font-size, inherit);
    font-weight: var(--tct-input-label-font-weight, 600);
    text-transform: var(--tct-input-label-text-transform, none);
    letter-spacing: var(--tct-input-label-letter-spacing, normal);
    transition: color var(--tct-input-tween, var(--tct-tween-2, var(--app-tween-2, 0.4s ease)));
}

q2-input .field-container .optional-tag {
    margin-left: var(
        --tct-input-label-optional-margin-left,
        var(--tct-scale-1, var(--app-scale-1, 5px))
    );
    color: var(
        --tct-input-label-optional-font-color,
        var(--tct-a11y-color, var(--t-a11y-gray-color, #767676))
    );
    font-size: var(--tct-input-label-optional-font-size, 12px);
    font-weight: var(--tct-input-label-optional-font-weight, 400);
}

q2-input .input-container {
    display: -ms-flexbox;
    display: flex;
    -ms-flex-align: center;
    align-items: center;
    --q2-input-border-top-left-radius: var(
        --tct-input-border-top-left-radius,
        var(--tct-border-radius-1, var(--app-border-radius-1, 3px))
    );
    --q2-input-border-top-right-radius: var(
        --tct-input-border-top-right-radius,
        var(--tct-border-radius-1, var(--app-border-radius-1, 3px))
    );
    --q2-input-border-bottom-right-radius: var(
        --tct-input-border-bottom-right-radius,
        var(--tct-border-radius-1, var(--app-border-radius-1, 3px))
    );
    --q2-input-border-bottom-left-radius: var(
        --tct-input-border-bottom-left-radius,
        var(--tct-border-radius-1, var(--app-border-radius-1, 3px))
    );
    --q2-input-border-radius: var(--q2-input-border-top-left-radius)
        var(--q2-input-border-top-right-radius) var(--q2-input-border-bottom-right-radius)
        var(--q2-input-border-bottom-left-radius);
    --q2-input-border-width: var(--tct-input-border-top-width, 1px)
        var(--tct-input-border-right-width, 1px) var(--tct-input-border-bottom-width, 1px)
        var(--tct-input-border-left-width, 1px);
    --q2-input-focus-border-width: var(--tct-input-focus-border-top-width, 1px)
        var(--tct-input-focus-border-right-width, 1px)
        var(--tct-input-focus-border-bottom-width, 1px)
        var(--tct-input-focus-border-left-width, 1px);
    --q2-input-prefix-clearance: calc(
        3 * var(--tct-input-prefix-font-size, 14px) + var(--tct-scale-1, 5px)
    );
    --q2-input-icon-clearance: 34px;
    --q2-input-min-height: 44px;
}

q2-input .field-container .input-field {
    -webkit-appearance: none;
    appearance: none;
    box-sizing: border-box;
    height: var(--tct-input-height, 44px);
    width: 100%;
    padding: 0 var(--tct-input-horizontal-padding, var(--tct-scale-2, var(--app-scale-2, 10px)));
    background-color: var(--tct-input-bg, var(--t-input-bg, #fcfcfc));
    color: var(--tct-input-font-color, var(--t-input-font-color, inherit));
    border-width: var(--q2-input-border-width);
    border-style: solid;
    border-color: var(--tct-input-border-color, var(--t-input-border, #cccccc));
    border-radius: var(--q2-input-border-radius);
    box-shadow: var(--tct-input-box-shadow, none);
    transition: border-width
            var(--tct-input-tween, var(--tct-tween-2, var(--app-tween-2, 0.4s ease))),
        border-color var(--tct-input-tween, var(--tct-tween-2, var(--app-tween-2, 0.4s ease))),
        box-shadow var(--tct-input-tween, var(--tct-tween-2, var(--app-tween-2, 0.4s ease)));
}

q2-input .field-container input {
    display: inline-block;
}

q2-input .field-container .input-field:focus {
    border-width: var(--q2-input-focus-border-width, 1px);
    border-color: var(--tct-input-focus-border-color, var(--t-input-focus, #999999));
    box-shadow: var(--tct-global-focus, var(--const-global-focus, 0 0 0 2px #33b4ff)),
        var(--tct-input-focus-box-shadow, 0 0 transparent);
}

q2-input .field-container input::-ms-clear {
    display: none;
}

q2-input .field-container input[type='search']::-webkit-search-decoration,
q2-input .field-container input[type='search']::-webkit-search-cancel-button,
q2-input .field-container input[type='search']::-webkit-search-results-button,
q2-input .field-container input[type='search']::-webkit-search-results-decoration {
    display: none;
}

q2-input .field-container input::placeholder,
q2-input .field-container .placeholder-text {
    color: var(--tct-input-placeholder-font-color, var(--t-input-placeholder-font-color, #6c6c6c));
}

q2-input .field-container .pseudo-input {
    display: inline-flex;
    align-items: center;
}

q2-input .field-container .pseudo-input span {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

q2-input .field-container q2-icon:not(.icon-clear),
q2-input .field-container .input-prefix,
q2-input .field-container .input-suffix,
q2-input .field-container .btn-clear {
    position: absolute;
}

q2-input .field-container q2-icon {
    top: calc(var(--tct-input-height, 44px) / 2 - 10px);
    pointer-events: none;
    color: var(--tct-input-icon-stroke-primary, var(--app-gray, #999999));
    --tct-icon-stroke-primary: var(--tct-input-icon-stroke-primary, var(--app-gray, #999999));
    --t-icon-stroke-primary: var(--tct-input-icon-stroke-primary, var(--app-gray, #999999));
}

q2-input .field-container .icon-left {
    left: var(--tct-scale-1, var(--app-scale-1, 5px));
}

q2-input .field-container .icon-left-muted {
    left: var(--tct-scale-1, var(--app-scale-1, 5px));
    opacity: 0.5;
}

q2-input .field-container .input-prefix,
q2-input .field-container .input-suffix {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: calc(
        var(--q2-input-min-height) - var(--tct-input-focus-border-top-width, 1px) -
            var(--tct-input-focus-border-bottom-width, 1px)
    );
    height: calc(
        var(--tct-input-height, 44px) - var(--tct-input-focus-border-top-width, 1px) -
            var(--tct-input-focus-border-bottom-width, 1px)
    );
    width: 3em;
    bottom: var(--tct-input-border-bottom-width, 1px);
    font-size: var(--tct-input-prefix-font-size, inherit);
    color: var(--tct-input-prefix-font-color, inherit);
    background-color: var(--tct-input-prefix-bg, var(--tct-input-bg, var(--t-input-bg, #fcfcfc)));
    transition: color var(--tct-input-tween, var(--tct-tween-2, var(--app-tween-2, 0.4s ease))),
        background-color var(--tct-input-tween, var(--tct-tween-2, var(--app-tween-2, 0.4s ease)));
}

q2-input .field-container .input-prefix {
    left: var(--tct-input-border-left-width, 1px);
    border-right: 1px solid
        var(
            --tct-input-prefix-border-color,
            var(--tct-input-border-color, var(--t-input-border, #cccccc))
        );
    border-top-left-radius: calc(
        var(--q2-input-border-top-left-radius) - var(--tct-input-border-top-width, 1px) -
            var(--tct-input-border-left-width, 1px)
    );
    border-bottom-left-radius: calc(
        var(--q2-input-border-bottom-left-radius) - var(--tct-input-border-bottom-width, 1px) -
            var(--tct-input-border-left-width, 1px)
    );
}

q2-input .field-container .input-suffix {
    right: var(--tct-input-border-right-width, 1px);
    border-left: 1px solid
        var(
            --tct-input-prefix-border-color,
            var(--tct-input-border-color, var(--t-input-border, #cccccc))
        );
    border-top-right-radius: calc(
        var(--q2-input-border-top-right-radius) - var(--tct-input-border-top-width, 1px) -
            var(--tct-input-border-right-width, 1px)
    );
    border-bottom-right-radius: calc(
        var(--q2-input-border-bottom-right-radius) - var(--tct-input-border-bottom-width, 1px) -
            var(--tct-input-border-right-width, 1px)
    );
}

q2-input .field-container .icon-right,
q2-input .field-container .icon-error,
q2-input .field-container .btn-clear {
    right: 0;
    margin-right: var(--tct-scale-2, var(--app-scale-2, 10px));
}

q2-input .field-container .icon-error {
    color: var(--tct-stoplight-error, var(--const-stoplight-alert, #c30000));
    --tct-icon-stroke-primary: var(--tct-stoplight-error, var(--const-stoplight-alert, #c30000));
    --t-icon-stroke-primary: var(--tct-stoplight-error, var(--const-stoplight-alert, #c30000));
}

q2-input .field-container .btn-clear {
    margin-top: calc(var(--tct-input-border-top-width, 1px) / 2);
    margin-bottom: calc(var(--tct-input-border-bottom-width, 1px) / 2);
    top: calc((var(--tct-input-height, 44px) - 22px) / 2);
}

q2-input .field-container .icon-clear {
    top: 3px;
    width: 17px;
    height: 17px;
}

.messages-container {
    height: 0px;
    overflow: hidden;
    background-color: var(--tct-message-bg, var(--tct-gray-l3, var(--app-gray-l3, #f2f2f2)));
    box-shadow: var(
        --tct-input-message-box-shadow,
        var(--tct-box-shadow-1, var(--app-shadow-1, 0 2px 4px rgba(0, 0, 0, 0.3)))
    );
    transition: height
        var(--tct-input-messages-tween, var(--tct-tween-1, var(--app-tween-1, 0.2s ease)));
    margin-top: 2px;
    z-index: 1;
    position: absolute;
    width: 100%;
}

q2-input[disabled] .field-container .input-container {
    cursor: not-allowed;
    opacity: var(
        --tct-input-disabled-opacity,
        var(--tct-disabled-opacity, var(--app-disabled-opacity, 0.4))
    );
}

q2-input .field-container .input-field[disabled] {
    cursor: not-allowed;
}

q2-input .field-container.has-focus .input-prefix {
    border-top-left-radius: calc(
        var(--q2-input-border-top-left-radius) - var(--tct-input-focus-border-top-width, 1px) -
            var(--tct-input-focus-border-left-width, 1px)
    );
    border-bottom-left-radius: calc(
        var(--q2-input-border-bottom-left-radius) - var(--tct-input-focus-border-bottom-width, 1px) -
            var(--tct-input-focus-border-left-width, 1px)
    );
}

q2-input .field-container.has-focus .input-suffix {
    border-top-left-radius: calc(
        var(--q2-input-border-top-left-radius) - var(--tct-input-focus-border-top-width, 1px) -
            var(--tct-input-focus-border-left-width, 1px)
    );
    border-bottom-left-radius: calc(
        var(--q2-input-border-bottom-left-radius) - var(--tct-input-focus-border-bottom-width, 1px) -
            var(--tct-input-focus-border-left-width, 1px)
    );
}

q2-input .field-container.right-aligned .input-field {
    text-align: right;
}

q2-input .field-container .right-aligned .icon-error {
    left: var(--tct-scale-2, var(--app-scale-2, 10px));
    right: auto;
}

q2-input .field-container.has-icon-right .input-field,
q2-input .field-container.has-error.left-aligned .input-field,
q2-input .field-container.has-clear .input-field {
    padding-right: var(--q2-input-icon-clearance);
}

q2-input .field-container.has-icon-right .btn-clear,
q2-input .field-container.has-error.left-aligned .btn-clear,
.has-error.left-aligned .icon-right {
    right: var(--q2-input-icon-clearance);
}

q2-input .field-container.has-clear.has-icon-right .input-field,
q2-input .field-container.has-error.has-clear.left-aligned .input-field {
    padding-right: calc(2 * var(--q2-input-icon-clearance));
}

q2-input .field-container.has-error label {
    color: var(--tct-input-error-label-font-color, var(--tct-input-label-font-color, inherit));
}

q2-input .field-container.has-error:not(.has-focus) .input-prefix,
q2-input .field-container.has-error:not(.has-focus) .input-suffix {
    color: var(--tct-input-error-prefix-font-color, inherit);
    background-color: var(
        --tct-input-error-prefix-bg,
        var(--tct-input-bg, var(--t-input-bg, #fcfcfc))
    );
}

q2-input .field-container.has-error .input-field:not(:focus) {
    border-color: var(--tct-input-error-border-color, var(--const-stoplight-alert, #c30000));
}

q2-input .field-container.has-error.has-icon-right.left-aligned .btn-clear {
    right: calc(2 * var(--q2-input-icon-clearance));
}

q2-input .field-container.has-error.has-clear.has-icon-right.left-aligned .input-field {
    padding-right: calc(3 * var(--q2-input-icon-clearance));
}

q2-input .field-container.has-error.right-aligned .input-field {
    padding-left: var(--q2-input-icon-clearance);
}

q2-input .field-container.has-error.right-aligned.has-prefix .input-field {
    padding-left: calc(var(--q2-input-prefix-clearance) + var(--q2-input-icon-clearance));
}

q2-input .field-container.has-error.right-aligned.has-icon-left .input-field {
    padding-left: calc(2 * var(--q2-input-icon-clearance));
}

q2-input .field-container.has-error.right-aligned .icon-left {
    left: var(--q2-input-icon-clearance);
}

q2-input .field-container.has-prefix .input-field {
    padding-left: var(--q2-input-prefix-clearance);
}

q2-input .field-container.has-prefix.right-aligned .icon-error {
    left: var(--q2-input-prefix-clearance);
    margin-left: var(--tct-scale-1, 5px);
}

q2-input .field-container.has-suffix .icon-error,
q2-input .field-container.has-suffix .btn-clear {
    right: var(--q2-input-prefix-clearance);
}

q2-input .field-container.has-suffix.has-error .btn-clear {
    right: calc(var(--q2-input-prefix-clearance) + var(--q2-input-icon-clearance));
}

q2-input .field-container.has-icon-left .input-field {
    padding-left: var(--q2-input-icon-clearance);
}
