/* ==========================================================================
   ACCOUNT.CSS — account dashboard, wine-club popups, auth pages, modals
   ==========================================================================
   Self-contained UI layer for the logged-in / transactional surfaces:

     #accountContent .................. account dashboard
     .wine-club-membership-details .... membership popup
     .wine-club-shipment-details ...... edit release order popup
     .addr-popup ...................... address book popup
     .container-fluid.auth|.forgot-password  sign in / up / guest / reset
     .ui-dialog.ui-widget ............. jQuery UI modal chrome

   Every custom property below is namespaced `--acct-*` so nothing here can
   collide with, or depend on, tokens defined in main.css or any other sheet.
   Load order does not matter; this file resolves entirely on its own.
   ========================================================================== */

@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap");

:root {
  /* ---------- Type ---------- */
  --acct-font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
    Helvetica, Arial, sans-serif;
  --acct-font-body: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
    Roboto, Helvetica, Arial, sans-serif;
  --acct-font-display: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
    Roboto, Helvetica, Arial, sans-serif;
  --acct-font-size-base: 16px;

  /* ---------- Accent ----------
     Deliberately neutral ink, not a brand colour: this sheet ships across
     stores, so the only "brand" here is the storefront's own header/footer.
     Swap these four values to tint the whole account UI. */
  --acct-primary: #4a4a4a;        /* buttons, links, accents */
  --acct-primary-dark: #333333;   /* hover                   */
  --acct-primary-tint: rgba(0, 0, 0, 0.05);
  --acct-primary-ring: rgba(0, 0, 0, 0.10);

  /* ---------- Neutrals ---------- */
  --acct-white: #ffffff;
  --acct-gray-400: #a9a9a9;
  --acct-gray-500: #6e6e6e;
  --acct-gray-600: #3e3e3e;
  --acct-gray-700: #272727;
  --acct-gray-800: #111111;

  --acct-text: #3e3e3e;
  --acct-text-dark: #111111;
  --acct-text-light: #6e6e6e;

  /* ---------- Surfaces & lines ---------- */
  --acct-surface: #fafafa;          /* table headers, hover fills   */
  --acct-surface-hover: #fcfcfc;    /* row hover                    */
  --acct-panel: #f7f7f8;            /* info panels, username block  */
  --acct-line-strong: #e5e5e5;      /* card borders                 */
  --acct-line: #ededed;             /* inner borders                */
  --acct-line-soft: #f2f2f2;        /* row dividers                 */
  --acct-border: #dddddd;           /* form control borders         */
  --acct-border-light: #eeeeee;

  /* ---------- Controls ---------- */
  --acct-btn-border: #d4d4d4;
  --acct-btn-border-hover: #b4b4b4;
  --acct-btn-hover-bg: #f4f4f4;
  --acct-error: #ff3333;
  --acct-radius: 4px;   /* matches the buttons these popups inherited */

  /* ONE size for every dialog in this sheet — jQuery UI popups, Angular
     modal-container dialogs, payment, address book, membership. Every dialog
     runs this same math, so they always match each other at any viewport.

       clamp(floor, scales-with-viewport, ceiling)

     width  : 72vw between a 320px floor and an 840px ceiling
     height : 78dvh between a 400px floor and a 900px ceiling

     The outer min() keeps a gutter on small screens, where the floor would
     otherwise be wider/taller than the viewport itself. Change these two
     lines to resize every modal on the site. */
  --acct-modal-width: min(clamp(320px, 72vw, 840px), calc(100vw - 24px));
  --acct-modal-height: min(clamp(400px, 78dvh, 900px), calc(100dvh - 24px));

  /* iframe popups cannot size to content (their content is a document), so
     they use the height above as an explicit value */
  --acct-modal-card-width: var(--acct-modal-width);
  --acct-modal-card-height: var(--acct-modal-height);
  --acct-radius-card: 10px;

  /* ---------- Spacing ---------- */
  --acct-space-3xs: 4px;
  --acct-space-2xs: 8px;
  --acct-space-xs: 12px;
  --acct-space-sm: 16px;
  --acct-space-md: 20px;
  --acct-space-lg: 24px;
  --acct-space-xl: 32px;
  --acct-space-2xl: 40px;
}

/* ==========================================================================
   MODAL — jQuery UI dialog restyled as a modern centered modal
   jQuery UI writes top/left/width/height inline, so the geometry needs
   !important. Fullscreen is kept only for phones, where a sheet reads better.
   ========================================================================== */

/* Backdrop */
.ui-widget-overlay {
  position: fixed !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  background: rgba(17, 17, 17, 0.55) !important;
  backdrop-filter: blur(3px);
  -webkit-backdrop-filter: blur(3px);
  opacity: 1 !important;
  z-index: 9999 !important;
  animation: modalFadeIn 0.2s ease-out;
}

@keyframes modalFadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes modalPopIn {
  from { opacity: 0; transform: translate(-50%, -48%) scale(0.98); }
  to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}

/* Dialog shell */
.ui-dialog.ui-widget {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
  right: auto !important;
  bottom: auto !important;
  transform: translate(-50%, -50%) !important;
  /* shared dialog size — see --acct-modal-width / --acct-modal-height */
  width: var(--acct-modal-width) !important;
  max-width: var(--acct-modal-width) !important;
  height: var(--acct-modal-height) !important;
  max-height: calc(100dvh - 32px) !important;
  margin: 0 !important;
  padding: 0 !important;
  background: var(--acct-white) !important;
  border: none !important;
  border-radius: 10px !important;
  box-shadow: 0 24px 64px rgba(0, 0, 0, 0.28), 0 2px 8px rgba(0, 0, 0, 0.12) !important;
  display: flex !important;
  flex-direction: column !important;
  overflow: hidden !important;
  z-index: 10000 !important;
  animation: modalPopIn 0.22s cubic-bezier(0.16, 1, 0.3, 1);
}

/* Title bar */
.ui-dialog.ui-widget .ui-dialog-titlebar {
  flex: 0 0 auto;
  position: relative;
  display: flex !important;
  align-items: center;
  gap: var(--acct-space-sm);
  padding: 18px 56px 18px 24px !important;
  margin: 0 !important;
  background: var(--acct-white) !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line) !important;
  border-radius: 0 !important;
  text-align: left !important;
  cursor: default;
}

.ui-dialog.ui-widget .ui-dialog-title {
  flex: 1 1 auto;
  min-width: 0;
  margin: 0 !important;
  font: 400 20px/1.3 var(--acct-font-display) !important;
  letter-spacing: 0.2px;
  color: var(--acct-primary) !important;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Close button — ghost square with a drawn ✕ instead of the UI sprite */
.ui-dialog.ui-widget .ui-dialog-titlebar-close {
  position: absolute !important;
  top: 50% !important;
  right: 16px !important;
  transform: translateY(-50%) !important;
  width: 34px !important;
  height: 34px !important;
  min-width: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  background: transparent !important;
  border: 1px solid transparent !important;
  border-radius: var(--acct-radius) !important;
  box-shadow: none !important;
  cursor: pointer;
  transition: background-color 0.2s ease, border-color 0.2s ease;
  overflow: hidden;
  text-indent: 0 !important;
}

.ui-dialog.ui-widget .ui-dialog-titlebar-close:hover {
  background: var(--acct-surface) !important;
  border-color: var(--acct-line) !important;
}

.ui-dialog.ui-widget .ui-dialog-titlebar-close .ui-icon,
.ui-dialog.ui-widget .ui-dialog-titlebar-close .ui-button-text {
  display: none !important;
}

.ui-dialog.ui-widget .ui-dialog-titlebar-close::before,
.ui-dialog.ui-widget .ui-dialog-titlebar-close::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 15px;
  height: 1.5px;
  background: var(--acct-text-dark);
  border-radius: 2px;
}

.ui-dialog.ui-widget .ui-dialog-titlebar-close::before {
  transform: translate(-50%, -50%) rotate(45deg);
}

.ui-dialog.ui-widget .ui-dialog-titlebar-close::after {
  transform: translate(-50%, -50%) rotate(-45deg);
}

/* Body — the iframe fills whatever height is left */
.ui-dialog.ui-widget .ui-dialog-content,
.ui-dialog.ui-widget #jqpopupContainer {
  flex: 1 1 auto !important;
  width: 100% !important;
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
  background: var(--acct-white) !important;
  overflow: hidden !important;
}

.ui-dialog.ui-widget #jqpopupContainer > div,
.ui-dialog.ui-widget #jqpopupContainer iframe {
  width: 100% !important;
  height: 100% !important;
  min-height: 0 !important;
  border: 0 !important;
  display: block !important;
}

/* Non-iframe popups (address editor, shipping notices) need their own padding */
.ui-dialog.ui-widget .ui-dialog-content > .popup,
.ui-dialog.ui-widget .ui-dialog-content > form {
  padding: var(--acct-space-lg) var(--acct-space-xl);
  box-sizing: border-box;
  overflow-y: auto;
  max-height: 100%;
}

/* Button pane, when a popup uses one */
.ui-dialog.ui-widget .ui-dialog-buttonpane {
  flex: 0 0 auto;
  margin: 0 !important;
  padding: var(--acct-space-sm) var(--acct-space-lg) !important;
  background: var(--acct-white) !important;
  border: none !important;
  border-top: 1px solid var(--acct-line) !important;
}

/* Drag/resize affordances don't belong on a modal */
.ui-dialog.ui-widget .ui-resizable-handle {
  display: none !important;
}

/* Phones: full-height sheet */
@media only screen and (max-width: 640px) {
  .ui-dialog.ui-widget {
    top: 0 !important;
    left: 0 !important;
    transform: none !important;
    width: 100% !important;
    max-width: 100% !important;
    height: 100vh !important;
    height: 100dvh !important;
    max-height: 100dvh !important;
    border-radius: 0 !important;
    animation: modalSheetIn 0.22s cubic-bezier(0.16, 1, 0.3, 1);
  }

  .ui-dialog.ui-widget .ui-dialog-titlebar {
    padding: 14px 52px 14px 16px !important;
  }

  .ui-dialog.ui-widget .ui-dialog-title {
    font-size: 17px !important;
  }

  .ui-dialog.ui-widget .ui-dialog-content > .popup,
  .ui-dialog.ui-widget .ui-dialog-content > form {
    padding: var(--acct-space-md);
  }
}

@keyframes modalSheetIn {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
  .ui-dialog.ui-widget,
  .ui-widget-overlay {
    animation: none !important;
  }
}
/* ==========================================================================
   ACCOUNT — EDIT RELEASE ORDER (wine club shipment)
   Same card treatment as .wine-club-membership-details. Scoped to the class
   because this also renders inside the account popup.
   ========================================================================== */

/* The CMS tags the panel `.data.three-items-across`, which inherits the
   product-card grid and shreds this form. Force normal block flow first.

   `display:block !important` must NOT be applied to the tab panels: this page
   is a jQuery UI tab set (Allocation / Wish List) and the inactive panel is
   hidden with an inline `display:none`. Forcing it visible showed both tabs
   at once. Panels are therefore matched only when they are not hidden. */
.wine-club-shipment-details .data,
.wine-club-shipment-details .data.three-items-across,
.wine-club-shipment-details .pending-order-tabs,
.wine-club-shipment-details #tabContentPendingOrder:not([style*="display: none"]):not([style*="display:none"]):not(.ui-tabs-hide):not([aria-hidden="true"]),
.wine-club-shipment-details #tabContentProducts:not([style*="display: none"]):not([style*="display:none"]):not(.ui-tabs-hide):not([aria-hidden="true"]),
.wine-club-shipment-details .content {
  display: block !important;
  grid-template-columns: none !important;
  column-gap: 0 !important;
  row-gap: 0 !important;
  width: 100% !important;
  max-width: 100% !important;
  float: none !important;
  padding: 0 !important;
  margin: 0 !important;
  border: none !important;
  background: none !important;
}

/* ...but never resurrect anything the page hid inline (the Discount total,
   the shipping-address column until delivery switches to Ship). */
.wine-club-shipment-details [style*="display:none"],
.wine-club-shipment-details [style*="display: none"] {
  display: none !important;
}

/* ---------- Card shell ---------- */
.wine-club-shipment-details {
  box-sizing: border-box;
  width: 100%;
  max-width: 920px;
  margin: 0 auto var(--acct-space-xl);
  padding: var(--acct-space-xl);
  background: var(--acct-white);
  border: 1px solid var(--acct-line);
  border-radius: var(--acct-radius);
  font-family: var(--acct-font-body);
  font-size: var(--acct-font-size-base);
  color: var(--acct-text);
  text-align: left;
  overflow-x: hidden;
}

.wine-club-shipment-details *,
.wine-club-shipment-details *::before,
.wine-club-shipment-details *::after {
  box-sizing: border-box;
}

.wine-club-shipment-details .content,
.wine-club-shipment-details .section,
.wine-club-shipment-details .table,
.wine-club-shipment-details .row,
.wine-club-shipment-details .col {
  max-width: 100%;
  min-width: 0;
}

.wine-club-shipment-details h3 {
  margin: 0 0 var(--acct-space-lg);
  padding-bottom: var(--acct-space-sm);
  border-bottom: 1px solid var(--acct-line);
  font-family: var(--acct-font-display);
  font-size: 24px;
  font-weight: 400;
  line-height: 1.25;
  color: var(--acct-primary);
}

/* Spacer markup the CMS sprinkles between blocks */
.wine-club-shipment-details .break,
.wine-club-shipment-details .content > br,
.wine-club-shipment-details .commands > br,
.wine-club-shipment-details div[style*="clear"] {
  display: none !important;
}

.wine-club-shipment-details #ctl00_cphBody_divMess:empty,
.wine-club-shipment-details #ctl00_cphBody_divMess1:empty {
  display: none !important;
}

/* ---------- Section headings ---------- */
.wine-club-shipment-details .section {
  margin-bottom: var(--acct-space-xl);
}

.wine-club-shipment-details .section .header {
  padding: 0 0 var(--acct-space-2xs);
  margin-bottom: var(--acct-space-md);
  border: none;
  background: none;
  font-family: var(--acct-font-body);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--acct-primary);
}

/* ---------- Order delivery fields ---------- */
.wine-club-shipment-details .section .table .row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--acct-space-md);
}

.wine-club-shipment-details .section .table .col {
  flex: 1 1 280px;
  min-width: 0;
}

.wine-club-shipment-details .section .table .col .label {
  display: block;
  margin-bottom: var(--acct-space-3xs);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: var(--acct-text-dark);
}

/* jQuery UI selectmenu buttons carry an inline width — force fluid */
.wine-club-shipment-details .ui-selectmenu-button {
  width: 100% !important;
  min-height: 44px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--acct-space-2xs);
  padding: 0 var(--acct-space-xs);
  background: var(--acct-white);
  border: 1px solid var(--acct-border);
  border-radius: var(--acct-radius);
  color: var(--acct-text-dark);
  font-family: var(--acct-font-body);
  font-size: 14px;
}

/* Platform CSS floats/absolutely-positions several of these controls, which
   is what makes them collide. Force in-flow layout inside the card. */
.wine-club-shipment-details .section .table .col,
.wine-club-shipment-details .section .table .col > *:not(.ui-selectmenu-button),
.wine-club-shipment-details .col-qty select.ddl,
.wine-club-shipment-details .total,
.wine-club-shipment-details .commands,
.wine-club-shipment-details .shipping-notes {
  position: static !important;
  float: none !important;
  top: auto !important;
  left: auto !important;
  right: auto !important;
  bottom: auto !important;
  transform: none !important;
}

.wine-club-shipment-details .ui-selectmenu-button:hover,
.wine-club-shipment-details .ui-selectmenu-button:focus {
  border-color: var(--acct-primary);
  outline: none;
}

.wine-club-shipment-details .ui-selectmenu-text {
  flex: 1 1 auto;
  min-width: 0;
  margin: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}


/* ---------- Select caret ----------
   jQuery UI renders the arrow as an absolutely positioned sprite span. Its
   offsets are relative to the button, so any change of positioning context
   flings it off-screen. Hide the sprite and draw our own chevron. */
.wine-club-shipment-details .ui-selectmenu-button,
.wine-club-membership-details .ui-selectmenu-button {
  position: relative !important;
  flex-direction: row !important;
  padding-right: 34px !important;
  overflow: hidden;
}

.wine-club-shipment-details .ui-selectmenu-button .ui-icon,
.wine-club-membership-details .ui-selectmenu-button .ui-icon {
  display: none !important;
}

.wine-club-shipment-details .ui-selectmenu-button::after,
.wine-club-membership-details .ui-selectmenu-button::after {
  content: "";
  position: absolute;
  top: 50%;
  right: 14px;
  width: 8px;
  height: 8px;
  margin-top: -6px;
  border-right: 1.5px solid var(--acct-text-dark);
  border-bottom: 1.5px solid var(--acct-text-dark);
  transform: rotate(45deg);
  pointer-events: none;
}

/* ---------- Products table ---------- */
.wine-club-shipment-details #tabContentProducts .table {
  display: block;
  border: 1px solid var(--acct-line);
  border-radius: var(--acct-radius);
  overflow: hidden;
}

/* The 5-column template only fits rows that actually have five cells. Other
   tab panels (Wish List) render different column counts, and inheriting this
   grid is what threw their columns out of alignment. Rows are matched by
   their real cell count instead. */
.wine-club-shipment-details #tabContentProducts .row {
  display: grid;
  align-items: center;
  gap: var(--acct-space-sm);
  padding: var(--acct-space-sm) var(--acct-space-md);
  border-bottom: 1px solid var(--acct-border-light);
}

/* 5 cells: qty | product | required | price | extended */
.wine-club-shipment-details .row:has(> .col:nth-child(5)) {
  grid-template-columns: 92px minmax(0, 1fr) 80px 110px 120px;
}

/* 4 cells */
.wine-club-shipment-details .row:has(> .col:nth-child(4)):not(:has(> .col:nth-child(5))) {
  grid-template-columns: 92px minmax(0, 1fr) 110px 120px;
}

/* 3 cells */
.wine-club-shipment-details .row:has(> .col:nth-child(3)):not(:has(> .col:nth-child(4))) {
  grid-template-columns: 92px minmax(0, 1fr) 120px;
}

/* 2 cells */
.wine-club-shipment-details .row:has(> .col:nth-child(2)):not(:has(> .col:nth-child(3))) {
  grid-template-columns: minmax(0, 1fr) 120px;
}

/* 1 cell */
.wine-club-shipment-details #tabContentProducts .row:not(:has(> .col:nth-child(2))) {
  grid-template-columns: minmax(0, 1fr);
}

.wine-club-shipment-details #tabContentProducts .row:last-child {
  border-bottom: none;
}

.wine-club-shipment-details #tabContentProducts .row.alt {
  background: var(--acct-surface);
}

.wine-club-shipment-details #tabContentProducts .row.h {
  background: var(--acct-surface);
  border-bottom: 1px solid var(--acct-line);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--acct-text-dark);
}

.wine-club-shipment-details #tabContentProducts .col {
  min-width: 0;
}

.wine-club-shipment-details .col-product {
  font-size: 15px;
  color: var(--acct-text-dark);
  line-height: 1.35;
}

.wine-club-shipment-details .col-price {
  text-align: right;
  white-space: nowrap;
}

.wine-club-shipment-details .col-required {
  text-align: center;
}

.wine-club-shipment-details .col-qty select.ddl {
  width: 100% !important;
  max-width: 92px;
  min-height: 40px;
  padding: 0 var(--acct-space-2xs);
  border: 1px solid var(--acct-border);
  border-radius: var(--acct-radius);
  background: var(--acct-white);
  color: var(--acct-text-dark);
  font-family: var(--acct-font-body);
  font-size: 14px;
}

.wine-club-shipment-details .col-qty select.ddl:focus {
  border-color: var(--acct-primary);
  outline: none;
}

.wine-club-shipment-details .sku {
  display: block;
  font-size: 12px;
  color: var(--acct-text-light);
}

.wine-club-shipment-details .pv {
  display: block;
  margin-top: 2px;
  font-size: 12px;
  line-height: 1.4;
  color: var(--acct-text-light);
}

.wine-club-shipment-details .old-price {
  display: inline-block;
  text-decoration: line-through;
  color: var(--acct-text-light);
  margin-right: var(--acct-space-3xs);
}

.wine-club-shipment-details .sale-price {
  font-weight: 500;
  color: var(--acct-primary);
}

/* ---------- Totals ---------- */
.wine-club-shipment-details .total {
  display: flex;
  justify-content: space-between;
  gap: var(--acct-space-md);
  width: 100%;
  max-width: 340px;
  margin-left: auto;
  padding: var(--acct-space-3xs) 0;
  font-size: 14px;
}

.wine-club-shipment-details .total:first-of-type {
  margin-top: var(--acct-space-lg);
}

.wine-club-shipment-details .total span {
  font-weight: 400;
  color: var(--acct-text-light);
}

.wine-club-shipment-details .total.grand {
  margin-top: var(--acct-space-2xs);
  padding-top: var(--acct-space-2xs);
  border-top: 1px solid var(--acct-line);
  font-size: 16px;
  font-weight: 500;
  color: var(--acct-primary);
}

.wine-club-shipment-details .total.grand span {
  color: var(--acct-primary);
  font-weight: 500;
}

/* ---------- Commands: notes + buttons ---------- */
.wine-club-shipment-details .commands {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--acct-space-2xs);
  margin-top: var(--acct-space-xl);
  padding-top: var(--acct-space-md);
  border-top: 1px solid var(--acct-line);
  text-align: center;
}

.wine-club-shipment-details .shipping-notes {
  width: 100%;
  max-width: 420px;
  margin: 0 0 var(--acct-space-sm);
  text-align: left;
}

.wine-club-shipment-details .shipping-notes b {
  display: block;
  margin-bottom: var(--acct-space-3xs);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: var(--acct-text-dark);
}

.wine-club-shipment-details .shipping-notes br {
  display: none;
}

.wine-club-shipment-details .shipping-notes textarea {
  width: 100% !important;
  max-width: 100%;
  min-height: 72px;
  padding: var(--acct-space-2xs) var(--acct-space-xs);
  border: 1px solid var(--acct-border);
  border-radius: var(--acct-radius);
  font-family: var(--acct-font-body);
  font-size: 14px;
  color: var(--acct-text-dark);
  resize: vertical;
}

.wine-club-shipment-details .shipping-notes textarea:focus {
  border-color: var(--acct-primary);
  outline: none;
}

.wine-club-shipment-details .commands .btn {
  margin: 0 !important;          /* kills the inline margin-left:-100px hack */
  flex: 0 1 auto;
}

/* --- Below the desktop grid: every product row becomes a labeled card ---
   The 5-column header row can't survive here, so each cell carries its own
   label via ::before. Both happen at the same breakpoint — splitting them
   (header hidden at 820px, labels only from 560px) left a dead zone where
   the values had no labels at all. */
@media only screen and (max-width: 820px) {
  .wine-club-shipment-details {
    padding: var(--acct-space-md);
  }

  .wine-club-shipment-details #tabContentProducts .table {
    border: none;
    border-radius: 0;
    overflow: visible;
  }

  .wine-club-shipment-details #tabContentProducts .row.h {
    display: none;
  }

  .wine-club-shipment-details #tabContentProducts .row {
    display: block;
    padding: var(--acct-space-sm);
    margin-bottom: var(--acct-space-xs);
    border: 1px solid var(--acct-line);
    border-radius: var(--acct-radius);
    background: var(--acct-white);
  }

  .wine-club-shipment-details #tabContentProducts .row.alt {
    background: var(--acct-surface);
  }

  /* Product name leads the card */
  .wine-club-shipment-details .col-product {
    display: block;
    width: 100%;
    padding: 0 0 var(--acct-space-2xs);
    margin: 0 0 var(--acct-space-2xs);
    border-bottom: 1px solid var(--acct-border-light);
    font-weight: 500;
    font-size: 15px;
    color: var(--acct-text-dark);
    text-align: left;
  }

  /* Remaining cells: label on the left, value on the right */
  .wine-club-shipment-details .col-qty,
  .wine-club-shipment-details .col-required,
  .wine-club-shipment-details .col-price {
    display: flex !important;
    align-items: center;
    justify-content: space-between;
    gap: var(--acct-space-sm);
    width: 100%;
    padding: var(--acct-space-3xs) 0;
    text-align: right;
    white-space: normal;
  }

  .wine-club-shipment-details .col-qty::before      { content: "Qty"; }
  .wine-club-shipment-details .col-required::before { content: "Required"; }
  .wine-club-shipment-details .col-price:nth-of-type(4)::before { content: "Price"; }
  .wine-club-shipment-details .col-price:nth-of-type(5)::before { content: "Extended"; }

  .wine-club-shipment-details .col-qty::before,
  .wine-club-shipment-details .col-required::before,
  .wine-club-shipment-details .col-price::before {
    flex: 0 0 auto;
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--acct-text-light);
    text-align: left;
    white-space: nowrap;
  }

  .wine-club-shipment-details .col-qty select.ddl {
    flex: 0 0 auto;
    max-width: 92px;
  }

  .wine-club-shipment-details .total {
    max-width: none;
  }
}

@media only screen and (max-width: 560px) {
  .wine-club-shipment-details {
    padding: var(--acct-space-sm);
  }

  .wine-club-shipment-details .commands .btn {
    width: 100%;
    text-align: center;
  }

  .wine-club-shipment-details .shipping-notes {
    max-width: 100%;
  }
}
/* ========================================
   ACCOUNT — WINE CLUB MEMBERSHIP DETAILS
   .wine-club-membership-details only exists on the account membership page
   (it also renders inside the account popup, where the form action is not
   /account — hence the class scope rather than a form[action] scope).
   ======================================== */

/* The CMS tags the panel `.section.data.three-items-across`, which inherits the
   product-card grid and shreds this form. Force normal block flow first. */
.wine-club-membership-details .section.data,
.wine-club-membership-details .data,
.wine-club-membership-details .data.three-items-across,
.wine-club-membership-details .content,
.wine-club-membership-details .table {
  display: block !important;
  grid-template-columns: none !important;
  column-gap: 0 !important;
  row-gap: 0 !important;
  width: 100% !important;
  max-width: 100% !important;
  float: none !important;
}

/* ...but never resurrect anything the page hid inline. `display:block
   !important` above beats an inline `style="display:none"`, which was
   re-exposing the waiting-list / on-hold table. */
.wine-club-membership-details [style*="display:none"],
.wine-club-membership-details [style*="display: none"] {
  display: none !important;
}

.wine-club-membership-details {
  width: 100%;
  max-width: 760px;
  margin: 0 auto var(--acct-space-xl);
  padding: var(--acct-space-xl);
  box-sizing: border-box;
  background: var(--acct-white);
  border: 1px solid var(--acct-line);
  border-radius: var(--acct-radius);
  font-family: var(--acct-font-body);
  color: var(--acct-text);
  text-align: left;
}

.wine-club-membership-details h3 {
  margin: 0 0 var(--acct-space-2xs);
  padding-bottom: var(--acct-space-sm);
  border-bottom: 1px solid var(--acct-line);
  font-family: var(--acct-font-display);
  font-size: 24px;
  font-weight: 400;
  line-height: 1.25;
  color: var(--acct-primary);
}

/* The heading ships a <br> that splits the club name onto its own line */
.wine-club-membership-details h3 br {
  display: block;
  content: "";
}

.wine-club-membership-details .member-since {
  margin: var(--acct-space-sm) 0 var(--acct-space-lg);
  font-size: 14px;
  color: var(--acct-text-light);
}

.wine-club-membership-details .member-since b {
  color: var(--acct-text-dark);
  font-weight: 500;
  margin-right: var(--acct-space-3xs);
}

/* Reset the CMS panel chrome — the card above provides it */
.wine-club-membership-details .section,
.wine-club-membership-details .content {
  width: 100%;
  margin: 0;
  padding: 0;
  border: none;
  background: none;
  box-sizing: border-box;
}

/* ---------- Field rows ---------- */
.wine-club-membership-details .table {
  display: block;
  width: 100%;
}

.wine-club-membership-details .table .row {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: var(--acct-space-md);
  width: 100%;
  margin: 0 0 var(--acct-space-md);
  padding: 0;
  border: none;
}

.wine-club-membership-details .table .col {
  flex: 1 1 280px !important;
  width: auto !important;
  max-width: 100% !important;
  min-width: 0;
  float: none !important;
  padding: 0;
  border: none;
  box-sizing: border-box;
}

.wine-club-membership-details .label {
  display: block;
  margin-bottom: var(--acct-space-3xs);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: var(--acct-text-dark);
}

/* The markup separates label and field with a <br> — the block label covers it */
.wine-club-membership-details .label + br {
  display: none;
}

/* jQuery UI selectmenu buttons carry an inline width — force fluid */
.wine-club-membership-details .ui-selectmenu-button {
  width: 100% !important;
  min-height: 44px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--acct-space-2xs);
  padding: 0 var(--acct-space-xs);
  box-sizing: border-box;
  background: var(--acct-white);
  border: 1px solid var(--acct-border);
  border-radius: var(--acct-radius);
  color: var(--acct-text-dark);
  font-family: var(--acct-font-body);
  font-size: 14px;
}

.wine-club-membership-details .ui-selectmenu-button:hover,
.wine-club-membership-details .ui-selectmenu-button:focus {
  border-color: var(--acct-primary);
  outline: none;
}

.wine-club-membership-details .ui-selectmenu-text {
  flex: 1 1 auto;
  min-width: 0;
  margin: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.wine-club-membership-details .txt,
.wine-club-membership-details input[type="text"] {
  width: 100%;
  min-height: 44px;
  box-sizing: border-box;
}

.wine-club-membership-details .calendar-img {
  margin-left: var(--acct-space-2xs);
  vertical-align: middle;
}

/* Checkbox rows read as a single line */
.wine-club-membership-details .aspNetDisabled {
  display: inline-flex;
  align-items: center;
  gap: var(--acct-space-3xs);
  font-weight: 500 !important;
  font-size: 14px;
}

.wine-club-membership-details .aspNetDisabled label {
  margin: 0;
  font-weight: 500;
}

/* Stray spacer markup between the panel sections */
.wine-club-membership-details .content > br,
.wine-club-membership-details .section > br,
.wine-club-membership-details .break,
.wine-club-membership-details div[style*="clear"] {
  display: none !important;
}

.wine-club-membership-details #ctl00_cphBody_divMess:empty {
  display: none !important;
}

/* ---------- Cancellation notice ---------- */
.wine-club-membership-details .wine-club-cancelation {
  margin: var(--acct-space-md) 0 0;
  padding: var(--acct-space-sm) 0 0;
  border-top: 1px solid var(--acct-line);
  font-size: 13px;
  color: var(--acct-text-light);
}

.wine-club-membership-details .wine-club-cancelation-link {
  color: var(--acct-primary);
  text-decoration: underline;
}

/* ---------- Actions ---------- */
.wine-club-membership-details .commands {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: var(--acct-space-2xs);
  margin-top: var(--acct-space-lg);
  padding-top: var(--acct-space-md);
  border-top: 1px solid var(--acct-line);
}

.wine-club-membership-details .commands .btn {
  margin: 0 !important;
  flex: 0 1 auto;
}

@media only screen and (max-width: 767px) {
  .wine-club-membership-details {
    padding: var(--acct-space-md);
  }

  .wine-club-membership-details .table .col {
    flex: 1 1 100%;
  }

  .wine-club-membership-details .commands .btn {
    flex: 1 1 100%;
  }
}

/* ==========================================================================
   ACCOUNT DASHBOARD — unbranded UI layer
   #accountContent, the wine-club/allocation/payment tables, the two wine-club
   popups and the modal chrome all render as product UI rather than marketing
   pages, so they run on Inter (--font-ui) and a neutral gray palette instead
   of the storefront's Prata/Karla.
   ========================================================================== */

#accountContent,
#accountContent input,
#accountContent select,
#accountContent textarea,
#accountContent button,
app-sign-in,
app-sign-up,
app-shop-as-guest,
app-forgot-password,
app-reset-password,
app-alert,
.container-fluid.auth,
.container-fluid.auth input,
.container-fluid.auth select,
.container-fluid.auth textarea,
.container-fluid.auth button,
.container-fluid.forgot-password,
.container-fluid.forgot-password input,
.container-fluid.forgot-password button,
app-basket,
.uc.newsletter,
.uc.newsletter input,
.uc.newsletter select,
.newsletter_table,
app-catalog-suggestions,
app-catalog-suggestions button,
app-checkout,
app-checkout input,
app-checkout select,
app-checkout textarea,
app-checkout button,
#basket.basket,
#basket.basket input,
#basket.basket select,
#basket.basket button,
.addr-popup,
.addr-popup input,
.addr-popup select,
.addr-popup button,
.change-password,
.change-password input,
.change-password button,
.wine-club-membership-details,
.wine-club-membership-details input,
.wine-club-membership-details select,
.wine-club-membership-details textarea,
.wine-club-shipment-details,
.wine-club-shipment-details input,
.wine-club-shipment-details select,
.wine-club-shipment-details textarea,
.join-wine-club-content,
.join-wine-club-content input,
.join-wine-club-content select,
.join-wine-club-content textarea,
.join-wine-club-content button,
.join-wine-club-form,
.join-wine-club-form input,
.join-wine-club-form select,
.join-wine-club-form textarea,
.join-wine-club-form button,
.wineclub-registration-wizard,
.ui-dialog.ui-widget,
.ui-dialog.ui-widget input,
.ui-dialog.ui-widget select,
.ui-dialog.ui-widget textarea {
  font-family: var(--acct-font) !important;
  -webkit-font-smoothing: antialiased;
}

#accountContent h1,
#accountContent h2,
#accountContent h3,
#accountContent h4,
#accountContent .header,
.container-fluid.auth h1,
.container-fluid.auth h2,
.container-fluid.auth h3,
.container-fluid.forgot-password h1,
.container-fluid.forgot-password h2,
app-checkout h1,
app-checkout h2,
app-checkout h4,
app-basket h1,
app-basket h2,
app-cart-items h2,
#basket.basket h1,
#basket.basket h2,
.wine-club-membership-details h3,
.wine-club-shipment-details h3,
.ui-dialog.ui-widget .ui-dialog-title {
  font-family: var(--acct-font) !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em !important;
  text-transform: none !important;
}

/* ---------- Page shell ---------- */
#accountContent {
  width: 100%;
  max-width: 1100px;
  margin: 0 auto;
  padding: 0 var(--acct-space-sm);
  box-sizing: border-box;
  color: var(--acct-gray-700);
  font-size: 14px;
  line-height: 1.55;
  text-align: left;
}

#accountContent * {
  box-sizing: border-box;
}

/* Notice block at the top (CMS ships inline styles; neutralize the loud ones) */
#accountContent .uc.oPText > div {
  border-radius: var(--acct-radius) !important;
  font-family: var(--acct-font) !important;
}

/* ---------- Section cards ---------- */
#accountContent .section {
  margin: 0 0 var(--acct-space-lg);
  padding: 0;
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong);
  border-radius: 10px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
  overflow: hidden;
}

#accountContent .section > .header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--acct-space-sm);
  margin: 0;
  padding: 16px 20px !important;
  background: var(--acct-surface) !important;
  border: none;
  border-bottom: 1px solid var(--acct-line-strong);
  border-radius: 0;
  color: var(--acct-gray-800) !important;
  font-size: 15px !important;
  line-height: 1.3;
  text-align: left !important;
  overflow: visible;
}

#accountContent .section > .content {
  padding: 20px;
}

#accountContent .section > .content:empty {
  display: none;
}

