/* ============================================================================
 * Rogaloff Award Decal Builder — .rm- reskin + responsive
 * ----------------------------------------------------------------------------
 * Restyles the legacy builder (modal wizard + landing) to match the new
 * BigCommerce Stencil storefront's `.rm-` design system.
 *
 * SCOPING RULE (hard constraint): every rule is scoped to a builder root —
 *   .rm-builder  (landing / inline content)
 *   .modal-main  (the launch section)
 *   .new-rack-modal (each wizard modal)
 * There are NO global `body` / `*` selectors, so this file cannot affect the
 * surrounding storefront. Design tokens are declared on those roots too (not on
 * :root) so the builder is self-contained whether embedded or standalone.
 *
 * Load AFTER the legacy style.css so these win on specificity/order.
 * Fonts (Cormorant Garamond + Jost) are pulled in via <link> in the Blade head.
 * ========================================================================== */

/* ---- Tokens (scoped to the builder roots only) --------------------------- */
.rm-builder,
.modal-main,
.new-rack-modal,
.rm-terms-modal {
  --rm-navy:        #0f1e3c;
  --rm-navy-mid:    #1a3060;
  --rm-navy-light:  #243d72;
  --rm-teal:        #1d6b5a;
  --rm-teal-light:  #2a8a72;
  --rm-gold:        #b8963e;
  --rm-gold-light:  #d4af62;
  --rm-gold-pale:   #f5edd8;
  --rm-white:       #ffffff;
  --rm-off-white:   #f7f5f0;
  --rm-paper:       #f2efe8;
  --rm-charcoal:    #2c2c2e;
  --rm-muted:       #6b6860;
  --rm-muted-light: #9a9890;
  --rm-border-soft: rgba(44,44,46,0.10);
  --rm-border-mid:  rgba(44,44,46,0.18);
  --rm-font-display:'Cormorant Garamond', Georgia, 'Times New Roman', serif;
  --rm-font-body:   'Jost', system-ui, -apple-system, sans-serif;
  --rm-radius:      4px;
  --rm-radius-md:   6px;
  --rm-radius-lg:   10px;
  --rm-trans:       0.18s ease;
}

/* ---- Landing section ----------------------------------------------------- */
.modal-main {
  font-family: var(--rm-font-body);
  color: var(--rm-charcoal);
  background: var(--rm-off-white);
  padding: 48px 20px 56px;
}
.modal-main .container.text-center strong { color: var(--rm-navy); }
.modal-main p strong { color: var(--rm-navy); font-weight: 600; }

/* ---- Buttons — map legacy .global-btn / .btn-primary onto .rm-btn -------- */
.modal-main .btn-primary,
.new-rack-modal .global-btn,
.new-rack-modal .clear_rack {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--rm-font-body);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  padding: 11px 26px;
  border-radius: var(--rm-radius);
  border: 1px solid var(--rm-gold);
  background: var(--rm-gold);
  color: var(--rm-navy);
  cursor: pointer;
  text-decoration: none;
  transition: background var(--rm-trans), border-color var(--rm-trans), color var(--rm-trans);
}
.modal-main .btn-primary:hover,
.new-rack-modal .global-btn:hover {
  background: var(--rm-gold-light);
  border-color: var(--rm-gold-light);
  color: var(--rm-navy);
}
/* Navy variant for primary forward actions (Add to rack / Proceed) */
.new-rack-modal .add-to-btn,
.new-rack-modal .add-to-crt,
.new-rack-modal .next-btn.downloadribbon {
  background: var(--rm-navy);
  border-color: var(--rm-navy);
  color: var(--rm-white);
}
.new-rack-modal .add-to-btn:hover,
.new-rack-modal .add-to-crt:hover,
.new-rack-modal .next-btn.downloadribbon:hover {
  background: var(--rm-navy-light);
  border-color: var(--rm-navy-light);
  color: var(--rm-white);
}
/* Subtle / back / cancel buttons → outline */
.new-rack-modal .back-btn,
.new-rack-modal .grey-btn,
.new-rack-modal .cancel,
.new-rack-modal .clear_rack {
  background: transparent;
  color: var(--rm-navy);
  border-color: var(--rm-border-mid);
}
.new-rack-modal .back-btn:hover,
.new-rack-modal .grey-btn:hover,
.new-rack-modal .cancel:hover,
.new-rack-modal .clear_rack:hover {
  border-color: var(--rm-navy);
  background: var(--rm-paper);
  color: var(--rm-navy);
}

/* ---- Modal chrome -------------------------------------------------------- */
.new-rack-modal .modal-content {
  font-family: var(--rm-font-body);
  background: var(--rm-off-white);
  border: none;
  border-radius: var(--rm-radius-lg);
  box-shadow: 0 24px 60px rgba(15,30,60,0.28);
  overflow: hidden;
}
.new-rack-modal .modal-body { padding: 0; }
.new-rack-modal .modal-inner { padding: 32px 36px 28px; }
/* Section headings inside modals */
.new-rack-modal h2,
.new-rack-modal h3,
.new-rack-modal h4,
.new-rack-modal .modal-title {
  font-family: var(--rm-font-display);
  color: var(--rm-navy);
  font-weight: 600;
  letter-spacing: 0.01em;
}
/* Close button */
.new-rack-modal .clear-rack-close-btn,
.new-rack-modal .modal-btn-close {
  position: absolute;
  top: 14px;
  right: 16px;
  width: 34px;
  height: 34px;
  border: 1px solid var(--rm-border-mid);
  border-radius: 50%;
  background: var(--rm-white);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  z-index: 5;
  transition: border-color var(--rm-trans), background var(--rm-trans);
}
.new-rack-modal .clear-rack-close-btn:hover,
.new-rack-modal .modal-btn-close:hover {
  border-color: var(--rm-gold);
  background: var(--rm-gold-pale);
}
.new-rack-modal .clear-rack-close-btn img,
.new-rack-modal .modal-btn-close img { width: 14px; height: 14px; }

/* ---- Branch tiles -------------------------------------------------------- */
.new-rack-modal #branch-container .branch-item { margin-bottom: 14px; }
.new-rack-modal #branch-container .branch-item .global-btn {
  width: 100%;
  justify-content: center;
  text-transform: none;
  letter-spacing: 0.02em;
  font-size: 14px;
  background: var(--rm-white);
  color: var(--rm-navy);
  border-color: var(--rm-border-soft);
  padding: 14px 18px;
}
.new-rack-modal #branch-container .branch-item .global-btn:hover {
  border-color: var(--rm-gold);
  background: var(--rm-gold-pale);
}

/* ---- Award (ribbon) picker tiles → card style ---------------------------- */
.new-rack-modal .award-item {
  background: var(--rm-white);
  border: 1px solid var(--rm-border-soft);
  border-radius: var(--rm-radius-md);
  padding: 14px;
  text-align: center;
  cursor: pointer;
  transition: border-color var(--rm-trans), box-shadow var(--rm-trans), transform var(--rm-trans);
  height: 100%;
}
.new-rack-modal .award-item:hover {
  border-color: var(--rm-gold);
  box-shadow: 0 8px 22px rgba(15,30,60,0.10);
  transform: translateY(-2px);
}
.new-rack-modal .award-item.active {
  border-color: var(--rm-teal);
  box-shadow: 0 0 0 2px var(--rm-teal) inset;
}
.new-rack-modal .award-item img {
  max-width: 100%;
  height: auto;
  margin-bottom: 8px;
}
.new-rack-modal .award-item .ribbon_title {
  font-family: var(--rm-font-body);
  font-size: 12px;
  font-weight: 500;
  color: var(--rm-charcoal);
  margin: 0;
  line-height: 1.35;
}

/* ---- Inputs / selects / search ------------------------------------------ */
.new-rack-modal input[type="text"],
.new-rack-modal input[type="email"],
.new-rack-modal input[type="number"],
.new-rack-modal select,
.new-rack-modal .form-control {
  font-family: var(--rm-font-body);
  font-size: 13px;
  color: var(--rm-charcoal);
  background: var(--rm-white);
  border: 1px solid var(--rm-border-soft);
  border-radius: var(--rm-radius);
  padding: 10px 12px;
  outline: none;
  transition: border-color var(--rm-trans), box-shadow var(--rm-trans);
}
.new-rack-modal input:focus,
.new-rack-modal select:focus,
.new-rack-modal .form-control:focus {
  border-color: var(--rm-gold);
  box-shadow: 0 0 0 3px var(--rm-gold-pale);
}
.new-rack-modal input::placeholder { color: var(--rm-muted-light); }
.new-rack-modal #size-selector { min-width: 280px; }

/* Search row (keyword + button) */
.new-rack-modal .search-bar,
.new-rack-modal .modal-search {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-bottom: 18px;
}

/* ---- Rack preview canvas ------------------------------------------------- */
.new-rack-modal .selectedRibbon-container,
.new-rack-modal .screenshot-div {
  background: var(--rm-paper);
  border: 1px solid var(--rm-border-soft);
  border-radius: var(--rm-radius-md);
  padding: 18px;
}

/* ---- Price + checkout area ----------------------------------------------- */
.new-rack-modal .totalPrice,
.new-rack-modal .subtotalPrice,
.new-rack-modal #eachPrice {
  font-family: var(--rm-font-display);
  font-weight: 600;
  color: var(--rm-navy);
}
.new-rack-modal .checkout-subtotal-button,
.new-rack-modal .ribbons-btns,
.new-rack-modal .select-ribbons-btns,
.new-rack-modal .email-btns,
.new-rack-modal .modal-button {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  justify-content: center;
  margin-top: 22px;
}
/* T&C + email gate row */
.new-rack-modal .form-group {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  margin-bottom: 14px;
}

/* ---- Pagination ---------------------------------------------------------- */
.new-rack-modal .modal-pagination {
  display: flex;
  gap: 6px;
  justify-content: center;
  align-items: center;
  margin-top: 18px;
  flex-wrap: wrap;
}
.new-rack-modal .modal-pagination a,
.new-rack-modal .modal-pagination button {
  min-width: 34px;
  height: 34px;
  padding: 0 8px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--rm-border-soft);
  border-radius: var(--rm-radius);
  background: var(--rm-white);
  color: var(--rm-navy);
  font-size: 12px;
  text-decoration: none;
  cursor: pointer;
}
.new-rack-modal .modal-pagination a.active,
.new-rack-modal .modal-pagination button.active {
  background: var(--rm-navy);
  color: var(--rm-white);
  border-color: var(--rm-navy);
}

/* ---- Loader -------------------------------------------------------------- */
.modal-main .loader,
.new-rack-modal .loader { text-align: center; }

/* ============================================================================
 * RESPONSIVE  (Task 4) — the wizard was modal-xl / desktop-only.
 * ========================================================================== */
@media (max-width: 992px) {
  .new-rack-modal .modal-dialog.modal-xl { max-width: 94vw; margin: 16px auto; }
  .new-rack-modal #size-selector { min-width: 0; width: 100%; }
}

@media (max-width: 768px) {
  .modal-main { padding: 28px 16px 36px; }
  .new-rack-modal .modal-dialog,
  .new-rack-modal .modal-dialog.modal-xl,
  .new-rack-modal .modal-dialog.modal-md {
    max-width: 100%;
    width: 100%;
    margin: 0;
  }
  .new-rack-modal .modal-content {
    border-radius: 0;
    min-height: 100vh;            /* full-screen sheet on phones */
  }
  .new-rack-modal .modal-inner { padding: 22px 18px 20px; }

  /* Picker grid: Bootstrap cols → 2-up, then let cards breathe */
  .new-rack-modal #awards-container > [class*="col-"] {
    flex: 0 0 50%;
    max-width: 50%;
  }

  /* Buttons go full width and stack */
  .new-rack-modal .checkout-subtotal-button,
  .new-rack-modal .ribbons-btns,
  .new-rack-modal .select-ribbons-btns,
  .new-rack-modal .email-btns,
  .new-rack-modal .modal-button { flex-direction: column; align-items: stretch; }
  .new-rack-modal .global-btn { width: 100%; }

  .new-rack-modal .selectedRibbon-container,
  .new-rack-modal .screenshot-div { padding: 12px; overflow-x: auto; }
}

@media (max-width: 480px) {
  .new-rack-modal #awards-container > [class*="col-"] {
    flex: 0 0 100%;
    max-width: 100%;
  }
  .new-rack-modal .modal-inner { padding: 18px 14px 16px; }
  .modal-main .container.text-center img { width: 150px !important; height: auto !important; }
}

/* ---- Live price preview -------------------------------------------------- */
.new-rack-modal .rm-price-preview {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: center;
  gap: 6px 10px;
  margin: 14px 0 4px;
  min-height: 24px;
  text-align: center;
}
.new-rack-modal .rm-price-preview__total {
  font-family: var(--rm-font-display);
  font-size: 26px;
  font-weight: 600;
  color: var(--rm-navy);
  line-height: 1;
}
.new-rack-modal .rm-price-preview__gst {
  font-family: var(--rm-font-body);
  font-size: 11px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--rm-muted);
}
.new-rack-modal .rm-price-preview__detail {
  flex-basis: 100%;
  font-family: var(--rm-font-body);
  font-size: 12px;
  color: var(--rm-muted);
}
.new-rack-modal .rm-price-preview__hint {
  font-family: var(--rm-font-body);
  font-size: 12px;
  font-style: italic;
  color: var(--rm-muted-light);
}

/* ============================================================================
 * POLISH PASS  (loaded last → wins ties; a few !important to beat legacy style.css)
 * ========================================================================== */

