/* ==========================================================================
   NOVAURA — Cart

   Styles WooCommerce's own cart output. Every monetary figure on this page
   is echoed from WooCommerce; nothing here computes or stores a value.
   ========================================================================== */

/* --- Page header --------------------------------------------------------- */
.nva-cart__header {
  margin-bottom: var(--nva-s-10);
  text-align: center;
}

.nva-cart__heading {
  font-family: var(--nva-font-heading);
  font-size: var(--nva-t-page-sm);
  font-weight: var(--nva-w-semi);
  line-height: var(--nva-lh-tight);
  letter-spacing: var(--nva-ls-tight);
}

.nva-cart__count {
  margin-top: var(--nva-s-3);
  font-size: var(--nva-t-micro);
  font-weight: var(--nva-w-semi);
  text-transform: uppercase;
  letter-spacing: var(--nva-ls-eyebrow);
  color: var(--nva-ink-55);
}

.nva-cart__rule {
  display: block;
  width: 4rem;
  height: 1px;
  margin: var(--nva-s-6) auto 0;
  background-color: var(--nva-line);
}

/* --- Layout -------------------------------------------------------------- */
.nva-cart__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--nva-s-10);
}

.nva-cart__main { min-width: 0; }

/* ==========================================================================
   Cart items
   ========================================================================== */
.nva-cart__items {
  border-top: 1px solid var(--nva-line);
}

.nva-cart-item {
  display: grid;
  grid-template-columns: 88px minmax(0, 1fr);
  gap: var(--nva-s-4);
  padding-block: var(--nva-s-6);
  border-bottom: 1px solid var(--nva-line);
}

.nva-cart-item__media {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--nva-s-2);
  border: 1px solid var(--nva-line);
  border-radius: var(--nva-r-md);
  background-color: var(--nva-surface);
}
.nva-cart-item__media img {
  width: 100%;
  height: auto;
  aspect-ratio: 1;
  object-fit: contain;
}

.nva-cart-item__body {
  display: flex;
  flex-direction: column;
  gap: var(--nva-s-2);
  min-width: 0;
}

.nva-cart-item__name {
  font-family: var(--nva-font-body);
  font-size: 0.9375rem;
  font-weight: var(--nva-w-semi);
  line-height: 1.4;
  color: var(--nva-ink);
}
.nva-cart-item__name a {
  color: inherit;
  transition: opacity var(--nva-d-base) var(--nva-ease);
}
.nva-cart-item__name a:hover { opacity: 0.65; }

/* WooCommerce item meta (variations, addons) */
.nva-cart-item__name .variation,
.nva-cart-item__name dl.variation {
  margin-top: var(--nva-s-2);
  font-size: var(--nva-t-micro);
  font-weight: var(--nva-w-regular);
  color: var(--nva-ink-55);
}
.nva-cart-item__name dl.variation dt,
.nva-cart-item__name dl.variation dd {
  display: inline;
  margin: 0;
}
.nva-cart-item__name dl.variation dd { margin-right: var(--nva-s-2); }
.nva-cart-item__name dl.variation p { display: inline; margin: 0; }

.nva-cart-item__name .backorder_notification {
  margin-top: var(--nva-s-2);
  font-size: var(--nva-t-micro);
  font-weight: var(--nva-w-regular);
  color: var(--nva-transit-fg);
}

.nva-cart-item__unit {
  font-family: var(--nva-font-heading);
  font-size: var(--nva-t-small);
  color: var(--nva-ink-55);
}

.nva-cart-item__controls {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--nva-s-4);
  margin-top: var(--nva-s-2);
}

/* Quantity — WooCommerce's own input, enhanced with a stepper by cart.js */
.nva-cart-item__qty .quantity { display: inline-flex; align-items: center; }

.nva-cart-item__qty input.qty {
  width: 52px;
  height: 40px;
  padding: 0;
  border: 1px solid var(--nva-line);
  border-radius: var(--nva-r-md);
  background: transparent;
  text-align: center;
  font-size: var(--nva-t-small);
  font-weight: var(--nva-w-semi);
  font-variant-numeric: tabular-nums;
  -moz-appearance: textfield;
}
.nva-cart-item__qty input.qty::-webkit-outer-spin-button,
.nva-cart-item__qty input.qty::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
.nva-cart-item__qty input.qty:focus { outline: none; border-color: rgba(0,0,0,0.25); }
.nva-cart-item__qty .screen-reader-text { position: absolute; left: -9999px; }