/* Sign out reads as a quiet link, not a white-on-white label */
#accountContent .lnkSignOut {
  float: none !important;
  margin-left: auto;
  padding: 6px 12px;
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius);
  background: var(--acct-white);
  color: var(--acct-gray-600) !important;
  font-size: 13px;
  font-weight: 500;
  text-decoration: none !important;
  white-space: nowrap;
  transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

#accountContent .lnkSignOut:hover {
  background: var(--acct-btn-hover-bg);
  border-color: var(--acct-btn-border);
  color: var(--acct-gray-800) !important;
}

/* ---------- Address columns ---------- */
#accountContent .account_address {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
  overflow: visible;
}

#accountContent .account_address .column,
#accountContent .account_address .column:first-child {
  flex: 1 1 320px;
  float: none !important;
  width: auto !important;
  min-width: 0;
  padding: 0 !important;
}

#accountContent .account_address .column > .ciRegularView,
#accountContent .account_address .column > div[id$="upd"] {
  margin-bottom: 4px;
}

#accountContent .account_address h3,
#accountContent .section .content h3 {
  margin: 0 0 12px;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: 0.04em !important;
  text-transform: uppercase !important;
  color: var(--acct-gray-500) !important;
}

/* Label / value rows */
#accountContent .ciRegularView {
  border: 1px solid var(--acct-line);
  border-radius: 8px;
  overflow: hidden;
}

#accountContent .ciRegularView .row {
  display: grid !important;
  grid-template-columns: 108px minmax(0, 1fr);
  align-items: start;
  gap: 12px;
  width: 100%;
  margin: 0 !important;
  padding: 10px 14px;
  border-bottom: 1px solid var(--acct-line-soft);
}

#accountContent .ciRegularView .row:last-child {
  border-bottom: none;
}

#accountContent .ciRegularView .col {
  display: block !important;
  width: auto !important;
  min-width: 0;
  vertical-align: top;
  word-break: break-word;
}

#accountContent .ciRegularView .col:first-child {
  width: auto !important;
}

#accountContent .ciRegularView .label {
  display: block;
  padding-top: 1px;
  font-size: 12px;
  line-height: 1.5;
  font-weight: 500;
  color: var(--acct-gray-500);
}

#accountContent .ciRegularView .col:last-child {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 12px;
  font-size: 14px;
  color: var(--acct-gray-700);
}

/* kill the inline padding-left:30px on the "change" link wrapper */
#accountContent .ciRegularView .col:last-child > span[style] {
  padding-left: 0 !important;
  margin-left: auto;
}

#accountContent .ciRegularView .col:last-child > span[style] a {
  font-size: 13px;
  white-space: nowrap;
}

/* Rows the CMS renders empty just add noise */
#accountContent .ciRegularView .row.fax {
  display: none !important;
}

#accountContent .lnk {
  font-weight: 500;
  color: var(--acct-primary);
  text-decoration: none;
  border-bottom: 1px solid rgba(0, 0, 0, 0.28);
}

#accountContent .lnk:hover {
  border-bottom-color: var(--acct-primary);
}

/* Change Password reads as an action, not a footnote link */
#accountContent a#hlnkChangePassword {
  box-sizing: border-box;
  max-width: 220px;
  margin-top: 20px !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  line-height: 1.4 !important;
  text-align: center;
  text-decoration: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

#accountContent a#hlnkChangePassword:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

#accountContent .customer-service-box {
  margin-top: 16px;
  padding: 12px 14px;
  background: var(--acct-panel);
  border: 1px solid var(--acct-line);
  border-radius: 8px;
}

#accountContent .customer-service {
  display: block;
  margin: 0;
  font-size: 13px;
  line-height: 1.5;
  color: var(--acct-gray-500);
}

#accountContent a.customer-service {
  margin-top: 2px;
  color: var(--acct-primary);
  font-weight: 500;
  text-decoration: none;
  overflow-wrap: anywhere;
}

#accountContent a.customer-service:hover {
  text-decoration: underline;
}

/* ---------- Data tables (clubs, allocations, payment methods) ---------- */

/* the panels inherit the product-card grid from `.data.three-items-across` */
#accountContent .json-data,
#accountContent .json-data.data,
#accountContent .json-data.data.three-items-across,
#accountContent .wineclub-membership,
#accountContent .wineclub-allocation,
#accountContent .card-on-file {
  display: block !important;
  grid-template-columns: none !important;
  column-gap: 0 !important;
  row-gap: 0 !important;
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
  background: none !important;
}

/* the wine-club/allocation panels ship an inert <div class="table template">
   used as the client-side row template; the card-on-file .template wrapper is
   real content, so only the table variant is hidden. */
#accountContent .table.template,
#accountContent .hidden,
#accountContent .pending-releases-alert,
#accountContent .allocation-pending-releases-alert,
#accountContent .jqmDialog {
  display: none !important;
}

/* Header and data rows are separate grid containers, so they only line up if
   every row is given the *same explicit* track sizes — content-derived tracks
   (auto/fr from each row's own text) can never match across rows. */
#accountContent .table {
  display: block;
  width: 100%;
  border: 1px solid var(--acct-line);
  border-radius: 8px;
  overflow: hidden;
}

#accountContent .table .row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 150px 150px 210px;
  align-items: center;
  gap: 16px;
  padding: 14px 16px;
  margin: 0;
  border-bottom: 1px solid var(--acct-line-soft);
}

#accountContent .table .row:last-child {
  border-bottom: none;
}

#accountContent .table .row.h {
  padding-top: 10px;
  padding-bottom: 10px;
  background: var(--acct-surface);
  border-bottom: 1px solid var(--acct-line-strong);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--acct-gray-500);
}

#accountContent .table .row:not(.h):hover {
  background: var(--acct-surface-hover);
}

#accountContent .table .row > div {
  min-width: 0;
  padding: 0;
  border: none;
}

#accountContent .table .row span {
  font-size: 14px;
  color: var(--acct-gray-700);
  overflow-wrap: anywhere;
}

#accountContent .mobile-label {
  display: none;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--acct-gray-400);
}

/* Row actions — stacked so every button is exactly the same width,
   whether or not the "Edit Club Order" button is present on that row. */
#accountContent .table .cmd,
#accountContent .cmd.align-right {
  display: flex !important;
  flex-direction: column;
  align-items: stretch;
  justify-content: center;
  gap: 8px;
  text-align: center;
}

/* the pending-order wrapper must not shrink its button */
#accountContent .table .cmd .pending-order {
  display: block;
  width: 100%;
}



#accountContent .table .cmd .btn,
#accountContent .div-add-card-on-file .btn,
#accountContent .customer-service-box .btn,
#accountContent a#hlnkChangePassword {
  display: block;
  width: 100%;
  margin: 0 !important;
  padding: 8px 14px !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  border-radius: var(--acct-radius) !important;
  white-space: nowrap;
}

/* secondary action styling for the non-primary row button */
#accountContent .table .cmd .btn:not(.modal-popup),
#accountContent .table .cmd .pending-order + input + .btn {
  background: var(--acct-white) !important;
  color: var(--acct-gray-700) !important;
  border: 1px solid var(--acct-btn-border) !important;
}

#accountContent .table .cmd .btn:not(.modal-popup):hover,
#accountContent .table .cmd .pending-order + input + .btn:hover {
  background: var(--acct-btn-hover-bg) !important;
  color: var(--acct-gray-800) !important;
  border-color: var(--acct-btn-border-hover) !important;
}

#accountContent .info-text {
  margin: 0 0 14px;
  padding: 12px 14px;
  background: var(--acct-panel);
  border: 1px solid var(--acct-line);
  border-radius: 8px;
  font-size: 13px;
  color: var(--acct-gray-600);
}

#accountContent .section > .content > br,
#accountContent .card-on-file > br,
#accountContent .card-on-file .template > br,
#accountContent .account_address > .column > br {
  display: none;
}

/* A value that starts with <br> (empty address line 1) opens with a blank
   row and knocks the label out of alignment. */
#accountContent .ciRegularView .col > span > br:first-child {
  display: none;
}

#accountContent .div-add-card-on-file {
  margin-top: 14px;
}

/* ---------- Empty states ---------- */
#accountContent .empty,
#accountContent .customer-order-history > div {
  padding: 28px 16px !important;
  background: var(--acct-surface);
  border: 1px dashed #e0e0e0;
  border-radius: 8px;
  text-align: center;
  font-size: 14px;
  color: var(--acct-gray-500);
}

#accountContent .customer-order-history h2 {
  margin: 0 !important;
  font-family: var(--acct-font) !important;
  font-size: 15px !important;
  font-weight: 500 !important;
  color: var(--acct-gray-500) !important;
}

/* ---------- Scroll-to highlight (set by goToWineClubReleases) ---------- */
#accountContent .section-highlight {
  border-color: var(--acct-primary);
  box-shadow: 0 0 0 3px var(--acct-primary-ring);
  transition: box-shadow 0.3s ease, border-color 0.3s ease;
}

/* ---------- Responsive ---------- */
@media only screen and (max-width: 860px) {
  #accountContent .table {
    display: block;
    border: none;
    border-radius: 0;
    overflow: visible;
  }

  #accountContent .table .row.h {
    display: none !important;
  }

  #accountContent .table .row {
    display: block;
    padding: 14px;
    margin-bottom: 10px;
    border: 1px solid var(--acct-line);
    border-radius: 8px;
  }

  #accountContent .table .row > div {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 4px 0;
  }

  #accountContent .mobile-label {
    display: block;
    flex: 0 0 auto;
  }

  #accountContent .table .row > div span {
    text-align: right;
  }

  #accountContent .table .cmd,
  #accountContent .cmd.align-right {
    justify-content: stretch;
    padding-top: 12px !important;
    margin-top: 8px;
    border-top: 1px solid var(--acct-line-soft);
  }

  #accountContent .table .cmd .btn {
    flex: 1 1 auto;
    text-align: center;
  }
}

@media only screen and (max-width: 640px) {
  #accountContent {
    padding: 0 var(--acct-space-xs);
  }

  #accountContent .section > .header {
    padding: 14px 16px !important;
    font-size: 14px !important;
  }

  #accountContent .section > .content {
    padding: 16px;
  }

  #accountContent .ciRegularView .row {
    grid-template-columns: 1fr;
    gap: 2px;
  }
}

/* ==========================================================================
   WINE CLUB MEMBERSHIP POPUP — remaining panels
   Variants of this page also render a nested "pending shipment" section, the
   waiting-list / on-hold table, and the standalone checkbox row that sits
   outside its table. None of those were covered by the field-row styles.
   ========================================================================== */

/* The popup renders standalone (no site chrome), so give the page some air */
body:not(.has-overlay) #pageContent > .wine-club-membership-details,
body:not(.has-overlay) #pageContent > .wine-club-shipment-details,
#pageContent > div[id$="upd"] > .wine-club-membership-details {
  margin-top: var(--acct-space-md);
}

/* ---------- Nested section (pending wine club release) ---------- */
.wine-club-membership-details .section:not(.data) {
  display: block;
  margin: var(--acct-space-lg) 0 0;
  padding: var(--acct-space-md);
  background: var(--acct-panel);
  border: 1px solid var(--acct-line);
  border-radius: 8px;
}

.wine-club-membership-details .section:not(.data) > .header {
  margin: 0 0 var(--acct-space-2xs);
  padding: 0;
  background: none !important;
  border: none;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  line-height: 1.4;
  letter-spacing: 0 !important;
  text-align: left !important;
  text-transform: none !important;
}

/* the inert row template above the real row */
.wine-club-membership-details .table.template {
  display: none !important;
}

/* the real row sits *outside* the table, so style it directly */
.wine-club-membership-details .section:not(.data) > .row {
  display: flex;
  align-items: center;
  gap: var(--acct-space-2xs);
  width: 100%;
  margin: 0;
  padding: var(--acct-space-2xs) 0 0;
  border: none;
  font-size: 14px;
  color: var(--acct-gray-700);
}

.wine-club-membership-details .section:not(.data) > .row > div {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  width: 100%;
}

/* ---------- Checkboxes (pending release, waiting list, privileges) ---------- */
.wine-club-membership-details input[type="checkbox"],
.wine-club-shipment-details input[type="checkbox"] {
  width: 16px;
  height: 16px;
  margin: 0 4px 0 0;
  accent-color: var(--acct-primary);
  cursor: pointer;
  flex: 0 0 auto;
}

.wine-club-membership-details input[type="checkbox"]:disabled {
  cursor: default;
  opacity: 0.6;
}

.wine-club-membership-details input[type="checkbox"] + label,
.wine-club-membership-details .aspNetDisabled label {
  margin: 0;
  font-family: var(--acct-font);
  font-size: 14px;
  font-weight: 400 !important;
  color: var(--acct-gray-700);
  cursor: pointer;
}

.wine-club-membership-details .aspNetDisabled {
  display: inline-flex !important;
  align-items: center;
  gap: 4px;
  font-weight: 400 !important;
}

/* ---------- "On Hold Until" date field ----------
   Hidden by the page today (inline display:none), styled so it reads correctly
   whenever the club config turns holds on. */
.wine-club-membership-details .col > strong {
  display: block;
  margin-bottom: var(--acct-space-3xs);
  font-family: var(--acct-font);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: var(--acct-text-dark);
}

.wine-club-membership-details .col > span:has(> .txt.calendar) {
  display: flex;
  align-items: center;
  gap: var(--acct-space-2xs);
  width: 100%;
}

.wine-club-membership-details .txt.calendar {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 44px;
  padding: 0 var(--acct-space-xs);
  border: 1px solid var(--acct-border);
  border-radius: var(--acct-radius);
  font-family: var(--acct-font);
  font-size: 14px;
  color: var(--acct-text-dark);
}

.wine-club-membership-details .txt.calendar:focus {
  border-color: var(--acct-primary);
  outline: none;
}

.wine-club-membership-details .calendar-img {
  flex: 0 0 auto;
  width: 20px;
  height: 20px;
  margin: 0;
}

/* jQuery UI datepicker popup, when the hold field is enabled */
#ui-datepicker-div {
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  border: 1px solid var(--acct-line-strong) !important;
  border-radius: 8px !important;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12) !important;
  z-index: 10001 !important;
  overflow: hidden;
}

/* loader styling lives in the APP BOOT / LOADING STATE block */

@media only screen and (max-width: 640px) {
  .wine-club-membership-details .section:not(.data) {
    padding: var(--acct-space-sm);
  }
}

/* ==========================================================================
   AUTH PAGES — sign in / sign up / guest / forgot password
   Angular components (app-sign-in etc.) inside :is(.container-fluid.auth, .container-fluid.forgot-password).
   Unbranded card on Inter, matching the account dashboard.
   ========================================================================== */

:is(.container-fluid.auth, .container-fluid.forgot-password) {
  box-sizing: border-box;
  width: 100%;
  max-width: 460px !important;
  margin: var(--acct-space-2xl) auto !important;
  padding: 32px !important;
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong);
  border-radius: 12px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
  color: var(--acct-gray-700);
  font-size: 14px;
  line-height: 1.5;
  text-align: left;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) * {
  box-sizing: border-box;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) > .container-fluid,
:is(.container-fluid.auth, .container-fluid.forgot-password) form {
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* ---------- Heading ----------
   sign-in leads with an h1, but sign-up and the guest/reset panes head their
   sections with an h2 — both are page furniture and take the same face */
:is(.container-fluid.auth, .container-fluid.forgot-password) h1 {
  margin: 0 0 24px !important;
  font-size: 22px !important;
  line-height: 1.3 !important;
  color: var(--acct-gray-800) !important;
  text-align: center;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) h2 {
  margin: 0 0 16px !important;
  font-size: 17px !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em !important;
  line-height: 1.4 !important;
  color: var(--acct-gray-800) !important;
  text-transform: none !important;
}

/* ---------- Fields ---------- */
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group {
  margin-bottom: 16px;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) label {
  display: block;
  margin-bottom: 6px;
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-gray-600);
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .required-asterisk {
  margin-left: 2px;
  color: var(--acct-error);
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-control,
:is(.container-fluid.auth, .container-fluid.forgot-password) input[type="text"],
:is(.container-fluid.auth, .container-fluid.forgot-password) input[type="email"],
:is(.container-fluid.auth, .container-fluid.forgot-password) input[type="password"],
:is(.container-fluid.auth, .container-fluid.forgot-password) input[type="tel"],
:is(.container-fluid.auth, .container-fluid.forgot-password) select {
  width: 100%;
  min-height: 44px;
  padding: 10px 14px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: 8px;
  font-family: var(--acct-font);
  font-size: 14px;
  color: var(--acct-gray-800);
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-control::placeholder {
  color: var(--acct-gray-400);
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-control:focus,
:is(.container-fluid.auth, .container-fluid.forgot-password) input:focus,
:is(.container-fluid.auth, .container-fluid.forgot-password) select:focus {
  border-color: var(--acct-primary);
  box-shadow: 0 0 0 3px var(--acct-primary-ring);
  outline: none;
}

/* Angular validation states */
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-control.ng-invalid.ng-dirty,
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-control.is-invalid {
  border-color: var(--acct-error);
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .invalid-feedback,
:is(.container-fluid.auth, .container-fluid.forgot-password) .error {
  display: block;
  margin-top: 6px;
  font-size: 12px;
  color: var(--acct-error);
}

/* ---------- Buttons ---------- */
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn,
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn.btn-block {
  display: block;
  width: 100%;
  min-height: 44px;
  margin: 0 !important;
  padding: 11px 16px !important;
  border-radius: 8px !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  line-height: 1.4 !important;
  text-align: center;
  text-transform: none !important;
  text-decoration: none !important;
  cursor: pointer;
  transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

/* Continue / Sign In — same neutral treatment as every other button */
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn.sign-in {
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  color: var(--acct-gray-700) !important;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .btn.sign-in:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

/* secondary: Create an Account / Shop as Guest / Join Club */
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn.sign-up,
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn.shop-as-guest,
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn.quick-order {
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  color: var(--acct-gray-700) !important;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .btn.sign-up:hover,
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn.shop-as-guest:hover,
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn.quick-order:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

/* `form.disabled` is present on a valid, fillable form, so it must not be
   treated as a disabled state — only a real :disabled attribute dims. */
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn:disabled {
  opacity: 0.55;
}

/* ---------- Links ---------- */
:is(.container-fluid.auth, .container-fluid.forgot-password) .forgot-password {
  display: inline-block;
  width: 100%;
  font-size: 13px;
  color: var(--acct-gray-600);
  text-align: center;
  text-decoration: none;
}

/* Password field: label left, "Forgot your password?" right, input below.
   The component floats that link, which dropped it out of flow and shoved
   the input up beside the label. */
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.password {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 6px 12px;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.password > label {
  flex: 1 1 auto;
  margin-bottom: 0;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.password > .forgot-password {
  float: none !important;
  flex: 0 0 auto;
  width: auto;
  margin: 0 !important;
  text-align: right;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.password > .form-control,
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.password > input {
  flex: 1 1 100%;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .forgot-password:hover {
  color: var(--acct-primary);
  text-decoration: underline;
}

/* ---------- Divider between sign-in and the alternatives ---------- */
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.spacer {
  margin: 24px 0 20px !important;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) hr {
  margin: 0;
  border: none;
  border-top: 1px solid var(--acct-line);
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .container-fluid.sign-up {
  margin-top: 0 !important;
}

/* ---------- Join club promo ---------- */
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.join-club {
  margin-top: 20px !important;
  padding-top: 20px;
  border-top: 1px solid var(--acct-line);
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.join-club p {
  margin: 0 0 10px;
  font-size: 13px;
  color: var(--acct-gray-600);
  text-align: center;
}

@media only screen and (max-width: 520px) {
  :is(.container-fluid.auth, .container-fluid.forgot-password) {
    margin: var(--acct-space-md) auto !important;
    padding: 20px !important;
    border-radius: 10px;
  }

  :is(.container-fluid.auth, .container-fluid.forgot-password) h1 {
    font-size: 20px !important;
  }
}

/* ---------- Sign-up / forgot-password variants ----------
   Sign-up nests a Bootstrap `.row > .col-12.col-md-5` inside the card, which
   squeezed the form to ~40% of an already narrow column. Forgot-password
   ships an intro paragraph and a "Sign In" back link instead of the
   alternatives block. */
:is(.container-fluid.auth, .container-fluid.forgot-password) .row {
  display: block !important;
  width: 100% !important;
  margin: 0 !important;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .row > [class*="col-"] {
  flex: 1 1 100% !important;
  width: 100% !important;
  max-width: 100% !important;
  padding: 0 !important;
  margin: 0 !important;
}

/* Sign-up's submit has no `.sign-in` class — treat any unqualified
   block button in an auth card as the primary action. */
:is(.container-fluid.auth, .container-fluid.forgot-password)
  .btn.btn-block:not(.sign-up):not(.shop-as-guest):not(.quick-order) {
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  color: var(--acct-gray-700) !important;
}

:is(.container-fluid.auth, .container-fluid.forgot-password)
  .btn.btn-block:not(.sign-up):not(.shop-as-guest):not(.quick-order):hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

:is(.container-fluid.auth, .container-fluid.forgot-password)
  .btn.btn-block:disabled:hover {
  background: var(--acct-white) !important;
  border-color: var(--acct-btn-border) !important;
  color: var(--acct-gray-700) !important;
}

/* Intro copy above the field */
:is(.container-fluid.auth, .container-fluid.forgot-password) > form p,
:is(.container-fluid.auth, .container-fluid.forgot-password) form > .container-fluid > p {
  margin: 0 0 18px;
  font-size: 13px;
  line-height: 1.5;
  color: var(--acct-gray-500);
  text-align: center;
}

/* "Sign In" back link under the submit */
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.cancel {
  margin-top: 16px !important;
  padding-top: 16px;
  border-top: 1px solid var(--acct-line);
  text-align: center;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.cancel a {
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-gray-600);
  text-decoration: none;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group.cancel a:hover {
  color: var(--acct-primary);
  text-decoration: underline;
}

/* the hidden anti-autofill password input the components inject */
:is(.container-fluid.auth, .container-fluid.forgot-password) input.d-none {
  display: none !important;
}

/* empty breadcrumb slot above the auth card */
#auth-breadcrumb:empty,
app-bread-crumb:empty {
  display: none;
}

app-auth-layout > .mb-3:has(app-bread-crumb:empty) {
  margin-bottom: 0 !important;
}

/* ---------- Sign-up: full registration step ----------
   Adds a username summary line, Bootstrap `.form-row` wrappers, a custom
   checkbox and a password-requirements panel that the first step doesn't
   render. */
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-row {
  display: block !important;
  width: 100% !important;
  margin: 0 !important;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-row > [class*="col-"] {
  flex: 1 1 100% !important;
  width: 100% !important;
  max-width: 100% !important;
  padding: 0 !important;
  margin: 0 !important;
}

/* Username summary ("Username: test@example.com  change") */
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group:has(.change-username) {
  margin-bottom: 20px !important;
  padding: 14px 16px !important;
  background: var(--acct-panel);
  border: 1px solid var(--acct-line);
  border-radius: 8px;
  font-size: 14px;
  color: var(--acct-gray-700);
  overflow-wrap: anywhere;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group:has(.change-username) label {
  display: block;
  margin-bottom: 6px;
  font-size: 12px;
  font-weight: 500;
  color: var(--acct-gray-500);
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group:has(.change-username) br {
  display: none;
}

/* the email + "change" link share a line, whether wrapped in a div or not */
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group:has(.change-username) > div {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 0 4px;
  min-width: 0;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .form-group:has(.change-username) .d-none {
  display: none !important;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .change-username {
  margin: 0 0 0 8px !important;
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-primary);
  text-decoration: none;
  white-space: nowrap;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .change-username:hover {
  text-decoration: underline;
}

/* Submit row spacing */
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-row.mt-4 {
  margin-top: 22px !important;
}

/* "Keep me signed in" — Bootstrap custom-control without Bootstrap's CSS */
:is(.container-fluid.auth, .container-fluid.forgot-password) .custom-control.custom-checkbox {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  padding: 0 !important;
  margin-top: 12px;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .custom-control-input {
  position: static !important;
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin: 0;
  opacity: 1 !important;
  accent-color: var(--acct-primary);
  cursor: pointer;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .custom-control-label {
  margin: 0;
  font-size: 13px;
  font-weight: 400 !important;
  color: var(--acct-gray-600);
  cursor: pointer;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .custom-control-label::before,
:is(.container-fluid.auth, .container-fluid.forgot-password) .custom-control-label::after {
  content: none !important;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .custom-checkbox a {
  margin: 0 !important;
  font-size: 13px;
  color: var(--acct-gray-500);
  text-decoration: underline;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .custom-checkbox a:hover {
  color: var(--acct-primary);
}

/* Password requirements panel */
:is(.container-fluid.auth, .container-fluid.forgot-password) .password-requirements {
  margin-top: 22px !important;
  padding: 14px 16px !important;
  background: var(--acct-panel);
  border: 1px solid var(--acct-line);
  border-radius: 8px;
  font-size: 12px !important;
  line-height: 1.6;
  color: var(--acct-gray-500);
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .password-requirements strong {
  display: block;
  margin-bottom: 8px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--acct-gray-600);
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .password-requirements .pl-3 {
  padding-left: 0 !important;
}

/* each requirement gets a bullet instead of relying on Bootstrap padding */
:is(.container-fluid.auth, .container-fluid.forgot-password) .password-requirements .pl-3 > div {
  position: relative;
  padding-left: 16px;
}

:is(.container-fluid.auth, .container-fluid.forgot-password) .password-requirements .pl-3 > div::before {
  content: "";
  position: absolute;
  top: 8px;
  left: 4px;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--acct-gray-400);
}

/* readonly hidden username input the component injects */
:is(.container-fluid.auth, .container-fluid.forgot-password) input[readonly].d-none {
  display: none !important;
}

.fax {
  display: none !important;
  visibility: hidden !important;
}

#accountContent .label::after {
  content: ":";
}
/* ==========================================================================
   ADDRESS BOOK POPUP (PopupCustomerAddresses.aspx)
   Legacy layout positioned the header cells with percentage padding
   (7% / 17%) and painted the row wrapper with a gray background. Replaced
   with a real grid + card list on Inter, matching the account dashboard.
   ========================================================================== */

body.popup {
  min-width: 0;
  width: 100%;
  background: var(--acct-white);
  font-family: var(--acct-font);
  color: var(--acct-gray-700);
}

body.popup #pageContent {
  max-width: 720px;
  margin: 0 auto;
  padding: 24px 20px 28px;
  box-sizing: border-box;
}

.addr-popup {
  overflow: visible;
  font-size: 14px;
  line-height: 1.5;
  text-align: left;
}

/* the CMS pads this page with bare <br> tags */
.addr-popup > br,
.addr-popup h2 + br {
  display: none;
}

.addr-popup h2 {
  margin: 0 0 4px !important;
  font-family: var(--acct-font) !important;
  font-size: 20px !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em;
  text-transform: none !important;
  color: var(--acct-gray-800) !important;
}

.addr-popup #ctl00_cphBody_divMess:empty {
  display: none;
}

/* ---------- Add new address ---------- */
.addr-popup .btn-row {
  display: flex;
  justify-content: flex-start;
  margin: 16px 0 !important;
}

.addr-popup .btn-row .btn {
  padding: 9px 16px !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  border-radius: 8px !important;
}

/* ---------- Address list ---------- */
.addr-popup .addr-table {
  display: block;
  width: 100%;
  margin: 0 0 20px;
  border: 1px solid var(--acct-line);
  border-radius: 10px;
  overflow: hidden;
  background: var(--acct-white);
}

/* header + rows share one explicit template so the columns line up */
.addr-popup .addr-table .divRowHeader,
.addr-popup .addr-table > div {
  display: grid !important;
  grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) 132px;
  align-items: start;
  gap: 16px;
  width: 100% !important;
  margin: 0 !important;
  padding: 14px 16px !important;
  background: var(--acct-white) !important;
  border-bottom: 1px solid var(--acct-line-soft);
  flex-wrap: nowrap !important;
}

.addr-popup .addr-table > div:last-child {
  border-bottom: none;
}

.addr-popup .addr-table .divRowHeader {
  padding-top: 10px !important;
  padding-bottom: 10px !important;
  background: var(--acct-surface) !important;
  border-bottom: 1px solid var(--acct-line-strong);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--acct-gray-500);
}

.addr-popup .addr-table .divRowHeader > div {
  padding: 0 !important;
  border: none !important;
}

.addr-popup .addr-table .divRowHeader b {
  font-weight: 600;
}

/* the percentage-padding hacks that used to fake column positions */
.addr-popup .divRowHeader .headerCellAddress,
.addr-popup .divRowHeader .headerCellContact {
  padding-left: 0 !important;
}

/* Cells */
.addr-popup .addr-table > div .col,
.addr-popup .default-ship .col {
  display: block !important;
  width: auto !important;
  min-width: 0;
  padding: 0 !important;
  border: none !important;
  font-size: 14px !important;
  color: var(--acct-gray-700);
  overflow-wrap: anywhere;
}

/* the legacy gray fill behind each row */
.addr-popup .default-ship {
  background-color: transparent !important;
}

/* "[ PRIMARY ]" flag */
.addr-popup .addr-table > div .col > b:first-child {
  display: inline-block;
  margin-bottom: 4px;
  padding: 2px 8px;
  background: var(--acct-primary-tint);
  border-radius: 999px;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--acct-primary);
}

.addr-popup .addr-table > div .col > b:first-child + br {
  display: none;
}

.addr-popup .addr-main,
.addr-popup .addr-secondary {
  display: block !important;
  vertical-align: top;
}

.addr-popup .addr-secondary:not(:empty) {
  margin-top: 2px;
  color: var(--acct-gray-500);
}

/* Action cell */
.addr-popup .addr-table > div .col.cmd,
.addr-popup .default-ship .col:last-child {
  display: flex !important;
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-start;
  gap: 8px;
  width: auto !important;
  text-align: center;
}

.addr-popup .addr-table > div .col.cmd .btn,
.addr-popup .addr-table > div .col:last-child .btn {
  margin: 0 !important;
  padding: 8px 12px !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  border-radius: 8px !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  color: var(--acct-gray-700) !important;
  white-space: nowrap;
}

.addr-popup .addr-table > div .col.cmd .btn:hover,
.addr-popup .addr-table > div .col:last-child .btn:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

/* radio/checkbox selection column, when the page renders one */
.addr-popup .addr-table > div .selection,
.addr-popup .default-ship .col .selection {
  width: auto !important;
  padding: 0 !important;
  border: none !important;
}

/* mobile labels are desktop-hidden */
.addr-popup .mobile-label {
  display: none;
  margin-bottom: 2px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--acct-gray-400);
}

/* ---------- Done ---------- */
.addr-popup > div[style*="text-align: center"] {
  display: flex;
  justify-content: center;
  padding-top: 4px;
}

.addr-popup > div[style*="text-align: center"] .btn {
  min-width: 160px;
  padding: 10px 20px !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  border-radius: 8px !important;
}

/* ---------- Responsive ---------- */
@media only screen and (max-width: 600px) {
  body.popup #pageContent {
    padding: 16px;
  }

  .addr-popup .addr-table {
    border: none;
    border-radius: 0;
    background: none;
  }

  .addr-popup .addr-table .divRowHeader {
    display: none !important;
  }

  .addr-popup .addr-table > div {
    display: block !important;
    margin-bottom: 10px !important;
    padding: 14px !important;
    border: 1px solid var(--acct-line);
    border-radius: 10px;
  }

  .addr-popup .addr-table > div .col {
    margin-bottom: 10px;
  }

  .addr-popup .mobile-label {
    display: block;
  }

  .addr-popup .addr-table > div .col.cmd {
    margin-bottom: 0;
  }

  .addr-popup .addr-table > div .col.cmd .btn {
    width: 100%;
  }
}

/* ---------- Address column heading + its Change action ----------
   main.js lifts the "change" link out of the Name row and drops it here. */
#accountContent .account_address .column-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}

#accountContent .account_address .column-head h3 {
  margin: 0 !important;
  flex: 1 1 auto;
  min-width: 0;
}

#accountContent .btn-change-address {
  flex: 0 0 auto;
  padding: 6px 12px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-bottom: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  color: var(--acct-gray-700) !important;
  font-size: 12px;
  font-weight: 500;
  line-height: 1.4;
  text-decoration: none !important;
  white-space: nowrap;
  transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

#accountContent .btn-change-address:hover {
  background: var(--acct-btn-hover-bg);
  border-color: var(--acct-btn-border-hover);
  color: var(--acct-gray-800) !important;
}

/* the emptied wrapper the link used to live in */
#accountContent .ciRegularView .col:last-child > span[style]:not(:has(a:not([style*="display: none"]))) {
  display: none;
}

/* ==========================================================================
   BASE .btn INSIDE THE ACCOUNT SURFACES
   main.css styles a bare `.btn` with the storefront's brand colour. Anything
   in these surfaces that wasn't given an explicit treatment above inherited
   it. This block neutralises `.btn` for every account root; the outlined /
   secondary variants declared earlier keep winning via !important.
   ========================================================================== */

#accountContent .btn,
.activeCart-panel .btn,
.wine-club-membership-details .btn,
.wine-club-shipment-details .btn,
.addr-popup .btn,
body.popup .btn,
.ui-dialog.ui-widget .btn,
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn {
  display: inline-block;
  background: var(--acct-white);
  background-color: var(--acct-white);
  color: var(--acct-gray-700);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  padding: 9px 16px;
  font-family: var(--acct-font);
  font-size: 13px;
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: 0;
  text-transform: none;
  text-decoration: none;
  text-align: center;
  cursor: pointer;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease;
  -webkit-font-smoothing: antialiased;
}

#accountContent .btn:hover,
.activeCart-panel .btn:hover,
.wine-club-membership-details .btn:hover,
.wine-club-shipment-details .btn:hover,
.addr-popup .btn:hover,
body.popup .btn:hover,
.ui-dialog.ui-widget .btn:hover,
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn:hover {
  background: var(--acct-btn-hover-bg);
  background-color: var(--acct-btn-hover-bg);
  border-color: var(--acct-btn-border-hover);
  color: var(--acct-gray-800);
  transform: none;
  opacity: 1;
}

/* `.btn.checkout` carries !important in main.css — restate it here */
#accountContent .btn.checkout,
.wine-club-membership-details .btn.checkout,
.wine-club-shipment-details .btn.checkout,
.addr-popup .btn.checkout,
body.popup .btn.checkout,
.ui-dialog.ui-widget .btn.checkout {
  background-color: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  color: var(--acct-gray-700) !important;
  border-radius: var(--acct-radius) !important;
  letter-spacing: 0 !important;
}

#accountContent .btn.checkout:hover,
.wine-club-membership-details .btn.checkout:hover,
.wine-club-shipment-details .btn.checkout:hover,
.addr-popup .btn.checkout:hover,
body.popup .btn.checkout:hover,
.ui-dialog.ui-widget .btn.checkout:hover {
  background-color: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

/* ==========================================================================
   CHANGE PASSWORD POPUP (ChangePassword.aspx)
   Legacy markup lays the rows out as `display: table` with a 150px label
   cell. Rebuilt as a stacked form card on the shared account tokens.
   ========================================================================== */

.change-password {
  box-sizing: border-box;
  width: 100%;
  max-width: 460px;
  margin: 0 auto;
  padding: var(--acct-space-lg);
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius-card);
  font-family: var(--acct-font);
  font-size: 14px;
  line-height: 1.5;
  color: var(--acct-gray-700);
  text-align: left;
}

.change-password * {
  box-sizing: border-box;
}

.change-password h2 {
  margin: 0 0 6px !important;
  font-family: var(--acct-font) !important;
  font-size: 20px !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em;
  text-transform: none !important;
  color: var(--acct-gray-800) !important;
}

/* the requirements hint */
.change-password > p {
  margin: 0 0 20px !important;
  font-size: 13px;
  color: var(--acct-text-light);
}

.change-password > p i {
  font-style: normal;
}

.change-password #ctl00_cphBody_divMess:empty {
  display: none;
}

.change-password #ctl00_cphBody_divMess:not(:empty) {
  margin-bottom: 16px;
  padding: 12px 14px;
  background: #fdf2f2;
  border: 1px solid #f5c6cb;
  border-radius: var(--acct-radius);
  font-size: 13px;
  color: #9b2c2c;
}

/* ---------- Fields: label above input ---------- */
.change-password .row {
  display: block !important;
  width: 100% !important;
  margin: 0 0 16px !important;
}

.change-password .col,
.change-password .col:first-child {
  display: block !important;
  width: 100% !important;
  padding: 0 !important;
  vertical-align: baseline;
}

.change-password .label,
.change-password label {
  display: block;
  margin-bottom: 6px;
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-gray-600);
}

.change-password input[type="password"],
.change-password .txtbig,
.change-password .txt {
  width: 100% !important;
  min-height: 44px;
  padding: 10px 14px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  font-family: var(--acct-font);
  font-size: 14px;
  color: var(--acct-gray-800);
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

.change-password input[type="password"]:focus,
.change-password .txtbig:focus {
  border-color: var(--acct-primary);
  box-shadow: 0 0 0 3px var(--acct-primary-ring);
  outline: none;
}

/* ---------- Save ---------- */
.change-password #div1 {
  height: auto !important;
  margin-top: 22px;
  padding-top: 18px;
  border-top: 1px solid var(--acct-line);
  text-align: center;
}

.change-password .btn,
.change-password .btn.lnk {
  display: block;
  width: 100%;
  padding: 11px 16px;
  font-size: 14px;
  font-weight: 500;
  text-decoration: none !important;
  border-radius: var(--acct-radius);
}

@media only screen and (max-width: 520px) {
  .change-password {
    padding: var(--acct-space-sm);
    border: none;
    border-radius: 0;
  }
}

/* ==========================================================================
   BASKET (app-basket / #basket.basket)
   Angular + Bootstrap grid. The grid itself is fine — this restyles the card,
   the line items, the qty control and the footer actions onto the shared
   account tokens, and neutralises Bootstrap's `.btn-primary`.
   ========================================================================== */

#basket.basket {
  box-sizing: border-box;
  width: 100%;
  max-width: 1100px;
  margin: 0 auto;
  padding: 0 var(--acct-space-sm);
  font-family: var(--acct-font);
  font-size: 14px;
  line-height: 1.5;
  color: var(--acct-gray-700);
}

#basket.basket * {
  box-sizing: border-box;
}

/* ---------- Card shell ---------- */
#basket.basket .section.card {
  margin: 0 0 var(--acct-space-lg);
  padding: 0;
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius-card);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
  overflow: hidden;
}

/* ---------- Header bar ---------- */
#basket.basket .row.header {
  display: flex;
  align-items: center;
  margin: 0;
  padding: 16px 20px !important;
  background: var(--acct-surface) !important;
  border: none;
  border-bottom: 1px solid var(--acct-line-strong);
  border-radius: 0;
  color: var(--acct-gray-800) !important;
  font-family: var(--acct-font) !important;
  font-size: 15px !important;
  font-weight: 600;
  line-height: 1.3;
  text-align: left !important;
  text-transform: none;
  overflow: visible;
}

#basket.basket .row.header .icon {
  margin-right: 8px;
  color: var(--acct-gray-500);
  font-size: 14px;
}

/* "Unit Price" column label */
#basket.basket .row.header .text-right {
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--acct-gray-500) !important;
}

/* ---------- Line items ---------- */
#basket.basket .row.content {
  margin: 0;
}

#basket.basket .row.content > .col {
  padding: 0;
}

#basket.basket [id^="line-item-"] {
  margin: 0 !important;
  padding: 16px 20px !important;
  border-top: 1px solid var(--acct-line-soft);
}

#basket.basket [id^="line-item-"]:first-child {
  border-top: none;
}

