SOLUTIONS DENTAL LAB
Click Continue As Guest.
HeaderTfalseGuest Access LoginContinueJfalseContinue as GuestLoginTitleTfalse0LoginTitleGuestTfalse0UPS Shipping LabelsLoginTitleARTfalse0LoginHeaderTfalse0LoginHeaderGuestTfalse0Solutions Dental LabLoginHeaderARTfalse0LoginIDSfalse0Always RequiredLoginIDGuestSfalse0Always RequiredLoginIDARSfalse0Always RequiredPasswordSfalse0Always RequiredForgotPasswordTfalse0ChangePasswordTfalse0RegisterTfalse0ChangePasswordTitleTfalse0OldPasswordSfalse0Always RequiredNewPasswordSfalse0Always RequiredConfirmPasswordSfalse0Always RequiredExpireMessageTfalse0ForgotPasswordTitleTfalse0ForgotMessageTfalse0CompanyNameSfalse0CompanyNameGuestSfalse0CompanyNameARSfalse0B2CDirectLoginCfalse0B2CSelfInviteCfalse0B2CRemoveLinkCfalse0ShippingHeaderHeaderTfalse0Intelligent 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 From AddressShipmentFormHeaderTfalse0Shipment InformationSFAddressBookKfalse0SFNameSfalse0RequiredCompany NameSFAttnSfalse0ContactSFAddr1Sfalse0RequiredAddress Line 1SFAddr2Sfalse0Address Line 2SFAddr3Sfalse0SFCitySfalse0RequiredCitySFStateXfalse0RequiredState__SFZipSfalse0RequiredPostal CodeSFPhoneSfalse0SFEmailSfalse0RequiredEmail AddressSFQVLabelNotCfalse0SFQVInTranNotCfalse0SFQVExcNotCfalse0SFQVDelNotCfalse0SFCust01Xfalse0SFCust02Xfalse0SFCust03Xfalse0SFCust04Xfalse0SFCust05Xfalse0SFCust06Xfalse0SFCust07Xfalse0SFCust08Xfalse0SFCust09Xfalse0SFCust10Xfalse0SFManualValidateXfalse0STTitleTfalse0STAddrBookKtrue0SFZipSTBranchKfalse0STNameSfalse0STAttnSfalse0STAddr1Sfalse0STAddr2Sfalse0STAddr3Sfalse0STCitySfalse0STStateXfalse0STZipSfalse0STPhoneSfalse0STEmailSfalse0STAddEmail1Sfalse0STAddEmail2Sfalse0STAddEmail3Sfalse0STQVLabelNotCfalse0STQVInTranNotCfalse0STQVExcNotCfalse0STQVDelNotCfalse0STResidentialCfalse0STCust01Xfalse0STCust02Xfalse0STCust03Xfalse0STCust04Xfalse0STCust05Xfalse0STCust06Xfalse0STCust07Xfalse0STCust08Xfalse0STCust09Xfalse0STCust10Xfalse0STManualValidateXfalse0STLocationIDSfalse0ShipTitleTfalse0Shipment InformationDescriptionXfalse0RSCarbonNeutralCfalse0SatDeliveryCfalse0AdultSignatureCfalse0PrePaidAccountKfalse0ThirdPartyAccountKfalse0AdvancedPaymentOptionsTfalse0DutyVATPrePaidAccountKfalse0DutyVATThirdPartyAccountKfalse0SplitDutyVATCfalse0AreGoodsNotInFreeCirculationCfalse0InvoiceCfalse0International Special CommoditiesQfalse0UploadDocumentsCfalse0UseDifferentSoldToCfalse0DocOnlyCfalse0MonValueMfalse0PackTitleTfalse0PackageHeaderTfalse0PackageNumPkgsNfalse01|20|Number of Packages must be between 1 and 20|WeightNfalse0LengthNfalse0HeightNfalse0WidthNfalse0InsuredValMfalse0Proactive ResponseCfalse0DryIceCfalse0DryIceWeightNfalse0DataTitleTfalse0Check01Cfalse0Check02Cfalse0CommentSfalse0Ref01Rfalse0Patient NameRef02Rfalse0Ref03Rfalse0Ref04Rfalse0Ref05Rfalse0Ref06Rfalse0Ref07Rfalse0Ref08Rfalse0Ref09Rfalse0Ref10Rfalse0PackageAddBtnJfalse0AddPackageRemoveBtnJfalse0RemovePackageSelectTxtAfalse0PackagePaymentMethodPfalse0RequiredBill 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-05-05PickupEarliestTimeIfalse0Earliest Pickup Time11:04PickupLatestTimeIfalse0Latest Pickup Time11:04PickupContactNameSfalse0Contact 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 AccessLoginCSSARSfalse0DocumentINoPackageFromEmailAfalse0This 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 LanguageDfalse0InsuredCurDfalse0MeasureUnitDfalse0INWeightUnitDfalse01LPackTypeDfalse01CDutyVATPayInfoDfalse00PayInfoDfalse0DelMethodDfalse0Label Delivery Method5PServiceDfalse0ServiceGNDServiceIntlDfalse0UPS Service InternationalServiceCodeDtrue0STCust01RSTypeDfalse02RDirectionDfalse00LabelFormatDfalse01GSTCountryDfalse0USSFCountryDfalse0US3163SDLhG9nyjW1cE4KS100SOLUTIONS DENTAL LAB// Starter Custom Shipping Portal - Mobile Friendly
// With Pkg Summary + Comment Row + CSP Box Size (NBNL) - 02.17.2026v1
// ----- 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] || "";
})();
// Move element #boxReference1 after #DeliveryMethod
var deliveryMethod = document.getElementById("DeliveryMethod");
var boxSFCust01 = document.getElementById("boxReference1 ");
deliveryMethod.parentNode.insertBefore(boxReference1 , deliveryMethod.nextSibling);
// ----- Feature toggles -----
const PACKAGE_SUMMARY_ENABLED = false; // true = show pkg summary
const CUSTOM_BRANDING_ENABLED = true; // 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: false, 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=04dd2234-a2b6-4f96-9772-fc6bae820777",
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");
reference3.value = code ? "CSP" + code + "P000000" : "";
console.log("DTM Workflow: " + reference3.value);
// Tell Package Summary to re-read the current package
if (typeof updateCurrentPackageSummary === "function") {
updateCurrentPackageSummary();
}
});
}
}
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=c0d25737-99e3-4f36-b72d-e0ec81aa0ccf";
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);
}
}
// 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();
// Package summary
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";
setPackageSummaryListeners();
setRemovePackageButton();
updateCurrentPackageSummary();
}
function setPackageSummaryListeners() {
const weight = document.getElementById("Weight");
const ref1 = document.getElementById("Reference1");
const ref2 = document.getElementById("Reference2");
const pkgSelect = document.getElementById("SelectedPackage");
function set(el) {
if (!el) return;
el.removeEventListener("input", handlePackageInputChange);
el.removeEventListener("change", handlePackageInputChange);
el.addEventListener("input", handlePackageInputChange);
el.addEventListener("change", handlePackageInputChange);
}
set(weight);
set(ref1);
set(ref2);
set(pkgSelect);
}
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;
}
function handlePackageInputChange() {
updateCurrentPackageSummary();
}
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");
const weight = weightEl ? weightEl.value : "";
const ref1 = ref1El ? ref1El.value : "";
let ref2 = "";
if (ref2El) {
if (ref2El.tagName === "SELECT") {
const idx = ref2El.selectedIndex;
// Treat index 0 as "no selection" ALWAYS
if (idx > 0) {
const opt = ref2El.options[idx];
ref2 = opt ? opt.text : "";
}
} else {
ref2 = ref2El.value;
}
}
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;
// Always remove the deleted package explicitly
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 (PACKAGE_SUMMARY_ENABLED) {
callIfFn(setPackageSummaryListeners);
callIfFn(setRemovePackageButton);
if (_url === "RemovePackage" && pendingRemovedPackageNo != null) {
renumberPackageSummary(Number(pendingRemovedPackageNo));
pendingRemovedPackageNo = null;
callIfFn(renderPackageSummaryTable);
} else {
callIfFn(updateCurrentPackageSummary);
}
// Package summary
movePackageSummaryForMobile();
}
// Re-apply CSP wiring after UPS re-renders package UI (CSP only)
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.
============================================================ */
/*Removes the Label Package 1 from Form*/
#labelPack {display: none;}
/* Hides Ship To */
#shippingLayout > div:nth-child(2) > div:nth-child(2) {
display: none;
}
abelPack {display: none;}
/*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: #2b2b2b;
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: #fff;
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-left;
margin-top: 2% !important;
}
.ButtonPrime,
.ButtonStandard {
align-items: center;
justify-content: center;
background: none !important;
background-color: #2b2b2b!important;
border-color: transparent;
border-radius: 22px;
padding: 3px 10px 8px 25px;
color: #fff;
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: #2b2b2b;
background-color: #fff !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%;
margin-left: 18%;
}
/* ============================================
Announcement section layout
============================================ */
.FirstColumnModule {
background-color: #fff !important;
border: 0px 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: 60%;
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: 15%;
/*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: #2b2b2b;
font-size: small;
min-height: 45px !important;
}
footer.footer div:last-child > a {
background: #fff !important;
color: #2b2b2b !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;
}
Schedule a same day or future day Pickup to have a UPS driver pickup by clicking the link below.<br>
<a href="https://www.solutionsdl.com/schedule-a-pickup/"> Schedule A Pick-up</a>SDL90falsefalsefalsefalsefalsefalsefalsetruefalse5946falsefalse0falsefalse1753-01-01T00:00:00falsefalsefalsefalsefalsefalsefalsefalse0truefalsefalsefalsefalsefalsefalsefalsefalsetrueU0RMfalseP243461falsefalsebaaf969b-1903-4511-a09b-8006e7ccb96ffalsefalsefalsefalsefalse<h4>Instructions</h4><br>
UPS Electronic Return Label: View/Print Label<br><br>
<h4>Schedule a Pickup:</h4><br>
Schedule a same day or future day Pickup to have a UPS driver pickup by clicking the link below.<br>
<a href="https://www.solutionsdl.com/schedule-a-pickup/"> Schedule A Pick-up</a><br><br>
Daily Collection customers:
Have your shipment(s) ready for the driver as usual.
0US902026-03-24T11:15:06Felton@solutionsdl.comQyeg72WWPRD_SDL_000000_RefreshTokenClick Continue As Guest.014742abab-cd8d-488a-a1e1-30df326bdc5a29eb3e46-eb87-4f17-b80a-1a00d335e577falsefalse1falsefalsefalsefalsefalsefalse0SDL31631Guest Accesstrue06abebedf-5139-4969-8c99-9ab1c7ba4c2fGuest Access Link2023-02-10T00:00:0010000