.nva-stepper-ready input.qty { border-radius: 0; border-inline: 0; }
.nva-cart-item__qty .nva-stepper__btn { width: 40px; height: 40px; }

.nva-cart-item__subtotal {
  margin-left: auto;
  font-family: var(--nva-font-heading);
  font-size: 1.0625rem;
  font-weight: var(--nva-w-medium);
  color: var(--nva-ink);
}

.nva-cart-item__remove-link {
  font-size: var(--nva-t-nano);
  font-weight: var(--nva-w-semi);
  text-transform: uppercase;
  letter-spacing: var(--nva-ls-label);
  color: var(--nva-ink-40);
  transition: color var(--nva-d-base) var(--nva-ease);
}
.nva-cart-item__remove-link:hover { color: var(--nva-red); }

/* --- Update cart --------------------------------------------------------- */
.nva-cart__actions {
  display: flex;
  justify-content: flex-end;
  padding-top: var(--nva-s-5);
}

.nva-cart__update {
  height: 40px;
  padding-inline: var(--nva-s-6);
  font-size: var(--nva-t-nano);
}
/* cart.js submits automatically on quantity change; the button stays as the
   no-JavaScript fallback and is hidden once the enhancement is active. */
.js .nva-cart__actions.is-auto .nva-cart__update { display: none; }
.nva-cart__actions.is-auto:not(.is-dirty) { padding-top: 0; }

/* --- Trust blocks -------------------------------------------------------- */
.nva-cart__trust {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--nva-s-4);
  margin-top: var(--nva-s-10);
  padding-top: var(--nva-s-8);
  border-top: 1px solid var(--nva-line);
  list-style: none;
}

.nva-cart__trust-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--nva-s-2);
  text-align: center;
  color: var(--nva-ink-60);
}
.nva-cart__trust-item span {
  font-size: 0.625rem;
  font-weight: var(--nva-w-semi);
  text-transform: uppercase;
  letter-spacing: var(--nva-ls-label);
  line-height: 1.4;
}

/* ==========================================================================
   Summary column
   ========================================================================== */
.nva-cart__aside { min-width: 0; }

/* --- Coupon -------------------------------------------------------------- */
.nva-cart__coupon {
  margin-bottom: var(--nva-s-6);
  padding: var(--nva-s-5);
  border: 1px solid var(--nva-line);
  border-radius: var(--nva-r-md);
  background-color: var(--nva-surface);
}

.nva-cart__coupon-label {
  display: block;
  margin-bottom: var(--nva-s-3);
  font-size: var(--nva-t-micro);
  font-weight: var(--nva-w-semi);
  text-transform: uppercase;
  letter-spacing: var(--nva-ls-label);
  color: var(--nva-ink-60);
}

.nva-cart__coupon-row { display: flex; gap: var(--nva-s-2); }

.nva-cart__coupon-input {
  flex: 1;
  min-width: 0;
  height: 44px;
  border-radius: var(--nva-r-sm);
}

.nva-cart__coupon-apply {
  flex-shrink: 0;
  height: 44px;
  padding-inline: var(--nva-s-5);
  border-radius: var(--nva-r-sm);
  font-size: var(--nva-t-nano);
}

/* --- Order summary ------------------------------------------------------- */
.nva-cart__summary {
  padding: var(--nva-s-6);
  border: 1px solid var(--nva-line);
  border-radius: var(--nva-r-md);
  background-color: var(--nva-surface);
}

.nva-cart__summary-heading {
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-micro);
  font-weight: var(--nva-w-semi);
  text-transform: uppercase;
  letter-spacing: var(--nva-ls-eyebrow);
  color: var(--nva-ink-60);
}

/* WooCommerce prints cart-totals.php as a table. These rules lay its rows
   out as flex lines — the figures themselves are untouched. */
.cart_totals { margin-top: var(--nva-s-5); }
.cart_totals h2 { display: none; } /* our own heading is above */

.cart_totals table.shop_table {
  width: 100%;
  margin: 0;
  border: 0;
  border-collapse: collapse;
}
.cart_totals table.shop_table tbody { display: block; }