#basket.basket [id^="line-item-"]:hover {
  background: var(--acct-surface-hover);
}

/* Thumbnail */
#basket.basket .img-thumbnail {
  width: 100%;
  max-width: 72px;
  height: auto;
  padding: 0;
  background: none;
  border: none !important;
  border-radius: var(--acct-radius);
}

/* Product title */
#basket.basket h3.product-title {
  margin: 0 0 4px !important;
  font-family: var(--acct-font) !important;
  font-size: 15px !important;
  font-weight: 600 !important;
  line-height: 1.35 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
}

#basket.basket h3.product-title a {
  color: var(--acct-gray-800) !important;
  text-decoration: none;
}

#basket.basket h3.product-title a:hover {
  color: var(--acct-primary) !important;
  text-decoration: underline;
}

/* ---------- Qty selector ---------- */
#basket.basket .product-qty {
  padding-top: 6px !important;
}

#basket.basket .qty-selector .btn,
#basket.basket #button-qty-selector {
  display: inline-flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  width: auto !important;
  min-width: 96px;
  min-height: 38px;
  padding: 6px 12px !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  box-shadow: none !important;
}

#basket.basket .qty-selector .btn:hover,
#basket.basket #button-qty-selector:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

#basket.basket .qty-selector .caret {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 2px;
  border-top: 4px solid currentColor;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}

/* dropdown panel, when open */
#basket.basket .qty-selector .dropdown-menu {
  padding: 4px 0;
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
  font-size: 13px;
}

/* ---------- Discounts ---------- */
#basket.basket .discounts ul {
  margin: 6px 0 0;
  padding: 0;
  list-style: none;
}

#basket.basket .discounts li {
  font-size: 12px !important;
  line-height: 1.5;
  color: var(--acct-gray-500) !important;
}

/* ---------- Price ---------- */
#basket.basket app-product-price {
  display: block;
}

#basket.basket .price {
  font-family: var(--acct-font) !important;
  font-size: 15px !important;
  font-weight: 600 !important;
  color: var(--acct-gray-800) !important;
  white-space: nowrap;
}

#basket.basket .price.retail.del,
#basket.basket .price.del {
  margin-top: 2px;
  font-size: 12px !important;
  font-weight: 400 !important;
  text-decoration: line-through;
  color: var(--acct-gray-500) !important;
}

/* ---------- Footer ---------- */
#basket.basket .row.content.footer {
  padding: 16px 20px;
  background: var(--acct-surface);
  border-top: 1px solid var(--acct-line-strong);
}

#basket.basket .row.content.footer .border-top {
  border-top: none !important;
}

#basket.basket .row.content.footer strong {
  margin-left: 6px;
  font-size: 18px;
  font-weight: 600;
  color: var(--acct-gray-800);
}

/* Actions — all three share the account button treatment */
#basket.basket .btn,
#basket.basket .btn.btn-primary {
  min-height: 42px;
  padding: 10px 18px !important;
  background: var(--acct-white) !important;
  background-color: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  line-height: 1.4 !important;
  text-transform: none !important;
  text-decoration: none !important;
  box-shadow: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease;
}

#basket.basket .btn:hover,
#basket.basket .btn.btn-primary:hover {
  background: var(--acct-btn-hover-bg) !important;
  background-color: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

/* Checkout is only wider — same neutral treatment as every other button */
#basket.basket .btn.checkout,
#basket.basket .btn.btn-lg.checkout {
  min-width: 180px;
  font-size: 15px !important;
}

/* ---------- Responsive ---------- */
@media only screen and (max-width: 767px) {
  #basket.basket {
    padding: 0 var(--acct-space-xs);
  }

  #basket.basket [id^="line-item-"] {
    padding: 14px !important;
  }

  #basket.basket .img-thumbnail {
    max-width: 100%;
  }

  #basket.basket .row.content.footer {
    padding: 14px;
  }

  #basket.basket .btn,
  #basket.basket .btn.btn-primary {
    width: 100%;
    margin-left: 0 !important;
  }
}

/* ==========================================================================
   CHECKOUT (app-checkout) — layout rebuild
   --------------------------------------------------------------------------
   The template is a flat stack of Bootstrap rows:

     .row.deliveryoptions   heading col │ content col │ (action col)
     .row.border-bottom     <- empty divider element
     .row                   payment heading col │ action col
     .row                   payment body (separate row!)
     .row.border-bottom
     .row.giftoptions / .ordernotes / .cartitems …

   Each step therefore reads as three disconnected columns with a rule under
   them, and the payment step is split across two sibling rows. This block
   turns every step into a self-contained card laid out on a 2-column grid
   (title + action on one line, content spanning both), re-joins the payment
   pair, and drops the divider elements the cards make redundant.
   ========================================================================== */

app-checkout {
  display: block;
  font-family: var(--acct-font);
  font-size: 14px;
  line-height: 1.55;
  color: var(--acct-gray-700);
}

app-checkout * {
  box-sizing: border-box;
}

app-checkout .checkout {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  padding: var(--acct-space-md) var(--acct-space-sm) var(--acct-space-2xl);
}

/* ---------- Page columns ----------
   Bootstrap owns the grid; we only set the rail width and the gutter. */
app-checkout .checkout > .row {
  margin-left: -8px;
  margin-right: -8px;
  align-items: flex-start;
}

app-checkout .checkout > .row > [class*="col-"] {
  padding-left: 8px;
  padding-right: 8px;
}

/* ==========================================================================
   STEP CARDS
   The template's 3-column rhythm (title rail | content | action) is kept —
   it is the right layout — but each row becomes a card so a step and its
   content read as one unit, and the columns get a shared baseline.
   ========================================================================== */

app-checkout .checkout > .row > [class*="col-md-9"] > .row {
  margin: 0 0 var(--acct-space-sm);
  padding: var(--acct-space-md) var(--acct-space-sm);
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius-card);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}

/* the empty divider rows are redundant once each step is a card */
app-checkout .checkout > .row > [class*="col-md-9"] > .row.border-bottom,
app-checkout .checkout > .row > [class*="col-md-9"] > .row:empty {
  display: none !important;
}

/* even gutters for every column inside a step card */
app-checkout .checkout > .row > [class*="col-md-9"] > .row > [class*="col-"] {
  padding-left: var(--acct-space-2xs);
  padding-right: var(--acct-space-2xs);
}

/* content column: no extra bottom padding, it owns its own spacing */
app-checkout .checkout .row > [class*="col-md-8"].pb-3 {
  padding-bottom: 0 !important;
}

/* the template narrows and centres step content on small screens */
app-checkout .w-max-90 {
  max-width: 100% !important;
}

/* ---------- Payment step: two sibling rows, one card ---------- */
app-checkout .checkout > .row > [class*="col-md-9"] > .row:has(h3.selected) {
  margin-bottom: 0;
  padding-bottom: var(--acct-space-2xs);
  border-bottom: none;
  border-bottom-left-radius: 0;
  border-bottom-right-radius: 0;
}

app-checkout
  .checkout
  > .row
  > [class*="col-md-9"]
  > .row:has(h3.selected)
  + .row {
  padding-top: 0;
  border-top: none;
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}

/* the active step is outlined a little stronger */
app-checkout .checkout > .row > [class*="col-md-9"] > .row:has(h3.selected),
app-checkout
  .checkout
  > .row
  > [class*="col-md-9"]
  > .row:has(h3.selected)
  + .row {
  border-color: var(--acct-gray-400);
}

/* ---------- Collapsed steps ----------
   A step that has not been reached yet renders an empty content column —
   `<div approuteroutlet></div>` and nothing else — so the card showed a title,
   a wide blank gutter, then a lonely "Change" link.

   The test is made on the COLUMN, not the row: an earlier version keyed off
   `.row:not(:has(ng-component))`, which was fragile and hid populated columns
   (Gift options disappeared once it rendered its component). A column is only
   hidden when it itself contains no rendered component. */
app-checkout
  .checkout
  > .row
  > [class*="col-md-9"]
  > .row
  > [class*="col-md-8"]:not(:has(ng-component)):not(:has(app-gift-options)):not(:has(app-cart-items)):not(:has(app-delivery-options)):not(:has(app-payment-methods)):not(:has(app-ordering-prefs)):not(:has(form)) {
  display: none !important;
}

/* …and the row compacts to a single line only in that same case */
app-checkout
  .checkout
  > .row
  > [class*="col-md-9"]
  > .row:not(:has(ng-component)):not(:has(app-gift-options)) {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  padding-top: var(--acct-space-sm);
  padding-bottom: var(--acct-space-sm);
  background: var(--acct-surface);
}

app-checkout
  .checkout
  > .row
  > [class*="col-md-9"]
  > .row:not(:has(ng-component)):not(:has(app-gift-options))
  > [class*="col-8"] {
  flex: 1 1 auto;
  max-width: none;
}

app-checkout
  .checkout
  > .row
  > [class*="col-md-9"]
  > .row:not(:has(ng-component)):not(:has(app-gift-options))
  > [class*="col-4"] {
  flex: 0 0 auto;
  max-width: none;
  width: auto;
}

app-checkout
  .checkout
  > .row
  > [class*="col-md-9"]
  > .row:not(:has(ng-component)):not(:has(app-gift-options))
  h3.font-weight-bold {
  color: var(--acct-gray-600) !important;
}

/* a rendered step component is always visible, whatever the detection above */
app-checkout app-gift-options,
app-checkout app-cart-items,
app-checkout app-delivery-options,
app-checkout app-payment-methods,
app-checkout ng-component {
  display: block !important;
}

app-checkout .checkout .row > [class*="col-md-8"]:has(ng-component),
app-checkout .checkout .row > [class*="col-md-8"]:has(app-gift-options) {
  display: block !important;
}

/* the routing placeholder never needs to occupy space */
app-checkout div[approuteroutlet] {
  display: none !important;
}

/* ---------- Step heading ---------- */
app-checkout h3.font-weight-bold {
  display: flex !important;
  align-items: center;
  gap: 10px;
  margin: 0 !important;
  min-height: 34px;
  font-family: var(--acct-font) !important;
  font-size: 15px !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em !important;
  line-height: 1.3 !important;
  text-transform: none !important;
  color: var(--acct-gray-800) !important;
}

/* step number badge */
app-checkout h3.font-weight-bold > div:first-child,
app-checkout h3.font-weight-bold > span:first-child {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  min-width: 26px;
  height: 26px;
  min-height: 26px;
  padding: 0 !important;
  margin: 0 !important;
  text-align: center;
  background: var(--acct-surface);
  border: 1px solid var(--acct-line-strong);
  border-radius: 50%;
  font-size: 12px;
  font-weight: 600;
  line-height: 1;
  color: var(--acct-gray-600);
}

/* the template puts `.align-self-stretch` on both halves, which stretches the
   badge and knocks the number off the title's centre line */
app-checkout h3.font-weight-bold > *,
app-checkout h3.font-weight-bold > .align-self-stretch {
  align-self: center !important;
}

app-checkout h3.selected > div:first-child,
app-checkout h3.selected > span:first-child,
app-checkout h3.active > div:first-child,
app-checkout h3.active > span:first-child {
  background: var(--acct-primary);
  border-color: var(--acct-primary);
  color: var(--acct-white);
}

app-checkout h3.cursor-pointer {
  cursor: pointer;
}

/* action links sit on the heading baseline */
/* the action column tracks the step title, so it aligns to the TOP of the
   card rather than centring itself against the whole step's content.

   It is `col-4 col-md-1` — barely 8% of the row on desktop — so a button
   inside it overflowed and overlapped the content column. The column is
   allowed to size to its content instead, and the content column takes
   whatever is left. */
app-checkout .checkout .row > [class*="col-4"] {
  display: flex;
  align-items: flex-start;
  justify-content: flex-end;
  align-self: flex-start;
  min-height: 34px;
  padding-left: var(--acct-space-2xs) !important;
}

/* The content column is `col-12 col-md-8`: below md it is meant to wrap onto
   its own line under the title. Only widen it — and let the action column
   shrink to its content — from md up, or the step content gets squeezed into
   a sliver beside the heading on phones. */
@media only screen and (min-width: 768px) {
  app-checkout .checkout .row > [class*="col-4"] {
    flex: 0 0 auto !important;
    width: auto !important;
    max-width: none !important;
  }

  app-checkout
    .checkout
    > .row
    > [class*="col-md-9"]
    > .row
    > [class*="col-md-8"] {
    flex: 1 1 0 !important;
    min-width: 0;
    max-width: none !important;
  }
}

/* Change / Review / cancel read as buttons, not loose links, and sit level
   with the step heading */
app-checkout .row > [class*="col-4"] > a.small,
app-checkout a.small.text-lowercase,
app-checkout .row > [class*="col-4"] > a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  align-self: flex-start;
  min-height: 32px;
  min-width: 76px;
  margin-top: 1px;                 /* optical match to the 34px title row */
  padding: 6px 12px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  font-family: var(--acct-font);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  line-height: 1.3;
  color: var(--acct-gray-700) !important;
  text-decoration: none !important;
  text-transform: uppercase !important;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease;
}

app-checkout .row > [class*="col-4"] > a.small:hover,
app-checkout a.small.text-lowercase:hover,
app-checkout .row > [class*="col-4"] > a:hover {
  background: var(--acct-btn-hover-bg);
  border-color: var(--acct-btn-border-hover);
  color: var(--acct-gray-800) !important;
}

@media only screen and (max-width: 575px) {
  app-checkout .row > [class*="col-4"] > a.small,
  app-checkout a.small.text-lowercase {
    min-width: 0;
    padding: 6px 10px;
  }
}

/* ==========================================================================
   STEP CONTENT
   ========================================================================== */

/* ---------- Delivery options ---------- */
app-checkout .delivery-options .row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--acct-space-2xs);
  margin: 0 !important;
}

app-checkout .delivery-option {
  flex: 1 1 200px;
  max-width: none;
  margin: 0 !important;
  padding: 0 !important;
}

app-checkout .delivery-option .custom-control.custom-radio {
  align-items: center;
  height: 100%;
  margin: 0;
  padding: 0;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  cursor: pointer;
  transition: border-color 0.2s ease, background-color 0.2s ease,
    box-shadow 0.2s ease;
}

app-checkout .delivery-option .custom-control.hoverable:hover {
  border-color: var(--acct-btn-border-hover) !important;
  background: var(--acct-surface-hover);
}

app-checkout .delivery-option .custom-control.active {
  border-color: var(--acct-primary) !important;
  box-shadow: 0 0 0 3px var(--acct-primary-ring);
}

app-checkout .delivery-option .custom-control-input {
  position: static !important;
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin: 0 0 0 14px !important;
  opacity: 1 !important;
  accent-color: var(--acct-primary);
  cursor: pointer;
}

app-checkout .delivery-option .custom-control-label {
  flex: 1 1 auto;
  margin: 0;
  padding: 13px 14px !important;
  font-size: 14px;
  font-weight: 500 !important;
  color: var(--acct-gray-700);
  text-align: left;
  cursor: pointer;
}

app-checkout .custom-control-label::before,
app-checkout .custom-control-label::after {
  content: none !important;
}

/* ---------- Payment methods ----------
   These render their own Bootstrap cards inside the step card. Flatten them
   so there is never a card inside a card. */
app-checkout .payment-method-list.card,
app-checkout .payment-account-list,
app-checkout app-payment-methods .card {
  margin: 0 !important;
  background: none !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}

app-checkout .payment-method-list .card-header,
app-checkout .payment-account-list .card-header {
  display: flex;
  align-items: center;
  margin: 0 !important;
  padding: 0 0 10px !important;
  background: none !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line) !important;
  border-radius: 0 !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: 0.02em;
  color: var(--acct-gray-700) !important;
}

app-checkout .payment-method-list .card-body,
app-checkout .payment-account-list .card-body {
  padding: 14px 0 !important;
}

app-checkout .payment-method-list .card-footer {
  margin-top: var(--acct-space-2xs);
  padding: 14px 0 0 !important;
  background: none;
  border: none;
  border-top: 1px solid var(--acct-line);
}

app-checkout .card-header h4 {
  margin: 0;
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: 0.02em;
  text-transform: none !important;
  color: var(--acct-gray-700) !important;
}

app-checkout .card-header i,
app-checkout .card-header .fas,
app-checkout .card-header .fa {
  margin-right: 6px;
  color: var(--acct-gray-500);
  font-size: 12px;
}

/* "Add a credit/debit card" reads as an action */
app-checkout .card-header .commands a {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 7px 12px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-gray-700);
  text-decoration: none;
  transition: background-color 0.2s ease, border-color 0.2s ease;
}

app-checkout .card-header .commands a:hover {
  background: var(--acct-btn-hover-bg);
  border-color: var(--acct-btn-border-hover);
  text-decoration: none;
}

app-checkout .card-header .commands a i {
  margin: 0;
  padding: 0 4px 0 0 !important;
  font-size: 11px;
}

/* empty payment list */
app-checkout .card-body .h6.text-primary,
app-checkout .card-body .text-primary {
  margin: 0;
  padding: 22px 16px !important;
  background: var(--acct-surface);
  border: 1px dashed var(--acct-line-strong);
  border-radius: var(--acct-radius);
  font-size: 13px !important;
  font-weight: 400 !important;
  color: var(--acct-gray-500) !important;
}

/* the "Promotions" block sits below the cards */
app-checkout .other {
  margin-top: var(--acct-space-sm);
}

app-checkout .other .card-header {
  margin: 0 !important;
  padding: 0 0 10px !important;
}

app-checkout .other .card-body {
  padding: 14px 0 0 !important;
}

/* the decorative "+" beside the promo field */
app-checkout .other .card-body > .row > .d-flex > i.fas.fa-plus {
  display: none;
}

app-checkout .other .card-body .col-11 {
  flex: 1 1 auto;
  max-width: 100%;
  padding: 0;
}

/* ---------- Promo code ---------- */
app-checkout .promo-code label {
  display: block;
  margin-bottom: 6px;
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-gray-600);
}

app-checkout .promo-code .input-group {
  display: flex;
  flex-wrap: nowrap;
  gap: 8px;
  width: 100% !important;
  max-width: 420px;
}

app-checkout .promo-code .form-control {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 42px;
  padding: 10px 14px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius) !important;
  font-family: var(--acct-font);
  font-size: 14px;
  color: var(--acct-gray-800);
}

app-checkout .promo-code .input-group-append {
  flex: 0 0 auto;
  margin: 0;
}

app-checkout .promo-code .input-group-append .btn {
  width: auto !important;
  min-width: 96px;
}

/* ---------- Items and shipping ---------- */
app-checkout .cart-items .container,
app-checkout .cart-items .container.view {
  width: 100%;
  max-width: 100%;
  padding: 0;
  margin: 0;
}

app-checkout .cart-items .row {
  margin-left: 0;
  margin-right: 0;
}

/* pickup / shipping destination block */
app-checkout .shipping-options {
  margin-bottom: var(--acct-space-2xs);
  padding: 14px;
  background: var(--acct-surface);
  border: 1px solid var(--acct-line);
  border-radius: var(--acct-radius);
}

app-checkout .shipping-options .row {
  margin: 0;
}

app-checkout .shipping-options .border-bottom {
  margin: 0 !important;
  padding: 0 !important;
  border-bottom: none !important;
}

app-checkout .shipping-options .address .title strong {
  font-size: 14px;
  font-weight: 600;
  color: var(--acct-gray-800);
}

app-checkout .shipping-options .address span {
  font-size: 13px;
  line-height: 1.5;
  color: var(--acct-gray-600);
}

/* "Delivery: Pickup" line */
app-checkout .cart-items .container.view > .row + div,
app-checkout .cart-items .fa-truck {
  color: var(--acct-gray-600);
}

app-checkout .cart-items .fa-truck {
  margin-right: 6px !important;
}

/* line items */
app-checkout .cart-items > .cart-items > .row,
app-checkout app-cart-items .row.align-items-stretch {
  align-items: center !important;
  margin: 0 !important;
  padding: 12px 0 !important;
  border-top: 1px solid var(--acct-line-soft) !important;
}

app-checkout app-cart-items .row.align-items-stretch:first-of-type {
  border-top: none !important;
}

app-checkout .img-thumbnail {
  width: 100%;
  max-width: 64px;
  height: auto;
  padding: 0;
  background: none;
  border: none !important;
  border-radius: var(--acct-radius);
}

app-checkout h3.product-title,
app-checkout label.product-title {
  display: block;
  margin: 0 0 2px !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  line-height: 1.35 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  color: var(--acct-gray-800) !important;
}

app-checkout .image-missing {
  width: 44px;
  height: 44px;
  fill: var(--acct-gray-400);
}

/* ==========================================================================
   RIGHT COLUMN — sticky summary
   ========================================================================== */

app-checkout .cart-summary.card.border {
  overflow: hidden;
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong) !important;
  border-radius: var(--acct-radius-card);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}

app-checkout .sticky-top {
  top: var(--acct-space-md);
}

/* primary action block at the top of the summary */
app-checkout .cart-summary app-payment-methods > .card.container {
  padding: var(--acct-space-md) !important;
  border: none !important;
}

app-checkout .cart-summary app-payment-methods .row {
  margin: 0;
}

app-checkout .cart-summary app-payment-methods .row + .row {
  padding-top: 10px !important;
}

app-checkout .cart-summary .btn {
  width: 100%;
}

app-checkout .cart-summary .small {
  font-size: 12px;
  line-height: 1.5;
  color: var(--acct-gray-500);
}

/* divider the template renders between blocks */
app-checkout .cart-summary > .border-bottom {
  margin: 0 !important;
  border-bottom: 1px solid var(--acct-line) !important;
}

/* item list inside the summary */
app-checkout .cart-summary app-cart-items .container.view > div {
  margin: 0 !important;
  padding: var(--acct-space-sm) var(--acct-space-md);
}

app-checkout .cart-summary app-cart-items .row {
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
}

app-checkout .cart-summary app-cart-items .row.pt-3 {
  padding-top: 12px !important;
  align-items: center;
}

app-checkout .cart-summary app-cart-items .row.align-items-stretch {
  padding: 2px 0 10px !important;
  border-bottom: 1px solid var(--acct-line-soft) !important;
}

app-checkout .cart-summary app-cart-items > .cart-items > .container > div > div:last-child .row.align-items-stretch {
  border-bottom: none !important;
}

app-checkout .cart-summary .img-thumbnail {
  max-width: 100%;
}

app-checkout .cart-summary .product-title {
  font-size: 13px !important;
}

app-checkout .cart-summary app-cart-items span {
  font-size: 13px;
  color: var(--acct-gray-600);
}

/* ---------- Order Summary totals ---------- */
app-checkout app-cart-summary .card {
  margin: 0 !important;
  background: var(--acct-surface) !important;
  border: none !important;
  border-top: 1px solid var(--acct-line) !important;
  border-radius: 0 !important;
}

app-checkout app-cart-summary .card-body {
  padding: var(--acct-space-md) !important;
}

app-checkout app-cart-summary .card-title {
  margin: 0 0 10px !important;
}

app-checkout app-cart-summary .card-title .label {
  padding: 0 0 10px;
  border-bottom: 1px solid var(--acct-line-strong);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--acct-gray-600);
}

app-checkout app-cart-summary .row {
  display: flex;
  margin: 0;
  padding: 4px 0;
  font-size: 13px;
}

app-checkout app-cart-summary .row > [class*="col-"] {
  padding: 0;
}

app-checkout app-cart-summary .text {
  color: var(--acct-gray-600);
}

app-checkout app-cart-summary .value {
  font-weight: 500;
  color: var(--acct-gray-800);
}

/* a discount is information, not an error */
app-checkout app-cart-summary .discount,
app-checkout app-cart-summary .discount .text,
app-checkout app-cart-summary .discount .value,
app-checkout .text-danger {
  color: var(--acct-gray-600) !important;
}

/* the template draws rules with empty grid cells — normalise them */
app-checkout app-cart-summary .total-before-tax-border {
  margin: 6px 0 !important;
  padding: 0 !important;
}

app-checkout app-cart-summary .total-before-tax-border .border-top {
  border-top: 1px solid var(--acct-line-strong) !important;
}

app-checkout app-cart-summary .border-line-2 {
  margin: 10px 0 !important;
  border-bottom: 1px solid var(--acct-line-strong) !important;
}

app-checkout app-cart-summary .grand-total {
  padding-top: 2px;
}

app-checkout app-cart-summary .grand-total .text,
app-checkout app-cart-summary .grand-total .value {
  font-size: 16px;
  font-weight: 600;
  color: var(--acct-gray-800);
}

/* ==========================================================================
   BUTTONS
   ========================================================================== */

app-checkout .btn,
app-checkout .btn.btn-primary {
  min-height: 42px;
  padding: 10px 18px !important;
  background: var(--acct-white) !important;
  background-color: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  line-height: 1.4 !important;
  text-transform: none !important;
  text-decoration: none !important;
  box-shadow: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease;
}

app-checkout .btn:hover,
app-checkout .btn.btn-primary:hover {
  background: var(--acct-btn-hover-bg) !important;
  background-color: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

app-checkout .btn:disabled,
app-checkout .btn.btn-primary:disabled {
  opacity: 0.5;
}

app-checkout .btn .small {
  font-size: 14px;
  color: inherit;
}

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */

@media only screen and (max-width: 991px) {
  /* stays flex — `display: block` would discard the template's order-* classes
     and drop the summary rail below the steps */
  app-checkout .checkout > .row {
    display: flex;
    flex-direction: column;
  }

  app-checkout .checkout > .row > [class*="col-md-3"],
  app-checkout .checkout > .row > [class*="col-md-9"] {
    max-width: 100%;
    flex: 0 0 auto;
    width: 100%;
  }

  /* summary first on small screens, matching the template's order-0 */
  app-checkout .checkout > .row > [class*="col-md-3"] {
    margin-bottom: var(--acct-space-sm);
  }

  app-checkout .sticky-top {
    position: static !important;
  }
}

@media only screen and (max-width: 575px) {
  app-checkout .checkout {
    padding: var(--acct-space-sm) var(--acct-space-xs) var(--acct-space-xl);
  }

  app-checkout .checkout > .row > [class*="col-md-9"] > .row {
    padding: var(--acct-space-sm);
  }

  app-checkout h3.font-weight-bold {
    font-size: 14px !important;
  }

  app-checkout .delivery-option {
    flex: 1 1 100%;
  }

  app-checkout .promo-code .input-group {
    flex-wrap: wrap;
  }

  app-checkout .promo-code .input-group-append,
  app-checkout .promo-code .input-group-append .btn {
    width: 100% !important;
  }

  /* full-width only for the real call-to-action buttons — the qty selector and
     the "Apply coupon" chip are inline controls and must stay their own size */
  app-checkout .btn.btn-primary,
  app-checkout .btn.btn-lg {
    width: 100%;
  }

  app-checkout .qty-selector .btn,
  app-checkout .coupon-code .btn,
  app-checkout .btn-xs {
    width: auto !important;
  }

  /* the price column is `col-12 col-md-2 text-md-right`, so on phones it drops
     to its own full-width line with no alignment of its own */
  app-checkout #basket .row[id^="line-item-"] > .col > .row > [class*="col-md-2"] {
    margin-top: var(--acct-space-2xs);
    text-align: right;
  }
}

/* ==========================================================================
   SHARED PRIMITIVES — consistency pass across every account surface
   ========================================================================== */

/* ---------- Empty Angular alert slots ----------
   Every component renders <app-alert><alert class="mt-4"><!----></alert></app-alert>
   whether or not there is a message. `:empty` alone is unreliable here: the
   <alert> holds a comment placeholder, and the <app-alert> wrapper is never
   empty because it always contains that <alert>. Match on "has no rendered
   element inside" instead, and kill the Bootstrap spacing utilities that
   would otherwise leave a gap. */
app-alert:not(:has(.alert)),
alert:not(:has(*)),
alert:empty,
app-alert:empty {
  display: none !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
}

/* a rendered alert should never inherit card chrome from its container */
app-alert > alert,
app-alert {
  display: block;
  background: none;
  border: none;
}

/* ---------- Consistent surfaces ----------
   One card recipe everywhere: same border colour, radius and shadow. */
#accountContent .section,
.wine-club-membership-details,
.wine-club-shipment-details,
.change-password,
.addr-popup .addr-table,
:is(.container-fluid.auth, .container-fluid.forgot-password),
#basket.basket .section.card,
app-checkout .card,
app-checkout .cart-summary.card.border,
app-checkout .payment-method-list.card {
  border-color: var(--acct-line-strong) !important;
  border-radius: var(--acct-radius-card) !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}

/* ---------- Consistent form controls ----------
   Same height, radius, border and focus ring for every input in the UI. */
#accountContent input:not([type="checkbox"]):not([type="radio"]),
#accountContent select,
#accountContent textarea,
.wine-club-membership-details input[type="text"],
.wine-club-shipment-details input[type="text"],
.wine-club-shipment-details textarea,
.addr-popup input:not([type="checkbox"]):not([type="radio"]),
.change-password input,
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-control,
app-checkout .form-control,
#basket.basket .form-control {
  min-height: 42px;
  border-radius: var(--acct-radius);
  font-family: var(--acct-font);
  font-size: 14px;
}

#accountContent input:focus,
#accountContent select:focus,
#accountContent textarea:focus,
.wine-club-membership-details input:focus,
.wine-club-shipment-details input:focus,
.wine-club-shipment-details textarea:focus,
.addr-popup input:focus,
.change-password input:focus,
:is(.container-fluid.auth, .container-fluid.forgot-password) .form-control:focus,
app-checkout .form-control:focus,
#basket.basket .form-control:focus {
  border-color: var(--acct-primary) !important;
  box-shadow: 0 0 0 3px var(--acct-primary-ring) !important;
  outline: none !important;
}

/* ---------- Consistent section headings ----------
   Card titles all sit at 15–16px semibold; sub-labels at 13px uppercase. */
#accountContent .section > .header,
#basket.basket .row.header,
app-checkout .card-header,
app-checkout .cart-summary .card-title .label {
  font-family: var(--acct-font) !important;
  font-size: 15px !important;
  font-weight: 600 !important;
  letter-spacing: -0.005em !important;
  text-transform: none !important;
  color: var(--acct-gray-800) !important;
}

/* ---------- Consistent muted meta text ---------- */
#accountContent .mobile-label,
#accountContent .table .row.h > div,
.addr-popup .addr-table .divRowHeader,
#basket.basket .row.header .text-right,
.wine-club-shipment-details #tabContentProducts .row.h {
  font-family: var(--acct-font) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
  color: var(--acct-gray-500) !important;
}

/* ---------- Bootstrap accent colours we never want ---------- */
app-checkout .text-primary,
#basket.basket .text-primary,
:is(.container-fluid.auth, .container-fluid.forgot-password) .text-primary {
  color: var(--acct-gray-600) !important;
}

app-checkout .bg-light,
#basket.basket .bg-light {
  background-color: var(--acct-white) !important;
}

/* ---------- Focus visibility for keyboard users ---------- */
#accountContent a:focus-visible,
#accountContent .btn:focus-visible,
app-checkout a:focus-visible,
app-checkout .btn:focus-visible,
#basket.basket .btn:focus-visible,
:is(.container-fluid.auth, .container-fluid.forgot-password) .btn:focus-visible,
.addr-popup .btn:focus-visible {
  outline: 2px solid var(--acct-primary);
  outline-offset: 2px;
}

/* ---------- Empty containers that reserve space ---------- */
app-checkout .row:empty,
app-checkout .col:empty,
#accountContent .content:empty,
app-checkout div[approuteroutlet]:empty {
  display: none !important;
}