/* --- Centre all modal titles + control the under-title space -------------- */
.modal-main .modal-main-head,
.new-rack-modal .modal-main-head,
.new-rack-modal .modal-inner > h5,
.new-rack-modal .modal-body > h5 {
  text-align: center !important;
  font-family: var(--rm-font-display);
  color: var(--rm-navy);
  font-weight: 600;
  font-size: 24px;
  margin: 4px 0 0;
}
/* The "dwn-brd" divider under a title — make it a tidy centred rule, not a big gap */
.new-rack-modal .modal-main-head.dwn-brd {
  padding-bottom: 14px;
  margin: 0 0 18px;
  border-bottom: 1px solid var(--rm-border-soft);
}
/* secondary sub-heading line (e.g. "Select your size…") */
.new-rack-modal .modal-inner > h5:not(.modal-main-head) {
  font-size: 15px;
  font-weight: 500;
  color: var(--rm-muted);
}

/* --- Award (ribbon) cards: kill the bottom-heavy empty space -------------- */
.new-rack-modal .award-item {
  height: auto !important;
  min-height: 148px;
  display: flex !important;
  flex-direction: column;
  align-items: center;
  justify-content: center;   /* centre content vertically → no dead space below */
  gap: 10px;
  padding: 16px 12px;
}
.new-rack-modal .award-item img {
  max-height: 60px;
  width: auto;
  max-width: 100%;
  margin: 0;
}
.new-rack-modal .award-item .ribbon_title {
  font-size: 12.5px;
  line-height: 1.3;
}
/* breathing room between card rows */
.new-rack-modal #awards-container > [class*="col-"] { margin-bottom: 18px; }

/* --- Buttons: make the colour tiers land reliably over legacy CSS --------- */
/* base = gold */
.new-rack-modal a.global-btn,
.modal-main .btn-primary.rm-btn {
  background: var(--rm-gold) !important;
  border: 1px solid var(--rm-gold) !important;
  color: var(--rm-navy) !important;
  white-space: normal;          /* let long labels wrap instead of truncating */
  height: auto;
  line-height: 1.25;
  text-align: center;
}
.new-rack-modal a.global-btn:hover,
.modal-main .btn-primary.rm-btn:hover {
  background: var(--rm-gold-light) !important;
  border-color: var(--rm-gold-light) !important;
}
/* forward / primary actions = navy */
.new-rack-modal a.global-btn.add-to-btn,
.new-rack-modal a.global-btn.add-to-crt,
.new-rack-modal a.global-btn.downloadribbon,
.new-rack-modal a.global-btn.next-btn.downloadribbon {
  background: var(--rm-navy) !important;
  border-color: var(--rm-navy) !important;
  color: var(--rm-white) !important;
}
.new-rack-modal a.global-btn.add-to-btn:hover,
.new-rack-modal a.global-btn.add-to-crt:hover,
.new-rack-modal a.global-btn.downloadribbon:hover {
  background: var(--rm-navy-light) !important;
  border-color: var(--rm-navy-light) !important;
}
/* back / cancel / clear = outline (fixes the muddy "Make Changes" button) */
.new-rack-modal a.global-btn.cancel,
.new-rack-modal a.global-btn.back-btn,
.new-rack-modal a.global-btn.grey-btn,
.new-rack-modal a.global-btn.clear_rack,
.new-rack-modal .clear_rack {
  background: transparent !important;
  border: 1px solid var(--rm-border-mid) !important;
  color: var(--rm-navy) !important;
}
.new-rack-modal a.global-btn.cancel:hover,
.new-rack-modal a.global-btn.back-btn:hover,
.new-rack-modal a.global-btn.grey-btn:hover,
.new-rack-modal a.global-btn.clear_rack:hover {
  background: var(--rm-paper) !important;
  border-color: var(--rm-navy) !important;
}

/* --- Branch label / search row ------------------------------------------- */
/* the branch-name button in the picker header was truncating */
.new-rack-modal .selected-branch,
.new-rack-modal .branch-label,
.new-rack-modal .search-bar .global-btn {
  white-space: normal !important;
  max-width: 320px;
  font-size: 12px;
  padding: 10px 16px;
}
/* search magnifier button */
.new-rack-modal .search-bar button,
.new-rack-modal .search-icon {
  background: var(--rm-navy);
  color: var(--rm-white);
  border: 1px solid var(--rm-navy);
  border-radius: var(--rm-radius);
  padding: 0 14px;
}

/* --- "N award(s) added to rack" counter ----------------------------------- */
.new-rack-modal .rack-count,
.new-rack-modal .added-count,
.new-rack-modal .award-count {
  color: var(--rm-teal) !important;
  font-size: 12px;
  letter-spacing: 0.03em;
  text-align: center;
}

/* --- Rack preview canvas: hide any stray empty input box ------------------ */
.new-rack-modal .selectedRibbon-container input,
.new-rack-modal .screenshot-div input {
  border: none !important;
  background: transparent !important;
  box-shadow: none !important;
}

/* --- Terms & email row (digital): tidy alignment -------------------------- */
.new-rack-modal #emailModal .form-group {
  flex-direction: column;
  align-items: stretch;
  gap: 12px;
  max-width: 460px;
  margin: 0 auto 16px;
}
.new-rack-modal #emailModal .rm-tc-row {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  flex-wrap: wrap;
  font-size: 13px;
}
.new-rack-modal #emailModal .rm-tc-row input[type="checkbox"] { width: 16px; height: 16px; }
/* physical T&C row in the size-selector modal (parity with digital) */
.new-rack-modal #selectRibbonBar .rm-tc-row {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  flex-wrap: wrap;
  font-size: 13px;
  margin: 10px 0 2px;
}
.new-rack-modal #selectRibbonBar .rm-tc-row input[type="checkbox"] { width: 16px; height: 16px; }
.new-rack-modal a.rm-terms-link {
  color: var(--rm-teal);
  text-decoration: underline;
  cursor: pointer;
  background: none !important;
  border: none !important;
  padding: 0 !important;
  font-size: 13px;
  text-transform: none;
  letter-spacing: 0;
}

/* --- Digital Terms & Conditions modal ------------------------------------ */
.rm-terms-modal {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--rm-font-body);
}
.rm-terms-backdrop { position: absolute; inset: 0; background: rgba(15,30,60,0.55); }
.rm-terms-dialog {
  position: relative;
  background: var(--rm-off-white);
  border-radius: var(--rm-radius-lg);
  max-width: 560px;
  width: calc(100% - 32px);
  max-height: 86vh;
  overflow: auto;
  padding: 28px 28px 22px;
  box-shadow: 0 24px 60px rgba(15,30,60,0.35);
}
.rm-terms-dialog h5 {
  font-family: var(--rm-font-display);
  color: var(--rm-navy);
  font-size: 22px;
  text-align: center;
  margin: 0 0 14px;
}
.rm-terms-body { font-size: 13.5px; color: var(--rm-charcoal); line-height: 1.55; }
.rm-terms-body ul { padding-left: 18px; margin: 10px 0; }
.rm-terms-body li { margin-bottom: 8px; }
.rm-terms-note { color: var(--rm-muted); font-style: italic; font-size: 12.5px; }
.rm-terms-actions { display: flex; gap: 12px; justify-content: center; margin-top: 18px; flex-wrap: wrap; }
.rm-terms-actions .global-btn {
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 500; letter-spacing: 0.07em; text-transform: uppercase;
  padding: 11px 26px; border-radius: var(--rm-radius); text-decoration: none; cursor: pointer;
}
.rm-terms-actions .add-to-btn { background: var(--rm-navy); border: 1px solid var(--rm-navy); color: #fff; }
.rm-terms-actions .cancel { background: transparent; border: 1px solid var(--rm-border-mid); color: var(--rm-navy); }
.rm-terms-close {
  position: absolute; top: 10px; right: 14px;
  background: none; border: none; font-size: 26px; line-height: 1;
  color: var(--rm-muted); cursor: pointer;
}
.rm-terms-close:hover { color: var(--rm-navy); }


/* ---- Ribbon aspect ratio (added 2 Sep 2026) -------------------------------
 * style.css forces `width:100%; height:30px; object-fit:fill` on ribbon images,
 * which discards aspect ratio: 3:1 source art was rendering at 3.8:1, stretched
 * ~27% horizontally in the preview and in the delivered artwork.
 *
 * height:auto lets each image use its own intrinsic ratio - correct for full
 * size and miniature ribbons alike, without hard-coding a number.
 *
 * The doubled class raises specificity above the legacy sheet without
 * !important. This makes the bar ~27% taller on screen: that is the fix, the
 * bar was previously squashed.
 * ------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .selectedRibbon-container img,
.modal-main.modal-main .selectedRibbon-container img {
  width: 100%;
  height: auto;
  object-fit: contain;
}


/* ===========================================================================
 * BRAND LOCKUP PASS - 2 Sep 2026
 * Measured against the live storefront rather than eyeballed. Buttons, palette
 * and card language already matched; these four did not. Append-only, and
 * every selector wins on specificity arithmetic rather than by escalating the
 * !important war with the legacy sheet.
 * ======================================================================== */

/* --- Display face --------------------------------------------------------
 * style.css `.modal-dialog.modal-xl h5` (0,2,1) was beating the June rule
 * (0,2,0). Doubling the root class makes it (0,3,0)/(0,3,1) and Cormorant
 * wins with no !important. */
.modal-main.modal-main .modal-main-head,
.new-rack-modal.new-rack-modal .modal-main-head,
.new-rack-modal.new-rack-modal .modal-inner > h5,
.new-rack-modal.new-rack-modal .modal-body > h5,
.new-rack-modal.new-rack-modal .modal-header h5,
.new-rack-modal.new-rack-modal h2,
.new-rack-modal.new-rack-modal h3,
.new-rack-modal.new-rack-modal h4 {
  font-family: var(--rm-font-display);
  font-weight: 600;
  color: var(--rm-navy);
  letter-spacing: 0;
}

/* --- Reading face --------------------------------------------------------
 * Jost is the storefront's UI face; Karla is its reading face. Declared on
 * containers so buttons keep Jost via their own rules. */
.rm-builder,
.modal-main,
.new-rack-modal,
.rm-terms-modal {
  --rm-font-text: 'Karla', 'Jost', system-ui, -apple-system, sans-serif;
  --rm-ink: #333333;
}

.modal-main.modal-main,
.new-rack-modal.new-rack-modal .modal-content,
.rm-terms-modal.rm-terms-modal {
  font-family: var(--rm-font-text);
  color: var(--rm-ink);
  font-size: 14px;
}

.new-rack-modal.new-rack-modal p,
.new-rack-modal.new-rack-modal label,
.new-rack-modal.new-rack-modal li,
.new-rack-modal.new-rack-modal .description_text,
.modal-main.modal-main p {
  font-family: var(--rm-font-text);
  color: var(--rm-ink);
}

/* --- Ground --------------------------------------------------------------
 * Storefront body is #f2efe8. Off-white is kept for raised surfaces so there
 * is still a visible step between the ground and the cards sitting on it. */
.modal-main.modal-main {
  background: var(--rm-paper);
}
.new-rack-modal.new-rack-modal .modal-content {
  background: var(--rm-off-white);
}

/* --- Branch tiles are cards, not buttons ---------------------------------
 * The blanket `.new-rack-modal a.global-btn { background: gold !important }`
 * above swallows these. Restored at matching weight, scoped tightly to the
 * branch picker so the real button tiers are untouched. */
.new-rack-modal.new-rack-modal #branch-container .branch-item a.global-btn,
.new-rack-modal.new-rack-modal #branch-container .branch-item .global-btn {
  background: var(--rm-white) !important;
  border: 1px solid var(--rm-border-soft) !important;
  color: var(--rm-navy) !important;
  /* width and alignment restated because the gold blanket rule may also be
   * setting them; the rest matches June's original card treatment verbatim. */
  width: 100%;
  justify-content: center;
  text-transform: none;
  font-family: var(--rm-font-text);
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.02em;
}
.new-rack-modal.new-rack-modal #branch-container .branch-item a.global-btn:hover,
.new-rack-modal.new-rack-modal #branch-container .branch-item .global-btn:hover {
  background: var(--rm-gold-pale) !important;
  border-color: var(--rm-gold) !important;
  color: var(--rm-navy) !important;
}


/* ===========================================================================
 * DISPLAY FACE - !important, 2 Sep 2026
 * style.css declares `.modal-dialog.modal-xl h1..h6 { font-family: Merriweather,
 * serif !important }`. !important is not beaten by specificity, so the doubled
 * class alone could not win - it took our colour and weight but not the face.
 *
 * Enumerating every !important declaration matching a modal heading returns
 * exactly one from the legacy sheet: this font-family. So this is the whole
 * debt, not an opening move. Doubled class retained so this also outranks any
 * later !important written at lower specificity.
 * ======================================================================== */
.modal-main.modal-main .modal-main-head,
.new-rack-modal.new-rack-modal .modal-main-head,
.new-rack-modal.new-rack-modal .modal-inner > h5,
.new-rack-modal.new-rack-modal .modal-body > h5,
.new-rack-modal.new-rack-modal .modal-header h5,
.new-rack-modal.new-rack-modal h1,
.new-rack-modal.new-rack-modal h2,
.new-rack-modal.new-rack-modal h3,
.new-rack-modal.new-rack-modal h4 {
  font-family: var(--rm-font-display) !important;
  font-weight: 600 !important;
}


/* ===========================================================================
 * RM LOGO LOCKUP - 2 Sep 2026
 * Replaces the PNG hotlinked from the retiring Neto host with the storefront's
 * own lockup: inline SVG mark plus type. Nothing to request, so nothing to
 * 404. Navy rather than white because this sits on paper, not the navy bar,
 * and scaled up because it is a masthead rather than a nav item.
 * ======================================================================== */