.cart_totals table.shop_table tr {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--nva-s-4);
  padding-block: var(--nva-s-3);
  border-bottom: 1px solid var(--nva-line);
}
.cart_totals table.shop_table tr:last-child { border-bottom: 0; }

.cart_totals table.shop_table th,
.cart_totals table.shop_table td {
  padding: 0;
  border: 0;
  text-align: left;
  font-weight: var(--nva-w-regular);
}

.cart_totals table.shop_table th {
  flex-shrink: 0;
  font-size: var(--nva-t-small);
  color: var(--nva-ink-55);
}

.cart_totals table.shop_table td {
  text-align: right;
  font-family: var(--nva-font-heading);
  font-size: var(--nva-t-body);
  color: var(--nva-ink);
}

/* Applied coupon rows */
.cart_totals tr.cart-discount th { color: var(--nva-approved-fg); }
.cart_totals tr.cart-discount td { color: var(--nva-approved-fg); }
.cart_totals tr.cart-discount .woocommerce-remove-coupon {
  display: inline-block;
  margin-left: var(--nva-s-2);
  font-size: var(--nva-t-nano);
  text-transform: uppercase;
  letter-spacing: var(--nva-ls-label);
  color: var(--nva-ink-40);
}
.cart_totals tr.cart-discount .woocommerce-remove-coupon:hover { color: var(--nva-red); }

/* Order total */
.cart_totals tr.order-total {
  margin-top: var(--nva-s-2);
  padding-top: var(--nva-s-5);
  border-top: 1px solid var(--nva-ink);
  border-bottom: 0;
}
.cart_totals tr.order-total th {
  font-size: var(--nva-t-micro);
  font-weight: var(--nva-w-semi);
  text-transform: uppercase;
  letter-spacing: var(--nva-ls-label);
  color: var(--nva-ink);
}
.cart_totals tr.order-total td {
  font-size: 1.5rem;
  font-weight: var(--nva-w-medium);
}
.cart_totals tr.order-total .includes_tax,
.cart_totals .tax_label {
  display: block;
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-nano);
  font-weight: var(--nva-w-regular);
  color: var(--nva-ink-50);
}

/* Shipping rows and calculator */
.cart_totals tr.woocommerce-shipping-totals td { font-size: var(--nva-t-small); }
.cart_totals ul#shipping_method {
  margin: 0;
  padding: 0;
  list-style: none;
  text-align: right;
}
.cart_totals ul#shipping_method li { margin-bottom: var(--nva-s-2); }
.cart_totals ul#shipping_method label {
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-small);
  cursor: pointer;
}
.cart_totals .woocommerce-shipping-destination {
  margin-top: var(--nva-s-2);
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-nano);
  color: var(--nva-ink-50);
}
.cart_totals .shipping-calculator-button {
  display: inline-block;
  margin-top: var(--nva-s-2);
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-nano);
  text-transform: uppercase;
  letter-spacing: var(--nva-ls-label);
  color: var(--nva-ink-55);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.cart_totals .shipping-calculator-form { margin-top: var(--nva-s-4); text-align: left; }
.cart_totals .shipping-calculator-form p { margin-bottom: var(--nva-s-3); }
.cart_totals .shipping-calculator-form input,
.cart_totals .shipping-calculator-form select {
  width: 100%;
  padding: var(--nva-s-2) var(--nva-s-3);
  border: 1px solid var(--nva-line);
  border-radius: var(--nva-r-sm);
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-small);
}

/* --- Checkout button ----------------------------------------------------- */
/* --------------------------------------------------------------------------
   Proceed to Checkout

   WooCommerce renders this as:
     <a class="checkout-button button alt wc-forward" href="...">

   The generic `.button` class collides with rules shipped by WooCommerce
   block styles and WordPress global styles, several of which reach (0,2,1)
   or higher — enough to repaint the label dark on the black fill. Every
   state is therefore pinned at (0,4,1) with three classes plus the element,
   the same treatment the Continue Shopping button needed.
   -------------------------------------------------------------------------- */
.wc-proceed-to-checkout { margin-top: var(--nva-s-6); padding: 0; }