/* keep the deliberate rule separators, which are also empty */
app-checkout .row.border-bottom:empty,
app-checkout .border-top:empty,
app-checkout .border-bottom:empty {
  display: block !important;
}

/* ==========================================================================
   ALERTS — one component for every surface
   Markup (Angular + ngx-bootstrap):

     <app-alert><alert class="mt-4 alert-warning">
       <div role="alert" class="alert alert-warning">
         <button class="close"><span aria-hidden="true">×</span>
                               <span class="sr-only">Close</span></button>
         <div class="alert-heading">
           <fa-icon class="alert-icon h4 mr-2 text-warning"><svg/></fa-icon>
           <span class="alert-title text-warning">Important Notices</span>
         </div>
         <hr>
         <ul class="alert-body"><li><p>…</p></li></ul>
       </div>
     </alert></app-alert>

   Bootstrap's own CSS is only partly present, so `.sr-only`, `.h4`, `.close`
   and the FA sizing classes all have to be handled here.
   ========================================================================== */

app-alert .alert,
alert .alert,
alert[class*="alert-"] > [role="alert"] {
  position: relative;
  display: block;
  box-sizing: border-box;
  margin: 0 0 var(--acct-space-md) !important;
  padding: 14px 44px 14px 16px !important;
  background: var(--acct-surface);
  border: 1px solid var(--acct-line-strong);
  border-left: 3px solid var(--acct-gray-400);
  border-radius: var(--acct-radius) !important;
  font-family: var(--acct-font);
  font-size: 13px;
  line-height: 1.55;
  color: var(--acct-gray-700);
  box-shadow: none;
}

/* ---------- Heading row ---------- */
app-alert .alert-heading,
alert .alert-heading {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 !important;
  padding: 0;
  border: none;
}

/* the icon ships with `.h4` — cut it back to a 15px glyph */
app-alert .alert-icon,
alert .alert-icon,
app-alert .alert-icon.h4,
alert .alert-icon.h4 {
  display: inline-flex !important;
  align-items: center;
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin: 0 !important;
  font-size: 15px !important;
  line-height: 1 !important;
}

app-alert .alert-icon svg,
alert .alert-icon svg {
  width: 15px !important;
  height: 15px !important;
  display: block;
}

app-alert .alert-title,
alert .alert-title {
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -0.005em;
  color: var(--acct-gray-800) !important;
}

/* ---------- Divider + body ---------- */
app-alert .alert hr,
alert .alert hr {
  margin: 10px 0 !important;
  border: none !important;
  border-top: 1px solid rgba(0, 0, 0, 0.08) !important;
  opacity: 1;
}

app-alert .alert-body,
alert .alert-body {
  margin: 0 !important;
  padding: 0 !important;
  list-style: none;
}

app-alert .alert-body > li,
alert .alert-body > li {
  position: relative;
  margin: 0;
  padding: 0 0 0 14px;
}

app-alert .alert-body > li + li,
alert .alert-body > li + li {
  margin-top: 6px;
}

app-alert .alert-body > li::before,
alert .alert-body > li::before {
  content: "";
  position: absolute;
  top: 8px;
  left: 2px;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.45;
}

/* a single-item list reads better without a bullet */
app-alert .alert-body > li:only-child,
alert .alert-body > li:only-child {
  padding-left: 0;
}

app-alert .alert-body > li:only-child::before,
alert .alert-body > li:only-child::before {
  content: none;
}

app-alert .alert-body p,
alert .alert-body p,
app-alert .alert p,
alert .alert p {
  margin: 0 !important;
  font-size: 13px;
  line-height: 1.55;
}

/* ---------- Close ---------- */
app-alert .alert .close,
alert .alert .close {
  position: absolute;
  top: 8px;
  right: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  padding: 0 !important;
  margin: 0 !important;
  background: none !important;
  border: none !important;
  border-radius: var(--acct-radius);
  font-size: 18px;
  line-height: 1;
  color: var(--acct-gray-500);
  opacity: 1 !important;
  text-shadow: none;
  cursor: pointer;
  transition: background-color 0.2s ease, color 0.2s ease;
}

app-alert .alert .close:hover,
alert .alert .close:hover {
  background: rgba(0, 0, 0, 0.05) !important;
  color: var(--acct-gray-800);
}

/* Bootstrap's screen-reader helper — hide it in case Bootstrap isn't loaded,
   otherwise the word "Close" prints next to the ✕ */
app-alert .sr-only,
alert .sr-only,
.addr-popup .sr-only,
#accountContent .sr-only,
app-checkout .sr-only,
#basket.basket .sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* ---------- Variants ---------- */
app-alert .alert-warning,
alert .alert-warning {
  background: #fdf8ec;
  border-color: #f0e0b6;
  border-left-color: #d9a441;
}

app-alert .alert-danger,
alert .alert-danger {
  background: #fdf2f2;
  border-color: #f3d2d5;
  border-left-color: #c0555c;
}

app-alert .alert-success,
alert .alert-success {
  background: #f2f9f4;
  border-color: #cfe6d5;
  border-left-color: #4f9464;
}

app-alert .alert-info,
alert .alert-info {
  background: var(--acct-panel);
  border-color: var(--acct-line-strong);
  border-left-color: var(--acct-gray-500);
}

/* icon + title inherit the variant tone, not Bootstrap's utility colours */
app-alert .alert-warning .alert-icon,
alert .alert-warning .alert-icon,
app-alert .alert-warning .text-warning,
alert .alert-warning .text-warning {
  color: #b7791f !important;
}

app-alert .alert-danger .alert-icon,
alert .alert-danger .alert-icon,
app-alert .alert-danger .text-danger,
alert .alert-danger .text-danger {
  color: #9b2c2c !important;
}

app-alert .alert-success .alert-icon,
alert .alert-success .alert-icon,
app-alert .alert-success .text-success,
alert .alert-success .text-success {
  color: #2f6f43 !important;
}

/* the outer <alert> is only a wrapper — it must never paint or space */
app-alert > alert,
app-alert > alert[class*="mt-"],
app-alert {
  display: block;
  margin: 0 !important;
  padding: 0 !important;
  background: none !important;
  border: none !important;
}

/* ==========================================================================
   APP BOOT / LOADING STATE
   The page ships an inline <style> that fills the empty <app-root> with a
   30px "Loading" string and an animated GIF pinned at 20% 50%:

     app-root:empty::after { content:'Loading'; background:url(ajax-loader-2.gif) … }

   That inline block has the same specificity as this rule, so these
   declarations carry !important to win regardless of source order.
   ========================================================================== */

app-root:empty {
  position: relative;
  display: block;
  width: 100%;
  min-height: 360px;
}

/* the ring */
app-root:empty::after {
  content: "" !important;
  position: absolute !important;
  top: 50% !important;
  left: 50% !important;
  transform: translate(-50%, -50%) !important;
  width: 34px !important;
  height: 34px !important;
  min-width: 0 !important;
  min-height: 0 !important;
  margin: -14px 0 0 !important;      /* lift it above the caption */
  padding: 0 !important;
  background: none !important;       /* drops the GIF */
  border: 3px solid var(--acct-line-strong) !important;
  border-top-color: var(--acct-primary) !important;
  border-radius: 50% !important;
  font-size: 0 !important;
  animation: acct-spin 0.7s linear infinite !important;
}

/* the caption */
app-root:empty::before {
  content: "Loading…";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, 24px);
  font-family: var(--acct-font);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--acct-gray-500);
  white-space: nowrap;
}

@keyframes acct-spin {
  to {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}

/* keeps the boot state from collapsing, without reserving 400px on every
   page the way the inline rule does */
#contentContainer:has(app-root:empty) {
  min-height: 360px;
}

/* ---------- ASP.NET postback loader ----------
   `<img class="ajax-loader" src="/images/ajax-loader.gif">` is positioned by
   the framework. Keep it small, quiet and above the modal layer. */
.ajax-loader {
  width: 28px !important;
  height: 28px !important;
  padding: 6px;
  background: rgba(255, 255, 255, 0.9);
  border: 1px solid var(--acct-line-strong);
  border-radius: 50%;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
  box-sizing: content-box;
  z-index: 10002;
}

@media (prefers-reduced-motion: reduce) {
  app-root:empty::after {
    animation: none !important;
    border-top-color: var(--acct-line-strong) !important;
  }
}

/* ==========================================================================
   ORDER PROCESSING OVERLAY (#divInProgress)
   The framework positions and toggles this block itself — layout is left
   completely alone. Only the loading GIF is modernised.
   ========================================================================== */

/* swap the GIF for a CSS spinner, in place, same footprint */
#divInProgress img {
  width: 0 !important;
  height: 0 !important;
  padding: 16px !important;
  background: none !important;
  border: 3px solid var(--acct-line-strong) !important;
  border-top-color: var(--acct-primary) !important;
  border-radius: 50% !important;
  box-sizing: content-box !important;
  animation: acct-spin-simple 0.7s linear infinite !important;
}

@keyframes acct-spin-simple {
  to {
    transform: rotate(360deg);
  }
}

#divInProgress h2 {
  font-family: var(--acct-font) !important;
  font-size: 16px !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em !important;
  text-transform: none !important;
}

#divInProgress h2.custom-content {
  font-size: 13px !important;
  font-weight: 400 !important;
  color: var(--acct-gray-500) !important;
}

@media (prefers-reduced-motion: reduce) {
  #divInProgress img {
    animation: none !important;
    border-top-color: var(--acct-line-strong) !important;
  }
}

/* ==========================================================================
   ANGULAR MODAL (modal-container / app-modal-content)
   ngx-bootstrap dialog used for gift options, address pickers, confirmations.
   The template nests .modal-content twice and paints the header with
   Bootstrap's .bg-primary; both are neutralised here.
   ========================================================================== */

modal-container.modal {
  padding: var(--acct-space-md) !important;
  font-family: var(--acct-font);
  color: var(--acct-gray-700);
}

.modal-backdrop,
modal-backdrop.modal-backdrop {
  background: rgba(17, 17, 17, 0.55) !important;
  opacity: 1 !important;
}

modal-container .modal-dialog,
modal-container .modal-dialog.modal-xs,
modal-container .modal-dialog.modal-sm,
modal-container .modal-dialog.modal-lg,
modal-container .modal-dialog.w-max-450p {
  width: var(--acct-modal-width) !important;
  max-width: var(--acct-modal-width) !important;
  margin: 0 auto !important;
}

/* content-driven height, capped at the shared dialog height */
modal-container .modal-content {
  max-height: var(--acct-modal-height);
}

/* outer shell owns the chrome */
modal-container > .modal-dialog > .modal-content {
  background: var(--acct-white) !important;
  border: none;
  border-radius: var(--acct-radius-card);
  box-shadow: 0 24px 64px rgba(0, 0, 0, 0.28), 0 2px 8px rgba(0, 0, 0, 0.12);
  /* not `hidden`: Stripe renders its autocomplete / bank-search dropdowns in
     absolutely positioned iframes that a clipped shell would cut off */
  overflow: visible;
}

/* so the corners still look right without clipping */
modal-container .modal-header {
  border-top-left-radius: var(--acct-radius-card) !important;
  border-top-right-radius: var(--acct-radius-card) !important;
}

modal-container .modal-footer {
  border-bottom-left-radius: var(--acct-radius-card) !important;
  border-bottom-right-radius: var(--acct-radius-card) !important;
}

/* the inner duplicate keeps the opaque fill but must not draw a second card
   (it is the element the component actually renders into, so it has to be
   painted — a transparent one lets the page show through) */
app-modal-content,
app-modal-content > .modal-content,
modal-container .modal-content,
modal-container .modal-content .modal-content {
  background: var(--acct-white) !important;
  background-color: var(--acct-white) !important;
}

app-modal-content > .modal-content,
modal-container .modal-content .modal-content {
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}

app-modal-content {
  display: block;
}

/* ---------- Header ---------- */
modal-container .modal-header,
modal-container .modal-header.bg-primary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--acct-space-sm);
  padding: 16px 20px !important;
  background: var(--acct-white) !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line-strong) !important;
  border-radius: 0 !important;
  cursor: move;
}

modal-container .modal-title,
modal-container .modal-title.pull-left {
  float: none !important;
  margin: 0 !important;
  font-family: var(--acct-font) !important;
  font-size: 16px !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em !important;
  line-height: 1.3 !important;
  text-transform: none !important;
  color: var(--acct-gray-800) !important;
}

modal-container .modal-header .close,
modal-container .close.pull-right {
  float: none !important;
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 32px;
  height: 32px;
  margin: 0 !important;
  padding: 0 !important;
  background: none !important;
  border: none !important;
  border-radius: var(--acct-radius);
  font-size: 20px;
  line-height: 1;
  color: var(--acct-gray-500) !important;
  opacity: 1 !important;
  text-shadow: none !important;
  cursor: pointer;
  transition: background-color 0.2s ease, color 0.2s ease;
}

modal-container .modal-header .close:hover {
  background: var(--acct-btn-hover-bg) !important;
  color: var(--acct-gray-800) !important;
}

/* ---------- Body ---------- */
modal-container .modal-body {
  padding: 20px !important;
  background: var(--acct-white) !important;
  font-size: 14px;
  line-height: 1.55;
}

modal-container .modal-body > [modal-body] > p:first-child {
  margin: 0 0 16px;
  font-size: 13px;
  color: var(--acct-gray-500);
}

modal-container .modal-body .row {
  margin-left: 0;
  margin-right: 0;
}

modal-container .modal-body .row > [class*="col-"] {
  padding-left: 0;
  padding-right: 0;
}

/* ---------- Fields ---------- */
modal-container label {
  display: inline-block;
  margin: 0 0 6px;
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-gray-600);
}

modal-container .required-asterisk {
  margin-left: 2px;
  color: var(--acct-error);
}

/* the info tooltip trigger beside a label */
modal-container label + a {
  margin: 0 0 0 4px !important;
  color: var(--acct-gray-400);
  text-decoration: none;
}

modal-container label + a:hover {
  color: var(--acct-primary);
}

modal-container label + a i {
  margin: 0 !important;
  font-size: 12px;
}

/* character counter */
modal-container .small.float-right {
  float: right !important;
  font-size: 12px;
  color: var(--acct-gray-400);
}

modal-container .form-control {
  display: block;
  width: 100%;
  min-height: 42px;
  padding: 10px 14px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  font-family: var(--acct-font);
  font-size: 14px;
  line-height: 1.5;
  color: var(--acct-gray-800);
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

modal-container textarea.form-control {
  min-height: 110px;
  resize: vertical;
}

modal-container .form-control::placeholder {
  color: var(--acct-gray-400);
}

modal-container .form-control:focus {
  border-color: var(--acct-primary);
  box-shadow: 0 0 0 3px var(--acct-primary-ring);
  outline: none;
}

modal-container .form-control.ng-invalid.ng-dirty,
modal-container .form-control.is-invalid {
  border-color: var(--acct-error);
}

/* ---------- Actions ---------- */
modal-container .row.border-top {
  margin-top: 20px !important;
  padding-top: 18px !important;
  border-top: 1px solid var(--acct-line) !important;
}

modal-container .btn,
modal-container .btn.btn-primary,
modal-container .btn.btn-secondary {
  min-height: 42px;
  min-width: 104px;
  padding: 10px 18px !important;
  background: var(--acct-white) !important;
  background-color: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  line-height: 1.4 !important;
  text-transform: none !important;
  box-shadow: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease;
}

modal-container .btn:hover,
modal-container .btn.btn-primary:hover,
modal-container .btn.btn-secondary:hover {
  background: var(--acct-btn-hover-bg) !important;
  background-color: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

modal-container .btn:disabled {
  opacity: 0.5;
}

modal-container .ml-3 {
  margin-left: 10px !important;
}

/* ---------- Drag / resize affordances ----------
   The dialog is draggable and resizable; the handles are invisible hit areas
   that must never paint. */
modal-container .ng-resizable-handle {
  background: none !important;
  border: none !important;
}

modal-container .ng-resizable-handle.ng-resizable-se {
  opacity: 0.35;
}

@media only screen and (max-width: 575px) {
  modal-container.modal {
    padding: var(--acct-space-2xs) !important;
  }

  modal-container .modal-header {
    padding: 14px 16px !important;
  }

  modal-container .modal-body {
    padding: 16px !important;
  }

  modal-container .row.border-top > .col-12 {
    flex-direction: column;
    gap: 8px;
  }

  modal-container .btn {
    width: 100%;
    margin-left: 0 !important;
  }
}

/* ==========================================================================
   PAYMENT MODAL — "Add a Credit or Debit card"
   Same modal shell, but with a Stripe Elements body and a real footer.
   ========================================================================== */

/* card entry needs more room than a confirmation dialog, and must match the
   jQuery UI card popup exactly — see --acct-modal-card-width */
/* NOTE ON SPECIFICITY
   `.modal-dialog.w-max-450p` above is (0,3,0). A `:has(app-payment-method)`
   selector only reaches (0,2,1), so it loses even with !important. The class
   is therefore repeated in these selectors to outrank it. */
modal-container .modal-dialog:has(app-payment-profile-details),
modal-container .modal-dialog:has(app-stripe-hosted-payments),
modal-container .modal-dialog:has(app-payment-method),
modal-container .modal-dialog.w-max-450p:has(app-payment-profile-details),
modal-container .modal-dialog.w-max-450p:has(app-stripe-hosted-payments),
modal-container .modal-dialog.w-max-450p:has(app-payment-method),
modal-container .modal-dialog.modal-xs:has(app-payment-profile-details),
modal-container .modal-dialog.modal-xs:has(app-stripe-hosted-payments),
modal-container .modal-dialog.modal-xs:has(app-payment-method),
modal-container .modal-dialog.modal-xs.w-max-450p:has(app-payment-profile-details),
modal-container .modal-dialog.modal-xs.w-max-450p:has(app-stripe-hosted-payments),
modal-container .modal-dialog.modal-xs.w-max-450p:has(app-payment-method) {
  width: var(--acct-modal-card-width) !important;
  max-width: var(--acct-modal-card-width) !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

/* ---------- Footer ---------- */
modal-container .modal-footer,
modal-container .modal-footer.bg-light-gray {
  display: flex !important;
  align-items: center;
  gap: var(--acct-space-2xs);
  margin: 0 !important;
  padding: 16px 20px !important;
  background: var(--acct-surface) !important;
  border: none !important;
  border-top: 1px solid var(--acct-line-strong) !important;
}

modal-container .modal-footer .mr-auto {
  margin-right: auto !important;
}

/* Save & Close is the confirming action but stays in the neutral system */
modal-container .btn.btn-default,
modal-container .btn.btn-lg {
  min-width: 140px;
  font-size: 14px !important;
}

/* ---------- Body scrolling ----------
   The Stripe card + address elements are tall; let the body scroll rather
   than the dialog growing past the viewport. */
modal-container .modal-body {
  max-height: calc(100vh - 220px);
  overflow-y: auto;
  overflow-x: visible;
}

/* ---------- Stripe Elements ---------- */
modal-container .credit-card.payfields,
modal-container app-payment-method .credit-card {
  margin: 0 !important;
}

modal-container .form-row {
  display: block;
  margin: 0 0 var(--acct-space-sm);
}

modal-container .form-row:last-child {
  margin-bottom: 0;
}

modal-container .form-row > [class*="col-"] {
  width: 100%;
  max-width: 100%;
  padding: 0;
}

modal-container .form-row.mt-5 {
  margin-top: var(--acct-space-md) !important;
}

/* Stripe's own iframes size themselves — just give them room to breathe */
modal-container .StripeElement {
  width: 100%;
  min-width: 0;
}

modal-container #payment-element-setup,
modal-container #address-element-setup {
  margin: 0;
}

modal-container #address-element-setup {
  padding-top: var(--acct-space-2xs);
  border-top: 1px solid var(--acct-line);
}

/* the hidden element Stripe reads theme values from, and the legacy fallback
   fields, must stay out of the layout */
modal-container .css-sample,
modal-container .d-none {
  display: none !important;
}

/* ---------- "Store on file" ---------- */
modal-container .custom-control.custom-checkbox {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0;
  padding: 0 !important;
}

modal-container .custom-control-input {
  position: static !important;
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin: 0;
  opacity: 1 !important;
  accent-color: var(--acct-primary);
  cursor: pointer;
}

modal-container .custom-control-label {
  margin: 0;
  font-size: 13px;
  font-weight: 400 !important;
  color: var(--acct-gray-600);
  cursor: pointer;
}

modal-container .custom-control-label::before,
modal-container .custom-control-label::after {
  content: none !important;
}

modal-container .custom-checkbox a {
  display: inline-flex;
  align-items: center;
  margin: 0 !important;
  padding: 0 !important;
  color: var(--acct-gray-400);
  text-decoration: none;
}

modal-container .custom-checkbox a:hover {
  color: var(--acct-primary);
}

/* ---------- Inline spinner ---------- */
modal-container #spinner.spinner {
  width: 28px;
  height: 28px;
  margin: var(--acct-space-sm) auto;
  border: 3px solid var(--acct-line-strong);
  border-top-color: var(--acct-primary);
  border-radius: 50%;
  animation: acct-spin-simple 0.7s linear infinite;
}

modal-container #spinner.spinner.hidden,
modal-container .spinner.hidden {
  display: none !important;
}

/* ---------- Legacy card fields (shown when Stripe is unavailable) ---------- */
modal-container .card-expiration,
modal-container .card-cvv {
  display: inline-block;
  width: 50%;
  padding-right: var(--acct-space-2xs);
  vertical-align: top;
}

modal-container .card-cvv {
  padding-right: 0;
  padding-left: var(--acct-space-2xs);
}

@media only screen and (max-width: 575px) {
  modal-container .modal-body {
    max-height: calc(100vh - 190px);
  }

  modal-container .modal-footer {
    flex-wrap: wrap;
    padding: 14px 16px !important;
  }

  modal-container .modal-footer .btn,
  modal-container .btn.btn-lg {
    width: 100%;
    min-width: 0;
    margin: 0 !important;
  }

  modal-container .card-expiration,
  modal-container .card-cvv {
    width: 100%;
    padding: 0;
  }
}

/* ==========================================================================
   PAYMENT DIALOG WIDTH PARITY
   Any jQuery UI popup that hosts an iframe — Update card, address book,
   membership, shipment/release editor — is sized here, so it matches the
   Angular "Add card" modal when both are on screen.
   ========================================================================== */

.ui-dialog.ui-widget:has(#jqpopupContainer iframe) {
  width: var(--acct-modal-card-width) !important;
  max-width: var(--acct-modal-card-width) !important;
  height: var(--acct-modal-card-height) !important;
  max-height: calc(100dvh - 32px) !important;
}

/* the shell is a flex column, so the body simply takes what is left and the
   iframe fills it — no inline pixel height needed */
.ui-dialog.ui-widget:has(#jqpopupContainer iframe) .ui-dialog-content {
  flex: 1 1 auto !important;
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
}

.ui-dialog.ui-widget:has(#jqpopupContainer iframe) .ui-dialog-content > div,
.ui-dialog.ui-widget:has(#jqpopupContainer iframe) #jqpopupContainer,
.ui-dialog.ui-widget:has(#jqpopupContainer iframe) iframe {
  width: 100% !important;
  height: 100% !important;
  min-height: 0 !important;
  border: 0 !important;
  display: block !important;
}

@media only screen and (max-width: 640px) {
  /* the phone sheet rules still win — restate so the pinned width cannot
     override the full-bleed layout */
  .ui-dialog.ui-widget:has(#jqpopupContainer iframe) {
    width: 100% !important;
    max-width: 100% !important;
    height: 100dvh !important;
    max-height: 100dvh !important;
  }
}

/* ==========================================================================
   PAYMENT DIALOG WIDTH — final word
   Placed last so it beats every earlier width rule in this file regardless of
   which shell renders the dialog. jQuery UI also writes width/left/top inline
   on the element (and again on drag/resize), which is why these carry
   !important and re-centre the dialog.
   ========================================================================== */

/* jQuery UI: Update card, address book, membership */
html body .ui-dialog.ui-widget:has(#jqpopupContainer iframe) {
  width: var(--acct-modal-card-width) !important;
  min-width: 0 !important;
  max-width: var(--acct-modal-card-width) !important;
  /* jQuery UI writes `height: auto` inline and then pixel-sizes the body;
     size the shell instead and let the flex column distribute it */
  height: var(--acct-modal-card-height) !important;
  min-height: 0 !important;
  max-height: calc(100dvh - 32px) !important;
  top: 50% !important;
  left: 50% !important;
  right: auto !important;
  bottom: auto !important;
  transform: translate(-50%, -50%) !important;
}

/* Angular: Add a credit/debit card */
html body modal-container .modal-dialog:has(app-payment-profile-details),
html body modal-container .modal-dialog:has(app-stripe-hosted-payments),
html body modal-container .modal-dialog:has(app-payment-method) {
  width: var(--acct-modal-card-width) !important;
  min-width: 0 !important;
  max-width: var(--acct-modal-card-width) !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

@media only screen and (max-width: 640px) {
  html body .ui-dialog.ui-widget:has(#jqpopupContainer iframe) {
    width: 100% !important;
    max-width: 100% !important;
    height: 100dvh !important;
    max-height: 100dvh !important;
    left: 0 !important;
    top: 0 !important;
    transform: none !important;
  }

  html body modal-container .modal-dialog:has(app-payment-profile-details),
  html body modal-container .modal-dialog:has(app-stripe-hosted-payments),
  html body modal-container .modal-dialog:has(app-payment-method) {
    width: 100% !important;
    max-width: 100% !important;
  }
}

/* ==========================================================================
   MODAL SIZE — single source of truth, last word in the sheet
   Every dialog on the site resolves to --acct-modal-width /
   --acct-modal-height, whichever component renders it.
   ========================================================================== */

html body .ui-dialog.ui-widget,
html body modal-container .modal-dialog {
  width: var(--acct-modal-width) !important;
  min-width: 0 !important;
  max-width: var(--acct-modal-width) !important;
}

html body .ui-dialog.ui-widget {
  height: var(--acct-modal-height) !important;
  min-height: 0 !important;
  max-height: calc(100dvh - 32px) !important;
  top: 50% !important;
  left: 50% !important;
  right: auto !important;
  bottom: auto !important;
  transform: translate(-50%, -50%) !important;
}

/* Angular dialogs size to their content but never exceed the shared height */
html body modal-container .modal-dialog > .modal-content {
  max-height: var(--acct-modal-height) !important;
  overflow: visible;
}

html body modal-container .modal-body {
  max-height: calc(var(--acct-modal-height) - 132px) !important;
  overflow-y: auto;
}

@media only screen and (max-width: 640px) {
  html body .ui-dialog.ui-widget,
  html body modal-container .modal-dialog {
    width: 100% !important;
    max-width: 100% !important;
  }

  html body .ui-dialog.ui-widget {
    height: 100dvh !important;
    max-height: 100dvh !important;
    top: 0 !important;
    left: 0 !important;
    transform: none !important;
  }

  html body modal-container .modal-dialog > .modal-content {
    max-height: calc(100dvh - 16px) !important;
  }

  html body modal-container .modal-body {
    max-height: calc(100dvh - 148px) !important;
  }
}

/* ==========================================================================
   CATALOG SUGGESTIONS (app-catalog-suggestions)
   "Customers who bought … also bought" carousel shown under the basket and
   after add-to-cart. ngx-bootstrap carousel + Bootstrap card.
   ========================================================================== */

app-catalog-suggestions {
  display: block;
  font-family: var(--acct-font);
  color: var(--acct-gray-700);
}

app-catalog-suggestions .card.shopping-suggestion {
  position: relative;
  margin: var(--acct-space-md) 0 0 !important;
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius-card);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
  /* not `hidden`: the arrows sit in the body gutter and were being clipped */
  overflow: visible;
}

/* the header still needs the card's rounded top corners */
app-catalog-suggestions .card.shopping-suggestion > .card-header {
  border-top-left-radius: var(--acct-radius-card) !important;
  border-top-right-radius: var(--acct-radius-card) !important;
}

/* ---------- Header ---------- */
app-catalog-suggestions .card-header {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 !important;
  padding: 14px 20px !important;
  background: var(--acct-surface) !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line-strong) !important;
  border-radius: 0 !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  letter-spacing: -0.005em;
  color: var(--acct-gray-800) !important;
}

app-catalog-suggestions .card-header i {
  color: var(--acct-gray-500);
  font-size: 13px;
}

app-catalog-suggestions .card-body {
  padding: var(--acct-space-md) 46px !important;   /* gutter for the arrows */
  overflow: visible;
}

/* ---------- Carousel frame ---------- */
app-catalog-suggestions .carousel {
  position: relative;
}

app-catalog-suggestions .carousel-inner {
  display: flex !important;
  align-items: stretch;
  gap: var(--acct-space-sm);
  overflow: hidden;
}

app-catalog-suggestions slide.carousel-item,
app-catalog-suggestions .carousel-item {
  display: block !important;
  float: none !important;
  margin: 0 !important;
}

app-catalog-suggestions slide > .item {
  height: 100%;
}

/* ---------- Product tile ---------- */
app-catalog-suggestions .product {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  height: 100%;
  padding: var(--acct-space-sm);
  background: var(--acct-white);
  border: 1px solid var(--acct-line);
  border-radius: var(--acct-radius);
  text-align: center;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

app-catalog-suggestions .product:hover {
  border-color: var(--acct-btn-border);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
}

app-catalog-suggestions .img-thumbnail {
  width: auto;
  max-width: 100%;
  height: 130px;
  object-fit: contain;
  padding: 0;
  background: none;
  border: none !important;
  border-radius: 0;
}

app-catalog-suggestions .h-max-150p {
  max-height: 130px !important;
}

app-catalog-suggestions a.prod-title {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: 38px;
  font-family: var(--acct-font);
  font-size: 14px;
  font-weight: 600;
  line-height: 1.35;
  color: var(--acct-gray-800);
  text-decoration: none;
}

app-catalog-suggestions a.prod-title:hover {
  color: var(--acct-primary);
  text-decoration: underline;
}

/* ---------- Price ---------- */
app-catalog-suggestions .add-to-cart {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  width: 100%;
  margin-top: auto;                 /* pins the buy block to the bottom */
}

app-catalog-suggestions .price-container,
app-catalog-suggestions .price-container.mr-3 {
  display: flex !important;
  align-items: baseline;
  justify-content: center;
  gap: 6px;
  margin: 0 !important;
}

/* the "Price" caption is redundant beside the figure */
app-catalog-suggestions .price-label {
  display: none;
}

app-catalog-suggestions .price {
  font-family: var(--acct-font) !important;
  font-size: 15px !important;
  font-weight: 600 !important;
  color: var(--acct-gray-800) !important;
  white-space: nowrap;
}

app-catalog-suggestions .price.retail.del,
app-catalog-suggestions .price.del {
  display: inline !important;
  font-size: 12px !important;
  font-weight: 400 !important;
  text-decoration: line-through;
  color: var(--acct-gray-500) !important;
}

/* ---------- Qty + Add to Cart ---------- */
app-catalog-suggestions .cmd-container {
  width: 100%;
}

app-catalog-suggestions .cmd-container form {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 8px;
}

app-catalog-suggestions .qty-selector-container,
app-catalog-suggestions .qty-selector-container.mr-3 {
  display: block !important;
  width: 100%;
  margin: 0 !important;
}

app-catalog-suggestions .qty-selector,
app-catalog-suggestions .btn-group {
  width: 100% !important;
}

app-catalog-suggestions #button-qty-selector,
app-catalog-suggestions .qty-selector .btn {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  width: 100% !important;
  min-height: 38px;
  padding: 6px 12px !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  box-shadow: none !important;
}

app-catalog-suggestions .qty-selector .caret {
  display: inline-block;
  width: 0;
  height: 0;
  border-top: 4px solid currentColor;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}

app-catalog-suggestions .btn,
app-catalog-suggestions .btn.btn-primary {
  width: 100%;
  min-height: 40px;
  margin: 0 !important;
  padding: 9px 14px !important;
  background: var(--acct-white) !important;
  background-color: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  box-shadow: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease;
}

app-catalog-suggestions .btn:hover,
app-catalog-suggestions .btn.btn-primary:hover {
  background: var(--acct-btn-hover-bg) !important;
  background-color: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

/* ---------- Carousel controls ---------- */
/* Bootstrap sizes these as `width: 15%` full-height bars with a gradient
   background, so they have to be forced square before a radius reads as a
   circle. */
app-catalog-suggestions .carousel-control,
app-catalog-suggestions .carousel-control-prev,
app-catalog-suggestions .carousel-control-next {
  position: absolute !important;
  top: 50% !important;
  bottom: auto !important;
  transform: translateY(-50%);
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  flex: 0 0 auto !important;
  box-sizing: border-box !important;
  width: 34px !important;
  min-width: 34px !important;
  max-width: 34px !important;
  height: 34px !important;
  min-height: 34px !important;
  max-height: 34px !important;
  aspect-ratio: 1 / 1;
  padding: 0 !important;
  margin: 0 !important;
  background: var(--acct-white) !important;
  background-image: none !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: 999px !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
  opacity: 1 !important;
  color: var(--acct-gray-700) !important;
  text-shadow: none;
  overflow: hidden;
  transition: background-color 0.2s ease, border-color 0.2s ease;
  z-index: 2;
}

app-catalog-suggestions .carousel-control-prev {
  left: -40px;
}

app-catalog-suggestions .carousel-control-next {
  right: -40px;
}

app-catalog-suggestions .carousel-control:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover);
}

/* draw the chevrons rather than relying on Bootstrap's sprite images */
app-catalog-suggestions .carousel-control-prev-icon,
app-catalog-suggestions .carousel-control-next-icon,
app-catalog-suggestions .icon-prev,
app-catalog-suggestions .icon-next {
  width: 8px !important;
  height: 8px !important;
  background-image: none !important;
  border-top: 2px solid currentColor;
  border-right: 2px solid currentColor;
}

app-catalog-suggestions .carousel-control-prev-icon,
app-catalog-suggestions .icon-prev {
  transform: rotate(-135deg);
  margin-left: 3px;
}

app-catalog-suggestions .carousel-control-next-icon,
app-catalog-suggestions .icon-next {
  transform: rotate(45deg);
  margin-right: 3px;
}

app-catalog-suggestions .sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* ---------- Indicators ---------- */
app-catalog-suggestions .carousel-indicators {
  position: static;
  display: flex;
  justify-content: center;
  gap: 6px;
  margin: var(--acct-space-sm) 0 0;
  padding: 0;
  list-style: none;
}

app-catalog-suggestions .carousel-indicators li {
  width: 6px;
  height: 6px;
  margin: 0;
  background: var(--acct-line-strong);
  border: none;
  border-radius: 50%;
  text-indent: -999px;
  opacity: 1;
  cursor: pointer;
  transition: background-color 0.2s ease;
}

app-catalog-suggestions .carousel-indicators li.active {
  background: var(--acct-gray-500);
}

/* a single page of results needs no indicator row */
app-catalog-suggestions .carousel-indicators:has(li:only-child) {
  display: none;
}

/* ---------- Responsive ---------- */
@media only screen and (max-width: 767px) {
  app-catalog-suggestions .card-body {
    padding: var(--acct-space-sm) 40px !important;
  }

  app-catalog-suggestions .carousel-control-prev {
    left: -34px;
  }

  app-catalog-suggestions .carousel-control-next {
    right: -34px;
  }

  app-catalog-suggestions .img-thumbnail,
  app-catalog-suggestions .h-max-150p {
    height: 100px;
    max-height: 100px !important;
  }

  app-catalog-suggestions a.prod-title {
    font-size: 13px;
  }
}

/* ==========================================================================
   BASKET — card headers and the place-order block
   Newer markup uses `.card-header.mx-4.px-0` instead of `.row.header`. The
   `mx-4` utility insets the header by 1.5rem on each side, so its grey fill
   stopped short of the card edges.
   ========================================================================== */

#basket.basket .section.card > .card-header,
#basket.basket .card-header {
  display: flex !important;
  align-items: center;
  gap: 8px;
  width: auto !important;
  margin: 0 !important;                 /* kills .mx-4 */
  padding: 14px 20px !important;        /* kills .px-0 / .pb-0 */
  background: var(--acct-surface) !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line-strong) !important;
  border-radius: 0 !important;
  font-family: var(--acct-font) !important;
  font-size: 15px !important;
  font-weight: 600 !important;
  letter-spacing: -0.005em !important;
  text-transform: none !important;
  color: var(--acct-gray-800) !important;
}