.rm-logo {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  text-decoration: none;
  margin: 0 auto 6px;
}
.rm-logo__mark { flex: 0 0 auto; display: block; }
.rm-logo__text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  font-family: var(--rm-font-display);
  font-size: 26px;
  font-weight: 600;
  line-height: 1.08;
  letter-spacing: 0.02em;
  color: var(--rm-navy);
  white-space: nowrap;
}
.rm-logo__sub {
  margin-top: 5px;
  font-family: 'Jost', system-ui, -apple-system, sans-serif;
  font-size: 10px;
  font-weight: 400;
  line-height: 1;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--rm-gold);
}
@media (max-width: 420px) {
  .rm-logo { gap: 10px; }
  .rm-logo__mark { width: 36px; height: 45px; }
  .rm-logo__text { font-size: 20px; }
  .rm-logo__sub { font-size: 9px; letter-spacing: 0.12em; }
}

/* ==== RM THEME PASS 2026-09-07 : START ==== */
/* --------------------------------------------------------------------------
   1. ONE GREEN, NOT TWO
   style.css paints selects with --Primary-Light (#157456) at (0,2,1). The size
   selector is the most prominent control on the page and it was the only solid
   green thing in a navy-and-gold interface. Restyled as a quiet control: paper
   ground, navy text, gold chevron, gold focus ring.
   -------------------------------------------------------------------------- */
.modal-main select.form-select,
.new-rack-modal select.form-select,
.selct-ribbon-button select.form-select,
.procut-optionals select.form-select {
  background-color: var(--rm-white);
  color: var(--rm-navy);
  border: 1px solid var(--rm-border-mid);
  border-radius: var(--rm-radius);
  font-family: var(--rm-font-body);
  font-weight: 500;
  font-size: 15px;
  letter-spacing: 0.01em;
  padding: 11px 40px 11px 14px;
  box-shadow: none;
  -webkit-appearance: none;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23b8963e' stroke-width='2' d='M2 5.5l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 14px center;
  background-size: 12px 12px;
  transition: border-color var(--rm-trans), box-shadow var(--rm-trans);
}

.modal-main select.form-select:hover,
.new-rack-modal select.form-select:hover,
.selct-ribbon-button select.form-select:hover {
  border-color: var(--rm-gold);
}

.modal-main select.form-select:focus,
.new-rack-modal select.form-select:focus,
.selct-ribbon-button select.form-select:focus {
  border-color: var(--rm-gold);
  box-shadow: 0 0 0 3px rgba(184, 150, 62, 0.18);
  outline: none;
}

/* The placeholder option should read as a prompt, not as a value. */
.modal-main select.form-select option[value=""],
.new-rack-modal select.form-select option[value=""] {
  color: var(--rm-muted);
}

/* --------------------------------------------------------------------------
   2. BUTTON RADIUS
   Beats style.css .modal-main button.btn.btn-primary (0,3,1) - the rule that
   has been squaring every primary button off despite --rm-radius saying 4px.
   -------------------------------------------------------------------------- */
.modal-main button.btn.btn-primary.rm-btn,
.modal-main a.btn.btn-primary.rm-btn,
.new-rack-modal button.btn.btn-primary.rm-btn,
.modal-main button.btn.btn-primary.global-btn,
.new-rack-modal button.btn.btn-primary.global-btn {
  border-radius: var(--rm-radius);
}

/* --------------------------------------------------------------------------
   3. INK
   style.css sets body colour to #1a1630, a purple-black. Modals are portaled
   to body level and inherit it, so it was most of the text on the page.
   Scoped to the builder rather than reset globally - the admin theme shares
   this stylesheet's host page and should keep its own.
   -------------------------------------------------------------------------- */
.rm-builder,
.modal-main,
.new-rack-modal,
.modal-main .modal-content,
.new-rack-modal .modal-content {
  color: var(--rm-ink);
}

/* --------------------------------------------------------------------------
   4. ONE CREAM, ONE SET OF BORDERS
   #fffcf2 on modal bodies against #f7f5f0 on modal content is a 1% difference
   - too close to read as intentional, far enough to look like a bug. And four
   different greys were doing the job of --rm-border-soft.
   -------------------------------------------------------------------------- */
.modal-main .modal-body,
.new-rack-modal .modal-body {
  background: var(--rm-off-white);
}

.modal-main .table,
.new-rack-modal .table,
.modal-main .table > :not(caption) > * > *,
.new-rack-modal .table > :not(caption) > * > * {
  border-color: var(--rm-border-soft);
}

.modal-main .rebon-item-single,
.new-rack-modal .rebon-item-single,
.modal-main .checkout-subtotal-box,
.new-rack-modal .checkout-subtotal-box {
  border-color: var(--rm-border-soft);
}

/* --------------------------------------------------------------------------
   5. TABLE HEADERS
   #384b6e is an off-navy. There is a navy.
   -------------------------------------------------------------------------- */
.modal-main .table th,
.new-rack-modal .table th,
.modal-main th.sizeSelected,
.modal-main th.totalPrice {
  color: var(--rm-navy);
  font-family: var(--rm-font-body);
  font-weight: 600;
  letter-spacing: 0.02em;
}

/* --------------------------------------------------------------------------
   6. THE PREVIEW FRAME
   The panel was on .selectedRibbon-container. .description_text is its SIBLING,
   so the personalised wording rendered below the frame, visually detached from
   the artwork it is part of - the customer approved a layout that did not match
   what they received.
   Panel moves to the outer wrappers so it encloses artwork AND wording.
   Safe for rendering: html2canvas captures with backgroundColor:null and is now
   cropped to the artwork box, so this ground never reaches the file.
   -------------------------------------------------------------------------- */
.modal-main .screenshot-div,
.new-rack-modal .screenshot-div,
.modal-main .screenshot-div-select-size,
.new-rack-modal .screenshot-div-select-size {
  display: inline-block;
  background: var(--rm-paper);
  border: 1px solid var(--rm-border-soft);
  border-radius: var(--rm-radius-md);
  padding: 18px 22px;
  max-width: 100%;
}

.modal-main .screenshot-div .selectedRibbon-container,
.new-rack-modal .screenshot-div .selectedRibbon-container,
.modal-main .screenshot-div-select-size .selectedRibbon-container,
.new-rack-modal .screenshot-div-select-size .selectedRibbon-container {
  background: transparent;
  border: 0;
  padding: 0;
  border-radius: 0;
}

.modal-main .screenshot-div .description_text,
.new-rack-modal .screenshot-div .description_text,
.modal-main .screenshot-div-select-size .description_text,
.new-rack-modal .screenshot-div-select-size .description_text {
  margin: 10px 0 0;
  font-family: var(--rm-font-text);
  color: var(--rm-ink);
  text-align: center;
}

/* Empty wording should not reserve space and make the frame look broken. */
.modal-main .description_text:empty,
.new-rack-modal .description_text:empty {
  display: none;
}
/* --------------------------------------------------------------------------
   7. SECOND PASS - the stragglers a live audit found after the first
   Measured on the running page, not guessed:
     #1a1630  x45  body colour. The first pass scoped ink to .rm-builder and
                   the modals; everything else still inherited the purple-black
                   from style.css body{}. builder-rm.css is loaded ONLY by the
                   builder page, so setting body here cannot reach the admin
                   theme.
     #157456  x9   the rogue green again, on a device tile border and the
                   checkout cost figure - the first pass only caught selects.
     #dddddd #e3e4e9 #dedede  three more border greys.
     #e7e7e7 #212529  a stock Bootstrap secondary button.
     #6c75a3  select text in a blue-grey.
   -------------------------------------------------------------------------- */
body {
  color: var(--rm-ink);
}

.modal-main .award-select-device-itm,
.new-rack-modal .award-select-device-itm {
  border-color: var(--rm-border-mid);
}

.modal-main .award-select-device-itm.active,
.new-rack-modal .award-select-device-itm.active,
.modal-main .award-select-device-itm:hover,
.new-rack-modal .award-select-device-itm:hover {
  border-color: var(--rm-gold);
}

/* The price is the number people look for. Navy carries more weight than a
   green that belonged to the old palette. */
.modal-main .checkout_cost,
.new-rack-modal .checkout_cost,
.modal-main span.checkout_cost {
  color: var(--rm-navy);
  font-weight: 600;
}

.modal-main th,
.new-rack-modal th,
.modal-main .table th,
.modal-main input.form-control,
.new-rack-modal input.form-control,
.modal-main select,
.new-rack-modal select {
  border-color: var(--rm-border-soft);
}

.modal-main select,
.new-rack-modal select {
  color: var(--rm-ink);
}

/* Bootstrap's default grey secondary. Cancel should read as the quiet option,
   not as a different design system. */
.modal-main button.btn:not(.btn-primary):not(.rm-btn--primary),
.new-rack-modal button.btn:not(.btn-primary):not(.rm-btn--primary) {
  background: transparent;
  color: var(--rm-ink);
  border: 1px solid var(--rm-border-mid);
  border-radius: var(--rm-radius);
}

.modal-main button.btn:not(.btn-primary):not(.rm-btn--primary):hover,
.new-rack-modal button.btn:not(.btn-primary):not(.rm-btn--primary):hover {
  border-color: var(--rm-gold);
  color: var(--rm-navy);
  background: transparent;
}

/* --------------------------------------------------------------------------
   8. THE PREVIEW WATERMARK
   Measured live: the watermark is 64.4 x 34px, anchored bottom:5px right:5px
   with left:0 - so in a 23px-tall ribbon it computes to top:-15.875px and
   overflows upward, and being inset on one side only it sits 2.5px left of
   centre. It is pinned to a corner, not centred, which is why it reads as
   pushing the bar off-centre even though the bar itself measures dead centre.

   Fixed by insetting it to 0 on all four sides so it fills the ribbon exactly,
   and centring the text with flex. The -45deg rotation is kept - it now turns
   about the true centre rather than an offset origin.

   Preview only: stripForRender() hides .watermark-text before the capture, so
   none of this can reach a customer's file.
   -------------------------------------------------------------------------- */
.modal-main .image-container,
.new-rack-modal .image-container {
  position: relative;
}

.modal-main .image-container .watermark-text,
.new-rack-modal .image-container .watermark-text,
.modal-main .watermark-text,
.new-rack-modal .watermark-text {
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  width: auto;
  height: auto;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  transform-origin: center center;
  pointer-events: none;
  overflow: hidden;
}

/* --------------------------------------------------------------------------
   9. BRANCH TILE LABELS
   Measured live: .branch-item a.global-btn is display:inline-flex with
   justify-content:flex-start. text-align:center IS already set and does
   nothing, because the text becomes an anonymous flex item and flex layout
   ignores text-align for placement. That is why single-line labels sat left
   while the one that wraps onto two lines LOOKED centred.
   Centre the flex axis, and keep text-align for the wrapped lines themselves.
   -------------------------------------------------------------------------- */
.modal-main .branch-item a.global-btn,
.new-rack-modal .branch-item a.global-btn,
.branch-item a.global-btn {
  justify-content: center;
  text-align: center;
  width: 100%;
}

/* --------------------------------------------------------------------------
   10. THE LANDING PAGE
   Customers arrive here from the Services page on rogaloffmilitaria.com.au, so
   the join has to read as a page change rather than a different website. The
   old block was a stack of &nbsp; spacer containers with the intro split over
   three paragraphs - including a "please allow up to 15 seconds" warning above
   the fold, which apologised before anyone had clicked anything.

   Now: a slim navy bar carrying the lockup and a way back to the store, then
   one hero with a single obvious action, with the loading note demoted to
   below the button where it is actually relevant.
   -------------------------------------------------------------------------- */
.rm-builder .rm-top {
  background: var(--rm-navy);
  margin: -1.5rem 0 0;
  padding: 0 clamp(16px, 4vw, 40px);
}

.rm-builder .rm-top__inner {
  max-width: 1180px;
  margin: 0 auto;
  min-height: 76px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}

.rm-builder .rm-top__brand,
.rm-builder .rm-top__back {
  text-decoration: none;
}

/* The lockup is reused verbatim from the old block, so the mark is identical
   to the storefront's. On navy it needs its text inverted. */
.rm-builder .rm-top__brand .rm-logo__text {
  color: var(--rm-white);
}

.rm-builder .rm-top__brand .rm-logo__sub {
  color: var(--rm-gold);
}

.rm-builder .rm-top__back {
  color: var(--rm-gold);
  font-family: var(--rm-font-body);
  font-size: 13px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
  transition: color var(--rm-trans);
}

.rm-builder .rm-top__back:hover {
  color: var(--rm-gold-light);
  text-decoration: underline;
}

.rm-builder .rm-hero {
  text-align: center;
  padding: clamp(38px, 7vw, 72px) 16px clamp(26px, 4vw, 40px);
}

.rm-builder .rm-hero__eyebrow {
  font-family: var(--rm-font-body);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--rm-gold);
  margin: 0 0 12px;
}

.rm-builder .rm-hero__title {
  font-family: var(--rm-font-display);
  font-weight: 600;
  font-size: clamp(32px, 5.5vw, 52px);
  line-height: 1.1;
  color: var(--rm-navy);
  margin: 0 0 16px;
}

.rm-builder .rm-hero__lede {
  font-family: var(--rm-font-text);
  font-size: clamp(15px, 1.6vw, 17px);
  line-height: 1.65;
  color: var(--rm-ink);
  max-width: 620px;
  margin: 0 auto 30px;
}

.rm-builder .rm-hero__btn {
  font-size: 15px;
  letter-spacing: 0.1em;
  padding: 15px 40px;
}

/* Demoted from a bold warning above the fold to a quiet note under the action
   it actually describes. */
.rm-builder .rm-hero__note {
  font-family: var(--rm-font-text);
  font-size: 13px;
  line-height: 1.6;
  color: var(--rm-muted);
  max-width: 520px;
  margin: 22px auto 0;
}

.rm-builder .rm-strap {
  border-top: 1px solid var(--rm-border-soft);
  margin-top: clamp(28px, 5vw, 52px);
  padding: 26px 16px;
  text-align: center;
  font-family: var(--rm-font-display);
  font-size: clamp(17px, 2.2vw, 21px);
  color: var(--rm-navy-mid);
}

