[object Object]

← back to Dw Theme Live Signin Split

TK-11020: retarget to real live target (snippets/dw-samples-banner.liquid) — add visible Trade Sign In link to /pages/trade-only-benefits in logged-out banner; retail sign-in link unchanged; revert prior pxs-announcement-bar/header/mobile-nav/dw-signin-modal edits to baseline; refresh layout/theme.liquid from live

757b499f8c6b90a0bff46362eeb83bee6d57821d · 2026-08-31 10:29:24 -0700 · Steve Abrams

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 757b499f8c6b90a0bff46362eeb83bee6d57821d
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Aug 31 10:29:24 2026 -0700

    TK-11020: retarget to real live target (snippets/dw-samples-banner.liquid) — add visible Trade Sign In link to /pages/trade-only-benefits in logged-out banner; retail sign-in link unchanged; revert prior pxs-announcement-bar/header/mobile-nav/dw-signin-modal edits to baseline; refresh layout/theme.liquid from live
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 .gitignore                           |   2 +
 layout/theme.liquid                  |   1 -
 sections/pxs-announcement-bar.liquid | 109 +++++-------------------------
 snippets/dw-samples-banner.liquid    |  28 ++++++++
 snippets/dw-signin-modal.liquid      | 125 ++++++++++++++++++++++++++++++-----
 5 files changed, 154 insertions(+), 111 deletions(-)

diff --git a/.gitignore b/.gitignore
index 1924158..5d440a7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,5 @@ tmp/
 dist/
 build/
 .next/
+
+*.baseline
diff --git a/layout/theme.liquid b/layout/theme.liquid
index 2b78e43..61519c9 100644
--- a/layout/theme.liquid
+++ b/layout/theme.liquid
@@ -1386,4 +1386,3 @@ alt="web statistics"></a></div></noscript>
 {% render 'dw-tile-image-fix', ph: page.handle %}
 </body>
 </html>
-
diff --git a/sections/pxs-announcement-bar.liquid b/sections/pxs-announcement-bar.liquid
index f52a966..44c092b 100644
--- a/sections/pxs-announcement-bar.liquid
+++ b/sections/pxs-announcement-bar.liquid
@@ -24,85 +24,30 @@
   {% break %}
 {% endunless %}
 