#basket.basket .card-header i,
#basket.basket .card-header .icon {
  margin: 0 !important;
  color: var(--acct-gray-500);
  font-size: 14px;
}

/* the "Unit Price" caption rides along inside the header */
#basket.basket .card-header > .col-12 {
  flex: 1 1 auto;
  width: auto !important;
  max-width: none !important;
  padding: 0 !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--acct-gray-500) !important;
}

#basket.basket .section.card {
  margin-bottom: var(--acct-space-md) !important;
}

#basket.basket .card-body {
  padding: var(--acct-space-md) !important;
}

/* ---------- Empty state ----------
   `<div class="row h-min-250p"><div class="col-12 my-auto"><h2>` — the only
   h2 the cart renders, and it inherited the storefront's display face. It is
   a status message, not a page title, so it is sized down accordingly. */
app-basket .h-min-250p,
#basket.basket .h-min-250p {
  align-items: center;
  min-height: 200px;
  margin: 0;
}

app-basket .h-min-250p h2,
#basket.basket .h-min-250p h2,
app-cart-items .h-min-250p h2 {
  margin: 0 !important;
  font-size: 17px !important;
  font-weight: 600 !important;
  line-height: 1.4 !important;
  letter-spacing: -0.01em !important;
  color: var(--acct-gray-600) !important;
}

/* ---------- Delivery options inside the basket ---------- */
#basket.basket .shipping-options .row {
  margin: 0 -4px;
}

#basket.basket .shipping-option-line {
  padding: 4px !important;
}

#basket.basket .shipping-option-line .custom-control.custom-radio {
  align-items: center;
  height: 100%;
  margin: 0;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  cursor: pointer;
  transition: border-color 0.2s ease, background-color 0.2s ease,
    box-shadow 0.2s ease;
}

#basket.basket .shipping-option-line .custom-control.hoverable:hover {
  border-color: var(--acct-btn-border-hover) !important;
  background: var(--acct-surface-hover);
}

#basket.basket .shipping-option-line .custom-control.active {
  border-color: var(--acct-primary) !important;
  box-shadow: 0 0 0 3px var(--acct-primary-ring);
}

#basket.basket .shipping-option-line .custom-control-input {
  position: static !important;
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin: 0 0 0 14px !important;
  opacity: 1 !important;
  accent-color: var(--acct-primary);
  cursor: pointer;
}

/* the template puts `.w-100` on the label, so its flex-basis resolves to the
   whole row while the radio still needs its 16px + 14px beside it. Without
   `min-width: 0` it cannot shrink below min-content — and the cost is
   `.text-nowrap` — so the option bled out of the card on narrow screens. */
#basket.basket .shipping-option-line .custom-control-label {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex: 1 1 auto;
  width: auto !important;
  min-width: 0;
  margin: 0;
  padding: 12px 14px !important;
  font-size: 14px;
  font-weight: 500 !important;
  color: var(--acct-gray-700);
  cursor: pointer;
}

#basket.basket .custom-control-label::before,
#basket.basket .custom-control-label::after {
  content: none !important;
}

#basket.basket .shipping-option-line .description {
  min-width: 0;
  overflow-wrap: anywhere;
}

#basket.basket .shipping-option-line .cost {
  flex: 0 0 auto;
  font-weight: 600;
  color: var(--acct-gray-800);
}

/* ---------- Coupon chip on a line item ---------- */
#basket.basket .coupon-code .btn-xs,
#basket.basket .coupon-code .btn-light {
  display: inline-flex;
  align-items: center;
  padding: 5px 10px !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-600) !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  line-height: 1.3 !important;
  cursor: pointer;
}

#basket.basket .coupon-code .btn-xs:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

#basket.basket .coupon-code .small {
  font-size: 12px;
}

/* ---------- Place your order ---------- */
#basket.basket .card.border {
  margin-top: var(--acct-space-md) !important;
  padding: var(--acct-space-md) !important;
  background: var(--acct-surface);
  border: 1px solid var(--acct-line-strong) !important;
  border-radius: var(--acct-radius-card);
}

#basket.basket .card.border .row {
  align-items: center;
  margin: 0;
}

#basket.basket .card.border .h4.label {
  margin: 0 0 2px;
  font-family: var(--acct-font) !important;
  font-size: 17px !important;
  font-weight: 600 !important;
  color: var(--acct-gray-800) !important;
}

#basket.basket .card.border span:not(.label) {
  font-size: 12px;
  color: var(--acct-gray-500);
}

#basket.basket .card.border a {
  color: var(--acct-gray-600);
  text-decoration: underline;
}

@media only screen and (max-width: 767px) {
  #basket.basket .card-header {
    padding: 14px 16px !important;
  }

  #basket.basket .card-header > .col-12 {
    display: none !important;
  }

  /* the negative row gutter has nothing to pull against once the card body
     tightens up, so it pushed the options past the card edge */
  #basket.basket .shipping-options .row {
    margin: 0;
  }

  #basket.basket .shipping-option-line {
    padding: 0 0 8px !important;
  }
}

@media only screen and (max-width: 480px) {
  /* description and price stop competing for one line: label stacks, price
     drops beneath it left-aligned */
  #basket.basket .shipping-option-line .custom-control-label {
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    padding: 10px 12px !important;
  }

  #basket.basket .shipping-option-line .custom-control-input {
    margin-left: 12px !important;
  }
}

/* ==========================================================================
   DATEPICKER (bs-datepicker / ngx-bootstrap)
   --------------------------------------------------------------------------
   The library's own sheet qualifies everything with the theme class —
   `.theme-default .bs-datepicker-head` is (0,2,0), so plain
   `bs-datepicker-container .bs-datepicker-head` (0,1,1) loses. Every rule
   below therefore repeats the theme classes and carries !important.
   ========================================================================== */

bs-datepicker-container,
bs-daterangepicker-container {
  z-index: 10060 !important;
  font-family: var(--acct-font) !important;
}

.bs-datepicker,
.bs-datepicker.theme-default,
.bs-datepicker.theme-green,
.bs-datepicker.theme-blue,
.bs-datepicker.theme-dark-blue,
.bs-datepicker.theme-red,
.bs-datepicker.theme-orange {
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-line-strong) !important;
  border-radius: var(--acct-radius-card) !important;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.16) !important;
  font-family: var(--acct-font) !important;
  color: var(--acct-gray-700) !important;
  overflow: hidden !important;
}

.bs-datepicker * {
  font-family: var(--acct-font) !important;
}

/* ---------- Head ---------- */
.bs-datepicker .bs-datepicker-head,
.bs-datepicker[class*="theme-"] .bs-datepicker-head {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 4px !important;
  min-width: 0 !important;
  padding: 10px 12px !important;
  background: var(--acct-surface) !important;
  background-color: var(--acct-surface) !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line-strong) !important;
  border-radius: 0 !important;
  text-align: center !important;
}

.bs-datepicker .bs-datepicker-head button,
.bs-datepicker[class*="theme-"] .bs-datepicker-head button {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-width: 30px !important;
  height: 30px !important;
  padding: 0 8px !important;
  background: transparent !important;
  background-color: transparent !important;
  border: 1px solid transparent !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  line-height: 1 !important;
  text-shadow: none !important;
  cursor: pointer;
  transition: background-color 0.2s ease, border-color 0.2s ease;
}

.bs-datepicker .bs-datepicker-head button:hover,
.bs-datepicker[class*="theme-"] .bs-datepicker-head button:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border) !important;
  color: var(--acct-gray-800) !important;
}

.bs-datepicker .bs-datepicker-head button[disabled],
.bs-datepicker .bs-datepicker-head button:disabled {
  color: var(--acct-gray-400) !important;
  background: transparent !important;
  cursor: default;
}

.bs-datepicker .bs-datepicker-head button.previous span,
.bs-datepicker .bs-datepicker-head button.next span {
  font-size: 20px !important;
  line-height: 1 !important;
}

/* ---------- Body ---------- */
.bs-datepicker .bs-datepicker-body,
.bs-datepicker[class*="theme-"] .bs-datepicker-body {
  padding: 10px !important;
  min-height: 0 !important;
  border: none !important;
  background: var(--acct-white) !important;
}

.bs-datepicker .bs-datepicker-body table {
  width: 100% !important;
  border-collapse: separate !important;
  border-spacing: 2px !important;
}

.bs-datepicker .bs-datepicker-body table th,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table th {
  padding: 4px 0 !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.04em !important;
  text-transform: uppercase !important;
  text-align: center !important;
  color: var(--acct-gray-500) !important;
}

.bs-datepicker .bs-datepicker-body table td,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td {
  padding: 0 !important;
  color: var(--acct-gray-700) !important;
}

.bs-datepicker .bs-datepicker-body table td span,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td span,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table.days td span,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table.weeks td span {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 32px !important;
  height: 32px !important;
  margin: 0 auto !important;
  padding: 0 !important;
  background: transparent !important;
  border: none !important;
  border-radius: 50% !important;
  font-size: 13px !important;
  line-height: 1 !important;
  color: var(--acct-gray-700) !important;
  transition: background-color 0.15s ease, color 0.15s ease;
}

.bs-datepicker .bs-datepicker-body table td:not(.disabled) span:not(.disabled):not(.is-other-month):hover,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td span:not(.disabled):not(.selected):hover {
  background: var(--acct-btn-hover-bg) !important;
  color: var(--acct-gray-800) !important;
  cursor: pointer;
}

/* week-number gutter */
.bs-datepicker .bs-datepicker-body table td.week span,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table.weeks td.week span {
  width: 26px !important;
  font-size: 11px !important;
  color: var(--acct-gray-400) !important;
  background: transparent !important;
  cursor: default;
}

.bs-datepicker .bs-datepicker-body table td.week span:hover {
  background: transparent !important;
  color: var(--acct-gray-400) !important;
}

/* adjacent months */
.bs-datepicker .bs-datepicker-body table td span.is-other-month,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td span.is-other-month {
  color: var(--acct-gray-400) !important;
  opacity: 0.7 !important;
}

/* out-of-range days */
.bs-datepicker .bs-datepicker-body table td span.disabled,
.bs-datepicker .bs-datepicker-body table td.disabled span,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td span.disabled {
  background: transparent !important;
  color: var(--acct-gray-400) !important;
  opacity: 0.45 !important;
  text-decoration: line-through;
  pointer-events: none;
}

/* today */
.bs-datepicker .bs-datepicker-body table td span.is-highlighted:not(.selected),
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td span.is-highlighted:not(.selected) {
  background: var(--acct-surface) !important;
  box-shadow: inset 0 0 0 1px var(--acct-btn-border) !important;
  color: var(--acct-gray-800) !important;
  font-weight: 600 !important;
}

/* selected — the library paints this green/blue per theme */
.bs-datepicker .bs-datepicker-body table td span.selected,
.bs-datepicker .bs-datepicker-body table td.selected span,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td span.selected,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td.selected span,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td span[class*="select-start"],
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td span[class*="select-end"],
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td.active-week span:hover {
  background: var(--acct-primary) !important;
  background-color: var(--acct-primary) !important;
  color: var(--acct-white) !important;
  font-weight: 600 !important;
}

/* range fill */
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td.in-range:not(.select-start)::before,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table td span.in-range:not(.select-start)::before {
  background: var(--acct-primary-tint) !important;
}

/* month / year grids */
.bs-datepicker .bs-datepicker-body table.months td span,
.bs-datepicker .bs-datepicker-body table.years td span,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table.months td span,
.bs-datepicker[class*="theme-"] .bs-datepicker-body table.years td span {
  width: auto !important;
  min-width: 56px !important;
  height: 32px !important;
  padding: 0 10px !important;
  border-radius: var(--acct-radius) !important;
}

/* ---------- Buttons ---------- */
.bs-datepicker .bs-datepicker-buttons,
.bs-datepicker[class*="theme-"] .bs-datepicker-buttons {
  display: flex !important;
  justify-content: flex-end !important;
  gap: 8px !important;
  margin: 0 !important;
  padding: 10px 12px !important;
  background: var(--acct-surface) !important;
  border: none !important;
  border-top: 1px solid var(--acct-line-strong) !important;
}

.bs-datepicker .bs-datepicker-buttons .btn,
.bs-datepicker .bs-datepicker-buttons .btn-success,
.bs-datepicker .bs-datepicker-buttons .btn-default,
.bs-datepicker[class*="theme-"] .bs-datepicker-buttons .btn-success {
  min-height: 34px !important;
  padding: 7px 14px !important;
  background: var(--acct-white) !important;
  background-color: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  text-transform: none !important;
  box-shadow: none !important;
}

.bs-datepicker .bs-datepicker-buttons .btn:hover,
.bs-datepicker[class*="theme-"] .bs-datepicker-buttons .btn-success:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
}

.bs-datepicker .btn-clear-wrapper {
  margin: 0 !important;
}

/* the coloured side panel some themes render */
.bs-datepicker .bs-datepicker-multiple,
.bs-datepicker .bs-datepicker-predefined-btns,
.bs-datepicker .bs-media-container {
  background: var(--acct-white) !important;
}

.bs-datepicker .bs-datepicker-container {
  padding: 0 !important;
}

/* ==========================================================================
   PLACE-ORDER BLOCK IN THE SUMMARY COLUMN
   `app-basket` also renders standalone inside the checkout summary rail as
   `<div class="card container border-0">` — no `#basket` wrapper, so none of
   the basket rules matched it and it rendered as bare text on the page.
   ========================================================================== */

app-basket > .card.container,
app-basket > .card.container.border-0,
app-checkout app-basket > .card,
.cart-summary app-basket > .card {
  display: block;
  width: 100%;
  max-width: 100%;
  margin: 0 !important;
  padding: var(--acct-space-md) !important;
  background: var(--acct-white) !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  font-family: var(--acct-font);
}

app-basket > .card.container .row {
  margin: 0 !important;
}

app-basket > .card.container .row + .row {
  padding-top: 10px !important;
}

app-basket > .card.container [class*="col-"] {
  padding: 0 !important;
}

app-basket > .card.container .btn {
  width: 100%;
}

app-basket > .card.container .small {
  display: block;
  font-size: 12px;
  line-height: 1.5;
  color: var(--acct-gray-500);
}

/* when it sits in the sticky summary it needs a divider, not a card edge */
.cart-summary app-basket > .card.container,
app-checkout .cart-summary app-basket > .card {
  background: var(--acct-surface) !important;
  border-top: 1px solid var(--acct-line) !important;
}

/* ==========================================================================
   LINK COLOURS — the storefront sheet sets `a { color: var(--anchors-color) }`
   with the winery's brand colour, which bleeds into these neutral surfaces.
   Anchors here follow the account palette instead.
   ========================================================================== */

#accountContent a:not(.btn):not(.lnkSignOut):not(.btn-change-address),
app-checkout a:not(.btn),
app-basket a:not(.btn),
#basket.basket a:not(.btn),
app-catalog-suggestions a:not(.btn),
app-cart-summary a,
app-cart-items a,
modal-container a:not(.btn),
.addr-popup a:not(.btn),
.change-password a:not(.btn),
.wine-club-membership-details a:not(.btn),
.wine-club-shipment-details a:not(.btn),
:is(.container-fluid.auth, .container-fluid.forgot-password) a:not(.btn) {
  color: var(--acct-gray-600);
}

#accountContent a:not(.btn):not(.lnkSignOut):not(.btn-change-address):hover,
app-checkout a:not(.btn):hover,
app-basket a:not(.btn):hover,
#basket.basket a:not(.btn):hover,
app-catalog-suggestions a:not(.btn):hover,
modal-container a:not(.btn):hover,
.addr-popup a:not(.btn):hover,
.change-password a:not(.btn):hover,
:is(.container-fluid.auth, .container-fluid.forgot-password) a:not(.btn):hover {
  color: var(--acct-primary);
}

/* product titles and headings keep their own darker tone */
app-checkout h3.product-title a,
app-checkout label.product-title a,
#basket.basket h3.product-title a,
app-catalog-suggestions a.prod-title {
  color: var(--acct-gray-800);
}

app-checkout h3.product-title a:hover,
#basket.basket h3.product-title a:hover,
app-catalog-suggestions a.prod-title:hover {
  color: var(--acct-primary);
}

/* ==========================================================================
   ADDRESS PICKER (.customer-address-list)
   Checkout's "Your addresses" / "Ship to a secure pickup location" card.
   The two `.commands` actions are plain anchors with a plus icon — they read
   as buttons, so they are styled as buttons.
   ========================================================================== */

.customer-address-list.card {
  margin: 0 !important;
  background: none !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}

/* section headers — `mx-4` insets them, `px-0` strips their padding */
.customer-address-list > .card-header {
  display: flex !important;
  align-items: center;
  gap: 8px;
  width: auto !important;
  margin: 0 0 var(--acct-space-2xs) !important;
  padding: 0 0 10px !important;
  background: none !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line) !important;
  border-radius: 0 !important;
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: 0.02em !important;
  text-transform: none !important;
  color: var(--acct-gray-700) !important;
}

.customer-address-list > .card-header + .card-body + .card-header {
  margin-top: var(--acct-space-md) !important;
}

.customer-address-list > .card-header i {
  color: var(--acct-gray-500);
  font-size: 13px;
}

.customer-address-list > .card-body {
  padding: 0 0 var(--acct-space-2xs) !important;
}

/* ---------- Address rows ---------- */
.customer-address-list .address-line {
  margin-bottom: 8px;
  padding: 0 !important;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  transition: border-color 0.2s ease, background-color 0.2s ease,
    box-shadow 0.2s ease;
}

.customer-address-list .address-line.hoverable:hover {
  border-color: var(--acct-btn-border-hover);
  background: var(--acct-surface-hover);
}

.customer-address-list .address-line:has(.custom-control-input:checked) {
  border-color: var(--acct-primary);
  box-shadow: 0 0 0 3px var(--acct-primary-ring);
}

.customer-address-list .custom-control.custom-radio {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0;
  padding: 12px 14px;
}

.customer-address-list .custom-control-input {
  position: static !important;
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin: 0;
  opacity: 1 !important;
  accent-color: var(--acct-primary);
  cursor: pointer;
}

.customer-address-list .custom-control-label {
  flex: 1 1 auto;
  min-width: 0;
  margin: 0;
  padding: 0;
  font-size: 13px;
  font-weight: 400 !important;
  line-height: 1.5;
  color: var(--acct-gray-600);
  cursor: pointer;
}

.customer-address-list .custom-control-label::before,
.customer-address-list .custom-control-label::after {
  content: none !important;
}

.customer-address-list .custom-control-label .font-weight-bold {
  display: block;
  font-size: 14px;
  font-weight: 600 !important;
  color: var(--acct-gray-800);
}

/* the default-address star */
.customer-address-list .fa-star {
  margin-right: 4px;
  font-size: 11px;
  color: var(--acct-gray-400);
}

/* ---------- Edit Address ---------- */
.customer-address-list .address-line a {
  flex: 0 0 auto;
  margin: 0 !important;
  padding: 6px 12px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  font-size: 12px;
  font-weight: 500;
  color: var(--acct-gray-700) !important;
  text-decoration: none !important;
  white-space: nowrap;
  transition: background-color 0.2s ease, border-color 0.2s ease;
}

.customer-address-list .address-line a:hover {
  background: var(--acct-btn-hover-bg);
  border-color: var(--acct-btn-border-hover);
  color: var(--acct-gray-800) !important;
}

/* ---------- "Add new address" / "Select a pickup location" ---------- */
.customer-address-list .commands {
  margin: var(--acct-space-2xs) 0 0 !important;
}

.customer-address-list .commands a {
  display: inline-flex;
  align-items: center;
  min-height: 38px;
  padding: 8px 14px 8px 10px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  font-family: var(--acct-font);
  font-size: 13px;
  font-weight: 500;
  line-height: 1.4;
  color: var(--acct-gray-700) !important;
  text-decoration: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease;
}

.customer-address-list .commands a:hover {
  background: var(--acct-btn-hover-bg);
  border-color: var(--acct-btn-border-hover);
  color: var(--acct-gray-800) !important;
}

.customer-address-list .commands a i,
.customer-address-list .commands a .fa-plus {
  margin: 0;
  padding: 0 6px !important;
  font-size: 11px;
  color: var(--acct-gray-500);
}

/* ---------- Empty state ---------- */
.customer-address-list .card-body .text-primary,
.customer-address-list .h6.text-primary {
  margin: 0;
  padding: 20px 16px !important;
  background: var(--acct-surface);
  border: 1px dashed var(--acct-line-strong);
  border-radius: var(--acct-radius);
  font-size: 13px !important;
  font-weight: 400 !important;
  color: var(--acct-gray-500) !important;
}

/* ---------- Footer ---------- */
.customer-address-list > .card-footer {
  margin-top: var(--acct-space-sm);
  padding: var(--acct-space-sm) 0 0 !important;
  background: none !important;
  border: none !important;
  border-top: 1px solid var(--acct-line) !important;
}

@media only screen and (max-width: 575px) {
  .customer-address-list .custom-control.custom-radio {
    flex-wrap: wrap;
  }

  .customer-address-list .address-line a,
  .customer-address-list .commands a {
    width: 100%;
    justify-content: center;
    text-align: center;
  }
}

/* ==========================================================================
   GIFT OPTIONS (app-gift-options)
   "Add gift options" is a bare anchor with the gift icon as a *sibling*
   element, so the icon cannot be styled inside the control. The stray icon is
   hidden and redrawn as the button's own ::before, matching "Add new address"
   and "Add a credit/debit card".
   ========================================================================== */

app-gift-options .gift-options .row {
  margin: 0 !important;
}

app-gift-options .gift-options .row > [class*="col-"] {
  display: flex;
  align-items: center;
  padding: 0 !important;
}

/* the loose icon beside the link */
app-gift-options .gift-options .fa-gift {
  display: none !important;
}

app-gift-options .gift-options a {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 38px;
  padding: 8px 14px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  font-family: var(--acct-font);
  font-size: 13px;
  font-weight: 500;
  line-height: 1.4;
  color: var(--acct-gray-700) !important;
  text-decoration: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease;
}

app-gift-options .gift-options a:hover {
  background: var(--acct-btn-hover-bg);
  border-color: var(--acct-btn-border-hover);
  color: var(--acct-gray-800) !important;
}

app-gift-options .gift-options a::before {
  content: "\f06b";                        /* fa-gift */
  font-family: "Font Awesome 5 Pro", "Font Awesome 5 Free", "FontAwesome";
  font-weight: 900;
  font-size: 12px;
  line-height: 1;
  color: var(--acct-gray-500);
}

app-gift-options .gift-options a:hover::before {
  color: var(--acct-gray-700);
}

@media only screen and (max-width: 575px) {
  app-gift-options .gift-options a {
    width: 100%;
    justify-content: center;
  }
}

/* ==========================================================================
   LOYALTY SUMMARY (.loyalty-summary)
   Legacy 4-column table. Rendered as four stat tiles instead — the header row
   is dropped and each cell's own `.mobile-label` becomes the caption, so the
   numbers stay readable at every width.
   ========================================================================== */

/* the point total in the section header */
#accountContent #ctl00_cphBody_PageWrapper_Content_pnlLoyaltySummary > .header span,
#accountContent .section > .header span[id*="lblLoyaltyPoints"] {
  margin-left: 4px;
  padding: 2px 10px;
  background: var(--acct-primary-tint);
  border-radius: 999px;
  font-size: 13px;
  font-weight: 600;
  color: var(--acct-gray-800);
}

#accountContent .loyalty-summary {
  display: block;
}

/* "Points Summary" title row */
#accountContent .loyalty-summary > .table:has(h3) {
  display: block;
  margin: 0 0 var(--acct-space-sm);
  padding: 0;
  border: none;
  border-radius: 0;
}

#accountContent .loyalty-summary .row.h.center {
  display: block !important;
  padding: 0 !important;
  background: none !important;
  border: none !important;
}

#accountContent .loyalty-summary h3 {
  margin: 0 !important;
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: 0.04em !important;
  text-transform: uppercase !important;
  color: var(--acct-gray-500) !important;
}

/* ---------- Stat tiles ---------- */
#accountContent .loyalty-summary > .table:not(:has(h3)) {
  display: block;
  border: none;
  border-radius: 0;
  overflow: visible;
}

/* the column header row is redundant once each tile carries its own caption */
#accountContent .loyalty-summary > .table > .row.h:not(.center) {
  display: none !important;
}

#accountContent .loyalty-summary > .table > .row:not(.h) {
  display: grid !important;
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  gap: var(--acct-space-2xs) !important;
  padding: 0 !important;
  border: none !important;
  background: none !important;
}

#accountContent .loyalty-summary > .table > .row:not(.h) > div {
  display: flex !important;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  min-width: 0;
  padding: 16px 10px !important;
  background: var(--acct-surface);
  border: 1px solid var(--acct-line);
  border-radius: var(--acct-radius);
  text-align: center;
}

/* captions are the per-cell mobile labels, shown at every width here */
#accountContent .loyalty-summary > .table .mobile-label {
  display: block !important;
  order: -1;
  margin: 0;
  font-family: var(--acct-font) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
  color: var(--acct-gray-500) !important;
}

#accountContent .loyalty-summary > .table > .row:not(.h) > div > span {
  font-family: var(--acct-font) !important;
  font-size: 22px !important;
  font-weight: 600 !important;
  line-height: 1.1 !important;
  color: var(--acct-gray-800) !important;
}

/* the balance is the number that matters */
#accountContent .loyalty-summary .loyalty-point-available {
  color: var(--acct-primary) !important;
}

#accountContent .loyalty-summary > .table > .row:not(.h) > div:last-child {
  background: var(--acct-white);
  border-color: var(--acct-gray-400);
}

@media only screen and (max-width: 640px) {
  #accountContent .loyalty-summary > .table > .row:not(.h) {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }

  #accountContent .loyalty-summary > .table > .row:not(.h) > div > span {
    font-size: 19px !important;
  }
}

/* ---------- Member account balances (.member-account-summary) ----------
   Two columns, not four — without its own track list it inherits the club
   panels' `minmax(0,1fr) 150px 150px 210px` and the two balances sit against
   a pair of empty tracks. */
#accountContent .member-account-summary .table .row {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

@media only screen and (max-width: 767px) {
  #accountContent .member-account-summary .table .row {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---------- Points transactions (.loyalty-logs) ----------
   A real 5-column ledger — Date, Points, Value, Initial Points, Reason —
   nested inside `.loyalty-summary`, which is why every stat-tile rule above
   is anchored with `> .table >`: as descendants they also matched these rows
   and squeezed five cells into the four-tile grid with the header hidden.

   The shared `#accountContent .table .row` track list is the 4-column one the
   club/payment panels need, so the ledger restates its own. */
#accountContent .loyalty-logs {
  margin-top: var(--acct-space-md);
}

/* The log ships TWO tables: a caption table holding only `<h3>Transactions</h3>`
   and the ledger itself. The caption one must be flattened exactly like the
   summary's — otherwise the base `.table` border, radius and 14px row padding
   draw a box around a lone heading. */
#accountContent .loyalty-logs .table:has(h3) {
  display: block;
  margin: 0 0 var(--acct-space-xs);
  padding: 0;
  border: none;
  border-radius: 0;
  overflow: visible;
}

#accountContent .loyalty-logs .table:has(h3) .row.h.center {
  display: block !important;
  padding: 0 !important;
  background: none !important;
  border: none !important;
}

/* ---------- The ledger ---------- */
#accountContent .loyalty-logs .table:not(:has(h3)) .row {
  grid-template-columns:
    minmax(0, 1.3fr) minmax(0, 0.6fr) minmax(0, 0.7fr)
    minmax(0, 0.8fr) minmax(0, 2.2fr);
  align-items: baseline;
  gap: 12px;
  padding: 10px 14px;
}

/* Header labels here are wrapped in `<span>` — every other account table uses
   bare text — so the shared `#accountContent .table .row span` rule was
   repainting them at 14px in body grey and undoing the header's own type.
   The cells inherit the row instead. */
#accountContent .loyalty-logs .table .row.h span {
  font: inherit;
  letter-spacing: inherit;
  text-transform: inherit;
  color: inherit;
}

/* a dense ledger sits a step below the body copy, matching order history */
#accountContent .loyalty-logs .table .row:not(.h) span {
  font-size: 13px;
  line-height: 1.45;
}

/* numbers read as figures, the reason as prose */
#accountContent .loyalty-logs .table .row:not(.h) > div:nth-child(2) span,
#accountContent .loyalty-logs .table .row:not(.h) > div:nth-child(3) span,
#accountContent .loyalty-logs .table .row:not(.h) > div:nth-child(4) span {
  font-variant-numeric: tabular-nums;
  font-weight: 500;
  color: var(--acct-gray-800);
}

#accountContent .loyalty-logs .table .row:not(.h) > div:first-child span {
  color: var(--acct-gray-600);
  white-space: nowrap;
}

#accountContent .loyalty-logs .table .row:not(.h) > div:last-child span {
  color: var(--acct-gray-600);
}

/* the log's own per-cell captions ("Adjustment", "Cost") disagree with the
   column headers ("Points", "Value") — the headers win on desktop */
#accountContent .loyalty-logs .mobile-label {
  display: none;
}

/* 860px is where every other account table stacks — the ledger follows it
   rather than introducing a breakpoint of its own */
@media only screen and (max-width: 860px) {
  /* the header row cannot carry five captions on a phone; each cell falls
     back to its own label, as the rest of the account tables do */
  #accountContent .loyalty-logs .table .row.h:not(.center) {
    display: none !important;
  }

  #accountContent .loyalty-logs .table:not(:has(h3)) .row {
    grid-template-columns: minmax(0, 1fr);
    gap: 0;
    padding: 12px 14px;
  }

  #accountContent .loyalty-logs .mobile-label {
    display: block;
  }

  #accountContent .loyalty-logs .table .row:not(.h) > div:first-child span {
    white-space: normal;
  }
}

/* ==========================================================================
   DIALOG TITLEBAR FONT
   The storefront sheet styles `.ui-widget-header` / `.ui-dialog-title` with
   the winery's display face. Force Inter on every jQuery UI titlebar and its
   descendants, whatever the popup.
   ========================================================================== */

.ui-dialog .ui-dialog-titlebar,
.ui-dialog .ui-dialog-titlebar *,
.ui-dialog.ui-widget .ui-dialog-titlebar,
.ui-dialog.ui-widget .ui-dialog-titlebar *,
.ui-dialog .ui-dialog-title,
.ui-dialog.ui-widget .ui-dialog-title,
.ui-dialog .ui-dialog-titlebar .ui-button-text,
.ui-widget-header.ui-dialog-titlebar,
.ui-widget-header.ui-dialog-titlebar * {
  font-family: var(--acct-font) !important;
}

.ui-dialog .ui-dialog-title,
.ui-dialog.ui-widget .ui-dialog-title {
  font-size: 16px !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em !important;
  line-height: 1.3 !important;
  text-transform: none !important;
  color: var(--acct-gray-800) !important;
  -webkit-font-smoothing: antialiased;
}

/* ---------- Carousel arrows: never clipped ----------
   The controls live in the card-body gutter, so every ancestor between them
   and the card has to stay unclipped. Only `.carousel-inner` clips, which is
   what actually hides the off-screen slides. */
app-catalog-suggestions,
app-catalog-suggestions .card-body,
app-catalog-suggestions carousel,
app-catalog-suggestions .carousel,
app-catalog-suggestions .carousel.slide {
  overflow: visible !important;
}

app-catalog-suggestions .carousel-inner {
  overflow: hidden !important;
}

app-catalog-suggestions .carousel-control,
app-catalog-suggestions .carousel-control-prev,
app-catalog-suggestions .carousel-control-next {
  z-index: 4 !important;
}

/* very narrow viewports have no gutter to spare — sit the arrows on the
   tiles instead of beside them */
@media only screen and (max-width: 420px) {
  app-catalog-suggestions .card-body {
    padding: var(--acct-space-sm) var(--acct-space-2xs) !important;
  }

  app-catalog-suggestions .carousel-control-prev {
    left: 2px !important;
  }

  app-catalog-suggestions .carousel-control-next {
    right: 2px !important;
  }
}

/* ==========================================================================
   BUY NOW, PAY LATER (app-payment-method-buy-now-pay-later)
   --------------------------------------------------------------------------
   The Affirm branding is Stripe's *payment method messaging element*
   (`#payment-method-messaging-element`, an iframe initialised with
   `paymentMethodTypes[0]=affirm`). Stripe sizes that iframe from its own
   content and animates the height — if the element is rendered while its
   container is collapsed, hidden, or zero-width, it settles at ~9px and the
   logo never appears. These rules guarantee it has width and height to
   resolve against, and stop any ancestor from clipping it.
   ========================================================================== */

app-checkout .payment-method.buy-now-pay-later,
.payment-method.buy-now-pay-later {
  display: block;
  margin: 0 0 var(--acct-space-2xs);
  padding: var(--acct-space-xs) !important;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
}

/* the radio row */
.payment-method.buy-now-pay-later > .custom-control.custom-radio {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0;
  padding: 0;
}

.payment-method.buy-now-pay-later .custom-control-input {
  position: static !important;
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin: 0;
  opacity: 1 !important;
  accent-color: var(--acct-primary);
  cursor: pointer;
}

.payment-method.buy-now-pay-later .custom-control-label {
  margin: 0;
  font-size: 14px;
  color: var(--acct-gray-700);
  cursor: pointer;
}

.payment-method.buy-now-pay-later .custom-control-label::before,
.payment-method.buy-now-pay-later .custom-control-label::after {
  content: none !important;
}

.payment-method.buy-now-pay-later .custom-control-label .font-weight-bold {
  font-weight: 600 !important;
  color: var(--acct-gray-800);
}

/* the body under the radio */
.payment-method.buy-now-pay-later > .pl-4 {
  padding: var(--acct-space-2xs) 0 0 26px !important;
}

/* ---------- Affirm messaging element ---------- */
app-stripe-buy-now-pay-later,
app-stripe-buy-now-pay-later .buy-now-pay-later,
app-stripe-buy-now-pay-later .form-row,
#payment-method-messaging-element,
#payment-method-messaging-element .__PrivateStripeElement {
  display: block !important;
  width: 100% !important;
  min-width: 240px !important;      /* Stripe needs real width to lay out */
  overflow: visible !important;
  visibility: visible !important;
}

/* give the iframe room: Stripe animates from 0 and can settle collapsed */
#payment-method-messaging-element {
  min-height: 34px !important;
  margin: 0 0 var(--acct-space-2xs) !important;
  padding: 0 !important;
}

#payment-method-messaging-element iframe {
  width: 100% !important;
  min-width: 100% !important;
  min-height: 34px !important;
  border: 0 !important;
  display: block !important;
  opacity: 1 !important;
  visibility: visible !important;
}

