$pos-lc-navy: #0c2340;
$pos-lc-teal: #00a7b5;
$pos-lc-teal-dark: #008c99;
$pos-lc-gray-bg: #f2f2f2;
$pos-lc-border: #d9d9d9;
/* Host page (emptyResponsiveLayout): optional body tweak */
body.pos-loyalty-completion-modal .container {
max-width: none;
width: 100%;
margin: 0;
padding: 0;
}
body.pos-loyalty-completion-modal {
margin: 0;
min-height: 100vh;
}
/* Reused checkout-header microapp: its logo anchor is height:75%, which looks short on this page.
Scoped to initProfile only so the real checkout header elsewhere is unaffected. */
body.pos-loyalty-completion-modal .od-responsive-header a {
height: 100%;
}
/* Full-screen dimmed overlay + modal shell */
.pos-lc-poslink.modal-overlay {
display: block !important;
position: fixed;
inset: 0;
z-index: 100050;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
background: rgba(0, 0, 0, 0.45);
padding: 12px;
box-sizing: border-box;
}
.pos-lc-poslink .modal {
position: relative;
display: flex;
flex-direction: column;
max-height: calc(100vh - 24px);
max-height: calc(100dvh - 24px);
margin: 12px auto;
overflow: hidden;
}
.pos-lc-poslink .modal-content {
display: flex;
flex-direction: column;
flex: 1 1 auto;
min-height: 0;
overflow: hidden;
}
.pos-lc-poslink .modal-header,
.pos-lc-poslink .pos-lc-modal-header {
flex-shrink: 0;
}
.pos-lc-poslink .modal-content-main {
flex: 1 1 auto;
min-height: 0;
overflow-x: hidden;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
padding-bottom: 16px;
}
.pos-lc-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* Override business_select modal header: white bar, centered logo */
.pos-lc-poslink .modal-header,
.pos-lc-poslink .modal-header .header,
.pos-lc-poslink .modal-header .header.center {
background: #fff !important;
background-color: #fff !important;
}
.pos-lc-poslink .modal-header .header.center {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
padding: 16px 12px 8px;
}
.pos-lc-logo-wrap {
display: flex;
justify-content: center;
width: 100%;
margin: 0;
}
.pos-lc-logo-wrap img {
max-width: 200px;
height: auto;
}
.pos-lc-flow {
margin: 0;
padding: 0;
}
.pos-lc-heading {
font-size: clamp(1.05rem, 2.8vw, 1.3rem);
font-weight: 700;
text-align: center;
line-height: 1.3;
margin: 8px 0 14px;
}
.pos-lc-heading--sub {
font-size: clamp(1rem, 2.4vw, 1.12rem);
}
.pos-lc-lead {
font-size: clamp(0.88rem, 2.2vw, 0.95rem);
line-height: 1.5;
text-align: center;
margin-bottom: 18px;
color: #333;
}
.pos-lc-card {
background: $pos-lc-gray-bg;
border-radius: 10px;
padding: 14px 16px;
margin-bottom: 14px;
}
.pos-lc-card__title {
font-weight: 700;
font-size: 1rem;
margin: 0 0 12px;
}
/* Account rows: label and value on one line (green highlight) */
.pos-lc-row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: baseline;
justify-content: space-between;
gap: 8px 16px;
margin-bottom: 10px;
font-size: 0.9rem;
}
.pos-lc-row:last-child {
margin-bottom: 0;
}
.pos-lc-label {
font-weight: 700;
color: #444;
flex: 0 1 auto;
}
.pos-lc-value {
font-weight: 400;
color: #111;
text-align: left;
flex: 1;
min-width: 0;
word-break: break-word;
}
.pos-lc-coupon {
display: flex;
align-items: stretch;
border: 2px dashed $pos-lc-teal;
border-radius: 10px;
overflow: hidden;
margin-bottom: 18px;
}
/* Coupon mark: gift / bonus artwork (replaces $ glyph) */
.pos-lc-coupon__icon {
background: $pos-lc-teal;
color: #fff;
width: 72px;
min-height: 88px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.pos-lc-coupon__mark {
display: flex;
align-items: center;
justify-content: center;
width: 48px;
height: 48px;
}
.pos-lc-coupon__mark svg {
width: 40px;
height: 40px;
max-width: 100%;
max-height: 100%;
}
.pos-lc-coupon__body {
padding: 14px 16px 16px;
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
gap: 0;
}
.pos-lc-coupon__title {
font-weight: 700;
font-size: 0.95rem;
margin: 0 0 8px;
}
/* Extra breathing room under title / around profile line (blue highlight) */
.pos-lc-coupon__sub {
margin: 0 0 14px;
padding-bottom: 4px;
font-size: 0.92rem;
line-height: 1.55;
}
.pos-lc-coupon__exp {
margin: 0;
font-size: 0.78rem;
color: #555;
line-height: 1.45;
}
.pos-lc-btn {
display: block;
width: 100%;
box-sizing: border-box;
text-align: center;
border: none;
border-radius: 8px;
padding: 13px 14px;
font-size: 0.98rem;
font-weight: 700;
cursor: pointer;
text-decoration: none;
}
.pos-lc-btn--primary {
background: $pos-lc-navy;
color: #fff;
}
.pos-lc-btn--primary:hover,
.pos-lc-btn--primary:focus {
background: #153a5c;
color: #fff;
}
.pos-lc-actions {
display: flex;
flex-direction: column;
gap: 12px;
}
.pos-lc-actions--single .pos-lc-btn {
width: 100%;
}
/* Primary CTA only (products-rail palette); no secondary/disabled/ODP variants */
.pos-lc-poslink .od-button.od-button-primary {
box-sizing: border-box;
display: inline-flex;
align-items: center;
justify-content: center;
margin: 0;
padding: 0 1rem;
min-height: 2.625rem;
font-size: 1rem;
font-weight: 600;
line-height: 1;
text-align: center;
text-decoration: none;
vertical-align: middle;
white-space: nowrap;
border: 1px solid #1e5a99;
border-radius: 0.25rem;
background-color: #1e5a99;
color: #fff;
cursor: pointer;
transition: color 0.25s ease-in-out, background-color 0.25s ease-in-out, border-color 0.25s ease-in-out;
-webkit-font-smoothing: inherit;
-moz-osx-font-smoothing: inherit;
}
.pos-lc-poslink .od-button.od-button-primary:hover,
.pos-lc-poslink .od-button.od-button-primary:focus {
background-color: #194a7e;
border-color: #194a7e;
color: #fff;
}
// Not :disabled - the button stays natively enabled so clicking it while invalid can still
// scroll/focus the first invalid field (see posLoyaltyCompletionUpdateSubmitButtonState in
// pos_loyalty_completion/js/index.js for why a truly disabled button can't do this).
.pos-lc-poslink .od-button.od-button-primary.pos-lc-btn-inactive {
background-color: #d9d9d9;
border-color: #d9d9d9;
color: #808080;
cursor: not-allowed;
opacity: 0.55;
filter: saturate(0.3);
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
}
.pos-lc-poslink .od-button.od-button-primary.od-button-full-width {
display: flex;
width: 100%;
}
.pos-lc-poslink .od-button.od-button-secondary {
box-sizing: border-box;
display: inline-flex;
align-items: center;
justify-content: center;
margin: 0;
padding: 0 1rem;
min-height: 2.625rem;
font-size: 1rem;
font-weight: 600;
line-height: 1;
text-align: center;
text-decoration: none;
white-space: nowrap;
border: 1px solid #1e5a99;
border-radius: 0.25rem;
background-color: transparent;
color: #1e5a99;
cursor: pointer;
transition: color 0.25s ease-in-out, background-color 0.25s ease-in-out, border-color 0.25s ease-in-out;
}
.pos-lc-poslink .od-button.od-button-secondary:hover,
.pos-lc-poslink .od-button.od-button-secondary:focus {
background-color: #f5f8fc;
border-color: #1e5a99;
color: #1e5a99;
}
.pos-lc-poslink .od-button.od-button-secondary.od-button-full-width {
display: flex;
width: 100%;
}
.pos-lc-alert {
border-radius: 8px;
padding: 12px 14px;
margin-bottom: 14px;
font-size: 0.92rem;
}
.pos-lc-alert--error {
color: #842029;
background: #f8d7da;
border: 1px solid #f5c2c7;
}
.pos-lc-alert--warn {
color: #664d03;
background: #fff3cd;
border: 1px solid #ffecb5;
}
.pos-lc-modal-chrome {
flex-shrink: 0;
padding: 14px 48px 10px 16px;
border-bottom: 1px solid $pos-lc-border;
}
.pos-lc-modal-chrome__title {
margin: 0;
font-size: 1.05rem;
font-weight: 700;
line-height: 1.3;
color: #111;
}
.pos-lc-modal-content--error {
border-top: 4px solid #b30000;
}
.pos-lc-modal-content--success {
border-top: 4px solid #1e7e34;
}
.pos-lc-error-card {
text-align: center;
padding: 8px 4px 4px;
}
.pos-lc-error-card__icon {
display: block;
width: 72px;
height: 72px;
margin: 0 auto 16px;
}
.pos-lc-error-card__title {
font-size: 1.15rem;
font-weight: 700;
margin: 0 0 12px;
color: #111;
}
.pos-lc-error-card__body {
font-size: 0.92rem;
line-height: 1.5;
color: #333;
margin: 0 0 20px;
}
// Beat business_select .modal p { line-height: 1.2em } so
in body copy is visibly spaced
.business-select-flow.pos-lc-poslink .modal .pos-lc-error-card__body {
line-height: 1.5;
br {
display: block;
margin-bottom: 0.65em;
}
}
.pos-lc-success-card {
text-align: center;
padding: 8px 4px 4px;
}
.pos-lc-success-card__title {
font-size: 1.15rem;
font-weight: 700;
margin: 0 0 12px;
color: #111;
}
.pos-lc-success-card__body {
font-size: 0.92rem;
line-height: 1.5;
color: #333;
margin: 0;
}
.pos-lc-success-card__actions {
display: flex;
flex-wrap: wrap;
gap: 12px;
justify-content: center;
margin: 10rem 0 8px;
.od-button {
flex: 1 1 calc(50% - 6px);
min-width: 0;
max-width: calc(50% - 6px);
}
&--single {
justify-content: center;
.od-button {
flex: 0 1 auto;
min-width: 180px;
max-width: 240px;
}
}
}
@media (max-width: 360px) {
.pos-lc-success-card__actions .od-button {
flex: 1 1 100%;
max-width: 100%;
}
.pos-lc-success-card__actions--single .od-button {
flex: 1 1 100%;
max-width: 100%;
}
}
.pos-lc-success-card .pos-lc-help-footer {
margin-top: 20px;
}
.pos-lc-help-footer {
text-align: center;
font-size: 0.85rem;
margin: 16px 0 0;
color: #555;
}
.pos-lc-help-footer a {
color: #1e5a99;
text-decoration: none;
}
.pos-lc-help-footer .pos-lc-help-chat {
cursor: pointer;
&:focus-visible {
outline: 2px solid $pos-lc-teal;
outline-offset: 2px;
}
}
.pos-lc-help-footer .pos-lc-help-chat-unavailable {
color: #888;
}
.pos-lc-required-note {
font-size: 0.85rem;
margin: 0 0 12px;
color: #555;
}
/* Submit error banner (ODP-5893): top-of-flow alert above account details. */
.pos-lc-banner {
display: flex;
align-items: flex-start;
gap: 12px;
background: #fdecee;
border: 1px solid #f5c2c7;
border-left: 4px solid #c0202a;
border-radius: 8px;
padding: 14px 16px;
margin: 0 0 16px;
&.no-display {
display: none;
}
}
.pos-lc-banner__icon {
flex-shrink: 0;
width: 22px;
height: 22px;
margin-top: 1px;
border-radius: 50%;
background: #c0202a;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.85rem;
font-weight: 700;
line-height: 1;
&::before {
content: '!';
}
}
.pos-lc-banner__content {
flex: 1;
min-width: 0;
}
.pos-lc-banner__title {
margin: 0 0 4px;
font-size: 1rem;
font-weight: 700;
line-height: 1.3;
color: #b3151f;
&.no-display {
display: none;
}
}
.pos-lc-banner__body {
margin: 0;
font-size: 0.9rem;
line-height: 1.5;
color: #842029;
&.no-display {
display: none;
}
}
.pos-lc-banner__actions {
margin: 8px 0 0;
font-size: 0.9rem;
font-weight: 700;
a {
color: #1e5a99;
text-decoration: none;
}
.pos-lc-banner__action-sep {
color: #842029;
font-weight: 400;
margin: 0 4px;
}
.pos-lc-help-chat {
cursor: pointer;
&:focus-visible {
outline: 2px solid $pos-lc-teal;
outline-offset: 2px;
}
}
&.no-display {
display: none;
}
}
.pos-lc-submit-success {
font-size: 0.875rem;
line-height: 16px;
margin: 0 0 16px;
padding: 10px 12px;
border-radius: 4px;
color: #155724;
background: #d4edda;
border: 1px solid #c3e6cb;
}
.pos-lc-submit-success.no-display {
display: none;
}
.pos-lc-flow.pos-lc-submitting #posLcSubmitBtn {
opacity: 0.7;
}
.pos-lc-flow .password-criteria-error {
color: #b30000;
font-size: 0.85rem;
// business_select's _create_new_account.scss has a bare .password-criteria-error rule with
// font-weight: 300 - same class name, reused markup. Our selector has higher specificity so
// it wins for color/font-size/margin, but we never declared font-weight, so that one property
// fell through to their rule, making only this error text render thinner than the others.
font-weight: 400;
margin-bottom: 8px;
}
.pos-lc-flow .show-password-strength .password-criteria {
list-style: none;
margin: 0 0 12px;
padding: 0;
font-size: 0.85rem;
.strength {
width: 10px;
height: 10px;
border-radius: 50%;
border: 1px solid #999;
display: inline-block;
background: #fff;
margin: 0 10px 0 0;
}
li.valid {
color: #333;
.strength {
background: #080;
border-color: #080;
}
}
.pwd_one_accepted_characters {
border-top: 1px solid #f1f1f1;
margin-top: 0.5rem;
padding-top: 0.5rem;
}
}
.pos-lc-flow .billing-info-section {
list-style: none;
margin: 0;
padding: 0;
}
.pos-lc-form-section {
margin-bottom: 20px;
}
.pos-lc-form-section__heading {
display: flex;
align-items: center;
gap: 8px;
margin: 0 0 12px;
}
.pos-lc-form-section__icon {
flex-shrink: 0;
width: 24px;
height: 24px;
img {
width: 24px;
height: 24px;
display: block;
}
}
/* Account card heading shares the section-heading layout; drop the title's own bottom margin so the
gap above the rows comes from the heading wrapper only. */
.pos-lc-card .pos-lc-form-section__heading {
margin-bottom: 12px;
}
.pos-lc-card .pos-lc-form-section__heading .pos-lc-card__title {
margin: 0;
}
.pos-lc-form-section__title {
font-size: 1rem;
font-weight: 700;
margin: 0;
color: #111;
}
.pos-lc-form-section__lead {
font-size: 0.875rem;
line-height: 1.4;
color: #444;
margin: 0 0 12px;
}
/* Billing uses same white surface as security (no dark panel). */
.pos-lc-billing-section {
margin-bottom: 20px;
}
.pos-lc-field-list {
list-style: none;
margin: 0;
padding: 0;
}
/* 16px vertical spacing; in-field labels only (override business_select external labels). */
.business-select-flow.pos-lc-poslink .pos-lc-profile-form {
.pos-lc-field-list > li {
margin: 0 0 16px;
}
.pos-lc-field-list > li:last-child {
margin-bottom: 0;
}
.pos-lc-field-row {
display: flex;
flex-wrap: wrap;
align-items: flex-start;
gap: 12px;
margin-bottom: 16px;
padding: 0;
list-style: none;
}
.pos-lc-field-row .pos-lc-float-field {
margin-bottom: 0;
width: 100%;
}
.pos-lc-field-row__item--zip {
flex: 0 0 38%;
max-width: 40%;
}
.pos-lc-field-row__item--city {
flex: 1 1 0;
min-width: 0;
}
.pos-lc-field-list > li.zip-lookup-city-state-select {
width: 100%;
}
.pos-lc-float-field {
position: relative;
margin: 0;
label.form-control-label {
position: absolute !important;
top: 50% !important;
left: 12px !important;
right: 12px !important;
margin: 0 !important;
padding: 0 !important;
transform: translateY(-50%) !important;
font-size: 14px !important;
font-weight: 400 !important;
line-height: 16px !important;
color: #767676 !important;
background: transparent !important;
border: 0 !important;
z-index: 1;
pointer-events: none;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
> input.float-label,
.select-wrapper select.float-label {
display: block;
width: 100%;
box-sizing: border-box;
min-height: 48px;
margin: 0 !important;
padding: 16px 12px 6px !important;
border: 1px solid $pos-lc-border !important;
border-radius: 4px !important;
background-color: #fff !important;
color: #111 !important;
font-size: 14px !important;
line-height: 16px !important;
appearance: none;
-webkit-appearance: none;
}
> input.float-label:focus,
> input.float-label:not(:placeholder-shown),
> input.float-label.placeholder-up,
.select-wrapper select.float-label:focus,
.select-wrapper select.float-label:valid,
.select-wrapper select.float-label.placeholder-up {
padding-top: 22px !important;
padding-bottom: 6px !important;
}
> input.float-label:focus ~ label,
> input.float-label:not(:placeholder-shown) ~ label,
> input.float-label.placeholder-up ~ label,
.select-wrapper select.float-label:focus ~ label,
.select-wrapper select.float-label:valid ~ label,
.select-wrapper select.float-label.placeholder-up ~ label {
top: 8px !important;
transform: none !important;
font-size: 12px !important;
}
input[type='password'],
input[type='text'].tealeaf_secure_field {
padding-right: 4.5rem !important;
&::-ms-reveal,
&::-ms-clear {
display: none;
}
}
/* Error state: red border when input/select has validation error (touched-state, matches .has-danger pattern used by password/confirm/email JS) */
&.has-danger > input.float-label,
&.has-danger .select-wrapper select.float-label {
border-color: #b30000 !important;
}
}
.pos-lc-billing-state .select-wrapper {
position: relative;
display: block;
width: 100%;
}
.pos-lc-billing-state select.float-label {
padding-right: 36px !important;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23666' d='M1.4 0 6 4.6 10.6 0 12 1.4l-6 6-6-6z'/%3E%3C/svg%3E") !important;
background-repeat: no-repeat !important;
background-position: right 12px center !important;
background-size: 12px 8px !important;
}
/* Hide default "Select a state" option text; show only the in-field label. */
.pos-lc-billing-state select.float-label:invalid {
color: transparent !important;
}
.pos-lc-billing-state select.float-label:invalid option {
color: #111;
}
.pos-lc-billing-state select.float-label:valid {
color: #111 !important;
}
}
.pos-lc-toggle-pw {
position: absolute;
right: 8px;
top: 50%;
transform: translateY(-50%);
border: 0;
background: transparent;
background-image: none;
cursor: pointer;
min-width: 44px;
min-height: 28px;
padding: 4px 6px;
font-size: 0.75rem;
font-weight: 600;
line-height: 1.2;
color: $pos-lc-teal;
text-decoration: underline;
&::before,
&::after {
content: none;
display: none;
background: none;
}
&:hover {
color: $pos-lc-teal-dark;
}
&:focus-visible {
outline: 2px solid $pos-lc-teal;
outline-offset: 2px;
border-radius: 2px;
}
}
.pos-lc-toggle-pw__label {
display: inline-block;
pointer-events: none;
}
.pos-lc-field-error {
color: #b30000;
font-size: 0.85rem;
margin-bottom: 8px;
}
.pos-lc-field-error.no-display {
display: none;
}
// For other fields the error is a separate sibling