.nva-cart__summary .wc-proceed-to-checkout a.checkout-button.button,
.nva-cart__summary .wc-proceed-to-checkout a.checkout-button.button:is(:link, :visited, :active) {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 52px;
  border: 1px solid var(--nva-ink);
  border-radius: 0;
  background-color: var(--nva-ink);
  color: var(--nva-on-dark);
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-small);
  font-weight: var(--nva-w-semi);
  text-transform: uppercase;
  letter-spacing: var(--nva-ls-button);
  text-decoration: none;
  opacity: 1;
  transition: background-color var(--nva-d-base) var(--nva-ease),
              border-color var(--nva-d-base) var(--nva-ease);
}

.nva-cart__summary .wc-proceed-to-checkout a.checkout-button.button:is(:hover, :focus, :focus-visible) {
  /* Solid charcoal — white on #262626 is ~15:1, and it does not depend on
     whatever sits behind the button. */
  background-color: var(--nva-ink-hover);
  border-color: var(--nva-ink-hover);
  color: var(--nva-on-dark);
  text-decoration: none;
  opacity: 1;
}

/* Keyboard focus stays visible against the dark fill. */
.nva-cart__summary .wc-proceed-to-checkout a.checkout-button.button:focus-visible {
  outline: 2px solid var(--nva-blue);
  outline-offset: 3px;
}

/* Fallback for any context where the button renders outside the summary
   panel — for example a plugin relocating it. */
a.checkout-button.button:is(:link, :visited, :hover, :focus, :active) {
  color: var(--nva-on-dark);
  text-decoration: none;
}

/* ==========================================================================
   Notices — including WooCommerce's own "Undo?" after removing an item
   ========================================================================== */
.nva-cart-notice {
  position: relative;
  padding-right: var(--nva-s-12);
}

.nva-cart-notice__dismiss {
  position: absolute;
  top: 50%;
  right: var(--nva-s-4);
  transform: translateY(-50%);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  color: var(--nva-ink-40);
  transition: color var(--nva-d-base) var(--nva-ease);
}

/* 44x44 hit area on touch, without resizing the visible glyph. */
.nva-cart-notice__dismiss::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 44px;
  height: 44px;
  transform: translate(-50%, -50%);
}
@media (pointer: fine) {
  .nva-cart-notice__dismiss::after { display: none; }
}

.nva-cart-notice__dismiss:hover { color: var(--nva-ink); }

.nva-woo .woocommerce-message a.restore-item {
  margin-left: var(--nva-s-2);
  font-weight: var(--nva-w-semi);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* ==========================================================================
   Empty state

   Deliberately not a card or a box — centred type on the page background,
   using the same typography, spacing and button styles as the rest of the
   site, with generous whitespace.
   ========================================================================== */
.nva-cart-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding-block: var(--nva-s-20);
  text-align: center;
}

.nva-cart-empty__heading {
  font-family: var(--nva-font-heading);
  font-size: var(--nva-t-page-sm);
  font-weight: var(--nva-w-semi);
  line-height: var(--nva-lh-tight);
  letter-spacing: var(--nva-ls-tight);
  color: var(--nva-ink);
}

.nva-cart-empty__body {
  max-width: 30rem;
  margin-top: var(--nva-s-6);
  font-size: var(--nva-t-lead);
  line-height: var(--nva-lh-relaxed);
  color: var(--nva-ink-muted);
}

.nva-cart-empty__actions { margin-top: var(--nva-s-12); }

/*
 * The CTA. cart.css loads after components.css and this selector carries
 * three classes plus the element, so nothing shipped by WooCommerce blocks
 * or WordPress global styles can reach past it.
 */
.nva-cart-empty__cta {
  min-width: 240px;
  height: 52px;
}

.nva-cart-empty a.nva-btn.nva-cart-empty__cta:is(:link, :visited, :active) {
  background-color: var(--nva-ink);
  color: var(--nva-on-dark);
  border-color: var(--nva-ink);
  text-decoration: none;
  opacity: 1;
}

.nva-cart-empty a.nva-btn.nva-cart-empty__cta:is(:hover, :focus, :focus-visible) {
  background-color: var(--nva-ink-hover);
  color: var(--nva-on-dark);
  border-color: var(--nva-ink-hover);
  text-decoration: none;
  opacity: 1;
}

/* Keyboard focus stays visible against the dark button. */
.nva-cart-empty a.nva-btn.nva-cart-empty__cta:focus-visible {
  outline: 2px solid var(--nva-blue);
  outline-offset: 3px;
}