@media (max-width: 560px) {
  .rm-builder .rm-top__inner { justify-content: center; text-align: center; }
  .rm-builder .rm-top__back { font-size: 12px; }
}

/* ---- polish pass 3, 8 Sep 2026 ---- */
/* 1. The frame's ground. section.modal-main is paper; body was white, so any
      frame taller than the content showed a white slab under it. */
/* Literal, not var(--rm-paper): the tokens are scoped to the builder roots,
   so on body that variable is undefined and the whole declaration would
   compute to transparent - which is how the white slab survived the first
   attempt. #f2efe8 is the value --rm-paper holds. */
body { background: #f2efe8; }

/* 3. Centre the ribbon rows in the thumbnail.
      .selectedRibbon-container is a COLUMN flex container, so horizontal
      centring is align-items, not justify-content. Measured drift before this:
      22.67px left vs 27.33px right. */
.selectedRibbon-container {
  align-items: center;
}

/* ==== RM THEME PASS 2026-09-07 : END ==== */


/* ==== RM UI UPLIFT PASS 2026-09-08 : START ====
 * Typography sweep + the search row. Measured against the live markup in
 * custom-page-bc.blade.php and the nodes builder-core.js injects, not inferred.
 *
 * Capture-path note: every selector below sits OUTSIDE the html2canvas capture
 * root (.screenshot-div / .screenshot-div-select-size). The two that could fall
 * inside it - .err-msg and .description_text - are already set to display:none
 * by stripForRender() in builder-purchase.js before the canvas is taken. So no
 * declaration here can reach a print master.
 * ============================================================================ */

/* --------------------------------------------------------------------------
   11. h5 AND h6 WERE NEVER IN THE DISPLAY-FACE FIX
   The 2 Sep !important block enumerated .modal-main-head, `.modal-inner > h5`,
   `.modal-body > h5`, `.modal-header h5` and h1-h4. Every OTHER h5, and h6 in
   full, still matched style.css:25405
       .modal-dialog.modal-xl h1..h6 { font-family:"Merriweather",serif !important }
   and rendered in Merriweather. The headings that actually fall through:
     h5.ribbonName        x4  branch name, right-hand bar of four modals
     h5.ribbon_name       x1  chosen award, device screen
     h5.ribbon_title      xN  EVERY award tile label the picker renders
     h6                   x1  "Select Devices"
   The tile labels are the most-repeated text in the builder - nine per page
   across 1088 awards - so this was the single most visible type gap.

   (0,3,0) with !important beats the legacy (0,2,1) with !important. The bare
   descendant selector replaces the enumeration, so a heading added later is
   covered by default rather than falling back silently.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal h5,
.new-rack-modal.new-rack-modal h6 {
  font-family: var(--rm-font-display) !important;
  color: var(--rm-navy);
  font-weight: 600 !important;
}

/* --------------------------------------------------------------------------
   12. TILE LABELS ARE BODY COPY, NOT HEADINGS
   .ribbon_title is an h5 only because the original developer reached for one;
   it is a caption under a thumbnail. It must be exempt from rule 11 above.
   (0,4,0) beats the (0,3,0) blanket, and the !important is required only to
   clear the legacy Merriweather - the June rule had the right intent and lost
   purely on weight.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .award-item .ribbon_title,
.new-rack-modal.new-rack-modal .award-item h5.ribbon_title {
  font-family: var(--rm-font-text) !important;
  font-weight: 500 !important;
  font-size: 12.5px;
  line-height: 1.35;
  color: var(--rm-ink);
  letter-spacing: 0.01em;
}

/* --------------------------------------------------------------------------
   13. SIZES FOR THE HEADINGS RULE 11 JUST RECLAIMED
   Bootstrap's h5 is 1.25rem and h6 1rem; neither was chosen for these slots.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .select-awars-righttbar h5.ribbonName {
  font-size: 19px;
  line-height: 1.25;
  margin: 0 0 14px;
  letter-spacing: 0.01em;
}

.new-rack-modal.new-rack-modal .award-select-device-itm h5.ribbon_name {
  font-size: 16px;
  line-height: 1.3;
}

.new-rack-modal.new-rack-modal .selected-device-award-item h6 {
  font-size: 12px;
  font-family: var(--rm-font-body) !important;
  font-weight: 500 !important;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--rm-muted);
  margin: 0 0 10px;
}

/* The download warning in #imagePreviewModal is a bare <h1> already written in
   caps, so it inherited Bootstrap's 2.5rem inside a half-width column and
   shouted. It is a caution, not a masthead. */
.new-rack-modal.new-rack-modal #imagePreviewModal h1,
.new-rack-modal.new-rack-modal .select-awars-leftbar h1 {
  font-size: 15px !important;
  line-height: 1.4;
  letter-spacing: 0.08em;
  color: var(--rm-navy);
  margin: 22px 0 8px;
}

/* --------------------------------------------------------------------------
   14. THE RACK COUNTER WAS PAINTED AS AN ERROR
   The June sheet styled .rack-count / .added-count / .award-count. None of
   those three classes exists anywhere in the blade or in builder-core.js - the
   real node is `p.err-msg.totalawrdcount`, written by builder-core.js:124. So
   the rule never matched, and the counter kept style.css:25876
       .err-msg { color: var(--error) }
   which renders "3 award(s) added to rack" in the error red. A running total
   is a status line, not a fault.

   .err-msg is hidden by stripForRender() before capture, so this is preview-
   only by construction.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal p.err-msg.totalawrdcount,
.new-rack-modal.new-rack-modal .totalawrdcount {
  color: var(--rm-teal);
  font-family: var(--rm-font-body);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  text-align: center;
  margin: 0 0 14px;
}

/* --------------------------------------------------------------------------
   15. THE SEARCH ROW
   Same class-name miss as rule 14: the June sheet styled .search-bar,
   .modal-search and .search-icon. The markup is
       .awars-top-searchbar > .searchbar > input#keywrd + button.btn
   so none of it applied and the field kept the legacy treatment. Worse, the
   later generic rule
       .new-rack-modal button.btn:not(.btn-primary):not(.rm-btn--primary)  (0,4,1)
   caught the submit button and made it transparent with a grey border - an
   empty outlined box carrying only a FontAwesome glyph from
   style.css:25827 `.searchbar button.btn::after`.

   Search is the first thing a customer reaches for on a list of 1088 awards,
   so it should read as the primary control on the row. (0,5,1) clears both the
   legacy rule and the generic button rule without !important.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .awars-top-searchbar {
  gap: 16px;
  margin-bottom: 4px;
}

.new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar input.form-control {
  font-family: var(--rm-font-text);
  font-size: 14px;
  height: 44px;
  padding: 10px 52px 10px 14px;
  border: 1px solid var(--rm-border-mid);
  border-radius: var(--rm-radius);
  background: var(--rm-white);
  color: var(--rm-ink);
}

.new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar input.form-control:focus {
  border-color: var(--rm-gold);
  box-shadow: 0 0 0 3px rgba(184, 150, 62, 0.18);
}

.new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar input.form-control::placeholder {
  color: var(--rm-muted-light);
}

.new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar button.btn {
  width: 44px;
  height: 100%;          /* legacy sets height:100% against the field; measured
                            46px, so a fixed 44 left a 2px step down the side */
  padding: 0;
  background: var(--rm-navy);
  border: 1px solid var(--rm-navy);
  border-radius: 0 var(--rm-radius) var(--rm-radius) 0;
  color: var(--rm-white);
  transition: background var(--rm-trans), border-color var(--rm-trans);
}

.new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar button.btn:hover {
  background: var(--rm-navy-light);
  border-color: var(--rm-navy-light);
}

/* The glyph. style.css:25827 draws it as `font: ... FontAwesome` and \f002 -
   that is FontAwesome 4's family name, but the blade loads FA 6.5.1, which
   registers "Font Awesome 6 Free" instead. The family never resolves, so the
   button has been rendering with no icon and no label at all: a blank control.
   Retire the pseudo-element and carry the magnifier as an inline SVG, matching
   how the select's chevron is already drawn. No font dependency, nothing to
   404, and it survives the next FontAwesome version too. */
.new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar button.btn::after {
  content: none;
}

.new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar button.btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-4.2-4.2'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
  background-size: 17px 17px;
}

/* --------------------------------------------------------------------------
   16. TWO CHEVRONS ON THE CATEGORY SELECT
   The 7 Sep pass gave every .form-select a gold SVG chevron. style.css:25816
   also draws one as `.select-award::before` in var(--white) - which was legible
   while the control was solid green and became a white mark on a white field
   the moment the same pass repainted the ground. Two carets, one invisible.
   Keep the gold SVG, retire the legacy pseudo-element.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .select-award::before {
  display: none;
}

.new-rack-modal.new-rack-modal .select-award select.form-select {
  height: 44px;
  font-family: var(--rm-font-body);
}

/* --------------------------------------------------------------------------
   17. THE RESULT LINE AND THE EMPTY STATE
   #pagination-info and #no-results were never styled by either sheet, so they
   sat at inherited body size with no relationship to the grid above them.
   -------------------------------------------------------------------------- */
/* style.css sets `.modal-pagination { display:flex !important; justify-content:
   space-between }`, which put the count hard left and the pager hard right with
   a void between them. Stack instead: the count reads as a caption for the grid
   above, the pager centres under it. display:flex is !important so it stays;
   direction and alignment are (0,3,0) over (0,1,0) and need no escalation. */
.new-rack-modal.new-rack-modal .modal-pagination {
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
}

.new-rack-modal.new-rack-modal #pagination-info {
  font-family: var(--rm-font-body);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.04em;
  color: var(--rm-muted);
  text-align: center;
  margin: 0;
}

.new-rack-modal.new-rack-modal #no-results {
  font-family: var(--rm-font-text);
  font-size: 14px;
  color: var(--rm-muted);
  text-align: center;
  padding: 40px 16px;
  border: 1px dashed var(--rm-border-mid);
  border-radius: var(--rm-radius-md);
  margin-top: 8px;
}

/* --------------------------------------------------------------------------
   18. PAGINATION LINKS
   .modal-pagination a was styled in June, but builder-core.js writes
   `a.page-link` inside `ul.pagination`, so that rule never matched either. What
   the pager actually renders under is style.css:25988

       ul.pagination li.page-item a { background-color:#fffcf2 !important;
                                      color:#000 !important }

   - cream on cream, with the current page indistinguishable from the rest. A
   first pass at (0,5,0) without !important still lost, because specificity does
   not beat !important; measured, not assumed. Matched here on both counts:
   (0,5,0) with !important over (0,2,3) with !important. The two declarations
   that collide are the only ones carrying it. */
.new-rack-modal.new-rack-modal .modal-pagination ul.pagination {
  display: flex;
  gap: 6px;
  justify-content: center;
  flex-wrap: wrap;
  margin: 0;
  padding: 0;
  list-style: none;
}

.new-rack-modal.new-rack-modal .modal-pagination .page-item .page-link {
  min-width: 34px;
  height: 34px;
  padding: 0 8px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--rm-font-body);
  font-size: 12px;
  border: 1px solid var(--rm-border-soft);
  border-radius: var(--rm-radius);
  background-color: var(--rm-white) !important;
  color: var(--rm-navy) !important;
  text-decoration: none;
}

.new-rack-modal.new-rack-modal .modal-pagination .page-item .page-link:hover {
  border-color: var(--rm-gold);
  background-color: var(--rm-gold-pale) !important;
}

.new-rack-modal.new-rack-modal .modal-pagination .page-item.active .page-link {
  background-color: var(--rm-navy) !important;
  border-color: var(--rm-navy);
  color: var(--rm-white) !important;
}

.new-rack-modal.new-rack-modal .modal-pagination .page-item.disabled .page-link {
  opacity: 0.4;
  pointer-events: none;
}

/* ==== RM UI UPLIFT PASS 2026-09-08 : END ==== */


/* ==== RM CATEGORY FILTER 2026-09-08 : START ====
 * Styling for the two nodes RogaloffFilter builds at the foot of
 * builder-core.js: the category tab strip and the mixed-rack notice. Both sit
 * in .select-awars-leftbar / beside .totalawrdcount and .checkout-subtotal-box,
 * all outside the html2canvas roots, so neither can reach a print master.
 * ============================================================================ */

/* --------------------------------------------------------------------------
   19. THE CATEGORY TABS
   The reference puts the categories on the surface as a row of tabs rather than
   folded into a dropdown. The <select> is still the value every other function
   reads - the tabs set it - so it stays in the DOM and becomes the narrow-screen
   control instead of being deleted.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-cat-tabs {
  display: flex;
  gap: 6px;
  align-items: center;
  margin: 14px 0 2px;
  padding-bottom: 6px;
  overflow-x: auto;              /* a branch can carry many sub-categories */
  scrollbar-width: thin;
  border-bottom: 1px solid var(--rm-border-soft);
}

.new-rack-modal.new-rack-modal .rm-cat-tab {
  flex: 0 0 auto;
  appearance: none;
  background: transparent;
  border: 1px solid transparent;
  border-radius: var(--rm-radius) var(--rm-radius) 0 0;
  padding: 9px 16px;
  font-family: var(--rm-font-body);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--rm-muted);
  cursor: pointer;
  transition: color var(--rm-trans), background var(--rm-trans), box-shadow var(--rm-trans);
}

.new-rack-modal.new-rack-modal .rm-cat-tab:hover {
  color: var(--rm-navy);
  background: var(--rm-gold-pale);
}

/* The active tab is marked with the gold rule rather than a filled block, so a
   long strip does not turn into a row of competing buttons. */
.new-rack-modal.new-rack-modal .rm-cat-tab.is-active {
  color: var(--rm-navy);
  background: var(--rm-white);
  box-shadow: inset 0 -2px 0 0 var(--rm-gold);
}

