/* PAOneStop account pages: login, forgot password, create user, verify email.
   Colors are from the Penn State Brand Palette (Color v3):
   light canvas, primary brand blues for the focus, PA Link for links. */

:root {
    --nittany-navy: #001E44;
    --beaver-blue: #1E407C;
    --pa-link: #005FA9;
    --pa-slate: #314D64;
    --slate-light: #CCDAE6;
    --slate-max-light: #EEF3F7;
    --old-coaly: #262626;
    --penns-forest: #4A7729;
    --error: #B00020;
}

* { box-sizing: border-box; }

body {
    margin: 0;
    min-height: 100vh;
    background: var(--slate-max-light);
    color: var(--old-coaly);
    font: 16px/1.5 Roboto, Arial, Helvetica, sans-serif;
}

/* The mark artwork includes its own clear space, so the header needs no padding. */
.site-header {
    padding: 0 16px;
    background: #FFFFFF;
    border-bottom: 4px solid var(--beaver-blue);
}

.site-header img {
    display: block;
    height: 96px;
    width: auto;
}

.login {
    width: 400px;
    margin: 40px auto;
}

.login.wide {
    width: 600px;
}

.notice {
    margin: 0 0 16px;
    padding: 12px 16px;
    background: #FFFFFF;
    border-left: 4px solid var(--beaver-blue);
    color: var(--nittany-navy);
}

.card {
    padding: 32px;
    background: #FFFFFF;
    border: 1px solid var(--slate-light);
    border-top: 4px solid var(--nittany-navy);
}

.card p {
    margin: 0 0 16px;
}

.app-name {
    color: var(--beaver-blue);
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.05em;
    text-transform: uppercase;
}

.card .app-name {
    margin: 0;
}

h1 {
    margin: 4px 0 24px;
    color: var(--nittany-navy);
    font-size: 28px;
    line-height: 1.2;
}

h2 {
    margin: 24px 0 16px;
    padding-top: 16px;
    border-top: 1px solid var(--slate-light);
    color: var(--nittany-navy);
    font-size: 18px;
}

label {
    display: block;
    margin: 0 0 4px;
    color: var(--nittany-navy);
    font-size: 15px;
    font-weight: 700;
}

.field {
    display: block;
    width: 100%;
    height: 44px;
    margin: 0 0 16px;
    padding: 8px 12px;
    border: 1px solid var(--pa-slate);
    border-radius: 2px;
    color: var(--old-coaly);
    font: inherit;
}

.field:focus,
.btn:focus-visible,
.link:focus-visible,
a:focus-visible {
    outline: 2px solid var(--pa-link);
    outline-offset: 2px;
}

/* City / State / Zip and the two phone numbers sit side by side. */
.row {
    display: grid;
    grid-template-columns: 2fr 1fr 1fr;
    gap: 0 12px;
}

.row.half {
    grid-template-columns: 1fr 1fr;
}

.actions {
    display: flex;
    gap: 12px;
    margin-top: 8px;
}

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 44px;
    padding: 0 20px;
    border: 2px solid var(--beaver-blue);
    border-radius: 2px;
    font: 700 16px Roboto, Arial, Helvetica, sans-serif;
    text-decoration: none;
    cursor: pointer;
}

.primary {
    flex: 1;
    background: var(--beaver-blue);
    color: #FFFFFF;
}

.primary:hover {
    background: var(--nittany-navy);
    border-color: var(--nittany-navy);
}

.secondary {
    background: #FFFFFF;
    color: var(--beaver-blue);
}

.secondary:hover {
    background: var(--slate-max-light);
}

/* The password scripts disable the submit button for a split second on every
   keystroke while hashing. The delay keeps that from flashing; a button that
   stays disabled (e.g. password rules not met) still fades. */
.btn:disabled {
    opacity: 0.5;
    cursor: not-allowed;
    transition: opacity 0s 0.3s;
}

/* Set by skin/login.js while the form posts back. */
.btn.loading {
    color: transparent;
    background: var(--beaver-blue) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9' fill='none' stroke='%23fff' stroke-opacity='.3' stroke-width='3'/%3E%3Cpath d='M12 3a9 9 0 0 1 9 9' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='0.8s' repeatCount='indefinite'/%3E%3C/path%3E%3C/svg%3E") center / 22px no-repeat;
    pointer-events: none;
}

.more {
    margin-top: 24px;
    padding-top: 16px;
    border-top: 1px solid var(--slate-light);
}

.card .more p {
    margin: 4px 0;
}

/* ASP.NET buttons styled as text links (they post back and redirect). */
.link {
    padding: 0;
    border: 0;
    background: none;
    color: var(--pa-link);
    font: inherit;
    text-decoration: underline;
    cursor: pointer;
}

.link:hover,
a:not(.btn):hover {
    color: var(--nittany-navy);
}

a:not(.btn) {
    color: var(--pa-link);
}

.back {
    margin: 16px 0 0;
    text-align: center;
}

.card .error,
.error {
    margin: 0 0 16px;
    padding: 10px 12px;
    background: #FDF1F3;
    border-left: 4px solid var(--error);
    color: var(--error);
    font-size: 15px;
}

.error:empty,
.error br {
    display: none;
}

/* ASP.NET validator messages. !important overrides the validators' inline red. */
.field-error {
    display: block;
    margin: -12px 0 12px;
    color: var(--error) !important;
    font-size: 14px;
}

.password-requirements {
    margin: 0 0 16px;
    padding-left: 24px;
    font-size: 14px;
}

.password-requirements li {
    padding-left: 6px;
}

.password-requirements li.invalid {
    color: var(--error);
    list-style-type: "X";
}

.password-requirements li.valid {
    color: var(--penns-forest);
    list-style-type: "\2713";
}