/* If the WooCommerce Cart block ever renders alongside the classic cart,
   its empty-cart inner blocks would duplicate our empty state. These are
   block-only class names, so they never match our own markup. */
.wp-block-woocommerce-empty-cart-block,
.wc-block-cart__empty-cart__title,
.wc-block-grid__products { display: none; }

/* Anything an extension hooks onto woocommerce_cart_is_empty lands here.
   Core's own leftovers are hidden; genuine extension output still shows. */
.nva-cart-empty__extras:empty { display: none; }
.nva-cart-empty__extras { margin-top: var(--nva-s-16); width: 100%; }
.nva-cart-empty__extras .cart-empty,
.nva-cart-empty__extras .return-to-shop,
.nva-cart-empty__extras .woocommerce-info,
.nva-cart-empty__extras .cross-sells { display: none; }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (min-width: 640px) {
  .nva-cart-empty__cta { min-width: 280px; }

  .nva-cart-item {
    grid-template-columns: 104px minmax(0, 1fr);
    gap: var(--nva-s-5);
    padding-block: var(--nva-s-8);
  }
  .nva-cart-item__name { font-size: 1.0625rem; }
  .nva-cart-item__subtotal { font-size: 1.25rem; }
}

@media (min-width: 1024px) {
  .nva-cart-empty { padding-block: var(--nva-s-32); }

  .nva-cart__header { margin-bottom: var(--nva-s-16); }

  .nva-cart__grid {
    grid-template-columns: minmax(0, 1fr) 380px;
    gap: var(--nva-s-16);
    align-items: start;
  }

  /* Summary follows the customer down a long cart. */
  .nva-cart__aside {
    position: sticky;
    top: calc( var(--nva-header-h) + var(--nva-s-6) );
  }

  .nva-cart-item { grid-template-columns: 120px minmax(0, 1fr); }
  .nva-cart__summary { padding: var(--nva-s-8); }
}

/* ==========================================================================
   CART — responsive pass (Batch 2)

   Four genuine issues found on inspection, all CSS-only. The desktop layout
   above is untouched: the 1024px two-column grid, the sticky summary, the
   120px thumbnail and the summary padding all remain exactly as approved.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Remove link — the smallest target in the cart

   It is a ~10px uppercase text link with no padding, which is well under a
   comfortable tap and sits directly beside the quantity stepper. The target
   is expanded without changing the type size or the visual weight.
   -------------------------------------------------------------------------- */
.nva-cart-item__remove-link {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding-inline: 0.25rem;
}

/* --------------------------------------------------------------------------
   2. Controls row at narrow widths

   margin-left:auto on the subtotal inside a wrapping flex row leaves the
   price stranded on its own line once the stepper and remove link no longer
   fit. Below 480px the row becomes an explicit two-line grid: controls on
   one line, price aligned right on the next.
   -------------------------------------------------------------------------- */
@media (max-width: 479px) {

  .nva-cart-item__controls {
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: center;
    gap: var(--nva-s-3) var(--nva-s-4);
  }

  .nva-cart-item__qty { grid-column: 1; }

  .nva-cart-item__remove-link {
    grid-column: 2;
    justify-self: start;
  }

  .nva-cart-item__subtotal {
    grid-column: 1 / -1;
    margin-left: 0;
    justify-self: end;
  }
}

/* --------------------------------------------------------------------------
   3. Trust blocks

   Three columns at 375px gives each item roughly 100px for a centred icon
   and two words of uppercase label, which wraps awkwardly. They stack to a
   single readable row per item on the narrowest screens.
   -------------------------------------------------------------------------- */
@media (max-width: 479px) {

  .nva-cart__trust {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--nva-s-4);
  }

  .nva-cart__trust-item {
    flex-direction: row;
    justify-content: flex-start;
    gap: var(--nva-s-3);
    text-align: left;
  }
}

/* --------------------------------------------------------------------------
   4. Tablet tier

   cart.css previously stepped at 640px and then not again until 1024px, so
   tablet portrait kept phone spacing. A single column is still correct here
   — a 380px summary beside the items would leave too little room — so this
   adjusts rhythm and proportion only, not the layout.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) {

  .nva-cart__header { margin-bottom: var(--nva-s-12); }

  .nva-cart-item { grid-template-columns: 112px minmax(0, 1fr); }

  .nva-cart-item__controls { gap: var(--nva-s-5); }

  .nva-cart__summary { padding: var(--nva-s-7); }

  .nva-cart__trust {
    margin-top: var(--nva-s-12);
    padding-top: var(--nva-s-10);
  }

  /* The summary sits below the items here, so it should not run full-bleed. */
  .nva-cart__aside {
    max-width: 32rem;
    margin-inline: auto;
  }
}