.new-rack-modal.new-rack-modal .rm-cat-tab:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px var(--rm-gold-pale), inset 0 -2px 0 0 var(--rm-gold);
}

/* --------------------------------------------------------------------------
   20. ONE CONTROL AT A TIME
   With the tabs visible the dropdown is a duplicate, and the search field wants
   the whole row. Below 768px the tabs would wrap into a scrolling smear, so the
   pair swaps over: dropdown back, tabs away.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .awars-top-searchbar .select-award {
  display: none;
}

@media (max-width: 768px) {
  .new-rack-modal.new-rack-modal .awars-top-searchbar .select-award {
    display: inline-block;
    width: 100%;
  }
  .new-rack-modal.new-rack-modal .awars-top-searchbar {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
  }
  .new-rack-modal.new-rack-modal .rm-cat-tabs {
    display: none;
  }
}

/* --------------------------------------------------------------------------
   21. THE MIXED-RACK NOTICE
   Matt's ruling: a rack may span categories, and mixing is flagged rather than
   blocked. So this is a caution, not an error - gold on pale gold, the palette's
   "read this" rather than the palette's "you broke something". It appears under
   the running total on the picker and again above the checkout subtotal, which
   is the last point the order can still be changed.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-mixed-notice {
  font-family: var(--rm-font-text);
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--rm-navy);
  background: var(--rm-gold-pale);
  border: 1px solid var(--rm-gold);
  border-radius: var(--rm-radius);
  padding: 10px 14px;
  margin: 0 0 14px;
  text-align: left;
}

/* ==== RM CATEGORY FILTER 2026-09-08 : END ==== */


/* ==== RM BUILDER CHROME 2026-09-09 : START ====
 * Styling for the nodes RogaloffChrome builds: the green masthead, the strap
 * under the rack column, the footer rule, and the two paired action buttons.
 * All of it sits in .modal-content / .select-awars-righttbar, outside the
 * html2canvas roots, so none of it can reach a print master.
 *
 * Built to Matt's 9 Sep mockup, with the decoration pulled back toward the
 * reference artwork (ribbon-builder-preview-1320.webp): the wattle is ghosted
 * line art rather than a painted spray, because at 6% opacity it reads as
 * watermark rather than as a sticker on the page.
 * ============================================================================ */

/* --------------------------------------------------------------------------
   22. THE MASTHEAD
   Cream to the left carrying the lockup, deep green to the right carrying the
   category line - the same split the reference image uses. The green is cut
   with a soft diagonal so the two grounds meet on an angle rather than a hard
   vertical seam, which is what makes the reference read as printed stock.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-chrome-masthead {
  display: flex;
  align-items: stretch;
  justify-content: space-between;
  background: var(--rm-paper);
  border-bottom: 1px solid var(--rm-border-soft);
  min-height: 78px;
  overflow: hidden;
}

.new-rack-modal.new-rack-modal .rm-chrome-masthead__brand {
  display: flex;
  align-items: center;
  padding: 14px 20px 14px 30px;
  flex: 0 1 auto;
  min-width: 0;
}

.new-rack-modal.new-rack-modal .rm-chrome-masthead__band {
  position: relative;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  padding: 14px 34px 14px 72px;
  background: #12402f;                 /* the reference's deep green */
  color: var(--rm-gold-light);
  /* The diagonal. clip-path rather than a rotated pseudo-element so the shape
     is the element and nothing can overflow the modal's rounded corner. */
  clip-path: polygon(46px 0, 100% 0, 100% 100%, 0 100%);
}

.new-rack-modal.new-rack-modal .rm-chrome-masthead__eyebrow {
  display: block;
  font-family: var(--rm-font-body);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  line-height: 1.9;
  text-align: right;
  white-space: nowrap;
}

/* The gold rule under the second line, drawn rather than added to the markup. */
.new-rack-modal.new-rack-modal .rm-chrome-masthead__eyebrow em {
  display: block;
  font-style: normal;
  position: relative;
  padding-bottom: 9px;
}
.new-rack-modal.new-rack-modal .rm-chrome-masthead__eyebrow em::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 0;
  width: 38px;
  height: 1px;
  background: var(--rm-gold);
  transform: translateX(-50%);
}

/* --- the lockup itself ---------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-chrome-logo {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
}
.new-rack-modal.new-rack-modal .rm-chrome-logo__mark {
  flex: 0 0 auto;
  color: var(--rm-gold);
}
.new-rack-modal.new-rack-modal .rm-chrome-logo__text {
  display: flex;
  flex-direction: column;
  font-family: var(--rm-font-display);
  font-size: 21px;
  font-weight: 600;
  line-height: 1.05;
  letter-spacing: 0.02em;
  color: var(--rm-navy);
  white-space: nowrap;
}
.new-rack-modal.new-rack-modal .rm-chrome-logo__sub {
  margin-top: 5px;
  font-family: var(--rm-font-body);
  font-size: 9px;
  font-weight: 400;
  line-height: 1;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--rm-gold);
}

/* The masthead sits above the close button, which is absolutely positioned at
   the top of .modal-content. Push it clear of the green band. */
.new-rack-modal.new-rack-modal .rm-chrome .clear-rack-close-btn,
.new-rack-modal.new-rack-modal .rm-chrome .modal-btn-close {
  top: 96px;
  background: var(--rm-white);
  z-index: 6;
}

/* --------------------------------------------------------------------------
   23. THE STRAP
   Under the rack column: the motto between two hairlines, the wattle as a
   watermark, and the signature. The wattle is deliberately faint - it is
   ground, not an illustration, and anything darker competes with the ribbons
   two inches to its left, which are the only things on this screen that should
   hold colour.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-chrome-strap {
  position: relative;
  margin-top: 26px;
  padding-top: 20px;
  border-top: 1px solid var(--rm-border-soft);
  text-align: center;
}

.new-rack-modal.new-rack-modal .rm-chrome-strap__motto {
  font-family: var(--rm-font-body);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--rm-muted);
  margin: 0 0 4px;
}

.new-rack-modal.new-rack-modal .rm-chrome-strap__art {
  display: flex;
  justify-content: center;
  color: var(--rm-navy);
  opacity: 0.10;
  margin: 6px 0 -14px;
  pointer-events: none;
}

.new-rack-modal.new-rack-modal .rm-wattle {
  width: 172px;
  height: auto;
  max-width: 70%;
}

.new-rack-modal.new-rack-modal .rm-chrome-strap__sig {
  position: relative;
  font-family: var(--rm-font-display);
  font-style: italic;
  font-size: 19px;
  font-weight: 500;
  color: var(--rm-gold);
  margin: 0;
}

/* --------------------------------------------------------------------------
   24. THE TWO ACTIONS
   Download and Order sit as a matched pair - navy then gold, same height, icon
   then label - so they read as one decision with two answers rather than as
   two unrelated buttons. The printer clip-art is gone; see decalIcon().
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal a.global-btn.rm-chrome-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  width: 100%;
  min-height: 48px;
  padding: 13px 22px;
  font-size: 12px;
  letter-spacing: 0.09em;
  line-height: 1.2;
}

.new-rack-modal.new-rack-modal a.global-btn.rm-chrome-btn .rm-chrome-btn__icon {
  width: 18px;
  height: 18px;
  flex: 0 0 auto;
}

/* The legacy printer PNG, if any markup still carries one. */
.new-rack-modal.new-rack-modal a.global-btn.rm-chrome-btn img {
  display: none;
}

/* --------------------------------------------------------------------------
   25. THE FOOTER RULE
   Three words and a hairline. It closes the panel so the modal does not simply
   stop, which is what made the old one feel like a dialog rather than a page.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-chrome-footer {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 26px;
  margin: 26px -36px -28px;
  padding: 14px 36px 16px;
  border-top: 1px solid var(--rm-border-soft);
  background: var(--rm-paper);
  font-family: var(--rm-font-body);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--rm-muted-light);
}

/* --------------------------------------------------------------------------
   26. NARROW SCREENS
   The diagonal band and the lockup sub-line are the first things to go: at
   phone width the masthead has to be a name and a category, nothing more.
   -------------------------------------------------------------------------- */
@media (max-width: 768px) {
  .new-rack-modal.new-rack-modal .rm-chrome-masthead { min-height: 62px; }
  .new-rack-modal.new-rack-modal .rm-chrome-masthead__brand { padding: 10px 12px 10px 16px; }
  .new-rack-modal.new-rack-modal .rm-chrome-masthead__band {
    padding: 10px 16px 10px 34px;
    clip-path: polygon(22px 0, 100% 0, 100% 100%, 0 100%);
  }
  .new-rack-modal.new-rack-modal .rm-chrome-masthead__eyebrow { font-size: 8.5px; letter-spacing: 0.14em; }
  .new-rack-modal.new-rack-modal .rm-chrome-logo__text { font-size: 16px; }
  .new-rack-modal.new-rack-modal .rm-chrome-logo__sub { display: none; }
  .new-rack-modal.new-rack-modal .rm-chrome .clear-rack-close-btn,
  .new-rack-modal.new-rack-modal .rm-chrome .modal-btn-close { top: 74px; }
  .new-rack-modal.new-rack-modal .rm-chrome-footer { margin: 22px -18px -20px; padding: 12px 18px 14px; gap: 16px; }
}

@media (max-width: 520px) {
  .new-rack-modal.new-rack-modal .rm-chrome-masthead__eyebrow em { display: none; }
}

/* ==== RM BUILDER CHROME 2026-09-09 : END ==== */


/* ==== RM CHROME PASS 2 2026-09-09 : START ====
 * Second pass against the mockup. The first got the structure right and the
 * feel wrong, and the difference was almost all scale, softness and warmth:
 * the mockup is a warm cream page with one large rounded panel floating on it,
 * generous padding, soft shadows and bigger type. The first pass was a flat
 * grey-cream sheet with tight, square controls.
 *
 * Still display-only, still outside the html2canvas roots. The one rule that
 * touches a ribbon image is scoped to `.award-item img` - the picker tiles,
 * which the capture never sees. `.selectedRibbon-container img` is deliberately
 * NOT touched: that IS the captured artwork.
 * ============================================================================ */

/* --------------------------------------------------------------------------
   27. WARM GROUND, AND THE PANEL AS A CARD
   #f7f5f0 is a cool paper; the mockup's is warmer and lighter, and the panel
   sits ON it rather than filling it. Insetting the modal body and rounding it
   is what turns a dialog into a printed page.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal {
  --rm-cream:      #faf7f0;
  --rm-cream-deep: #f3ede1;
  --rm-card:       #fffdf8;
}

.new-rack-modal.new-rack-modal .modal-content {
  background: var(--rm-cream);
  border-radius: 14px;
  box-shadow: 0 30px 70px rgba(15, 30, 60, 0.26);
}

.new-rack-modal.new-rack-modal .modal-body {
  background: var(--rm-cream);
}

.new-rack-modal.new-rack-modal .modal-inner {
  padding: 30px 34px 26px;
}

/* The working area becomes a card floating on the cream. */
.new-rack-modal.new-rack-modal #newRackSecond .select-awards-main,
.new-rack-modal.new-rack-modal .select-awards-main {
  background: var(--rm-card);
  border: 1px solid rgba(44, 44, 46, 0.07);
  border-radius: 12px;
  box-shadow: 0 2px 10px rgba(15, 30, 60, 0.04);
  padding: 26px 28px 30px;
  margin-top: 18px;
}

/* --------------------------------------------------------------------------
   28. THE PAGE TITLE
   The mockup's "Select Ribbons" is a statement, not a label - large, left, with
   a short gold rule under it. The centred 24px version read as a dialog title.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .modal-inner > .ribbon-div,
.new-rack-modal.new-rack-modal .ribbon-div {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  flex-wrap: wrap;
}

.new-rack-modal.new-rack-modal .ribbon-div .modal-main-head,
.new-rack-modal.new-rack-modal .ribbon-div h5.modal-main-head.dwn-brd {
  text-align: left !important;
  font-size: 34px;
  line-height: 1.1;
  margin: 2px 0 0;
  padding-bottom: 12px;
  border-bottom: 2px solid var(--rm-gold);
  border-bottom-width: 2px;
  display: inline-block;
  width: auto;
}

/* --------------------------------------------------------------------------
   29. THE SEARCH FIELD
   Taller, rounder, with the magnifier inside the field as well as on the
   button. The button becomes its own rounded square rather than a tab welded
   to the field's right edge.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
}

.new-rack-modal.new-rack-modal .rm-chrome-search__icon {
  position: absolute;
  left: 18px;
  top: 50%;
  transform: translateY(-50%);
  width: 19px;
  height: 19px;
  color: var(--rm-gold);
  pointer-events: none;
  z-index: 2;
}
.new-rack-modal.new-rack-modal .rm-chrome-search__icon svg { width: 100%; height: 100%; display: block; }

.new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar input.form-control {
  height: 54px;
  flex: 1 1 auto;
  padding: 12px 18px 12px 48px;
  border-radius: 9px;
  border: 1px solid rgba(44, 44, 46, 0.12);
  background: var(--rm-white);
  box-shadow: 0 1px 3px rgba(15, 30, 60, 0.05);
  font-size: 15px;
}

.new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar button.btn {
  position: static;
  width: 54px;
  height: 54px;
  flex: 0 0 54px;
  border-radius: 9px;
  background-size: 20px 20px;
  box-shadow: 0 2px 6px rgba(15, 30, 60, 0.16);
}

/* --------------------------------------------------------------------------
   30. THE TABS
   Card-tabs sitting on the rule, the way the mockup draws them: the active one
   lifts onto the card ground with a gold underline, the rest stay quiet.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-cat-tabs {
  gap: 4px;
  margin: 20px 0 4px;
  padding-bottom: 0;
  border-bottom: 1px solid rgba(44, 44, 46, 0.10);
}

.new-rack-modal.new-rack-modal .rm-cat-tab {
  padding: 13px 20px;
  font-size: 11.5px;
  letter-spacing: 0.1em;
  border-radius: 8px 8px 0 0;
  margin-bottom: -1px;
}

.new-rack-modal.new-rack-modal .rm-cat-tab.is-active {
  background: var(--rm-card);
  border: 1px solid rgba(44, 44, 46, 0.10);
  border-bottom-color: transparent;
  box-shadow: inset 0 -3px 0 0 var(--rm-gold);
}

/* --------------------------------------------------------------------------
   31. THE AWARD TILES
   Bigger, softer, and the ribbon given rounded corners and a shadow so it reads
   as an object rather than a swatch. Scoped to `.award-item img` ONLY - these
   are picker thumbnails and the capture never sees them. The rack preview's
   images are untouched, because those are the artwork the customer buys.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .award-item {
  background: var(--rm-card);
  border: 1px solid rgba(44, 44, 46, 0.08);
  border-radius: 11px;
  min-height: 172px;
  padding: 20px 16px 18px;
  gap: 14px;
  box-shadow: 0 1px 3px rgba(15, 30, 60, 0.05);
}

.new-rack-modal.new-rack-modal .award-item:hover {
  border-color: var(--rm-gold);
  box-shadow: 0 10px 26px rgba(15, 30, 60, 0.11);
}

.new-rack-modal.new-rack-modal .award-item img {
  max-height: 52px;
  width: auto;
  max-width: 88%;
  border-radius: 3px;
  box-shadow: 0 2px 5px rgba(15, 30, 60, 0.20);
}

.new-rack-modal.new-rack-modal .award-item .ribbon_title {
  font-size: 14px !important;
  line-height: 1.35;
  color: var(--rm-navy);
}

/* Selected: a green check badge, as drawn. ::after rather than markup, because
   builder-core.js rewrites this grid on every page and filter change - injected
   nodes would not survive it. */