-{%- comment -%}
-  DW sign-in split — the bar is a flex CONTAINER (not one <a>), so the promo text and the two
-  entry points are independent. The promo text keeps its existing setting-driven behavior; if
-  the merchant set announcement_link it still links (retail #dw-signin by default). The two
-  entry points are appended as bar content, gated by show_signin_entrypoints.
-    - Trade Sign In  -> /pages/trade-only-benefits  (relative, direct nav, bypasses the modal)
-    - Retail Login   -> data-dw-signin              (opens the retail-only sign-in modal)
-{%- endcomment -%}
-
-<div
-  class="pxs-announcement-bar pxs-announcement-bar--split"
+<a
+  class="pxs-announcement-bar"
   style="
     color: {{ section.settings.announcement_color }};
     background-color: {{ section.settings.announcement_background }}
   "
+  {% if section.settings.announcement_link != blank %}
+    href="{{ section.settings.announcement_link }}"
+  {% endif %}
 >
-  {%- if section.settings.announcement_link != blank -%}
-    <a class="pxs-announcement-bar-promo" href="{{ section.settings.announcement_link }}" style="color: {{ section.settings.announcement_color }};">
-      {% if section.settings.announcement_text_mobile != blank %}
-        <span class="pxs-announcement-bar-text-mobile">{{ section.settings.announcement_text_mobile | escape }}</span>
-      {% endif %}
-      {% if section.settings.announcement_text != blank %}
-        <span class="pxs-announcement-bar-text-desktop">{{ section.settings.announcement_text | escape }}</span>
-      {% endif %}
-    </a>
-  {%- else -%}
-    <span class="pxs-announcement-bar-promo">
-      {% if section.settings.announcement_text_mobile != blank %}
-        <span class="pxs-announcement-bar-text-mobile">{{ section.settings.announcement_text_mobile | escape }}</span>
-      {% endif %}
-      {% if section.settings.announcement_text != blank %}
-        <span class="pxs-announcement-bar-text-desktop">{{ section.settings.announcement_text | escape }}</span>
-      {% endif %}
+  {% if section.settings.announcement_text_mobile != blank %}
+    <span class="pxs-announcement-bar-text-mobile">
+      {{ section.settings.announcement_text_mobile | escape }}
     </span>
-  {%- endif -%}
+  {% endif %}
 
-  {%- if section.settings.show_signin_entrypoints -%}
-    <span class="pxs-announcement-bar-signin" role="group" aria-label="Sign in">
-      <a
-        class="pxs-ab-link pxs-ab-link--trade"
-        href="/pages/trade-only-benefits"
-        style="color: {{ section.settings.announcement_color }};"
-        aria-label="Trade Sign In"
-      >{{ section.settings.trade_link_text | default: 'Trade Sign In' | escape }}</a>
-      <span class="pxs-ab-sep" aria-hidden="true">|</span>
-      <a
-        class="pxs-ab-link pxs-ab-link--retail"
-        href="{{ routes.account_login_url }}"
-        data-dw-signin
-        style="color: {{ section.settings.announcement_color }};"
-        aria-label="Retail Login — existing customers sign in, new customers create an account; retail accounts receive 3 lifetime complimentary samples"
-        title="Existing customer? Sign in. New here? Create an account. Retail accounts receive 3 lifetime complimentary samples."
-      >{{ section.settings.retail_link_text | default: 'Retail Login' | escape }}</a>
+  {% if section.settings.announcement_text != blank %}
+    <span class="pxs-announcement-bar-text-desktop">
+      {{ section.settings.announcement_text | escape }}
     </span>
-  {%- endif -%}
-</div>
+  {% endif %}
+</a>
+
 
-<style>
-  .pxs-announcement-bar--split{
-    display:flex; align-items:center; justify-content:center; gap:18px; flex-wrap:wrap;
-    text-align:center;
-  }
-  .pxs-announcement-bar--split .pxs-announcement-bar-promo{
-    text-decoration:none;
-  }
-  .pxs-announcement-bar-signin{
-    display:inline-flex; align-items:center; gap:10px; white-space:nowrap;
-    font-family:Lora,serif; font-size:.78rem; text-transform:uppercase; letter-spacing:.06em;
-  }
-  .pxs-announcement-bar-signin .pxs-ab-link{
-    text-decoration:none; cursor:pointer; opacity:.92;
-  }
-  .pxs-announcement-bar-signin .pxs-ab-link:hover{ opacity:1; text-decoration:underline; }
-  .pxs-announcement-bar-signin .pxs-ab-sep{ opacity:.5; }
-  @media(max-width:749px){
-    .pxs-announcement-bar--split{ gap:8px; }
-    .pxs-announcement-bar-signin{ font-size:.7rem; letter-spacing:.04em; gap:7px; }
-  }
-</style>
 
 {% schema %}
 {
@@ -149,30 +94,6 @@
       "type": "color",
       "label": "Background color",
       "default": "#000000"
-    },
-    {
-      "type": "header",
-      "content": "Sign-in entry points"
-    },
-    {
-      "type": "checkbox",
-      "id": "show_signin_entrypoints",
-      "label": "Show Trade Sign In + Retail Login links in the bar",
-      "default": true
-    },
-    {
-      "id": "trade_link_text",
-      "type": "text",
-      "label": "Trade link text",
-      "default": "Trade Sign In",
-      "info": "Routes directly to /pages/trade-only-benefits (bypasses the retail modal)."
-    },
-    {
-      "id": "retail_link_text",
-      "type": "text",
-      "label": "Retail link text",
-      "default": "Retail Login",
-      "info": "Opens the retail-only sign-in modal."
     }
   ]
 }
