Sabra Dental

RETURNS ACCESS

HeaderTfalseGuest Access LoginContinueJfalseContinue as GuestLoginTitleTfalse0Login PageLoginTitleGuestTfalse0Guest Access Log InLoginTitleARTfalse0Authorized Returns Log InLoginHeaderTfalse0Login HeaderLoginHeaderGuestTfalse0Sabra DentalLoginHeaderARTfalse0Authorized Returns HeaderLoginIDSfalse0Always RequiredLogin IDLoginIDGuestSfalse0Always RequiredGuest Access Login IDLoginIDARSfalse0Always RequiredAuthorized Returns Login IDPasswordSfalse0Always RequiredPasswordForgotPasswordTfalse0ChangePasswordTfalse0RegisterTfalse0ChangePasswordTitleTfalse0Change Password TitleOldPasswordSfalse0Always RequiredOld PasswordNewPasswordSfalse0Always RequiredNew PasswordConfirmPasswordSfalse0Always RequiredConfirm PasswordExpireMessageTfalse0Password ExpireForgotPasswordTitleTfalse0Forgot Password TitleForgotMessageTfalse0Your Password is sent by E-Mail to youCompanyNameSfalse0Company NameCompanyNameGuestSfalse0RETURNS ACCESSCompanyNameARSfalse0Authorized Returns Company NameB2CDirectLoginCfalse0B2CSelfInviteCfalse0B2CRemoveLinkCfalse0ShippingHeaderHeaderTfalse0Intelligent Reverse LogisticsHeaderAdminstrationLinkSectionAfalse0AdministrationHeaderAdminTransactionsLinkSectionAfalse0TransactionsHeaderAdminVoidShipmentsLinkZfalse0Void ShipmentsHeaderAdminLabelRetrievalZfalse0Label RetrievalHeaderAdminPackageHistoryLinkZfalse0Package HistoryHeaderAdminManageLinkSectionAfalse0ManageHeaderAdminUsersLinkZfalse0UsersHeaderAdminAddressesLinkZfalse0AddressesHeaderAdminAccountsLinkZfalse0AccountsHeaderAdminAnnouncementsLinkZfalse0AnnouncementHeaderAdminImportExportLinkSectionAfalse0Import/ExportHeaderAdminImportLinkZfalse0ImportHeaderAdminExportLinkZfalse0ExportHeaderAdminExportConfigLinkZfalse0Export ConfigHeaderAdminShipSettingsSectionLinkAfalse0Ship SettingsHeaderAdminCompanyKeysLinkZfalse0Company KeysHeaderAdminReferencesLinkZfalse0ReferencesHeaderAdminProductsLinkZfalse0ProductsHeaderAdminWeightsLinkZfalse0WeightsHeaderAdminThermalPrintSetupLinkZfalse0Thermal Printer SetupHeaderHistoryLinkZfalse0HistoryHeaderShippingZfalse0ShippingUserMenuChangePasswordLinkZfalse0Change PasswordUserMenuEnvironmentLinkZfalse0EnvironmentUserMenuLogOffLinkZfalse0Log OffUserMenuDiagnosticsLinkZfalse0DiagnosticsUserMenuCompanyListLinkZfalse0Company ListSupportMenuContactLinkZfalse0Contact PSI SupportHeaderAdminBranchesLinkZfalse0BranchesHeaderAdminOrdersLinkSectionZfalse0OrdersHeaderAdminOrdersLinkZfalse0OrdersHeaderAdminOrderReasonsLInkZfalse0ReasonsFooterCopyrightAfalse0Copyright © 2011 - 2025, United Parcel Service of America, Inc. All rights reserved.FooterWebSiteTermsLinkZfalse0Web Site Terms of UseFooterPolicyLinkZfalse0Privacy PolicyFooterCookieDisclosureLinkZfalse0Cookie DisclosureFooterTermsConditionsLinkZfalse0Service Terms and ConditionsSFTitleTfalse0Ship FromShipmentFormHeaderTfalse0Shipment InformationSFAddressBookKfalse0SFNameSfalse0RequiredCompany NameSFAttnSfalse0AttentionSFAddr1Sfalse0RequiredAddress Line 1SFAddr2Sfalse0Address Line 2SFAddr3Sfalse0SFCitySfalse0RequiredCitySFStateXfalse0RequiredStateSFZipSfalse0RequiredPostal CodeSFPhoneSfalse0RequiredPhone NumberSFEmailSfalse0RequiredE-Mail AddressSFQVLabelNotCfalse0SFQVInTranNotCfalse0SFQVExcNotCfalse0SFQVDelNotCfalse0SFCust01Xfalse0SFCust02Xfalse0SFCust03Xfalse0SFCust04Xfalse0SFCust05Xfalse0SFCust06Xfalse0SFCust07Xfalse0SFCust08Xfalse0SFCust09Xfalse0SFCust10Xfalse0SFManualValidateXfalse0STTitleTfalse0Ship ToSTAddrBookKfalse0928779370STBranchKfalse0STNameSfalse0RequiredCompany NameSTAttnSfalse0AttentionSTAddr1Sfalse0RequiredAddress Line 1STAddr2Sfalse0Address Line 2STAddr3Sfalse0STCitySfalse0RequiredCitySTStateXfalse0RequiredStateSTZipSfalse0RequiredPostal CodeSTPhoneSfalse0STEmailSfalse0STAddEmail1Sfalse0STAddEmail2Sfalse0STAddEmail3Sfalse0STQVLabelNotCfalse0STQVInTranNotCfalse0STQVExcNotCfalse0STQVDelNotCfalse0STResidentialCfalse0STCust01Xfalse0STCust02Xfalse0STCust03Xfalse0STCust04Xfalse0STCust05Xfalse0STCust06Xfalse0STCust07Xfalse0STCust08Xfalse0STCust09Xfalse0STCust10Xfalse0STManualValidateXfalse0STLocationIDSfalse0ShipTitleTfalse0ShipmentDescriptionXfalse0Dental Items for RepairCarbonNeutralCfalse0SatDeliveryCfalse0AdultSignatureCfalse0PrePaidAccountKfalse0ThirdPartyAccountKfalse0AdvancedPaymentOptionsTfalse0DutyVATPrePaidAccountKfalse0DutyVATThirdPartyAccountKfalse0SplitDutyVATCfalse0AreGoodsNotInFreeCirculationCfalse0InvoiceCfalse0International Special CommoditiesQfalse0UploadDocumentsCfalse0UseDifferentSoldToCfalse0DocOnlyCfalse0MonValueMfalse0PackTitleTfalse0Package(s)PackageHeaderTfalse0PackageNumPkgsNfalse01|20|Number of Packages must be between 1 and 20|WeightNfalse0LengthNfalse0HeightNfalse0WidthNfalse0InsuredValMfalse0Proactive ResponseCfalse0DryIceCfalse0DryIceWeightNfalse0DataTitleTfalse0Check01Cfalse0Check02Cfalse0CommentSfalse0Ref01Rfalse0Reference 1Ref02Rfalse0Ref03Rfalse0Ref04Rfalse0Ref05Rfalse0Ref06Rfalse0Ref07Rfalse0Ref08Rfalse0Ref09Rfalse0Ref10Rfalse0PackageAddBtnJfalse0AddPackageRemoveBtnJfalse0RemovePackageSelectTxtAfalse0PackagePaymentMethodPfalse0RequiredBill pickup charges to:MYUPSCCHolderNameSfalse0RequiredCredit Card Holder NameCardNumberSfalse0RequiredCredit Card NumberSecurityCodeSfalse0RequiredSecurity CodeExpirationMonthSfalse0RequiredExpiration MonthExpirationYearSfalse0RequiredExpiration YearCCAddressLine1Sfalse0RequiredAddress Line 1CCAddressLine2Sfalse0Address Line 2CCAddressLine3Sfalse0Address Line 3CCCitySfalse0RequiredCityCCStateXfalse0RequiredStateCCPostalcodeSfalse0RequiredPostal codePackageIdSfalse0CostCenterSfalse0OrderNumberKfalse0OrderItemSkuKfalse0ShipProcessButtonTfalse0Process ShipmentShipClearButtonTfalse0ClearShipHistoryButtonTfalse0Package HistoryShipRateButtonTfalse0RateShipBackButtonTfalse0BackShipAddItemsButtonTfalse0Add ItemsCancelButtonTfalse0CancelPickupLinkTfalse0Create PickupCreatePickupCfalse0PickupTitleTfalse0Pickup InformationPickupDateHfalse0Pickup Date2026-06-12PickupEarliestTimeIfalse0Earliest Pickup Time15:11PickupLatestTimeIfalse0Latest Pickup Time15:11PickupContactNameSfalse0Contact NamePickupPhoneXfalse0Phone NumberPickupRoomXfalse0Room NumberPickupFloorSfalse0Floor NumberPickupInstructionsSfalse0InstructionsPickupPointXfalse0PickupTomorrowCfalse0PurchaseOrderSfalse0RequiredPurchase Order NumberCommentsSfalse0CommentsCommoditiesSfalse0CommoditiesAutoFinishCfalse0InvoiceTitleTfalse0Commercial InvoiceAdditionalDocumentCfalse0SignatureWfalse0ShowInvoiceCfalse0Show Invoice (Override Paperless)ProductTitleTfalse0Invoice ItemsProductPartNumberKfalse0RequiredPart NumberProductDescriptionXfalse0RequiredDescriptionProductDescSecondaryXfalse0Description SecondaryProductDescOtherXfalse0Description OtherProductHarmCodeXfalse0Harmonized CodeProductPriceMfalse0RequiredPriceProductCountNfalse0RequiredCountProductCustom01Xfalse0ProductCustom02Xfalse0ProductCustom03Xfalse0ProductCustom04Xfalse0ProductCustom05Xfalse0ProductCustom06Xfalse0ProductCustom07Xfalse0ProductCustom08Xfalse0ProductCustom09Xfalse0ProductCustom10Xfalse0InvoiceHeaderTfalse0Commercial InvoiceInvoiceSubHeaderAfalse0Create International InvoiceInvoiceDetailsTxtAfalse0Invoice DetailsInvoiceLineHeaderTxtAfalse0LineInvoiceTotalHeaderTxtAfalse0TotalInvoiceItemAddBtnJfalse0AddInvoiceItemEditBtnJfalse0EditInvoiceItemDeleteBtnJfalse0DeleteInvoiceItemFinishBtnJfalse0FinishInvoiceItemSearchBtnJfalse0SearchInvoiceItemSaveBtnJfalse0SaveInvoiceItemCancelBtnJfalse0CancelInvoiceItemClearBtnJfalse0ClearInvoiceItemFilterBtnJfalse0FilterInvoiceProductSelectBtnJfalse0SelectInvoiceProductSearchTitleJfalse0Search Results (Max of 50)InvoiceProductSearchRequiredInfoJfalse0The id field is required.DocumentHeaderTfalse0DocumentsLoginCSSGuestSfalse0CSS Guest AccessLoginCSSARSfalse0CSS Authorized ReturnsDocumentINoPackageFromEmailAfalse0This link has expired. Please contact the company that sent you the return email.DocumentNoPackageNotFromEmailAfalse0There are no labels to displayDocumentFoldHereAfalse0FOLD HEREPrintPageSuccessHeaderAfalse0Shipment successfulPrintPageDeliveryMethod1MInstructionsAfalse0UPS will print and mail your return label.PrintPageDeliveryMethod11-15InstructionsAAfalse0Once UPS arrives to collect the return, the UPS driver will package the item.PrintPageDeliveryMethod16-20InstructionsAAfalse0Once UPS arrives to collect the return, the UPS driver will package the item.PrintPageDeliveryMethod4Eor6AAfalse0Return label has been e-mailed.PrintPageDefaultSchedulePickupTextAfalse0Click here to Schedule a pickupARPrintPageNoLabelsAfalse0No Labels AvailableDocumentLabelInstructionsHeaderTfalse0InstructionsDocumentLabelDefaultInstructionsYfalse0UPS Electronic Return Label: View/Print LabelDocumentLabelFlexibleAccessInstructionsYfalse0UPS Electronic Return Label: View/Print LabelTender your package to either UPS or the United States Postal Service. UPS locations include The UPS Store®, UPS Drop Box, UPS Customer Centers, authorized retail outlets and UPS drivers. Find your closest UPS location at {UPSDropOffLocator}DocumentLabelFlexibleAccessPostalLocationsEfalse0Postal LocationsPostal Service locations include your own mailbox, your local Post Office™ or postal collection boxes. You may also schedule a free postal carrier pick up at: {USPSCarrierPickup}DocumentLabelMailInnovationsInstructionsYfalse0MI Electronic Return Label: View/Print LabelPackages can be given to your mail carrier, left in your mail box or dropped off at your local U.S. Post Office or blue collection box. You can also schedule a U.S. Postal Service pick-up of the Return package at {UPSPWebPage}. For more information call UPS Mail Innovations® at 1-800-500-2224. Your return package will be viewable on ups.com within 24-48 hours.DocumentLabelDirectToMobileInstuctionsYfalse0UPS® Direct to MobileUPSWebPageZfalse0www.ups.com/content/us/en/index.jsxhttps://www.ups.com/content/us/en/index.jsxUPSDropOffLocatorZfalse0Drop Off Locatorhttp://www.ups.com/dropoff?autosubmit=1&lang=engUSPSCarrierPickupZfalse0https://carrierpickup.usps.comhttps://carrierpickup.usps.comUSPSWebPageZfalse0www.usps.comwww.usps.comDocumentInvoiceHeaderTfalse0InvoiceDocumentInvoiceFromSectionHeaderAfalse0FromDocumentInvoiceFromContactNameAfalse0Contact NameDocumentInvoiceFromCompanyNameAfalse0Company NameDocumentInvoiceFromWaybillNumberAfalse0Waybill NumberDocumentInvoiceFromAddressAfalse0AddressDocumentInvoiceFromCityAfalse0City/State-ProvinceDocumentInvoiceFromdateAfalse0DateDocumentInvoiceFromPostalCodeAfalse0Postal CodeDocumentInvoiceFromInvoiceNumberAfalse0Invoice NumberDocumentInvoiceFromPhoneAfalse0PhoneDocumentInvoiceFromPurchaseOrderNumberAfalse0Purchase Order NumberDocumentInvoiceFromFaxAfalse0FaxDocumentInvoiceFromTermsofSaleAfalse0Terms of sale (Incoterm)DocumentInvoiceFromEmailAfalse0E-Mail AddressDocumentInvoiceFromReasonForExportAfalse0Reason For ExportDocumentInvoiceshipToAfalse0Ship ToDocumentInvoicesoldToAfalse0Sold ToDocumentInvoicesUnitAfalse0UnitsDocumentInvoicesUnitofMeasureAfalse0Unit of MeasurementDocumentInvoiceDescriptionOfGoodsAfalse0Description of GoodsDocumentInvoicePartNumberAfalse0Part NumberDocumentInvoiceCommodityCodeAfalse0Commodity CodeDocumentInvoiceCOAfalse0C/ODocumentInvoiceValueAfalse0ValueDocumentInvoiceTotalAfalse0TotalDocumentInvoiceCurrencyAfalse0CurrencyDocumentInvoiceAddCommentsAfalse0Additional CommentsDocumentInvoiceLineTotalAfalse0Invoice Line TotalDocumentInvoiceDiscountAfalse0Discount/RebateDocumentInvoiceInvSubTotalAfalse0Invoice Sub-TotalDocumentInvoiceFreightAfalse0FreightDocumentInvoiceInsuranceAfalse0InsuranceDocumentInvoiceOtherAfalse0OtherDocumentInvoiceTotalInvoiceAmountAfalse0Total Invoice AmountDocumentInvoiceDecstatementAfalse0Declaration StatementDocumentInvoiceShipperSignAfalse0Shipper's Signature/ TitleDocumentInvoicePackCountAfalse0Package CountDocumentInvoiceTotalWeightAfalse0Total WeightProductUnitDfalse0RequiredUnit of MeasureEAProductOriginCountryDfalse0RequiredOrigin CountryUSTermsOfShipmentDfalse0RequiredTerms of ShipmentCurrencyCodeDfalse0RequiredCurrency CodeReasonForExportDfalse0RequiredReasonForExportOrderItemDfalse0StaticCCCountryDfalse0RequiredCountry or TerritoryUSCCCardTypeDfalse0RequiredCredit Card Type00DropOffTypeIdDfalse00DryIcePurposeDfalse0DryIceUOMDfalse0International LanguageDfalse0InsuredCurDfalse0MeasureUnitDfalse0INWeightUnitDfalse01LPackTypeDfalse01CDutyVATPayInfoDfalse0PayInfoDfalse0DelMethodDfalse0Label Delivery Method5PServiceDfalse0ServiceGNDServiceIntlDfalse0UPS Service InternationalServiceCodeDfalse0UPS Service1GRSTypeDfalse02RDirectionDfalse00LabelFormatDfalse01GSTCountryDfalse0USSFCountryDfalse0US3687SABRAB5BB29A0EAAA48D89843100SABRA DENTAL PRODUCTS// Starter Custom Shipping Portal - Mobile Friendly // With Pkg Summary + Comment Row + CSP Box Size (NBNL) - 04.09.2026 // ----- Detect login type (StandardShip vs Guest) ----- let vLoginType_Text = ""; (function initLoginType() { const form = document.getElementById("shipForm"); if (!form) return; const action = form.getAttribute("action") || ""; const parts = action.split("/"); vLoginType_Text = parts[3] || ""; })(); // ----- Feature toggles ----- const PACKAGE_SUMMARY_ENABLED = true; // true = show pkg summary const CUSTOM_BRANDING_ENABLED = false; // true = hide UPS header + show custom logo // CSP toggle (only affects Reference2 -> Reference3 logic) const CSP_ENABLED = false; // false = no CSP behavior at all const LANGUAGE_SELECTOR_ENABLED = false; // true = show language selection option // ----- Reference default select toggles & labels ----- // ONLY enable when the Reference Field is a dropdown const REFERENCE_DEFAULTS_CONFIG = { Reference1: { enabled: true, label: "Please select Ref1" }, Reference2: { enabled: !CSP_ENABLED, // CSP owns it when true label: "Please select", }, Reference3: { enabled: false, label: "Please select" }, Reference4: { enabled: false, label: "Please select" }, Reference5: { enabled: false, label: "Please select" }, }; // ----- Package summary globals ----- const packageSummary = {}; let packageSummaryTableBody = null; let packageSummaryWrapper = null; let pendingRemovedPackageNo = null; // ----- CSP (NBNL) select defaults ----- const REFERENCE2_DEFAULT_LABEL = "Please select box size"; const selectDefaults = [{ id: "Reference2", label: REFERENCE2_DEFAULT_LABEL }]; // Extra bottom row (checks + comments) function updateExtraRowVisibility() { const extraRow = document.querySelector("#shippingLayout > div.row.extra-row"); if (!extraRow) return; const idsToCheck = ["boxCheck01", "boxCheck02", "boxComment"]; const shouldShow = idsToCheck.some((id) => { const el = document.getElementById(id); return el && !el.classList.contains("d-none"); }); if (shouldShow) { extraRow.classList.remove("d-none"); } else { extraRow.classList.add("d-none"); } } function addExtraBottomRow(layout) { if (!layout) return; const row3 = document.getElementById("row3"); const row4 = document.getElementById("row4"); if (!row3 && !row4) return; const extraRow = document.createElement("div"); extraRow.className = "row d-none extra-row"; const extraCol = document.createElement("div"); extraCol.className = "col-12"; extraRow.appendChild(extraCol); function moveCellContent(tr) { if (!tr || !tr.cells || tr.cells.length === 0) return; const cell = tr.cells[0]; while (cell.firstChild) { extraCol.appendChild(cell.firstChild); } } moveCellContent(row3); moveCellContent(row4); if (extraCol.children.length === 0) return; layout.appendChild(extraRow); } // Branding helpers function hideUpsBranding() { const selectors = ["body > div.page-layout > header", "header", ".banner"]; selectors.forEach((sel) => { const el = document.querySelector(sel); if (el) el.classList.add("d-none"); }); } function insertLogos() { const targetElement = document.querySelector(".ColorGroup-YellowGreen"); if (!targetElement) return; // Blue bar container (styled via CSS) const topBar = document.createElement("div"); topBar.className = "custom-top-bar"; targetElement.parentNode.insertBefore(topBar, targetElement); const imgData = [ { src: "/Home/GetImage?id=9db999f2-1c5d-4928-9983-58aea", className: "img1", divClass: "img1Container", }, ]; imgData.forEach((data) => { const wrapper = document.createElement("div"); wrapper.className = data.divClass; if (data.src) { const img = document.createElement("img"); img.src = data.src; if (data.className) img.className = data.className; wrapper.appendChild(img); } targetElement.parentNode.insertBefore(wrapper, targetElement); }); } function initReferenceDefaults() { Object.entries(REFERENCE_DEFAULTS_CONFIG).forEach(([fieldId, config]) => { addSelectReferenceDefaults(fieldId, config); }); } function addSelectReferenceDefaults(fieldId, config) { if (!config?.enabled) return; const select = document.getElementById(fieldId); if (!select || select.tagName !== "SELECT") return; // Track whether a placeholder already existed const hadPlaceholder = !!select.querySelector('option[value=""]'); let opt = select.querySelector('option[value=""]'); if (!opt) { opt = document.createElement("option"); opt.value = ""; opt.text = config.label; opt.hidden = true; select.insertBefore(opt, select.firstChild); } // - UPS already selects the first real option // - We want to show the placeholder ON FIRST LOAD ONLY if (!hadPlaceholder && select.selectedIndex === 1) { select.selectedIndex = 0; } } // Add in addDefaultOption and attachReference2Handler function if CSP is enabled // Add function blocks here function addDefaultOption(selectId, defaultText) { const select = document.getElementById(selectId); if (!select) return; let opt = select.querySelector('option[value=""]'); if (!opt) { opt = document.createElement("option"); opt.value = ""; opt.text = defaultText; opt.hidden = true; // optional but recommended select.insertBefore(opt, select.firstChild); } // Only set default if nothing is selected yet if (select.selectedIndex === -1 || select.value === "") { select.value = ""; } } // Add in attachReference2Handler function if CSP is enabled function attachReference2Handler() { const reference2 = document.getElementById("Reference2"); const reference3 = document.getElementById("Reference3"); // CSP only applies when Reference2 is a dropdown if (!reference2 || !reference3 || reference2.tagName !== "SELECT") return; const sizeMap = { small: "SM", medium: "MD", large: "LG", "extra large": "XL", "extra extra large": "XXL", }; if (reference2 && reference3) { // Reset existing handlers by cloning reference2.replaceWith(reference2.cloneNode(true)); const newReference2 = document.getElementById("Reference2"); newReference2.addEventListener("change", function () { const opt = newReference2.options[newReference2.selectedIndex]; const selectedText = opt ? opt.text.trim().toLowerCase() : ""; const code = sizeMap[selectedText]; // console.log("Box Size Selected Text:", selectedText, "Code:", code || "None"); // Make sure to insert "UPS Solutions" into the Reference 10 field in Admin Panel reference3.value = code ? "CSP" + code + "P282633" : ""; // console.log("DTM Workflow: " + reference3.value); // Change to Label & Packaging dtmBoxNeeded(); // Tell Package Summary to re-read the current package if (typeof updateCurrentPackageSummary === "function") { updateCurrentPackageSummary(); } }); } } const dropOffType = document.getElementById("DropOffTypeId"); function dtmBoxNeeded() { if (dropOffType) { dropOffType.value = "3"; // Label & Packaging dropOffType.dispatchEvent(new Event("change")); // console.log(dropOffType); } } function moveHeaderIntoShippingLayout() { const header = document.querySelector(".Header"); const layout = document.getElementById("shippingLayout"); if (!header || !layout) return; if (header.closest("#shippingLayout")) return; const row = document.createElement("div"); row.className = "row"; const col = document.createElement("div"); col.className = "col-12 col-lg-12 shipping-banner"; const content = document.createElement("div"); content.className = "shipping-banner-content"; const curve = document.createElement("div"); curve.className = "shipping-banner-curve"; const icon = document.createElement("img"); icon.src = "/Home/GetImage?id=1163fba7-de1e-4885-9b30-97804585c542"; icon.alt = ""; icon.className = "shipping-banner-icon"; col.appendChild(icon); const inner = header.querySelector(".float-start"); if (inner) inner.classList.remove("float-start"); // Add class to title if needed let titleDiv = header.querySelector("div"); if (titleDiv) { titleDiv.classList.add("shipping-banner-title"); // Move title out and remove Header wrapper header.removeChild(titleDiv); content.appendChild(titleDiv); } col.appendChild(content); col.appendChild(curve); row.appendChild(col); layout.insertBefore(row, layout.firstChild); } function movePackageSummaryForMobile() { if (!packageSummaryWrapper) return; // Mobile only if (window.matchMedia("(max-width: 991.98px)").matches) { const mastMain = document.querySelector(".MastMain"); if (!mastMain) return; // Prevent duplicate moves if (packageSummaryWrapper.closest(".MastMain")) return; // Insert AFTER the shipping form, BEFORE footer mastMain.appendChild(packageSummaryWrapper); } } function getPackageCountHiddenValue() { const packageCountHidden = document.getElementById("PackageCountHidden"); return packageCountHidden ? packageCountHidden.value : ""; } function updateAddPackageButtonState() { const btn = document.getElementById("AddPackage"); if (!btn) return; const packageCount = Number(getPackageCountHiddenValue()); if (packageCount >= 4) { btn.disabled = true; btn.style.opacity = "0.5"; btn.style.cursor = "not-allowed"; } else { btn.disabled = false; btn.style.opacity = "1"; btn.style.cursor = "pointer"; } } // Main DOMContentLoaded document.addEventListener("DOMContentLoaded", function () { // Branding toggle if (CUSTOM_BRANDING_ENABLED) { hideUpsBranding(); insertLogos(); } // Build responsive layout from legacy table const legacyTable = document.getElementById("mainTable"); if (legacyTable && !document.getElementById("shippingLayout")) { const tbody = legacyTable.tBodies[0]; if (tbody && tbody.rows.length >= 2) { const headerRow = tbody.rows[0]; const dataRow = tbody.rows[1]; const fallbackHeaders = ["Ship From", "Ship To", "Shipment"]; const headerTexts = []; for (let i = 0; i < 3; i++) { const th = headerRow.cells[i]; const txt = th ? th.textContent.trim() : ""; headerTexts.push(txt || fallbackHeaders[i]); } const shipFromTd = dataRow.cells[0]; const shipToTd = dataRow.cells[1]; const shipmentTd = dataRow.cells[2]; const layout = document.createElement("div"); layout.id = "shippingLayout"; layout.className = "container-fluid p-0"; const row = document.createElement("div"); row.className = "row"; [shipFromTd, shipToTd, shipmentTd].forEach(function (td, idx) { if (!td) return; const col = document.createElement("div"); col.className = "col-12 col-lg-4"; const h4 = document.createElement("h4"); h4.className = "text-center mb-3"; h4.textContent = headerTexts[idx] || ""; col.appendChild(h4); while (td.firstChild) { col.appendChild(td.firstChild); } row.appendChild(col); }); layout.appendChild(row); // Comments / checkboxes row addExtraBottomRow(layout); legacyTable.parentNode.insertBefore(layout, legacyTable); // Now that content is moved, decide if extra row should be visible updateExtraRowVisibility(); } } // Bootstrap-like styling enhanceShippingLayout(); // Package dropdown + Add/Remove alignment adjustPackageControls(); updateAddPackageButtonState(); // Package summary setPackageSummaryListeners(); if (PACKAGE_SUMMARY_ENABLED) { initPackageSummary(); movePackageSummaryForMobile(); } // Mast layout tweaks const announcementSection = document.querySelector(".MastLeft"); if (announcementSection) { applyBrowserLayout(); } else { centerForm(); } // Address book icon const img = document.getElementById("SFAddressBookButton"); if (img) { img.src = "https://row.ups.com/lib/customersolutions.uikit/dist/img/icon-search-brown.svg"; } // Disable Enter key on Ship From Address Book input const sfInput = document.getElementById("SFAddressBook"); if (sfInput) { sfInput.addEventListener("keydown", function (e) { if (e.key === "Enter") { e.preventDefault(); this.blur(); // optional, but nice on mobile } }); } // Hide legacy table if (legacyTable) { legacyTable.style.display = "none"; } // Hamburger menu const toggleBtn = document.querySelector(".appbar-toggle"); const appbar = document.querySelector(".appbar"); if (toggleBtn && appbar) { toggleBtn.addEventListener("click", function () { appbar.classList.toggle("appbar-open"); }); } // CSP (NBNL) select defaults + box size handler (CSP only) if (CSP_ENABLED) { selectDefaults.forEach(({ id, label }) => addDefaultOption(id, label)); attachReference2Handler(); } // Reference defaults initReferenceDefaults(); if (vLoginType_Text === "StandardShipGuest") { runGuestLogic(); } /* Adjust form header */ moveHeaderIntoShippingLayout(); // Display Language Selector Options if (!LANGUAGE_SELECTOR_ENABLED) { const header = document.querySelector(".Header"); if (header) header.remove(); } }); //<-- End DOMContentLoaded // Center the form using classes (no inline styles) function centerForm() { const element = document.querySelector(".ColorGroup-YellowGreen"); if (!element) return; // If Bootstrap is on the page, these classes will center the form element.classList.add("d-flex", "justify-content-center"); } // Browser-specific layout (Edge / Chrome) function applyBrowserLayout() { const ua = navigator.userAgent; if (ua.indexOf("Edge") > -1 || ua.indexOf("Edg") > -1) { setEdgeLayout(); } else if (ua.indexOf("Chrome") > -1) { setChromeLayout(); } } function setEdgeLayout() { const left = document.querySelector("body > div.page-layout > main > div.MastLeft"); const main = document.querySelector("body > div.page-layout > main > div.MastMain"); if (!left) return; left.id = "mastleftEdge"; if (vLoginType_Text !== "StandardShip" && main) { main.id = "mastmainEdge"; } } function setChromeLayout() { const left = document.querySelector("body > div.page-layout > main > div.MastLeft"); const main = document.querySelector("body > div.page-layout > main > div.MastMain"); if (!left) return; left.id = "mastleftChrome"; if (vLoginType_Text !== "StandardShip" && main) { main.id = "mastmainChrome"; } } // Guest-only behavior here function runGuestLogic() { // Hide ShipTo section const target = document.querySelector("#shippingLayout > div:nth-child(1) > div:nth-child(2)"); if (!target) return; target.classList.add("d-none"); collapseToTwoColumns(); } function adjustHeaderForGuest() { const headerCol = document.querySelector("#shippingLayout > div:nth-child(1) > div"); if (!headerCol) return; headerCol.classList.remove("col-lg-12"); headerCol.classList.add("col-lg-8"); // Ship From + Shipment } function collapseToTwoColumns() { const layout = document.getElementById("shippingLayout"); if (!layout) return; const row = layout.querySelector(".row"); if (!row) return; const cols = row.children; Array.from(cols).forEach((col) => { if (col.classList.contains("d-none")) return; col.classList.remove("col-lg-4"); col.classList.add("col-lg-6"); }); } // Bootstrap-like control styling function enhanceShippingLayout() { const layout = document.getElementById("shippingLayout"); if (!layout) return; const controls = layout.querySelectorAll('input[type="text"], ' + 'input[type="email"], ' + 'input[type="tel"], ' + 'input[type="number"], ' + "textarea"); controls.forEach(function (el) { if (!el.classList.contains("form-control")) { el.classList.add("form-control"); } }); const selects = layout.querySelectorAll("select"); selects.forEach(function (sel) { if (!sel.classList.contains("form-select")) { sel.classList.add("form-select"); } }); } // Package controls layout function adjustPackageControls() { const addBtn = document.getElementById("AddPackage"); const removeBtn = document.getElementById("RemovePackage"); const select = document.getElementById("SelectedPackage"); if (!addBtn || !select) return; const wrapper = addBtn.closest(".marginTopTenpX") || select.closest(".marginTopTenpX"); if (!wrapper) return; const pkgDiv = select.parentElement; const addDiv = addBtn.parentElement; const removeDiv = removeBtn ? removeBtn.parentElement : null; if (!pkgDiv || !addDiv) return; pkgDiv.classList.remove("float-start", "float-end"); addDiv.classList.remove("float-start", "float-end"); if (removeDiv) { removeDiv.classList.remove("float-start", "float-end"); } wrapper.style.display = "block"; if (wrapper.firstChild !== pkgDiv) { wrapper.insertBefore(pkgDiv, wrapper.firstChild); } let btnRow = document.getElementById("packageButtonRow"); if (!btnRow) { btnRow = document.createElement("div"); btnRow.id = "packageButtonRow"; } btnRow.style.display = "flex"; btnRow.style.justifyContent = "space-between"; btnRow.style.alignItems = "center"; btnRow.style.marginTop = "0.25rem"; addDiv.style.display = "inline-block"; if (removeDiv) { removeDiv.style.display = "inline-block"; } btnRow.appendChild(addDiv); if (removeDiv) { btnRow.appendChild(removeDiv); } if (btnRow.parentNode !== wrapper) { wrapper.appendChild(btnRow); } else if (btnRow.previousSibling !== pkgDiv) { wrapper.insertBefore(btnRow, pkgDiv.nextSibling); } pkgDiv.classList.add("mb-1"); } // Package summary function initPackageSummary() { const mastLeft = document.querySelector(".MastLeft"); if (!mastLeft) return; const announcementModule = mastLeft.querySelector(".FirstColumnModule") || mastLeft.firstElementChild; packageSummaryWrapper = document.createElement("div"); packageSummaryWrapper.id = "packageSummaryWrapper"; if (announcementModule && announcementModule.className) { packageSummaryWrapper.className = announcementModule.className; } packageSummaryWrapper.style.marginTop = "1.5rem"; const inner = document.createElement("div"); inner.style.padding = "0.75rem 1rem"; const title = document.createElement("h4"); title.textContent = "Package Summary"; title.style.margin = "0 0 0.5rem 0"; inner.appendChild(title); const table = document.createElement("table"); table.id = "packageSummaryTable"; table.className = "table table-sm table-bordered"; const thead = document.createElement("thead"); const headRow = document.createElement("tr"); ["Pkg #", "Weight", "Reference 1", "Reference 2"].forEach(function (label) { const th = document.createElement("th"); th.textContent = label; headRow.appendChild(th); }); thead.appendChild(headRow); table.appendChild(thead); const tbody = document.createElement("tbody"); table.appendChild(tbody); packageSummaryTableBody = tbody; inner.appendChild(table); packageSummaryWrapper.appendChild(inner); if (announcementModule && announcementModule.nextSibling) { mastLeft.insertBefore(packageSummaryWrapper, announcementModule.nextSibling); } else { mastLeft.appendChild(packageSummaryWrapper); } packageSummaryWrapper.style.display = "none"; setRemovePackageButton(); } async function updateWeightFromReference1() { const weightEl = document.getElementById("Weight"); const ref1El = document.getElementById("Reference1"); if (!weightEl || !ref1El) return; // Only do lookup when Reference1 is a dropdown if (ref1El.tagName !== "SELECT") return; const idx = ref1El.selectedIndex; if (idx <= 0) { weightEl.value = ""; return; } const opt = ref1El.options[idx]; const ref1Text = opt ? opt.text.trim() : ""; if (!ref1Text) { weightEl.value = ""; return; } const data01 = await referenceLookup(ref1Text); weightEl.value = data01 || ""; } //Lookup and return Data01 value for Reference dropdown selection async function referenceLookup(searchValue) { const url = `/Api/Reference/Search?configId=10910&orderBy=UniqueCode&direction=ASC&pageNumber=1&pageSize=100&searchValue=`; try { const response = await fetch(url); // Try reading text, then safely parse const text = await response.text(); let data; try { data = JSON.parse(text); } catch (parseError) { console.warn("Response is not valid JSON. Skipping."); return ""; } const items = data?.DataObject?.ResultList || []; console.log("All rows:", items); const match = items.find((item) => (item.Description || "").trim().toLowerCase() === searchValue.trim().toLowerCase()); console.log("Search value:", searchValue); console.log("Matched row:", match); return match ? match.Data01 || "" : ""; } catch (fetchError) { console.error("Fetch failed:", fetchError); return ""; } } function setPackageSummaryListeners() { const weight = document.getElementById("Weight"); const ref1 = document.getElementById("Reference1"); const ref2 = document.getElementById("Reference2"); const pkgSelect = document.getElementById("SelectedPackage"); if (weight) { weight.removeEventListener("change", handlePackageInputChange); weight.addEventListener("change", handlePackageInputChange); } if (ref1) { ref1.removeEventListener("change", handlePackageInputChange); ref1.addEventListener("change", handlePackageInputChange); } if (ref2) { ref2.removeEventListener("change", handlePackageInputChange); ref2.addEventListener("change", handlePackageInputChange); } if (pkgSelect) { pkgSelect.removeEventListener("change", handlePackageInputChange); pkgSelect.addEventListener("change", handlePackageInputChange); } } function setRemovePackageButton() { const removeBtn = document.getElementById("RemovePackage"); if (!removeBtn) return; removeBtn.removeEventListener("click", handleRemovePackageClick); removeBtn.addEventListener("click", handleRemovePackageClick); } function handleRemovePackageClick() { const pkgSelect = document.getElementById("SelectedPackage"); if (!pkgSelect) { pendingRemovedPackageNo = null; return; } pendingRemovedPackageNo = pkgSelect.value || null; } async function handlePackageInputChange() { await updateWeightFromReference1(); if (PACKAGE_SUMMARY_ENABLED) { updateCurrentPackageSummary(); } } async function updateCurrentPackageSummary() { if (!PACKAGE_SUMMARY_ENABLED) return; const pkgSelect = document.getElementById("SelectedPackage"); const pkgNo = pkgSelect ? pkgSelect.value || "1" : "1"; const weightEl = document.getElementById("Weight"); const ref1El = document.getElementById("Reference1"); const ref2El = document.getElementById("Reference2"); let weight = weightEl ? weightEl.value.trim() : ""; let ref1 = ""; if (ref1El) { if (ref1El.tagName === "SELECT") { const idx = ref1El.selectedIndex; // Treat index 0 as no selection if (idx > 0) { const opt = ref1El.options[idx]; ref1 = opt ? opt.text.trim() : ""; } } else { ref1 = ref1El.value ? ref1El.value.trim() : ""; } } let ref2 = ""; if (ref2El) { if (ref2El.tagName === "SELECT") { const idx = ref2El.selectedIndex; // Treat index 0 as no selection if (idx > 0) { const opt = ref2El.options[idx]; ref2 = opt ? opt.text.trim() : ""; } } else { ref2 = ref2El.value ? ref2El.value.trim() : ""; } } const anyValue = Boolean(weight || ref1 || ref2); if (anyValue) { packageSummary[pkgNo] = { weight: weight, ref1: ref1, ref2: ref2, }; } else { delete packageSummary[pkgNo]; } renderPackageSummaryTable(); } function renderPackageSummaryTable() { if (!packageSummaryTableBody || !packageSummaryWrapper) return; while (packageSummaryTableBody.firstChild) { packageSummaryTableBody.removeChild(packageSummaryTableBody.firstChild); } const pkgNos = Object.keys(packageSummary) .map(Number) .sort((a, b) => a - b); if (pkgNos.length === 0) { packageSummaryWrapper.style.display = "none"; return; } pkgNos.forEach(function (pkgNo) { const data = packageSummary[pkgNo]; if (!data || (!data.weight && !data.ref1 && !data.ref2)) return; const tr = document.createElement("tr"); const tdPkg = document.createElement("td"); tdPkg.textContent = String(pkgNo); tr.appendChild(tdPkg); const tdWeight = document.createElement("td"); tdWeight.textContent = data.weight || ""; tr.appendChild(tdWeight); const tdRef1 = document.createElement("td"); tdRef1.textContent = data.ref1 || ""; tr.appendChild(tdRef1); const tdRef2 = document.createElement("td"); tdRef2.textContent = data.ref2 || ""; tr.appendChild(tdRef2); packageSummaryTableBody.appendChild(tr); }); packageSummaryWrapper.style.display = "block"; } function renumberPackageSummary(removedNo) { if (!packageSummary) return; delete packageSummary[removedNo]; const nums = Object.keys(packageSummary) .map(Number) .sort((a, b) => a - b); nums.forEach(function (n) { if (n > removedNo) { packageSummary[n - 1] = packageSummary[n]; delete packageSummary[n]; } }); } // Call function only if it exists const callIfFn = (fn) => typeof fn === "function" && fn(); // XHR intercept for package actions const { open: origOpen, send: origSend } = XMLHttpRequest.prototype; XMLHttpRequest.prototype.open = function (...args) { this._url = args[1]; return origOpen.apply(this, args); }; XMLHttpRequest.prototype.send = function (...args) { if (this.onreadystatechange) this._onreadystatechange = this.onreadystatechange; this.onreadystatechange = onReadyStateChangeReplacement; return origSend.apply(this, args); }; function onReadyStateChangeReplacement() { const { _url, readyState, status } = this; const isRelevant = _url === "AddPackage" || _url === "SelectPackage" || _url === "RemovePackage"; if (isRelevant && readyState === 4 && status === 200) { setTimeout(() => { callIfFn(enhanceShippingLayout); callIfFn(adjustPackageControls); if (_url === "AddPackage") { const updatedPackageCount = getPackageCountHiddenValue(); //console.log("Updated PackageCountHidden:", updatedPackageCount); } updateAddPackageButtonState(); callIfFn(setPackageSummaryListeners); if (PACKAGE_SUMMARY_ENABLED) { callIfFn(setRemovePackageButton); if (_url === "RemovePackage" && pendingRemovedPackageNo != null) { renumberPackageSummary(Number(pendingRemovedPackageNo)); pendingRemovedPackageNo = null; callIfFn(renderPackageSummaryTable); } else { callIfFn(updateCurrentPackageSummary); } movePackageSummaryForMobile(); } if (CSP_ENABLED) { addDefaultOption("Reference2", REFERENCE2_DEFAULT_LABEL); attachReference2Handler(); } }, 100); setTimeout(() => { initReferenceDefaults(); }, 100); } return this._onreadystatechange?.apply(this, arguments); } (() => { "use strict"; // CONFIG: Language ? Flag mapping const LANG_FLAG_MAP = { "en-en": { imgSrc: "https://row.ups.com/Home/GetImage?id=cd12a87c-c364-4ca4-8349-42e7757cb429", countryCode: "US", }, "fr-fr": { imgSrc: "https://row.ups.com/Home/GetImage?id=21321a83-1076-4da4-b906-43cc68240b67", countryCode: "FR", }, "es-es": { imgSrc: "https://row.ups.com/Home/GetImage?id=5ab356b2-ec15-4d57-b73e-67d323ac8204", countryCode: "MX", }, }; // UTIL: Country code ? emoji function countryFlagEmoji(code) { if (!code || code.length !== 2) return ""; return String.fromCodePoint(...[...code.toUpperCase()].map((c) => 0x1f1e6 + c.charCodeAt(0) - 65)); } // FLAG INJECTION function injectFlag(li) { if (!li || li._flagDone) return; const key = li.getAttribute("data-value"); const cfg = LANG_FLAG_MAP[key]; if (!cfg) return; const wrapper = document.createElement("span"); wrapper.className = "flag-wrapper"; wrapper.setAttribute("aria-hidden", "true"); let done = false; const img = document.createElement("img"); img.className = "flag-img"; img.src = cfg.imgSrc; img.alt = `${cfg.countryCode} flag`; img.width = 18; img.height = 12; img.onload = () => { if (done) return; wrapper.appendChild(img); done = true; }; img.onerror = () => { if (done) return; const emoji = document.createElement("span"); emoji.className = "flag-emoji"; emoji.innerText = countryFlagEmoji(cfg.countryCode); wrapper.appendChild(emoji); done = true; }; // Safety fallback (slow networks / blocked images) setTimeout(() => { if (done) return; const emoji = document.createElement("span"); emoji.className = "flag-emoji"; emoji.innerText = countryFlagEmoji(cfg.countryCode); wrapper.appendChild(emoji); done = true; }, 2000); li.prepend(wrapper); li._flagDone = true; } function populateFlags() { document.querySelectorAll("#languages li").forEach(injectFlag); } // DROPDOWN BEHAVIOR function initDropdown() { const root = document.getElementById("languageDiv"); const trigger = document.getElementById("openLanguages"); const panel = document.getElementById("languages"); if (!root || !trigger || !panel) return; trigger.setAttribute("role", "button"); trigger.setAttribute("tabindex", "0"); trigger.setAttribute("aria-haspopup", "listbox"); trigger.setAttribute("aria-expanded", "false"); trigger.textContent = "Please select your language"; trigger.classList.add("placeholder"); const open = () => { root.classList.add("is-open"); trigger.setAttribute("aria-expanded", "true"); }; const close = () => { root.classList.remove("is-open"); trigger.setAttribute("aria-expanded", "false"); }; const isOpen = () => root.classList.contains("is-open"); trigger.addEventListener("click", () => (isOpen() ? close() : open())); trigger.addEventListener("keydown", (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); isOpen() ? close() : open(); } }); document.addEventListener("click", (e) => { if (isOpen() && !root.contains(e.target)) close(); }); document.addEventListener("keydown", (e) => { if (e.key === "Escape" && isOpen()) close(); }); panel.addEventListener("click", (e) => { const li = e.target.closest("li"); if (!li) return; trigger.innerText = li.textContent.trim(); trigger.classList.remove("placeholder"); const flag = li.querySelector(".flag-wrapper img, .flag-wrapper span"); if (flag) { const clone = flag.cloneNode(true); clone.style.marginRight = ".5rem"; trigger.prepend(clone); } panel.querySelectorAll('li[aria-selected="true"]').forEach((x) => x.setAttribute("aria-selected", "false")); li.setAttribute("aria-selected", "true"); close(); }); } // MUTATION OBSERVER (async <li>) function observeLanguageList() { const container = document.getElementById("languages"); if (!container) return; const observer = new MutationObserver((mutations) => { mutations.forEach((m) => { m.addedNodes.forEach((n) => { if (n.nodeType === 1 && n.matches("li")) injectFlag(n); n.querySelectorAll && n.querySelectorAll("li").forEach(injectFlag); }); }); }); observer.observe(container, { childList: true, subtree: true }); } // INIT document.addEventListener("DOMContentLoaded", () => { initDropdown(); populateFlags(); observeLanguageList(); }); // Optional external refresh hook window.refreshLanguageFlags = populateFlags; })(); /* ============================================================ Starter Custom Shipping Portal - Mobile Friendly - 02.17.2026v1 This file controls how the page LOOKS (spacing, sizing, colors). Nothing here changes shipping logic — only layout and styling. ============================================================ */ /*Customize language selection dropdown*/ /* Container */ #languageDiv { position: relative; font: inherit; } /* Trigger “button” */ #openLanguages[role="button"], #openLanguages { display: flex; align-items: center; justify-content: space-between; gap: .5rem; /* Fixed height */ height: 1.65em; line-height: 1.65em; padding: 0 .75rem; /* only left/right padding */ border: 1px solid #ced4da; border-radius: .375rem; background: #fff; cursor: pointer; user-select: none; } /* Caret arrow */ #openLanguages::after { content: ""; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 6px solid #6c757d; margin-left: auto; } /* Hover/Focus */ #openLanguages:hover { border-color: #86b7fe; box-shadow: 0 0 0 .1rem rgba(13,110,253,.1); } #openLanguages:focus, #openLanguages:focus-visible { outline: 0; border-color: #86b7fe; box-shadow: 0 0 0 .2rem rgba(13,110,253,.25); } /* Placeholder style in trigger */ #openLanguages.placeholder { color: #6c757d; font-style: italic; } /* Dropdown panel */ #languages { position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 1000; margin: 0; padding: 4px 0; list-style: none; background: #fff; border: 1px solid #ced4da; border-radius: .375rem; box-shadow: 0 .5rem 1rem rgba(0,0,0,.15); max-height: 240px; overflow: auto; display: none; } #languageDiv.is-open #languages { display: block !important; } /* Dropdown items */ #languages li { display: flex; align-items: center; gap: .5rem; /* Match trigger height */ min-height: 1.65em; line-height: 1.65em; padding: 0 .75rem; cursor: pointer; white-space: nowrap; } /* Clean up inline backgrounds */ #languages li[style] { background-color: transparent !important; } /* Hover + active */ #languages li:hover, #languages li[aria-selected="true"] { background: #f1f3f5; } /* Flag spacing */ #languages .flag-img { display: inline-block; } /* ============================================ Form Header ============================================ */ /* Use LANGUAGE_SELECTOR_ENABLED in JS to toggle On/Off Language text display config */ .Header { /* background-color: #F3F0F7 !important; */ color: #330000 !important; margin-top: 0 !important; height:28px!important; } /* UPS Banner above form */ .shipping-banner { position: relative; background-color: #f2efe9; height: 110px; /* smaller banner */ overflow: hidden; margin-top: -4px; } /* Banner verbiage "Shipping Information" */ .shipping-banner-content { position: relative; z-index: 2; padding: 1.25rem 1.25rem 0.5rem; /* less bottom padding */ } /* Banner background curve */ .shipping-banner-curve { position: absolute; left: -10%; width: 120%; height: 120px; /* smaller curve */ bottom: -85px; /* push curve DOWN so it doesn't eat the next row */ background-color: #ffffff; border-top-left-radius: 100% 70px; border-top-right-radius: 100% 70px; z-index: 1; } /* Banner verbiage styling */ .shipping-banner-title { font-family: Segoe UI; font-style: italic; font-size: 22px; font-weight: 600; color: #330000; padding: 0 !important; } /* Banner shipping box */ .shipping-banner-icon { position: absolute; top: 1rem; right: 2rem; width: 90px; height: auto; z-index: 3; pointer-events: none; } #shippingLayout > .row:nth-child(2) { /*padding-top: 0.5rem;*/ /* small, safe tighten */ margin-top: -15px; /* keep normal flow */ } .MastLeft { min-height: 0 !important; } /* ============================================ Button Styling ============================================ */ .buttonBarStyle { margin-top: 0 !important; } #ButtonBarDiv { background-color: unset; text-align: -webkit-center; margin-top: 2% !important; } .ButtonPrime, .ButtonStandard { align-items: center; justify-content: center; background: none !important; background-color: #ffc400 !important; border-color: transparent; border-radius: 22px; padding: 3px 10px 8px 25px; color: #121212; text-decoration: none; transition: all 0.35s ease-in-out; font-size: 0.875rem; font-weight: 500; line-height: 1; position: relative; padding-right: 40px; text-align: center; text-transform: uppercase; white-space: nowrap; } input.ButtonPrime:hover, input.ButtonStandard:hover, #packageHistoryBtn:hover { background-image: none !important; color: #000; background-color: #ffd64c !important; box-shadow: 0 4px 10px rgba(128, 128, 128, 0.5); } /* ============================================ Main logo styling ============================================ */ .custom-top-bar { min-height: 25px; width: 100%; background-color: #1b2a33; /* adjust as needed */ } .img1 { padding-top: 1%; width: 25%; padding-left: 10%; } /* ============================================ Announcement section layout ============================================ */ .FirstColumnModule { background-color: #fff !important; border: 1px solid #000 !important; padding: 2% !important; } /* ================================ 1. Form module & header alignment ================================ */ /* Page background */ body > div.page-layout > main { background: #fff; } /* Let the beige form card fill the center panel, but control inner padding ourselves */ .MastMain .FormModule { /*padding: 1rem 0 1.5rem;*/ /* top | left/right | bottom */ box-sizing: border-box; } /* Main ship form uses full width of the module */ #main_ship_form { width: 100%; /* margin: 0 auto; */ background-color: #fff; margin-bottom: 10px; border: 1px solid #000; } /* Remove spacing */ /*#main_ship_form .Header { margin: 0; }*/ /* Set headers background */ .FormModule h4, #shippingLayout > div > div:nth-child(3) > h4:nth-child(35) > label { background-color: #fff; margin-bottom: 0 !important; font-family: Segoe UI; font-style: italic; font-size: 22px; font-weight: 600; /* text-align: left; */ color: #300000; } /* Header and body share the same horizontal padding, so the columns start right under "Shipping Information." */ /*#main_ship_form .Header, #shippingLayout { padding-left: 1.5rem; padding-right: 1.5rem; }*/ /* Header sits tight to the top of the module, with a bit of space below */ /*#main_ship_form .Header { margin: 0 0 1rem 0; }*/ #boxSFAddressBook input { display: inline-block; } #boxSFAddressBook img { display: inline-block; margin-left: 1%; vertical-align: middle; } #SFAddressBookButton { width: 30px !important; height: 30px !important; fill: #666 !important; transition: fill 0.2s ease; background: url("icon-search-hover.svg") no-repeat center; background-size: contain; } #SFAddressBookButton:hover { fill: #0d6efd; /* hover color */ filter: brightness(0) saturate(100%) invert(35%) sepia(85%) saturate(300%) hue-rotate(200deg); } #boxSTAddressBook { margin-bottom: 2.25%; } .widthoneEighty { width: 81% !important; } /* .form-control { line-height: 0 !important; } */ /* .form-select { line-height: 1.25 !important; padding: 0.175rem 2.25rem 0.175rem 0.75rem !important; } */ .form-select { line-height: 1.50 !important; padding: 0.175rem 2.25rem 0.175rem 0.75rem !important; font-size: 0.750rem !important; } .form-control { line-height: 1em !important; /*padding: 0.175rem 2.25rem 0.175rem 0.75rem !important;*/ font-size: 0.750rem !important; } /* ================================ 2. Shipping layout container ================================ */ #shippingLayout { width: 100%; margin: 0; /* margin-top: 0.25rem; */ /* small gap under header bar */ } /* Remove extra negative margins from the Bootstrap row inside */ #shippingLayout .row { margin-left: 0; margin-right: 0; } /* Give each column some horizontal gutter */ #shippingLayout .col-12.col-lg-4 { padding-left: 0.75rem; padding-right: 0.75rem; } /* Remove spacing below headers */ /*h4.mb-3 { margin-bottom: 0 !important; }*/ /* Remove line above the Additional Data */ .FormModule hr { display: none; } /* Make Comment Text Area writable */ #boxComment textarea { line-height: 1.2 !important; min-height: 2.5rem; } /* Remove line above Pkgs wording */ #shippingLayout > div > div:nth-child(3) > hr { display: none; } /* Desktop: exactly three equal-width columns */ @media (min-width: 992px) { #shippingLayout .col-12.col-lg-4 { flex: 0 0 33.3333%; max-width: 33.3333%; } } /* Optional: vertical separators between columns on desktop */ @media (min-width: 992px) { #shippingLayout .col-12.col-lg-4 { border-right: 1px solid #e5ddd0; } #shippingLayout .col-12.col-lg-4:last-child { border-right: none; } } /* ================================ 3. Legacy width helpers & controls ================================ */ /* Make legacy width classes behave like full-width inputs inside columns */ #shippingLayout .w-220, #shippingLayout .w-225, #shippingLayout .widthTwoThirty, #shippingLayout .widthTwentyFive { width: 100% !important; max-width: 100% !important; } /* Label spacing */ #shippingLayout label { display: inline-block; /* margin-bottom: 0.15rem; */ background-color: transparent; font-family: Segoe UI; font-size: 13px; font-weight: 400; text-align: left; color: #330000; margin: 0px; } /* Slightly tighter input look */ #shippingLayout .form-control { font-size: 0.9rem; padding: 0.25rem 0.5rem; } /* ================================ 4. Outer container helper ================================ */ /* If the outer .container is fixed width, let it stretch */ .MastMain > .container { max-width: 100%; } /* ================================ 5. Appbar / hamburger behaviour ================================ */ /* .appbar { */ /* keep your existing desktop styles here */ /* } */ @media (max-width: 991.98px) { .appbar { display: none; } .appbar.appbar-open { display: block; } } /* Put MastLeft + MastMain on a flex row */ .ColorGroup-YellowGreen { display: flex; flex-wrap: wrap; /* lets them stack on small screens */ } /* Make sure old float widths don't fight us */ .MastLeft, .MastMain { float: none !important; box-sizing: border-box; } /* Desktop and up: left ˜35%, right ˜65% */ @media (min-width: 992px) { .MastLeft { flex: 0 0 35%; max-width: 35%; /*padding-right: 1.5rem;*/ /* space between announcement + form */ } .MastMain { flex: 0 0 65%; max-width: 65%; margin-left: 0 !important; margin-right: 0 !important; } } /* Mobile / tablet: stack full-width */ @media (max-width: 991.98px) { .MastLeft, .MastMain { flex: 0 0 100%; max-width: 100%; padding-right: 0; margin-left: 0 !important; } } @media (min-width: 768px) { .container, .container-md, .container-sm { max-width: 100%; } } /* Make SFAddressBookButton smaller on very small screens */ /*@media (max-width: 950px) { #SFAddressBookButton { width: 5% !important; } }*/ @media (min-width: 576px) { .container, .container-sm { max-width: 100%; } } /* Fix tall even row in Package Summary table only */ #packageSummaryTable tbody tr:nth-child(even) { height: auto; /* cancel the global 46px */ /* keep the zebra color if you like */ background: #f2f1ef; /* or remove this line if you don't want striping */ color: #330000; /* optional: keep text color consistent */ } @media (max-width: 991.98px) { #packageSummaryWrapper { margin-left: 10px; } } /* ============================================ Footer tweaks ============================================ */ body > div.page-layout > footer { background: #fff; color: #00305F; font-size: small; min-height: 45px !important; } footer.footer div:last-child > a { background: #fff; color: #00305F; font-size: small; min-height: 45px !important; } /* Mobile-only footer height adjustment */ @media (max-width: 991.98px) { body > div.page-layout > footer { min-height: 75px !important; } } /* ============================================ Browser-specific masthead offsets (IDs are assigned by the JS Edge()/Chrome() helpers) ============================================ */ /* Used with User View - Edge */ #mastleftEdge { margin-top: -0.9%; } /* Used with GA View - Edge */ #mastmainEdge { margin-top: 0px; } /* Used with User View - Chrome */ #mastleftChrome { margin-top: -0.75%; } /* Used with GA View - Chrome */ #mastmainChrome { margin-top: 3px; } Thank you for entrusting Sabra with your handpiece and instrument repairs. Please complete the form to generate your free UPS return label. If you have a reference or requisition number, please include it in the reference field. If you have any questions, please call us at 1-800-888-4435.90falsefalsefalsefalsefalsefalsefalsetruefalse0falsefalse0falsefalse1753-01-01T00:00:00falsefalsefalsefalsefalsefalsefalsefalse0falsefalsefalsefalsefalsetruefalsefalsefalsetrueU0FCUkE=falseP283368falsefalse1687b91c-b609-4fd1-b3b5-381c2967d597falsefalsefalsefalsefalse0P283212US902026-05-12T13:07:10dmidulla@sabradent.comGCX0Aj1pPRD_SABRA_000000_RefreshToken01713a129b-43d7-4f92-87f6-ced09c98ee3d8e787678-60dd-4019-94bd-fa9181dddc4efalsefalse1falsefalsefalsefalsefalsefalse0SABRA36871Guest Accesstrue0280d00b8-6154-4732-b467-e71fbfc08a19Guest Access2026-04-16T00:00:005000