.new-rack-modal.new-rack-modal .award-item.active {
  position: relative;
  border-color: var(--rm-teal);
  box-shadow: 0 0 0 2px var(--rm-teal) inset, 0 8px 22px rgba(15, 30, 60, 0.10);
}

.new-rack-modal.new-rack-modal .award-item.active::after {
  content: "";
  position: absolute;
  top: -11px;
  right: -11px;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: var(--rm-teal) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center / 16px 16px no-repeat;
  box-shadow: 0 2px 8px rgba(15, 30, 60, 0.22);
}

/* --------------------------------------------------------------------------
   32. THE RACK COLUMN
   The preview gets a real panel - large, cream, inset - instead of a small grey
   box, and the two actions get height and softness to match.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .select-awars-righttbar h5.ribbonName {
  font-size: 22px;
  line-height: 1.25;
  margin: 0 0 12px;
}

/* CAREFUL. .screenshot-div IS the html2canvas capture root.
 * stripForRender() neutralises exactly five inline properties on it before the
 * canvas is taken - background, padding, border, border-radius, box-shadow - so
 * those five are safe to set here and are provably absent from the print
 * master. Nothing else is. `display`, `width` and `min-height` change the size
 * of the captured region, which is how you get a print master with dead space
 * baked into it, so they go on the PARENT instead. A first cut had all eight on
 * the root; the capture-path check caught it. */
.new-rack-modal.new-rack-modal .select-awars-righttbar .ribbons-items .ribbon-item {
  display: block;
  width: 100%;
  min-height: 118px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.new-rack-modal.new-rack-modal .select-awars-righttbar .screenshot-div,
.new-rack-modal.new-rack-modal .select-awars-righttbar .screenshot-div-select-size {
  background: var(--rm-cream-deep);
  border: 1px solid rgba(44, 44, 46, 0.08);
  border-radius: 11px;
  padding: 30px 24px;
  box-shadow: inset 0 1px 4px rgba(15, 30, 60, 0.05);
}

.new-rack-modal.new-rack-modal a.global-btn.rm-chrome-btn {
  min-height: 54px;
  border-radius: 9px;
  font-size: 12.5px;
  letter-spacing: 0.1em;
  box-shadow: 0 2px 8px rgba(15, 30, 60, 0.14);
}

.new-rack-modal.new-rack-modal a.global-btn.rm-chrome-btn .rm-chrome-btn__icon {
  width: 19px;
  height: 19px;
}

/* The rack list rows: white cards with the thumbnail, the name, and the bin. */
.new-rack-modal.new-rack-modal .rebon-item-single {
  background: var(--rm-card);
  border: 1px solid rgba(44, 44, 46, 0.08);
  border-radius: 9px;
  padding: 10px 14px;
  margin-top: 12px;
  box-shadow: 0 1px 3px rgba(15, 30, 60, 0.04);
}

/* --------------------------------------------------------------------------
   33. THE STRAP, PROPERLY
   Two faults in pass 1, both Matt's read: the wattle was a hairline at 10% and
   vanished, and "Always Remembered" was Cormorant italic where the mockup has a
   signature. Parisienne is loaded by RogaloffChrome.loadScriptFace().
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-chrome-strap {
  margin-top: 30px;
  padding-top: 22px;
  min-height: 210px;
}

.new-rack-modal.new-rack-modal .rm-chrome-strap__motto {
  font-size: 11px;
  letter-spacing: 0.24em;
  color: var(--rm-muted);
  margin: 0 0 2px;
}

.new-rack-modal.new-rack-modal .rm-chrome-strap__art {
  opacity: 1;                       /* opacity now lives in the fills below */
  margin: 2px 0 0;
  justify-content: center;
}

.new-rack-modal.new-rack-modal .rm-wattle {
  width: 208px;
  max-width: 84%;
}

/* Sage foliage, pale gold blossom — the mockup's palette, held well below the
   ribbons in contrast so it stays ground rather than becoming a picture. */
.new-rack-modal.new-rack-modal .rm-wattle__leaf  { fill: #9aa88c; opacity: 0.50; }
.new-rack-modal.new-rack-modal .rm-wattle__bloom { fill: #d8c069; opacity: 0.62; }
.new-rack-modal.new-rack-modal .rm-wattle__stem  { color: #7f8e71; opacity: 0.55; }

.new-rack-modal.new-rack-modal .rm-chrome-strap__sig {
  font-family: 'Parisienne', 'Cormorant Garamond', cursive;
  font-style: normal;
  font-size: 26px;
  font-weight: 400;
  line-height: 1.1;
  color: #b9a05a;
  text-align: right;
  /* Sits below and right of the sprig rather than across it. The negative pull
     is small on purpose: at -46px it overlapped the blossom, and if Parisienne
     has not loaded yet the fallback is wider still, so the overlap has to be
     survivable in the worst case rather than tuned for the best one. */
  margin: -14px 10px 0 0;
  padding-left: 30%;
  position: relative;
  z-index: 1;
}

/* --------------------------------------------------------------------------
   34. THE FOOTER RULE
   Left-aligned with the rule running out to the right, as drawn, rather than
   three centred words.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-chrome-footer {
  justify-content: flex-start;
  gap: 22px;
  background: transparent;
  border-top: 1px solid rgba(44, 44, 46, 0.08);
  color: var(--rm-muted-light);
  font-size: 10.5px;
}

.new-rack-modal.new-rack-modal .rm-chrome-footer::after {
  content: "";
  flex: 1 1 auto;
  height: 1px;
  background: var(--rm-gold);
  opacity: 0.55;
  margin-left: 8px;
  max-width: 90px;
}

/* --------------------------------------------------------------------------
   35. NARROW SCREENS — pass 2 sizes
   -------------------------------------------------------------------------- */
@media (max-width: 768px) {
  .new-rack-modal.new-rack-modal .select-awards-main { padding: 18px 16px 20px; border-radius: 10px; }
  .new-rack-modal.new-rack-modal .ribbon-div .modal-main-head,
  .new-rack-modal.new-rack-modal .ribbon-div h5.modal-main-head.dwn-brd { font-size: 25px; }
  .new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar input.form-control { height: 48px; }
  .new-rack-modal.new-rack-modal .awars-top-searchbar .searchbar button.btn { width: 48px; height: 48px; flex-basis: 48px; }
  .new-rack-modal.new-rack-modal .rm-chrome-strap__sig { font-size: 27px; margin-top: -36px; }
  .new-rack-modal.new-rack-modal .modal-content { border-radius: 0; }
}

/* ==== RM CHROME PASS 2 2026-09-09 : END ==== */


/* ==== RM CHROME PASS 3 2026-09-09 : START ====
 * Four corrections from Matt's marked-up screenshot. Three are mine to fix
 * without new artwork; the fourth (the header scroll, the wattle and the
 * signature) needs raster source and is handled separately.
 * ============================================================================ */

/* --------------------------------------------------------------------------
   36. THE SCROLLBAR BESIDE "WORLD WAR II"
   `overflow-x: auto` on the tab strip was there so a branch with many
   sub-categories can still reach them all. With two tabs there is nothing to
   scroll, but the reserved gutter still painted a bar. Hide the bar, keep the
   scrolling - the strip stays reachable by trackpad, shift-wheel and keyboard.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-cat-tabs {
  scrollbar-width: none;             /* Firefox */
  -ms-overflow-style: none;          /* old Edge */
}
.new-rack-modal.new-rack-modal .rm-cat-tabs::-webkit-scrollbar {
  height: 0;
  display: none;
}

/* --------------------------------------------------------------------------
   37. THE TILES WERE SQUARE
   Matt: "square is amateur, condensed version looks more professional." He is
   right, and the reason is the subject: a ribbon is a wide, shallow object, so
   a tall tile puts the emphasis on empty ground either side of it. Drop the
   height, let the ribbon run wider, and the tile starts describing the thing it
   contains.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .award-item {
  min-height: 0;
  padding: 16px 14px 14px;
  gap: 11px;
}

.new-rack-modal.new-rack-modal .award-item img {
  max-height: 34px;
  width: 100%;
  max-width: 100%;
  object-fit: fill;
  border-radius: 2.5px;
  box-shadow: 0 1px 4px rgba(15, 30, 60, 0.22);
}

.new-rack-modal.new-rack-modal .award-item .ribbon_title {
  font-size: 13px !important;
  line-height: 1.3;
}

.new-rack-modal.new-rack-modal #awards-container > [class*="col-"] {
  margin-bottom: 14px;
}

/* --------------------------------------------------------------------------
   38. THE PREVIEW THUMBNAIL - a regression I introduced
   Pass 2 put `display:flex; align-items:center; justify-content:center` on
   .ribbon-item to centre the preview. That made .screenshot-div a flex item,
   and since it is `display:inline-block` sizing to its content - whose images
   are `width:100%` - the width collapsed and the panel rendered as the narrow
   vertical sliver in Matt's screenshot.
   Centre with text-align on the grandparent instead: no flex context, so the
   inline-block keeps sizing the way the capture path expects. The capture root
   itself still carries nothing but the five properties stripForRender()
   neutralises.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .select-awars-righttbar .ribbons-items .ribbon-item {
  display: block;
  min-height: 0;
  text-align: center;
}

.new-rack-modal.new-rack-modal .select-awars-righttbar .ribbons-items {
  text-align: center;
}

.new-rack-modal.new-rack-modal .select-awars-righttbar .screenshot-div,
.new-rack-modal.new-rack-modal .select-awars-righttbar .screenshot-div-select-size {
  padding: 26px 30px;
}

/* --------------------------------------------------------------------------
   39. THE STRAP, PENDING ARTWORK
   The mockup's composition is wattle on the LEFT with People / Service /
   Country stacked to its RIGHT, and the signature beneath - not a centred
   column. Laid out for that now so dropping the raster in is a straight swap.
   The line "Service shapes a brighter Australia" is gone: the stack already
   says it, and Matt asked for it out.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-chrome-strap {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-areas: "art motto" "sig sig";
  align-items: center;
  column-gap: 10px;
  min-height: 0;
  padding-top: 24px;
  text-align: left;
}

.new-rack-modal.new-rack-modal .rm-chrome-strap__art { grid-area: art; margin: 0; }
.new-rack-modal.new-rack-modal .rm-chrome-strap__sig { grid-area: sig; }

.new-rack-modal.new-rack-modal .rm-chrome-strap__motto {
  grid-area: motto;
  display: flex;
  flex-direction: column;
  gap: 9px;
  font-family: var(--rm-font-display);
  font-style: italic;
  font-size: 15px;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--rm-navy);
  text-align: center;
  margin: 0;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--rm-gold);
}

.new-rack-modal.new-rack-modal .rm-wattle { width: 100%; max-width: 200px; }

.new-rack-modal.new-rack-modal .rm-chrome-strap__sig {
  font-size: 25px;
  color: #8d8f7e;                    /* the mockup's signature is grey-green, not gold */
  text-align: right;
  margin: 4px 4px 0 0;
  padding-left: 0;
}

/* ==== RM CHROME PASS 3 2026-09-09 : END ==== */


/* ==== RM CHROME PASS 4 — MATT'S ARTWORK 2026-09-09 : START ====
 * Matt supplied the real artwork as transparent PNGs, which retires three
 * things: the SVG wattle (three attempts, none close - a botanical
 * illustration is not a shape), the SVG header diagonal, and Parisienne
 * standing in for the signature.
 *
 * Assets live in assets/images/ beside this sheet - the folder the app
 * already serves loading-gif.webp and modal-close.png from, so no new
 * directory has to exist on the box for this to work, referenced relatively so the
 * same file works on the app and in a local fixture:
 *   rm-header-scroll.webp   2400x761   green band + wattle spray + gold arc
 *   rm-wattle.webp           620x665   right-column sprig
 *   rm-signature.webp        900x258   "Always Remembered" + its gold rule
 *   rm-grain.png              96x96    tileable grain for the buttons
 *
 * All four are decoration on nodes outside the html2canvas roots.
 * ============================================================================ */

/* --------------------------------------------------------------------------
   40. THE HEADER SCROLL
   Measured off the asset rather than guessed: the green band occupies 26.5%
   to 66.2% of the artwork's height, so the artwork has to be ~2.5x the band
   height for the band to land at the right thickness, and the wattle then
   overflows above and below it exactly as the mockup draws. Right-aligned, so
   the band's own right edge is the masthead's right edge and no filler green
   is needed behind it however wide the modal gets.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-chrome-masthead {
  position: relative;
  min-height: 134px;
  background-color: var(--rm-paper);
  background-image: url("../images/rm-header-scroll.webp");
  background-repeat: no-repeat;
  background-position: right top -8px;
  background-size: auto 208px;
  border-bottom: 1px solid var(--rm-border-soft);
  overflow: hidden;             /* the spray is cropped by the modal's radius */
}