/* the messaging block sits above the card fields */
app-stripe-buy-now-pay-later + div app-stripe-hosted-payments {
  display: block;
  margin-top: var(--acct-space-2xs);
}

/* Stripe theme sample + legacy fallbacks stay out of the flow */
app-stripe-buy-now-pay-later .css-sample,
app-stripe-buy-now-pay-later .d-none {
  display: none !important;
}

/* inline spinner used while the element boots */
app-stripe-buy-now-pay-later #spinner.spinner {
  width: 24px;
  height: 24px;
  margin: var(--acct-space-2xs) auto;
  border: 3px solid var(--acct-line-strong);
  border-top-color: var(--acct-primary);
  border-radius: 50%;
  animation: acct-spin-simple 0.7s linear infinite;
}

app-stripe-buy-now-pay-later #spinner.spinner.hidden {
  display: none !important;
}

/* ==========================================================================
   APP SHELL (app-root)
   Deliberately plain. The card treatment belongs to the components that
   mount inside it (basket, checkout, auth) — putting one here produced
   cards nested inside cards.
   ========================================================================== */

app-root {
  display: block;
  box-sizing: border-box;
  width: 100%;
  font-family: var(--acct-font);
  color: var(--acct-gray-700);
}

app-root * {
  box-sizing: border-box;
}

/* ==========================================================================
   CHECKOUT — AUDIT PASS
   Components present in the live template that had no rules of their own:
   the shipping-address summary, the available-balance / gift-card block,
   the decorative "+" glyphs, and the shipping line inside cart items.
   ========================================================================== */

/* ---------- Step 2: Shipping Address summary ---------- */
app-shipping-address .shipping-address .row {
  margin: 0;
}

app-shipping-address .shipping-address [class*="col-"] {
  padding: 0;
  max-width: 100%;
  flex: 1 1 auto;
}

app-checkout .address,
app-shipping-address .address {
  padding: 12px 14px;
  background: var(--acct-surface);
  border: 1px solid var(--acct-line);
  border-radius: var(--acct-radius);
  font-size: 13px;
  line-height: 1.6;
  color: var(--acct-gray-600);
}

app-checkout .address .title,
app-shipping-address .address .title {
  margin-bottom: 2px;
}

app-checkout .address .title strong,
app-shipping-address .address .title strong {
  font-size: 14px;
  font-weight: 600;
  color: var(--acct-gray-800);
}

/* contact rows read as secondary detail */
app-shipping-address .address .phone,
app-shipping-address .address .email,
app-shipping-address .address .birth-date {
  color: var(--acct-gray-500);
}

app-shipping-address .address .email {
  overflow-wrap: anywhere;
}

/* ---------- Available balance / gift card ---------- */
app-checkout .payment-method-available-balance {
  margin-top: var(--acct-space-sm);
}

app-checkout .payment-method-available-balance .card-header {
  margin: 0 !important;
  padding: 0 0 10px !important;
}

app-checkout .payment-method-available-balance .card-body {
  padding: 14px 0 0 !important;
}

/* the loose "+" glyphs the template puts beside these forms */
app-checkout .card-body > .row > .d-flex > i.fas.fa-plus,
app-checkout .card-body .d-flex > i.text-secondary {
  display: none !important;
}

app-checkout .card-body .d-flex.flex-nowrap {
  display: block !important;
}

app-checkout .gift-card {
  margin: 0 !important;
}

app-checkout .gift-card .form-row,
app-checkout .gift-card .form-row.d-flex {
  display: block !important;
  margin: 0 !important;
}

app-checkout .gift-card .form-group {
  width: 100%;
  max-width: 420px;
  margin: 0 !important;
}

app-checkout .gift-card label {
  display: block;
  margin-bottom: 6px;
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-gray-600);
}

app-checkout .gift-card .input-group {
  display: flex;
  flex-wrap: nowrap;
  align-items: stretch;
  width: 100%;
}

/* the card icon prefix */
app-checkout .gift-card .input-group-prepend {
  margin: 0;
}

app-checkout .gift-card .input-group-text {
  display: flex;
  align-items: center;
  height: 100%;
  min-height: 42px;
  padding: 0 12px;
  background: var(--acct-surface) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-right: none !important;
  border-radius: var(--acct-radius) 0 0 var(--acct-radius) !important;
  color: var(--acct-gray-500) !important;
  font-size: 13px;
}

app-checkout .gift-card .form-control {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 42px;
  padding: 10px 12px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: 0 !important;
  font-family: var(--acct-font);
  font-size: 14px;
  color: var(--acct-gray-800);
}

app-checkout .gift-card .input-group-append {
  margin: 0;
}

app-checkout .gift-card .input-group-append .btn {
  min-width: 92px;
  border-radius: 0 var(--acct-radius) var(--acct-radius) 0 !important;
  border-left: none !important;
}

/* ---------- Shipping line inside "Items and shipping" ---------- */
app-checkout .shipping-options strong {
  font-size: 13px;
  font-weight: 600;
  color: var(--acct-gray-800);
}

app-checkout .shipping-options strong .fa-truck {
  margin-right: 6px !important;
  color: var(--acct-gray-500);
}

app-checkout .shipping-options .description {
  font-size: 13px;
  color: var(--acct-gray-600);
}

/* ---------- Misc utilities the template leans on ---------- */
app-checkout .text-secondary {
  color: var(--acct-gray-500) !important;
}

app-checkout .font-size-90 {
  font-size: 13px;
}

app-checkout .sticky-offset {
  top: var(--acct-space-md);
}

/* FontAwesome 4 class names still used in a few headers */
app-checkout .card-header .fa-money,
app-checkout .card-header .fa-files-o,
app-checkout .card-header .fa-id-card-o {
  color: var(--acct-gray-500);
  font-size: 13px;
}

/* On phones the icon and the field keep one line — only the Apply button drops
   beneath them. The flex items are `.input-group-prepend` / `.input-group-append`,
   NOT the `.input-group-text` / `.btn` inside them, so the widths have to go on
   the wrappers or nothing stacks at all. */
@media only screen and (max-width: 575px) {
  app-checkout .gift-card .form-group {
    max-width: none;
  }

  app-checkout .gift-card .input-group {
    flex-wrap: wrap;
  }

  app-checkout .gift-card .input-group-prepend {
    flex: 0 0 auto;
  }

  app-checkout .gift-card .form-control {
    flex: 1 1 auto;
    width: auto;
    border-radius: 0 var(--acct-radius) var(--acct-radius) 0 !important;
  }

  app-checkout .gift-card .input-group-append {
    flex: 0 0 100%;
    width: 100%;
    margin-top: 8px !important;
  }

  app-checkout .gift-card .input-group-append .btn {
    width: 100%;
    min-width: 0;
    border-left: none !important;
    border-radius: var(--acct-radius) !important;
  }
}

/* ==========================================================================
   CHECKOUT — ANGULAR HOST ELEMENTS
   Custom elements are inline by default. Every component host in this tree
   wraps block content, so leaving them inline gives shrink-to-fit boxes,
   stray text-node gaps between siblings and unpredictable widths.
   ========================================================================== */

app-payment-methods,
app-payment-profile-list,
app-payment-method-gift-card,
app-payment-method-buy-now-pay-later,
app-stripe-hosted-payments,
app-stripe-buy-now-pay-later,
app-promo-code,
app-shipping-address,
app-delivery-options,
app-cart-shipping-options,
app-cart-items,
app-cart-summary,
app-gift-options,
app-ordering-prefs,
app-product-price,
app-product-version,
app-qty-selector,
app-add-to-cart,
app-catalog-suggestions,
app-basket,
app-alert {
  display: block;
  width: 100%;
  min-width: 0;
}

/* inline-by-design hosts */
app-product-price,
app-product-version {
  width: auto;
}

/* ---------- Payment method list: even rhythm between sections ---------- */
app-checkout .payment-method-list > .payment-method-credit-card,
app-checkout .payment-method-list > .payment-method-available-balance,
app-checkout .payment-method-list > .other {
  padding-top: var(--acct-space-sm);
  border-top: 1px solid var(--acct-line);
}

app-checkout .payment-method-list > .payment-method-credit-card:first-child,
app-checkout .payment-method-list > *:first-child {
  padding-top: 0;
  border-top: none;
}

app-checkout .payment-account-list {
  margin-bottom: 0 !important;
}

/* Bootstrap row/col gutters inside the payment card */
app-checkout .payment-method-list .card-body > .row,
app-checkout .payment-method-list .card-body > .row > [class*="col-"] {
  margin-left: 0;
  margin-right: 0;
  padding-left: 0;
  padding-right: 0;
}

/* ---------- Footer action ---------- */
app-checkout .payment-method-list > .card-footer .row,
app-checkout .payment-method-list > .card-footer [class*="col-"] {
  margin: 0;
  padding: 0;
}

app-checkout .payment-method-list > .card-footer .btn {
  min-width: 200px;
}

/* ---------- Empty payment list ---------- */
app-checkout .payment-account-list .card-body > .row {
  margin: 0;
}

/* ---------- Stripe blocks inside the payment step ---------- */
app-checkout .credit-card.payfields {
  margin-bottom: 0 !important;
}

app-checkout .credit-card.payfields .form-row + .form-row {
  margin-top: var(--acct-space-sm);
  padding-top: var(--acct-space-sm);
  border-top: 1px solid var(--acct-line);
}

app-checkout .StripeElement {
  width: 100%;
  min-width: 0;
}

app-checkout .css-sample,
app-checkout .d-none {
  display: none !important;
}

/* boot spinners inside the payment components */
app-checkout #spinner.spinner {
  width: 24px;
  height: 24px;
  margin: var(--acct-space-2xs) auto;
  border: 3px solid var(--acct-line-strong);
  border-top-color: var(--acct-primary);
  border-radius: 50%;
  animation: acct-spin-simple 0.7s linear infinite;
}

app-checkout #spinner.spinner.hidden,
app-checkout .spinner.hidden {
  display: none !important;
}

/* ---------- Legacy card fields, if Stripe is unavailable ---------- */
app-checkout .card-expiration,
app-checkout .card-cvv,
app-checkout .card-holder-name {
  padding: 0;
}

app-checkout .card-holder-name label,
app-checkout .card-expiration label,
app-checkout .card-cvv label,
app-checkout .credit-card label {
  display: block;
  margin-bottom: 6px;
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-gray-600);
}

/* ==========================================================================
   JQUERY UI IFRAME POPUPS — attribute-based match
   Every one of these dialogs is rendered with
   `aria-describedby="jqpopupContainer"`, so it can be matched with a plain
   attribute selector. This does not depend on `:has()` support and catches
   popups whose iframe has not been appended yet (jQuery UI sets the inline
   `width`/`height` before the content loads).
   ========================================================================== */

html body .ui-dialog[aria-describedby="jqpopupContainer"] {
  width: var(--acct-modal-width) !important;
  min-width: 0 !important;
  max-width: var(--acct-modal-width) !important;
  height: var(--acct-modal-height) !important;
  min-height: 0 !important;
  max-height: calc(100dvh - 32px) !important;
  top: 50% !important;
  left: 50% !important;
  right: auto !important;
  bottom: auto !important;
  transform: translate(-50%, -50%) !important;
  display: flex !important;
  flex-direction: column !important;
  margin: 0 !important;
  padding: 0 !important;
  background: var(--acct-white) !important;
  border: none !important;
  border-radius: var(--acct-radius-card) !important;
  box-shadow: 0 24px 64px rgba(0, 0, 0, 0.28), 0 2px 8px rgba(0, 0, 0, 0.12) !important;
  overflow: visible !important;
  z-index: 10000 !important;
}

html body .ui-dialog[aria-describedby="jqpopupContainer"] > .ui-dialog-titlebar {
  flex: 0 0 auto !important;
}

/* the body fills whatever the titlebar leaves, and the iframe fills the body */
html body .ui-dialog[aria-describedby="jqpopupContainer"] > #jqpopupContainer,
html body .ui-dialog[aria-describedby="jqpopupContainer"] > .ui-dialog-content {
  flex: 1 1 auto !important;
  width: 100% !important;
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
  background: var(--acct-white) !important;
  overflow: hidden !important;
}

html body .ui-dialog[aria-describedby="jqpopupContainer"] #jqpopupContainer > div,
html body .ui-dialog[aria-describedby="jqpopupContainer"] iframe {
  width: 100% !important;
  height: 100% !important;
  min-height: 0 !important;
  border: 0 !important;
  display: block !important;
}

html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-resizable-handle {
  display: none !important;
}

@media only screen and (max-width: 640px) {
  html body .ui-dialog[aria-describedby="jqpopupContainer"] {
    width: 100% !important;
    max-width: 100% !important;
    height: 100dvh !important;
    max-height: 100dvh !important;
    top: 0 !important;
    left: 0 !important;
    transform: none !important;
    border-radius: 0 !important;
  }
}

/* ==========================================================================
   RELEASE ORDER — TAB SET (Allocation / Wish List)
   `.pending-order-tabs` is a jQuery UI tab widget. The inactive panel is
   hidden with an inline style / `.ui-tabs-hide`, so nothing in this sheet may
   force panels visible. The nav is restyled as a segmented control.
   ========================================================================== */

/* hidden panels stay hidden, whatever else matches them */
.wine-club-shipment-details .ui-tabs-panel.ui-tabs-hide,
.wine-club-shipment-details .ui-tabs-panel[aria-hidden="true"],
.wine-club-shipment-details [role="tabpanel"][aria-hidden="true"],
.wine-club-shipment-details .pending-order-tabs > div[style*="display: none"],
.wine-club-shipment-details .pending-order-tabs > div[style*="display:none"] {
  display: none !important;
}

.wine-club-shipment-details .pending-order-tabs {
  padding: 0 !important;
  background: none !important;
  border: none !important;
  border-radius: 0 !important;
  font-family: var(--acct-font);
}

/* ---------- Tab strip ---------- */
.wine-club-shipment-details .ui-tabs-nav,
.wine-club-shipment-details .pending-order-tabs > ul {
  display: flex !important;
  flex-wrap: wrap;
  gap: 4px;
  margin: 0 0 var(--acct-space-md) !important;
  padding: 4px !important;
  list-style: none !important;
  background: var(--acct-surface) !important;
  border: 1px solid var(--acct-line-strong) !important;
  border-radius: var(--acct-radius) !important;
  overflow: visible !important;
}

.wine-club-shipment-details .ui-tabs-nav li,
.wine-club-shipment-details .pending-order-tabs > ul > li {
  float: none !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
  background: none !important;
  border-radius: var(--acct-radius) !important;
  white-space: nowrap;
}

.wine-club-shipment-details .ui-tabs-nav li a,
.wine-club-shipment-details .pending-order-tabs > ul > li a {
  display: block !important;
  float: none !important;
  padding: 8px 16px !important;
  background: transparent !important;
  border: none !important;
  border-radius: var(--acct-radius) !important;
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  line-height: 1.4 !important;
  text-transform: none !important;
  text-decoration: none !important;
  color: var(--acct-gray-600) !important;
  transition: background-color 0.2s ease, color 0.2s ease;
}

.wine-club-shipment-details .ui-tabs-nav li:hover a {
  background: rgba(0, 0, 0, 0.04) !important;
  color: var(--acct-gray-800) !important;
}

/* selected tab */
.wine-club-shipment-details .ui-tabs-nav li.ui-tabs-active,
.wine-club-shipment-details .ui-tabs-nav li.ui-tabs-selected,
.wine-club-shipment-details .ui-tabs-nav li.ui-state-active,
.wine-club-shipment-details .pending-order-tabs > ul > li.active {
  background: var(--acct-white) !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08) !important;
}

.wine-club-shipment-details .ui-tabs-nav li.ui-tabs-active a,
.wine-club-shipment-details .ui-tabs-nav li.ui-state-active a,
.wine-club-shipment-details .pending-order-tabs > ul > li.active a {
  background: var(--acct-white) !important;
  color: var(--acct-gray-800) !important;
  font-weight: 600 !important;
}

/* disabled tab */
.wine-club-shipment-details .ui-tabs-nav li.ui-state-disabled a {
  color: var(--acct-gray-400) !important;
  cursor: default;
}

/* ---------- Panels ---------- */
.wine-club-shipment-details .ui-tabs-panel {
  padding: 0 !important;
  background: none !important;
  border: none !important;
}

/* the widget chrome jQuery UI paints on the container */
.wine-club-shipment-details .pending-order-tabs.ui-widget-content,
.wine-club-shipment-details .pending-order-tabs.ui-corner-all {
  background: none !important;
  border: none !important;
  color: inherit !important;
}

@media only screen and (max-width: 560px) {
  .wine-club-shipment-details .ui-tabs-nav,
  .wine-club-shipment-details .pending-order-tabs > ul {
    flex-direction: column;
  }

  .wine-club-shipment-details .ui-tabs-nav li a {
    text-align: center;
  }
}

/* ==========================================================================
   ACTIVE CART / MINI-CART DRAWER (.activeCart-panel)
   --------------------------------------------------------------------------
   Ported from the Barons Creek build and standardised on the account tokens.
   The source markup is nested ASP.NET tables (`table.activeCart` → `tbody` →
   `tr` → `td.activeCartMainContainer`), which are flattened into a flex
   column here. The `.open` / overlay / transform mechanics are driven by
   main.js and are reproduced so this file works on its own.
   ========================================================================== */

/* ---------- Drawer shell ----------
   account.js relocates this element to the WebForms form (never <body>: that
   would break partial postbacks), because a `position: fixed`
   panel is positioned against (and clipped by) any ancestor that has a
   transform, filter, contain or overflow:hidden — which is why the drawer
   would not slide in while it sat inside page content. */
.activeCart-panel {
  position: fixed !important;
  top: 0 !important;
  bottom: 0 !important;
  right: 0 !important;
  left: auto !important;
  width: 100% !important;
  height: 100vh !important;
  height: 100dvh !important;
  margin: 0 !important;
  padding: 0 !important;
  display: flex !important;
  flex-direction: column !important;
  background: var(--acct-white) !important;
  box-shadow: -20px 0 50px rgba(0, 0, 0, 0.18) !important;
  font-family: var(--acct-font) !important;
  color: var(--acct-gray-700);
  transform: translateX(100%);
  transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1);
  z-index: 10001 !important;
}

.activeCart-panel.open {
  transform: translateX(0);
}


/* the transform mechanics carry !important so source order between
   account.css and any other sheet cannot break the slide-in */
html body .activeCart-panel {
  transform: translateX(100%) !important;
  visibility: visible !important;
  opacity: 1 !important;
}

html body .activeCart-panel.open {
  transform: translateX(0) !important;
}

/* the control ships with inline display:none / hidden wrappers on some
   templates — the panel itself must always be laid out */
html body .activeCart-panel[style*="display: none"],
html body .activeCart-panel[style*="display:none"] {
  display: flex !important;
}

@media only screen and (min-width: 481px) {
  .activeCart-panel {
    width: 420px !important;
    max-width: 92vw !important;
  }
}

.cart-drawer-overlay {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100%;
  background: rgba(17, 17, 17, 0.5);
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.25s ease, visibility 0.25s ease;
  z-index: 10000;
}

.cart-drawer-overlay.open {
  opacity: 1;
  visibility: visible;
}

/* ---------- Flatten the ASP.NET tables ---------- */
.activeCart-panel .uc.activeCart,
.activeCart-panel table.activeCart,
.activeCart-panel table.activeCart > tbody {
  display: flex !important;
  flex-direction: column !important;
  width: 100% !important;
  height: 100% !important;
  min-height: 0 !important;
  border: none !important;
  background: var(--acct-white) !important;
}

.activeCart-panel table.activeCart > tbody > tr:first-child,
.activeCart-panel .activeCartMainContainer {
  display: flex !important;
  flex-direction: column !important;
  flex: 1 1 auto !important;
  width: 100% !important;
  min-height: 0 !important;
  padding: 0 !important;
}

/* ---------- Header ---------- */
.activeCart-panel .cartHeader {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  flex: 0 0 auto !important;
  margin: 0 !important;
  padding: 16px 20px !important;
  background: var(--acct-surface) !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line-strong) !important;
  font-family: var(--acct-font) !important;
  font-size: 15px !important;
  font-weight: 600 !important;
  letter-spacing: -0.005em !important;
  text-transform: none !important;
  color: var(--acct-gray-800) !important;
}

.activeCart-panel .close-cart-drawer {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 32px !important;
  height: 32px !important;
  min-width: 32px !important;
  padding: 0 !important;
  background: transparent !important;
  border: none !important;
  border-radius: var(--acct-radius) !important;
  font-size: 20px !important;
  font-weight: 400 !important;
  line-height: 1 !important;
  color: var(--acct-gray-500) !important;
  opacity: 1 !important;
  cursor: pointer !important;
  transition: background-color 0.2s ease, color 0.2s ease !important;
}

.activeCart-panel .close-cart-drawer:hover {
  background: var(--acct-btn-hover-bg) !important;
  color: var(--acct-gray-800) !important;
  transform: none !important;
}

/* ---------- Body ---------- */
.activeCart-panel .cartBody {
  flex: 1 1 auto !important;
  min-height: 0 !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 14px !important;
  padding: 16px 20px 20px !important;
  overflow-y: auto !important;
  background: var(--acct-white) !important;
}

/* spacer markup the control emits */
.activeCart-panel .cartBody br,
.activeCart-panel .space,
.activeCart-panel .space-after-items,
.activeCart-panel .tr-empty-last,
.activeCart-panel .no-calculations,
.activeCart-panel [id$="Label1"],
.activeCart-panel .txtContainer {
  display: none !important;
}

/* ---------- Checkout / Update ---------- */
.activeCart-panel .cart-checkout-container {
  order: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}

.activeCart-panel [id$="pnlUpdateCart"] center {
  display: block !important;
}

.activeCart-panel .cart-checkout-container .btn,
.activeCart-panel .cart-checkout-container .btn.chk,
.activeCart-panel [id$="pnlUpdateCart"] .btn {
  display: block !important;
  box-sizing: border-box !important;
  width: 100% !important;
  min-height: 44px !important;
  margin: 0 !important;
  padding: 12px 20px !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  line-height: 1.4 !important;
  text-align: center !important;
  text-transform: none !important;
  text-decoration: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease !important;
}

.activeCart-panel .cart-checkout-container .btn:hover,
.activeCart-panel [id$="pnlUpdateCart"] .btn:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
  transform: none !important;
}

/* ---------- Section labels ---------- */
.activeCart-panel .cart-items-label {
  display: block !important;
  margin: 0 !important;
  padding: 0 !important;
  text-align: left !important;
}

.activeCart-panel .cart-items-label .lblVal,
.activeCart-panel .cart-items-label strong {
  font-family: var(--acct-font) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
  color: var(--acct-gray-500) !important;
}

/* "Other items in basket" splits one list into two for no user benefit —
   the label row is removed, every item row is kept */
.activeCart-panel .cart-items-secondary-label {
  display: none !important;
}

.activeCart-panel .rule {
  height: 0 !important;
  margin: 8px 0 0 !important;
  border: none !important;
  border-top: 1px solid var(--acct-line) !important;
}

/* ---------- Item rows ---------- */
.activeCart-panel .cart-items-container,
.activeCart-panel .cart-items-container tbody {
  display: block !important;
  width: 100% !important;
  border: none !important;
}

.activeCart-panel .cart-item-line {
  display: flex !important;
  align-items: flex-start !important;
  gap: 12px !important;
  width: 100% !important;
  margin: 0 !important;
  padding: 14px 0 !important;
  background: transparent !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line-soft) !important;
}

.activeCart-panel .cart-item-line .thumb {
  display: block !important;
  flex: 0 0 60px !important;
  width: 60px !important;
  max-width: 60px !important;
  min-width: 60px !important;
  height: auto !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
  background: none !important;
  overflow: visible !important;
}

/* the thumbnail must survive every generic `img` rule in the storefront
   sheet (display/visibility/height resets included) */
.activeCart-panel .cart-item-line .thumb img,
.activeCart-panel .cart-item-line td.thumb > img,
.activeCart-panel .cart-item-line img[id*="imgThumb"] {
  display: block !important;
  visibility: visible !important;
  opacity: 1 !important;
  width: 60px !important;
  min-width: 60px !important;
  max-width: 60px !important;
  height: 60px !important;
  min-height: 60px !important;
  max-height: 60px !important;
  margin: 0 !important;
  padding: 0 !important;
  object-fit: contain !important;
  background: var(--acct-surface) !important;
  border: 1px solid var(--acct-line) !important;
  border-radius: var(--acct-radius) !important;
  box-shadow: none !important;
  transform: none !important;
  transition: none !important;
}

.activeCart-panel .cart-item-line .prod-info {
  flex: 1 1 auto !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 4px !important;
  min-width: 0 !important;
  padding: 0 !important;
}

.activeCart-panel .cart-item-line .prod-info .title {
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  line-height: 1.3 !important;
  letter-spacing: 0 !important;
  color: var(--acct-gray-800) !important;
}

.activeCart-panel .cart-item-line .price {
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  color: var(--acct-gray-800) !important;
}

.activeCart-panel .cart-item-line .price-label {
  font-weight: 400 !important;
  color: var(--acct-gray-500) !important;
}

.activeCart-panel .cart-item-line .price::after {
  content: " / ea" !important;
  font-size: 11px !important;
  font-weight: 400 !important;
  color: var(--acct-gray-500) !important;
}

/* qty + row actions */
.activeCart-panel .cart-item-line .qty {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 6px !important;
  margin-top: 4px !important;
}

.activeCart-panel .cart-item-line .qty-label {
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
  color: var(--acct-gray-500) !important;
}

.activeCart-panel .cart-item-line .qty input,
.activeCart-panel .cart-item-line .qty a[id$="lnkUpdate"],
.activeCart-panel .cart-item-line .qty .lnk-update,
.activeCart-panel .cart-item-line .btn.remove {
  box-sizing: border-box !important;
  height: 32px !important;
  min-height: 32px !important;
  margin: 0 !important;
  padding: 0 10px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: var(--acct-radius) !important;
  font-family: var(--acct-font) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em !important;
  line-height: 1 !important;
  text-transform: uppercase !important;
  text-decoration: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease !important;
}

.activeCart-panel .cart-item-line .qty input {
  width: 52px !important;
  padding: 0 !important;
  text-align: center !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  color: var(--acct-gray-800) !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
}

.activeCart-panel .cart-item-line .qty input:focus {
  outline: none !important;
  border-color: var(--acct-primary) !important;
  box-shadow: 0 0 0 3px var(--acct-primary-ring) !important;
}

.activeCart-panel .cart-item-line .qty a[id$="lnkUpdate"],
.activeCart-panel .cart-item-line .qty .lnk-update {
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  color: var(--acct-gray-700) !important;
  box-shadow: none !important;
}

.activeCart-panel .cart-item-line .qty a[id$="lnkUpdate"]:hover,
.activeCart-panel .cart-item-line .qty .lnk-update:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
  transform: none !important;
}

/* "Change" duplicates the basket link — removed per design */
.activeCart-panel .cart-item-line .btn.basket {
  display: none !important;
}

.activeCart-panel .cart-item-line .btn.remove {
  background: transparent !important;
  border: 1px solid rgba(155, 44, 44, 0.3) !important;
  color: #9b2c2c !important;
}

.activeCart-panel .cart-item-line .btn.remove:hover {
  background: rgba(155, 44, 44, 0.07) !important;
  border-color: #9b2c2c !important;
  color: #9b2c2c !important;
  transform: none !important;
}

/* ---------- Subtotal ---------- */
.activeCart-panel [id$="pnlSumary"] {
  margin: 0 !important;
}

.activeCart-panel [id$="pnlSumary"] table {
  width: 100% !important;
}

.activeCart-panel [id$="pnlSumary"] tr[style*="display: none"] {
  display: none !important;
}

.activeCart-panel .subtotal-cost {
  display: flex !important;
  align-items: baseline !important;
  justify-content: space-between !important;
  gap: 16px !important;
  margin: 0 !important;
  padding: 14px 0 0 !important;
  border-top: 1px solid var(--acct-line-strong) !important;
}

.activeCart-panel .subtotal-cost-label {
  font-family: var(--acct-font) !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
  color: var(--acct-gray-600) !important;
}

.activeCart-panel .subtotal-cost .numeric,
.activeCart-panel .subtotal-cost .lblVal {
  font-family: var(--acct-font) !important;
  font-size: 17px !important;
  font-weight: 600 !important;
  color: var(--acct-gray-800) !important;
}

/* ---------- Continue shopping ---------- */
.activeCart-panel .btncontinueshopping {
  display: block !important;
  width: 100% !important;
  box-sizing: border-box !important;
  margin: 0 !important;
  padding: 11px 18px !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-align: center !important;
  text-transform: none !important;
  text-decoration: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease !important;
}

.activeCart-panel .btncontinueshopping:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
  transform: none !important;
}

/* ---------- Announcement ---------- */
.activeCart-panel #announce {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 !important;
  padding: 12px 20px !important;
  background: var(--acct-panel) !important;
  border-top: 1px solid var(--acct-line) !important;
  box-sizing: border-box !important;
}

.activeCart-panel #announce br {
  display: none !important;
}

.activeCart-panel h2.anounce,
.activeCart-panel #announce h2 {
  display: block !important;
  margin: 0 !important;
  padding: 0 !important;
  background: none !important;
  border: none !important;
  font-family: var(--acct-font) !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  line-height: 1.5 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  color: var(--acct-gray-600) !important;
}

/* the announcement row sits below the scroll area, not inside it. Its <td>
   carries inline `padding-left:10px; padding-top:20px`, and #announce an
   inline `margin-top:-10px` — both are overridden so the panel spans the
   full drawer width. */
.activeCart-panel table.activeCart > tbody > tr:last-child,
.activeCart-panel table.activeCart > tbody > tr:not(:first-child) {
  display: block !important;
  flex: 0 0 auto !important;
  width: 100% !important;
}

.activeCart-panel table.activeCart > tbody > tr > td[valign="top"],
.activeCart-panel table.activeCart > tbody > tr:last-child > td {
  display: block !important;
  flex: 0 0 auto !important;
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* ---------- Empty state ---------- */
.activeCart-panel .empty-cart {
  padding: 36px 20px !important;
  text-align: center !important;
  font-size: 14px !important;
  color: var(--acct-gray-500) !important;
}

.activeCart-panel .empty-cart .btn {
  display: inline-block !important;
  margin-top: var(--acct-space-sm) !important;
}

@media only screen and (max-width: 480px) {
  .activeCart-panel .cartHeader {
    padding: 14px 16px !important;
  }

  .activeCart-panel .cartBody {
    padding: 14px 16px 18px !important;
  }
}

/* ==========================================================================
   CART TOGGLE — FLOATING ACTION BUTTON
   account.js body-mounts the toggle as `.js-cart-drawer-toggle.acct-cart-fab`.
   Pinned bottom-right and lifted clear of the bottom edge so chat / cookie /
   accessibility widgets still have room beneath it.
   ========================================================================== */

:root {
  --acct-fab-size: 52px;
  --acct-fab-offset-x: 20px;   /* distance from the right edge */
}

/* vertically centred on the right edge, clear of anything docked at the
   bottom of the viewport */
.js-cart-drawer-toggle.acct-cart-fab {
  position: fixed !important;
  right: var(--acct-fab-offset-x) !important;
  top: 50% !important;
  bottom: auto !important;
  left: auto !important;
  transform: translateY(-50%) !important;
  z-index: 9998 !important;

  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  box-sizing: border-box !important;
  width: var(--acct-fab-size) !important;
  height: var(--acct-fab-size) !important;
  margin: 0 !important;
  padding: 0 !important;

  background: var(--acct-white) !important;
  border: 1px solid var(--acct-line-strong) !important;
  border-radius: 50% !important;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.16), 0 1px 3px rgba(0, 0, 0, 0.1) !important;
  color: var(--acct-gray-700) !important;
  cursor: pointer !important;
  transition: transform 0.2s ease, box-shadow 0.2s ease,
    background-color 0.2s ease, opacity 0.2s ease, visibility 0.2s ease !important;
}

.js-cart-drawer-toggle.acct-cart-fab:hover {
  background: var(--acct-btn-hover-bg) !important;
  color: var(--acct-gray-800) !important;
  transform: translateY(-50%) translateX(-2px) !important;
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2), 0 2px 4px rgba(0, 0, 0, 0.12) !important;
}

.js-cart-drawer-toggle.acct-cart-fab:active {
  transform: translateY(-50%) translateX(0) !important;
}

.js-cart-drawer-toggle.acct-cart-fab:focus-visible {
  outline: 2px solid var(--acct-primary) !important;
  outline-offset: 3px !important;
}

/* The bag glyph. Declared in full here rather than inheriting it from
   main.css, so the button still has an icon when this sheet is used on its
   own. Drawn with a mask so it takes `color` (no icon font needed). */
.js-cart-drawer-toggle.acct-cart-fab::before,
.js-cart-drawer-toggle::before {
  content: "" !important;
  display: block !important;
  width: 24px !important;
  height: 24px !important;
  background-color: currentColor !important;
  -webkit-mask: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2022%2022'%20fill='none'%3E%3Cpath%20d='M16.1964%207.33334H5.8023C5.53797%207.33331%205.27675%207.39044%205.03656%207.50082C4.79637%207.61119%204.58289%207.77221%204.41075%207.97281C4.23862%208.17342%204.1119%208.40888%204.03928%208.66305C3.96667%208.91721%203.94987%209.18408%203.99005%209.44534L5.14047%2016.918C5.24032%2017.5673%205.56927%2018.1593%206.0678%2018.5871C6.56633%2019.0148%207.2015%2019.25%207.85839%2019.25H14.1394C14.7964%2019.2502%2015.4318%2019.0151%2015.9305%2018.5874C16.4293%2018.1596%2016.7583%2017.5674%2016.8582%2016.918L18.0086%209.44534C18.0488%209.18408%2018.032%208.91721%2017.9594%208.66305C17.8868%208.40888%2017.7601%208.17342%2017.5879%207.97281C17.4158%207.77221%2017.2023%207.61119%2016.9621%207.50082C16.7219%207.39044%2016.4607%207.33331%2016.1964%207.33334Z'%20stroke='%23000'%20stroke-width='1.4'%20stroke-linecap='round'%20stroke-linejoin='round'/%3E%3Cpath%20d='M8.25%2010.0833V5.5C8.25%204.77065%208.53973%204.07118%209.05546%203.55546C9.57118%203.03973%2010.2707%202.75%2011%202.75C11.7293%202.75%2012.4288%203.03973%2012.9445%203.55546C13.4603%204.07118%2013.75%204.77065%2013.75%205.5V10.0833'%20stroke='%23000'%20stroke-width='1.4'%20stroke-linecap='round'%20stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center / contain !important;
  mask: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2022%2022'%20fill='none'%3E%3Cpath%20d='M16.1964%207.33334H5.8023C5.53797%207.33331%205.27675%207.39044%205.03656%207.50082C4.79637%207.61119%204.58289%207.77221%204.41075%207.97281C4.23862%208.17342%204.1119%208.40888%204.03928%208.66305C3.96667%208.91721%203.94987%209.18408%203.99005%209.44534L5.14047%2016.918C5.24032%2017.5673%205.56927%2018.1593%206.0678%2018.5871C6.56633%2019.0148%207.2015%2019.25%207.85839%2019.25H14.1394C14.7964%2019.2502%2015.4318%2019.0151%2015.9305%2018.5874C16.4293%2018.1596%2016.7583%2017.5674%2016.8582%2016.918L18.0086%209.44534C18.0488%209.18408%2018.032%208.91721%2017.9594%208.66305C17.8868%208.40888%2017.7601%208.17342%2017.5879%207.97281C17.4158%207.77221%2017.2023%207.61119%2016.9621%207.50082C16.7219%207.39044%2016.4607%207.33331%2016.1964%207.33334Z'%20stroke='%23000'%20stroke-width='1.4'%20stroke-linecap='round'%20stroke-linejoin='round'/%3E%3Cpath%20d='M8.25%2010.0833V5.5C8.25%204.77065%208.53973%204.07118%209.05546%203.55546C9.57118%203.03973%2010.2707%202.75%2011%202.75C11.7293%202.75%2012.4288%203.03973%2012.9445%203.55546C13.4603%204.07118%2013.75%204.77065%2013.75%205.5V10.0833'%20stroke='%23000'%20stroke-width='1.4'%20stroke-linecap='round'%20stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center / contain !important;
}

