$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
  • and gets its 16px gap for free from // .pos-lc-field-list > li's margin-bottom. Zip/City nest the error inside their own flex-row // column instead (so it stays under the right column, not the full row width), which skips // that margin - replicate the same 16px gap explicitly here. Scoped to the zip/city columns // specifically - unscoped, this would also match every other field's .pos-lc-float-field + // .pos-lc-field-error pair (email/confirm/address1), which don't need or want this override. .pos-lc-field-row__item--zip .pos-lc-float-field + .pos-lc-field-error, .pos-lc-field-row__item--city .pos-lc-float-field + .pos-lc-field-error { margin-top: 16px; } .pos-lc-debug--below { max-width: 720px; margin: 16px auto; padding: 0 16px 24px; font-size: 0.85rem; color: #333; } .pos-lc-debug-table { width: 100%; border-collapse: collapse; font-size: 12px; } .pos-lc-debug-table th, .pos-lc-debug-table td { border: 1px solid #ccc; padding: 6px 8px; text-align: left; } @media only screen and (max-width: 480px) { .business-select-flow.pos-lc-poslink .modal { max-height: calc(100dvh - 16px); height: auto; } .business-select-flow.pos-lc-poslink .modal-content { height: auto; overflow: hidden; margin-bottom: 0; } .business-select-flow.pos-lc-poslink .modal-content-main { overflow-y: auto; } }