/* The band is artwork now, so the element only carries the type. Its width is
   set to the green portion so the text centres on green, not on the spray. */
.new-rack-modal.new-rack-modal .rm-chrome-masthead__band {
  background: none;
  clip-path: none;
  padding: 0 34px 0 0;
  min-width: 260px;
  align-items: center;
  /* the band sits 26.5%-66.2% down the 190px artwork => 50px..126px */
  /* band sits 26.5%-66.2% down a 208px artwork nudged up 8px => 47px..129px */
  margin: 47px 0 auto;
  height: 82px;
}

.new-rack-modal.new-rack-modal .rm-chrome-masthead__eyebrow {
  font-size: 11px;
  letter-spacing: 0.24em;
  line-height: 1.75;
  color: #e8d9a8;
}

.new-rack-modal.new-rack-modal .rm-chrome-masthead__eyebrow em::after {
  background: var(--rm-gold-light);
  opacity: 0.9;
}

.new-rack-modal.new-rack-modal .rm-chrome-masthead__brand {
  padding: 0 20px 0 30px;
  align-items: center;
}

.new-rack-modal.new-rack-modal .rm-chrome .clear-rack-close-btn,
.new-rack-modal.new-rack-modal .rm-chrome .modal-btn-close {
  top: 148px;
}

/* --------------------------------------------------------------------------
   41. THE RIGHT-COLUMN SPRIG AND THE SIGNATURE
   Both are now images on empty carriers. The signature keeps its own gold rule,
   so the CSS one under the motto is dropped - two rules that close is a wobble,
   not a rhythm.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-wattle {
  display: block;
  width: 100%;
  max-width: 186px;
  aspect-ratio: 620 / 665;
  background: url("../images/rm-wattle.webp") center / contain no-repeat;
}

.new-rack-modal.new-rack-modal .rm-chrome-strap__sig-art {
  display: block;
  width: 100%;
  max-width: 240px;
  aspect-ratio: 900 / 258;
  margin-left: auto;
  background: url("../images/rm-signature.webp") right center / contain no-repeat;
}

.new-rack-modal.new-rack-modal .rm-chrome-strap__sig {
  font-size: 0;                 /* the label is for screen readers only */
  margin: 2px 2px 0 0;
}

.new-rack-modal.new-rack-modal .rm-chrome-strap__motto {
  border-bottom: 0;             /* the signature artwork carries the rule */
  padding-bottom: 0;
  font-size: 14px;
  letter-spacing: 0.18em;
}

.new-rack-modal.new-rack-modal .rm-chrome-strap {
  column-gap: 4px;
  padding-top: 20px;
}

/* --------------------------------------------------------------------------
   42. THE BUTTONS
   Rebuilt from Matt's button artwork rather than pasted in as a bitmap: the
   ramps below are sampled straight off it (navy #132d4e->#041936, gold
   #bc973c->#7c5b13, with the bright top bevel each carries), and the grain is
   a 96px tile at low opacity. Doing it this way means the texture holds at any
   button width instead of being stretched from a fixed 1278x200 image, and it
   costs 12KB once rather than 200KB twice.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal a.global-btn.rm-chrome-btn {
  position: relative;
  border-radius: 7px;
  border: none !important;
  background-image:
      url("../images/rm-grain.png"),
      linear-gradient(180deg, #1b3557 0%, #12294a 18%, #0b2140 50%, #071d39 82%, #051834 100%) !important;
  background-repeat: repeat, no-repeat;
  background-size: 96px 96px, 100% 100%;
  background-blend-mode: overlay, normal;
  color: #f6f2e6 !important;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.38);
  box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.22),
      inset 0 -1px 0 rgba(255, 255, 255, 0.10),
      inset 0 0 0 1px rgba(0, 0, 0, 0.28),
      0 3px 8px rgba(15, 30, 60, 0.30);
}

.new-rack-modal.new-rack-modal a.global-btn.rm-chrome-btn:hover {
  background-image:
      url("../images/rm-grain.png"),
      linear-gradient(180deg, #23406a 0%, #16305a 18%, #0e274c 50%, #0a2244 82%, #071c3c 100%) !important;
}

/* the gold pair — "Order Your Decal" */
.new-rack-modal.new-rack-modal a.global-btn.rm-chrome-btn:not(.rm-chrome-btn--download) {
  background-image:
      url("../images/rm-grain.png"),
      linear-gradient(180deg, #bb9539 0%, #a9852c 18%, #957324 50%, #836316 82%, #6d5210 100%) !important;
  color: #fffdf6 !important;
  text-shadow: 0 1px 2px rgba(45, 30, 0, 0.62), 0 0 1px rgba(45, 30, 0, 0.5);
  box-shadow:
      inset 0 1px 0 rgba(255, 250, 220, 0.55),
      inset 0 -1px 0 rgba(255, 240, 190, 0.22),
      inset 0 0 0 1px rgba(80, 55, 5, 0.30),
      0 3px 8px rgba(80, 60, 10, 0.28);
}

.new-rack-modal.new-rack-modal a.global-btn.rm-chrome-btn:not(.rm-chrome-btn--download):hover {
  background-image:
      url("../images/rm-grain.png"),
      linear-gradient(180deg, #c9a349 0%, #b8933a 18%, #a37f2e 50%, #927023 82%, #7c5b13 100%) !important;
}

.new-rack-modal.new-rack-modal a.global-btn.rm-chrome-btn .rm-chrome-btn__icon {
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.35));
}

/* --------------------------------------------------------------------------
   43. NARROW SCREENS — artwork sizes
   -------------------------------------------------------------------------- */
@media (max-width: 768px) {
  .new-rack-modal.new-rack-modal .rm-chrome-masthead {
    min-height: 84px;
    background-size: auto 138px;
  }
  .new-rack-modal.new-rack-modal .rm-chrome-masthead__band {
    margin-top: 36px;
    height: 55px;
    min-width: 0;
    padding-right: 16px;
  }
  .new-rack-modal.new-rack-modal .rm-chrome-masthead__eyebrow { font-size: 8.5px; letter-spacing: 0.14em; }
  .new-rack-modal.new-rack-modal .rm-chrome .clear-rack-close-btn,
  .new-rack-modal.new-rack-modal .rm-chrome .modal-btn-close { top: 96px; }
  .new-rack-modal.new-rack-modal .rm-wattle { max-width: 132px; }
  .new-rack-modal.new-rack-modal .rm-chrome-strap__sig-art { max-width: 176px; }
}

/* ==== RM CHROME PASS 4 — MATT'S ARTWORK 2026-09-09 : END ==== */


/* ==== RM CHROME PASS 5 2026-09-09 : START ==== */

/* --------------------------------------------------------------------------
   44. THE PREVIEW MOUNT
   The mockup's preview is not a plain panel - it is a mount: the outer edge,
   then a hairline keyline set in from it, the way a framed piece is matted.
   Sampled off the mockup at #d5cab6.

   Drawn entirely with box-shadow, which matters: .screenshot-div IS the
   html2canvas capture root, and box-shadow is one of the five properties
   stripForRender() neutralises inline before the canvas is taken. So the mount
   is provably absent from the print master. A border-based inner rule, or a
   pseudo-element, would not be - ::before survives the strip.

   Two rings: 15px of panel colour, then 1px of keyline.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .select-awars-righttbar .screenshot-div,
.new-rack-modal.new-rack-modal .select-awars-righttbar .screenshot-div-select-size {
  padding: 34px 30px;
  box-shadow:
      inset 0 0 0 15px var(--rm-cream-deep),
      inset 0 0 0 16px #d5cab6,
      inset 0 1px 3px rgba(15, 30, 60, 0.05);
}

/* --------------------------------------------------------------------------
   45. CARD RIBBONS AT THEIR TRUE PROPORTION
   The masters are ~10630x3545, i.e. 3:1, and Matt asked for 3:1 in the cards.
   The previous rule pinned max-height to 34px and stretched width to 100%,
   which on a ~200px card gave nearly 6:1 - the ribbons read as too thin, which
   is what "a touch too narrow" was describing.

   aspect-ratio does the work, so the box matches the artwork and nothing is
   distorted. Doubled root class to clear style.css, which forces
   `width:100%; height:30px; object-fit:fill` on ribbon images - the same rule
   that squashed the preview bar by 27% back in September.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .award-item img,
.new-rack-modal.new-rack-modal .award-item > img {
  width: 100%;
  max-width: 100%;
  height: auto;
  max-height: none;
  aspect-ratio: 3 / 1;
  object-fit: fill;
  border-radius: 2.5px;
  box-shadow: 0 1px 4px rgba(15, 30, 60, 0.20);
}

.new-rack-modal.new-rack-modal .award-item {
  padding: 15px 15px 14px;
  gap: 12px;
}

/* The rack list rows carry thumbnails too - same proportion, smaller. */
.new-rack-modal.new-rack-modal .rebon-item-single img {
  aspect-ratio: 3 / 1;
  height: auto;
  object-fit: fill;
  border-radius: 2px;
}

/* ==== RM CHROME PASS 5 2026-09-09 : END ==== */


/* --------------------------------------------------------------------------
   46. THE BLANK WORDING LINE
   Pairs with RogaloffChrome.syncDescriptions(). `.description_text:empty` was
   written in June and has never matched anything, because the blade's
   placeholder is `&nbsp;` and a non-breaking space is content. The attribute is
   set by JS after normalising nbsp, so this is the rule that actually fires -
   and with the line collapsed the ribbon bar centres in the mount instead of
   riding above a reserved caption.

   Not !important: stripForRender() works on inline styles, and adding weight
   here would fight the restore rather than help it.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .description_text[data-rm-blank="true"],
.modal-main.modal-main .description_text[data-rm-blank="true"] {
  display: none;
}

/* --------------------------------------------------------------------------
   47. THE 20px THAT PUSHED THE BAR OFF CENTRE
   Measured, not guessed: with the wording line collapsed, the bar still sat
   55px from the mount's top and 35px from its bottom. The difference is
   `style.css .selectedRibbon-container { margin-top: 20px }`.

   The 7 Sep pass neutralised that container's background, border, padding and
   radius inside the mount so the panel could move to the wrapper - it just did
   not include the margin, and a margin is the one part of a box that survives
   `padding: 0`.

   Capture note: this is inside the capture root, so it does change the
   captured region - by REMOVING 20px of transparent space above the artwork.
   builder-purchase.js already trims that margin (see "Trim the transparent
   margin html2canvas leaves around the bar"), so the print master is unchanged;
   there is simply less for the trim to do, which is the safer direction.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .screenshot-div .selectedRibbon-container,
.new-rack-modal.new-rack-modal .screenshot-div-select-size .selectedRibbon-container,
.modal-main.modal-main .screenshot-div .selectedRibbon-container,
.modal-main.modal-main .screenshot-div-select-size .selectedRibbon-container {
  margin: 0;
}


/* --------------------------------------------------------------------------
   48. ONE TILE HEIGHT
   "Victoria Cross" is one line, "Distinguished Service Cross" is two, so the
   tiles came out different heights and the grid read as ragged. Reserve two
   lines for every label and centre a short one in that space, so the ribbon
   sits at the same height in every tile whatever the name does.

   2.6em is two lines at the 1.3 line-height set above - expressed in em so it
   tracks the font size rather than needing a second edit if that changes.

   A name long enough to take three lines would still make its tile taller, so
   the columns stretch and the row levels itself rather than one tile standing
   proud of its neighbours.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal #awards-container {
  align-items: stretch;
}

.new-rack-modal.new-rack-modal #awards-container > [class*="col-"] {
  display: flex;
}

.new-rack-modal.new-rack-modal .award-item {
  width: 100%;
  height: auto;
}

.new-rack-modal.new-rack-modal .award-item .ribbon_title,
.new-rack-modal.new-rack-modal .award-item h5.ribbon_title {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 2.6em;
  margin: 0;
  text-align: center;
}


/* --------------------------------------------------------------------------
   49. THE DELETE ICON
   It is a raster: builder-core.js:1123 points the button at assets/images/
   trash.png. Scaled to a small control on a retina screen it goes soft, which
   is what the blur is.

   Replaced with an inline SVG bin at the same stroke weight as the download and
   decal marks, so the three read as one set and none of them care about pixel
   density. Done in CSS rather than by swapping the node, because getRack()
   rebuilds this whole list on every add, delete and category change - an
   injected element would survive until the next click. Same reasoning as the
   selected-tile check badge.

   (0,4,1) clears style.css `.rebon-item-single button` at (0,1,1).
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rebon-item-single button {
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  width: 30px;
  height: 30px;
  padding: 0;
  border-radius: 6px;
  background-color: transparent;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23a33a3a' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6.6h16'/%3E%3Cpath d='M9.4 6.6V5.1a1.4 1.4 0 0 1 1.4-1.4h2.4a1.4 1.4 0 0 1 1.4 1.4v1.5'/%3E%3Cpath d='M6.4 6.6l.9 12.1a1.6 1.6 0 0 0 1.6 1.5h6.2a1.6 1.6 0 0 0 1.6-1.5l.9-12.1'/%3E%3Cpath d='M10.4 10.4v6M13.6 10.4v6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
  background-size: 18px 18px;
  transition: background-color var(--rm-trans);
}

.new-rack-modal.new-rack-modal .rebon-item-single button:hover {
  background-color: rgba(163, 58, 58, 0.10);
}

/* The raster it replaces. */
.new-rack-modal.new-rack-modal .rebon-item-single button img {
  display: none;
}