/* The aside constraint is a tablet-only measure; the desktop grid owns it. */
@media (min-width: 1024px) {
  .nva-cart__aside {
    max-width: none;
    margin-inline: 0;
  }
}

/* Touch devices get a comfortable floor on the stepper and quantity field. */
@media (pointer: coarse) {

  .nva-cart-item__qty .nva-stepper__btn,
  .nva-cart-item__qty input.qty { min-height: 44px; }

  .nva-cart__update { min-height: 44px; }
}


/* ==========================================================================
   Free-shipping progress note

   Deliberately a single line rather than a promotional panel — it sits
   inside the existing cart rhythm without competing with the summary.
   ========================================================================== */
.nva-cart__shipping-note {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0 0 var(--nva-s-5);
  padding: var(--nva-s-3) var(--nva-s-4);
  border: 1px solid var(--nva-line);
  border-left: 2px solid var(--nva-ink-20);
  border-radius: var(--nva-r-sm);
  background-color: rgba(0,0,0,0.02);
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-micro);
  font-weight: var(--nva-w-medium);
  letter-spacing: 0.01em;
  color: var(--nva-ink-70);
}

.nva-cart__shipping-note.is-unlocked {
  border-left-color: var(--nva-ink);
  color: var(--nva-ink);
}

@media (min-width: 768px) {
  .nva-cart__shipping-note {
    padding: var(--nva-s-4) var(--nva-s-5);
    font-size: var(--nva-t-small);
  }
}

/* --------------------------------------------------------------------------
   Shipping line in the cart totals

   The calculator is gone from the cart; this keeps the summary reading
   subtotal → shipping → total rather than jumping straight to the total.
   -------------------------------------------------------------------------- */
.nva-cart__shipping-later {
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-micro);
  font-weight: var(--nva-w-regular);
  color: var(--nva-ink-45);
}

/* --- Promotion -------------------------------------------------------------
   Matches the shop banner so the two read as one system. Hairline rules
   rather than a filled card, existing type scale, champagne for the code.
   --------------------------------------------------------------------------- */
.nva-cart-promo {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: center;
  gap: 0 0.55em;
  margin: 0 0 var(--nva-s-5);
  padding: var(--nva-s-3) var(--nva-s-4);
  border-top: 1px solid var(--nva-line);
  border-bottom: 1px solid var(--nva-line);
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-small);
  line-height: 1.5;
  color: var(--nva-ink-70);
  text-align: center;
}

.nva-cart-promo__code-wrap {
  display: inline-flex;
  align-items: baseline;
  gap: 0.4em;
}

.nva-cart-promo__code {
  white-space: nowrap;
  font-weight: var(--nva-w-semi);
  letter-spacing: var(--nva-ls-label);
  color: var(--nva-gold);
  /* Easy to select by hand when the copy button is unavailable. */
  user-select: all;
}

.nva-cart-promo__sep { opacity: 0.4; }

.nva-cart-promo__copy {
  appearance: none;
  border: 1px solid var(--nva-line);
  background: transparent;
  border-radius: var(--nva-r-sm);
  padding: 0.15em 0.6em;
  font-family: var(--nva-font-body);
  font-size: var(--nva-t-micro);
  letter-spacing: var(--nva-ls-label);
  text-transform: uppercase;
  color: var(--nva-ink-70);
  cursor: pointer;
  transition: color 0.2s ease, border-color 0.2s ease;
}

.nva-cart-promo__copy:hover,
.nva-cart-promo__copy:focus-visible {
  color: var(--nva-ink);
  border-color: var(--nva-ink);
}

.nva-cart-promo__copy.is-copied {
  color: var(--nva-gold);
  border-color: var(--nva-gold);
}

@media (max-width: 767px) {
  .nva-cart-promo__sep { display: none; }
  .nva-cart-promo { gap: 0.25em 0.6em; padding: var(--nva-s-3); }
}