diff --git a/snippets/dw-samples-banner.liquid b/snippets/dw-samples-banner.liquid
new file mode 100644
index 0000000..719b7ac
--- /dev/null
+++ b/snippets/dw-samples-banner.liquid
@@ -0,0 +1,28 @@
+{%- comment -%} DW-SAMPLES-BANNER v1 — lifetime retail allowance + approved-trade entitlement. {%- endcomment -%}
+<!-- DW-SAMPLES-BANNER v1 -->
+{%- assign dw_is_trade = false -%}
+{%- if customer and customer.tags contains 'trade_approved' -%}{%- assign dw_is_trade = true -%}{%- endif -%}
+{%- assign dw_samples_used = customer.metafields.custom.free_samples_used.value | default: 0 | plus: 0 -%}
+{%- assign dw_samples_remaining = 3 | minus: dw_samples_used -%}
+{%- if dw_samples_remaining < 0 -%}{%- assign dw_samples_remaining = 0 -%}{%- endif -%}
+{%- assign dw_login_separator = '?' -%}
+{%- if routes.account_login_url contains '?' -%}{%- assign dw_login_separator = '&' -%}{%- endif -%}
+<style>
+  .dw-sample-banner{position:relative;z-index:60;background:#1a1714;color:#faf7f2;font-family:-apple-system,'Inter',system-ui,sans-serif;font-size:13px;line-height:1.4;letter-spacing:.02em;padding:11px 20px;text-align:center;border-bottom:1px solid #2b2620}
+  .dw-sample-banner a.dw-sb-cta{color:#faf7f2;text-decoration:underline;text-underline-offset:2px;font-weight:600;white-space:nowrap}
+  .dw-sample-banner a.dw-sb-cta:hover{color:#e7c9a6}
+  .dw-sample-banner .dw-sb-lead{text-transform:uppercase;letter-spacing:.14em;font-size:11px;font-weight:600;color:#b8865c;margin-right:8px}
+  .dw-sample-banner .dw-sb-msg{display:inline}.dw-sample-banner .dw-sb-sub{opacity:.72;font-size:11px;margin-left:6px}
+  .dw-sample-banner .dw-sb-sub a.dw-sb-cta{font-weight:500}
+  @media(max-width:600px){.dw-sample-banner{font-size:12px;padding:10px 14px}.dw-sample-banner .dw-sb-lead,.dw-sample-banner .dw-sb-sub{display:block;margin:2px 0 0}}
+</style>
+<div class="dw-sample-banner" id="dwSampleBanner" role="region" aria-label="Complimentary samples offer">
+  {%- if dw_is_trade -%}
+    <span class="dw-sb-lead">Approved Trade</span><span class="dw-sb-msg">Your samples are complimentary with no limit. <a class="dw-sb-cta" href="{{ routes.all_products_collection_url }}">Choose samples &rsaquo;</a></span>
+  {%- elsif customer -%}
+    <span class="dw-sb-lead">Your Account</span><span class="dw-sb-msg">You have {{ dw_samples_remaining }} of 3 lifetime complimentary samples remaining &mdash; applied automatically at checkout. <a class="dw-sb-cta" href="{{ routes.all_products_collection_url }}">Choose samples &rsaquo;</a> <span class="dw-sb-sub">Design professional? <a class="dw-sb-cta" href="/pages/trade-only-benefits">Apply for unlimited samples &rsaquo;</a></span></span>
+  {%- else -%}
+    <span class="dw-sb-lead">Complimentary Samples</span><span class="dw-sb-msg"><a class="dw-sb-cta" href="{{ routes.account_login_url }}{{ dw_login_separator }}return_url={{ routes.all_products_collection_url | url_encode }}">Existing customer? Sign in. New here? Create an account.</a> Retail accounts receive 3 lifetime complimentary samples. <span class="dw-sb-sub">Approved design professionals receive unlimited samples. <a class="dw-sb-cta" href="/pages/trade-only-benefits">Trade Sign In &rsaquo;</a></span></span>
+  {%- endif -%}
+</div>
+<!-- /DW-SAMPLES-BANNER -->
diff --git a/snippets/dw-signin-modal.liquid b/snippets/dw-signin-modal.liquid
index de7a9fd..2cb49dc 100644
--- a/snippets/dw-signin-modal.liquid
+++ b/snippets/dw-signin-modal.liquid
@@ -1,4 +1,4 @@
-{% comment %} DW RETAIL sign-in popup — retail only. Returning customer signs in (passwordless email-code) or creates an account; retail accounts receive 3 lifetime complimentary samples. The Trade path no longer lives here — the header "Trade Sign In" link routes straight to /pages/trade-only-benefits. The dw_trade redirect in templates/customers/{account,register}.liquid is retained for any legacy retail->trade edge. {% endcomment %}
+{% comment %} DW sign-in popup — returning clients sign in first (passwordless, email-code); new visitors choose Retail (emailed code for 3 free samples) or Professional (moderated Apply for Trade). dw_trade flag consumed in templates/customers/account.liquid. {% endcomment %}
 <style>
   .dwsm-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:99999;display:none;align-items:flex-start;justify-content:center;padding:6vh 16px;overflow-y:auto;font-family:Lora,serif;}
   .dwsm-overlay.dwsm-open{display:flex;}
@@ -8,13 +8,24 @@
   .dwsm-offer{text-align:center;margin:0 0 20px;}
   .dwsm-offer h2{font-weight:400;font-size:1.55rem;color:#000;margin:0 0 4px;letter-spacing:.02em;}
   .dwsm-offer p{font-size:.86rem;color:#787878;margin:0;}
+  .dwsm-toggle{display:flex;gap:10px;margin:0 0 24px;}
+  .dwsm-opt{flex:1;text-align:center;border:1px solid #e4e4e4;border-radius:4px;padding:13px 8px;cursor:pointer;transition:all .15s ease;background:#fff;}
+  .dwsm-opt:hover{border-color:#b08212;}
+  .dwsm-opt.active{border-color:#b08212;background:#faf6ec;box-shadow:0 0 0 1px #b08212;}
+  .dwsm-opt .t{display:block;font-size:.8rem;text-transform:uppercase;letter-spacing:.06em;color:#444;margin-bottom:3px;}
+  .dwsm-opt .s{display:block;font-size:.92rem;color:#b08212;}
   .dwsm-gbtn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px 20px;background:#fff;border:1px solid #dadce0;border-radius:3px;cursor:pointer;font-family:Lora,serif;font-size:.92rem;color:#3c4043;margin-bottom:18px;}
   .dwsm-gbtn:hover{background:#f7f8f8;}
   .dwsm-div{display:flex;align-items:center;gap:14px;margin:0 0 18px;}
   .dwsm-div span{font-size:.72rem;color:#999;text-transform:uppercase;letter-spacing:.1em;}
   .dwsm-div i{flex:1;height:1px;background:#e4e4e4;}
+  .dwsm-field{margin-bottom:16px;}
+  .dwsm-field label{display:block;font-size:.76rem;text-transform:uppercase;letter-spacing:.03em;color:#444;margin-bottom:6px;}
+  .dwsm-field input{width:100%;padding:12px 14px;border:1px solid #e4e4e4;border-radius:3px;font-family:Lora,serif;font-size:.95rem;color:#444;box-sizing:border-box;}
+  .dwsm-field input:focus{outline:none;border-color:#b08212;box-shadow:0 0 0 1px #b08212;}
   .dwsm-overlay input.dwsm-submit{width:100%;padding:14px;background:#000 !important;color:#fff !important;border:none !important;border-radius:3px;font-family:Lora,serif;font-size:.9rem;text-transform:uppercase;letter-spacing:.05em;cursor:pointer;}
   .dwsm-overlay input.dwsm-submit:hover{background:#262626 !important;}
+  .dwsm-err{background:#fef2f2;border:1px solid #fca5a5;color:#991b1b;font-size:.85rem;padding:10px 14px;border-radius:3px;margin-bottom:16px;text-align:center;}
   .dwsm-return{margin:0 0 8px;}
   .dwsm-return h2{font-weight:400;font-size:1.55rem;color:#000;margin:0 0 14px;letter-spacing:.02em;text-align:center;}
   .dwsm-return-cap{font-size:.82rem;color:#787878;margin:2px 0 0;text-align:center;}
@@ -27,12 +38,13 @@
 </style>
 
 <div class="dwsm-overlay" id="dw-signin" data-dwsm-overlay>
-  <div class="dwsm-card" role="dialog" aria-modal="true" aria-label="Retail sign in">
+  <div class="dwsm-card" role="dialog" aria-modal="true" aria-label="Sign in">
     <button class="dwsm-close" type="button" data-dwsm-close aria-label="Close">&times;</button>
 
     {%- comment -%} (0) RETURNING SIGN-IN — first and most prominent. Passwordless: email -> 6-digit code. {%- endcomment -%}
+    {%- unless customer -%}
     <div class="dwsm-return">
-      <h2>Existing customer?</h2>
+      <h2>Welcome back</h2>
       <input type="button" class="dwsm-submit" data-dwsm-login="{{ routes.account_login_url }}" value="Sign In" style="margin-bottom:12px;">
       <button type="button" class="dwsm-gbtn" data-dwsm-login="{{ routes.account_login_url }}">
         <svg width="18" height="18" viewBox="0 0 18 18" aria-hidden="true"><path fill="#4285F4" d="M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.8 2.72v2.26h2.92c1.7-1.57 2.68-3.88 2.68-6.62z"/><path fill="#34A853" d="M9 18c2.43 0 4.47-.8 5.96-2.18l-2.92-2.26c-.81.54-1.84.86-3.04.86-2.34 0-4.32-1.58-5.03-3.7H.96v2.33A9 9 0 0 0 9 18z"/><path fill="#FBBC05" d="M3.97 10.72a5.4 5.4 0 0 1 0-3.44V4.95H.96a9 9 0 0 0 0 8.1l3.01-2.33z"/><path fill="#EA4335" d="M9 3.58c1.32 0 2.5.45 3.44 1.35l2.58-2.58C13.47.9 11.43 0 9 0A9 9 0 0 0 .96 4.95l3.01 2.33C4.68 5.16 6.66 3.58 9 3.58z"/></svg>
@@ -41,25 +53,67 @@
       <p class="dwsm-return-cap">Returning customer? Just enter your email — no password needed.</p>
     </div>
 
-    <div class="dwsm-newdiv"><i></i><span>New here?</span><i></i></div>
+    <div class="dwsm-newdiv"><i></i><span>New to Designer Wallcoverings?</span><i></i></div>
 
     <div class="dwsm-offer">
-      <h2>Create an account</h2>
-      <p>Retail accounts receive 3 lifetime complimentary samples.</p>
+      <h2>Free Samples, On Us</h2>
+      <p>Sign in — we'll email you a code for 3 free samples.</p>
     </div>
 
-    {%- comment -%} New-visitor Google sign-up; deep-links to the hosted portal's native Google. {%- endcomment -%}
-    <button type="button" class="dwsm-gbtn" data-dwsm-login="{{ routes.account_register_url }}">
-      <svg width="18" height="18" viewBox="0 0 18 18" aria-hidden="true"><path fill="#4285F4" d="M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.8 2.72v2.26h2.92c1.7-1.57 2.68-3.88 2.68-6.62z"/><path fill="#34A853" d="M9 18c2.43 0 4.47-.8 5.96-2.18l-2.92-2.26c-.81.54-1.84.86-3.04.86-2.34 0-4.32-1.58-5.03-3.7H.96v2.33A9 9 0 0 0 9 18z"/><path fill="#FBBC05" d="M3.97 10.72a5.4 5.4 0 0 1 0-3.44V4.95H.96a9 9 0 0 0 0 8.1l3.01-2.33z"/><path fill="#EA4335" d="M9 3.58c1.32 0 2.5.45 3.44 1.35l2.58-2.58C13.47.9 11.43 0 9 0A9 9 0 0 0 .96 4.95l3.01 2.33C4.68 5.16 6.66 3.58 9 3.58z"/></svg>
-      Continue with Google
-    </button>
-    <div class="dwsm-div"><i></i><span>or</span><i></i></div>
+    <div class="dwsm-toggle">
+      <div class="dwsm-opt active" data-dwsm-type="retail" role="button" tabindex="0">
+        <span class="t">Retail</span><span class="s">code for 3 free</span>
+      </div>
+      <div class="dwsm-opt" data-dwsm-type="professional" role="button" tabindex="0">
+        <span class="t">Professional</span><span class="s">apply for trade</span>
+      </div>
+    </div>
 
-    <input type="button" class="dwsm-submit" data-dwsm-login="{{ routes.account_register_url }}" value="Create an Account">
+    {%- comment -%} Google sign-up offered up front; deep-links to the hosted portal's native Google. {%- endcomment -%}
+    <div data-dwsm-google>
+      <button type="button" class="dwsm-gbtn" data-dwsm-login="{{ routes.account_login_url }}">
+        <svg width="18" height="18" viewBox="0 0 18 18" aria-hidden="true"><path fill="#4285F4" d="M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.8 2.72v2.26h2.92c1.7-1.57 2.68-3.88 2.68-6.62z"/><path fill="#34A853" d="M9 18c2.43 0 4.47-.8 5.96-2.18l-2.92-2.26c-.81.54-1.84.86-3.04.86-2.34 0-4.32-1.58-5.03-3.7H.96v2.33A9 9 0 0 0 9 18z"/><path fill="#FBBC05" d="M3.97 10.72a5.4 5.4 0 0 1 0-3.44V4.95H.96a9 9 0 0 0 0 8.1l3.01-2.33z"/><path fill="#EA4335" d="M9 3.58c1.32 0 2.5.45 3.44 1.35l2.58-2.58C13.47.9 11.43 0 9 0A9 9 0 0 0 .96 4.95l3.01 2.33C4.68 5.16 6.66 3.58 9 3.58z"/></svg>
+        Continue with Google
+      </button>
+      <div class="dwsm-div"><i></i><span>or</span><i></i></div>
+    </div>
 
-    <div class="dwsm-foot">
-      Prefer trade pricing? <a href="/pages/trade-only-benefits">Apply for a Trade Account</a>
+    {%- endunless -%}
+    {%- if customer -%}
+    <div class="dwsm-return">
+      <h2>Apply for Trade Pricing</h2>
+      <p class="dwsm-return-cap">You're signed in — submit your business details and our team will review your trade account.</p>
     </div>
+    {%- endif -%}
+    {%- comment -%} Moderated trade application — shown when "Professional" is selected. {%- endcomment -%}
+    <form class="dwsm-trade" data-dwsm-trade style="display:{% if customer %}block{% else %}none{% endif %};" novalidate>
+      <div class="dwsm-field">
+        <label>Business name</label>
+        <input type="text" name="business_name" autocomplete="organization" value="{{ customer.default_address.company }}" required>
+      </div>
+      <div class="dwsm-field">
+        <label>Work email</label>
+        <input type="email" name="email" autocomplete="email" value="{{ customer.email }}" required>
+      </div>
+      <div class="dwsm-field">
+        <label>Resale / business license #</label>
+        <input type="text" name="resale_cert">
+      </div>
+      <input type="button" class="dwsm-submit" data-dwsm-trade-submit value="Apply for Trade">
+      <p class="dwsm-trade-note" style="font-size:.78rem;color:#787878;margin:12px 0 0;text-align:center;">
+        Trade applications are reviewed by our team. We'll email you once approved.
+      </p>
+    </form>
+
+    {%- unless customer -%}
+    <div data-dwsm-retail>
+      <input type="button" class="dwsm-submit" data-dwsm-login="{{ routes.account_login_url }}" value="Sign In / Create Account">
+
+      <div class="dwsm-foot">
+        New to Designer Wallcoverings? <a href="{{ routes.account_register_url }}">Create account</a>
+      </div>
+    </div>
+    {%- endunless -%}
   </div>
 </div>
 
@@ -67,16 +121,55 @@
 (function(){
   var overlay=document.getElementById('dw-signin');
   if(!overlay) return;
+  var TRADE_APPLY_URL = 'https://signup.designerwallcoverings.com/trade/apply'; // fulfillment service public URL
   function open(){overlay.classList.add('dwsm-open');document.body.style.overflow='hidden';}
   function close(){overlay.classList.remove('dwsm-open');document.body.style.overflow='';}
+  function persistTrade(){
+    var proEl=overlay.querySelector('[data-dwsm-type="professional"]');
+    var pro=proEl&&proEl.classList.contains('active');
+    try{pro?sessionStorage.setItem('dw_trade','1'):sessionStorage.removeItem('dw_trade');}catch(e){}
+  }
   document.addEventListener('click',function(e){
     var t=e.target.closest('[data-dw-signin], a[href="#dw-signin"], a[href$="#dw-signin"]');
     if(t){e.preventDefault();open();return;}
     var login=e.target.closest('[data-dwsm-login]');
-    if(login){e.preventDefault();window.location.href=login.getAttribute('data-dwsm-login');return;}
+    if(login){e.preventDefault();persistTrade();window.location.href=login.getAttribute('data-dwsm-login');return;}
     if(e.target.closest('[data-dwsm-close]')||e.target===overlay){close();}
   });
   document.addEventListener('keydown',function(e){if(e.key==='Escape')close();});
+  var opts=overlay.querySelectorAll('[data-dwsm-type]');
+  var retailBox=overlay.querySelector('[data-dwsm-retail]');
+  var googleBox=overlay.querySelector('[data-dwsm-google]');
+  var tradeForm=overlay.querySelector('[data-dwsm-trade]');
+  function setType(type){
+    opts.forEach(function(o){o.classList.toggle('active',o.getAttribute('data-dwsm-type')===type);});
+    var pro=(type==='professional');
+    if(retailBox) retailBox.style.display=pro?'none':'';
+    if(googleBox) googleBox.style.display=pro?'none':'';
+    if(tradeForm) tradeForm.style.display=pro?'block':'none';
+    try{pro?sessionStorage.setItem('dw_trade','1'):sessionStorage.removeItem('dw_trade');}catch(e){}
+  }
+  // Moderated trade application submit -> POST /trade/apply on the fulfillment service.
+  overlay.addEventListener('click',function(e){
+    if(!e.target.closest('[data-dwsm-trade-submit]')) return;
+    e.preventDefault();
+    var f=tradeForm; if(!f) return;
+    var body={
+      business_name:(f.business_name.value||'').trim(),
+      email:(f.email.value||'').trim(),
+      resale_cert:(f.resale_cert.value||'').trim()
+    };
+    if(!body.email||!body.business_name){alert('Business name and work email are required.');return;}
+    fetch(TRADE_APPLY_URL,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(body)})
+      .then(function(r){return r.json();})
+      .then(function(){f.innerHTML='<p style="text-align:center;color:#444;padding:8px 0;">Thanks — your trade application is in review. We\'ll email you once it\'s approved.</p>';})
+      .catch(function(){alert('Sorry, something went wrong. Please try again.');});
+  });
+  opts.forEach(function(o){
+    o.addEventListener('click',function(){setType(o.getAttribute('data-dwsm-type'));});
+    o.addEventListener('keydown',function(e){if(e.key==='Enter'||e.key===' '){e.preventDefault();setType(o.getAttribute('data-dwsm-type'));}});
+  });
   if(window.location.hash==='#dw-signin'){open();}
 })();
 </script>
+

← f3cd81c Re-target sign-in split to the PROMO ANNOUNCEMENT BAR (pxs-a  ·  back to Dw Theme Live Signin Split  ·  upload_tk11020: require --apply + only ledger a VERIFIED liv 26c1c83 →