/* --------------------------------------------------------------------------
   50. THE RACK ROW LABELS
   style.css:26012 pins them at `font-size: 12px !important`, which is why they
   read small next to everything else that grew in this pass. (0,4,2) with
   !important to clear it - specificity alone cannot.

   Navy rather than the inherited brown-red, and a little room on the right so a
   long name does not run under the bin.
   -------------------------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rebon-item-single ul li h5 {
  font-size: 14.5px !important;
  line-height: 1.35 !important;
  color: var(--rm-navy);
  margin: 0;
  padding-right: 30px;
}

.new-rack-modal.new-rack-modal .rebon-item-single ul li p {
  font-size: 12.5px;
  line-height: 1.4;
  color: var(--rm-muted);
  margin: 2px 0 0;
}

.new-rack-modal.new-rack-modal .rebon-item-single {
  padding: 8px 44px 8px 14px;
}


/* ==== RM SIZE x QUANTITY 2026-09-09 : START ====
 * Styling for the rows RogaloffSizes builds on #selectRibbonBar. The legacy
 * <select> stays in the DOM and is hidden rather than removed: proceedToCheckout
 * gates on it and orderedWidthMm() parses the millimetres out of its option
 * label, so removing it would break the print scale.
 * ============================================================================ */

.new-rack-modal.new-rack-modal .rm-sizes__legacy {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.new-rack-modal.new-rack-modal .rm-sizes {
  margin: 4px 0 6px;
  text-align: left;
}

.new-rack-modal.new-rack-modal .rm-sizes__lead {
  font-family: var(--rm-font-text);
  font-size: 13px;
  color: var(--rm-muted);
  margin: 0 0 12px;
}

.new-rack-modal.new-rack-modal .rm-sizes__break {
  color: var(--rm-teal);
  font-weight: 600;
}

.new-rack-modal.new-rack-modal .rm-sizes__list {
  list-style: none;
  margin: 0;
  padding: 0;
  border: 1px solid rgba(44, 44, 46, 0.10);
  border-radius: 10px;
  overflow: hidden;
  background: var(--rm-card);
}

.new-rack-modal.new-rack-modal .rm-sizes__row {
  display: grid;
  grid-template-columns: 1fr auto minmax(96px, auto);
  align-items: center;
  gap: 14px;
  padding: 11px 14px;
  border-bottom: 1px solid rgba(44, 44, 46, 0.07);
  transition: background var(--rm-trans);
}
.new-rack-modal.new-rack-modal .rm-sizes__row:last-child { border-bottom: 0; }
.new-rack-modal.new-rack-modal .rm-sizes__row.is-chosen { background: var(--rm-gold-pale); }

.new-rack-modal.new-rack-modal .rm-sizes__label {
  font-family: var(--rm-font-text);
  font-size: 14.5px;
  color: var(--rm-navy);
}

/* --- the stepper ---------------------------------------------------------- */
.new-rack-modal.new-rack-modal .rm-sizes__stepper {
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--rm-border-mid);
  border-radius: 7px;
  overflow: hidden;
  background: var(--rm-white);
}

.new-rack-modal.new-rack-modal .rm-sizes__btn {
  width: 32px;
  height: 34px;
  border: 0;
  background: transparent;
  color: var(--rm-navy);
  font-size: 17px;
  line-height: 1;
  cursor: pointer;
  transition: background var(--rm-trans);
}
.new-rack-modal.new-rack-modal .rm-sizes__btn:hover { background: var(--rm-gold-pale); }

.new-rack-modal.new-rack-modal input.rm-sizes__qty {
  width: 46px;
  height: 34px;
  padding: 0;
  border: 0;
  border-left: 1px solid var(--rm-border-soft);
  border-right: 1px solid var(--rm-border-soft);
  border-radius: 0;
  text-align: center;
  font-family: var(--rm-font-body);
  font-size: 14px;
  font-weight: 600;
  color: var(--rm-navy);
  background: var(--rm-white);
  -moz-appearance: textfield;
}
.new-rack-modal.new-rack-modal input.rm-sizes__qty::-webkit-outer-spin-button,
.new-rack-modal.new-rack-modal input.rm-sizes__qty::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

/* --- the line figure ------------------------------------------------------ */
.new-rack-modal.new-rack-modal .rm-sizes__line {
  font-family: var(--rm-font-body);
  font-size: 14px;
  font-weight: 600;
  color: var(--rm-navy);
  text-align: right;
  white-space: nowrap;
}
.new-rack-modal.new-rack-modal .rm-sizes__line em {
  display: block;
  font-style: normal;
  font-size: 11px;
  font-weight: 400;
  letter-spacing: 0.02em;
  color: var(--rm-muted);
}
.new-rack-modal.new-rack-modal .rm-sizes__line.is-busy { color: var(--rm-muted-light); }

/* --- the order total ------------------------------------------------------ */
.new-rack-modal.new-rack-modal .rm-sizes__total {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: flex-end;
  gap: 4px 8px;
  margin-top: 14px;
  min-height: 26px;
}
.new-rack-modal.new-rack-modal .rm-sizes__total-num {
  font-family: var(--rm-font-display);
  font-size: 27px;
  font-weight: 600;
  color: var(--rm-navy);
  line-height: 1;
}
.new-rack-modal.new-rack-modal .rm-sizes__total-gst {
  font-family: var(--rm-font-body);
  font-size: 11px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--rm-muted);
}
.new-rack-modal.new-rack-modal .rm-sizes__total-detail {
  flex-basis: 100%;
  text-align: right;
  font-family: var(--rm-font-text);
  font-size: 12.5px;
  color: var(--rm-muted);
}
.new-rack-modal.new-rack-modal .rm-sizes__hint {
  font-family: var(--rm-font-text);
  font-size: 13px;
  font-style: italic;
  color: var(--rm-muted-light);
  width: 100%;
  text-align: right;
}

@media (max-width: 520px) {
  .new-rack-modal.new-rack-modal .rm-sizes__row {
    grid-template-columns: 1fr auto;
    row-gap: 8px;
  }
  .new-rack-modal.new-rack-modal .rm-sizes__line { grid-column: 1 / -1; text-align: left; }
  .new-rack-modal.new-rack-modal .rm-sizes__line em { display: inline; margin-left: 6px; }
}

/* ==== RM SIZE x QUANTITY 2026-09-09 : END ==== */

/* --------------------------------------------------------------------------
   51. THE MASTHEAD AT MIDDLING WIDTHS
   The 768px breakpoint shrinks the artwork, and above ~1000px there is room for
   it at full size - but between the two the modal is capped at 94vw and the
   wattle spray runs over the lockup. Caught rendering the size screen at 760px;
   a laptop at 900px hits the same band.
   -------------------------------------------------------------------------- */
@media (min-width: 769px) and (max-width: 1040px) {
  .new-rack-modal.new-rack-modal .rm-chrome-masthead {
    min-height: 104px;
    background-size: auto 158px;
    background-position: right top -6px;
  }
  .new-rack-modal.new-rack-modal .rm-chrome-masthead__band {
    margin-top: 36px;
    height: 62px;
    min-width: 0;
    padding-right: 22px;
  }
  .new-rack-modal.new-rack-modal .rm-chrome-masthead__eyebrow {
    font-size: 9.5px;
    letter-spacing: 0.16em;
  }
  .new-rack-modal.new-rack-modal .rm-chrome-logo__text { font-size: 18px; }
  .new-rack-modal.new-rack-modal .rm-chrome-logo__mark { width: 32px; height: 39px; }
  .new-rack-modal.new-rack-modal .rm-chrome .clear-rack-close-btn,
  .new-rack-modal.new-rack-modal .rm-chrome .modal-btn-close { top: 118px; }
}

/* --- 52. Reordering a rack -------------------------------------------------
   Drag lives in the rack LIST, not the preview bar. The list sits outside
   .screenshot-div, so nothing here can reach the print master - no grip, no
   drop indicator, no dragging class. That is the whole reason the list was
   chosen over the bar.

   Nothing below matches a node inside a capture root. Checked, not assumed.
   -------------------------------------------------------------------------- */

/* The grip needs a gutter of its own. The row ships with padding:5px 30px 5px
   15px, and the ribbon thumbnail starts immediately inside that 15px - so a
   grip at the left edge landed ON the artwork. Widen the left padding and the
   grip sits beside the ribbon rather than over it. */
.new-rack-modal.new-rack-modal .single-ribbon-items-main > .rebon-item-single {
  position: relative;
  padding-left: 34px;
  cursor: grab;
  touch-action: pan-x;              /* let a vertical drag be ours, not the page's */
  transition: box-shadow 0.12s ease, transform 0.12s ease, border-color 0.12s ease;
}
.new-rack-modal.new-rack-modal .single-ribbon-items-main > .rebon-item-single button {
  cursor: pointer;                  /* the delete control is not a drag handle */
}

/* Always visible, not hover-only. A grab handle that appears on hover does not
   exist on a touch screen, and most of these racks are built on a phone. Quiet
   at rest, definite under the cursor. */
.new-rack-modal.new-rack-modal .single-ribbon-items-main > .rebon-item-single::before {
  content: "";
  position: absolute;
  left: 12px; top: 50%;
  width: 9px; height: 17px;
  margin-top: -8px;
  opacity: 0.38;
  transition: opacity 0.12s ease;
  background-image:
    radial-gradient(circle, #8a7f6a 1.1px, transparent 1.3px),
    radial-gradient(circle, #8a7f6a 1.1px, transparent 1.3px);
  background-size: 5px 6px;
  background-position: 0 0, 5px 0;
  background-repeat: repeat-y;
  pointer-events: none;
}
.new-rack-modal.new-rack-modal .single-ribbon-items-main > .rebon-item-single:hover {
  border-color: #ded5c0;
}
.new-rack-modal.new-rack-modal .single-ribbon-items-main > .rebon-item-single:hover::before {
  opacity: 1;
}

.new-rack-modal.new-rack-modal .rm-row--dragging {
  cursor: grabbing;
  opacity: 0.55;
  box-shadow: 0 6px 18px rgba(15, 30, 60, 0.16);
  transform: scale(0.99);
}
/* Where it will land. A line, not a gap: the row never moves until the drop,
   so nothing jumps under the finger. */
.new-rack-modal.new-rack-modal .rm-row--over {
  box-shadow: inset 0 -2px 0 0 var(--rm-gold, #b08d3f);
}
body.rm-dragging { user-select: none; -webkit-user-select: none; }

/* --- the bar above the list -------------------------------------------------
   One element, two states. Hint until the customer reorders something, caution
   afterwards. Stacking a permanent instruction above an occasional warning
   would put two bars between the buttons and the rack. */
.new-rack-modal.new-rack-modal .rm-order-notice {
  /* Deliberately NOT flex. As a flex row the grip is its own item, so in a
     narrow column it wrapped onto a line of its own, above the sentence it was
     meant to sit beside. Inline flow keeps the glyph attached to the first
     word the way an icon in running text should be. */
  display: block;
  text-align: left;          /* the panel centres its text; an instruction reads left */
  margin: 0 0 10px;
  padding: 8px 12px;
  border-radius: 3px;
  font-family: var(--rm-font-body, "Karla", "Jost", system-ui, sans-serif);
  font-size: 12.5px;
  line-height: 1.45;
}
/* The same grip glyph as the rows, so the bar points at the control it is
   describing instead of describing it in the abstract. */
.new-rack-modal.new-rack-modal .rm-order-notice__grip {
  display: inline-block;
  vertical-align: -3px;
  margin-right: 7px;
  width: 9px; height: 15px;
  background-image:
    radial-gradient(circle, currentColor 1.1px, transparent 1.3px),
    radial-gradient(circle, currentColor 1.1px, transparent 1.3px);
  background-size: 5px 6px;
  background-position: 0 0, 5px 0;
  background-repeat: repeat-y;
  opacity: 0.55;
}
.new-rack-modal.new-rack-modal .rm-order-notice__text { display: inline; }
.new-rack-modal.new-rack-modal .rm-order-notice__reset {
  /* Its own line. Inline, it butted straight onto the end of the sentence with
     no separation - "exactly as shown.Restore regulation order". */
  display: block;
  margin-top: 6px;
  padding: 0;
  border: 0;
  background: none;
  font: inherit;
  font-weight: 700;
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 2px;
  cursor: pointer;
}

/* Hint: quiet. It is an instruction, not a problem. */
.new-rack-modal.new-rack-modal .rm-order-notice--hint {
  border: 1px solid #e8e3d6;
  background: #faf8f2;
  color: #7d7460;
}
.new-rack-modal.new-rack-modal .rm-order-notice--hint .rm-order-notice__reset {
  display: none;
}

/* Changed: the soft notification. Caution, not error - the customer has done
   something allowed and occasionally correct. Same gold-on-pale-gold as the
   mixed-rack notice (rule 21), because it is the same kind of statement. */
.new-rack-modal.new-rack-modal .rm-order-notice--changed {
  border: 1px solid #e3d4a8;
  border-left: 3px solid var(--rm-gold, #b08d3f);
  background: #fdf8ec;
  color: #6b5722;
}
.new-rack-modal.new-rack-modal .rm-order-notice--changed .rm-order-notice__reset:hover {
  color: var(--rm-navy, #142748);
}