/* black icon on the floating button */
.js-cart-drawer-toggle.acct-cart-fab {
  color: #000000 !important;
}

.js-cart-drawer-toggle.acct-cart-fab:hover {
  color: #000000 !important;
}

/* out of the way while the drawer itself is open */
body:has(.activeCart-panel.open) .js-cart-drawer-toggle.acct-cart-fab {
  opacity: 0 !important;
  visibility: hidden !important;
  transform: translateY(-50%) translateX(8px) !important;
  pointer-events: none !important;
}

/* ---------- Mobile: dock bottom-right ----------
   A middle-right button covers content on a narrow screen and collides with
   thumb reach, so on phones it sits in the bottom-right corner. */
@media only screen and (max-width: 640px) {
  :root {
    --acct-fab-size: 48px;
    --acct-fab-offset-x: 14px;
    --acct-fab-offset-y: 14px;
  }

  .js-cart-drawer-toggle.acct-cart-fab {
    top: auto !important;
    /* respect the iOS/Android home-indicator inset when there is one */
    bottom: calc(var(--acct-fab-offset-y) + env(safe-area-inset-bottom, 0px)) !important;
    right: calc(var(--acct-fab-offset-x) + env(safe-area-inset-right, 0px)) !important;
    transform: none !important;
  }

  .js-cart-drawer-toggle.acct-cart-fab:hover {
    transform: translateY(-2px) !important;
  }

  .js-cart-drawer-toggle.acct-cart-fab:active {
    transform: translateY(0) !important;
  }

  body:has(.activeCart-panel.open) .js-cart-drawer-toggle.acct-cart-fab {
    transform: translateY(8px) !important;
  }
}

@media only screen and (max-width: 640px) and (prefers-reduced-motion: reduce) {
  .js-cart-drawer-toggle.acct-cart-fab,
  .js-cart-drawer-toggle.acct-cart-fab:hover {
    transform: none !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .js-cart-drawer-toggle.acct-cart-fab,
  .js-cart-drawer-toggle.acct-cart-fab:hover {
    transition: none !important;
    transform: translateY(-50%) !important;
  }
}

/* ==========================================================================
   ACCOUNT PAGE — COLLAPSE THE RIGHT RAIL
   `#pageContentRight` holds the active-cart control on the account page. The
   cart now lives in the slide-out drawer (account.js relocates the panel to
   <body>), so the rail is dead space — collapse it and let the main column
   take the full width.

   Matched several ways because the page is served as /account, /account.aspx
   and through the `.page-account` body class depending on the template.
   ========================================================================== */

body.page-account #pageContentRight,
form[action="/account"] #pageContentRight,
form[action="/account.aspx"] #pageContentRight,
form[action*="/account"] #pageContentRight,
#accountContent ~ #pageContentRight,
#contentContainer:has(#accountContent) #pageContentRight {
  display: none !important;
  width: 0 !important;
  max-width: 0 !important;
  min-width: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  border: none !important;
  flex: 0 0 0 !important;
  overflow: hidden !important;
}

/* …and the main column reclaims the space */
body.page-account #pageContentCenter,
form[action="/account"] #pageContentCenter,
form[action="/account.aspx"] #pageContentCenter,
form[action*="/account"] #pageContentCenter,
#contentContainer:has(#accountContent) #pageContentCenter {
  width: 100% !important;
  max-width: 100% !important;
  flex: 1 1 auto !important;
  float: none !important;
  margin-right: 0 !important;
  padding-right: 0 !important;
  display: block !important;
}

/* the drawer must stay usable even though its original rail is gone —
   account.js moves the panel to <body>, this is the safety net */
body .activeCart-panel {
  display: flex !important;
}

/* ==========================================================================
   NEWSLETTER / MAILING LIST (.uc.newsletter → .newsletter_table)
   --------------------------------------------------------------------------
   Legacy two-column table markup: `.row > .col` (label) + `.col` (field).
   Rebuilt as a stacked form card.

   Alignment is set explicitly at every level. The page frame this form sits
   in is a centred flex column (`.help_content`, `.help_holder`, `._column`),
   and the storefront sheet also aligns `.col` cells right, so inherited
   `text-align` / `align-items` has to be neutralised rather than assumed.
   ========================================================================== */

/* ---------- Page frame ---------- */
#tableColumnsContainer:has(.uc.newsletter),
#tableColumnsContainer:has(.uc.newsletter) .help_content,
#tableColumnsContainer:has(.uc.newsletter) .help_holder,
#tableColumnsContainer:has(.uc.newsletter) ._column {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  float: none !important;
  padding: 0 !important;
}

/* the CMS heading block keeps whatever the storefront gives it */
#tableColumnsContainer .uc.oPText,
#tableColumnsContainer .uc.oPText * {
  text-align: revert;
  font-family: revert;
  font-size: revert;
  color: revert;
}

/* the right rail holds a cart that is now a drawer */
#tableColumnsContainer:has(.uc.newsletter) .help_aside,
#tableColumnsContainer:has(.uc.newsletter) #activeCartContainer:empty {
  display: none !important;
  width: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* ---------- Intro copy ----------
   `.uc.oPText` (the page heading + description above the form) is CMS content
   and belongs to the storefront design — this sheet deliberately leaves its
   typography, colour and alignment alone. Only the form below is claimed. */

/* ---------- Card ---------- */
.uc.newsletter {
  display: block !important;
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 640px !important;
  margin: 0 auto !important;      /* card centred, contents left */
  padding: var(--acct-space-lg) !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-line-strong) !important;
  border-radius: var(--acct-radius-card) !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04) !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  line-height: 1.5 !important;
  color: var(--acct-gray-700) !important;
  text-align: left !important;
}

.uc.newsletter *,
.uc.newsletter .newsletter_table * {
  box-sizing: border-box;
  text-align: left;
}

.uc.newsletter .newsletter_table {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  gap: 0 !important;
  text-align: left !important;
}

/* ---------- Rows: label above field ---------- */
.uc.newsletter .newsletter_table > .row {
  display: block !important;
  width: 100% !important;
  margin: 0 0 16px !important;
  padding: 0 !important;
  border: none !important;
  text-align: left !important;
}

.uc.newsletter .newsletter_table > .row > .col,
.uc.newsletter .newsletter_table > .row > .col:first-child,
.uc.newsletter .newsletter_table > .row > .col:last-child {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  float: none !important;
  margin: 0 !important;
  padding: 0 !important;
  vertical-align: baseline !important;
  text-align: left !important;
}

/* ---------- Labels ---------- */
.uc.newsletter .newsletter_table label,
.uc.newsletter .newsletter_table .label {
  display: block !important;
  margin: 0 0 6px !important;
  padding: 0 !important;
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  line-height: 1.4 !important;
  text-align: left !important;
  text-transform: none !important;
  color: var(--acct-gray-600) !important;
}

.uc.newsletter .newsletter_table label.req::after,
.uc.newsletter .newsletter_table .label.req::after {
  content: "*" !important;
  margin-left: 3px !important;
  color: var(--acct-error) !important;
}

/* ---------- Fields ---------- */
.uc.newsletter .newsletter_table input[type="text"],
.uc.newsletter .newsletter_table .txtbig,
.uc.newsletter .newsletter_table .txt,
.uc.newsletter .newsletter_table select,
.uc.newsletter .newsletter_table .ddl {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  min-height: 42px !important;
  height: 42px !important;
  margin: 0 !important;
  padding: 10px 14px !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  line-height: 1.4 !important;
  text-align: left !important;
  color: var(--acct-gray-800) !important;
  transition: border-color 0.2s ease, box-shadow 0.2s ease !important;
}

.uc.newsletter .newsletter_table select,
.uc.newsletter .newsletter_table .ddl {
  padding-right: 32px !important;
}

.uc.newsletter .newsletter_table input:focus,
.uc.newsletter .newsletter_table select:focus {
  border-color: var(--acct-primary) !important;
  box-shadow: 0 0 0 3px var(--acct-primary-ring) !important;
  outline: none !important;
}

/* the state select sits in its own UpdatePanel */
.uc.newsletter .newsletter_table [id$="updState"] {
  display: block !important;
  width: 100% !important;
}

/* ---------- Messages ---------- */
.uc.newsletter [id$="divMess"]:empty,
.uc.newsletter .newsletter_table > .row:has(> #ctl00_cphBody_PageWrapper_Content_ContentAndSideBar_ctl01_newsLetter_divMess:empty) {
  display: none !important;
}

.uc.newsletter [id$="divMess"]:not(:empty) {
  display: block !important;
  margin: 0 0 16px !important;
  padding: 12px 14px !important;
  background: #fdf2f2 !important;
  border: 1px solid #f3d2d5 !important;
  border-radius: var(--acct-radius) !important;
  font-size: 13px !important;
  text-align: left !important;
  color: #9b2c2c !important;
}

/* ---------- "* Required" note ---------- */
.uc.newsletter .newsletter_table > .row:has(+ .submit-row) {
  margin-bottom: 6px !important;
  font-size: 12px !important;
  text-align: left !important;
  color: var(--acct-gray-500) !important;
}

.uc.newsletter .newsletter_table > .row:has(+ .submit-row) br {
  display: none !important;
}

/* the empty spacer cell beside it */
.uc.newsletter .newsletter_table > .row:has(+ .submit-row) > .col:first-child {
  display: none !important;
}

/* ---------- Submit ---------- */
.uc.newsletter .newsletter_table > .submit-row {
  display: block !important;
  width: 100% !important;
  margin: 0 !important;
  padding: 18px 0 0 !important;
  border-top: 1px solid var(--acct-line) !important;
  text-align: left !important;
}

.uc.newsletter .newsletter_table > .submit-row > .col:first-child {
  display: none !important;
}

.uc.newsletter .newsletter_table > .submit-row > .col {
  display: block !important;
  justify-content: flex-start !important;
}

.uc.newsletter .newsletter_table .submit-row .btn,
.uc.newsletter .newsletter_table .btn.hvr {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  min-height: 44px !important;
  margin: 0 !important;
  padding: 11px 18px !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  line-height: 1.4 !important;
  text-align: center !important;
  text-transform: none !important;
  text-decoration: none !important;
  box-shadow: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease !important;
}

.uc.newsletter .newsletter_table .submit-row .btn:hover,
.uc.newsletter .newsletter_table .btn.hvr:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
  transform: none !important;
}

@media only screen and (max-width: 520px) {
  .uc.newsletter {
    padding: var(--acct-space-sm) !important;
    border-left: none !important;
    border-right: none !important;
    border-radius: 0 !important;
  }
}

/* ==========================================================================
   ACTIVE CART — EMPTY STATE
   The control swaps the item list for a short message plus a "Shop Now"
   link (`[id$="hlnkShopNow"]`, class `.btn`). It sits directly in `.cartBody`
   on some templates and inside `.empty-cart` on others, so both are covered.
   ========================================================================== */

.activeCart-panel .empty-cart,
.activeCart-panel .cartBody > center:only-child {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  gap: var(--acct-space-sm) !important;
  flex: 1 1 auto !important;
  padding: 32px 20px !important;
  text-align: center !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  line-height: 1.6 !important;
  color: var(--acct-gray-500) !important;
}

/* "Shop Now" — the one emphasised action in an empty drawer */
.activeCart-panel .btn,
.activeCart-panel a.btn,
.activeCart-panel [id$="hlnkShopNow"],
.activeCart-panel .empty-cart .btn {
  display: inline-block !important;
  box-sizing: border-box !important;
  min-height: 42px !important;
  margin: 0 !important;
  padding: 11px 20px !important;
  background: var(--acct-white) !important;
  background-color: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  line-height: 1.4 !important;
  text-align: center !important;
  text-transform: none !important;
  text-decoration: none !important;
  box-shadow: none !important;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease !important;
}

.activeCart-panel .btn:hover,
.activeCart-panel a.btn:hover,
.activeCart-panel [id$="hlnkShopNow"]:hover,
.activeCart-panel .empty-cart .btn:hover {
  background: var(--acct-btn-hover-bg) !important;
  background-color: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
  transform: none !important;
}

/* "Shop Now" spans the drawer when it is the only action */
.activeCart-panel [id$="hlnkShopNow"] {
  width: 100% !important;
  max-width: 260px !important;
}

/* row-level buttons keep their own compact treatment */
.activeCart-panel .cart-item-line .btn.remove,
.activeCart-panel .cart-item-line .qty a[id$="lnkUpdate"],
.activeCart-panel .cart-item-line .qty .lnk-update {
  min-height: 32px !important;
  padding: 0 10px !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
}

.activeCart-panel .cart-item-line .btn.remove {
  background: transparent !important;
  border-color: rgba(155, 44, 44, 0.3) !important;
  color: #9b2c2c !important;
}

/* checkout / update stay full width */
.activeCart-panel .cart-checkout-container .btn,
.activeCart-panel [id$="pnlUpdateCart"] .btn,
.activeCart-panel .btncontinueshopping {
  width: 100% !important;
  max-width: 100% !important;
}

/* ==========================================================================
   PER-UNIT PRICE SUFFIX (" / ea")
   Prices in these lists are per-bottle, not line totals, which reads wrong
   next to a qty. The active price gets a muted " / ea"; the struck-through
   retail price (`.del`) never does, and neither do totals.
   ========================================================================== */

#basket.basket app-product-price .price:not(.del)::after,
app-checkout app-product-price .price:not(.del)::after,
app-catalog-suggestions app-product-price .price:not(.del)::after,
.activeCart-panel .cart-item-line .price::after {
  content: " / ea" !important;
  margin-left: 1px;
  font-family: var(--acct-font) !important;
  font-size: 11px !important;
  font-weight: 400 !important;
  letter-spacing: 0 !important;
  white-space: nowrap !important;
  color: var(--acct-gray-500) !important;
}

/* checkout order-summary rows: the value is the right-aligned span */
app-checkout .cart-summary app-cart-items
  .row.justify-content-between
  .col-6.text-right
  span::after {
  content: " / ea" !important;
  font-family: var(--acct-font) !important;
  font-size: 11px !important;
  font-weight: 400 !important;
  white-space: nowrap !important;
  color: var(--acct-gray-500) !important;
}

/* never on a struck-through retail price, a subtotal or an order total */
#basket.basket .price.del::after,
app-checkout .price.del::after,
app-catalog-suggestions .price.del::after,
app-checkout app-cart-summary .value::after,
app-checkout app-cart-summary .grand-total .value::after,
.activeCart-panel .subtotal-cost .numeric::after,
.activeCart-panel .subtotal-cost .lblVal::after,
#basket.basket .row.content.footer strong::after {
  content: none !important;
}

/* ==========================================================================
   IFRAME DIALOGS — COMPACT TITLE BAR
   --------------------------------------------------------------------------
   These popups load a full page inside the dialog, and that page renders its
   own card and heading. Stacked under a full-size jQuery UI titlebar it read
   as a popup inside a popup.

   Rather than float the ✕ over the iframe (it ends up behind the iframe's own
   painting context and is unreachable), the dialog keeps a slim 44px bar with
   the real title and the close button, and the page inside goes flat. One
   frame, one heading, one obvious way out.
   ========================================================================== */

html body .ui-dialog[aria-describedby="jqpopupContainer"] {
  position: fixed !important;
  display: flex !important;
  flex-direction: column !important;
  padding: 0 !important;
  background: var(--acct-white) !important;
  border: none !important;
  border-radius: var(--acct-radius-card) !important;
  overflow: hidden !important;   /* clips the iframe to the rounded corners */
}

/* ---------- Slim title bar ---------- */
html body .ui-dialog[aria-describedby="jqpopupContainer"] > .ui-dialog-titlebar {
  position: relative !important;
  flex: 0 0 auto !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: var(--acct-space-2xs) !important;
  width: 100% !important;
  min-height: 44px !important;
  margin: 0 !important;
  padding: 0 8px 0 16px !important;
  background: var(--acct-surface) !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line-strong) !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  z-index: 2 !important;
}

html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-dialog-title {
  display: block !important;
  flex: 1 1 auto !important;
  min-width: 0 !important;
  margin: 0 !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  letter-spacing: -0.005em !important;
  line-height: 1.3 !important;
  text-transform: none !important;
  color: var(--acct-gray-800) !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}

/* NOTE: must stay a positioning context — the ✕ is drawn with absolutely
   positioned pseudo-elements (see the MODAL block). With `position: static`
   they resolve against the title bar instead and sit off-centre. */
html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-dialog-titlebar-close {
  position: relative !important;
  /* jQuery UI positions this button with `top: 50%; margin-top: -10px`. Those
     still apply to a relatively positioned box and push it half a bar-height
     down, so every offset is neutralised. */
  top: auto !important;
  right: auto !important;
  bottom: auto !important;
  left: auto !important;
  inset: auto !important;
  transform: none !important;
  flex: 0 0 auto !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 30px !important;
  height: 30px !important;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  border: 1px solid transparent !important;
  border-radius: var(--acct-radius) !important;
  box-shadow: none !important;
  color: var(--acct-gray-500) !important;
  opacity: 1 !important;
  cursor: pointer !important;
  transition: background-color 0.2s ease, color 0.2s ease !important;
}

html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-dialog-titlebar-close:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-line-strong) !important;
  color: var(--acct-gray-800) !important;
}

/* jQuery UI ships a sprite icon plus a "Close" label inside the button */
html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-dialog-titlebar-close .ui-icon,
html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-dialog-titlebar-close .ui-button-icon-primary,
html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-dialog-titlebar-close .ui-button-text {
  display: none !important;
}

/* the ✕ itself, centred on the button */
html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-dialog-titlebar-close::before,
html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-dialog-titlebar-close::after {
  content: "" !important;
  position: absolute !important;
  top: 50% !important;
  left: 50% !important;
  width: 13px !important;
  height: 1.5px !important;
  margin: 0 !important;
  background: currentColor !important;
  border-radius: 2px !important;
}

html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-dialog-titlebar-close::before {
  transform: translate(-50%, -50%) rotate(45deg) !important;
}

html body .ui-dialog[aria-describedby="jqpopupContainer"] .ui-dialog-titlebar-close::after {
  transform: translate(-50%, -50%) rotate(-45deg) !important;
}

/* ---------- Body fills what is left ---------- */
html body .ui-dialog[aria-describedby="jqpopupContainer"] > #jqpopupContainer {
  position: static !important;
  flex: 1 1 auto !important;
  width: 100% !important;
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
  border-radius: 0 !important;
  overflow: hidden !important;
}

/* ==========================================================================
   POPUP DOCUMENTS — FLAT INSIDE THE DIALOG
   The same pages also open standalone, so the card chrome is only dropped
   when the document is the popup body.
   ========================================================================== */

body.popup {
  margin: 0 !important;
  padding: 0 !important;
  background: var(--acct-white) !important;
}

body.popup #pageContent,
body.popup .popup-body {
  max-width: 100% !important;
  margin: 0 !important;
  padding: 20px !important;
  box-sizing: border-box !important;
}

/* the page's own card becomes the dialog's content surface */
body.popup .wine-club-membership-details,
body.popup .wine-club-shipment-details,
body.popup .addr-popup,
body.popup .change-password,
body.popup #accountContent .section:only-child {
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 !important;
  background: none !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}

/* the dialog's title bar already names the popup, so the page heading is
   redundant inside a frame — kept, but tightened up */
body.popup .wine-club-membership-details > h3:first-child,
body.popup .wine-club-shipment-details > h3:first-child,
body.popup .addr-popup h2,
body.popup .change-password h2 {
  margin-top: 0 !important;
  padding-right: 0 !important;
}

/* the standalone-page top margin is not wanted inside a dialog */
body.popup #pageContent > div[id$="upd"] > .wine-club-membership-details,
body.popup #pageContent > .wine-club-shipment-details {
  margin-top: 0 !important;
}

/* ==========================================================================
   SAVED PAYMENT METHOD ROWS (.payment-account-line)
   The radio lives inside `.row > .col` next to its label, so the generic
   `custom-control` fixes elsewhere in this file never reached it — Bootstrap
   hides the real input (`opacity: 0`) and draws a fake box with label
   pseudo-elements it does not ship here, leaving no visible control at all.
   ========================================================================== */

app-checkout .payment-account-line,
.payment-account-line {
  display: block;
  margin: 0 0 8px !important;
  padding: 0 !important;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  transition: border-color 0.2s ease, background-color 0.2s ease,
    box-shadow 0.2s ease;
}

.payment-account-line.hoverable:hover {
  border-color: var(--acct-btn-border-hover);
  background: var(--acct-surface-hover);
}

/* selected card */
.payment-account-line.active,
.payment-account-line:has(.custom-control-input:checked) {
  border-color: var(--acct-primary);
  box-shadow: 0 0 0 3px var(--acct-primary-ring);
}

.payment-account-line > .custom-control.custom-radio {
  display: block !important;
  margin: 0 !important;
  padding: 12px 14px !important;
}

.payment-account-line .row {
  align-items: center;
  margin: 0 !important;
}

.payment-account-line [class*="col-"] {
  padding: 0 !important;
}

/* ---------- The radio itself ---------- */
.payment-account-line .custom-control-input {
  position: static !important;
  flex: 0 0 auto !important;
  width: 16px !important;
  height: 16px !important;
  margin: 0 10px 0 0 !important;
  opacity: 1 !important;
  z-index: auto !important;
  pointer-events: auto !important;
  accent-color: var(--acct-primary);
  cursor: pointer;
}

/* the label shares a line with it */
.payment-account-line .custom-control-label {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  margin: 0 !important;
  padding: 0 !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 400 !important;
  color: var(--acct-gray-700) !important;
  cursor: pointer;
}

.payment-account-line .custom-control-label::before,
.payment-account-line .custom-control-label::after {
  content: none !important;
}

/* the column holding radio + label */
.payment-account-line .row > [class*="col-md-6"]:first-child {
  display: flex !important;
  align-items: center !important;
  min-width: 0;
}

/* card brand mark + number */
.payment-account-line .custom-control-label .fab,
.payment-account-line .custom-control-label i {
  font-size: 18px;
  color: var(--acct-gray-600);
}

.payment-account-line .custom-control-label .font-weight-bold {
  font-weight: 600 !important;
  color: var(--acct-gray-800) !important;
}

/* ---------- Meta columns ---------- */
.payment-account-line .name-on-card,
.payment-account-line .exp-date {
  font-size: 13px !important;
  color: var(--acct-gray-600) !important;
}

.payment-account-line .name-on-card i,
.payment-account-line .exp-date i {
  margin-right: 4px;
  color: var(--acct-gray-400);
}

@media only screen and (max-width: 767px) {
  .payment-account-line .row > [class*="col-"] {
    margin-top: 4px;
  }

  .payment-account-line .row > [class*="col-md-6"]:first-child {
    margin-top: 0;
    flex: 1 1 100%;
  }
}

/* ==========================================================================
   ORDER HISTORY (.customer-order-history)
   Legacy `.details` table markup: a `.details_header` row plus `.item.order`
   rows, each with `.col-1 / .col-4 / .col-4 / .col-1.hdr-price`. Note the
   Items cell contains its own nested `.item` divs — the row and its contents
   share a class name, so every selector here is anchored to `.item.order`.
   ========================================================================== */

#accountContent .customer-order-history {
  display: block;
  font-family: var(--acct-font);
}

#accountContent .customer-order-history .details {
  display: block;
  width: 100%;
  border: 1px solid var(--acct-line);
  border-radius: 8px;
  overflow: hidden;
}

/* ---------- Header row ---------- */
#accountContent .customer-order-history .details_header {
  display: grid !important;
  grid-template-columns: 150px minmax(0, 1.1fr) minmax(0, 1.3fr) 110px;
  align-items: end;
  gap: 16px;
  width: 100% !important;
  margin: 0 !important;
  padding: 10px 16px !important;
  background: var(--acct-surface);
  border: none !important;
  border-bottom: 1px solid var(--acct-line-strong);
  font-family: var(--acct-font) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
  color: var(--acct-gray-500) !important;
}

#accountContent .customer-order-history .details_header > div {
  width: auto !important;
  padding: 0 !important;
  font-weight: 600 !important;
  text-align: left !important;
}

/* ---------- Order rows ---------- */
#accountContent .customer-order-history .item.order {
  display: grid !important;
  grid-template-columns: 150px minmax(0, 1.1fr) minmax(0, 1.3fr) 110px;
  align-items: start;
  gap: 16px;
  width: 100% !important;
  margin: 0 !important;
  padding: 16px !important;
  border: none !important;
  border-bottom: 1px solid var(--acct-line-soft) !important;
  font-size: 13px;
  line-height: 1.5;
  color: var(--acct-gray-600);
}

#accountContent .customer-order-history .item.order:last-child {
  border-bottom: none !important;
}

#accountContent .customer-order-history .item.order:hover {
  background: var(--acct-surface-hover);
}

#accountContent .customer-order-history .item.order > div {
  width: auto !important;
  min-width: 0;
  padding: 0 !important;
  text-align: left !important;
}

/* order number + date + status */
#accountContent .customer-order-history .item.order > .col-1:first-child strong {
  display: block;
  font-size: 14px;
  font-weight: 600;
  color: var(--acct-gray-800);
}

/* shipping method */
#accountContent .customer-order-history .ship-method {
  display: block;
  margin-bottom: 4px;
  font-weight: 600;
  color: var(--acct-gray-700);
}

/* the item list inside the Items cell */
#accountContent .customer-order-history .item.order .item {
  display: block !important;
  width: 100% !important;
  margin: 0 0 4px !important;
  padding: 0 !important;
  border: none !important;
  background: none !important;
  font-size: 13px;
}

#accountContent .customer-order-history .item.order .item:last-child {
  margin-bottom: 0 !important;
}

#accountContent .customer-order-history .item.order .item a {
  color: var(--acct-gray-700) !important;
  text-decoration: none;
}

#accountContent .customer-order-history .item.order .item a:hover {
  color: var(--acct-primary) !important;
  text-decoration: underline;
}

/* order cost */
#accountContent .customer-order-history .item.order > .hdr-price {
  font-size: 15px !important;
  font-weight: 600 !important;
  color: var(--acct-gray-800) !important;
  text-align: right !important;
  white-space: nowrap;
}

#accountContent .customer-order-history .details_header > .hdr-price {
  text-align: right !important;
}

/* ---------- Invoice link ----------
   `.pdf-icon` is an empty anchor; give it a label so it is discoverable.

   The control emits it directly after the status text with no `<br>` between
   them — `<strong>#12036</strong><br>07-22-26<br>Quarantined<a class="pdf-icon">`
   — so as an inline box it trailed the status word on the same line and its
   `margin-top` had nothing to act on. Block-level `flex` with a
   content-sized width puts it on its own line beneath the order details
   while keeping the button hugging its label. */
#accountContent .customer-order-history .pdf-icon {
  display: flex !important;
  width: fit-content;
  max-width: 100%;
  align-items: center;
  gap: 5px;
  margin-top: 8px;
  padding: 4px 10px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--acct-gray-600) !important;
  text-decoration: none !important;
  white-space: nowrap;
  transition: background-color 0.2s ease, border-color 0.2s ease,
    color 0.2s ease;
}

#accountContent .customer-order-history .pdf-icon::before {
  content: "\f1c1";                       /* fa-file-pdf */
  font-family: "Font Awesome 5 Pro", "Font Awesome 5 Free", "FontAwesome";
  font-weight: 900;
  font-size: 11px;
  line-height: 1;
}

#accountContent .customer-order-history .pdf-icon::after {
  content: "Invoice";
}

#accountContent .customer-order-history .pdf-icon:hover {
  background: var(--acct-btn-hover-bg);
  border-color: var(--acct-btn-border-hover);
  color: var(--acct-gray-800) !important;
}

/* ---------- Show more ---------- */
#accountContent .customer-order-history .show-more {
  display: flex;
  justify-content: center;
  margin-top: 14px;
}

#accountContent .customer-order-history .show-more .btn {
  min-width: 200px;
}

/* ---------- Empty state ---------- */
#accountContent .customer-order-history > div[style*="text-align: center"] {
  padding: 28px 16px !important;
  background: var(--acct-surface);
  border: 1px dashed var(--acct-line-strong);
  border-radius: 8px;
  text-align: center;
}

#accountContent .customer-order-history > div[style*="text-align: center"] br {
  display: none;
}

/* ---------- Responsive ---------- */
@media only screen and (max-width: 860px) {
  #accountContent .customer-order-history .details {
    border: none;
    border-radius: 0;
    overflow: visible;
  }

  #accountContent .customer-order-history .details_header {
    display: none !important;
  }

  #accountContent .customer-order-history .item.order {
    display: block !important;
    margin-bottom: 10px !important;
    padding: 14px !important;
    border: 1px solid var(--acct-line) !important;
    border-radius: 8px;
  }

  #accountContent .customer-order-history .item.order > div {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 4px 0 !important;
    text-align: right !important;
  }

  #accountContent .customer-order-history .item.order > div:not(:last-child) {
    border-bottom: 1px solid var(--acct-line-soft);
  }

  #accountContent .customer-order-history .item.order .mobile-label {
    display: block !important;
    flex: 0 0 auto;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--acct-gray-400);
    text-align: left;
  }

  /* the two stacked cells read better left-aligned under their label */
  #accountContent .customer-order-history .item.order > .col-4 {
    display: block;
    text-align: left !important;
  }

  /* The Order cell is multi-line by construction — `<strong>#12036</strong>`,
     the date and status as bare text nodes separated by `<br>`, then the
     Invoice button. Flex makes every one of those a flex item on a single
     line and drops the `<br>`s entirely, so this cell stays block like the
     `.col-4` pair rather than becoming a label/value row. */
  #accountContent .customer-order-history .item.order > .col-1:first-child {
    display: block;
    text-align: left !important;
  }

  #accountContent .customer-order-history .item.order > .col-4 .mobile-label,
  #accountContent
    .customer-order-history
    .item.order
    > .col-1:first-child
    .mobile-label {
    margin-bottom: 4px;
  }

  /* the price keeps the label/value row — it is a single value */
  #accountContent .customer-order-history .item.order > .hdr-price {
    align-items: center;
  }
}

/* ==========================================================================
   ADD-TO-CART TOAST (.add-to-cart-confirmation-message)
   --------------------------------------------------------------------------
   The platform positions this box at the click coordinates with inline
   `top` / `left` / `opacity`, and packs a full product-suggestion carousel
   inside it — so it lands anywhere on the page and is far too heavy for a
   confirmation.

   Standardised into a toast: docked top-right under the header, slides in,
   holds, then fades out on its own. The inline geometry is overridden, and
   the embedded carousel is dropped (suggestions already have their own
   section on the basket page).
   ========================================================================== */

:root {
  --acct-toast-width: 340px;
  --acct-toast-offset: 20px;
  --acct-toast-life: 5s;      /* visible time before it fades out */
  /* Above every layer this sheet defines (drawer 10001, overlay 10000,
     datepicker 10060). Raise it if a platform element still covers the toast
     — but note that z-index cannot win at all if an ancestor of the toast
     creates a stacking context, which needs the element re-parented in JS. */
  --acct-toast-z: 10090;
}

.add-to-cart-confirmation-message {
  /* beat the inline top/left/opacity the platform writes */
  position: fixed !important;
  top: var(--acct-toast-offset) !important;
  right: var(--acct-toast-offset) !important;
  left: auto !important;
  bottom: auto !important;
  z-index: var(--acct-toast-z) !important;

  box-sizing: border-box !important;
  width: var(--acct-toast-width) !important;
  max-width: calc(100vw - (var(--acct-toast-offset) * 2)) !important;
  min-width: 0 !important;
  margin: 0 !important;
  /* right padding keeps the text clear of the 32px ✕ parked at right: 6px */
  padding: 16px 48px 16px 16px !important;

  /* self-contained stacking context: the ✕'s z-index is then resolved against
     the toast's own children only, and cannot be undercut by whatever the
     platform stacks around it */
  isolation: isolate !important;

  background: var(--acct-white) !important;
  border: 1px solid var(--acct-line-strong) !important;
  border-left: 3px solid var(--acct-primary) !important;
  border-radius: var(--acct-radius-card) !important;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18), 0 2px 6px rgba(0, 0, 0, 0.1) !important;

  font-family: var(--acct-font) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  line-height: 1.5 !important;
  text-align: left !important;
  color: var(--acct-gray-800) !important;

  /* Visible by default, with a short entrance only.
     Two earlier approaches were reverted:
       1. one long in→hold→out animation with `forwards` — if it runs before
          the first add-to-cart the fill leaves the toast permanently hidden;
       2. a JS auto-dismiss driven by a MutationObserver — the platform
          rewrites this element's inline `style` continuously, so an observer
          on `style` that also writes to it locks up the page.
     Dismissal is left to the platform's own handler and the ✕. */
  opacity: 1 !important;
  visibility: visible !important;
  animation: acct-toast-in 0.28s cubic-bezier(0.16, 1, 0.3, 1) both !important;
  transition: opacity 0.25s ease !important;
}

@keyframes acct-toast-in {
  from {
    opacity: 0;
    transform: translateX(20px) scale(0.98);
  }
  to {
    opacity: 1;
    transform: translateX(0) scale(1);
  }
}

/* the toast's own spacer markup */
.add-to-cart-confirmation-message br {
  display: none !important;
}

/* ---------- Close ----------
   The ✕ has to stay clickable no matter what the platform stacks nearby, so
   it is given its own z-index above the toast's other children and its own
   pointer-events, and the toast reserves a clear corner for it (see the
   padding-right on the container). */
.add-to-cart-confirmation-message .btn-close {
  position: absolute !important;
  top: 6px !important;
  right: 6px !important;
  z-index: 2 !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 32px !important;
  height: 32px !important;
  padding: 0 !important;
  margin: 0 !important;
  background: transparent !important;
  border: none !important;
  border-radius: 50% !important;
  opacity: 1 !important;
  cursor: pointer !important;
  pointer-events: auto !important;
  transition: background-color 0.15s ease !important;
}

.add-to-cart-confirmation-message .btn-close:hover {
  background: var(--acct-primary-tint) !important;
}

.add-to-cart-confirmation-message .btn-close:active {
  background: var(--acct-primary-ring) !important;
}

/* the element ships as a bare <div> with an inline onclick — no keyboard
   affordance of its own, so at least make the focus ring visible if the page
   ever gives it focus */
.add-to-cart-confirmation-message .btn-close:focus-visible {
  outline: 2px solid var(--acct-primary) !important;
  outline-offset: 2px !important;
}

.add-to-cart-confirmation-message .btn-close:hover::before,
.add-to-cart-confirmation-message .btn-close:hover::after {
  background: var(--acct-gray-800) !important;
}

/* drawn ✕ — the element ships empty */
.add-to-cart-confirmation-message .btn-close::before,
.add-to-cart-confirmation-message .btn-close::after {
  content: "" !important;
  position: absolute !important;
  top: 50% !important;
  left: 50% !important;
  width: 12px !important;
  height: 1.5px !important;
  background: var(--acct-gray-500) !important;
  border-radius: 2px !important;
}

