/* Breadwinner v3 prototype: cart.html page-only styles. Loaded after v3-port.css.
   .reserve-520 (v3-port.css c-layout-utils) is #cart-page-grid's CLS anchor: it
   reserves the filled cart's height (item rows + totals slip) while
   BW.cart.renderCartPage loads async, so the aside doesn't jump the footer when
   totals paint in. When the cart is empty, html never gets .bw-cart-has-items
   (set synchronously in <head>, before paint, from localStorage bw_cart) -- there
   is nothing async to reserve height for, so the prerendered empty slip
   (.cart-empty-page[data-prerendered]) and the zero-totals aside should size to
   their own content, leaving the page's normal section gap before the footer
   instead of the filled-cart reservation. */
html:not(.bw-cart-has-items) #cart-page-grid.reserve-520 {
  min-height: 0;
}

/* The empty cart's summary aside starts `hidden` in the markup, but .slip/.split__aside set a
   display that beats the attribute, so a 50px empty box painted until cart.js ran and then
   vanished, dropping the footer (CLS 0.14 at 390). The attribute wins here. */
#cart-totals[hidden],
#cart-totals:empty { display: none; }