.add-to-cart-confirmation-message .btn-close::before {
  transform: translate(-50%, -50%) rotate(45deg) !important;
}

.add-to-cart-confirmation-message .btn-close::after {
  transform: translate(-50%, -50%) rotate(-45deg) !important;
}

/* ---------- Body ---------- */
.add-to-cart-confirmation-message .suggestion {
  margin-top: 6px !important;
  font-size: 12px !important;
  font-weight: 400 !important;
  line-height: 1.5 !important;
  color: var(--acct-gray-500) !important;
}

.add-to-cart-confirmation-message .add-to-cart-checkout {
  margin-top: 12px !important;
  padding: 0 !important;
}

.add-to-cart-confirmation-message .add-to-cart-checkout .btn {
  display: block !important;
  width: 100% !important;
  min-height: 40px !important;
  margin: 0 !important;
  padding: 10px 16px !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-align: center !important;
  text-transform: none !important;
  text-decoration: none !important;
  box-shadow: none !important;
}

.add-to-cart-confirmation-message .add-to-cart-checkout .btn:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
  transform: none !important;
}

/* ---------- Drop the embedded carousel ----------
   A confirmation is not a merchandising surface; the suggestions carousel
   makes the toast several hundred pixels tall and slow to dismiss. */
.add-to-cart-confirmation-message .add-to-cart-shopping-suggestions,
.add-to-cart-confirmation-message .shopping-suggestions,
.add-to-cart-confirmation-message .carousel {
  display: none !important;
}

/* ---------- Responsive ---------- */
@media only screen and (max-width: 480px) {
  :root {
    --acct-toast-offset: 12px;
  }

  .add-to-cart-confirmation-message {
    width: auto !important;
    left: var(--acct-toast-offset) !important;
    right: var(--acct-toast-offset) !important;
    max-width: none !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .add-to-cart-confirmation-message {
    animation: none !important;
    transition: none !important;
    transform: none !important;
  }
}

/* ==========================================================================
   JOIN WINE CLUB — /wine-club/* signup wizard
   --------------------------------------------------------------------------
   ASP.NET WebForms wizard, seven steps, one panel visible at a time. The
   platform switches panels with inline `style="display:none"` written by the
   onclick handlers on the rail, so nothing here may force a panel visible
   (§4.6) — every layout rule is qualified against the hidden markers.

   Structure:
     .join-wine-club-content         page wrapper (also wraps the form)
       .header.wiz-step-N            title block
       .wine-club-info.popup-hint    club description, ships hidden
       .wineclub-registration-wizard
         ul.bootstrapWizard          the step rail; li.complete / li.active
         .wizard-step-header         "Step 1 - Enter Email Address"
       .join-wine-club-form
         #tabAccountLookup … #tabNotes   one panel per step
           .fieldset_row             label + <br> + control
   ========================================================================== */

.join-wine-club-content,
.join-wine-club-form,
.join-wine-club-holder,
.wineclub-registration-wizard {
  box-sizing: border-box;
  max-width: 860px;
  margin-inline: auto;
  color: var(--acct-text);
  font-size: 14px;
  line-height: 1.55;
}

.join-wine-club-content *,
.join-wine-club-form *,
.wineclub-registration-wizard * {
  box-sizing: border-box;
}

/* The signup is not one element: `#divMain.join-wine-club-content` (header +
   step rail) and `#pnlForm.join-wine-club-form` (the step panels) are
   SIBLINGS, with the platform's message div between them. Both therefore get
   the same card treatment so the pair reads as a single injected component
   rather than loose page content. */
.join-wine-club-content {
  margin-block: 0 var(--acct-space-sm);
  padding: var(--acct-space-lg);
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius-card);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}

/* the wrapper is repeated inside the form — only the outer one gets the width,
   and the inner copy must not draw a second card inside the first */
.join-wine-club-form .join-wine-club-content {
  max-width: none;
  margin: 0;
  padding: 0;
  background: none;
  border: none;
  border-radius: 0;
  box-shadow: none;
}

/* ---------- Page header ----------
   the card owns the outer padding now, so the header only needs its own
   bottom rhythm */
.join-wine-club-content > .header {
  margin: 0 0 var(--acct-space-lg);
  padding: 0;
  border: none;
  background: none;
  text-align: center;
}

.join-wine-club-content > .header h1 {
  margin: 0;
  padding: 0;
  font-family: var(--acct-font) !important;
  font-size: 26px;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: -0.015em;
  color: var(--acct-text-dark);
  padding-bottom: 26px !important;
}

/* The control hard-codes a "Join Now!" strapline as
   `<br><span style="font-size: smaller">`. It says nothing the step rail
   underneath does not already say, so it is dropped — matched on the inline
   style so a club's own subtitle, if one is ever added, still shows. */
.join-wine-club-content > .header h1 > span[style*="smaller"] {
  display: none;
}

.join-wine-club-content > .header h1 br {
  display: none;
}

/* any other subtitle the control emits keeps the tagline treatment */
.join-wine-club-content > .header h1 > span:not([style*="smaller"]) {
  display: block;
  margin-top: var(--acct-space-2xs);
  font-size: 14px !important;
  font-weight: 400;
  letter-spacing: 0;
  color: var(--acct-text-light);
}

/* ---------- Club description ----------
   Ships as `.popup-hint` with inline display:none and is revealed by the
   theme's own hint script. Styled for when it is shown; never un-hidden. */
.join-wine-club-content .wine-club-info .h-content:not([style*="display: none"]):not([style*="display:none"]) {
  margin: 0 0 var(--acct-space-lg);
  padding: var(--acct-space-md);
  background: var(--acct-panel);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius-card);
}

.join-wine-club-content .wine-club-info fieldset {
  margin: 0;
  padding: 0;
  border: none;
}

.join-wine-club-content .wine-club-info legend {
  display: block;
  width: 100%;
  margin: 0 0 var(--acct-space-2xs);
  padding: 0;
}

.join-wine-club-content .wine-club-info legend h3 {
  margin: 0;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--acct-text-light);
}

.join-wine-club-content .wine-club-info p {
  margin: 0;
  font-size: 13px;
}

/* ==========================================================================
   CLUB OVERVIEW (.div-table)
   --------------------------------------------------------------------------
   The step before the wizard: a Description panel and a Benefits panel, both
   `fieldset.wc2016`, laid out by the platform with `float: right` written
   inline on the second one. Floats are replaced with a grid so the two
   panels share a baseline and equal height, and both are given the same
   card treatment the rest of the signup uses.
   ========================================================================== */

.join-wine-club-content .div-table {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--acct-space-md);
  align-items: stretch;
  margin: 0;
  padding: 0;
}

.join-wine-club-content .div-table > fieldset,
.join-wine-club-content .div-table > .wc2016 {
  float: none !important;   /* beats the inline `float: right` */
  width: auto !important;
  min-width: 0;
  margin: 0;
  padding: var(--acct-space-md) var(--acct-space-md) var(--acct-space-2xs);
  background: var(--acct-surface);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius);
}

.join-wine-club-content .div-table legend {
  display: block;
  width: auto;
  margin: 0 0 var(--acct-space-xs);
  padding: 0;
  border: none;
}

/* the panel caption — same small-caps label as the wizard's own fieldsets */
.join-wine-club-content .div-table legend h3 {
  margin: 0;
  font-family: var(--acct-font);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  line-height: 1.3;
  text-transform: uppercase;
  color: var(--acct-text-light);
}

/* the body copy ships its own <h3><strong>Membership Benefits:</strong></h3>
   heading, which must not compete with the legend */
.join-wine-club-content .div-table h3 {
  margin: 0 0 var(--acct-space-2xs);
  font-family: var(--acct-font);
  font-size: 14px;
  font-weight: 600;
  line-height: 1.4;
  text-transform: none;
  color: var(--acct-text-dark);
}

.join-wine-club-content .div-table p {
  margin: 0 0 var(--acct-space-2xs);
  font-size: 13px;
  line-height: 1.6;
}

.join-wine-club-content .div-table strong {
  font-weight: 600;
  color: var(--acct-text-dark);
}

.join-wine-club-content .div-table ul {
  margin: 0;
  padding-left: 18px;
  list-style: disc;
}

.join-wine-club-content .div-table li {
  margin: 0 0 var(--acct-space-2xs);
  font-size: 13px;
  line-height: 1.6;
}

/* every list item wraps its text in a <p> */
.join-wine-club-content .div-table li > p {
  margin: 0;
}

.join-wine-club-content .div-table li:last-child,
.join-wine-club-content .div-table > fieldset > *:last-child {
  margin-bottom: 0;
}

/* The CMS copy ends each panel with a `<br>&nbsp;` spacer. Author-typed
   breaks are left alone — they are content, and some panels use them for
   real line breaks — so the panel's bottom padding absorbs the extra line
   rather than a rule removing it. */

/* ==========================================================================
   STEP RAIL (ul.bootstrapWizard)
   The control writes an inline `width: 14.2857%` on every <li>, so the track
   has to be reclaimed with !important before flex can size them evenly.
   ========================================================================== */

.wineclub-registration-wizard {
  margin: 0 0 var(--acct-space-xl);
  padding: 0;
}

/* the rail is the last thing in the wrapper card — its bottom margin would
   otherwise read as dead space above the card edge */
.join-wine-club-content > .wineclub-registration-wizard:last-child {
  margin-bottom: 0;
}

.wineclub-registration-wizard .form-bootstrapWizard {
  margin: 0;
  padding: 0;
}

.wineclub-registration-wizard ul.bootstrapWizard {
  display: flex;
  align-items: flex-start;
  gap: 0;
  margin: 0;
  padding: 0;
  list-style: none;
  border: none;
  background: none;
  counter-reset: none;
}

.wineclub-registration-wizard ul.bootstrapWizard > li {
  position: relative;
  flex: 1 1 0;
  width: auto !important;   /* beats the inline 14.2857% */
  min-width: 0;
  margin: 0;
  padding: 0;
  list-style: none;
  background: none !important;
  border: none !important;
  text-align: center;
}

.wineclub-registration-wizard ul.bootstrapWizard > li::after {
  content: none;            /* storefront themes hang a chevron here */
}

/* Connector: half-segments either side of each marker rather than one bar per
   item, so a completed step colours only the run behind it and the line never
   pokes out past the first or last marker. */
.wineclub-registration-wizard ul.bootstrapWizard > li::before {
  content: "";
  position: absolute;
  top: 17px;              /* half the 34px marker */
  right: 50%;
  width: 100%;
  height: 2px;
  margin-top: -1px;
  background: var(--acct-line-strong);
  z-index: 0;
}

.wineclub-registration-wizard ul.bootstrapWizard > li:first-child::before {
  display: none;
}

.wineclub-registration-wizard ul.bootstrapWizard > li.complete::before,
.wineclub-registration-wizard ul.bootstrapWizard > li.active::before {
  background: var(--acct-primary);
}

.wineclub-registration-wizard ul.bootstrapWizard > li > a {
  position: relative;
  z-index: 1;
  display: flex !important;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  width: 100%;
  min-height: 0;
  margin: 0 !important;
  padding: 0 4px !important;
  background: none !important;
  border: none !important;
  border-radius: 0 !important;
  text-decoration: none !important;
  color: var(--acct-text-light);
  cursor: default;
  font-size: 0;   /* kills the whitespace node between .step and .title */
}

/* The rail is a progress indicator, not navigation. The markup gives completed
   steps an href plus an inline onclick that swaps tabs directly, so jumping
   backwards skips the form's own validation. Killing pointer events on the
   anchor stops both the href and the onclick from ever firing. */
.wineclub-registration-wizard ul.bootstrapWizard > li > a,
.wineclub-registration-wizard ul.bootstrapWizard > li > a[href] {
  pointer-events: none;
  cursor: default;
}

/* The marker: `<span class="step">3 <span class="mobile-title">…</span></span>`
   — the number is a bare text node, so the circle is the span itself.
   The storefront sheets put padding and a min-width on `.step`; both have to
   be zeroed or the circle renders as an oval. `aspect-ratio` plus a locked
   min/max width is what actually keeps it round, since the box still has to
   survive a long number and whatever line-height it inherits. */
.wineclub-registration-wizard ul.bootstrapWizard .step {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  width: 34px !important;
  min-width: 34px !important;
  max-width: 34px !important;
  height: 34px !important;
  min-height: 34px !important;
  flex: 0 0 auto;
  padding: 0 !important;
  margin: 0 !important;
  aspect-ratio: 1 / 1;
  border-radius: 50% !important;
  background: var(--acct-white);
  border: 2px solid var(--acct-line-strong);
  color: var(--acct-text-light);
  font-family: var(--acct-font) !important;
  font-size: 13px;
  font-weight: 600;
  font-style: normal;
  line-height: 1 !important;
  text-align: center;
  text-indent: 0;
  overflow: hidden;
  transition: background-color 0.15s ease, border-color 0.15s ease,
    color 0.15s ease;
}

.wineclub-registration-wizard ul.bootstrapWizard > li.complete .step {
  background: var(--acct-primary);
  border-color: var(--acct-primary);
  color: var(--acct-white);
}

/* completed steps read as done, not as another number to act on */
.wineclub-registration-wizard ul.bootstrapWizard > li.complete .step {
  font-size: 0 !important;   /* hides the digit, keeps the box */
}

.wineclub-registration-wizard ul.bootstrapWizard > li.complete .step::after {
  content: "";
  width: 11px;
  height: 6px;
  margin-top: -3px;
  border-left: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(-45deg);
}

.wineclub-registration-wizard ul.bootstrapWizard > li.active .step {
  background: var(--acct-white);
  border-color: var(--acct-primary);
  color: var(--acct-primary);
  box-shadow: 0 0 0 4px var(--acct-primary-ring);
}

.wineclub-registration-wizard ul.bootstrapWizard .title {
  display: block;
  width: 100%;
  margin: 0;
  padding: 0;
  font-family: var(--acct-font) !important;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.04em;
  line-height: 1.35;
  text-transform: uppercase;
  text-align: center;
  color: inherit;
  overflow-wrap: break-word;
  hyphens: auto;
}

.wineclub-registration-wizard ul.bootstrapWizard > li.active .title {
  color: var(--acct-text-dark);
}

.wineclub-registration-wizard ul.bootstrapWizard > li.complete .title {
  color: var(--acct-text);
}

/* duplicate label carried for the mobile layout */
.wineclub-registration-wizard ul.bootstrapWizard .mobile-title {
  display: none;
}

/* ---------- Current-step caption ----------
   Duplicates the rail on desktop, so it is the mobile affordance only. */
.wineclub-registration-wizard .wizard-step-header {
  display: none;
  margin: var(--acct-space-sm) 0 0;
  font-size: 15px;
  font-weight: 600;
  color: var(--acct-text-dark);
}

.wineclub-registration-wizard .wizard-step-header .step-index {
  color: var(--acct-text-light);
  font-weight: 500;
}

/* ==========================================================================
   FORM PANELS
   ========================================================================== */

.join-wine-club-form {
  margin: 0 auto var(--acct-space-xl);
  padding: var(--acct-space-lg);
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius-card);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}

/* the platform's notice renders between the two cards — line it up with them
   instead of letting it run the full page width */
.join-wine-club-content ~ [id$="divMess"] {
  box-sizing: border-box;
  max-width: 860px;
  margin: 0 auto var(--acct-space-sm);
}

.join-wine-club-content ~ [id$="divMess"] .warning {
  margin: 0;
  padding: var(--acct-space-sm) var(--acct-space-md);
  /* same warning tone the alert component uses */
  background: #fdf8ec;
  border: 1px solid #f0e0b6;
  border-left: 3px solid #d9a441;
  border-radius: var(--acct-radius);
  font-size: 13px;
  line-height: 1.5;
  color: var(--acct-text);
}

/* Panels are toggled inline by the rail's onclick handlers. Only ever style
   the visible one — never set `display` on the group (§4.6). */
.join-wine-club-form > .join-wine-club-content > div[id^="tab"]:not([style*="display: none"]):not([style*="display:none"]) {
  display: block;
}

.join-wine-club-form p {
  margin: 0 0 var(--acct-space-sm);
  font-size: 14px;
}

.join-wine-club-form p.small {
  font-size: 12px;
  color: var(--acct-text-light);
}

.join-wine-club-form .red,
.join-wine-club-form span.red {
  color: var(--acct-error);
}

/* ---------- Field rows ---------- */
.join-wine-club-form .fieldset_row {
  margin: 0 0 var(--acct-space-sm);
  padding: 0;
  border: none;
}

.join-wine-club-form .fieldset_row:last-child {
  margin-bottom: 0;
}

/* The control separates label from input with <br> — spacing is ours (§4.10).
   Scoped away from `.secure-shopping`, whose <br> is real copy. */
.join-wine-club-form .fieldset_row > br,
.join-wine-club-form fieldset > br,
.join-wine-club-form .join-wine-club-left > br,
.join-wine-club-form > .join-wine-club-content > div[id^="tab"] > br {
  display: none;
}

/* Steps 1 and 2 lay their fields out bare — label, <br>, input — with no
   `.fieldset_row` wrapper, so the spacing has to come off the controls. */
.join-wine-club-form > .join-wine-club-content > div[id^="tab"] > .label {
  margin-top: var(--acct-space-sm);
}

.join-wine-club-form > .join-wine-club-content > div[id^="tab"] > .label:first-child {
  margin-top: 0;
}

.join-wine-club-form > .join-wine-club-content > div[id^="tab"] > input,
.join-wine-club-form > .join-wine-club-content > div[id^="tab"] > select,
.join-wine-club-form > .join-wine-club-content > div[id^="tab"] > textarea {
  margin-bottom: var(--acct-space-2xs);
}

.join-wine-club-form .label {
  display: block;
  margin: 0 0 6px;
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-text-dark);
}

/* Two different things hide labels here, and only one of them means it:
     class:  `class="label d-none"`            — suppressed only because the
             input carries a duplicate placeholder ("Enter email address."
             vs placeholder="Email Address"). A placeholder is not a label —
             it vanishes on first keystroke and is weak for AT — so these are
             restored (§5).
     inline: `class="label" style="display: none"` — the extra labels the
             control pairs with a multi-control group ("Birth Date Day",
             "Birth Date Year", "Address 2", "Select Pickup Location"). Those
             are deliberate and stay hidden (§4.6).
   The selector below matches the class case only, so the inline case is
   untouched. `!important` is needed in case Bootstrap's own `.d-none`
   utility is one of the parts that did load (§4.3). */
.join-wine-club-form .label.d-none:not([style*="display: none"]):not([style*="display:none"]) {
  display: block !important;
}

/* required marker — the markup only carries the class */
.join-wine-club-form .label.req::after {
  content: " *";
  color: var(--acct-error);
  font-weight: 600;
}

/* ---------- Controls (§3.5) ---------- */
.join-wine-club-form input[type="text"],
.join-wine-club-form input[type="password"],
.join-wine-club-form input[type="email"],
.join-wine-club-form input[type="tel"],
.join-wine-club-form select,
.join-wine-club-form textarea,
.join-wine-club-form .txt,
.join-wine-club-form .txtbig,
.join-wine-club-form .ddl {
  display: block;
  width: 100%;
  max-width: 420px;
  min-height: 42px;
  margin: 0;
  padding: 10px 12px;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  color: var(--acct-text-dark);
  font-family: var(--acct-font) !important;
  font-size: 14px;
  line-height: 1.4;
}

.join-wine-club-form textarea,
.join-wine-club-form textarea.txt {
  min-height: 88px;
  max-width: 520px;
  padding: 10px 12px;
  resize: vertical;
}

.join-wine-club-form input:focus,
.join-wine-club-form select:focus,
.join-wine-club-form textarea:focus {
  outline: none;
  border-color: var(--acct-primary);
  box-shadow: 0 0 0 3px var(--acct-primary-ring);
}

.join-wine-club-form input::placeholder,
.join-wine-club-form textarea::placeholder {
  color: var(--acct-gray-400);
}

.join-wine-club-form input[disabled],
.join-wine-club-form input[readonly],
.join-wine-club-form .aspNetDisabled input {
  background: var(--acct-surface);
  color: var(--acct-text-light);
  cursor: not-allowed;
}

/* the control writes `style="max-width: 300px"` on the login fields */
.join-wine-club-form #ctl00_cphBody_PageWrapper_Content_txtLoginID,
.join-wine-club-form #ctl00_cphBody_PageWrapper_Content_txtPassword {
  max-width: 420px !important;
}

/* ---------- jQuery UI selectmenu ----------
   Same recipe as the shipment popup. The widget writes an inline width and
   renders its caret as an absolutely positioned sprite. */
.join-wine-club-form .ui-selectmenu-button {
  position: relative !important;
  display: flex !important;
  flex-direction: row !important;
  align-items: center;
  justify-content: space-between;
  gap: var(--acct-space-2xs);
  width: 100% !important;
  max-width: 420px;
  min-height: 42px;
  padding: 0 34px 0 12px !important;
  overflow: hidden;
  background: var(--acct-white);
  border: 1px solid var(--acct-btn-border);
  border-radius: var(--acct-radius);
  color: var(--acct-text-dark);
  font-family: var(--acct-font);
  font-size: 14px;
}

.join-wine-club-form .ui-selectmenu-button:hover,
.join-wine-club-form .ui-selectmenu-button:focus {
  border-color: var(--acct-primary);
  outline: none;
}

.join-wine-club-form .ui-selectmenu-button .ui-icon {
  display: none !important;
}

.join-wine-club-form .ui-selectmenu-button::after {
  content: "";
  position: absolute;
  top: 50%;
  right: 14px;
  width: 8px;
  height: 8px;
  margin-top: -6px;
  border-right: 2px solid var(--acct-gray-500);
  border-bottom: 2px solid var(--acct-gray-500);
  transform: rotate(45deg);
  pointer-events: none;
}

.join-wine-club-form .ui-selectmenu-text {
  flex: 1 1 auto;
  min-width: 0;
  margin: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* the inline variant sits beside its label */
.join-wine-club-form .fieldset_row.expires-on {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--acct-space-2xs);
}

.join-wine-club-form .fieldset_row.expires-on .label {
  margin: 0;
}

.join-wine-club-form .fieldset_row.expires-on .ui-selectmenu-button {
  width: 160px !important;
  max-width: 160px;
}

/* ---------- Birth date triplet ---------- */
.join-wine-club-form .wineclubjoin-dob {
  margin: 0 0 var(--acct-space-sm);
}

.join-wine-club-form .date_selects {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--acct-space-2xs);
  max-width: 420px;
}

.join-wine-club-form .date_selects .select_box {
  min-width: 0;
}

.join-wine-club-form .date_selects .select_box select,
.join-wine-club-form .date_selects .select_box .ddl {
  width: 100%;
  max-width: none;
}

/* ---------- Radios (§4.3 — keep the real control) ---------- */
.join-wine-club-form input[type="radio"],
.join-wine-club-form input[type="checkbox"] {
  position: static;
  display: inline-block;
  width: auto;
  min-height: 0;
  max-width: none;
  margin: 0 8px 0 0;
  padding: 0;
  vertical-align: middle;
  opacity: 1;
  accent-color: var(--acct-primary);
  border: none;
  box-shadow: none;
}

.join-wine-club-form input[type="radio"] + label,
.join-wine-club-form input[type="checkbox"] + label {
  display: inline-block;
  margin: 0;
  font-size: 14px;
  font-weight: 400;
  color: var(--acct-text-dark);
  vertical-align: middle;
  cursor: pointer;
}

/* the gift-membership pair ships wrapped in `.aspNetDisabled` spans */
.join-wine-club-form .fieldset_row > .aspNetDisabled {
  display: inline-flex;
  align-items: center;
  margin-right: var(--acct-space-sm);
}

/* delivery options read as a choice list */
.join-wine-club-form .fieldset_row:has(> input[type="radio"]) {
  padding: var(--acct-space-xs) var(--acct-space-sm);
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius);
}

.join-wine-club-form .fieldset_row:has(> input[type="radio"]:checked) {
  border-color: var(--acct-primary);
  background: var(--acct-primary-tint);
}

/* ---------- Nested fieldsets ---------- */
.join-wine-club-form fieldset {
  margin: var(--acct-space-md) 0 0;
  padding: var(--acct-space-md);
  background: var(--acct-white);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius);
}

.join-wine-club-form fieldset legend {
  display: block;
  width: auto;
  margin: 0 0 var(--acct-space-xs);
  padding: 0;
  border: none;
}

.join-wine-club-form fieldset legend .label {
  margin: 0;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--acct-text-light);
}

.join-wine-club-form .gift-membership-settings {
  margin-top: var(--acct-space-sm);
}

.join-wine-club-form .join-wine-club-left {
  width: 100% !important;
  float: none !important;
}

/* ==========================================================================
   PAYMENT STEP
   The Stripe control ships its own inline <style> in the body, which wins
   ties on source order — these overrides carry !important deliberately.
   ========================================================================== */

.join-wine-club-form .secure-shopping {
  margin: 0 0 var(--acct-space-md);
  padding: var(--acct-space-sm) var(--acct-space-md);
  background: var(--acct-panel);
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius);
  font-size: 12px;
  color: var(--acct-text-light);
}

.join-wine-club-form .secure-shopping p {
  margin: 0;
  font-size: 12px;
}

/* the control emits a leading empty <p>. It holds whitespace, so `:empty`
   never matches — test for "no element children" instead. The real paragraph
   always wraps its heading in <strong>. */
.join-wine-club-form .secure-shopping > p:not(:has(*)) {
  display: none;
}

.join-wine-club-form .secure-shopping strong {
  display: block;
  margin-bottom: 2px;
  font-size: 13px;
  font-weight: 600;
  color: var(--acct-text-dark);
}

/* --------------------------------------------------------------------------
   Stripe hosted payments — SKIN ONLY, NEVER RESTRUCTURE (§4.12)

   This control drives its own visibility at runtime and it does it two ways
   at once, which is why an earlier flatten pass broke the whole step:

     <td class="status" style="display: none;">…undefined</td>
     <tr class="card-details link-element input-scope d-none"
         style="display: table-row;">

   `.d-none` is stale — the control leaves it on rows it has just switched ON
   via inline `display: table-row`. So a `.d-none { display: none }` rule
   fights the control and hides live rows, and a blanket
   `td { display: block }` resurrects the hidden status cell and prints
   "undefined" on the page.

   Therefore: touch no `display` on the table, its rows, or its cells. The
   element also hosts Stripe iframes that measure themselves (§10) — changing
   the display model underneath them is what collapses them. Padding, borders
   and type only.
   -------------------------------------------------------------------------- */

.join-wine-club-form .paymentOptions_table,
.join-wine-club-form .paymentOptions_row {
  width: 100%;
  margin: 0;
  padding: 0;
  border: none;
  background: none;
}

.join-wine-club-form table.paymentOptions {
  width: 100% !important;
  margin: 0;
  border: none;
  border-collapse: collapse;
  background: none;
}

.join-wine-club-form table.paymentOptions > tbody > tr > td {
  padding: 0 0 var(--acct-space-2xs);
  border: none !important;
  background: none;
  vertical-align: top;
}

/* the "Name on Card" caption row */
.join-wine-club-form table.paymentOptions .card-details .label {
  display: block;
  margin: 0 0 6px;
  font-size: 13px;
  font-weight: 500;
  color: var(--acct-text-dark);
}

/* the scaffold the control clones input styles from — genuinely inert, and
   it carries no inline display of its own */
.join-wine-club-form .hosted-payments .css-sample {
  display: none !important;
}

.join-wine-club-form .card-input {
  min-height: 42px !important;
  padding: 10px 12px !important;
  margin-bottom: var(--acct-space-xs) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  font-family: var(--acct-font) !important;
  font-size: 14px !important;
}

/* The status cell carries the control's own inline display and, when idle,
   the literal string "undefined". No display here — typography only. */
.join-wine-club-form .hosted-payments .status {
  font-size: 12px !important;
  color: var(--acct-text-light);
}

/* saved-card summary — the control floats this grid, so the cell it sits in
   needs the float contained or the row collapses to zero height */
.join-wine-club-form table.paymentOptions .payment-setup > td {
  overflow: hidden;
}

.join-wine-club-form .card.container {
  align-items: center;
  padding: var(--acct-space-xs) !important;
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius);
}

.join-wine-club-form .card.container div.card-brand img {
  zoom: 1;                /* the control ships zoom: 2 */
  max-width: 48px;
  height: auto;
}

.join-wine-club-form .card.container .card-info {
  text-align: left;
  font-size: 13px;
  color: var(--acct-text);
}

/* ---------- "Save payment method on file?" overlay ----------
   Ships with inline `display: none` and is switched to flex by the control.
   Style the panel; never touch the overlay's own display. */
.join-wine-club-form .card-on-file-overlay {
  z-index: 5;
  background-color: rgba(17, 17, 17, 0.45) !important;
  border-radius: var(--acct-radius-card);
}

.join-wine-club-form .card-on-file-overlay .modal-content {
  display: flex !important;
  flex-direction: column;
  align-items: center;
  gap: var(--acct-space-sm);
  min-height: 0 !important;
  padding: var(--acct-space-lg) !important;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-line-strong);
  border-radius: var(--acct-radius-card) !important;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18) !important;
}

.join-wine-club-form .card-on-file-overlay .modal-content p {
  margin: 0;
  font-size: 15px;
  font-weight: 600;
  color: var(--acct-text-dark);
}

.join-wine-club-form .card-on-file-overlay .modal-content .btn {
  min-width: 96px;
}

/* ---------- Buttons (§3.3 — one neutral outlined control) ---------- */
.join-wine-club-form .btn,
.join-wine-club-content .btn,
.wineclub-registration-wizard .btn {
  display: inline-block;
  min-height: 42px;
  padding: 10px 20px;
  background: var(--acct-white) !important;
  border: 1px solid var(--acct-btn-border) !important;
  border-radius: var(--acct-radius) !important;
  color: var(--acct-gray-700) !important;
  font-family: var(--acct-font) !important;
  font-size: 13px;
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: 0;
  text-align: center;
  text-decoration: none !important;
  text-transform: none;
  box-shadow: none !important;
  cursor: pointer;
}

.join-wine-club-form .btn:hover,
.join-wine-club-content .btn:hover,
.wineclub-registration-wizard .btn:hover {
  background: var(--acct-btn-hover-bg) !important;
  border-color: var(--acct-btn-border-hover) !important;
  color: var(--acct-gray-800) !important;
  transform: none !important;
}

/* ---------- Links ---------- */
.join-wine-club-form a:not(.btn) {
  color: var(--acct-primary);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.join-wine-club-form a:not(.btn):hover {
  color: var(--acct-primary-dark);
}

/* ---------- Focus (§5) ---------- */
.join-wine-club-content a:focus-visible,
.join-wine-club-form a:focus-visible,
.join-wine-club-form .btn:focus-visible,
.wineclub-registration-wizard a:focus-visible,
.join-wine-club-form .ui-selectmenu-button:focus-visible {
  outline: 2px solid var(--acct-primary);
  outline-offset: 2px;
}

/* ---------- Spacer junk (§4.10) ---------- */
/* `.clearfix` is used two ways here: as a bare float-clearing spacer, and as
   the wrapper around the step's action buttons
   (`.center.clearfix.padding-top-25` > `a.btn`). Only the empty ones are
   spacers — `:not(:has(*))` keeps any wrapper that carries real content.
   `:empty` is no good: these contain whitespace text nodes. */
.join-wine-club-content > div[style*="clear"],
.join-wine-club-form div[style*="clear"],
.wineclub-registration-wizard .clearfix:not(:has(*)),
.join-wine-club-content .clearfix:not(:has(*)),
.join-wine-club-form .clearfix:not(:has(*)) {
  display: none !important;
}

/* ---------- Action row ----------
   The control emits its buttons in a `.center` / `.padding-top-25` wrapper;
   both are storefront utilities this layer has to restate. */
.join-wine-club-content .center,
.join-wine-club-form .center,
.join-wine-club-content .padding-top-25,
.join-wine-club-form .padding-top-25 {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--acct-space-2xs);
  margin: var(--acct-space-lg) 0 0;
  padding: 0;
  text-align: center;
}

/* the wrapper is often the last thing in a panel — don't double the gap */
.join-wine-club-form .center:last-child,
.join-wine-club-form .padding-top-25:last-child {
  margin-bottom: 0;
}

.join-wine-club-content .center > .btn,
.join-wine-club-form .center > .btn,
.join-wine-club-form .padding-top-25 > .btn {
  min-width: 140px;
}

.join-wine-club-content [id$="divMess"]:empty,
.join-wine-club-form [id$="msgJoinWineClub"]:empty {
  display: none !important;
}

/* the duplicate title the control renders after the wizard */
.join-wine-club-content > h1[style*="display: none"] {
  display: none !important;
}

/* ==========================================================================
   RESPONSIVE (§6)
   ========================================================================== */

@media only screen and (max-width: 767px) {
  .join-wine-club-content,
  .join-wine-club-form {
    padding: var(--acct-space-md);
  }

  .join-wine-club-form .join-wine-club-content {
    padding: 0;
  }

  .join-wine-club-content .div-table {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--acct-space-sm);
  }

  .join-wine-club-form input[type="text"],
  .join-wine-club-form input[type="password"],
  .join-wine-club-form select,
  .join-wine-club-form textarea,
  .join-wine-club-form .txt,
  .join-wine-club-form .txtbig,
  .join-wine-club-form .ddl,
  .join-wine-club-form .ui-selectmenu-button {
    max-width: none;
  }
}

/* Below this the seven-step rail cannot hold a legible label, so it collapses
   to markers only and the control's own caption carries the step name. Both
   changes happen at the same breakpoint (§6). */
@media only screen and (max-width: 640px) {
  .wineclub-registration-wizard ul.bootstrapWizard .title {
    display: none;
  }

  .wineclub-registration-wizard ul.bootstrapWizard .step {
    width: 28px !important;
    min-width: 28px !important;
    max-width: 28px !important;
    height: 28px !important;
    min-height: 28px !important;
    font-size: 12px;
  }

  .wineclub-registration-wizard ul.bootstrapWizard > li::before {
    top: 14px;
  }

  .wineclub-registration-wizard .wizard-step-header {
    display: block;
    text-align: center;
  }

  /* the card supplies the top padding now */
  .join-wine-club-content > .header {
    margin-bottom: var(--acct-space-md);
    padding-top: 0;
  }

  .join-wine-club-content > .header h1 {
    font-size: 21px;
  }

  .wineclub-registration-wizard {
    margin-bottom: var(--acct-space-lg);
  }

  .join-wine-club-form .date_selects {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 6px;
  }

  .join-wine-club-form .fieldset_row.expires-on .ui-selectmenu-button {
    width: 100% !important;
    max-width: none;
  }
}

@media only screen and (max-width: 480px) {
  .join-wine-club-form {
    padding: var(--acct-space-sm);
    border-radius: var(--acct-radius);
  }

  .wineclub-registration-wizard ul.bootstrapWizard .step {
    width: 24px !important;
    min-width: 24px !important;
    max-width: 24px !important;
    height: 24px !important;
    min-height: 24px !important;
    font-size: 11px;
  }

  .wineclub-registration-wizard ul.bootstrapWizard > li::before {
    top: 12px;
  }

  .wineclub-registration-wizard ul.bootstrapWizard > li.complete .step::after {
    width: 9px;
    height: 5px;
  }

  .join-wine-club-content .center > .btn,
  .join-wine-club-form .center > .btn,
  .join-wine-club-form .padding-top-25 > .btn {
    width: 100%;
    min-width: 0;
  }
}
