[object Object]

← back to Rentv

rentv: add Closings link to site-wide nav across 22 public pages

ad9276b69215f8ef0daddbe4c777446d23e2b007 · 2026-08-04 15:34:41 -0700 · Steve Abrams

Files touched

Diff

commit ad9276b69215f8ef0daddbe4c777446d23e2b007
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Aug 4 15:34:41 2026 -0700

    rentv: add Closings link to site-wide nav across 22 public pages
---
 public/about.html.bak-nav         | 149 ---------
 public/advertise.html.bak-nav     | 158 ----------
 public/article.html.bak-nav       | 137 ---------
 public/brief.html.bak-nav         | 177 -----------
 public/compare.html.bak-nav       | 167 -----------
 public/conferences.html.bak-nav   | 146 ---------
 public/cre-talk.html.bak-nav      | 163 ----------
 public/deals.html.bak-nav         | 178 -----------
 public/directory.html.bak-nav     | 155 ----------
 public/index.html.bak-nav         | 319 --------------------
 public/la-commercial.html.bak-nav |  97 ------
 public/market-pulse.html.bak-nav  | 617 --------------------------------------
 public/markets.html.bak-nav       | 113 -------
 public/metros.html.bak-nav        | 167 -----------
 public/pulse.html.bak-nav         | 133 --------
 public/review.html.bak-nav        | 233 --------------
 public/search.html.bak-nav        | 152 ----------
 public/section.html.bak-nav       | 130 --------
 public/sector.html.bak-nav        | 167 -----------
 public/subscribe.html.bak-nav     | 150 ---------
 public/tools.html.bak-nav         | 175 -----------
 public/watchlist.html.bak-nav     | 211 -------------
 22 files changed, 4094 deletions(-)

diff --git a/public/about.html.bak-nav b/public/about.html.bak-nav
deleted file mode 100644
index 1c6ae7c8..00000000
--- a/public/about.html.bak-nav
+++ /dev/null
@@ -1,149 +0,0 @@
-<!doctype html>
-<html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>About — RENTV.com</title>
-<meta name="description" content="RENTV.com — commercial real estate news, video, and conferences for the Western United States since 1998.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--bg);line-height:1.5}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .ticker{display:flex;gap:20px;overflow:hidden;white-space:nowrap}.ticker b{color:#fff}.up{color:#4ade80}.dn{color:#f87171}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{border-bottom:2px solid var(--ink);padding:20px 0 14px}
-  .mast .wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:3px}
-  .logo{font-family:var(--serif);font-weight:700;font-size:42px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  .datebox{font-size:12px;color:var(--sub);text-align:center}
-  nav{border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:10}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
-  .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
-  .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  @media(max-width:860px){
-    .ham{display:block;margin-left:auto}
-    nav .wrap{height:52px}
-    .navlinks{display:none;position:absolute;top:52px;left:0;right:0;background:#fff;flex-direction:column;align-items:stretch;border-bottom:2px solid var(--ink);box-shadow:0 10px 24px rgba(0,0,0,.14);z-index:30;max-height:78vh;overflow-y:auto}
-    .navlinks.open{display:flex}
-    .navlinks a{padding:15px 20px;border-bottom:1px solid var(--line);border-left:4px solid transparent}
-    .navlinks a:hover,.navlinks a.on{color:var(--red);border-bottom:1px solid var(--line);border-left-color:var(--red)}
-  }
-  .phero{background:linear-gradient(135deg,#111827,#c8102e);color:#fff;padding:54px 0}
-  .phero .k{font-size:12px;letter-spacing:.22em;text-transform:uppercase;opacity:.85;margin-bottom:12px}
-  .phero h1{font-family:var(--serif);font-size:clamp(32px,5vw,52px);line-height:1.08;letter-spacing:-.5px;max-width:20ch}
-  .phero p{max-width:60ch;margin-top:14px;font-size:17px;opacity:.94}
-  .rv{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease}.rv.in{opacity:1;transform:none}
-  @media(prefers-reduced-motion:reduce){.rv{transition:none;opacity:1;transform:none}}
-  section.blk{padding:52px 0;border-bottom:1px solid var(--line)}
-  .eyebrow{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.14em;color:var(--red);margin-bottom:10px}
-  h2.big{font-family:var(--serif);font-size:clamp(26px,3.4vw,38px);line-height:1.12;letter-spacing:-.4px;max-width:24ch}
-  .lead2{max-width:66ch;color:var(--sub);margin-top:12px;font-size:18px}
-  .cols3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:30px}
-  .cols2{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:30px}
-  @media(max-width:860px){.cols3{grid-template-columns:1fr}.cols2{grid-template-columns:1fr}}
-  .tile{border:1px solid var(--line);border-radius:8px;padding:26px 24px;transition:.25s;background:#fff}
-  .tile:hover{transform:translateY(-4px);box-shadow:0 18px 44px rgba(0,0,0,.09);border-color:#cfd4d9}
-  .tile .n{font-family:var(--serif);font-size:15px;color:var(--red)}
-  .tile h3{font-family:var(--serif);font-size:22px;margin:8px 0 8px}
-  .tile p{color:var(--sub);font-size:15px}
-  .tile .price{margin-top:14px;font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--ink)}
-  .statrow{display:flex;flex-wrap:wrap;gap:44px;margin-top:26px}
-  .statrow .v{font-family:var(--serif);font-size:40px;color:var(--red);line-height:1}
-  .statrow .l{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--sub);margin-top:6px}
-  .cta{display:inline-block;background:var(--red);color:#fff;font-weight:800;font-size:13px;text-transform:uppercase;letter-spacing:.06em;padding:13px 26px;border-radius:5px;cursor:pointer;border:0;margin-top:22px}
-  .cta.ghost{background:transparent;color:var(--ink);border:1.5px solid var(--ink)}
-  .cta:hover{filter:brightness(1.06)}
-  .form{max-width:520px;margin-top:26px}
-  .form label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--sub);margin:14px 0 6px}
-  .form input,.form select{width:100%;padding:12px 14px;border:1px solid var(--line);border-radius:5px;font-size:15px;font-family:inherit}
-  .form .ok{display:none;margin-top:14px;padding:12px 16px;background:#ecfdf3;border:1px solid #a7f3d0;border-radius:6px;color:#067647;font-size:14px}
-  .kv{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--line);font-size:15px}.kv b{font-weight:700}
-  footer{background:var(--ink);color:#aeb6bd;margin-top:0;padding:40px 0 30px;font-size:13px}
-  footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:28px}
-  footer .logo{color:#fff;font-size:26px;margin-bottom:8px}footer h5{color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}footer a{display:block;padding:4px 0;color:#aeb6bd}
-  footer .fine{border-top:1px solid #2a2f34;margin-top:26px;padding-top:16px;font-size:12px;color:#7c848b}
-  @media(max-width:860px){footer .cols{grid-template-columns:1fr 1fr}}
-</style></head><body>
-
-  <div class="util"><div class="wrap">
-    <div class="ticker" id="ticker"><span><b>CRE INDEX</b> …</span><span><b>10-YR</b> …</span><span><b>LA OFFICE VAC</b> …</span></div>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a href="/subscribe" class="sub">Subscribe</a></div>
-  </div></div>
-  <header class="mast"><div class="wrap">
-    <a class="logo" href="/">REN<span>TV</span>.com<small>Commercial Real Estate News</small></a>
-    <div class="datebox"><span>Western U.S. Edition</span><br><span id="today"></span></div>
-  </div></header>
-  <nav><div class="wrap">
-    <button class="ham" id="hamBtn" aria-label="Menu" aria-expanded="false">☰</button>
-    <div class="navlinks" id="nav">
-      <a href="/">Home</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/versions">Versions</a><a href="/blog">Blog</a>
-    </div>
-  </div></nav>
-
-  <div class="phero"><div class="wrap">
-    <div class="k">About RENTV</div>
-    <h1>The Western-U.S. commercial real estate media company.</h1>
-    <p>Since 1998, RENTV has covered the deals, financings and developments shaping commercial real estate across the West — in news, video and live events.</p>
-  </div></div>
-  <section class="blk"><div class="wrap">
-    <div class="eyebrow rv">The portfolio</div><h2 class="big rv">One newsroom, four franchises.</h2>
-    <div class="cols2">
-      <div class="tile rv"><h3>RENTV News</h3><p>The daily record of Western-U.S. commercial real estate — sales, leases, financing, development and market intel, updated continuously.</p></div>
-      <div class="tile rv"><h3>The REview</h3><p>RENTV's video platform — market interviews, property features and deal breakdowns for people who'd rather watch than read.</p><a class="cta ghost" href="/review" style="margin-top:16px">Watch →</a></div>
-      <div class="tile rv"><h3>RENTV Conferences</h3><p>The State of the Market Summit franchise — the live rooms where the Western-U.S. CRE community meets twice a year.</p><a class="cta ghost" href="/conferences" style="margin-top:16px">See upcoming →</a></div>
-      <div class="tile rv"><h3>CRE Talk</h3><p>The interview series with the CEOs and principals steering the region's biggest firms — candid conversations on where the market is headed.</p></div>
-    </div>
-  </div></section>
-  <section class="blk"><div class="wrap">
-    <div class="eyebrow rv">Contact</div><h2 class="big rv">Reach the newsroom.</h2>
-    <div class="cols2">
-      <div class="rv">
-        <div class="kv"><span>Editorial &amp; general</span><b>info@rentv.com</b></div>
-        <div class="kv"><span>Phone</span><b>(310) 213-6409</b></div>
-        <div class="kv"><span>Office</span><b>5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045</b></div>
-        <div class="kv"><span>Advertising</span><b><a href="/advertise" style="color:var(--red)">Request the media kit →</a></b></div>
-      </div>
-      <div class="tile rv"><div class="n">Tip the newsroom</div><h3>Have a deal for us?</h3><p>Sales, leases, financings and groundbreakings — send it over and our editors will take a look.</p>
-        <form class="form" data-fakepost style="margin-top:8px"><label>Your email</label><input type="email" required placeholder="you@company.com"><label>The tip</label><input required placeholder="What's the deal?"><button class="cta" type="submit">Send tip →</button><div class="ok">✓ Got it — thanks. Our editors will follow up if we need more.</div></form>
-      </div>
-    </div>
-  </div></section>
-
-  <footer><div class="wrap"><div class="cols">
-    <div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals &amp; conferences across the Western United States since 1998.</p></div>
-    <div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
-    <div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
-    <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
-  </div><div class="fine">© 2026 RENTV.com · 5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045 · (310) 213-6409</div></div></footer>
-<script>
-  var t=document.getElementById('today');if(t)t.textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
-  var hb=document.getElementById('hamBtn');if(hb)hb.addEventListener('click',function(){var o=document.getElementById('nav').classList.toggle('open');hb.setAttribute('aria-expanded',o);});
-  var esc=function(s){return (s||'').replace(/[&<>"]/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c];});};
-  (function(){fetch('/api/ticker').then(function(r){return r.json();}).then(function(t){
-    function cell(m){if(!m||!m.value)return '';var amt=m.change_pct!=null?Math.abs(m.change_pct)+'%':(m.change_bps!=null?Math.abs(m.change_bps)+'bps':'');var arr=m.dir==='up'?' <span class="up">▲'+amt+'</span>':(m.dir==='down'?' <span class="dn">▼'+amt+'</span>':'');return '<span><b>'+esc(m.label)+'</b> '+esc(m.value)+arr+'</span>';}
-    var h=[t.cre_index,t.ten_yr,t.la_office_vac,t.ie_industrial_cap].map(cell).filter(Boolean).join('');
-    var el=document.getElementById('ticker');if(h&&el)el.innerHTML=h;
-  }).catch(function(){});})();
-  var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('in');io.unobserve(e.target);}});},{threshold:.1});
-  document.querySelectorAll('.rv').forEach(function(el){io.observe(el);});
-  document.querySelectorAll('form[data-fakepost]').forEach(function(f){f.addEventListener('submit',function(e){e.preventDefault();var ok=f.querySelector('.ok');if(ok){ok.style.display='block';}f.querySelectorAll('input,select,button').forEach(function(x){if(x.type!=='reset')x.setAttribute('disabled','');});});});
-  // Real newsletter capture → POST /api/subscribe (append-only JSONL; no external send-to-list).
-  document.querySelectorAll('form[data-subscribe]').forEach(function(f){f.addEventListener('submit',function(e){e.preventDefault();
-    var email=(f.querySelector('input[type=email]')||{}).value||'';
-    var name=(f.querySelector('input[data-name]')||{}).value||'';
-    var interest=(f.querySelector('select')||{}).value||'';
-    var ok=f.querySelector('.ok');var btn=f.querySelector('button');if(btn)btn.setAttribute('disabled','');
-    fetch('/api/subscribe',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email:email,name:name,interest:interest,source:f.getAttribute('data-subscribe')||'site'})})
-      .then(function(r){return r.json();}).then(function(j){
-        if(j&&j.ok){if(ok){ok.style.display='block';}f.querySelectorAll('input,select').forEach(function(x){x.setAttribute('disabled','');});}
-        else{if(btn)btn.removeAttribute('disabled');alert((j&&j.error)?('Please enter a valid email — '+j.error):'Could not subscribe, please try again.');}
-      }).catch(function(){if(btn)btn.removeAttribute('disabled');alert('Network error — please try again.');});
-  });});</script>
-<script src="/theme.js"></script>
-</body></html>
\ No newline at end of file
diff --git a/public/advertise.html.bak-nav b/public/advertise.html.bak-nav
deleted file mode 100644
index 1b4e14d6..00000000
--- a/public/advertise.html.bak-nav
+++ /dev/null
@@ -1,158 +0,0 @@
-<!doctype html>
-<html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Advertise — RENTV.com</title>
-<meta name="description" content="Reach Western-U.S. commercial real estate decision-makers through RENTV — newsletter, site, sponsored content, conferences and video.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--bg);line-height:1.5}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .ticker{display:flex;gap:20px;overflow:hidden;white-space:nowrap}.ticker b{color:#fff}.up{color:#4ade80}.dn{color:#f87171}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{border-bottom:2px solid var(--ink);padding:20px 0 14px}
-  .mast .wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:3px}
-  .logo{font-family:var(--serif);font-weight:700;font-size:42px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  .datebox{font-size:12px;color:var(--sub);text-align:center}
-  nav{border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:10}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
-  .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
-  .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  @media(max-width:860px){
-    .ham{display:block;margin-left:auto}
-    nav .wrap{height:52px}
-    .navlinks{display:none;position:absolute;top:52px;left:0;right:0;background:#fff;flex-direction:column;align-items:stretch;border-bottom:2px solid var(--ink);box-shadow:0 10px 24px rgba(0,0,0,.14);z-index:30;max-height:78vh;overflow-y:auto}
-    .navlinks.open{display:flex}
-    .navlinks a{padding:15px 20px;border-bottom:1px solid var(--line);border-left:4px solid transparent}
-    .navlinks a:hover,.navlinks a.on{color:var(--red);border-bottom:1px solid var(--line);border-left-color:var(--red)}
-  }
-  .phero{background:linear-gradient(135deg,#111827,#c8102e);color:#fff;padding:54px 0}
-  .phero .k{font-size:12px;letter-spacing:.22em;text-transform:uppercase;opacity:.85;margin-bottom:12px}
-  .phero h1{font-family:var(--serif);font-size:clamp(32px,5vw,52px);line-height:1.08;letter-spacing:-.5px;max-width:20ch}
-  .phero p{max-width:60ch;margin-top:14px;font-size:17px;opacity:.94}
-  .rv{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease}.rv.in{opacity:1;transform:none}
-  @media(prefers-reduced-motion:reduce){.rv{transition:none;opacity:1;transform:none}}
-  section.blk{padding:52px 0;border-bottom:1px solid var(--line)}
-  .eyebrow{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.14em;color:var(--red);margin-bottom:10px}
-  h2.big{font-family:var(--serif);font-size:clamp(26px,3.4vw,38px);line-height:1.12;letter-spacing:-.4px;max-width:24ch}
-  .lead2{max-width:66ch;color:var(--sub);margin-top:12px;font-size:18px}
-  .cols3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:30px}
-  .cols2{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:30px}
-  @media(max-width:860px){.cols3{grid-template-columns:1fr}.cols2{grid-template-columns:1fr}}
-  .tile{border:1px solid var(--line);border-radius:8px;padding:26px 24px;transition:.25s;background:#fff}
-  .tile:hover{transform:translateY(-4px);box-shadow:0 18px 44px rgba(0,0,0,.09);border-color:#cfd4d9}
-  .tile .n{font-family:var(--serif);font-size:15px;color:var(--red)}
-  .tile h3{font-family:var(--serif);font-size:22px;margin:8px 0 8px}
-  .tile p{color:var(--sub);font-size:15px}
-  .tile .price{margin-top:14px;font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--ink)}
-  .statrow{display:flex;flex-wrap:wrap;gap:44px;margin-top:26px}
-  .statrow .v{font-family:var(--serif);font-size:40px;color:var(--red);line-height:1}
-  .statrow .l{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--sub);margin-top:6px}
-  .cta{display:inline-block;background:var(--red);color:#fff;font-weight:800;font-size:13px;text-transform:uppercase;letter-spacing:.06em;padding:13px 26px;border-radius:5px;cursor:pointer;border:0;margin-top:22px}
-  .cta.ghost{background:transparent;color:var(--ink);border:1.5px solid var(--ink)}
-  .cta:hover{filter:brightness(1.06)}
-  .form{max-width:520px;margin-top:26px}
-  .form label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--sub);margin:14px 0 6px}
-  .form input,.form select{width:100%;padding:12px 14px;border:1px solid var(--line);border-radius:5px;font-size:15px;font-family:inherit}
-  .form .ok{display:none;margin-top:14px;padding:12px 16px;background:#ecfdf3;border:1px solid #a7f3d0;border-radius:6px;color:#067647;font-size:14px}
-  .kv{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--line);font-size:15px}.kv b{font-weight:700}
-  footer{background:var(--ink);color:#aeb6bd;margin-top:0;padding:40px 0 30px;font-size:13px}
-  footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:28px}
-  footer .logo{color:#fff;font-size:26px;margin-bottom:8px}footer h5{color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}footer a{display:block;padding:4px 0;color:#aeb6bd}
-  footer .fine{border-top:1px solid #2a2f34;margin-top:26px;padding-top:16px;font-size:12px;color:#7c848b}
-  @media(max-width:860px){footer .cols{grid-template-columns:1fr 1fr}}
-</style></head><body>
-
-  <div class="util"><div class="wrap">
-    <div class="ticker" id="ticker"><span><b>CRE INDEX</b> …</span><span><b>10-YR</b> …</span><span><b>LA OFFICE VAC</b> …</span></div>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a href="/subscribe" class="sub">Subscribe</a></div>
-  </div></div>
-  <header class="mast"><div class="wrap">
-    <a class="logo" href="/">REN<span>TV</span>.com<small>Commercial Real Estate News</small></a>
-    <div class="datebox"><span>Western U.S. Edition</span><br><span id="today"></span></div>
-  </div></header>
-  <nav><div class="wrap">
-    <button class="ham" id="hamBtn" aria-label="Menu" aria-expanded="false">☰</button>
-    <div class="navlinks" id="nav">
-      <a href="/">Home</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/versions">Versions</a><a href="/blog">Blog</a>
-    </div>
-  </div></nav>
-
-  <div class="phero"><div class="wrap">
-    <div class="k">Media Kit · 2026</div>
-    <h1>Reach the people who move Western-U.S. commercial real estate.</h1>
-    <p>Since 1998, RENTV has been where CRE professionals get their deals, financings and market intel. Put your firm in front of that audience across five integrated channels.</p>
-  </div></div>
-  <section class="blk"><div class="wrap">
-    <div class="eyebrow rv">The audience</div><h2 class="big rv">Decision-makers, not eyeballs.</h2>
-    <div class="statrow rv">
-      <div><div class="v">1998</div><div class="l">Trusted since</div></div>
-      <div><div class="v">Daily</div><div class="l">Newsletter cadence</div></div>
-      <div><div class="v">600+</div><div class="l">Live conference audience</div></div>
-      <div><div class="v">CRE</div><div class="l">100% industry-qualified</div></div>
-    </div>
-  </div></section>
-  <section class="blk"><div class="wrap">
-    <div class="eyebrow rv">Channels</div><h2 class="big rv">Five ways to reach the market — bundle for reach.</h2>
-    <div class="cols3">
-      <div class="tile rv"><div class="n">01</div><h3>Newsletter Sponsorship</h3><p>Top-of-inbox placement in the RENTV Daily — the single best way to reach active CRE professionals every morning.</p><div class="price">Weekly &amp; monthly slots</div></div>
-      <div class="tile rv"><div class="n">02</div><h3>Site Display</h3><p>Leaderboard and in-feed units across the news river and section pages — always-on brand presence beside the deals.</p><div class="price">CPM &amp; flat-rate</div></div>
-      <div class="tile rv"><div class="n">03</div><h3>Sponsored Content</h3><p>Native, RENTV-bylined articles that put your deal, product or point of view directly into the news feed.</p><div class="price">Per placement</div></div>
-      <div class="tile rv"><div class="n">04</div><h3>Conference Sponsorship</h3><p>Stage, booth and delegate access at the State of the Market summits — the room where deals actually close.</p><div class="price">Tiered packages</div></div>
-      <div class="tile rv"><div class="n">05</div><h3>Video &amp; CRE Talk</h3><p>Pre-roll and named sponsorship on The REview and the CRE Talk interview series with regional CEOs.</p><div class="price">Series &amp; per-episode</div></div>
-      <div class="tile rv"><div class="n">★</div><h3>Integrated Package</h3><p>Combine newsletter + content + conference for one campaign that surrounds the buyer across the whole month. Best value.</p><div class="price">Custom — ask us</div></div>
-    </div>
-  </div></section>
-  <section class="blk"><div class="wrap">
-    <div class="eyebrow rv">Get started</div><h2 class="big rv">Request the 2026 media kit.</h2>
-    <p class="lead2 rv">Tell us a little about your firm and we'll send rates, audience data and available slots. No obligation.</p>
-    <form class="form rv" data-fakepost>
-      <label>Name</label><input required placeholder="Your name">
-      <label>Company</label><input required placeholder="Firm / brand">
-      <label>Work email</label><input type="email" required placeholder="you@company.com">
-      <label>Interested in</label><select><option>Integrated package</option><option>Newsletter sponsorship</option><option>Site display</option><option>Sponsored content</option><option>Conference sponsorship</option><option>Video / CRE Talk</option></select>
-      <button class="cta" type="submit">Request media kit →</button>
-      <div class="ok">✓ Thanks — the media kit is on its way. We'll be in touch within one business day.</div>
-    </form>
-  </div></section>
-
-  <footer><div class="wrap"><div class="cols">
-    <div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals &amp; conferences across the Western United States since 1998.</p></div>
-    <div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
-    <div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
-    <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
-  </div><div class="fine">© 2026 RENTV.com · 5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045 · (310) 213-6409</div></div></footer>
-<script>
-  var t=document.getElementById('today');if(t)t.textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
-  var hb=document.getElementById('hamBtn');if(hb)hb.addEventListener('click',function(){var o=document.getElementById('nav').classList.toggle('open');hb.setAttribute('aria-expanded',o);});
-  var esc=function(s){return (s||'').replace(/[&<>"]/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c];});};
-  (function(){fetch('/api/ticker').then(function(r){return r.json();}).then(function(t){
-    function cell(m){if(!m||!m.value)return '';var amt=m.change_pct!=null?Math.abs(m.change_pct)+'%':(m.change_bps!=null?Math.abs(m.change_bps)+'bps':'');var arr=m.dir==='up'?' <span class="up">▲'+amt+'</span>':(m.dir==='down'?' <span class="dn">▼'+amt+'</span>':'');return '<span><b>'+esc(m.label)+'</b> '+esc(m.value)+arr+'</span>';}
-    var h=[t.cre_index,t.ten_yr,t.la_office_vac,t.ie_industrial_cap].map(cell).filter(Boolean).join('');
-    var el=document.getElementById('ticker');if(h&&el)el.innerHTML=h;
-  }).catch(function(){});})();
-  var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('in');io.unobserve(e.target);}});},{threshold:.1});
-  document.querySelectorAll('.rv').forEach(function(el){io.observe(el);});
-  document.querySelectorAll('form[data-fakepost]').forEach(function(f){f.addEventListener('submit',function(e){e.preventDefault();var ok=f.querySelector('.ok');if(ok){ok.style.display='block';}f.querySelectorAll('input,select,button').forEach(function(x){if(x.type!=='reset')x.setAttribute('disabled','');});});});
-  // Real newsletter capture → POST /api/subscribe (append-only JSONL; no external send-to-list).
-  document.querySelectorAll('form[data-subscribe]').forEach(function(f){f.addEventListener('submit',function(e){e.preventDefault();
-    var email=(f.querySelector('input[type=email]')||{}).value||'';
-    var name=(f.querySelector('input[data-name]')||{}).value||'';
-    var interest=(f.querySelector('select')||{}).value||'';
-    var ok=f.querySelector('.ok');var btn=f.querySelector('button');if(btn)btn.setAttribute('disabled','');
-    fetch('/api/subscribe',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email:email,name:name,interest:interest,source:f.getAttribute('data-subscribe')||'site'})})
-      .then(function(r){return r.json();}).then(function(j){
-        if(j&&j.ok){if(ok){ok.style.display='block';}f.querySelectorAll('input,select').forEach(function(x){x.setAttribute('disabled','');});}
-        else{if(btn)btn.removeAttribute('disabled');alert((j&&j.error)?('Please enter a valid email — '+j.error):'Could not subscribe, please try again.');}
-      }).catch(function(){if(btn)btn.removeAttribute('disabled');alert('Network error — please try again.');});
-  });});</script>
-<script src="/theme.js"></script>
-</body></html>
\ No newline at end of file
diff --git a/public/article.html.bak-nav b/public/article.html.bak-nav
deleted file mode 100644
index 5c10170a..00000000
--- a/public/article.html.bak-nav
+++ /dev/null
@@ -1,137 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>RENTV.com — Story</title>
-<meta name="description" content="Commercial real estate news story — RENTV.com.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--bg);line-height:1.6}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{border-bottom:2px solid var(--ink);padding:18px 0 12px}
-  .mast .wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:3px}
-  .logo{font-family:var(--serif);font-weight:700;font-size:42px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  .datebox{font-size:12px;color:var(--sub);text-align:center}
-  nav{border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:10}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
-  .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
-  .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  @media(max-width:860px){
-    .ham{display:block;margin-left:auto}
-    nav .wrap{height:52px}
-    .navlinks{display:none;position:absolute;top:52px;left:0;right:0;background:#fff;flex-direction:column;align-items:stretch;border-bottom:2px solid var(--ink);box-shadow:0 10px 24px rgba(0,0,0,.14);z-index:30;max-height:78vh;overflow-y:auto}
-    .navlinks.open{display:flex}
-    .navlinks a{padding:15px 20px;border-bottom:1px solid var(--line);border-left:4px solid transparent}
-    .navlinks a:hover{color:var(--red);border-left-color:var(--red)}
-  }
-  .art{max-width:760px;margin:0 auto;padding:26px 0 10px}
-  .crumb{font-size:12px;color:var(--sub);margin-bottom:16px}.crumb a{color:var(--red);font-weight:700}
-  .chip{display:inline-block;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--red);margin-bottom:8px}
-  h1{font-family:var(--serif);font-size:40px;line-height:1.12;letter-spacing:-.5px;margin-bottom:10px}
-  .byl{font-size:13px;color:var(--sub);border-bottom:1px solid var(--line);padding-bottom:16px;margin-bottom:20px}
-  .hero{aspect-ratio:16/8;border-radius:8px;background:linear-gradient(135deg,#1f2937,#c8102e);margin:0 0 22px;overflow:hidden}
-  .hero img{width:100%;height:100%;object-fit:cover;display:block}
-  .body p{font-size:18px;margin-bottom:18px}
-  .body p:first-of-type::first-letter{font-family:var(--serif);font-size:56px;font-weight:700;float:left;line-height:.8;padding:6px 10px 0 0;color:var(--red)}
-  .src{margin:26px 0;padding:18px;background:var(--wash);border-radius:8px;font-size:14px}
-  .src a{color:var(--red);font-weight:800}
-  .back{display:inline-block;margin:10px 0 0;font-size:13px;font-weight:700;color:var(--red)}
-  .skl{background:linear-gradient(90deg,#eee,#f6f6f6,#eee);background-size:200% 100%;animation:sh 1.2s infinite;border-radius:4px;color:transparent}
-  @keyframes sh{to{background-position:-200% 0}}
-  .err{color:var(--sub);padding:20px 0}.err a{color:var(--red);font-weight:700}
-  footer{background:var(--ink);color:#aeb6bd;margin-top:36px;padding:40px 0 30px;font-size:13px}
-  footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:28px}
-  footer .logo{color:#fff;font-size:26px;margin-bottom:8px}footer h5{color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}footer a{display:block;padding:4px 0;color:#aeb6bd}
-  footer .fine{border-top:1px solid #2a2f34;margin-top:26px;padding-top:16px;font-size:12px;color:#7c848b}
-  @media(max-width:860px){h1{font-size:30px}.body p{font-size:17px}}
-</style>
-</head>
-<body>
-  <div class="util"><div class="wrap">
-    <div><a href="/">RENTV.com</a> · Commercial Real Estate News</div>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a class="sub" href="/subscribe">Subscribe</a></div>
-  </div></div>
-
-  <header class="mast"><div class="wrap">
-    <a href="/" class="logo">REN<span>TV</span>.com<small>Commercial Real Estate News</small></a>
-    <div class="datebox"><span>Western U.S. Edition</span><br><span id="today"></span></div>
-  </div></header>
-
-  <nav><div class="wrap">
-    <button class="ham" id="hamBtn" aria-label="Menu" aria-expanded="false">☰</button>
-    <div class="navlinks" id="nav"><a href="/">Home</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/versions">Versions</a><a href="/blog">Blog</a></div>
-  </div></nav>
-
-  <div class="wrap"><article class="art" id="art">
-    <div class="crumb"><a href="/">Home</a> › <span>Story</span></div>
-    <span class="chip">RENTV · Western U.S.</span>
-    <h1 class="skl">Loading the story…<br>&nbsp;</h1>
-    <div class="byl">Fetching live from rentv.com…</div>
-    <div class="hero skl"></div>
-    <div class="body"><p class="skl">&nbsp;<br>&nbsp;<br>&nbsp;</p></div>
-  </article></div>
-
-  <footer><div class="wrap"><div class="cols">
-    <div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals &amp; conferences across the Western United States since 1998.</p></div>
-    <div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
-    <div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
-    <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
-  </div><div class="fine">© 2026 RENTV.com · Commercial real estate news, Western U.S. · Headlines refreshed live from rentv.com</div></div></footer>
-
-<script>
-document.getElementById('today').textContent = new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
-const esc=s=>(s||'').replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-// Accept both link forms: /news/:id (homepage) AND /article.html?id= (search results + RSS/JSON feeds).
-const id=((new URLSearchParams(location.search).get('id'))||location.pathname.split('/').filter(Boolean).pop()||'').replace(/[^0-9]/g,'');
-// Generic titles the reader proxy returns when rentv.com doesn't server-render the story.
-const GENERIC=/^RENTV\.com\b|commercial real estate news and property/i;
-async function load(){
-  const art=document.getElementById('art');
-  if(!id){art.innerHTML='<p class="err">Story not found. <a href="/">Back to the homepage →</a></p>';return;}
-  // Fetch the live feed (guaranteed correct headline/category) and the reader proxy (best-effort body) together.
-  const [feed, art0] = await Promise.allSettled([
-    fetch('/api/news').then(r=>r.json()),
-    fetch('/api/article/'+id).then(r=>r.ok?r.json():null)
-  ]);
-  const item = (feed.status==='fulfilled' ? (feed.value.items||[]).find(x=>String(x.id)===id) : null) || {};
-  const d = (art0.status==='fulfilled' && art0.value) ? art0.value : {};
-  // Prefer the feed's real headline; fall back to the proxy title only if it isn't the generic site title.
-  const title = item.title || (d.title && !GENERIC.test(d.title) ? d.title : 'RENTV Story');
-  const cat = item.cat || 'RENTV';
-  const hasBody = Array.isArray(d.body) && d.body.length>0;
-  if(!item.title && !hasBody && art0.status!=='fulfilled'){
-    art.innerHTML='<p class="err">This story couldn’t be loaded right now.<br><br><a href="/">← Back to the homepage</a></p>';
-    return;
-  }
-  document.title=title+' — RENTV.com';
-  const hero=(d.image && !GENERIC.test(d.image))?'<div class="hero"><img src="'+esc(d.image)+'" alt="" loading="lazy" onerror="this.parentNode.style.background=\'linear-gradient(135deg,#1f2937,#c8102e)\';this.remove()"></div>':'<div class="hero"></div>';
-  const body=hasBody
-    ? d.body.map(p=>'<p>'+esc(p)+'</p>').join('')
-    : '<p>The full report — including deal terms, parties and broker details — is being republished here. Check back shortly for the complete story.</p>';
-  art.innerHTML=
-    '<div class="crumb"><a href="/">Home</a> › '+(['sales','leases','financing','development','multifamily','industrial','retail'].indexOf(cat.toLowerCase())>=0?'<a href="/'+esc(cat.toLowerCase())+'">'+esc(cat)+'</a>':'<span>'+esc(cat)+'</span>')+' › <span>Story</span></div>'+
-    '<span class="chip">'+esc(cat)+' · Western U.S.</span>'+
-    '<h1>'+esc(title)+'</h1>'+
-    '<div class="byl">By RENTV Staff · live from rentv.com'+(d.fetched_at?(' · fetched '+new Date(d.fetched_at).toLocaleTimeString()):'')+'</div>'+
-    hero+
-    '<div class="body">'+body+'</div>'+
-    '<div class="src">📰 Republished live from RENTV.com · Western U.S. commercial real estate news.</div>'+
-    '<a class="back" href="/">← Back to all CRE news</a>';
-}
-const hamBtn=document.getElementById('hamBtn');
-hamBtn.addEventListener('click',()=>{const open=document.getElementById('nav').classList.toggle('open');hamBtn.setAttribute('aria-expanded',open);});
-load();
-</script>
-<script src="/theme.js"></script>
-</body>
-</html>
diff --git a/public/brief.html.bak-nav b/public/brief.html.bak-nav
deleted file mode 100644
index 252d3742..00000000
--- a/public/brief.html.bak-nav
+++ /dev/null
@@ -1,177 +0,0 @@
-<!doctype html><html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>The RENTV Brief — Commercial Real Estate Digest</title>
-<meta name="description" content="The RENTV Brief — a shareable, print-ready snapshot of the latest commercial real estate news, deals and market stats across the Western U.S.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--wash:#f5f6f8;--up:#0f8a4d}
-  *{box-sizing:border-box;margin:0}
-  body{font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:#fbfbfc;line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
-  .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:inherit;padding:7px 9px;border-radius:8px}
-  .burger:hover{background:rgba(0,0,0,.06)}
-  .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--sub)}
-  .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em}.brand span{color:var(--red)}
-  .user{width:37px;height:37px;border-radius:50%;border:1.5px solid var(--line);background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink)}
-  .user:hover{border-color:var(--red);color:var(--red)}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800}.drawer .dh .w span{color:var(--red)}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .grp{padding:14px 18px 4px}.grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:var(--red);color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:var(--red);color:#fff;font-weight:700}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-
-  .issue{max-width:720px;margin:0 auto;padding:0 22px 60px;width:100%}
-  .masthead{text-align:center;padding:34px 0 14px;border-bottom:3px double var(--ink)}
-  .masthead .ey{color:var(--red);font-weight:800;font-size:11px;letter-spacing:.22em;text-transform:uppercase}
-  .masthead h1{font-family:'Playfair Display',serif;font-size:clamp(38px,6vw,58px);font-weight:800;letter-spacing:-.01em;margin:6px 0 4px}.masthead h1 span{color:var(--red)}
-  .masthead .dt{color:var(--sub);font-size:12.5px;font-weight:600;letter-spacing:.03em}
-  .actions{display:flex;justify-content:center;gap:10px;padding:14px 0 2px}
-  .actions button{display:inline-flex;align-items:center;gap:7px;border:1.5px solid var(--line);background:#fff;border-radius:8px;padding:9px 15px;font:700 12.5px 'Inter';color:var(--ink);cursor:pointer}
-  .actions button:hover{border-color:var(--red);color:var(--red)}
-  .actions .go{background:var(--red);border-color:var(--red);color:#fff}
-  .actions .go:hover{color:#fff}
-  .snapshot{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin:22px 0 6px;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff}
-  .snapshot .s{padding:14px 10px;text-align:center;border-right:1px solid var(--line)}
-  .snapshot .s:last-child{border-right:0}
-  .snapshot .s .v{font-family:'Playfair Display',serif;font-size:24px;font-weight:800}
-  .snapshot .s .l{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--sub);margin-top:2px}
-  .sec{padding:26px 0 4px}
-  .sec .rule{font-size:12px;text-transform:uppercase;letter-spacing:.1em;border-top:2px solid var(--ink);padding-top:9px;margin-bottom:14px;font-weight:800;display:flex;justify-content:space-between}
-  .lead{display:block;margin-bottom:6px}
-  .lead .im{height:300px;border-radius:8px;background:#12161a center/cover;display:block;margin-bottom:12px;box-shadow:inset 0 -80px 60px -46px rgba(0,0,0,.4)}
-  .lead .tag{color:var(--red);font-weight:800;font-size:11px;letter-spacing:.12em;text-transform:uppercase}
-  .lead h2{font-family:'Playfair Display',serif;font-size:clamp(26px,4vw,36px);line-height:1.12;font-weight:700;margin-top:6px}
-  .lead:hover h2{color:var(--red)}
-  .hl{display:grid;grid-template-columns:auto 1fr;gap:12px;padding:11px 0;border-bottom:1px solid var(--line);align-items:baseline}
-  .hl .c{font-size:9px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#fff;background:#4a4f55;border-radius:20px;padding:3px 9px;white-space:nowrap}
-  .hl h4{font:600 16px/1.32 'Inter'}
-  .hl:hover h4{color:var(--red)}
-  .deal{display:grid;grid-template-columns:1fr auto;gap:12px;padding:11px 0;border-bottom:1px solid var(--line);align-items:center}
-  .deal h4{font:600 15px/1.3 'Inter'}
-  .deal .m{color:var(--sub);font-size:12px;margin-top:2px}
-  .deal .amt{font-family:'Playfair Display',serif;font-weight:800;font-size:19px;color:var(--red);white-space:nowrap}
-  .deal:hover h4{color:var(--red)}
-  .cta{background:var(--red);color:#fff;border-radius:12px;padding:22px;text-align:center;margin:30px 0 0}
-  .cta h3{font-family:'Playfair Display',serif;font-size:22px;margin-bottom:8px}
-  .cta a{display:inline-block;background:#0b0e12;color:#fff;border-radius:7px;padding:11px 22px;font-weight:800;font-size:13px;margin-top:4px}
-  .foot{text-align:center;color:var(--sub);font-size:11.5px;padding:20px 0 0}
-  .toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%) translateY(20px);background:#0b0e12;color:#fff;padding:11px 20px;border-radius:9px;font-weight:700;font-size:13px;opacity:0;pointer-events:none;transition:.25s;z-index:960}
-  .toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
-  @media print{
-    .top,.drawer,.scrim,.actions,.cta{display:none!important}
-    body{background:#fff}
-    .issue{max-width:100%;padding:0}
-    .lead .im{height:220px;box-shadow:none}
-    a{color:#000}
-  }
-</style></head><body>
-
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu">
-    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
-    <span class="lbl">Menu</span>
-  </button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <a class="user" href="/search" aria-label="Search" title="Search">
-    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-  </a>
-</header>
-
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><div class="w">REN<span>TV</span></div><button id="dx" aria-label="Close">&times;</button></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/search">Search</a><a href="/pulse">Market Pulse</a><a href="/tools">CRE Toolkit</a><a href="/watchlist">Deal Watchlist</a><a href="/directory">CRE Directory</a><a href="/compare">Deal Comparison</a><a href="/brief" class="active">The RENTV Brief</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial real estate news, Western U.S.</div>
-</aside>
-
-<main class="issue">
-  <div class="masthead">
-    <div class="ey">Commercial Real Estate · Western U.S.</div>
-    <h1>The REN<span>TV</span> Brief</h1>
-    <div class="dt" id="dt">Loading the latest issue…</div>
-  </div>
-  <div class="actions">
-    <button class="go" id="print">🖨 Print / PDF</button>
-    <button id="share">🔗 Share</button>
-    <a href="/subscribe"><button>✉️ Subscribe</button></a>
-  </div>
-
-  <div class="snapshot" id="snapshot"></div>
-
-  <div class="sec"><div class="rule">Top Story</div><div id="lead"></div></div>
-  <div class="sec" id="more"><div class="rule">More Headlines <span id="hlcount" style="color:var(--sub)"></span></div><div id="headlines"></div></div>
-  <div class="sec" id="biggest"><div class="rule">Biggest Deals</div><div id="deals"></div></div>
-
-  <div class="cta"><h3>Get The RENTV Brief in your inbox</h3><div>The Western U.S. CRE market, distilled — free.</div><a href="/subscribe">Subscribe free →</a></div>
-  <div class="foot" id="foot"></div>
-</main>
-<div class="toast" id="toast"></div>
-
-<script>
-const $=id=>document.getElementById(id);
-const esc=s=>String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-const drawer=$('drawer'),scrim=$('scrim');
-$('burger').onclick=()=>{drawer.classList.add('open');scrim.classList.add('open')};
-const close=()=>{drawer.classList.remove('open');scrim.classList.remove('open')};
-$('dx').onclick=close;scrim.onclick=close;document.addEventListener('keydown',e=>{if(e.key==='Escape')close()});
-
-$('print').onclick=()=>window.print();
-function toast(m){const t=$('toast');t.textContent=m;t.classList.add('on');setTimeout(()=>t.classList.remove('on'),1900);}
-$('share').onclick=async()=>{
-  const url=location.origin+'/brief';
-  if(navigator.share){try{await navigator.share({title:'The RENTV Brief',url});return;}catch(e){}}
-  try{await navigator.clipboard.writeText(url);toast('Link copied to clipboard');}catch(e){toast(url);}
-};
-
-const artHref=n=>'/article.html?id='+encodeURIComponent(n.id);
-const usd=n=>n>=1e6?('$'+(n/1e6).toFixed(1)+'M'):n>=1e3?('$'+Math.round(n/1e3)+'K'):('$'+Math.round(n));
-
-(async function(){
-  let news={items:[]},pulse={kpis:{}},deals={deals:[]};
-  try{ [news,pulse,deals]=await Promise.all([
-    fetch('/api/news').then(r=>r.json()),
-    fetch('/api/pulse').then(r=>r.json()),
-    fetch('/api/deals?limit=200').then(r=>r.json()),
-  ]); }catch(e){ $('dt').textContent='Could not load the latest issue.'; return; }
-
-  const when=pulse.updated||news.fetched_at||Date.now();
-  const d=new Date(when);
-  $('dt').textContent=d.toLocaleDateString(undefined,{weekday:'long',month:'long',day:'numeric',year:'numeric'});
-
-  const k=pulse.kpis||{};
-  $('snapshot').innerHTML=[
-    [k.totalVolumeLabel||'—','Tracked volume'],[k.dealCount||'—','Deals'],
-    [k.avgSizeLabel||'—','Avg size'],[k.marketCount||'—','Markets'],
-  ].map(([v,l])=>`<div class="s"><div class="v">${esc(v)}</div><div class="l">${esc(l)}</div></div>`).join('');
-
-  const items=news.items||[];
-  const lead=items[0];
-  if(lead)$('lead').innerHTML=`<a class="lead" href="${artHref(lead)}">${lead.image?`<span class="im" style="background-image:url('${esc(lead.image)}')"></span>`:''}<span class="tag">${esc(lead.cat||'News')}</span><h2>${esc(lead.title)}</h2></a>`;
-
-  const rest=items.slice(1,11);
-  $('hlcount').textContent=rest.length?`(${rest.length})`:'';
-  $('headlines').innerHTML=rest.map(n=>`<a class="hl" href="${artHref(n)}"><span class="c">${esc(n.cat||'News')}</span><h4>${esc(n.title)}</h4></a>`).join('');
-
-  const big=(deals.deals||[]).filter(x=>x.amount).sort((a,b)=>b.amount-a.amount).slice(0,5);
-  $('deals').innerHTML=big.map(x=>`<a class="deal" href="/deals"><div><h4>${esc(x.title)}</h4><div class="m">${[x.property_type,[x.city,x.state].filter(Boolean).join(', ')].filter(Boolean).map(esc).join(' · ')}</div></div><div class="amt">${esc(x.amount_label||usd(x.amount))}</div></a>`).join('');
-
-  $('foot').innerHTML=`The RENTV Brief · generated ${d.toLocaleDateString()} · RENTV.com — Commercial real estate news, Western U.S.`;
-})();
-</script>
-</body></html>
diff --git a/public/compare.html.bak-nav b/public/compare.html.bak-nav
deleted file mode 100644
index 6ef53b2c..00000000
--- a/public/compare.html.bak-nav
+++ /dev/null
@@ -1,167 +0,0 @@
-<!doctype html><html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Deal Comparison — RENTV.com</title>
-<meta name="description" content="Compare RENTV-tracked commercial real estate deals side by side — price, price per unit and per square foot, occupancy and vintage.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--wash:#f5f6f8;--up:#0f8a4d}
-  *{box-sizing:border-box;margin:0}
-  body{font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:#fbfbfc;line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
-  .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:inherit;padding:7px 9px;border-radius:8px}
-  .burger:hover{background:rgba(0,0,0,.06)}
-  .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--sub)}
-  .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em}.brand span{color:var(--red)}
-  .user{width:37px;height:37px;border-radius:50%;border:1.5px solid var(--line);background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink)}
-  .user:hover{border-color:var(--red);color:var(--red)}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800}.drawer .dh .w span{color:var(--red)}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .grp{padding:14px 18px 4px}.grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:var(--red);color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:var(--red);color:#fff;font-weight:700}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-
-  .wrap{max-width:1120px;margin:0 auto;padding:0 22px;width:100%}
-  .chead{padding:34px 0 6px}
-  .chead .k{color:var(--red);font-weight:800;font-size:12px;letter-spacing:.16em;text-transform:uppercase}
-  .chead h1{font-family:'Playfair Display',serif;font-size:clamp(32px,3.6vw,46px);font-weight:700;letter-spacing:-.01em;margin-top:4px}
-  .chead p{color:var(--sub);font-size:15px;margin-top:4px}
-
-  .picker{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin:18px 0 8px}
-  .picker .h{font-size:11px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--sub);margin-bottom:10px}
-  .opts{display:flex;flex-wrap:wrap;gap:8px;max-height:132px;overflow-y:auto;padding-right:4px}
-  .opt{border:1.5px solid var(--line);background:#fff;border-radius:9px;padding:8px 12px;font:600 12.5px 'Inter';color:var(--ink);cursor:pointer;max-width:280px;text-align:left;transition:.14s}
-  .opt:hover{border-color:var(--red)}
-  .opt.on{background:var(--red);border-color:var(--red);color:#fff}
-  .opt .t{display:block;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:250px}
-  .opt .s{display:block;font-size:11px;opacity:.75;margin-top:1px}
-  .hint{color:var(--sub);font-size:12.5px;margin:6px 2px 0}
-
-  .tablewrap{overflow-x:auto;padding:16px 0 60px}
-  table.cmp{width:100%;border-collapse:collapse;min-width:640px}
-  table.cmp th,table.cmp td{text-align:left;padding:13px 14px;border-bottom:1px solid var(--line);vertical-align:top}
-  table.cmp thead th{position:sticky;top:54px;background:#fbfbfc}
-  table.cmp .metric{font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--sub);width:150px;white-space:nowrap}
-  table.cmp .deal-h{font-family:'Playfair Display',serif;font-size:17px;font-weight:800;line-height:1.25}
-  table.cmp .deal-h .tag{display:inline-block;font-family:'Inter';font-size:9px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;background:var(--red);color:#fff;border-radius:20px;padding:2px 8px;margin-bottom:6px;vertical-align:middle}
-  table.cmp td .v{font-weight:700;font-size:15px}
-  table.cmp td .v.big{font-family:'Playfair Display',serif;font-size:20px;color:var(--red)}
-  table.cmp td .v.best{color:var(--up)}
-  table.cmp td .dash{color:#c3c9cf}
-  .empty{padding:44px 0;text-align:center;color:var(--sub)}
-  .empty h3{font-family:'Playfair Display',serif;font-size:23px;color:var(--ink);margin-bottom:6px}
-</style></head><body>
-
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu">
-    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
-    <span class="lbl">Menu</span>
-  </button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <a class="user" href="/search" aria-label="Search" title="Search">
-    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-  </a>
-</header>
-
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><div class="w">REN<span>TV</span></div><button id="dx" aria-label="Close">&times;</button></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/search">Search</a><a href="/pulse">Market Pulse</a><a href="/tools">CRE Toolkit</a><a href="/watchlist">Deal Watchlist</a><a href="/directory">CRE Directory</a><a href="/compare" class="active">Deal Comparison</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial real estate news, Western U.S.</div>
-</aside>
-
-<main class="wrap">
-  <div class="chead">
-    <div class="k">Deal Comparison</div>
-    <h1>Put deals side by side</h1>
-    <p>Pick up to four tracked transactions and compare the numbers that matter — price, per-unit, per-SF, occupancy and vintage.</p>
-  </div>
-
-  <div class="picker">
-    <div class="h">Choose deals to compare <span id="pcount" style="color:var(--red)"></span></div>
-    <div class="opts" id="opts"></div>
-    <div class="hint">Tap to add or remove. Priced deals compare best.</div>
-  </div>
-
-  <div class="tablewrap" id="tablewrap"></div>
-</main>
-
-<script>
-const $=id=>document.getElementById(id);
-const esc=s=>String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-const drawer=$('drawer'),scrim=$('scrim');
-$('burger').onclick=()=>{drawer.classList.add('open');scrim.classList.add('open')};
-const close=()=>{drawer.classList.remove('open');scrim.classList.remove('open')};
-$('dx').onclick=close;scrim.onclick=close;document.addEventListener('keydown',e=>{if(e.key==='Escape')close()});
-
-const MAX=4;
-let ALL=[], pick=[];
-const usd=n=>!isFinite(n)||!n?'—':n>=1e6?('$'+(n/1e6).toFixed(1)+'M'):n>=1e3?('$'+Math.round(n).toLocaleString()):('$'+Math.round(n));
-const num=n=>(isFinite(n)&&n)?Math.round(n).toLocaleString():null;
-
-function sync(){ const u=new URLSearchParams(); if(pick.length)u.set('ids',pick.join(',')); history.replaceState(null,'','/compare'+(pick.length?'?'+u.toString():'')); }
-function toggle(id){ const i=pick.indexOf(id); if(i>=0)pick.splice(i,1); else { if(pick.length>=MAX)return; pick.push(id);} sync(); render(); }
-
-function renderOpts(){
-  $('pcount').textContent=pick.length?`(${pick.length}/${MAX})`:'';
-  $('opts').innerHTML=ALL.map(d=>`<button class="opt${pick.includes(String(d.id))?' on':''}" data-id="${esc(d.id)}"><span class="t">${esc(d.title)}</span><span class="s">${[d.property_type,d.amount_label].filter(Boolean).map(esc).join(' · ')}</span></button>`).join('');
-  $('opts').querySelectorAll('.opt').forEach(b=>b.onclick=()=>toggle(b.dataset.id));
-}
-
-const ROWS=[
-  ['Transaction', d=>d.txn_type||'—'],
-  ['Location', d=>[d.city,d.state].filter(Boolean).join(', ')||'—'],
-  ['Price', d=>usd(d.amount), 'big', d=>d.amount],
-  ['Units', d=>num(d.units)||'—'],
-  ['Rentable SF', d=>num(d.sqft)||'—'],
-  ['Price / unit', d=>(d.amount&&d.units)?usd(d.amount/d.units):'—', 0, d=>(d.amount&&d.units)?d.amount/d.units:null, 'low'],
-  ['Price / SF', d=>(d.amount&&d.sqft)?'$'+Math.round(d.amount/d.sqft).toLocaleString():'—', 0, d=>(d.amount&&d.sqft)?d.amount/d.sqft:null, 'low'],
-  ['Occupancy', d=>d.occupancy_pct?d.occupancy_pct+'%':'—', 0, d=>d.occupancy_pct||null, 'high'],
-  ['Year built', d=>d.year_built||'—', 0, d=>d.year_built||null, 'high'],
-];
-
-function render(){
-  renderOpts();
-  const sel=pick.map(id=>ALL.find(d=>String(d.id)===String(id))).filter(Boolean);
-  if(!sel.length){ $('tablewrap').innerHTML='<div class="empty"><h3>Pick deals to compare</h3><div>Select two or more above to see them side by side.</div></div>'; return; }
-  let html='<table class="cmp"><thead><tr><th class="metric"></th>'+sel.map(d=>`<th><div class="deal-h">${d.property_type?`<span class="tag">${esc(d.property_type)}</span><br>`:''}${esc(d.title)}</div></th>`).join('')+'</tr></thead><tbody>';
-  ROWS.forEach(([label,fn,cls,valFn,dir])=>{
-    let bestIdx=-1;
-    if(valFn&&dir&&sel.length>1){
-      const vals=sel.map(valFn);
-      let best=null; vals.forEach((v,i)=>{ if(v==null)return; if(best==null||(dir==='low'?v<best:v>best)){best=v;bestIdx=i;} });
-    }
-    html+=`<tr><td class="metric">${esc(label)}</td>`+sel.map((d,i)=>{
-      const val=fn(d);
-      const c=(cls==='big'?' big':'')+(i===bestIdx?' best':'');
-      return `<td><span class="v${c}">${val==='—'?'<span class="dash">—</span>':esc(val)}</span></td>`;
-    }).join('')+'</tr>';
-  });
-  html+='</tbody></table>';
-  $('tablewrap').innerHTML=html;
-}
-
-(async function(){
-  try{ ALL=((await (await fetch('/api/deals?limit=200')).json()).deals||[]); }catch(e){ $('opts').innerHTML='<div class="empty"><h3>Deals unavailable</h3></div>'; return; }
-  const ids=(new URLSearchParams(location.search).get('ids')||'').split(',').map(s=>s.trim()).filter(Boolean);
-  const valid=new Set(ALL.map(d=>String(d.id)));
-  pick=ids.filter(id=>valid.has(id)).slice(0,MAX);
-  render();
-})();
-</script>
-</body></html>
diff --git a/public/conferences.html.bak-nav b/public/conferences.html.bak-nav
deleted file mode 100644
index ab7b5077..00000000
--- a/public/conferences.html.bak-nav
+++ /dev/null
@@ -1,146 +0,0 @@
-<!doctype html>
-<html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Conferences — RENTV.com</title>
-<meta name="description" content="RENTV Conferences — the State of the Market Summit franchise for Western-U.S. commercial real estate.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--bg);line-height:1.5}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .ticker{display:flex;gap:20px;overflow:hidden;white-space:nowrap}.ticker b{color:#fff}.up{color:#4ade80}.dn{color:#f87171}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{border-bottom:2px solid var(--ink);padding:20px 0 14px}
-  .mast .wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:3px}
-  .logo{font-family:var(--serif);font-weight:700;font-size:42px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  .datebox{font-size:12px;color:var(--sub);text-align:center}
-  nav{border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:10}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
-  .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
-  .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  @media(max-width:860px){
-    .ham{display:block;margin-left:auto}
-    nav .wrap{height:52px}
-    .navlinks{display:none;position:absolute;top:52px;left:0;right:0;background:#fff;flex-direction:column;align-items:stretch;border-bottom:2px solid var(--ink);box-shadow:0 10px 24px rgba(0,0,0,.14);z-index:30;max-height:78vh;overflow-y:auto}
-    .navlinks.open{display:flex}
-    .navlinks a{padding:15px 20px;border-bottom:1px solid var(--line);border-left:4px solid transparent}
-    .navlinks a:hover,.navlinks a.on{color:var(--red);border-bottom:1px solid var(--line);border-left-color:var(--red)}
-  }
-  .phero{background:linear-gradient(135deg,#111827,#c8102e);color:#fff;padding:54px 0}
-  .phero .k{font-size:12px;letter-spacing:.22em;text-transform:uppercase;opacity:.85;margin-bottom:12px}
-  .phero h1{font-family:var(--serif);font-size:clamp(32px,5vw,52px);line-height:1.08;letter-spacing:-.5px;max-width:20ch}
-  .phero p{max-width:60ch;margin-top:14px;font-size:17px;opacity:.94}
-  .rv{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease}.rv.in{opacity:1;transform:none}
-  @media(prefers-reduced-motion:reduce){.rv{transition:none;opacity:1;transform:none}}
-  section.blk{padding:52px 0;border-bottom:1px solid var(--line)}
-  .eyebrow{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.14em;color:var(--red);margin-bottom:10px}
-  h2.big{font-family:var(--serif);font-size:clamp(26px,3.4vw,38px);line-height:1.12;letter-spacing:-.4px;max-width:24ch}
-  .lead2{max-width:66ch;color:var(--sub);margin-top:12px;font-size:18px}
-  .cols3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:30px}
-  .cols2{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:30px}
-  @media(max-width:860px){.cols3{grid-template-columns:1fr}.cols2{grid-template-columns:1fr}}
-  .tile{border:1px solid var(--line);border-radius:8px;padding:26px 24px;transition:.25s;background:#fff}
-  .tile:hover{transform:translateY(-4px);box-shadow:0 18px 44px rgba(0,0,0,.09);border-color:#cfd4d9}
-  .tile .n{font-family:var(--serif);font-size:15px;color:var(--red)}
-  .tile h3{font-family:var(--serif);font-size:22px;margin:8px 0 8px}
-  .tile p{color:var(--sub);font-size:15px}
-  .tile .price{margin-top:14px;font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--ink)}
-  .statrow{display:flex;flex-wrap:wrap;gap:44px;margin-top:26px}
-  .statrow .v{font-family:var(--serif);font-size:40px;color:var(--red);line-height:1}
-  .statrow .l{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--sub);margin-top:6px}
-  .cta{display:inline-block;background:var(--red);color:#fff;font-weight:800;font-size:13px;text-transform:uppercase;letter-spacing:.06em;padding:13px 26px;border-radius:5px;cursor:pointer;border:0;margin-top:22px}
-  .cta.ghost{background:transparent;color:var(--ink);border:1.5px solid var(--ink)}
-  .cta:hover{filter:brightness(1.06)}
-  .form{max-width:520px;margin-top:26px}
-  .form label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--sub);margin:14px 0 6px}
-  .form input,.form select{width:100%;padding:12px 14px;border:1px solid var(--line);border-radius:5px;font-size:15px;font-family:inherit}
-  .form .ok{display:none;margin-top:14px;padding:12px 16px;background:#ecfdf3;border:1px solid #a7f3d0;border-radius:6px;color:#067647;font-size:14px}
-  .kv{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--line);font-size:15px}.kv b{font-weight:700}
-  footer{background:var(--ink);color:#aeb6bd;margin-top:0;padding:40px 0 30px;font-size:13px}
-  footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:28px}
-  footer .logo{color:#fff;font-size:26px;margin-bottom:8px}footer h5{color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}footer a{display:block;padding:4px 0;color:#aeb6bd}
-  footer .fine{border-top:1px solid #2a2f34;margin-top:26px;padding-top:16px;font-size:12px;color:#7c848b}
-  @media(max-width:860px){footer .cols{grid-template-columns:1fr 1fr}}
-</style></head><body>
-
-  <div class="util"><div class="wrap">
-    <div class="ticker" id="ticker"><span><b>CRE INDEX</b> …</span><span><b>10-YR</b> …</span><span><b>LA OFFICE VAC</b> …</span></div>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a href="/subscribe" class="sub">Subscribe</a></div>
-  </div></div>
-  <header class="mast"><div class="wrap">
-    <a class="logo" href="/">REN<span>TV</span>.com<small>Commercial Real Estate News</small></a>
-    <div class="datebox"><span>Western U.S. Edition</span><br><span id="today"></span></div>
-  </div></header>
-  <nav><div class="wrap">
-    <button class="ham" id="hamBtn" aria-label="Menu" aria-expanded="false">☰</button>
-    <div class="navlinks" id="nav">
-      <a href="/">Home</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences" class="on">Conferences</a><a href="/versions">Versions</a><a href="/blog">Blog</a>
-    </div>
-  </div></nav>
-
-  <div class="phero"><div class="wrap">
-    <div class="k">RENTV Conferences · since 1998</div>
-    <h1>The State of the Market Summit</h1>
-    <p>Where the Western-U.S. commercial real estate community meets — brokers, investors, developers and lenders, live, twice a year. The conference franchise behind RENTV.</p>
-  </div></div>
-  <section class="blk"><div class="wrap">
-    <div class="statrow rv">
-      <div><div class="v">600+</div><div class="l">CRE decision-makers per summit</div></div>
-      <div><div class="v">2×</div><div class="l">Flagship summits a year</div></div>
-      <div><div class="v">25+</div><div class="l">Years convening the market</div></div>
-      <div><div class="v">$175</div><div class="l">Standard delegate pass</div></div>
-    </div>
-  </div></section>
-  <section class="blk"><div class="wrap">
-    <div class="eyebrow rv">Upcoming</div><h2 class="big rv">Two rooms the whole market shows up for.</h2>
-    <div class="cols2">
-      <div class="tile rv"><div class="n">Fall 2026</div><h3>State of the Market — Los Angeles</h3><p>The flagship. Capital-markets outlook, office repositioning, industrial &amp; multifamily deal flow, and the networking that actually closes deals.</p><div class="price">Delegate $175 · Sponsor packages available</div><a class="cta" href="/subscribe">Get date + registration alerts →</a></div>
-      <div class="tile rv"><div class="n">Spring 2027</div><h3>Capital &amp; Development Forum</h3><p>The build-and-finance half of the calendar — construction lending, entitlements, and the projects breaking ground across the West.</p><div class="price">Delegate $175 · Sponsor packages available</div><a class="cta ghost" href="/advertise">Become a sponsor →</a></div>
-    </div>
-  </div></section>
-  <section class="blk"><div class="wrap">
-    <div class="eyebrow rv">Why sponsor</div><h2 class="big rv">Put your firm in front of the room that moves the market.</h2>
-    <p class="lead2 rv">Conference sponsorship pairs naturally with RENTV's newsletter and site audience — the same decision-makers, reached before, during, and after the event. Ask about integrated packages that bundle the summit with sponsored content and newsletter placement.</p>
-    <a class="cta rv" href="/advertise">Request the sponsor kit →</a>
-  </div></section>
-
-  <footer><div class="wrap"><div class="cols">
-    <div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals &amp; conferences across the Western United States since 1998.</p></div>
-    <div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
-    <div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
-    <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
-  </div><div class="fine">© 2026 RENTV.com · 5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045 · (310) 213-6409</div></div></footer>
-<script>
-  var t=document.getElementById('today');if(t)t.textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
-  var hb=document.getElementById('hamBtn');if(hb)hb.addEventListener('click',function(){var o=document.getElementById('nav').classList.toggle('open');hb.setAttribute('aria-expanded',o);});
-  var esc=function(s){return (s||'').replace(/[&<>"]/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c];});};
-  (function(){fetch('/api/ticker').then(function(r){return r.json();}).then(function(t){
-    function cell(m){if(!m||!m.value)return '';var amt=m.change_pct!=null?Math.abs(m.change_pct)+'%':(m.change_bps!=null?Math.abs(m.change_bps)+'bps':'');var arr=m.dir==='up'?' <span class="up">▲'+amt+'</span>':(m.dir==='down'?' <span class="dn">▼'+amt+'</span>':'');return '<span><b>'+esc(m.label)+'</b> '+esc(m.value)+arr+'</span>';}
-    var h=[t.cre_index,t.ten_yr,t.la_office_vac,t.ie_industrial_cap].map(cell).filter(Boolean).join('');
-    var el=document.getElementById('ticker');if(h&&el)el.innerHTML=h;
-  }).catch(function(){});})();
-  var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('in');io.unobserve(e.target);}});},{threshold:.1});
-  document.querySelectorAll('.rv').forEach(function(el){io.observe(el);});
-  document.querySelectorAll('form[data-fakepost]').forEach(function(f){f.addEventListener('submit',function(e){e.preventDefault();var ok=f.querySelector('.ok');if(ok){ok.style.display='block';}f.querySelectorAll('input,select,button').forEach(function(x){if(x.type!=='reset')x.setAttribute('disabled','');});});});
-  // Real newsletter capture → POST /api/subscribe (append-only JSONL; no external send-to-list).
-  document.querySelectorAll('form[data-subscribe]').forEach(function(f){f.addEventListener('submit',function(e){e.preventDefault();
-    var email=(f.querySelector('input[type=email]')||{}).value||'';
-    var name=(f.querySelector('input[data-name]')||{}).value||'';
-    var interest=(f.querySelector('select')||{}).value||'';
-    var ok=f.querySelector('.ok');var btn=f.querySelector('button');if(btn)btn.setAttribute('disabled','');
-    fetch('/api/subscribe',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email:email,name:name,interest:interest,source:f.getAttribute('data-subscribe')||'site'})})
-      .then(function(r){return r.json();}).then(function(j){
-        if(j&&j.ok){if(ok){ok.style.display='block';}f.querySelectorAll('input,select').forEach(function(x){x.setAttribute('disabled','');});}
-        else{if(btn)btn.removeAttribute('disabled');alert((j&&j.error)?('Please enter a valid email — '+j.error):'Could not subscribe, please try again.');}
-      }).catch(function(){if(btn)btn.removeAttribute('disabled');alert('Network error — please try again.');});
-  });});</script>
-<script src="/theme.js"></script>
-</body></html>
\ No newline at end of file
diff --git a/public/cre-talk.html.bak-nav b/public/cre-talk.html.bak-nav
deleted file mode 100644
index 61d27ca1..00000000
--- a/public/cre-talk.html.bak-nav
+++ /dev/null
@@ -1,163 +0,0 @@
-<!doctype html>
-<html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>CRE Talk — RENTV.com</title>
-<meta name="description" content="CRE Talk — RENTV's interview series with the CEOs and principals steering Western-U.S. commercial real estate.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--bg);line-height:1.5}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .ticker{display:flex;gap:20px;overflow:hidden;white-space:nowrap}.ticker b{color:#fff}.up{color:#4ade80}.dn{color:#f87171}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{border-bottom:2px solid var(--ink);padding:20px 0 14px}
-  .mast .wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:3px}
-  .logo{font-family:var(--serif);font-weight:700;font-size:42px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  .datebox{font-size:12px;color:var(--sub);text-align:center}
-  nav{border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:10}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
-  .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
-  .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  @media(max-width:860px){
-    .ham{display:block;margin-left:auto}
-    nav .wrap{height:52px}
-    .navlinks{display:none;position:absolute;top:52px;left:0;right:0;background:#fff;flex-direction:column;align-items:stretch;border-bottom:2px solid var(--ink);box-shadow:0 10px 24px rgba(0,0,0,.14);z-index:30;max-height:78vh;overflow-y:auto}
-    .navlinks.open{display:flex}
-    .navlinks a{padding:15px 20px;border-bottom:1px solid var(--line);border-left:4px solid transparent}
-    .navlinks a:hover,.navlinks a.on{color:var(--red);border-bottom:1px solid var(--line);border-left-color:var(--red)}
-  }
-  .phero{background:linear-gradient(135deg,#111827,#c8102e);color:#fff;padding:54px 0}
-  .phero .k{font-size:12px;letter-spacing:.22em;text-transform:uppercase;opacity:.85;margin-bottom:12px}
-  .phero h1{font-family:var(--serif);font-size:clamp(32px,5vw,52px);line-height:1.08;letter-spacing:-.5px;max-width:20ch}
-  .phero p{max-width:60ch;margin-top:14px;font-size:17px;opacity:.94}
-  .rv{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease}.rv.in{opacity:1;transform:none}
-  @media(prefers-reduced-motion:reduce){.rv{transition:none;opacity:1;transform:none}}
-  section.blk{padding:52px 0;border-bottom:1px solid var(--line)}
-  .eyebrow{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.14em;color:var(--red);margin-bottom:10px}
-  h2.big{font-family:var(--serif);font-size:clamp(26px,3.4vw,38px);line-height:1.12;letter-spacing:-.4px;max-width:24ch}
-  .lead2{max-width:66ch;color:var(--sub);margin-top:12px;font-size:18px}
-  .cols3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:30px}
-  .cols2{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:30px}
-  @media(max-width:860px){.cols3{grid-template-columns:1fr}.cols2{grid-template-columns:1fr}}
-  .tile{border:1px solid var(--line);border-radius:8px;padding:26px 24px;transition:.25s;background:#fff}
-  .tile:hover{transform:translateY(-4px);box-shadow:0 18px 44px rgba(0,0,0,.09);border-color:#cfd4d9}
-  .tile .n{font-family:var(--serif);font-size:15px;color:var(--red)}
-  .tile h3{font-family:var(--serif);font-size:22px;margin:8px 0 8px}
-  .tile p{color:var(--sub);font-size:15px}
-  .tile .price{margin-top:14px;font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--ink)}
-  .statrow{display:flex;flex-wrap:wrap;gap:44px;margin-top:26px}
-  .statrow .v{font-family:var(--serif);font-size:40px;color:var(--red);line-height:1}
-  .statrow .l{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--sub);margin-top:6px}
-  .cta{display:inline-block;background:var(--red);color:#fff;font-weight:800;font-size:13px;text-transform:uppercase;letter-spacing:.06em;padding:13px 26px;border-radius:5px;cursor:pointer;border:0;margin-top:22px}
-  .cta.ghost{background:transparent;color:var(--ink);border:1.5px solid var(--ink)}
-  .cta:hover{filter:brightness(1.06)}
-  .form{max-width:520px;margin-top:26px}
-  .form label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--sub);margin:14px 0 6px}
-  .form input,.form select{width:100%;padding:12px 14px;border:1px solid var(--line);border-radius:5px;font-size:15px;font-family:inherit}
-  .form .ok{display:none;margin-top:14px;padding:12px 16px;background:#ecfdf3;border:1px solid #a7f3d0;border-radius:6px;color:#067647;font-size:14px}
-  .kv{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--line);font-size:15px}.kv b{font-weight:700}
-  footer{background:var(--ink);color:#aeb6bd;margin-top:0;padding:40px 0 30px;font-size:13px}
-  footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:28px}
-  footer .logo{color:#fff;font-size:26px;margin-bottom:8px}footer h5{color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}footer a{display:block;padding:4px 0;color:#aeb6bd}
-  footer .fine{border-top:1px solid #2a2f34;margin-top:26px;padding-top:16px;font-size:12px;color:#7c848b}
-  @media(max-width:860px){footer .cols{grid-template-columns:1fr 1fr}}
-</style></head><body>
-
-  <div class="util"><div class="wrap">
-    <div class="ticker" id="ticker"><span><b>CRE INDEX</b> …</span><span><b>10-YR</b> …</span><span><b>LA OFFICE VAC</b> …</span></div>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a href="/subscribe" class="sub">Subscribe</a></div>
-  </div></div>
-  <header class="mast"><div class="wrap">
-    <a class="logo" href="/">REN<span>TV</span>.com<small>Commercial Real Estate News</small></a>
-    <div class="datebox"><span>Western U.S. Edition</span><br><span id="today"></span></div>
-  </div></header>
-  <nav><div class="wrap">
-    <button class="ham" id="hamBtn" aria-label="Menu" aria-expanded="false">☰</button>
-    <div class="navlinks" id="nav">
-      <a href="/">Home</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/review">The REview</a><a href="/cre-talk" class="on">CRE Talk</a><a href="/conferences">Conferences</a><a href="/versions">Versions</a><a href="/blog">Blog</a>
-    </div>
-  </div></nav>
-
-  <div class="phero"><div class="wrap">
-    <div class="k">The Interview Series</div>
-    <h1>CRE Talk.</h1>
-    <p>Candid, on-the-record conversations with the CEOs, principals and dealmakers steering Western-U.S. commercial real estate — where the market's really headed, from the people moving it.</p>
-  </div></div>
-  <section class="blk"><div class="wrap">
-    <div class="cols3 rv">
-      <div class="tile"><div class="n">Format</div><h3>15–25 minutes</h3><p>One leader, one host, no fluff — the strategy conversation you'd want over coffee, on the record.</p></div>
-      <div class="tile"><div class="n">Guests</div><h3>Regional principals</h3><p>The CEOs and heads of capital markets, development and brokerage across the West.</p></div>
-      <div class="tile"><div class="n">Where</div><h3>On The REview</h3><p>Every episode lives on RENTV's video platform — watch, share, and subscribe for new drops.</p></div>
-    </div>
-  </div></section>
-  <section class="blk"><div class="wrap">
-    <div class="eyebrow rv">Watch</div><h2 class="big rv">From The REview.</h2>
-    <p class="lead2 rv">CRE Talk episodes live on The REview, alongside RENTV's full video catalog — market panels, property features and deal breakdowns. Here's what's fresh right now.</p>
-    <div class="cols3" id="vidgrid" style="margin-top:26px"><p style="color:var(--sub)">Loading the latest videos…</p></div>
-    <a class="cta rv" href="/review" style="margin-top:26px">See the full REview catalog →</a>
-  </div></section>
-  <section class="blk"><div class="wrap">
-    <div class="cols2">
-      <div class="tile rv"><div class="n">Be a guest</div><h3>Have a market view worth 20 minutes?</h3><p>We're always booking principals with something to say about where Western-U.S. CRE is going. Tell us about you.</p>
-        <form class="form" data-fakepost style="margin-top:8px"><label>Name &amp; firm</label><input required placeholder="Name — Firm"><label>Email</label><input type="email" required placeholder="you@company.com"><button class="cta" type="submit">Pitch a segment →</button><div class="ok">✓ Thanks — our producers will be in touch.</div></form>
-      </div>
-      <div class="tile rv"><div class="n">Sponsor the series</div><h3>Put your brand on the conversation.</h3><p>Named sponsorship and pre-roll on CRE Talk reaches the exact decision-makers you want — before, during and after each episode.</p><a class="cta ghost" href="/advertise" style="margin-top:16px">See sponsor options →</a></div>
-    </div>
-  </div></section>
-  <script>
-    (function(){var g=document.getElementById('vidgrid');if(!g)return;
-      fetch('/api/videos').then(function(r){return r.json();}).then(function(d){
-        var items=(d.items||[]).slice(0,6);
-        if(!items.length){g.innerHTML='<p style="color:var(--sub)">Video catalog is refreshing — check back shortly.</p>';return;}
-        g.innerHTML=items.map(function(v){
-          var href=v.view_url||('https://www.rentvreview.com/Videos/View/'+encodeURIComponent(v.id||''));
-          var thumb=v.thumb||(v.yt?('https://img.youtube.com/vi/'+v.yt+'/hqdefault.jpg'):'');
-          return '<a class="tile" href="'+esc(href)+'" target="_blank" rel="noopener" style="padding:0;overflow:hidden">'+
-            '<div style="aspect-ratio:16/9;background:#111 center/cover'+(thumb?(" url('"+esc(thumb)+"')"):'')+'"></div>'+
-            '<div style="padding:16px 18px"><div class="n" style="font-size:11px;letter-spacing:.1em;text-transform:uppercase">'+esc(v.cat||'The REview')+'</div>'+
-            '<h3 style="font-size:18px;margin:6px 0 0">'+esc(v.title||'RENTV video')+'</h3></div></a>';
-        }).join('');
-      }).catch(function(){g.innerHTML='<p style="color:var(--sub)">Video catalog temporarily unavailable.</p>';});
-    })();
-  </script>
-
-  <footer><div class="wrap"><div class="cols">
-    <div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals &amp; conferences across the Western United States since 1998.</p></div>
-    <div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
-    <div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
-    <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
-  </div><div class="fine">© 2026 RENTV.com · 5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045 · (310) 213-6409</div></div></footer>
-<script>
-  var t=document.getElementById('today');if(t)t.textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
-  var hb=document.getElementById('hamBtn');if(hb)hb.addEventListener('click',function(){var o=document.getElementById('nav').classList.toggle('open');hb.setAttribute('aria-expanded',o);});
-  var esc=function(s){return (s||'').replace(/[&<>"]/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c];});};
-  (function(){fetch('/api/ticker').then(function(r){return r.json();}).then(function(t){
-    function cell(m){if(!m||!m.value)return '';var amt=m.change_pct!=null?Math.abs(m.change_pct)+'%':(m.change_bps!=null?Math.abs(m.change_bps)+'bps':'');var arr=m.dir==='up'?' <span class="up">▲'+amt+'</span>':(m.dir==='down'?' <span class="dn">▼'+amt+'</span>':'');return '<span><b>'+esc(m.label)+'</b> '+esc(m.value)+arr+'</span>';}
-    var h=[t.cre_index,t.ten_yr,t.la_office_vac,t.ie_industrial_cap].map(cell).filter(Boolean).join('');
-    var el=document.getElementById('ticker');if(h&&el)el.innerHTML=h;
-  }).catch(function(){});})();
-  var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('in');io.unobserve(e.target);}});},{threshold:.1});
-  document.querySelectorAll('.rv').forEach(function(el){io.observe(el);});
-  document.querySelectorAll('form[data-fakepost]').forEach(function(f){f.addEventListener('submit',function(e){e.preventDefault();var ok=f.querySelector('.ok');if(ok){ok.style.display='block';}f.querySelectorAll('input,select,button').forEach(function(x){if(x.type!=='reset')x.setAttribute('disabled','');});});});
-  // Real newsletter capture → POST /api/subscribe (append-only JSONL; no external send-to-list).
-  document.querySelectorAll('form[data-subscribe]').forEach(function(f){f.addEventListener('submit',function(e){e.preventDefault();
-    var email=(f.querySelector('input[type=email]')||{}).value||'';
-    var name=(f.querySelector('input[data-name]')||{}).value||'';
-    var interest=(f.querySelector('select')||{}).value||'';
-    var ok=f.querySelector('.ok');var btn=f.querySelector('button');if(btn)btn.setAttribute('disabled','');
-    fetch('/api/subscribe',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email:email,name:name,interest:interest,source:f.getAttribute('data-subscribe')||'site'})})
-      .then(function(r){return r.json();}).then(function(j){
-        if(j&&j.ok){if(ok){ok.style.display='block';}f.querySelectorAll('input,select').forEach(function(x){x.setAttribute('disabled','');});}
-        else{if(btn)btn.removeAttribute('disabled');alert((j&&j.error)?('Please enter a valid email — '+j.error):'Could not subscribe, please try again.');}
-      }).catch(function(){if(btn)btn.removeAttribute('disabled');alert('Network error — please try again.');});
-  });});</script>
-<script src="/theme.js"></script>
-</body></html>
\ No newline at end of file
diff --git a/public/deals.html.bak-nav b/public/deals.html.bak-nav
deleted file mode 100644
index c90fd45b..00000000
--- a/public/deals.html.bak-nav
+++ /dev/null
@@ -1,178 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>CRE Deal Listings — RENTV.com</title>
-<meta name="description" content="Live commercial real estate deal listings — sales, leases, financings and developments across the Western U.S., parsed from RENTV.com transaction reporting.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--wash);line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .util .live{display:inline-flex;align-items:center;gap:7px;letter-spacing:.05em;text-transform:uppercase;font-size:11px}
-  .util .dot{width:7px;height:7px;border-radius:50%;background:#22c55e;animation:pulse 2s infinite}
-  @keyframes pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.6)}70%{box-shadow:0 0 0 7px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{background:#fff;border-bottom:2px solid var(--ink);padding:16px 0 12px}
-  .mast .wrap{display:flex;align-items:center;justify-content:space-between}
-  .logo{font-family:var(--serif);font-weight:700;font-size:32px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  nav{background:#fff;border-bottom:1px solid var(--line)}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  .head{padding:30px 0 6px}
-  .head h1{font-family:var(--serif);font-size:34px;letter-spacing:-.5px}
-  .head p{color:var(--sub);font-size:14px;margin-top:4px;max-width:820px}
-  .head .fresh{font-size:12px;color:var(--sub);margin-top:8px}
-  .controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:18px 0 6px}
-  .pill{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:7px 13px;border:1px solid var(--line);border-radius:999px;background:#fff;cursor:pointer;color:var(--sub)}
-  .pill.on{background:var(--ink);color:#fff;border-color:var(--ink)}
-  .controls input[type=search]{margin-left:auto;font-family:var(--sans);font-size:13px;padding:8px 12px;border:1px solid var(--line);border-radius:6px;min-width:200px}
-  .ctl{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub)}
-  .ctl select{font-family:var(--sans);font-size:13px;font-weight:600;text-transform:none;letter-spacing:0;color:var(--ink);padding:7px 10px;border:1px solid var(--line);border-radius:6px;background:#fff;cursor:pointer}
-  .ctl.dens input[type=range]{width:110px;accent-color:var(--red);cursor:pointer}
-  .count{font-size:12px;color:var(--sub);margin:6px 0 16px}
-  .grid{display:grid;grid-template-columns:repeat(var(--cols,3),1fr);gap:16px}
-  .card{background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column;transition:box-shadow .15s,transform .15s}
-  .card:hover{box-shadow:0 8px 24px rgba(0,0,0,.09);transform:translateY(-2px)}
-  .card .ph{aspect-ratio:16/9;background:var(--wash) center/cover no-repeat;position:relative}
-  .card .badges{position:absolute;top:10px;left:10px;display:flex;gap:6px}
-  .badge{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;padding:4px 8px;border-radius:4px;color:#fff;background:var(--ink)}
-  .badge.txn{background:var(--red)}
-  .card .amt{position:absolute;bottom:10px;right:10px;background:rgba(20,23,26,.92);color:#fff;font-family:var(--serif);font-weight:700;font-size:18px;padding:4px 10px;border-radius:5px}
-  .card .body{padding:14px 16px 16px;display:flex;flex-direction:column;gap:8px;flex:1}
-  .card h3{font-family:var(--serif);font-size:17px;line-height:1.25}
-  .card .meta{font-size:12px;color:var(--sub);font-weight:600;display:flex;flex-wrap:wrap;gap:4px 10px}
-  .card .meta b{color:var(--ink)}
-  .card .sum{font-size:13px;color:var(--sub);line-height:1.5}
-  .card .more{margin-top:auto;font-size:12px;font-weight:700;color:var(--red);text-transform:uppercase;letter-spacing:.04em}
-  .empty{background:#fff;border:1px dashed var(--line);border-radius:10px;padding:40px;text-align:center;color:var(--sub)}
-  footer{background:var(--ink);color:#8b939b;margin-top:40px;padding:26px 0;font-size:12px}
-  footer .wrap{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
-  @media(max-width:900px){.grid{grid-template-columns:1fr 1fr}}
-  @media(max-width:600px){.grid{grid-template-columns:1fr!important}.controls input[type=search]{margin-left:0;width:100%}}
-</style>
-</head>
-<body>
-  <div class="util"><div class="wrap">
-    <span class="live"><span class="dot"></span> Live CRE deal flow</span>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a class="sub" href="/subscribe">Subscribe</a></div>
-  </div></div>
-  <header class="mast"><div class="wrap">
-    <a class="logo" href="/">REN<span>TV</span>.com<small>Commercial Real Estate News</small></a>
-  </div></header>
-  <nav><div class="wrap">
-    <a href="/">Home</a><a href="/deals" class="on">Deals</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a>
-  </div></nav>
-  <main class="wrap">
-    <div class="head">
-      <h1>CRE Deal Listings</h1>
-      <p>Every commercial real estate transaction RENTV.com is reporting right now — sales, leases, financings and developments across the Western U.S. — parsed into structured listings with price, property type, size and location. Each card links to the full story.</p>
-      <div class="fresh" id="fresh">Loading…</div>
-    </div>
-    <div class="controls" id="txns"></div>
-    <div class="controls" id="types"></div>
-    <div class="controls">
-      <label class="ctl"><span>Sort</span>
-        <select id="sort">
-          <option value="newest">Newest</option>
-          <option value="price-desc">Price ↓</option>
-          <option value="price-asc">Price ↑</option>
-          <option value="type">Property Type A→Z</option>
-          <option value="loc">Location A→Z</option>
-          <option value="title">Title A→Z</option>
-        </select>
-      </label>
-      <label class="ctl dens"><span>Density</span>
-        <input id="dens" type="range" min="2" max="5" step="1" value="3" aria-label="Grid density (columns)">
-      </label>
-      <input id="q" type="search" placeholder="Search city, property, party…" autocomplete="off">
-    </div>
-    <div class="count" id="count"></div>
-    <div class="grid" id="grid"></div>
-  </main>
-  <footer><div class="wrap"><span>© RENTV.com — Commercial Real Estate News</span><span>Deal listings parsed from live RENTV.com reporting, refreshed every 20 min</span></div></footer>
-<script>
-const $=s=>document.querySelector(s);
-let ALL=[], fTxn='', fType='', fQ='', sVal=(localStorage.getItem('rentv.deals.sort')||'newest');
-const TXNS=['Sale','Lease','Financing','Development'];
-const TYPES=['Multifamily','Office','Industrial','Retail','Hospitality','Mixed-Use','Land'];
-function esc(s){return (s||'').replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));}
-// parse "$12.5M" / "1,250,000" → number (‑1 = no parseable amount, sorts last)
-function amtNum(d){
-  const s=String(d.amount_label||d.amount||'').replace(/[,\s$]/g,'');
-  const m=s.match(/([\d.]+)\s*([KMB])?/i);
-  if(!m) return -1;
-  let n=parseFloat(m[1]); if(isNaN(n)) return -1;
-  const u=(m[2]||'').toUpperCase();
-  if(u==='K')n*=1e3; else if(u==='M')n*=1e6; else if(u==='B')n*=1e9;
-  return n;
-}
-function sortRows(rows){
-  const r=rows.slice();
-  if(sVal==='price-desc') r.sort((a,b)=>amtNum(b)-amtNum(a));
-  else if(sVal==='price-asc') r.sort((a,b)=>{const x=amtNum(a),y=amtNum(b);if(x<0)return 1;if(y<0)return -1;return x-y;});
-  else if(sVal==='type') r.sort((a,b)=>(a.property_type||'').localeCompare(b.property_type||''));
-  else if(sVal==='loc') r.sort((a,b)=>[a.city,a.state].filter(Boolean).join(', ').localeCompare([b.city,b.state].filter(Boolean).join(', ')));
-  else if(sVal==='title') r.sort((a,b)=>(a.title||'').localeCompare(b.title||''));
-  // 'newest' = natural feed order (ALL is already newest-first)
-  return r;
-}
-function pills(host,list,cur,pick){
-  host.innerHTML=`<button class="pill${cur===''?' on':''}" data-v="">All</button>`+
-    list.map(v=>`<button class="pill${cur===v?' on':''}" data-v="${v}">${v}</button>`).join('');
-  host.querySelectorAll('.pill').forEach(b=>b.onclick=()=>{pick(b.dataset.v);});
-}
-function render(){
-  let rows=ALL.filter(d=>
-    (!fTxn||d.txn_type===fTxn)&&(!fType||d.property_type===fType)&&
-    (!fQ||`${d.title} ${d.city} ${d.state} ${d.summary}`.toLowerCase().includes(fQ)));
-  rows=sortRows(rows);
-  $('#count').textContent=`${rows.length} listing${rows.length===1?'':'s'}${fTxn?' · '+fTxn:''}${fType?' · '+fType:''}`;
-  $('#grid').innerHTML=rows.length?rows.map(d=>{
-    const loc=[d.city,d.state].filter(Boolean).join(', ');
-    const ph=d.image?`background-image:url('${esc(d.image)}')`:'';
-    // HARD RULE: never link out to rentv.com. Open the story in OUR in-app reader (/news/:id → article.html).
-    return `<a class="card" href="${d.id?('/news/'+encodeURIComponent(d.id)):'/deals'}">
-      <div class="ph" style="${ph}">
-        <div class="badges"><span class="badge txn">${esc(d.txn_type)}</span><span class="badge">${esc(d.property_type)}</span></div>
-        ${d.amount_label?`<span class="amt">${esc(d.amount_label)}</span>`:''}
-      </div>
-      <div class="body">
-        <h3>${esc(d.title)}</h3>
-        <div class="meta">${loc?`<span>📍 <b>${esc(loc)}</b></span>`:''}${d.size_label?`<span>📐 ${esc(d.size_label)}</span>`:''}${d.year_built?`<span>🏗 ${d.year_built}</span>`:''}${d.occupancy_pct!=null?`<span>${d.occupancy_pct}% leased</span>`:''}</div>
-        ${d.summary?`<div class="sum">${esc(d.summary)}</div>`:''}
-        <div class="more">Read the full deal →</div>
-      </div></a>`;
-  }).join(''):'<div class="empty">No listings match these filters yet. Clear them or check back — the feed refreshes every 20 minutes.</div>';
-}
-(async()=>{
-  try{
-    const d=await (await fetch('/api/deals')).json();
-    ALL=d.deals||[];
-    const ts=d.fetched_at&&new Date(d.fetched_at);
-    $('#fresh').textContent=(ts&&!isNaN(ts))?('Deal flow as of '+ts.toLocaleString()+' · source: RENTV.com'):'';
-  }catch(e){ $('#fresh').textContent='Could not load deal listings — reload to retry.'; }
-  const pickTxn=v=>{fTxn=v;pills($('#txns'),TXNS,fTxn,pickTxn);render();};
-  const pickType=v=>{fType=v;pills($('#types'),TYPES,fType,pickType);render();};
-  pills($('#txns'),TXNS,fTxn,pickTxn);
-  pills($('#types'),TYPES,fType,pickType);
-  $('#q').oninput=e=>{fQ=e.target.value.trim().toLowerCase();render();};
-  // sort + density, persisted (HARD RULE: every data grid gets both)
-  const selSort=$('#sort'), selDens=$('#dens');
-  selSort.value=sVal;
-  selSort.onchange=()=>{sVal=selSort.value;localStorage.setItem('rentv.deals.sort',sVal);render();};
-  const cols0=localStorage.getItem('rentv.deals.cols')||'3';
-  selDens.value=cols0; document.documentElement.style.setProperty('--cols',cols0);
-  selDens.oninput=()=>{document.documentElement.style.setProperty('--cols',selDens.value);localStorage.setItem('rentv.deals.cols',selDens.value);};
-  render();
-})();
-</script>
-</body>
-</html>
diff --git a/public/directory.html.bak-nav b/public/directory.html.bak-nav
deleted file mode 100644
index ece03254..00000000
--- a/public/directory.html.bak-nav
+++ /dev/null
@@ -1,155 +0,0 @@
-<!doctype html><html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>CRE Directory — RENTV.com</title>
-<meta name="description" content="Search the RENTV commercial real estate directory — thousands of California brokerage firms and licensed brokers by name, city and firm.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--wash:#f5f6f8;--up:#0f8a4d}
-  *{box-sizing:border-box;margin:0}
-  body{font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:#fbfbfc;line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
-  .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:inherit;padding:7px 9px;border-radius:8px}
-  .burger:hover{background:rgba(0,0,0,.06)}
-  .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--sub)}
-  .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em}.brand span{color:var(--red)}
-  .user{width:37px;height:37px;border-radius:50%;border:1.5px solid var(--line);background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink)}
-  .user:hover{border-color:var(--red);color:var(--red)}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800}.drawer .dh .w span{color:var(--red)}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .grp{padding:14px 18px 4px}.grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:var(--red);color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:var(--red);color:#fff;font-weight:700}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-
-  .wrap{max-width:1080px;margin:0 auto;padding:0 22px;width:100%}
-  .dhead{padding:34px 0 6px}
-  .dhead .k{color:var(--red);font-weight:800;font-size:12px;letter-spacing:.16em;text-transform:uppercase}
-  .dhead h1{font-family:'Playfair Display',serif;font-size:clamp(32px,3.6vw,46px);font-weight:700;letter-spacing:-.01em;margin-top:4px}
-  .dhead p{color:var(--sub);font-size:15px;margin-top:4px}
-  .tabs{display:flex;gap:6px;margin:18px 0 0;border-bottom:1px solid var(--line)}
-  .tabs button{border:0;background:none;font:800 14px 'Inter';color:var(--sub);padding:11px 4px;margin-right:18px;cursor:pointer;border-bottom:3px solid transparent;letter-spacing:.02em}
-  .tabs button.on{color:var(--ink);border-bottom-color:var(--red)}
-  .sbox{position:relative;margin:16px 0 6px}
-  .sbox svg{position:absolute;left:15px;top:50%;transform:translateY(-50%);color:var(--sub)}
-  .sbox input{width:100%;font:600 16px 'Inter';padding:14px 16px 14px 46px;border:2px solid var(--line);border-radius:11px;outline:0;background:#fff}
-  .sbox input:focus{border-color:var(--red)}
-  .meta{color:var(--sub);font-size:12.5px;font-weight:600;min-height:18px;margin:8px 2px}
-  .rows{padding:4px 0 8px}
-  .row{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;padding:13px 2px;border-bottom:1px solid var(--line)}
-  .row .nm{font:700 15.5px 'Inter'}
-  .row .sub{color:var(--sub);font-size:12.5px;margin-top:2px}
-  .row .r{text-align:right;white-space:nowrap}
-  .row .badge{display:inline-block;font-size:11px;font-weight:800;color:#fff;background:var(--red);border-radius:20px;padding:3px 10px}
-  .row .lic{color:var(--sub);font-size:11px;margin-top:3px;font-variant-numeric:tabular-nums}
-  .row .st{display:inline-block;font-size:10px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;padding:2px 8px;border-radius:20px;background:var(--wash);color:#4a4f55}
-  .row .st.ok{background:rgba(15,138,77,.12);color:var(--up)}
-  .more{display:block;width:100%;margin:14px 0 60px;padding:13px;border:1.5px solid var(--line);border-radius:10px;background:#fff;font:800 13px 'Inter';color:var(--ink);cursor:pointer}
-  .more:hover{border-color:var(--red);color:var(--red)}
-  .more[disabled]{opacity:.5;cursor:default}
-  .empty{padding:44px 0;text-align:center;color:var(--sub)}
-  .empty h3{font-family:'Playfair Display',serif;font-size:23px;color:var(--ink);margin-bottom:6px}
-  .spin{display:inline-block;width:14px;height:14px;border:2px solid var(--line);border-top-color:var(--red);border-radius:50%;animation:sp .7s linear infinite;vertical-align:-2px;margin-right:6px}@keyframes sp{to{transform:rotate(360deg)}}
-</style></head><body>
-
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu">
-    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
-    <span class="lbl">Menu</span>
-  </button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <a class="user" href="/search" aria-label="Search" title="Search">
-    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-  </a>
-</header>
-
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><div class="w">REN<span>TV</span></div><button id="dx" aria-label="Close">&times;</button></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/search">Search</a><a href="/pulse">Market Pulse</a><a href="/tools">CRE Toolkit</a><a href="/watchlist">Deal Watchlist</a><a href="/directory" class="active">CRE Directory</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial real estate news, Western U.S.</div>
-</aside>
-
-<main class="wrap">
-  <div class="dhead">
-    <div class="k">CRE Directory</div>
-    <h1>Every firm &amp; broker, one search</h1>
-    <p>Thousands of California brokerage firms and licensed brokers — search by name, city or firm.</p>
-  </div>
-  <div class="tabs">
-    <button id="tabFirms" class="on" data-tab="firms">Firms</button>
-    <button id="tabBrokers" data-tab="brokers">Brokers</button>
-  </div>
-  <div class="sbox">
-    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-    <input id="q" type="search" autocomplete="off" placeholder="Search firms by name or city…">
-  </div>
-  <div class="meta" id="meta"></div>
-  <section class="rows" id="rows"></section>
-  <button class="more" id="more" style="display:none">Load more</button>
-</main>
-
-<script>
-const $=id=>document.getElementById(id);
-const esc=s=>String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-const cap=s=>String(s||'').toLowerCase().replace(/\b\w/g,c=>c.toUpperCase());
-const drawer=$('drawer'),scrim=$('scrim');
-$('burger').onclick=()=>{drawer.classList.add('open');scrim.classList.add('open')};
-const close=()=>{drawer.classList.remove('open');scrim.classList.remove('open')};
-$('dx').onclick=close;scrim.onclick=close;document.addEventListener('keydown',e=>{if(e.key==='Escape')close()});
-
-const PAGE=25;
-let tab='firms', q='', offset=0, total=0, seq=0;
-
-const p=new URLSearchParams(location.search);
-if(p.get('tab')==='brokers')tab='brokers';
-if(p.get('q'))q=p.get('q');
-$('q').value=q;
-
-function setTab(t){ tab=t; offset=0; $('tabFirms').classList.toggle('on',t==='firms'); $('tabBrokers').classList.toggle('on',t==='brokers'); $('q').placeholder=t==='firms'?'Search firms by name or city…':'Search brokers by name, city or firm…'; sync(); load(true); }
-$('tabFirms').onclick=()=>setTab('firms'); $('tabBrokers').onclick=()=>setTab('brokers');
-
-let timer=null;
-$('q').addEventListener('input',e=>{q=e.target.value.trim();clearTimeout(timer);timer=setTimeout(()=>{offset=0;sync();load(true);},220);});
-
-function sync(){ const u=new URLSearchParams(); u.set('tab',tab); if(q)u.set('q',q); history.replaceState(null,'','/directory?'+u.toString()); }
-
-function firmRow(f){ return `<div class="row"><div><div class="nm">${esc(cap(f.name))}</div><div class="sub">${esc(cap(f.hq_city||f.city||''))}${f.hq_state?', '+esc(f.hq_state):''}</div></div><div class="r">${f.agent_count?`<span class="badge">${(+f.agent_count).toLocaleString()} agents</span>`:''}<div class="lic">DRE #${esc(f.license_no||'—')}</div></div></div>`; }
-function brokerRow(b){ const ok=/active/i.test(b.license_status||''); return `<div class="row"><div><div class="nm">${esc(cap(b.name))}</div><div class="sub">${[cap(b.firm_name||''),cap(b.city||''),b.state_code].filter(Boolean).map(esc).join(' · ')}</div></div><div class="r"><span class="st${ok?' ok':''}">${esc(b.license_status||b.license_type||'Lic')}</span><div class="lic">DRE #${esc(b.license_no||'—')}</div></div></div>`; }
-
-async function load(reset){
-  const my=++seq;
-  if(reset){$('rows').innerHTML='';$('meta').innerHTML='<span class="spin"></span>Searching…';$('more').style.display='none';}
-  const u=new URLSearchParams(); if(q)u.set('q',q); u.set('limit',PAGE); u.set('offset',offset);
-  let d; try{ d=await (await fetch('/api/'+tab+'?'+u.toString())).json(); }catch(e){ if(my===seq){$('meta').textContent='Directory service unavailable — try again.';} return; }
-  if(my!==seq) return;
-  total=d.total||0;
-  const rows=d.rows||[];
-  const html=rows.map(tab==='firms'?firmRow:brokerRow).join('');
-  if(reset)$('rows').innerHTML=html; else $('rows').insertAdjacentHTML('beforeend',html);
-  if(!total){ $('meta').textContent=''; $('rows').innerHTML='<div class="empty"><h3>No '+tab+' found</h3><div>Try a different name or city.</div></div>'; return; }
-  $('meta').innerHTML=`${total.toLocaleString()} ${tab}${q?` matching “${esc(q)}”`:''} · showing ${Math.min(offset+rows.length,total).toLocaleString()}`;
-  offset+=rows.length;
-  $('more').style.display=offset<total?'block':'none';
-}
-$('more').onclick=()=>{ $('more').disabled=true; $('more').textContent='Loading…'; load(false).then(()=>{$('more').disabled=false;$('more').textContent='Load more';}); };
-
-$('tabFirms').classList.toggle('on',tab==='firms'); $('tabBrokers').classList.toggle('on',tab==='brokers');
-$('q').placeholder=tab==='firms'?'Search firms by name or city…':'Search brokers by name, city or firm…';
-load(true);
-</script>
-</body></html>
diff --git a/public/index.html.bak-nav b/public/index.html.bak-nav
deleted file mode 100644
index c5d07dd7..00000000
--- a/public/index.html.bak-nav
+++ /dev/null
@@ -1,319 +0,0 @@
-<!doctype html><html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>RENTV.com — Commercial Real Estate News · Western U.S.</title>
-<meta name="description" content="RENTV.com — commercial real estate news, deals, financing, development and conferences across the Western United States since 1998.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--wash:#f5f6f8;--up:#0f8a4d;--dn:#c8102e}
-  *{box-sizing:border-box;margin:0}
-  body{font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:#fbfbfc;line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
-  .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:inherit;padding:7px 9px;border-radius:8px}
-  .burger:hover{background:rgba(0,0,0,.06)}
-  .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--sub)}
-  .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em}.brand span{color:var(--red)}
-  .user{width:37px;height:37px;border-radius:50%;border:1.5px solid var(--line);background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink)}
-  .user:hover{border-color:var(--red);color:var(--red)}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800}.drawer .dh .w span{color:var(--red)}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .snap{padding:12px 18px;border-bottom:1px solid #1c232b;display:grid;grid-template-columns:1fr 1fr;gap:10px}
-  .snap .m{background:#11161c;border:1px solid #1c232b;border-radius:8px;padding:8px 10px}
-  .snap .m .k{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:#7b848d}.snap .m .v{font-size:15px;font-weight:800;margin-top:2px}.snap .m .v.up{color:#37d67a}.snap .m .v.dn{color:#ff6b6b}
-  .grp{padding:14px 18px 4px}.grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:var(--red);color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:var(--red);color:#fff;font-weight:700}
-  .sechat{display:none;align-items:baseline;gap:14px;flex-wrap:wrap;padding:20px 0 4px;border-bottom:1px solid #e8e4e0;margin-bottom:4px}
-  .sechat.on{display:flex}
-  .sechat h1{font-family:'Playfair Display',serif;font-size:clamp(30px,3vw,42px);font-weight:700;letter-spacing:-.01em}
-  .sechat .ct{color:var(--sub);font-size:13px;font-weight:600}
-  .sechat .all{margin-left:auto;color:var(--red);font-weight:800;font-size:12px;letter-spacing:.06em;text-transform:uppercase}
-  .sechat .all:hover{text-decoration:underline}
-  .empty{padding:60px 0 40px;text-align:center;color:var(--sub)}
-  .empty h3{font-family:'Playfair Display',serif;font-size:26px;color:var(--ink);margin-bottom:8px}
-  .empty a{color:var(--red);font-weight:800}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-  .datastrip{border-bottom:1px solid #e8e4e0;background:#f7f5f2}
-  .datastrip .in{max-width:1240px;margin:0 auto;display:flex;gap:34px;padding:9px 22px;font-size:11px;font-weight:500;letter-spacing:.06em;color:#4a4f55;overflow:hidden;white-space:nowrap}
-  .datastrip .m b{color:#14171a;font-weight:700;margin-left:6px}.datastrip .m b.dn{color:var(--red)}.datastrip .m b.up{color:var(--up)}
-  .datastrip .mp-link{margin-left:auto;white-space:nowrap;color:var(--red);font-weight:800;letter-spacing:.08em;text-transform:uppercase;font-size:10.5px;flex:none}
-  .datastrip .mp-link:hover{text-decoration:underline}
-  .fold{min-height:calc(100vh - 54px);display:flex;flex-direction:column}
-  .wrap{max-width:1240px;margin:0 auto;padding:0 22px;width:100%}
-  .hero{flex:1;display:grid;grid-template-columns:1.55fr 1fr;gap:34px;align-items:center;padding:28px 0}
-  .lead{padding-right:34px;border-right:1px solid #e2ded9}
-  .lead .im{display:block;height:380px;border-radius:6px;margin-bottom:16px;background:#12161a center/cover;box-shadow:inset 0 -90px 70px -50px rgba(0,0,0,.35)}
-  .lead .tag{color:var(--red);font-weight:800;font-size:12px;letter-spacing:.14em;text-transform:uppercase}
-  .lead h1{font-family:'Playfair Display',serif;font-size:clamp(44px,3.9vw,62px);line-height:1.08;margin:9px 0 12px;font-weight:700;letter-spacing:-.01em}
-  .lead .byl{color:#6b7178;font-size:13px}
-  .chipo{display:inline-block;background:var(--red);color:#fff;font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;padding:1px 6px;border-radius:8px;vertical-align:middle;margin-left:6px}
-  .aside{display:flex;flex-direction:column;gap:0}
-  .aside a{display:grid;grid-template-columns:80px 1fr;gap:13px;border-bottom:1px solid #e8e4e0;padding:13px 0}
-  .aside a:first-child{padding-top:0}
-  .aside .im{height:58px;border-radius:5px;background:#12161a center/cover;display:block}
-  .aside .tag{font-size:9px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.aside h4{font:600 14px/1.32 'Inter';margin-top:3px}
-  .breaking{background:#0b0e12;color:#fff;border-top:3px solid var(--red)}
-  .breaking .in{max-width:1240px;margin:0 auto;display:flex;align-items:stretch;height:52px}
-  .breaking .lbl{background:var(--red);display:flex;align-items:center;gap:9px;padding:0 20px;font-weight:800;font-size:12px;letter-spacing:.18em;text-transform:uppercase;white-space:nowrap;flex:none}
-  .breaking .lbl .dot{width:8px;height:8px;border-radius:50%;background:#fff;animation:bp 1.1s infinite}@keyframes bp{50%{opacity:.3;transform:scale(.8)}}
-  .ticker{position:relative;overflow:hidden;flex:1}
-  .ticker .track{display:flex;align-items:center;height:100%;white-space:nowrap;animation:bs 52s linear infinite;will-change:transform}
-  .ticker:hover .track{animation-play-state:paused}
-  @keyframes bs{from{transform:translateX(0)}to{transform:translateX(-50%)}}
-  .ticker .it{display:inline-flex;align-items:center;gap:11px;padding:0 24px;height:100%;color:#c3cbd3;font-size:14px;font-weight:600;cursor:pointer;border-right:1px solid #1a2129;transition:background .14s,color .14s}
-  .ticker .it .c{font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:2px 8px;border-radius:20px;background:#161d25;color:#8b939b}
-  .ticker .it:hover{background:rgba(200,16,46,.16);color:#fff}.ticker .it:hover .c{background:var(--red);color:#fff}
-  .ticker .it.sel{background:var(--red);color:#fff}.ticker .it.sel .c{background:#fff;color:var(--red)}
-  .ticker .paused{position:absolute;right:16px;top:50%;transform:translateY(-50%);z-index:3;font-size:9px;font-weight:700;letter-spacing:.16em;color:rgba(255,255,255,.5);opacity:0;transition:opacity .3s;pointer-events:none}
-  .ticker:hover .paused{opacity:1}
-  .ticker .fade{position:absolute;top:0;bottom:0;width:64px;pointer-events:none;z-index:2}
-  .ticker .fade.l{left:0;background:linear-gradient(90deg,#0b0e12,transparent)}.ticker .fade.r{right:0;background:linear-gradient(270deg,#0b0e12,transparent)}
-  .selbar{max-width:1240px;margin:0 auto;display:none;padding:12px 22px;background:#11161c;color:#e7ecf1;border-top:1px solid #1c232b;align-items:center;gap:14px}
-  .selbar.on{display:flex}.selbar .c{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;background:var(--red);padding:3px 9px;border-radius:20px}
-  .selbar a{color:#fff;font-weight:700}.selbar a:hover{text-decoration:underline}.selbar .x{margin-left:auto;background:none;border:0;color:#8b939b;cursor:pointer;font-size:18px}
-  .sec{padding:34px 0}
-  h2.rule{font-size:13px;text-transform:uppercase;letter-spacing:.09em;border-top:2px solid var(--ink);padding-top:10px;margin-bottom:16px;font-weight:800}
-  .river{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
-  .river .im{height:130px;border-radius:5px;background:#12161a center/cover;display:block;margin-bottom:8px}
-  .river .tag{font-size:10px;font-weight:800;text-transform:uppercase}.river h4{font:600 15px/1.25 'Inter';margin-top:3px}
-  .cta{background:var(--red);color:#fff;border-radius:10px;padding:26px;display:flex;gap:16px;align-items:center;flex-wrap:wrap;justify-content:center;margin:26px 0 40px}
-  .cta h3{font-family:'Playfair Display',serif;font-size:23px}
-  .cta input{flex:1;min-width:240px;max-width:340px;border:0;border-radius:6px;padding:12px 14px;font:inherit}
-  .cta button{background:#0b0e12;color:#fff;border:0;border-radius:6px;padding:12px 22px;font-weight:800;cursor:pointer}
-  .cta .ok{display:none;font-weight:700}
-  footer{background:#0b0e12;color:#8b939b;padding:30px 0;font-size:12px}
-  footer .cols{max-width:1240px;margin:0 auto;padding:0 22px;display:grid;grid-template-columns:2fr 1fr 1fr 1fr 1fr;gap:20px}
-  footer h5{color:#e7ecf1;font-size:12px;text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
-  footer a{display:block;color:#9aa4ad;padding:3px 0}footer .logo{font-family:'Playfair Display',serif;font-size:22px;font-weight:800;color:#fff}footer .logo span{color:var(--red)}
-  .fine{max-width:1240px;margin:18px auto 0;padding:14px 22px 0;border-top:1px solid #1c232b;color:#6b747d}
-  @media(max-width:900px){.hero,.river,footer .cols{grid-template-columns:1fr}.lead{padding-right:0;border-right:0}.river{grid-template-columns:1fr 1fr}}
-
-  /* ---------- href-to-deeper-data: category drill chips (facet → ?cat=) ---------- */
-  /* In-card cat values are drill atoms, not nested <a> (cards are already article links). */
-  .drill{cursor:pointer;border:0;background:none;font:inherit;color:inherit}
-  .drill:hover{text-decoration:underline}
-  /* Ticker cat chip drills the feed; keep it visually a chip but clickable to filter. */
-  .ticker .it .c.drill:hover{background:var(--red);color:#fff;text-decoration:none}
-
-  /* ---------- CRE Market Pulse embed (dark rates terminal on the light homepage) ---------- */
-  .mp{background:linear-gradient(180deg,#0b0f16,#080b11);border:1px solid #1c2536;border-radius:14px;color:#e8edf5;padding:22px 22px 20px;margin:8px 0 6px;
-    --mp-mono:"SFMono-Regular",ui-monospace,"JetBrains Mono","Menlo",Consolas,monospace}
-  .mp .mp-top{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:16px}
-  .mp .mp-k{color:#f0b429;font-weight:800;font-size:11px;letter-spacing:.16em;text-transform:uppercase}
-  .mp .mp-h{font-family:'Playfair Display',serif;font-size:clamp(22px,2.4vw,30px);font-weight:700;letter-spacing:-.01em;margin-top:3px}
-  .mp .mp-sub{color:#8a97ad;font-size:12px;margin-top:2px}
-  .mp .mp-view{color:#38bdf8;font-weight:800;font-size:12px;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}
-  .mp .mp-view:hover{text-decoration:underline}
-  .mp .mp-kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:10px}
-  .mp .mp-kpi{background:linear-gradient(180deg,#111826,#0e131c);border:1px solid #1c2536;border-radius:10px;padding:12px 13px;position:relative;overflow:hidden}
-  .mp .mp-kpi::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:#38bdf8;opacity:.5}
-  .mp .mp-kpi.up::after{background:#22c55e}.mp .mp-kpi.down::after{background:#f04141}.mp .mp-kpi.flat::after{background:#8a97ad}
-  .mp .mp-kpi .l{font-size:10px;letter-spacing:1.1px;text-transform:uppercase;color:#5b6879}
-  .mp .mp-kpi .v{font-family:var(--mp-mono);font-size:21px;font-weight:600;margin-top:6px;font-variant-numeric:tabular-nums}
-  .mp .mp-kpi .d{margin-top:6px;display:inline-flex;align-items:center;gap:4px;font-family:var(--mp-mono);font-size:11px;padding:2px 7px;border-radius:6px;font-variant-numeric:tabular-nums}
-  .mp .mp-kpi.up .d{color:#22c55e;background:rgba(34,197,94,.14)}.mp .mp-kpi.down .d{color:#f04141;background:rgba(240,65,65,.14)}.mp .mp-kpi.flat .d{color:#8a97ad;background:rgba(138,151,173,.12)}
-  .mp .mp-funds{display:flex;gap:26px;flex-wrap:wrap;margin-top:16px;padding-top:14px;border-top:1px solid #161d2b}
-  .mp .mp-fund .fl{font-size:10px;letter-spacing:1px;text-transform:uppercase;color:#5b6879}
-  .mp .mp-fund .fv{font-family:var(--mp-mono);font-size:19px;font-weight:600;color:#f0b429;margin-top:3px}
-  .mp .mp-fund .fm{font-size:11px;color:#8a97ad;margin-top:1px}
-  @media(max-width:900px){.mp .mp-kpis{grid-template-columns:repeat(3,1fr)}}
-  @media(max-width:560px){.mp .mp-kpis{grid-template-columns:repeat(2,1fr)}}
-</style></head>
-<body>
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M3 6h18M3 12h18M3 18h18"/></svg><span class="lbl">Menu</span></button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <button class="user" id="user" title="Sign in" aria-label="Sign in"><svg width="19" height="19" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="8" r="3.5"/><path d="M4.5 20a7.5 7.5 0 0 1 15 0" stroke-linecap="round"/></svg></button>
-</header>
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><span class="w">REN<span>TV</span></span><button id="dclose" aria-label="Close">✕</button></div>
-  <div class="snap" id="snap"></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/hub" style="font-weight:700">✨ Intelligence Hub — all tools</a><a href="/search">🔎 Search</a><a href="/market-pulse">📈 Rates &amp; Capital Markets</a><a href="/pulse">📊 Market Pulse</a><a href="/sector">🏙️ Sector Deep-Dives</a><a href="/metros">📍 Deal Flow by Metro</a><a href="/tools">🧮 CRE Toolkit</a><a href="/watchlist">⭐ Deal Watchlist</a><a href="/directory">🏢 CRE Directory</a><a href="/compare">⚖️ Deal Comparison</a><a href="/brief">📰 The RENTV Brief</a><a href="/syndicate">📡 Syndicate</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial Real Estate News across the Western U.S. since 1998.</div>
-</aside>
-
-<div class="fold">
-  <div class="datastrip"><div class="in" id="datastrip"></div></div>
-  <main class="wrap"><div class="sechat" id="sechat"></div><section class="hero"><div class="lead" id="lead"></div><div class="aside" id="aside"></div></section></main>
-  <div class="selbar" id="selbar"></div>
-  <div class="breaking"><div class="in"><div class="lbl"><span class="dot"></span> Breaking</div>
-    <div class="ticker" id="ticker"><div class="fade l"></div><div class="fade r"></div><span class="paused">Paused · hover to browse</span><div class="track" id="track"></div></div></div></div>
-</div>
-
-<main class="wrap">
-  <section class="sec" style="padding-bottom:8px">
-    <style>
-      .vidrow{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(280px,1fr);gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;padding:4px 2px 14px;-webkit-overflow-scrolling:touch}
-      .vidrow::-webkit-scrollbar{height:8px}.vidrow::-webkit-scrollbar-thumb{background:#c8102e;border-radius:4px}
-      .vidcard{scroll-snap-align:start;position:relative;border-radius:12px;overflow:hidden;background:#0b1017;border:1px solid #1c2941}
-      .vidcard video{width:100%;aspect-ratio:1/1;object-fit:cover;display:block;background:#05080c}
-      .vc-badge{position:absolute;top:10px;left:10px;background:#c8102e;color:#fff;font-weight:800;font-size:11px;letter-spacing:.14em;padding:4px 9px;border-radius:4px;pointer-events:none}
-      .vc-title{padding:10px 12px;font-size:14px;font-weight:700;line-height:1.25;color:#0b1017}
-      .vidhead{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
-      .vidhead a{font-size:13px;font-weight:600;color:#c8102e;text-decoration:none;white-space:nowrap}
-    </style>
-    <div class="vidhead"><h2 class="rule" style="margin-bottom:0">Deal Wire · Video</h2><a href="/press">Full video library →</a></div>
-    <div class="vidrow">
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news12.jpg" src="/vid/news-wire/news12.mp4"></video><div class="vc-title">Santa Monica Multifamily Fetches $928k Per Unit</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news11.jpg" src="/vid/news-wire/news11.mp4"></video><div class="vc-title">Longpoint Closes $34.6M Arizona Industrial Buy</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news0.jpg" src="/vid/news-wire/news0.mp4"></video><div class="vc-title">$81M Refi — Denver-Area Multifamily</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news1.jpg" src="/vid/news-wire/news1.mp4"></video><div class="vc-title">Washington Industrial Sells for $174M</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news2.jpg" src="/vid/news-wire/news2.mp4"></video><div class="vc-title">Granite Towers Buys 229-Unit Texas Multifamily</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news3.jpg" src="/vid/news-wire/news3.mp4"></video><div class="vc-title">SFF Realty Buys 104k sf Silicon Valley Office/R&D</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news4.jpg" src="/vid/news-wire/news4.mp4"></video><div class="vc-title">Swig Company Refis SF Office High-Rise</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news5.jpg" src="/vid/news-wire/news5.mp4"></video><div class="vc-title">Tailwind Spends $65M on Two Sacramento Properties</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news6.jpg" src="/vid/news-wire/news6.mp4"></video><div class="vc-title">Oxnard Senior-Living Facility Lands New Owner</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news7.jpg" src="/vid/news-wire/news7.mp4"></video><div class="vc-title">Velo3D Leases 289k sf Bay Area Manufacturing Space</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news8.jpg" src="/vid/news-wire/news8.mp4"></video><div class="vc-title">Fresno Multifamily Sale Hits $177k Per Unit</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news9.jpg" src="/vid/news-wire/news9.mp4"></video><div class="vc-title">Gilbert, AZ Multifamily Refinanced for $51.8M</div></div>
-      <div class="vidcard"><span class="vc-badge">RENTV NEWS</span><video preload="none" playsinline controls poster="/vid/news-wire/news10.jpg" src="/vid/news-wire/news10.mp4"></video><div class="vc-title">Downtown Long Beach Retail Portfolio Fetches $30M</div></div>
-    </div>
-  </section>
-
-  <section class="sec" style="padding-bottom:0">
-    <a class="mp" id="mpEmbed" href="/market-pulse" style="display:block">
-      <div class="mp-top">
-        <div>
-          <div class="mp-k">CRE Market Pulse</div>
-          <div class="mp-h">Rates &amp; Capital Markets</div>
-          <div class="mp-sub">U.S. Treasury curve · credit spreads · SoCal fundamentals — live</div>
-        </div>
-        <span class="mp-view">View full pulse →</span>
-      </div>
-      <div class="mp-kpis" id="mpKpis"></div>
-      <div class="mp-funds" id="mpFunds"></div>
-    </a>
-  </section>
-<section class="sec"><h2 class="rule">Across the market</h2><div class="river" id="river"></div></section>
-  <div class="cta"><h3>The morning CRE briefing, in your inbox.</h3><input id="email" type="email" placeholder="you@company.com"><button id="subbtn">Subscribe</button><span class="ok" id="subok">✓ You're in.</span></div>
-</main>
-<footer><div class="cols">
-  <div><div class="logo">REN<span>TV</span>.com</div><p style="max-width:34ch;margin-top:8px">Commercial real estate news, deals &amp; conferences across the Western United States since 1998.</p></div>
-  <div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/la-commercial">LA Commercial</a></div>
-  <div><h5>Intelligence</h5><a href="/markets">Markets</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></div>
-  <div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe</a></div>
-  <div><h5>Follow</h5><a href="https://www.instagram.com/therentv.com_/" target="_blank" rel="noopener noreferrer">Instagram</a><a href="https://www.facebook.com/Rentv.comInc/" target="_blank" rel="noopener noreferrer">Facebook</a><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn</a></div>
-</div><div class="fine">© 2026 RENTV.com · Headlines refreshed live from rentv.com · <span id="src"></span></div></footer>
-<script src="/drill.js"></script>
-<script>
-const $=s=>document.getElementById(s), esc=s=>(s||'').replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-const bg=o=>(o&&o.image)?(' style="background-image:url(\''+esc(o.image)+'\')"'):'';
-const LK=x=>(x.orig?'/post/':'/news/')+encodeURIComponent(x.id);
-// ── href-to-deeper-data adapter (drill.js atom contract, adapted to this app's single-facet
-//    ?cat= server model). The category is already a URL-addressable facet: the drawer links
-//    /sales, /development … 301 to /?cat=Sales, and load() filters ALL by the ?cat= value.
-//    So every DISPLAYED cat value becomes a real drill to that filtered feed. Cards are already
-//    <a href="/news/…"> article links → the in-card cat chip is a <span class="drill"> (delegated,
-//    stopPropagation), never a nested <a>. drill.js's qstr/readURL/writeURL are file-scope over a
-//    multi-field FIELDS/FIL model; here the single facet is `cat`, so we keep the atom's
-//    data-filter="cat"/data-v contract but drive it through the existing ?cat= URL. ──
-const catURL=v=>(v?('?cat='+encodeURIComponent(v)):location.pathname);
-// catChip(value) → a <span> drill atom (used INSIDE <a> cards); clicking filters the feed to that
-// category and reflects into the URL (deep-link/back-button). Falls back to '' for a blank cat.
-const catChip=(v,cls,label)=>{ if(v==null||v==='')return esc(label!=null?label:'');
-  return `<span class="drill ${cls||''}" data-filter="cat" data-v="${esc(v)}" role="link" tabindex="0" title="Filter to ${esc(v)}">${esc(label!=null?label:v)}</span>`; };
-// Delegated: a cat drill atom sets the ?cat= facet (full-page nav to the filtered feed). Because
-// the atom lives inside an <a> article card, stopPropagation + preventDefault keep the card link
-// from also firing. A cmd/ctrl click still opens the filtered view in this tab (no nested <a>).
-document.addEventListener('click',e=>{ const d=e.target.closest('.drill[data-filter="cat"]'); if(!d)return;
-  e.preventDefault(); e.stopPropagation(); const v=d.dataset.v||'';
-  const cur=(new URLSearchParams(location.search).get('cat')||'');
-  // toggle: clicking the currently-active category clears back to the full homepage
-  location.href=(cur.toLowerCase()===v.toLowerCase())?location.pathname:catURL(v);
-});
-document.addEventListener('keydown',e=>{ if(e.key!=='Enter'&&e.key!==' ')return;
-  const d=e.target.closest&&e.target.closest('.drill[data-filter="cat"]'); if(!d)return;
-  e.preventDefault(); e.stopPropagation(); location.href=catURL(d.dataset.v||''); });
-$('burger').onclick=()=>{$('scrim').classList.add('open');$('drawer').classList.add('open');};
-const closeDrawer=()=>{$('scrim').classList.remove('open');$('drawer').classList.remove('open');};
-$('dclose').onclick=closeDrawer;$('scrim').onclick=closeDrawer;
-$('user').onclick=()=>{$('scrim').classList.add('open');$('drawer').classList.add('open');};
-async function jget(url){try{const r=await fetch(url,{credentials:'same-origin'});if(!r.ok)return null;return await r.json();}catch(e){return null;}}
-let ALL=[];
-// Canonical section labels — the drawer/footer link to /sales, /development, … which the
-// server 301s to /?cat=Sales, /?cat=Development, …  Match the exact cat tags in the live feed.
-const SECTIONS={sales:'Sales',leases:'Leases',financing:'Financing',development:'Development',multifamily:'Multifamily',industrial:'Industrial',retail:'Retail'};
-const rawCat=(new URLSearchParams(location.search).get('cat')||'').trim();
-const CAT=rawCat?(SECTIONS[rawCat.toLowerCase()]||rawCat):''; // canonical label, or '' for the full homepage
-if(CAT){
-  document.title=CAT+' — RENTV.com Commercial Real Estate News';
-  // Highlight the matching section in the drawer so the open section is obvious.
-  document.querySelectorAll('.drawer nav a').forEach(a=>{
-    if((a.getAttribute('href')||'').toLowerCase()==='/'+CAT.toLowerCase()) a.classList.add('active');
-  });
-}
-async function load(){
-  const [d,pd]=await Promise.all([jget('/api/news'),jget('/api/posts?status=published')]);
-  const news=(d&&d.items)||[], orig=((pd&&pd.items)||[]).map(p=>({id:p.id,title:p.title,cat:p.cat,image:p.image,author:p.author,orig:true}));
-  ALL=orig.concat(news);
-  // A "section" IS the live feed filtered to one category (server-side model in server.js). When
-  // ?cat= is set we render only that slice — that's what makes each hamburger link show DIFFERENT info.
-  const view=CAT?ALL.filter(x=>x&&String(x.cat||'').toLowerCase()===CAT.toLowerCase()):ALL;
-  const sh=$('sechat');
-  if(CAT&&sh){
-    sh.innerHTML=`<h1>${esc(CAT)}</h1><span class="ct">${view.length} ${view.length===1?'story':'stories'}</span><a class="all" href="/">All news ↗</a>`;
-    sh.classList.add('on');
-  }
-  if(!view.length){
-    // Either the wire is empty (homepage) or this section has no current stories.
-    $('lead').innerHTML='';$('aside').innerHTML='';$('river').innerHTML='';$('track').innerHTML='';
-    if(CAT){$('lead').innerHTML=`<div class="empty"><h3>No current ${esc(CAT)} stories</h3><div>This section refreshes from the live wire. <a href="/">Browse all news →</a></div></div>`;}
-    else{$('lead').innerHTML='<div class="tag">RENTV.com</div><h1>Live commercial real estate news, refreshing…</h1><div class="byl">If this persists, the wire is briefly unavailable — please reload.</div>';}
-    return;
-  }
-  // lead with the top story that HAS an image (never a blank-image placeholder); keep the rest in order
-  const li=view.findIndex(x=>x&&x.image); const lead=li>=0?view[li]:view[0];
-  const rest=view.filter((_,i)=>i!==(li>=0?li:0));
-  const l=lead;
-  $('lead').innerHTML=`<div class="im"${bg(l)}></div><span class="tag">${l.cat?catChip(l.cat):'RENTV'}${l.orig?'<span class="chipo">Original</span>':''}</span><h1>${esc(l.title)}</h1><div class="byl">${l.orig?'By '+esc(l.author||'RENTV Staff')+' · RENTV Original':'By RENTV Staff · live from rentv.com'}</div>`;
-  $('lead').style.cursor='pointer';$('lead').onclick=()=>location.href=LK(l);
-  $('aside').innerHTML=rest.slice(0,4).map(n=>`<a href="${LK(n)}"><div class="im"${bg(n)}></div><div><span class="tag" style="color:var(--red)">${catChip(n.cat,'','')||''}</span><h4>${esc(n.title)}</h4></div></a>`).join('');
-  const items=view.slice(0,16), mk=n=>`<a class="it" data-id="${esc(n.id)}" data-cat="${esc(n.cat||'')}" data-title="${esc(n.title)}" data-href="${LK(n)}"><span class="c ${n.cat?'drill':''}"${n.cat?` data-filter="cat" data-v="${esc(n.cat)}" role="link" tabindex="0" title="Filter to ${esc(n.cat)}"`:''}>${esc(n.cat||'')}</span>${esc(n.title)}</a>`;
-  $('track').innerHTML=items.map(mk).join('')+items.map(mk).join('');
-  const selbar=$('selbar');
-  $('track').querySelectorAll('.it').forEach(a=>a.addEventListener('click',e=>{e.preventDefault();
-    $('track').querySelectorAll('.it').forEach(x=>x.classList.remove('sel'));$('track').querySelectorAll('.it[data-id="'+a.dataset.id+'"]').forEach(x=>x.classList.add('sel'));
-    selbar.innerHTML=`<span class="c">${esc(a.dataset.cat)}</span><a href="${a.dataset.href}">${esc(a.dataset.title)}</a><button class="x" aria-label="close">✕</button>`;selbar.classList.add('on');
-    selbar.querySelector('.x').onclick=ev=>{ev.stopPropagation();selbar.classList.remove('on');$('track').querySelectorAll('.it').forEach(x=>x.classList.remove('sel'));};}));
-  $('river').innerHTML=rest.slice(4,12).map(n=>`<a href="${LK(n)}"><div class="im"${bg(n)}></div><span class="tag" style="color:var(--red)">${catChip(n.cat,'','')||''}</span><h4>${esc(n.title)}</h4></a>`).join('');
-  if(d&&d.fetched_at){$('src').textContent='last pull '+new Date(d.fetched_at).toLocaleTimeString();}
-}
-async function loadTicker(){
-  const t=await jget('/api/ticker'); if(!t)return;
-  const metrics=Object.values(t).filter(m=>m&&m.label&&m.value!=null);
-  const cell=m=>{const cls=m.dir==='up'?'up':m.dir==='down'?'dn':'';const chg=m.change_pct!=null?` ${m.change_pct>0?'+':''}${m.change_pct}%`:'';return `<span class="m">${esc(m.label)}<b class="${cls}">${esc(m.value)}${chg}</b></span>`;};
-  $('datastrip').innerHTML=metrics.map(cell).join('')+'<a class="mp-link" href="/market-pulse">CRE Market Pulse →</a>';
-  $('snap').innerHTML=metrics.map(m=>`<div class="m"><div class="k">${esc(m.label)}</div><div class="v ${m.dir==='up'?'up':m.dir==='down'?'dn':''}">${esc(m.value)}</div></div>`).join('');
-}
-$('subbtn').onclick=function(){var em=($('email').value||'').trim();if(!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(em)){$('email').focus();return;}
-  this.setAttribute('disabled','');fetch('/api/subscribe',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email:em,source:'homepage'})}).then(r=>r.json()).then(j=>{if(j&&j.ok){$('subok').style.display='inline';$('email').setAttribute('disabled','');}else this.removeAttribute('disabled');}).catch(()=>this.removeAttribute('disabled'));};
-async function loadPulseEmbed(){
-  const box=$('mpEmbed'); if(!box)return;
-  const d=await jget('/api/markets');
-  if(!d||!Array.isArray(d.curve)||!d.curve.length){box.style.display='none';return;}
-  const arr=x=>x==='up'?'▲':x==='down'?'▼':'●';
-  const nb=s=>{const n=parseFloat(String(s).replace(/[^0-9.\-]/g,''));return isNaN(n)?0:n;};
-  const curve=(d.curve||[]).map(c=>`<div class="mp-kpi ${esc(c.dir)}"><div class="l">${esc(c.label)} UST</div><div class="v">${esc(c.value)}</div><div class="d">${arr(c.dir)} ${Math.abs(c.change_bps||0)} bps</div></div>`);
-  const spreads=(d.spreads||[]).map(s=>`<div class="mp-kpi ${esc(s.dir)}"><div class="l">${esc(s.label)}</div><div class="v">${esc(String(s.value).replace(/\s*bps/,''))}<span style="font-size:12px;color:#5b6879"> bps</span></div><div class="d">${arr(s.dir)} ${nb(s.value)>=0?'steepening':'inverted'}</div></div>`);
-  $('mpKpis').innerHTML=curve.concat(spreads).join('');
-  $('mpFunds').innerHTML=(d.fundamentals||[]).map(f=>`<div class="mp-fund"><div class="fl">${esc(f.label)}</div><div class="fv">${esc(f.value)}</div><div class="fm">As of ${esc(f.as_of)} · ${esc(f.source)}</div></div>`).join('');
-  box.style.display='block';
-}
-load(); setInterval(load,120000); loadTicker(); setInterval(loadTicker,120000); loadPulseEmbed(); setInterval(loadPulseEmbed,120000);
-</script>
-</body></html>
diff --git a/public/la-commercial.html.bak-nav b/public/la-commercial.html.bak-nav
deleted file mode 100644
index 312a48f9..00000000
--- a/public/la-commercial.html.bak-nav
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>LA Commercial Property Intelligence — RENTV.com</title>
-<meta name="description" content="Los Angeles commercial real estate property intelligence — marquee assets, recorded activity, and the region's largest brokerages. RENTV.com.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--up:#0f8a4d;--dn:#c8102e;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--wash);line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .util .live{display:inline-flex;align-items:center;gap:7px;letter-spacing:.05em;text-transform:uppercase;font-size:11px}
-  .util .dot{width:7px;height:7px;border-radius:50%;background:#22c55e;animation:pulse 2s infinite}
-  @keyframes pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.6)}70%{box-shadow:0 0 0 7px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{background:#fff;border-bottom:2px solid var(--ink);padding:16px 0 12px}
-  .mast .wrap{display:flex;align-items:center;justify-content:space-between}
-  .logo{font-family:var(--serif);font-weight:700;font-size:32px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  nav{background:#fff;border-bottom:1px solid var(--line)}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  .head{padding:30px 0 6px}
-  .head h1{font-family:var(--serif);font-size:34px;letter-spacing:-.5px}
-  .head p{color:var(--sub);font-size:14px;margin-top:4px;max-width:760px}
-  .head .fresh{font-size:12px;color:var(--sub);margin-top:8px}
-  section{margin:26px 0}
-  h2.sec{font-size:14px;text-transform:uppercase;letter-spacing:.08em;border-top:3px solid var(--ink);padding-top:10px;margin-bottom:14px}
-  .assets{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
-  .asset{background:#fff;border:1px solid var(--line);border-radius:8px;padding:16px 18px}
-  .asset .tag{font-size:11px;color:var(--red);text-transform:uppercase;letter-spacing:.05em;font-weight:700}
-  .asset .v{font-family:var(--serif);font-size:26px;font-weight:700;margin:4px 0 2px}
-  .asset .a{font-size:14px;font-weight:600}
-  .asset .brief{font-size:13px;color:var(--sub);margin-top:8px;line-height:1.5}
-  table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:8px;overflow:hidden}
-  th,td{text-align:left;padding:10px 14px;font-size:13px;border-bottom:1px solid var(--line)}
-  th{background:var(--wash);text-transform:uppercase;font-size:11px;letter-spacing:.05em;color:var(--sub)}
-  td.n{font-weight:600} td.v{font-family:var(--serif);font-weight:700}
-  .firms{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
-  .firm{background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px}
-  .firm .fn{font-size:14px;font-weight:700;line-height:1.25} .firm .fa{font-size:13px;color:var(--red);font-weight:700;margin-top:6px}
-  .note{font-size:12px;color:var(--sub);margin-top:8px}
-  footer{background:var(--ink);color:#8b939b;margin-top:40px;padding:26px 0;font-size:12px}
-  footer .wrap{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
-  @media(max-width:860px){.assets,.firms{grid-template-columns:1fr 1fr}}
-</style>
-</head>
-<body>
-  <div class="util"><div class="wrap">
-    <span class="live"><span class="dot"></span> LA commercial property data</span>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a class="sub" href="/subscribe">Subscribe</a></div>
-  </div></div>
-  <header class="mast"><div class="wrap">
-    <a class="logo" href="/">REN<span>TV</span>.com<small>Commercial Real Estate News</small></a>
-  </div></header>
-  <nav><div class="wrap">
-    <a href="/">Home</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/la-commercial" class="on">LA Commercial</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a>
-  </div></nav>
-  <main class="wrap">
-    <div class="head">
-      <h1>LA Commercial Property Intelligence</h1>
-      <p>Los Angeles County commercial &amp; industrial property intelligence — marquee assets, recorded transfer activity, and the region's largest brokerages. Assessed values from the LA County Assessor; figures are tax assessments, not sale prices.</p>
-      <div class="fresh" id="fresh">Loading…</div>
-    </div>
-    <section><h2 class="sec">Marquee LA Commercial Assets</h2><div class="assets" id="marquee"></div>
-      <div class="note">Ranked by assessed value. Each summary is generated from public assessor facts only.</div></section>
-    <section><h2 class="sec">Recent Recorded Activity</h2><div id="recent"></div>
-      <div class="note">Most recently recorded commercial &amp; industrial transfers in LA County. Sale prices are not in the public roll.</div></section>
-    <section><h2 class="sec">Largest LA Brokerages</h2><div class="firms" id="firms"></div>
-      <div class="note">Los Angeles firms by licensed-agent count, from the California DRE current-licensee registry.</div></section>
-  </main>
-  <footer><div class="wrap"><span>© RENTV.com — Commercial Real Estate News</span><span>LA property data · assessor + CA DRE, refreshed daily</span></div></footer>
-<script>
-const $=s=>document.querySelector(s), usd=n=>n==null?'—':'$'+Number(n).toLocaleString();
-function dstr(d){return d?new Date(d).toLocaleDateString(undefined,{year:'numeric',month:'short',day:'numeric'}):'—';}
-(async()=>{
-  const d=await (await fetch('/api/la-commercial')).json();
-  $('#fresh').textContent=d.fetched_at?('Data as of '+new Date(d.fetched_at).toLocaleString()):'';
-  $('#marquee').innerHTML=(d.marquee||[]).slice(0,9).map(r=>`<div class="asset">
-    <div class="tag">${r.type_label||''}</div>
-    <div class="v">${usd(r.assessed_total)}</div>
-    <div class="a">${r.address||'—'}${r.city?', '+r.city:''}</div>
-    ${r.brief?`<div class="brief">${r.brief}</div>`:''}</div>`).join('');
-  $('#recent').innerHTML='<table><thead><tr><th>Recorded</th><th>Address</th><th>Type</th><th>Assessed</th></tr></thead><tbody>'+
-    (d.recent||[]).map(r=>`<tr><td>${dstr(r.recording_date)}</td><td class="n">${r.address||'—'}${r.city?', '+r.city:''}</td><td>${r.type_label||''}</td><td class="v">${usd(r.assessed_total)}</td></tr>`).join('')+'</tbody></table>';
-  $('#firms').innerHTML=(d.firms||[]).slice(0,12).map(f=>`<div class="firm">
-    <div class="fn">${f.name}</div><div class="fa">${(f.agent_count||0).toLocaleString()} agents</div></div>`).join('');
-})();
-</script>
-</body>
-</html>
diff --git a/public/market-pulse.html.bak-nav b/public/market-pulse.html.bak-nav
deleted file mode 100644
index 0d9e3f5e..00000000
--- a/public/market-pulse.html.bak-nav
+++ /dev/null
@@ -1,617 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<meta charset="UTF-8">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<title>CRE Market Pulse — RENTV.com</title>
-<meta name="description" content="RENTV CRE Market Pulse — live U.S. Treasury yield curve, credit spreads, REIT performance and Western-U.S. commercial-real-estate fundamentals.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{
-    --bg:#080b11;
-    --panel:#0e131c;
-    --panel-2:#111826;
-    --line:#1c2536;
-    --line-soft:#161d2b;
-    --ink:#e8edf5;
-    --ink-dim:#8a97ad;
-    --ink-faint:#5b6879;
-    --up:#22c55e;
-    --up-soft:rgba(34,197,94,.14);
-    --down:#f04141;
-    --down-soft:rgba(240,65,65,.14);
-    --flat:#8a97ad;
-    --accent:#f0b429;      /* RENTV amber */
-    --accent-2:#38bdf8;    /* data cyan */
-    --mono:"SFMono-Regular",ui-monospace,"JetBrains Mono","Menlo",Consolas,monospace;
-    --sans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
-  }
-  *{box-sizing:border-box}
-  html,body{margin:0;padding:0}
-  a{color:inherit;text-decoration:none}
-  body{
-    background:
-      radial-gradient(1200px 600px at 80% -10%, rgba(56,189,248,.06), transparent 60%),
-      radial-gradient(900px 500px at -10% 110%, rgba(240,180,41,.05), transparent 55%),
-      var(--bg);
-    color:var(--ink);
-    font-family:var(--sans);
-    -webkit-font-smoothing:antialiased;
-    letter-spacing:.1px;
-    min-height:100vh;
-  }
-
-  /* ---------- House chrome (white top bar + dark drawer) — colors hardcoded to
-       the RENTV house palette so the dark page's :root vars can't recolor them. ---------- */
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid #e4e7ea}
-  .top .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:#14171a;padding:7px 9px;border-radius:8px}
-  .top .burger:hover{background:rgba(0,0,0,.06)}
-  .top .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#5b636b}
-  .top .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em;color:#14171a}
-  .top .brand span{color:#c8102e}
-  .top .user{width:37px;height:37px;border-radius:50%;border:1.5px solid #e4e7ea;background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:#14171a}
-  .top .user:hover{border-color:#c8102e;color:#c8102e}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800;color:#fff}.drawer .dh .w span{color:#c8102e}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .drawer .grp{padding:14px 18px 4px}.drawer .grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:#c8102e;color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:#c8102e;color:#fff;font-weight:700}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-
-  .wrap{max-width:1360px;margin:0 auto;padding:22px 26px 46px}
-
-  /* ---------- Page title band ---------- */
-  .pulse-band{
-    display:flex;align-items:center;justify-content:space-between;
-    gap:20px;flex-wrap:wrap;
-    padding-bottom:18px;margin-bottom:22px;
-    border-bottom:1px solid var(--line);
-  }
-  .pb-head{display:flex;flex-direction:column;gap:4px}
-  .pb-head .k{color:var(--accent);font-weight:800;font-size:11px;letter-spacing:2px;text-transform:uppercase}
-  .pb-head h1{font-family:'Playfair Display',serif;font-size:clamp(28px,3vw,40px);font-weight:700;letter-spacing:-.01em;color:var(--ink)}
-  .pb-head .d{font-size:12px;letter-spacing:.5px;color:var(--ink-faint)}
-  .status{display:flex;align-items:center;gap:22px;flex-wrap:wrap}
-  .clock{display:flex;flex-direction:column;align-items:flex-end;line-height:1.3}
-  .clock .lbl{font-size:10px;letter-spacing:1.6px;color:var(--ink-faint);text-transform:uppercase}
-  .clock .val{font-family:var(--mono);font-size:14px;color:var(--ink);font-variant-numeric:tabular-nums}
-  .live{
-    display:flex;align-items:center;gap:8px;
-    font-size:11px;letter-spacing:1.4px;text-transform:uppercase;color:var(--up);
-    padding:5px 11px;border:1px solid rgba(34,197,94,.3);border-radius:999px;
-    background:var(--up-soft);
-  }
-  .dot{width:8px;height:8px;border-radius:50%;background:var(--up);box-shadow:0 0 0 0 rgba(34,197,94,.6);animation:pulse 2s infinite}
-  @keyframes pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.55)}70%{box-shadow:0 0 0 7px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
-
-  /* ---------- Section titles ---------- */
-  .sec-title{
-    display:flex;align-items:center;gap:10px;
-    font-size:11px;letter-spacing:2px;text-transform:uppercase;color:var(--ink-dim);
-    margin:0 0 12px;
-  }
-  .sec-title::before{content:"";width:3px;height:13px;background:var(--accent);border-radius:2px}
-  .sec-title .hint{margin-left:auto;letter-spacing:.5px;text-transform:none;color:var(--ink-faint);font-size:11px}
-
-  /* ---------- KPI tiles ---------- */
-  .kpis{
-    display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:26px;
-  }
-  .kpi{
-    background:linear-gradient(180deg,var(--panel-2),var(--panel));
-    border:1px solid var(--line);border-radius:11px;padding:14px 15px;
-    position:relative;overflow:hidden;
-  }
-  .kpi::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent-2);opacity:.5}
-  .kpi.up::after{background:var(--up)}
-  .kpi.down::after{background:var(--down)}
-  .kpi.flat::after{background:var(--flat)}
-  .kpi .k-lbl{font-size:10.5px;letter-spacing:1.2px;text-transform:uppercase;color:var(--ink-faint)}
-  .kpi .k-val{font-family:var(--mono);font-size:25px;font-weight:600;margin-top:8px;font-variant-numeric:tabular-nums}
-  .kpi .k-delta{
-    margin-top:7px;display:inline-flex;align-items:center;gap:5px;
-    font-family:var(--mono);font-size:12px;padding:2px 8px;border-radius:6px;font-variant-numeric:tabular-nums;
-  }
-  .up .k-delta{color:var(--up);background:var(--up-soft)}
-  .down .k-delta{color:var(--down);background:var(--down-soft)}
-  .flat .k-delta{color:var(--flat);background:rgba(138,151,173,.12)}
-  .arrow{font-size:10px;line-height:1}
-
-  /* ---------- Grid of panels ---------- */
-  .grid{display:grid;grid-template-columns:1.35fr 1fr;gap:16px;margin-bottom:16px}
-  .grid.lower{grid-template-columns:1fr 1fr}
-  .panel{
-    background:linear-gradient(180deg,var(--panel-2),var(--panel));
-    border:1px solid var(--line);border-radius:14px;padding:18px 18px 16px;
-  }
-  canvas{display:block;width:100%}
-
-  /* legend / caption under curve */
-  .curve-foot{
-    display:flex;justify-content:space-between;gap:12px;margin-top:12px;
-    padding-top:12px;border-top:1px solid var(--line-soft);
-    font-size:11px;color:var(--ink-faint);flex-wrap:wrap;
-  }
-  .curve-foot b{color:var(--ink-dim);font-weight:600}
-
-  /* ---------- Credit spreads ---------- */
-  .spreads{display:flex;flex-direction:column;gap:16px;margin-top:4px}
-  .spread .row1{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
-  .spread .s-lbl{font-size:13px;color:var(--ink)}
-  .spread .s-val{font-family:var(--mono);font-size:16px;font-weight:600}
-  .spread .s-val.up{color:var(--up)}
-  .spread .s-val.down{color:var(--down)}
-  .bar-track{height:9px;background:var(--line-soft);border-radius:6px;overflow:hidden;position:relative}
-  .bar-fill{height:100%;border-radius:6px;background:linear-gradient(90deg,rgba(56,189,248,.5),var(--accent-2));transition:width .8s cubic-bezier(.2,.7,.2,1)}
-  .spread small{color:var(--ink-faint);font-size:10.5px;letter-spacing:.3px}
-
-  /* ---------- REIT bars ---------- */
-  .reits{display:flex;flex-direction:column;gap:15px;margin-top:2px}
-  .reit .r-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
-  .reit .r-lbl{font-size:13px;color:var(--ink)}
-  .reit .r-val{font-family:var(--mono);font-size:15px;color:var(--ink);font-variant-numeric:tabular-nums}
-  .reit .r-track{position:relative;height:26px;background:var(--line-soft);border-radius:7px;display:flex;align-items:center}
-  .reit .r-mid{position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--line);opacity:.9}
-  .reit .r-bar{position:absolute;top:5px;bottom:5px;border-radius:5px;transition:width .8s cubic-bezier(.2,.7,.2,1)}
-  .reit .r-bar.up{left:50%;background:linear-gradient(90deg,rgba(34,197,94,.35),var(--up))}
-  .reit .r-bar.down{right:50%;background:linear-gradient(270deg,rgba(240,65,65,.35),var(--down))}
-  .reit .r-pct{position:absolute;font-family:var(--mono);font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}
-  .reit .r-pct.up{left:calc(50% + 10px);color:var(--up)}
-  .reit .r-pct.down{right:calc(50% + 10px);color:var(--down)}
-  .reit .r-pct.flat{left:calc(50% + 10px);color:var(--flat)}
-  .reit-scale{display:flex;justify-content:space-between;font-size:10px;color:var(--ink-faint);font-family:var(--mono);margin-top:10px;padding-top:8px;border-top:1px solid var(--line-soft)}
-
-  /* ---------- Fundamentals ---------- */
-  .funds{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:2px}
-  .fund{
-    background:var(--panel);border:1px solid var(--line);border-radius:11px;padding:15px;
-    display:flex;flex-direction:column;gap:2px;
-  }
-  .fund .f-lbl{font-size:10.5px;letter-spacing:1.1px;text-transform:uppercase;color:var(--ink-faint)}
-  .fund .f-val{font-family:var(--mono);font-size:28px;font-weight:600;color:var(--accent);margin:6px 0 4px}
-  .fund .f-meta{font-size:11px;color:var(--ink-dim)}
-  .fund .f-src{font-size:10.5px;color:var(--ink-faint);margin-top:3px}
-  .tag{display:inline-block;font-size:9.5px;letter-spacing:.6px;color:var(--accent-2);border:1px solid rgba(56,189,248,.25);border-radius:5px;padding:1px 6px;margin-top:8px;width:fit-content}
-
-  footer.pulse-foot{
-    margin-top:30px;padding-top:16px;border-top:1px solid var(--line);
-    display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;
-    font-size:11px;color:var(--ink-faint);
-  }
-  footer.pulse-foot .disc{max-width:70%}
-
-  @media (max-width:1040px){
-    .kpis{grid-template-columns:repeat(3,1fr)}
-    .grid,.grid.lower{grid-template-columns:1fr}
-  }
-  @media (max-width:560px){
-    .kpis{grid-template-columns:repeat(2,1fr)}
-    .funds{grid-template-columns:1fr}
-    .wrap{padding:16px 14px 40px}
-  }
-
-  /* ---------- Persistent left rail (always populated, categories collapsed) ---------- */
-  .mp-layout{display:flex;align-items:flex-start;gap:0}
-  .mp-layout>.wrap{flex:1;min-width:0;max-width:1200px;margin:0}
-  .mp-rail{
-    position:sticky;top:54px;align-self:flex-start;flex:none;width:288px;
-    height:calc(100vh - 54px);overflow-y:auto;
-    background:linear-gradient(180deg,#0b0f16,#080b11);
-    border-right:1px solid var(--line);padding:16px 12px 30px;
-  }
-  .mp-rail .rail-h{display:flex;align-items:center;gap:8px;padding:4px 8px 12px;
-    font-size:11px;letter-spacing:2px;text-transform:uppercase;color:var(--ink-dim)}
-  .mp-rail .rail-h::before{content:"";width:3px;height:13px;background:var(--accent);border-radius:2px}
-  .mp-cat{border:1px solid var(--line);border-radius:10px;margin-bottom:8px;background:var(--panel);overflow:hidden}
-  .mp-cat>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;
-    padding:11px 12px;font-size:12px;font-weight:600;letter-spacing:.4px;color:var(--ink);user-select:none}
-  .mp-cat>summary::-webkit-details-marker{display:none}
-  .mp-cat>summary:hover{background:var(--panel-2)}
-  .mp-cat>summary .badge{font-family:var(--mono);font-size:10.5px;font-weight:700;color:#04120f;
-    background:#2dd4bf;border-radius:20px;padding:1px 7px;min-width:20px;text-align:center}
-  .mp-cat>summary .chev{margin-left:auto;color:var(--ink-faint);font-size:10px;transition:transform .2s}
-  .mp-cat[open]>summary .chev{transform:rotate(90deg)}
-  .mp-cat[open]>summary{border-bottom:1px solid var(--line-soft)}
-  .mp-rows{padding:2px 6px 8px}
-  .mp-row{display:flex;align-items:center;justify-content:space-between;gap:10px;
-    padding:6px;border-top:1px solid var(--line-soft);font-size:12px}
-  .mp-row:first-child{border-top:0}
-  .mp-row .rl{color:var(--ink-dim)}
-  .mp-row .rv{font-family:var(--mono);font-weight:600;font-variant-numeric:tabular-nums}
-  .mp-row .rv.up{color:var(--up)}.mp-row .rv.down{color:var(--down)}.mp-row .rv.flat{color:var(--ink)}
-  .mp-rail .rail-foot{padding:12px 8px 0;font-size:10px;letter-spacing:.3px;color:var(--ink-faint)}
-  @media (max-width:900px){
-    .mp-layout{flex-direction:column}
-    .mp-rail{position:static;width:auto;height:auto;border-right:0;border-bottom:1px solid var(--line)}
-    .mp-layout>.wrap{max-width:none}
-  }
-</style>
-</head>
-<body>
-
-<!-- ── House chrome ── -->
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu">
-    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
-    <span class="lbl">Menu</span>
-  </button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <a class="user" href="/search" aria-label="Search" title="Search">
-    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-  </a>
-</header>
-
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><div class="w">REN<span>TV</span></div><button id="dx" aria-label="Close">&times;</button></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/search">🔎 Search</a><a href="/market-pulse" class="active">📈 Rates &amp; Capital Markets</a><a href="/pulse">📊 Market Pulse (Deal Flow)</a><a href="/markets">🏙️ Markets</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial real estate news, Western U.S.</div>
-</aside>
-
-<div class="mp-layout">
-<aside class="mp-rail" id="mpRail">
-  <div class="rail-h">Market Data</div>
-  <div id="mpRailData"></div>
-  <div class="rail-foot">All fields shown · click a category to expand · full nav in the ☰ menu</div>
-</aside>
-<div class="wrap">
-
-  <div class="pulse-band">
-    <div class="pb-head">
-      <span class="k">CRE Market Pulse</span>
-      <h1>Rates &amp; Capital Markets</h1>
-      <span class="d">U.S. Treasury curve · credit spreads · REIT performance · SoCal fundamentals</span>
-    </div>
-    <div class="status">
-      <div class="live"><span class="dot"></span>Live Feed</div>
-      <div class="clock">
-        <span class="lbl">Data as of</span>
-        <span class="val" id="timestamp">—</span>
-      </div>
-    </div>
-  </div>
-
-  <!-- KPI TILES -->
-  <div class="sec-title">US Treasury Yield Curve <span class="hint" id="curveHint"></span></div>
-  <div class="kpis" id="kpis"></div>
-
-  <!-- CHARTS -->
-  <div class="grid">
-    <div class="panel">
-      <div class="sec-title">Yield Curve <span class="hint">Constant-maturity Treasury yields (%)</span></div>
-      <canvas id="yieldCurve" height="300"></canvas>
-      <div class="curve-foot" id="curveFoot"></div>
-    </div>
-    <div class="panel">
-      <div class="sec-title">Credit &amp; Curve Spreads <span class="hint">basis points</span></div>
-      <div class="spreads" id="spreads"></div>
-    </div>
-  </div>
-
-  <!-- LOWER -->
-  <div class="grid lower">
-    <div class="panel">
-      <div class="sec-title">REIT Performance <span class="hint">session change</span></div>
-      <div class="reits" id="reits"></div>
-      <div class="reit-scale"><span>−1.0%</span><span>flat</span><span>+1.0%</span></div>
-    </div>
-    <div class="panel">
-      <div class="sec-title">Market Fundamentals <span class="hint">SoCal CRE</span></div>
-      <div class="funds" id="funds"></div>
-    </div>
-  </div>
-
-  <footer class="pulse-foot">
-    <div class="disc">
-      Snapshot for informational purposes only — not investment advice. Yields are constant-maturity
-      Treasury rates; REIT levels are last-session close. Fundamentals sourced from cited market reports.
-    </div>
-    <div>© <span id="yr"></span> RENTV.com · CRE Market Pulse</div>
-  </footer>
-
-</div>
-</div>
-
-<script>
-/* ============================================================
-   Live source: /api/markets (cron-refreshed via Yahoo Finance).
-   Falls back to the embedded snapshot below if the fetch fails,
-   so the terminal always renders even offline. Same payload shape.
-   ============================================================ */
-const SNAPSHOT = {
-  "curve": [
-    {"label": "3-Month", "value": "3.80%", "change_bps": 5, "dir": "up"},
-    {"label": "5-Year",  "value": "4.46%", "change_bps": 5, "dir": "up"},
-    {"label": "10-Year", "value": "4.70%", "change_bps": 5, "dir": "up"},
-    {"label": "30-Year", "value": "5.17%", "change_bps": 2, "dir": "up"}
-  ],
-  "spreads": [
-    {"label": "30Y – 10Y (curve)", "value": "+47 bps", "dir": "up"},
-    {"label": "10Y – 3M (curve)",  "value": "+90 bps", "dir": "up"}
-  ],
-  "reits": [
-    {"label": "DJ U.S. Real Estate",       "value": "394.84",   "change_pct": -0.22, "dir": "down"},
-    {"label": "MSCI U.S. REIT",            "value": "1,289.55", "change_pct": 0,     "dir": "flat"},
-    {"label": "Vanguard REIT ETF (VNQ)",   "value": "$98.69",   "change_pct": -0.84, "dir": "down"}
-  ],
-  "fundamentals": [
-    {"label": "LA OFFICE VAC",      "value": "23.1%", "as_of": "Q2 2026", "source": "CBRE/JLL market reports"},
-    {"label": "IE INDUSTRIAL CAP",  "value": "5.2%",  "as_of": "Q2 2026", "source": "Colliers IE industrial"}
-  ]
-};
-let marketData = SNAPSHOT;
-
-/* ---------- helpers ---------- */
-const $  = s => document.querySelector(s);
-const num = s => parseFloat(String(s).replace(/[^0-9.\-]/g, ''));
-const arrow = d => d === 'up' ? '▲' : d === 'down' ? '▼' : '●';
-function getCSS(v){ return getComputedStyle(document.documentElement).getPropertyValue(v).trim() || 'monospace'; }
-
-/* ---------- drawer ---------- */
-const drawer = $('#drawer'), scrim = $('#scrim');
-$('#burger').onclick = () => { drawer.classList.add('open'); scrim.classList.add('open'); };
-const closeDrawer = () => { drawer.classList.remove('open'); scrim.classList.remove('open'); };
-$('#dx').onclick = closeDrawer; scrim.onclick = closeDrawer;
-document.addEventListener('keydown', e => { if (e.key === 'Escape') closeDrawer(); });
-
-/* ---------- 1. KPI tiles (curve tenors + spreads) ---------- */
-function renderKPIs(){
-  const el = $('#kpis');
-  const curveTiles = marketData.curve.map(c => `
-    <div class="kpi ${c.dir}">
-      <div class="k-lbl">${c.label} UST</div>
-      <div class="k-val">${c.value}</div>
-      <div class="k-delta"><span class="arrow">${arrow(c.dir)}</span>${Math.abs(c.change_bps)} bps</div>
-    </div>`);
-  const spreadTiles = marketData.spreads.map(s => `
-    <div class="kpi ${s.dir}">
-      <div class="k-lbl">${s.label}</div>
-      <div class="k-val">${s.value.replace(/\s*bps/,'')}<span style="font-size:13px;color:var(--ink-faint)"> bps</span></div>
-      <div class="k-delta"><span class="arrow">${arrow(s.dir)}</span>${num(s.value) >= 0 ? 'steepening' : 'inverted'}</div>
-    </div>`);
-  el.innerHTML = curveTiles.concat(spreadTiles).join('');
-
-  const dirs = marketData.curve.map(c => c.dir);
-  const allUp = dirs.every(d => d === 'up');
-  const allDn = dirs.every(d => d === 'down');
-  $('#curveHint').textContent = allUp ? 'Bear steepening — all tenors higher'
-    : allDn ? 'Bull move — all tenors lower' : '';
-}
-
-/* ---------- 2. Yield curve line chart (hand-drawn canvas, DPR-aware) ---------- */
-function drawYieldCurve(){
-  const cv  = $('#yieldCurve');
-  const dpr = window.devicePixelRatio || 1;
-  const cssW = cv.clientWidth || 640;
-  const cssH = parseInt(cv.getAttribute('height'), 10);
-  cv.width  = cssW * dpr;
-  cv.height = cssH * dpr;
-  const ctx = cv.getContext('2d');
-  ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
-  ctx.clearRect(0, 0, cssW, cssH);
-
-  const data = marketData.curve;
-  const padL = 46, padR = 22, padT = 30, padB = 34;
-  const W = cssW - padL - padR;
-  const H = cssH - padT - padB;
-
-  const vals = data.map(d => num(d.value));
-  const dMin = Math.min(...vals), dMax = Math.max(...vals);
-  const lo = Math.floor((dMin - 0.25) * 4) / 4;
-  const hi = Math.ceil((dMax + 0.25) * 4) / 4;
-  const x = i => padL + (data.length === 1 ? W/2 : i * (W / (data.length - 1)));
-  const y = v => padT + H - ((v - lo) / (hi - lo)) * H;
-
-  ctx.font = '11px ' + getCSS('--mono');
-  ctx.textBaseline = 'middle';
-
-  const steps = 4;
-  for (let i = 0; i <= steps; i++){
-    const v = lo + (hi - lo) * (i / steps);
-    const yy = y(v);
-    ctx.strokeStyle = 'rgba(28,37,54,.9)';
-    ctx.lineWidth = 1;
-    ctx.beginPath(); ctx.moveTo(padL, yy); ctx.lineTo(padL + W, yy); ctx.stroke();
-    ctx.fillStyle = '#5b6879';
-    ctx.textAlign = 'right';
-    ctx.fillText(v.toFixed(2) + '%', padL - 8, yy);
-  }
-
-  const grad = ctx.createLinearGradient(0, padT, 0, padT + H);
-  grad.addColorStop(0, 'rgba(56,189,248,.28)');
-  grad.addColorStop(1, 'rgba(56,189,248,0)');
-  ctx.beginPath();
-  ctx.moveTo(x(0), y(vals[0]));
-  for (let i = 1; i < data.length; i++) ctx.lineTo(x(i), y(vals[i]));
-  ctx.lineTo(x(data.length - 1), padT + H);
-  ctx.lineTo(x(0), padT + H);
-  ctx.closePath();
-  ctx.fillStyle = grad;
-  ctx.fill();
-
-  ctx.beginPath();
-  ctx.moveTo(x(0), y(vals[0]));
-  for (let i = 1; i < data.length; i++) ctx.lineTo(x(i), y(vals[i]));
-  ctx.strokeStyle = '#38bdf8';
-  ctx.lineWidth = 2.5;
-  ctx.lineJoin = 'round';
-  ctx.shadowColor = 'rgba(56,189,248,.5)';
-  ctx.shadowBlur = 10;
-  ctx.stroke();
-  ctx.shadowBlur = 0;
-
-  data.forEach((d, i) => {
-    const px = x(i), py = y(vals[i]);
-    ctx.beginPath(); ctx.arc(px, py, 4.5, 0, Math.PI * 2);
-    ctx.fillStyle = '#0e131c'; ctx.fill();
-    ctx.lineWidth = 2.5; ctx.strokeStyle = '#38bdf8'; ctx.stroke();
-
-    ctx.fillStyle = '#e8edf5';
-    ctx.font = 'bold 12px ' + getCSS('--mono');
-    if (i === 0)                    { ctx.textAlign = 'left';  ctx.fillText(d.value, px - 4,  py - 16); }
-    else if (i === data.length - 1) { ctx.textAlign = 'right'; ctx.fillText(d.value, px + 4,  py - 16); }
-    else                            { ctx.textAlign = 'center';ctx.fillText(d.value, px,      py - 16); }
-
-    ctx.fillStyle = '#8a97ad';
-    ctx.font = '11px ' + getCSS('--sans');
-    ctx.fillText(d.label.replace('-', ' '), px, padT + H + 18);
-  });
-
-  // caption footer — computed from live data so it never contradicts the tiles
-  const front = data[0], back = data[data.length - 1];
-  const spread = Math.round((num(back.value) - num(front.value)) * 100);
-  $('#curveFoot').innerHTML = `
-    <span>Front end <b>${front.value}</b> · Long end <b>${back.value}</b></span>
-    <span>Curve is <b>${spread >= 0 ? 'upward-sloping' : 'inverted'}</b> (${spread >= 0 ? '+' : ''}${spread} bps ${front.label.replace('-',' ')}→${back.label.replace('-',' ')})</span>`;
-}
-
-/* ---------- 3. Credit / curve spreads ---------- */
-function renderSpreads(){
-  const el = $('#spreads');
-  const vals = marketData.spreads.map(s => Math.abs(num(s.value)));
-  const max = Math.max(...vals, 1);
-  el.innerHTML = marketData.spreads.map(s => {
-    const v = num(s.value);
-    const pct = Math.max(6, Math.abs(v) / max * 100);
-    return `
-      <div class="spread">
-        <div class="row1">
-          <span class="s-lbl">${s.label}</span>
-          <span class="s-val ${s.dir}">${arrow(s.dir)} ${s.value}</span>
-        </div>
-        <div class="bar-track"><div class="bar-fill" style="width:0%" data-w="${pct}"></div></div>
-        <small>${Math.abs(v)} bps ${v >= 0 ? 'positive' : 'inverted'} · steeper vs prior</small>
-      </div>`;
-  }).join('');
-  requestAnimationFrame(() => el.querySelectorAll('.bar-fill')
-    .forEach(b => b.style.width = b.dataset.w + '%'));
-}
-
-/* ---------- 4. REIT performance (diverging bars around zero) ---------- */
-function renderReits(){
-  const el = $('#reits');
-  const SCALE = 1.0; // ±1% = full half-width
-  el.innerHTML = marketData.reits.map(r => {
-    const p = r.change_pct;
-    const w = Math.min(50, Math.abs(p) / SCALE * 50);
-    const bar = r.dir === 'up'
-      ? `<div class="r-bar up" style="width:0%" data-w="${w}"></div>`
-      : r.dir === 'down'
-        ? `<div class="r-bar down" style="width:0%" data-w="${w}"></div>`
-        : '';
-    const pctTxt = (p > 0 ? '+' : '') + p.toFixed(2) + '%';
-    return `
-      <div class="reit">
-        <div class="r-top">
-          <span class="r-lbl">${r.label}</span>
-          <span class="r-val">${r.value}</span>
-        </div>
-        <div class="r-track">
-          <div class="r-mid"></div>
-          ${bar}
-          <span class="r-pct ${r.dir}">${arrow(r.dir)} ${pctTxt}</span>
-        </div>
-      </div>`;
-  }).join('');
-  requestAnimationFrame(() => el.querySelectorAll('.r-bar')
-    .forEach(b => b.style.width = b.dataset.w + '%'));
-}
-
-/* ---------- 5. Fundamentals KPI tiles ---------- */
-function renderFunds(){
-  $('#funds').innerHTML = marketData.fundamentals.map(f => `
-    <div class="fund">
-      <span class="f-lbl">${f.label}</span>
-      <span class="f-val">${f.value}</span>
-      <span class="f-meta">As of ${f.as_of}</span>
-      <span class="f-src">${f.source}</span>
-      <span class="tag">MARKET REPORT</span>
-    </div>`).join('');
-}
-
-/* ---------- live timestamp ---------- */
-let feedAsOf = null;
-function tick(){
-  const now = feedAsOf || new Date();
-  const opts = { year:'numeric', month:'short', day:'numeric',
-                 hour:'2-digit', minute:'2-digit', second:'2-digit' };
-  $('#timestamp').textContent = now.toLocaleString(undefined, opts) +
-    ' ' + (Intl.DateTimeFormat().resolvedOptions().timeZone || '');
-}
-
-/* ---------- persistent left rail: ALWAYS lists every field, categories
-     collapsed by default. Rebuilt on each refresh but open state is preserved
-     so a live update never blanks the panel or re-collapses what you opened. ---------- */
-const esc = s => String(s == null ? '' : s).replace(/[&<>"]/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-function renderRail(){
-  const host = $('#mpRailData');
-  if(!host) return;
-  const openSet = new Set([...host.querySelectorAll('.mp-cat[open]')].map(d => d.dataset.cat));
-  const cats = [
-    {key:'curve',   name:'Yield Curve',         rows: marketData.curve.map(c => ({l:c.label + ' UST', v:c.value, d:c.dir}))},
-    {key:'spreads', name:'Curve Spreads',       rows: marketData.spreads.map(s => ({l:s.label, v:s.value, d:s.dir}))},
-    {key:'reits',   name:'REIT Performance',    rows: marketData.reits.map(r => ({l:r.label, v:r.value, d:r.dir}))},
-    {key:'funds',   name:'Market Fundamentals', rows: marketData.fundamentals.map(f => ({l:f.label, v:f.value, d:'flat'}))}
-  ];
-  host.innerHTML = cats.map(c => `
-    <details class="mp-cat" data-cat="${c.key}"${openSet.has(c.key) ? ' open' : ''}>
-      <summary>${esc(c.name)}<span class="badge">${c.rows.length}</span><span class="chev">▶</span></summary>
-      <div class="mp-rows">${c.rows.map(r =>
-        `<div class="mp-row"><span class="rl">${esc(r.l)}</span><span class="rv ${r.d}">${esc(r.v)}</span></div>`
-      ).join('')}</div>
-    </details>`).join('');
-}
-
-/* ---------- render everything from the current marketData ---------- */
-function renderAll(){
-  renderRail();
-  renderKPIs();
-  renderSpreads();
-  renderReits();
-  renderFunds();
-  drawYieldCurve();
-}
-
-/* ---------- pull live data, keep the snapshot as fallback ---------- */
-async function loadLive(){
-  try{
-    const r = await fetch('/api/markets', { credentials:'same-origin' });
-    if(!r.ok) return;
-    const d = await r.json();
-    if(d && Array.isArray(d.curve) && d.curve.length){
-      marketData = d;
-      feedAsOf = d.fetched_at ? new Date(d.fetched_at) : null;
-      renderAll();
-    }
-  }catch(e){ /* keep snapshot */ }
-}
-
-/* ---------- boot ---------- */
-function boot(){
-  $('#yr').textContent = new Date().getFullYear();
-  renderAll();          // instant paint from snapshot
-  loadLive();           // then upgrade to live
-  tick(); setInterval(tick, 1000);
-  setInterval(loadLive, 120000); // refresh with the site's cron cadence
-}
-boot();
-
-let rt;
-window.addEventListener('resize', () => { clearTimeout(rt); rt = setTimeout(drawYieldCurve, 120); });
-</script>
-</body>
-</html>
diff --git a/public/markets.html.bak-nav b/public/markets.html.bak-nav
deleted file mode 100644
index d9a5547b..00000000
--- a/public/markets.html.bak-nav
+++ /dev/null
@@ -1,113 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Rates &amp; Markets — RENTV.com</title>
-<meta name="description" content="Live Treasury yield curve, REIT indices and Western-U.S. CRE fundamentals — RENTV.com Rates &amp; Markets.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--up:#0f8a4d;--dn:#c8102e;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--wash);line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .util .live{display:inline-flex;align-items:center;gap:7px;letter-spacing:.05em;text-transform:uppercase;font-size:11px}
-  .util .dot{width:7px;height:7px;border-radius:50%;background:#22c55e;animation:pulse 2s infinite}
-  @keyframes pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.6)}70%{box-shadow:0 0 0 7px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{background:#fff;border-bottom:2px solid var(--ink);padding:16px 0 12px}
-  .mast .wrap{display:flex;align-items:center;justify-content:space-between}
-  .logo{font-family:var(--serif);font-weight:700;font-size:32px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  nav{background:#fff;border-bottom:1px solid var(--line)}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  .head{padding:30px 0 6px}
-  .head h1{font-family:var(--serif);font-size:34px;letter-spacing:-.5px}
-  .head p{color:var(--sub);font-size:14px;margin-top:4px}
-  .head .fresh{font-size:12px;color:var(--sub);margin-top:8px}
-  section{margin:26px 0}
-  h2.sec{font-size:14px;text-transform:uppercase;letter-spacing:.08em;border-top:3px solid var(--ink);padding-top:10px;margin-bottom:14px}
-  .cards{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
-  .cards.sp{grid-template-columns:repeat(2,1fr)}
-  .cards.re{grid-template-columns:repeat(3,1fr)}
-  .card{background:#fff;border:1px solid var(--line);border-radius:8px;padding:16px 18px}
-  .card .l{font-size:12px;color:var(--sub);text-transform:uppercase;letter-spacing:.05em}
-  .card .v{font-family:var(--serif);font-size:30px;font-weight:700;margin-top:4px;line-height:1}
-  .card .c{font-size:13px;font-weight:700;margin-top:6px}
-  .up{color:var(--up)}.dn{color:var(--dn)}.flat{color:var(--sub)}
-  .note{font-size:12px;color:var(--sub);margin-top:8px}
-  footer{background:var(--ink);color:#8b939b;margin-top:40px;padding:26px 0;font-size:12px}
-  footer .wrap{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
-  @media(max-width:860px){.cards{grid-template-columns:1fr 1fr}.cards.re{grid-template-columns:1fr}}
-footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:28px}footer .logo{color:#fff;font-size:26px;margin-bottom:8px}footer h5{color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}footer a{display:block;padding:4px 0;color:#aeb6bd}footer .fine{border-top:1px solid #2a2f34;margin-top:26px;padding-top:16px;font-size:12px;color:#7c848b}@media(max-width:860px){footer .cols{grid-template-columns:1fr 1fr}}
-</style>
-</head>
-<body>
-  <div class="util"><div class="wrap">
-    <span class="live"><span class="dot"></span> Live market data</span>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a class="sub" href="/subscribe">Subscribe</a></div>
-  </div></div>
-  <header class="mast"><div class="wrap">
-    <a class="logo" href="/">REN<span>TV</span>.com<small>Commercial Real Estate News</small></a>
-    <div style="font-size:12px;color:var(--sub);text-align:right">Western U.S. Edition<br><span id="today"></span></div>
-  </div></header>
-  <nav><div class="wrap">
-    <button class="ham" id="hamBtn" aria-label="Menu" aria-expanded="false">☰</button>
-    <div class="navlinks" id="nav"><a href="/">Home</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets" class="on">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/versions">Versions</a><a href="/blog">Blog</a></div>
-  </div></nav>
-
-  <main class="wrap">
-    <div class="head">
-      <h1>Rates &amp; Markets</h1>
-      <p>The rate backdrop that moves commercial real estate — Treasury curve, REIT benchmarks and Western-U.S. fundamentals.</p>
-      <div class="fresh" id="fresh">Loading live market data…</div>
-    </div>
-
-    <section><h2 class="sec">U.S. Treasury Yield Curve</h2><div class="cards" id="curve"></div>
-      <div class="note">Higher long rates raise borrowing costs and pressure cap rates. Daily change shown in basis points.</div></section>
-    <section><h2 class="sec">Curve Spreads</h2><div class="cards sp" id="spreads"></div>
-      <div class="note">A steeper curve (positive spread) generally signals easier financing ahead; inversion has historically preceded slowdowns.</div></section>
-    <section><h2 class="sec">REIT Benchmarks</h2><div class="cards re" id="reits"></div>
-      <div class="note">Public real-estate equities lead private CRE pricing. Daily change shown as a percentage.</div></section>
-    <section><h2 class="sec">Western-U.S. Fundamentals</h2><div class="cards sp" id="fund"></div>
-      <div class="note">Market-report figures, updated quarterly (CBRE / JLL / Colliers).</div></section>
-  </main>
-
-  <footer><div class="wrap"><div class="cols">
-    <div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals &amp; conferences across the Western United States since 1998.</p></div>
-    <div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a></div>
-    <div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
-    <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
-  </div><div class="fine">© 2026 RENTV.com · Commercial real estate news, Western U.S. · Headlines refreshed live from rentv.com</div></div></footer>
-
-<script>
-document.getElementById('today').textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
-const esc=s=>(s||'').replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-function chg(m){
-  if(m.change_bps!=null){const a=Math.abs(m.change_bps);return m.dir==='up'?'<span class="up">▲ '+a+' bps</span>':m.dir==='down'?'<span class="dn">▼ '+a+' bps</span>':'<span class="flat">— unch</span>';}
-  if(m.change_pct!=null){const a=Math.abs(m.change_pct);return m.dir==='up'?'<span class="up">▲ '+a+'%</span>':m.dir==='down'?'<span class="dn">▼ '+a+'%</span>':'<span class="flat">— unch</span>';}
-  return '';
-}
-const card=m=>'<div class="card"><div class="l">'+esc(m.label)+'</div><div class="v">'+esc(m.value)+'</div><div class="c">'+chg(m)+(m.as_of?'<span class="flat" style="font-weight:400"> · '+esc(m.as_of)+'</span>':'')+'</div></div>';
-async function load(){
-  try{
-    const d=await (await fetch('/api/markets')).json();
-    document.getElementById('curve').innerHTML=(d.curve||[]).map(card).join('');
-    document.getElementById('spreads').innerHTML=(d.spreads||[]).map(card).join('');
-    document.getElementById('reits').innerHTML=(d.reits||[]).map(card).join('');
-    document.getElementById('fund').innerHTML=(d.fundamentals||[]).map(card).join('');
-    const mins=Math.max(0,Math.round((Date.now()-new Date(d.fetched_at))/60000));
-    document.getElementById('fresh').textContent=(d.source||'Live market data')+' · '+(mins<2?'updated just now':'updated '+mins+' min ago');
-  }catch(e){document.getElementById('fresh').textContent='Market data temporarily unavailable — retrying…';}
-}
-load(); setInterval(load,120000);
-var hb=document.getElementById('hamBtn');if(hb)hb.addEventListener('click',function(){var o=document.getElementById('nav').classList.toggle('open');hb.setAttribute('aria-expanded',o);});
-</script>
-<script src="/theme.js"></script>
-</body>
-</html>
diff --git a/public/metros.html.bak-nav b/public/metros.html.bak-nav
deleted file mode 100644
index 90b166a3..00000000
--- a/public/metros.html.bak-nav
+++ /dev/null
@@ -1,167 +0,0 @@
-<!doctype html><html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Deal Flow by Metro — RENTV.com</title>
-<meta name="description" content="RENTV deal flow by metro — where commercial real estate capital is moving across the Western U.S., ranked by tracked transaction volume.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--wash:#f5f6f8;--up:#0f8a4d}
-  *{box-sizing:border-box;margin:0}
-  body{font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:#fbfbfc;line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
-  .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:inherit;padding:7px 9px;border-radius:8px}
-  .burger:hover{background:rgba(0,0,0,.06)}
-  .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--sub)}
-  .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em}.brand span{color:var(--red)}
-  .user{width:37px;height:37px;border-radius:50%;border:1.5px solid var(--line);background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink)}
-  .user:hover{border-color:var(--red);color:var(--red)}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800}.drawer .dh .w span{color:var(--red)}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .grp{padding:14px 18px 4px}.grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:var(--red);color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:var(--red);color:#fff;font-weight:700}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-
-  .wrap{max-width:920px;margin:0 auto;padding:0 22px;width:100%}
-  .mhead{padding:34px 0 6px;display:flex;align-items:flex-end;justify-content:space-between;flex-wrap:wrap;gap:10px}
-  .mhead .k{color:var(--red);font-weight:800;font-size:12px;letter-spacing:.16em;text-transform:uppercase}
-  .mhead h1{font-family:'Playfair Display',serif;font-size:clamp(32px,3.6vw,46px);font-weight:700;letter-spacing:-.01em;margin-top:4px}
-  .mhead p{color:var(--sub);font-size:15px;margin-top:4px}
-  .sortbar{display:flex;align-items:center;gap:8px;padding:16px 0 4px}
-  .sortbar .lbl{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--sub)}
-  .sortbar button{border:1.5px solid var(--line);background:#fff;border-radius:20px;padding:6px 14px;font:700 12.5px 'Inter';color:var(--ink);cursor:pointer}
-  .sortbar button.on{background:var(--red);border-color:var(--red);color:#fff}
-
-  .metros{padding:10px 0 60px}
-  .metro{background:#fff;border:1px solid var(--line);border-radius:12px;margin-bottom:12px;overflow:hidden}
-  .mrow{display:grid;grid-template-columns:34px 1fr auto;gap:14px;align-items:center;padding:16px 18px;cursor:pointer}
-  .mrow:hover{background:var(--wash)}
-  .mrow .rk{font-family:'Playfair Display',serif;font-size:22px;font-weight:800;color:var(--sub);text-align:center}
-  .mrow .main .nm{font-size:17px;font-weight:800}
-  .mrow .main .sub{color:var(--sub);font-size:12.5px;margin-top:3px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
-  .mrow .main .sec{font-size:9px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;background:var(--wash);border:1px solid var(--line);border-radius:20px;padding:2px 8px;color:#4a4f55}
-  .mrow .main .track{height:7px;background:var(--wash);border-radius:6px;overflow:hidden;margin-top:9px;max-width:420px}
-  .mrow .main .fill{height:100%;background:var(--red);border-radius:6px;transition:width .6s cubic-bezier(.4,0,.2,1)}
-  .mrow .r{text-align:right}
-  .mrow .r .vol{font-family:'Playfair Display',serif;font-size:22px;font-weight:800;color:var(--red)}
-  .mrow .r .ct{color:var(--sub);font-size:12px;font-weight:600;margin-top:2px}
-  .mrow .r .chev{color:var(--sub);font-size:12px;margin-top:3px}
-  .deals{border-top:1px solid var(--line);background:#fcfcfd;display:none}
-  .metro.open .deals{display:block}
-  .metro.open .chev{transform:rotate(180deg);display:inline-block}
-  .deal{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;padding:11px 18px;border-bottom:1px solid var(--line)}
-  .deal:last-child{border-bottom:0}
-  .deal h4{font:600 14.5px/1.3 'Inter'}
-  .deal .m{color:var(--sub);font-size:11.5px;margin-top:2px}
-  .deal .amt{font-family:'Playfair Display',serif;font-weight:800;font-size:16px;color:var(--red);white-space:nowrap}
-  .deal:hover h4{color:var(--red)}
-  .empty{padding:40px 0;text-align:center;color:var(--sub)}
-</style></head><body>
-
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu">
-    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
-    <span class="lbl">Menu</span>
-  </button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <a class="user" href="/search" aria-label="Search" title="Search">
-    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-  </a>
-</header>
-
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><div class="w">REN<span>TV</span></div><button id="dx" aria-label="Close">&times;</button></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/search">Search</a><a href="/pulse">Market Pulse</a><a href="/metros" class="active">Deal Flow by Metro</a><a href="/tools">CRE Toolkit</a><a href="/watchlist">Deal Watchlist</a><a href="/directory">CRE Directory</a><a href="/compare">Deal Comparison</a><a href="/brief">The RENTV Brief</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial real estate news, Western U.S.</div>
-</aside>
-
-<main class="wrap">
-  <div class="mhead">
-    <div><div class="k">Deal Flow by Metro</div><h1>Where the capital is moving</h1><p>Tracked transactions grouped by metro — tap any market to see its deals.</p></div>
-  </div>
-  <div class="sortbar"><span class="lbl">Rank by</span><button id="sVol" class="on" data-s="vol">Volume</button><button id="sCnt" data-s="cnt">Deal count</button></div>
-  <section class="metros" id="metros"></section>
-</main>
-
-<script>
-const $=id=>document.getElementById(id);
-const esc=s=>String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-const drawer=$('drawer'),scrim=$('scrim');
-$('burger').onclick=()=>{drawer.classList.add('open');scrim.classList.add('open')};
-const close=()=>{drawer.classList.remove('open');scrim.classList.remove('open')};
-$('dx').onclick=close;scrim.onclick=close;document.addEventListener('keydown',e=>{if(e.key==='Escape')close()});
-
-const usd=n=>!n?'—':n>=1e9?('$'+(n/1e9).toFixed(1)+'B'):n>=1e6?('$'+(n/1e6).toFixed(1)+'M'):n>=1e3?('$'+Math.round(n/1e3)+'K'):('$'+Math.round(n));
-let METROS=[], sort='vol';
-
-const UNCONF='Location unconfirmed';
-function build(deals){
-  const m={};
-  deals.forEach(d=>{
-    // Trust the city only if it actually appears in the deal's own text. The
-    // upstream feed sometimes mis-assigns a city (e.g. a firm's HQ) that has
-    // nothing to do with the asset — group those honestly, not under a false metro.
-    const hay=`${d.title||''} ${d.summary||''}`.toLowerCase();
-    const cityOk=d.city && hay.includes(String(d.city).toLowerCase());
-    const key=cityOk ? [d.city,d.state].filter(Boolean).join(', ') : UNCONF;
-    const g=m[key]||(m[key]={name:key,count:0,vol:0,deals:[],secs:{}});
-    g.count++; if(typeof d.amount==='number')g.vol+=d.amount; g.deals.push(d);
-    if(d.property_type)g.secs[d.property_type]=(g.secs[d.property_type]||0)+1;
-  });
-  return Object.values(m).map(g=>{
-    g.top=Object.entries(g.secs).sort((a,b)=>b[1]-a[1])[0];
-    g.deals.sort((a,b)=>(b.amount||0)-(a.amount||0));
-    return g;
-  });
-}
-function render(){
-  const rows=METROS.slice().sort((a,b)=>{
-    if(a.name===UNCONF)return 1; if(b.name===UNCONF)return -1; // unconfirmed always last
-    return sort==='vol' ? (b.vol-a.vol||b.count-a.count) : (b.count-a.count||b.vol-a.vol);
-  });
-  const max=Math.max(...rows.filter(r=>r.name!==UNCONF).map(r=>sort==='vol'?r.vol:r.count),1);
-  if(!rows.length){ $('metros').innerHTML='<div class="empty">No deals to map yet.</div>'; return; }
-  $('metros').innerHTML=rows.map((g,i)=>`
-    <div class="metro" data-k="${esc(g.name)}">
-      <div class="mrow">
-        <div class="rk">${i+1}</div>
-        <div class="main">
-          <div class="nm">${esc(g.name)}</div>
-          <div class="sub">${g.top?`<span class="sec">${esc(g.top[0])} led</span>`:''}<span>${g.count} deal${g.count===1?'':'s'}</span>${g.vol?`<span>· avg ${esc(usd(g.vol/g.deals.filter(d=>d.amount).length))}</span>`:''}</div>
-          <div class="track"><div class="fill" style="width:${Math.max(5,Math.round((sort==='vol'?g.vol:g.count)/max*100))}%"></div></div><!-- min 5% so bar stays visible at low values -->
-        </div>
-        <div class="r"><div class="vol">${g.vol?esc(usd(g.vol)):'—'}</div><div class="ct">${g.count} deal${g.count===1?'':'s'}</div><div class="chev">▾ deals</div></div>
-      </div>
-      <div class="deals">${g.deals.map(d=>`<a class="deal" href="${d.id?('/news/'+encodeURIComponent(d.id)):'/deals'}"><div><h4>${esc(d.title)}</h4><div class="m">${[d.property_type,d.txn_type].filter(Boolean).map(esc).join(' · ')}</div></div><div class="amt">${esc(d.amount_label||(d.amount?usd(d.amount):'—'))}</div></a>`).join('')}</div>
-    </div>`).join('');
-  $('metros').querySelectorAll('.mrow').forEach(r=>r.onclick=()=>r.parentElement.classList.toggle('open'));
-}
-function setSort(s){ sort=s; $('sVol').classList.toggle('on',s==='vol'); $('sCnt').classList.toggle('on',s==='cnt'); render(); }
-$('sVol').onclick=()=>setSort('vol'); $('sCnt').onclick=()=>setSort('cnt');
-
-(async function(){
-  let deals=[]; try{ deals=((await (await fetch('/api/deals?limit=200')).json()).deals||[]); }catch(e){ $('metros').innerHTML='<div class="empty">Deal data unavailable.</div>'; return; }
-  METROS=build(deals);
-  const p=new URLSearchParams(location.search);
-  if(p.get('sort')==='cnt')sort='cnt';
-  setSort(sort);
-  const openM=p.get('open');
-  if(openM){ const el=$('metros').querySelector(`.metro[data-k="${CSS.escape(openM)}"]`); if(el){el.classList.add('open');el.scrollIntoView({block:'center'});} }
-})();
-</script>
-</body></html>
diff --git a/public/pulse.html.bak-nav b/public/pulse.html.bak-nav
deleted file mode 100644
index b328b151..00000000
--- a/public/pulse.html.bak-nav
+++ /dev/null
@@ -1,133 +0,0 @@
-<!doctype html><html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Market Pulse — RENTV.com</title>
-<meta name="description" content="RENTV Market Pulse — live commercial real estate transaction volume, deal count and sector breakdowns across the Western U.S.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--wash:#f5f6f8;--up:#0f8a4d}
-  *{box-sizing:border-box;margin:0}
-  body{font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:#fbfbfc;line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
-  .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:inherit;padding:7px 9px;border-radius:8px}
-  .burger:hover{background:rgba(0,0,0,.06)}
-  .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--sub)}
-  .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em}.brand span{color:var(--red)}
-  .user{width:37px;height:37px;border-radius:50%;border:1.5px solid var(--line);background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink)}
-  .user:hover{border-color:var(--red);color:var(--red)}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800}.drawer .dh .w span{color:var(--red)}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .grp{padding:14px 18px 4px}.grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:var(--red);color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:var(--red);color:#fff;font-weight:700}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-
-  .wrap{max-width:1120px;margin:0 auto;padding:0 22px;width:100%}
-  .phead{padding:34px 0 8px;display:flex;align-items:flex-end;justify-content:space-between;flex-wrap:wrap;gap:10px}
-  .phead .k{color:var(--red);font-weight:800;font-size:12px;letter-spacing:.16em;text-transform:uppercase}
-  .phead h1{font-family:'Playfair Display',serif;font-size:clamp(32px,3.6vw,46px);font-weight:700;letter-spacing:-.01em;margin-top:4px}
-  .phead .upd{color:var(--sub);font-size:12px;font-weight:600}
-  .kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;padding:14px 0 8px}
-  .kpi{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px 16px 14px}
-  .kpi .v{font-family:'Playfair Display',serif;font-size:30px;font-weight:800;letter-spacing:-.01em}
-  .kpi .l{color:var(--sub);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;margin-top:4px}
-  .kpi.hot{background:var(--red);color:#fff;border-color:var(--red)}.kpi.hot .l{color:rgba(255,255,255,.85)}
-  .cols{display:grid;grid-template-columns:1fr 1fr;gap:26px;padding:20px 0}
-  .card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px 20px}
-  .card h3{font-size:12px;text-transform:uppercase;letter-spacing:.09em;border-top:2px solid var(--ink);padding-top:10px;margin-bottom:14px;font-weight:800}
-  .bar{margin-bottom:13px}
-  .bar .r{display:flex;justify-content:space-between;font-size:13.5px;margin-bottom:4px}
-  .bar .r b{font-weight:700}.bar .r .n{color:var(--sub);font-weight:600}
-  .bar .track{height:9px;background:var(--wash);border-radius:6px;overflow:hidden}
-  .bar .fill{height:100%;background:var(--red);border-radius:6px;transition:width .6s cubic-bezier(.4,0,.2,1)}
-  .bar.alt .fill{background:#0b0e12}
-  .full{grid-column:1/-1}
-  .tdeal{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;padding:11px 0;border-bottom:1px solid var(--line)}
-  .tdeal:last-child{border-bottom:0}
-  .tdeal h4{font:600 15px/1.3 'Inter'}
-  .tdeal .m{color:var(--sub);font-size:12px;margin-top:2px}
-  .tdeal .amt{font-family:'Playfair Display',serif;font-weight:800;font-size:19px;color:var(--red);white-space:nowrap}
-  .tdeal:hover h4{color:var(--red)}
-  .foot{padding:6px 0 50px;color:var(--sub);font-size:12px}
-  @media(max-width:860px){.kpis{grid-template-columns:repeat(2,1fr)}.cols{grid-template-columns:1fr}}
-</style></head><body>
-
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu">
-    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
-    <span class="lbl">Menu</span>
-  </button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <a class="user" href="/search" aria-label="Search" title="Search">
-    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-  </a>
-</header>
-
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><div class="w">REN<span>TV</span></div><button id="dx" aria-label="Close">&times;</button></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/search">Search</a><a href="/pulse" class="active">Market Pulse</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial real estate news, Western U.S.</div>
-</aside>
-
-<main class="wrap">
-  <div class="phead">
-    <div><div class="k">Market Pulse</div><h1>Western U.S. deal flow, at a glance</h1></div>
-    <div class="upd" id="upd"></div>
-  </div>
-  <section class="kpis" id="kpis"></section>
-  <section class="cols">
-    <div class="card"><h3>Transaction volume by sector</h3><div id="byType"></div></div>
-    <div class="card"><h3>Deal count by transaction type</h3><div id="byTxn"></div></div>
-    <div class="card"><h3>Volume by state</h3><div id="byState"></div></div>
-    <div class="card" id="topcard"><h3>Largest tracked deals</h3><div id="top"></div></div>
-  </section>
-  <div class="foot" id="foot"></div>
-</main>
-
-<script>
-const $=id=>document.getElementById(id);
-const esc=s=>String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-const drawer=$('drawer'),scrim=$('scrim');
-$('burger').onclick=()=>{drawer.classList.add('open');scrim.classList.add('open')};
-const close=()=>{drawer.classList.remove('open');scrim.classList.remove('open')};
-$('dx').onclick=close;scrim.onclick=close;document.addEventListener('keydown',e=>{if(e.key==='Escape')close()});
-
-function bars(el,rows,valKey,labelKey,alt){
-  const max=Math.max(...rows.map(r=>r[valKey]),1);
-  el.innerHTML=rows.map(r=>`<div class="bar${alt?' alt':''}"><div class="r"><b>${esc(r.name)}</b><span class="n">${esc(r[labelKey])} · ${r.count} deal${r.count===1?'':'s'}</span></div><div class="track"><div class="fill" style="width:${Math.max(4,Math.round(r[valKey]/max*100))}%"></div></div></div>`).join('');
-}
-
-(async function(){
-  let d; try{ d=await (await fetch('/api/pulse')).json(); }catch(e){ $('kpis').innerHTML='<div class="foot">Pulse data unavailable.</div>'; return; }
-  const k=d.kpis;
-  $('kpis').innerHTML=[
-    ['hot',k.totalVolumeLabel,'Tracked volume'],
-    ['',k.dealCount,'Deals in feed'],
-    ['',k.avgSizeLabel,'Avg deal size'],
-    ['',k.marketCount,'Markets'],
-    ['',k.tracked,'Priced deals'],
-  ].map(([c,v,l])=>`<div class="kpi ${c}"><div class="v">${esc(v)}</div><div class="l">${esc(l)}</div></div>`).join('');
-  bars($('byType'),d.byPropertyType,'vol','volLabel',false);
-  bars($('byTxn'),d.byTxnType.slice().sort((a,b)=>b.count-a.count).map(r=>({...r,vol:r.count,volLabel:r.count+'×'})),'vol','volLabel',true);
-  bars($('byState'),d.byState,'vol','volLabel',false);
-  $('top').innerHTML=d.topDeals.map(t=>`<a class="tdeal" href="${esc(t.href)}"><div><h4>${esc(t.title)}</h4><div class="m">${[t.type,t.txn,t.where].filter(Boolean).map(esc).join(' · ')}</div></div><div class="amt">${esc(t.label)}</div></a>`).join('');
-  if(d.updated){const dt=new Date(d.updated);$('upd').textContent='Updated '+dt.toLocaleDateString(undefined,{month:'short',day:'numeric'})+', '+dt.toLocaleTimeString(undefined,{hour:'numeric',minute:'2-digit'});}
-  $('foot').textContent='Aggregated from RENTV’s tracked transaction feed. Figures reflect deals with a disclosed price.';
-})();
-</script>
-</body></html>
diff --git a/public/review.html.bak-nav b/public/review.html.bak-nav
deleted file mode 100644
index 797ff570..00000000
--- a/public/review.html.bak-nav
+++ /dev/null
@@ -1,233 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>The REview — RENTV.com Commercial Real Estate Video</title>
-<meta name="description" content="The REview by RENTV.com — free commercial real estate video: market analysis, technology, property showcases and industry events across the Western U.S.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  /* ── shared RENTV design system (same tokens as index.html) ── */
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--bg);line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .util .left a{color:#cfd4d9;margin-right:16px}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{border-bottom:2px solid var(--ink);padding:18px 0 12px}
-  .mast .wrap{display:flex;align-items:center;justify-content:space-between}
-  .logo{font-family:var(--serif);font-weight:700;font-size:42px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  .datebox{font-size:12px;color:var(--sub);text-align:right}
-  nav{border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:10}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  /* ── REview hero band ── */
-  .rhero{background:linear-gradient(120deg,#111827,#c8102e);color:#fff;padding:30px 0}
-  .rhero .wrap{display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap}
-  .rhero .k{font-size:11px;letter-spacing:.24em;text-transform:uppercase;opacity:.85}
-  .rhero h1{font-family:var(--serif);font-size:34px;line-height:1.1;margin:6px 0 6px}
-  .rhero p{font-size:14px;opacity:.92;max-width:56ch}
-  .rhero .cta{display:flex;gap:10px;flex:none}
-  .rhero .cta a{display:inline-block;font-weight:800;font-size:12px;text-transform:uppercase;letter-spacing:.06em;padding:11px 18px;border-radius:4px}
-  .rhero .cta .p{background:#fff;color:var(--red)}.rhero .cta .g{border:1.5px solid rgba(255,255,255,.6);color:#fff}
-  /* ── search + filter bar ── */
-  .toolbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;padding:22px 0 6px}
-  .toolbar input{flex:1;min-width:220px;padding:11px 14px;border:1px solid var(--line);border-radius:5px;font-size:14px;font-family:var(--sans)}
-  .chips{display:flex;gap:8px;flex-wrap:wrap;padding:8px 0 4px}
-  .chips button{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:7px 13px;border:1px solid var(--line);background:#fff;color:var(--sub);border-radius:20px;cursor:pointer}
-  .chips button.on{background:var(--red);border-color:var(--red);color:#fff}
-  .live{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--sub);letter-spacing:.06em;text-transform:uppercase;margin-left:auto}
-  .live .dot{width:7px;height:7px;border-radius:50%;background:#22c55e;animation:pulse 2s infinite}
-  @keyframes pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.6)}70%{box-shadow:0 0 0 7px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
-  /* ── rails + cards ── */
-  .rail{padding:14px 0 6px}
-  .sechead{display:flex;align-items:center;gap:12px;border-top:3px solid var(--ink);padding-top:10px;margin:22px 0 16px}
-  .sechead h2{font-size:16px;text-transform:uppercase;letter-spacing:.06em}
-  .sechead .count{margin-left:auto;font-size:12px;color:var(--sub)}
-  .cards{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:22px}
-  .vcard{display:block;cursor:pointer;text-align:left;background:none;border:0;padding:0;font:inherit;color:inherit}
-  .vcard .thumb{aspect-ratio:16/9;border-radius:6px;overflow:hidden;background:linear-gradient(135deg,#475569,#94a3b8);position:relative}
-  .vcard .thumb img{width:100%;height:100%;object-fit:cover;display:block}
-  .vcard .thumb::after{content:'▶';position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#fff;font-size:34px;text-shadow:0 2px 12px rgba(0,0,0,.5);opacity:.92;transition:transform .15s}
-  .vcard:hover .thumb::after{transform:scale(1.18)}
-  .vcard .rcat{display:inline-block;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--red);margin:9px 0 3px}
-  .vcard h4{font-family:var(--serif);font-size:16px;line-height:1.22}
-  .vcard .d{font-size:12px;color:var(--sub);margin-top:5px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
-  .empty{color:var(--sub);padding:26px 0}
-  /* ── watch modal ── */
-  .modal{position:fixed;inset:0;background:rgba(10,12,14,.86);display:none;align-items:center;justify-content:center;z-index:50;padding:20px}
-  .modal.open{display:flex}
-  .modal .panel{background:#0d0f11;border-radius:10px;overflow:hidden;max-width:960px;width:100%}
-  .modal .video{aspect-ratio:16/9;background:#000}.modal iframe{width:100%;height:100%;border:0}
-  .modal .meta{padding:16px 20px;color:#e7ebee}
-  .modal .meta .rcat{color:#ff6b81;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em}
-  .modal .meta h3{font-family:var(--serif);font-size:22px;margin:6px 0 8px}
-  .modal .meta p{font-size:13px;color:#aeb6bd}
-  .modal .meta .row{display:flex;gap:16px;align-items:center;margin-top:12px}
-  .modal .meta a{font-size:12px;font-weight:700;color:#ff6b81}
-  .modal .x{position:absolute;top:16px;right:22px;color:#fff;font-size:30px;cursor:pointer;line-height:1}
-  footer{background:var(--ink);color:#aeb6bd;margin-top:36px;padding:40px 0 30px;font-size:13px}
-  footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:28px}
-  footer .logo{color:#fff;font-size:26px;margin-bottom:8px}footer h5{color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}footer a{display:block;padding:4px 0;color:#aeb6bd}
-  footer .fine{border-top:1px solid #2a2f34;margin-top:26px;padding-top:16px;font-size:12px;color:#7c848b}
-  @media(max-width:980px){.cards{grid-template-columns:1fr 1fr 1fr}}
-  @media(max-width:720px){.cards{grid-template-columns:1fr 1fr}.rhero h1{font-size:26px}}
-  /* mobile hamburger nav — the .ham/.navlinks markup + JS toggle exist but the CSS was missing (parity with article.html) */
-  .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0}
-  @media(max-width:720px){
-    nav .wrap{overflow:visible}
-    .ham{display:block;margin-left:auto}
-    .navlinks{display:none;position:absolute;top:100%;left:0;right:0;background:#fff;flex-direction:column;align-items:stretch;border-bottom:2px solid var(--ink);box-shadow:0 10px 24px rgba(0,0,0,.14);z-index:30;max-height:78vh;overflow-y:auto}
-    .navlinks.open{display:flex}
-    .navlinks a{padding:15px 20px;border-bottom:1px solid var(--line);border-left:4px solid transparent;white-space:normal}
-    .navlinks a:hover{color:var(--red);border-left-color:var(--red)}
-  }
-</style>
-</head>
-<body>
-  <div class="util"><div class="wrap">
-    <div class="left"><a href="/">RENTV.com News</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="https://sublease.com/" target="_blank" rel="noopener">Sublease.com</a></div>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a class="sub" href="/subscribe">Subscribe</a></div>
-  </div></div>
-
-  <header class="mast"><div class="wrap">
-    <div class="logo">REN<span>TV</span>.com<small>Commercial Real Estate</small></div>
-    <div class="datebox"><span>The REview · CRE Video</span><br><span id="today"></span></div>
-  </div></header>
-
-  <nav><div class="wrap">
-    <button class="ham" id="hamBtn" aria-label="Menu" aria-expanded="false">☰</button>
-    <div class="navlinks" id="nav"><a href="/">Home</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/review" class="on">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/versions">Versions</a><a href="/blog">Blog</a></div>
-  </div></nav>
-
-  <section class="rhero"><div class="wrap">
-    <div>
-      <div class="k">The REview · by RENTV.com</div>
-      <h1>Commercial Real Estate, on video.</h1>
-      <p>Market analysis, technology, property showcases and industry-event coverage — the free CRE video hub from RENTV.com. Post your own, or advertise to the industry.</p>
-    </div>
-    <div class="cta">
-      <a class="p" href="/subscribe">Post a Video</a>
-      <a class="g" href="/advertise">Advertise</a>
-    </div>
-  </div></section>
-
-  <div class="wrap">
-    <div class="toolbar">
-      <input id="q" placeholder="Search The REview — companies, topics, markets…" autocomplete="off">
-      <span class="live"><span class="dot"></span><span id="freshness">live</span></span>
-    </div>
-    <div class="chips" id="chips"></div>
-    <div id="rails"><div class="empty">Loading The REview video catalog…</div></div>
-  </div>
-
-  <footer><div class="wrap"><div class="cols">
-    <div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals &amp; conferences across the Western United States since 1998.</p></div>
-    <div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
-    <div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
-    <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
-  </div><div class="fine">© 2026 RENTV.com · Commercial real estate news, Western U.S. · Headlines refreshed live from rentv.com</div></div></footer>
-
-  <div class="modal" id="modal">
-    <span class="x" id="mx">×</span>
-    <div class="panel">
-      <div class="video"><iframe id="mframe" allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture" allowfullscreen></iframe></div>
-      <div class="meta"><span class="rcat" id="mcat"></span><h3 id="mtitle"></h3><p id="mdesc"></p>
-        <div class="row"><a id="mlink" target="_blank" rel="noopener">Open on The REview ↗</a></div>
-      </div>
-    </div>
-  </div>
-
-<script>
-document.getElementById('today').textContent = new Date().toLocaleDateString(undefined,{weekday:'long',month:'long',day:'numeric',year:'numeric'});
-let ALL=[], CATS=[], cat='all', q='';
-const esc=s=>(s||'').replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-
-function chips(){
-  const all=['all',...CATS];
-  document.getElementById('chips').innerHTML=all.map(c=>
-    '<button data-cat="'+esc(c)+'"'+(c===cat?' class="on"':'')+'>'+(c==='all'?'All Video':esc(c))+'</button>').join('');
-}
-function match(v){
-  if(cat!=='all' && v.cat!==cat) return false;
-  if(q){const t=(v.title+' '+v.desc+' '+v.cat).toLowerCase(); if(!t.includes(q)) return false;}
-  return true;
-}
-function cardHTML(v){
-  return '<button class="vcard" data-id="'+esc(v.id)+'">'
-    +'<div class="thumb"><img loading="lazy" src="'+esc(v.thumb)+'" alt="'+esc(v.title)+'" onerror="this.style.display=\'none\'"></div>'
-    +'<span class="rcat">'+esc(v.cat)+'</span><h4>'+esc(v.title)+'</h4>'
-    +(v.desc?'<div class="d">'+esc(v.desc)+'</div>':'')+'</button>';
-}
-function render(){
-  const box=document.getElementById('rails');
-  const items=ALL.filter(match);
-  if(!items.length){box.innerHTML='<div class="empty">No videos match — try another search or category.</div>';return;}
-  // when browsing "all" with no query, group by rail; otherwise one flat result grid
-  if(cat==='all' && !q){
-    box.innerHTML=CATS.map(c=>{
-      const list=ALL.filter(v=>v.cat===c);
-      if(!list.length) return '';
-      return '<section class="rail"><div class="sechead"><h2>'+esc(c)+'</h2><span class="count">'+list.length+' video'+(list.length>1?'s':'')+'</span></div><div class="cards">'+list.map(cardHTML).join('')+'</div></section>';
-    }).join('');
-  }else{
-    box.innerHTML='<section class="rail"><div class="sechead"><h2>'+(q?'Results':esc(cat))+'</h2><span class="count">'+items.length+' video'+(items.length>1?'s':'')+'</span></div><div class="cards">'+items.map(cardHTML).join('')+'</div></section>';
-  }
-}
-function openVideo(id){
-  const v=ALL.find(x=>String(x.id)===String(id)); if(!v) return;  // coerce: /review?play=<id> param + numeric-vs-string api ids
-  const box=document.querySelector('.modal .video');
-  if(v.mp4){ // self-hosted RENTV Original — play a real <video>, not a YouTube iframe
-    box.innerHTML='<video id="mvid" src="'+esc(v.mp4)+'" poster="'+esc(v.thumb||'')+'" controls autoplay playsinline style="width:100%;height:100%;background:#000"></video>';
-  }else{
-    box.innerHTML='<iframe id="mframe" allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture" allowfullscreen></iframe>';
-    document.getElementById('mframe').src=v.embed?v.embed+'?autoplay=1&rel=0':'';
-  }
-  document.getElementById('mcat').textContent=v.cat;
-  document.getElementById('mtitle').textContent=v.title;
-  document.getElementById('mdesc').textContent=v.desc||'';
-  // Never link out to rentvreview.com. Videos carry a youtube id (v.yt) — YouTube video links are allowed;
-  // point "Open" at YouTube, hide the link when there's no non-rentvreview target (e.g. RENTV Originals mp4).
-  const mlink=document.getElementById('mlink'); if(mlink){
-    const yt=v.yt?('https://www.youtube.com/watch?v='+v.yt):'';
-    const ext=yt||((v.view_url&&!/rentvreview\.com/i.test(v.view_url))?v.view_url:'');
-    mlink.href=ext||'#'; mlink.textContent=yt?'Watch on YouTube ↗':'Open ↗'; mlink.style.display=ext?'':'none';
-  }
-  document.getElementById('modal').classList.add('open');
-}
-function closeVideo(){document.getElementById('modal').classList.remove('open');const box=document.querySelector('.modal .video');if(box)box.innerHTML='';}
-
-document.getElementById('rails').addEventListener('click',e=>{const b=e.target.closest('.vcard');if(b)openVideo(b.dataset.id);});
-document.getElementById('chips').addEventListener('click',e=>{const b=e.target.closest('button[data-cat]');if(!b)return;cat=b.dataset.cat;chips();render();});
-document.getElementById('q').addEventListener('input',e=>{q=e.target.value.trim().toLowerCase();render();});
-document.getElementById('mx').onclick=closeVideo;
-document.getElementById('modal').addEventListener('click',e=>{if(e.target.id==='modal')closeVideo();});
-document.addEventListener('keydown',e=>{if(e.key==='Escape')closeVideo();});
-
-async function load(){
-  try{
-    const d=await (await fetch('/api/videos')).json();
-    ALL=d.items||[]; CATS=d.cats||[...new Set(ALL.map(v=>v.cat))];
-    chips(); render();
-    // Deep-link: /review?play=<id> auto-opens that video's in-app watch-modal. This is the
-    // href-drill target for featured/pinned videos (e.g. the /social featured clip) so they
-    // land on the specific video in-app instead of a rentvreview.com link-out.
-    var _pl=new URLSearchParams(location.search).get('play'); if(_pl) openVideo(_pl);
-    if(d.fetched_at){
-      const mins=Math.max(0,Math.round((Date.now()-new Date(d.fetched_at))/60000));
-      document.getElementById('freshness').textContent=mins<2?'synced just now':('synced '+mins+' min ago');
-      var _src=document.getElementById('src');if(_src)_src.textContent='last sync '+new Date(d.fetched_at).toLocaleTimeString();
-    }
-  }catch(e){document.getElementById('rails').innerHTML='<div class="empty">The REview catalog is temporarily unavailable — retrying…</div>';}
-}
-load(); setInterval(load, 300000); // re-sync every 5 min
-var hb=document.getElementById('hamBtn');if(hb)hb.addEventListener('click',function(){var o=document.getElementById('nav').classList.toggle('open');hb.setAttribute('aria-expanded',o);});
-</script>
-<script src="/theme.js"></script>
-</body>
-</html>
diff --git a/public/search.html.bak-nav b/public/search.html.bak-nav
deleted file mode 100644
index b9a97afb..00000000
--- a/public/search.html.bak-nav
+++ /dev/null
@@ -1,152 +0,0 @@
-<!doctype html><html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Search — RENTV.com</title>
-<meta name="description" content="Search every commercial real estate story, deal, market, video and firm across RENTV.com from one box.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--wash:#f5f6f8}
-  *{box-sizing:border-box;margin:0}
-  body{font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:#fbfbfc;line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
-  .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:inherit;padding:7px 9px;border-radius:8px}
-  .burger:hover{background:rgba(0,0,0,.06)}
-  .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--sub)}
-  .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em}.brand span{color:var(--red)}
-  .user{width:37px;height:37px;border-radius:50%;border:1.5px solid var(--line);background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink)}
-  .user:hover{border-color:var(--red);color:var(--red)}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800}.drawer .dh .w span{color:var(--red)}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .grp{padding:14px 18px 4px}.grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:var(--red);color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:var(--red);color:#fff;font-weight:700}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-
-  .wrap{max-width:900px;margin:0 auto;padding:0 22px;width:100%}
-  .searchhero{padding:46px 0 20px;text-align:center}
-  .searchhero .kick{color:var(--red);font-weight:800;font-size:12px;letter-spacing:.16em;text-transform:uppercase}
-  .searchhero h1{font-family:'Playfair Display',serif;font-size:clamp(32px,4vw,46px);font-weight:700;letter-spacing:-.01em;margin:6px 0 4px}
-  .searchhero p{color:var(--sub);font-size:15px}
-  .sbox{position:relative;margin:22px auto 0;max-width:640px}
-  .sbox svg{position:absolute;left:18px;top:50%;transform:translateY(-50%);color:var(--sub)}
-  .sbox input{width:100%;font:600 18px/1 'Inter';padding:18px 20px 18px 52px;border:2px solid var(--line);border-radius:12px;outline:0;transition:border-color .16s,box-shadow .16s;background:#fff}
-  .sbox input:focus{border-color:var(--red);box-shadow:0 0 0 4px rgba(200,16,46,.09)}
-  .meta{max-width:640px;margin:12px auto 0;color:var(--sub);font-size:12.5px;font-weight:600;letter-spacing:.02em;min-height:18px}
-  .chips{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin:14px auto 0;max-width:640px}
-  .chips b{font-size:11px;color:var(--sub);letter-spacing:.1em;text-transform:uppercase;align-self:center}
-  .chip{border:1px solid var(--line);background:#fff;border-radius:20px;padding:6px 13px;font:600 12.5px 'Inter';color:var(--ink);cursor:pointer}
-  .chip:hover{border-color:var(--red);color:var(--red)}
-
-  .results{padding:14px 0 60px}
-  .grp2{margin-top:26px}
-  .grp2 .gt{font-size:12px;text-transform:uppercase;letter-spacing:.09em;border-top:2px solid var(--ink);padding-top:9px;margin-bottom:10px;font-weight:800;display:flex;justify-content:space-between}
-  .grp2 .gt .n{color:var(--sub);font-weight:700}
-  .hit{display:grid;grid-template-columns:64px 1fr;gap:14px;padding:12px 0;border-bottom:1px solid var(--line);align-items:center}
-  .hit .im{width:64px;height:48px;border-radius:5px;background:#12161a center/cover}
-  .hit .im.none{display:flex;align-items:center;justify-content:center;color:#59636d;font-size:9px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;background:var(--wash);border:1px solid var(--line)}
-  .hit h4{font:600 16px/1.28 'Inter'}
-  .hit .sub{color:var(--sub);font-size:12.5px;margin-top:2px}
-  .hit:hover h4{color:var(--red)}
-  mark{background:rgba(200,16,46,.15);color:inherit;border-radius:2px;padding:0 1px}
-  .empty{padding:56px 0;text-align:center;color:var(--sub)}
-  .empty h3{font-family:'Playfair Display',serif;font-size:24px;color:var(--ink);margin-bottom:6px}
-  .spin{display:inline-block;width:15px;height:15px;border:2px solid var(--line);border-top-color:var(--red);border-radius:50%;animation:sp .7s linear infinite;vertical-align:-2px;margin-right:6px}@keyframes sp{to{transform:rotate(360deg)}}
-</style></head><body>
-
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu">
-    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
-    <span class="lbl">Menu</span>
-  </button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <a class="user" href="/search" aria-label="Search" title="Search">
-    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-  </a>
-</header>
-
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><div class="w">REN<span>TV</span></div><button id="dx" aria-label="Close">&times;</button></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/search" class="active">Search</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial real estate news, Western U.S.</div>
-</aside>
-
-<main>
-  <section class="searchhero wrap">
-    <div class="kick">Search RENTV</div>
-    <h1>One box. Every deal, story &amp; market.</h1>
-    <p>Search across news, transactions, The REview, videos and LA firms.</p>
-    <div class="sbox">
-      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-      <input id="q" type="search" autocomplete="off" placeholder="Try “office”, “Los Angeles”, “refinance”, “industrial sale”…" autofocus>
-    </div>
-    <div class="meta" id="meta"></div>
-    <div class="chips" id="chips"><b>Try</b></div>
-  </section>
-  <section class="results wrap" id="results"></section>
-</main>
-
-<script>
-const $=id=>document.getElementById(id);
-const esc=s=>String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-// drawer
-const drawer=$('drawer'),scrim=$('scrim');
-const open=()=>{drawer.classList.add('open');scrim.classList.add('open')};
-const close=()=>{drawer.classList.remove('open');scrim.classList.remove('open')};
-$('burger').onclick=open;$('dx').onclick=close;scrim.onclick=close;
-document.addEventListener('keydown',e=>{if(e.key==='Escape')close()});
-
-const SUGG=['Office','Industrial','Los Angeles','Multifamily','Refinance','Retail','Development'];
-$('chips').insertAdjacentHTML('beforeend',SUGG.map(s=>`<button class="chip" data-q="${esc(s)}">${esc(s)}</button>`).join(''));
-$('chips').addEventListener('click',e=>{const b=e.target.closest('.chip');if(b){$('q').value=b.dataset.q;run(b.dataset.q)}});
-
-function hl(text,q){ const t=esc(text); const ts=q.trim().split(/\s+/).filter(x=>x.length>1).map(x=>x.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')); if(!ts.length)return t; return t.replace(new RegExp('('+ts.join('|')+')','ig'),'<mark>$1</mark>'); }
-
-let timer=null, seq=0;
-$('q').addEventListener('input',e=>{const v=e.target.value;clearTimeout(timer);timer=setTimeout(()=>run(v),160)});
-
-// deep-link ?q=
-const initial=new URLSearchParams(location.search).get('q');
-if(initial){$('q').value=initial;run(initial);}
-
-async function run(q){
-  q=(q||'').trim();
-  const my=++seq;
-  const hist=new URLSearchParams(location.search);
-  if(q){hist.set('q',q)}else{hist.delete('q')}
-  history.replaceState(null,'','/search'+(q?('?'+hist.toString()):''));
-  if(q.length<2){$('meta').textContent='';$('results').innerHTML='';return;}
-  $('meta').innerHTML='<span class="spin"></span>Searching…';
-  let data;
-  try{ const r=await fetch('/api/search?q='+encodeURIComponent(q)); data=await r.json(); }
-  catch(err){ if(my===seq)$('meta').textContent='Search unavailable — try again.'; return; }
-  if(my!==seq) return; // a newer keystroke won
-  if(!data.total){
-    $('meta').textContent='';
-    $('results').innerHTML='<div class="empty"><h3>No matches for “'+esc(q)+'”</h3><div>Try a broader term — a city, property type, or firm.</div></div>';
-    return;
-  }
-  $('meta').textContent=data.total+' result'+(data.total===1?'':'s')+' across '+data.groups.length+' section'+(data.groups.length===1?'':'s');
-  $('results').innerHTML=data.groups.map(g=>`
-    <div class="grp2"><div class="gt">${esc(g.type)}<span class="n">${g.items.length}</span></div>
-    ${g.items.map(it=>`<a class="hit" href="${esc(it.href)}"${/^https?:/.test(it.href)?' target="_blank" rel="noopener noreferrer"':''}>
-      ${it.image?`<span class="im" style="background-image:url('${esc(it.image)}')"></span>`:`<span class="im none">${esc(g.type)}</span>`}
-      <span><h4>${hl(it.title,q)}</h4>${it.sub?`<div class="sub">${hl(it.sub,q)}</div>`:''}</span></a>`).join('')}
-    </div>`).join('');
-}
-</script>
-</body></html>
diff --git a/public/section.html.bak-nav b/public/section.html.bak-nav
deleted file mode 100644
index 1242562c..00000000
--- a/public/section.html.bak-nav
+++ /dev/null
@@ -1,130 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>RENTV.com — Section</title>
-<meta name="description" content="Commercial real estate news by section — RENTV.com.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--bg);line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{border-bottom:2px solid var(--ink);padding:18px 0 12px}
-  .mast .wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:3px}
-  .logo{font-family:var(--serif);font-weight:700;font-size:42px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  .datebox{font-size:12px;color:var(--sub);text-align:center}
-  nav{border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:10}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
-  .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
-  .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  @media(max-width:860px){
-    .ham{display:block;margin-left:auto}
-    nav .wrap{height:52px}
-    .navlinks{display:none;position:absolute;top:52px;left:0;right:0;background:#fff;flex-direction:column;align-items:stretch;border-bottom:2px solid var(--ink);box-shadow:0 10px 24px rgba(0,0,0,.14);z-index:30;max-height:78vh;overflow-y:auto}
-    .navlinks.open{display:flex}
-    .navlinks a{padding:15px 20px;border-bottom:1px solid var(--line);border-left:4px solid transparent}
-    .navlinks a:hover,.navlinks a.on{color:var(--red);border-bottom:1px solid var(--line);border-left-color:var(--red)}
-  }
-  .head{padding:30px 0 6px}
-  .head .chip{display:inline-block;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--red);margin-bottom:4px}
-  .head h1{font-family:var(--serif);font-size:34px;letter-spacing:-.5px}
-  .head .sub{font-size:13px;color:var(--sub);margin-top:6px}
-  .crumb{font-size:12px;color:var(--sub);padding:14px 0 0}.crumb a{color:var(--red);font-weight:700}
-  .cards{display:grid;grid-template-columns:1fr 1fr 1fr;gap:22px;padding:22px 0 10px}
-  .card{display:block}
-  .card .img{aspect-ratio:16/10;border-radius:5px;background:linear-gradient(135deg,#475569,#94a3b8)}
-  .card:nth-child(3n+2) .img{background:linear-gradient(135deg,#7c2d12,#c8102e)}
-  .card:nth-child(3n) .img{background:linear-gradient(135deg,#0f766e,#14b8a6)}
-  .card h4{font-family:var(--serif);font-size:18px;line-height:1.22;margin:10px 0 4px}
-  .card .byl{font-size:12px;color:var(--sub);margin-top:6px}
-  .live{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--sub);letter-spacing:.06em;text-transform:uppercase}
-  .live .dot{width:7px;height:7px;border-radius:50%;background:#22c55e;animation:pulse 2s infinite}
-  @keyframes pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.6)}70%{box-shadow:0 0 0 7px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
-  .empty{color:var(--sub);padding:40px 0}
-  .skl{background:linear-gradient(90deg,#eee,#f6f6f6,#eee);background-size:200% 100%;animation:sh 1.2s infinite;border-radius:4px;color:transparent}
-  @keyframes sh{to{background-position:-200% 0}}
-  footer{background:var(--ink);color:#aeb6bd;margin-top:36px;padding:40px 0 30px;font-size:13px}
-  footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:28px}
-  footer .logo{color:#fff;font-size:26px;margin-bottom:8px}footer h5{color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}footer a{display:block;padding:4px 0;color:#aeb6bd}
-  footer .fine{border-top:1px solid #2a2f34;margin-top:26px;padding-top:16px;font-size:12px;color:#7c848b}
-  @media(max-width:860px){.cards{grid-template-columns:1fr 1fr}}
-</style>
-</head>
-<body>
-  <div class="util"><div class="wrap">
-    <div><a href="/">RENTV.com</a> · Commercial Real Estate News</div>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a class="sub" href="/subscribe">Subscribe</a></div>
-  </div></div>
-
-  <header class="mast"><div class="wrap">
-    <a href="/" class="logo">REN<span>TV</span>.com<small>Commercial Real Estate News</small></a>
-    <div class="datebox"><span>Western U.S. Edition</span><br><span id="today"></span></div>
-  </div></header>
-
-  <nav><div class="wrap">
-    <button class="ham" id="hamBtn" aria-label="Menu" aria-expanded="false">☰</button>
-    <div class="navlinks" id="nav"><a href="/">Home</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/versions">Versions</a><a href="/blog">Blog</a></div>
-  </div></nav>
-
-  <div class="wrap">
-    <div class="crumb"><a href="/">Home</a> › <span id="crumbcat">Section</span></div>
-    <div class="head">
-      <span class="chip" id="chip">Section</span>
-      <h1 id="secname">Loading…</h1>
-      <div class="sub"><span class="live"><span class="dot"></span><span id="count">live from rentv.com</span></span></div>
-    </div>
-    <div class="cards" id="cards">
-      <div class="card"><div class="img skl"></div><h4 class="skl">&nbsp;</h4></div>
-      <div class="card"><div class="img skl"></div><h4 class="skl">&nbsp;</h4></div>
-      <div class="card"><div class="img skl"></div><h4 class="skl">&nbsp;</h4></div>
-    </div>
-  </div>
-
-  <footer><div class="wrap"><div class="cols">
-    <div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals &amp; conferences across the Western United States since 1998.</p></div>
-    <div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
-    <div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
-    <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
-  </div><div class="fine">© 2026 RENTV.com · Commercial real estate news, Western U.S. · Headlines refreshed live from rentv.com</div></div></footer>
-
-<script>
-document.getElementById('today').textContent = new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
-const esc=s=>(s||'').replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-// Category is the last path segment: /financing -> Financing
-const slug=(location.pathname.split('/').filter(Boolean)[0]||'sales').toLowerCase();
-const CAT=slug.charAt(0).toUpperCase()+slug.slice(1);
-document.title='RENTV.com — '+CAT;
-document.getElementById('secname').textContent=CAT;
-document.getElementById('chip').textContent=CAT+' · Western U.S.';
-document.getElementById('crumbcat').textContent=CAT;
-// mark active nav
-document.querySelectorAll('#nav a').forEach(a=>{if(a.getAttribute('href')==='/'+slug)a.classList.add('on');});
-const hamBtn=document.getElementById('hamBtn');
-hamBtn.addEventListener('click',()=>{const open=document.getElementById('nav').classList.toggle('open');hamBtn.setAttribute('aria-expanded',open);});
-async function load(){
-  try{
-    const d=await (await fetch('/api/news')).json();
-    const items=(d.items||[]).filter(x=>(x.cat||'').toLowerCase()===slug);
-    const box=document.getElementById('cards');
-    if(!items.length){box.className='';box.innerHTML='<p class="empty">No '+esc(CAT)+' stories in the live feed right now. <a href="/" style="color:var(--red);font-weight:700">Back to the homepage →</a></p>';return;}
-    document.getElementById('count').textContent=items.length+' live '+(items.length===1?'story':'stories');
-    box.className='cards';
-    box.innerHTML=items.map(x=>'<a class="card" href="/news/'+encodeURIComponent(x.id)+'"><div class="img"'+((x.image)?(' style="background:#12161a url(\''+esc(x.image)+'\') center/cover"'):'')+'></div><h4>'+esc(x.title)+'</h4><div class="byl">RENTV Staff · read in-shell</div></a>').join('');
-  }catch(e){
-    document.getElementById('cards').innerHTML='<p class="empty">Live feed temporarily unavailable — <a href="/" style="color:var(--red);font-weight:700">back to homepage</a>.</p>';
-  }
-}
-load();
-</script>
-<script src="/theme.js"></script>
-</body>
-</html>
diff --git a/public/sector.html.bak-nav b/public/sector.html.bak-nav
deleted file mode 100644
index 906f6974..00000000
--- a/public/sector.html.bak-nav
+++ /dev/null
@@ -1,167 +0,0 @@
-<!doctype html><html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Sector Deep-Dive — RENTV.com</title>
-<meta name="description" content="RENTV sector deep-dives — multifamily, office, industrial and retail commercial real estate deal flow, stats and news across the Western U.S.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--wash:#f5f6f8;--up:#0f8a4d}
-  *{box-sizing:border-box;margin:0}
-  body{font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:#fbfbfc;line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
-  .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:inherit;padding:7px 9px;border-radius:8px}
-  .burger:hover{background:rgba(0,0,0,.06)}
-  .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--sub)}
-  .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em}.brand span{color:var(--red)}
-  .user{width:37px;height:37px;border-radius:50%;border:1.5px solid var(--line);background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink)}
-  .user:hover{border-color:var(--red);color:var(--red)}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800}.drawer .dh .w span{color:var(--red)}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .grp{padding:14px 18px 4px}.grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:var(--red);color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:var(--red);color:#fff;font-weight:700}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-
-  .wrap{max-width:1080px;margin:0 auto;padding:0 22px;width:100%}
-  .pills{display:flex;gap:8px;flex-wrap:wrap;padding:22px 0 4px}
-  .pill{border:1.5px solid var(--line);background:#fff;border-radius:22px;padding:9px 18px;font:800 13.5px 'Inter';color:var(--ink);cursor:pointer;transition:.14s}
-  .pill:hover{border-color:var(--red)}
-  .pill.on{background:var(--red);border-color:var(--red);color:#fff}
-  .shead{padding:16px 0 2px}
-  .shead .k{color:var(--red);font-weight:800;font-size:12px;letter-spacing:.16em;text-transform:uppercase}
-  .shead h1{font-family:'Playfair Display',serif;font-size:clamp(34px,4.4vw,52px);font-weight:700;letter-spacing:-.01em;margin-top:4px}
-  .shead p{color:var(--sub);font-size:15px;margin-top:4px;max-width:640px}
-  .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;padding:20px 0 6px}
-  .kpi{background:#fff;border:1px solid var(--line);border-radius:12px;padding:15px 16px}
-  .kpi .v{font-family:'Playfair Display',serif;font-size:27px;font-weight:800}
-  .kpi .l{color:var(--sub);font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-top:3px}
-  .kpi.hot{background:var(--red);color:#fff;border-color:var(--red)}.kpi.hot .l{color:rgba(255,255,255,.85)}
-  .share{height:8px;background:var(--wash);border-radius:6px;overflow:hidden;margin:14px 0 2px}
-  .share .f{height:100%;background:var(--red);border-radius:6px;transition:width .6s}
-  .sharelbl{color:var(--sub);font-size:12px;font-weight:600;margin-bottom:6px}
-  .cta{display:flex;gap:10px;flex-wrap:wrap;padding:16px 0 0}
-  .cta a{display:inline-flex;align-items:center;gap:7px;border:1.5px solid var(--line);background:#fff;border-radius:9px;padding:10px 16px;font:800 12.5px 'Inter';color:var(--ink)}
-  .cta a:hover{border-color:var(--red);color:var(--red)}
-  .cta a.go{background:var(--red);border-color:var(--red);color:#fff}.cta a.go:hover{color:#fff}
-  .cols{display:grid;grid-template-columns:1.15fr 1fr;gap:28px;padding:26px 0 60px}
-  @media(max-width:820px){.cols{grid-template-columns:1fr}.kpis{grid-template-columns:1fr 1fr}}
-  .card h3{font-size:12px;text-transform:uppercase;letter-spacing:.09em;border-top:2px solid var(--ink);padding-top:10px;margin-bottom:8px;font-weight:800}
-  .deal{display:grid;grid-template-columns:1fr auto;gap:12px;padding:11px 0;border-bottom:1px solid var(--line);align-items:center}
-  .deal h4{font:600 15px/1.3 'Inter'}.deal .m{color:var(--sub);font-size:12px;margin-top:2px}
-  .deal .amt{font-family:'Playfair Display',serif;font-weight:800;font-size:17px;color:var(--red);white-space:nowrap}
-  .deal:hover h4{color:var(--red)}
-  .hl{display:grid;grid-template-columns:auto 1fr;gap:11px;padding:10px 0;border-bottom:1px solid var(--line);align-items:baseline}
-  .hl .c{font-size:9px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#fff;background:#4a4f55;border-radius:20px;padding:3px 8px;white-space:nowrap}
-  .hl h4{font:600 14.5px/1.3 'Inter'}.hl:hover h4{color:var(--red)}
-  .none{color:var(--sub);font-size:13.5px;padding:14px 0}
-</style></head><body>
-
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu">
-    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
-    <span class="lbl">Menu</span>
-  </button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <a class="user" href="/search" aria-label="Search" title="Search">
-    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-  </a>
-</header>
-
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><div class="w">REN<span>TV</span></div><button id="dx" aria-label="Close">&times;</button></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/search">Search</a><a href="/pulse">Market Pulse</a><a href="/sector" class="active">Sector Deep-Dives</a><a href="/metros">Deal Flow by Metro</a><a href="/tools">CRE Toolkit</a><a href="/watchlist">Deal Watchlist</a><a href="/directory">CRE Directory</a><a href="/compare">Deal Comparison</a><a href="/brief">The RENTV Brief</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial real estate news, Western U.S.</div>
-</aside>
-
-<main class="wrap">
-  <div class="pills" id="pills"></div>
-  <div class="shead"><div class="k" id="kick">Sector Deep-Dive</div><h1 id="title">—</h1><p id="blurb"></p></div>
-  <div class="kpis" id="kpis"></div>
-  <div class="sharelbl" id="sharelbl"></div><div class="share"><div class="f" id="sharefill" style="width:0"></div></div>
-  <div class="cta" id="cta"></div>
-  <div class="cols">
-    <div class="card"><h3 id="dealsH">Top Deals</h3><div id="deals"></div></div>
-    <div class="card"><h3 id="newsH">Latest News</h3><div id="news"></div></div>
-  </div>
-</main>
-
-<script>
-const $=id=>document.getElementById(id);
-const esc=s=>String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-const drawer=$('drawer'),scrim=$('scrim');
-$('burger').onclick=()=>{drawer.classList.add('open');scrim.classList.add('open')};
-const close=()=>{drawer.classList.remove('open');scrim.classList.remove('open')};
-$('dx').onclick=close;scrim.onclick=close;document.addEventListener('keydown',e=>{if(e.key==='Escape')close()});
-const usd=n=>!n?'—':n>=1e9?('$'+(n/1e9).toFixed(1)+'B'):n>=1e6?('$'+(n/1e6).toFixed(1)+'M'):('$'+Math.round(n/1e3)+'K');
-
-const SECTORS={
-  Multifamily:{blurb:'Apartment and residential investment sales, financing and development across the Western U.S.',news:/multifamily|apartment|res community|residential|\bunit/i},
-  Office:{blurb:'Office towers, campuses and workplace assets — sales, leasing and refinancing.',news:/office|workplace|tower|high-rise/i},
-  Industrial:{blurb:'Warehouse, distribution and logistics real estate — the backbone of the supply chain.',news:/industrial|distribution|warehouse|logistics|manufacturing|msf|\bsf\b/i},
-  Retail:{blurb:'Shopping centers, storefronts and mixed-use retail assets.',news:/retail|shopping|storefront|mall|grocery|center/i},
-};
-let ALL={deals:[],news:[],pulse:{}}, cur='Multifamily';
-
-const p=new URLSearchParams(location.search);
-if(p.get('type')&&SECTORS[p.get('type')])cur=p.get('type');
-
-function pills(){
-  $('pills').innerHTML=Object.keys(SECTORS).map(s=>`<button class="pill${s===cur?' on':''}" data-s="${s}">${s}</button>`).join('');
-  $('pills').querySelectorAll('.pill').forEach(b=>b.onclick=()=>{cur=b.dataset.s;history.replaceState(null,'','/sector?type='+encodeURIComponent(cur));render();});
-}
-function render(){
-  pills();
-  const def=SECTORS[cur];
-  $('title').textContent=cur;
-  $('blurb').textContent=def.blurb;
-  $('dealsH').textContent='Top '+cur+' Deals';
-  $('newsH').textContent='Latest '+cur+' News';
-
-  const deals=ALL.deals.filter(d=>d.property_type===cur);
-  const priced=deals.filter(d=>d.amount);
-  const vol=priced.reduce((s,d)=>s+d.amount,0);
-  const totalVol=ALL.deals.filter(d=>d.amount).reduce((s,d)=>s+d.amount,0);
-  const markets=new Set(deals.map(d=>[d.city,d.state].filter(Boolean).join(', ')).filter(Boolean)).size;
-  const share=totalVol?vol/totalVol*100:0;
-  $('kpis').innerHTML=[
-    ['hot',usd(vol),'Tracked volume'],['',deals.length,'Deals'],
-    ['',priced.length?usd(vol/priced.length):'—','Avg size'],['',markets,'Markets'],
-  ].map(([c,v,l])=>`<div class="kpi ${c}"><div class="v">${esc(v)}</div><div class="l">${esc(l)}</div></div>`).join('');
-  $('sharelbl').innerHTML=`<b style="color:var(--ink)">${share.toFixed(0)}%</b> of all tracked deal volume`;
-  $('sharefill').style.width=Math.max(3,share)+'%';
-
-  $('cta').innerHTML=`<a class="go" href="/watchlist?types=${encodeURIComponent(cur)}">⭐ Watch ${esc(cur)} deals</a><a href="/compare">⚖️ Compare deals</a><a href="/search?q=${encodeURIComponent(cur)}">🔎 Search ${esc(cur)}</a>`;
-
-  const top=priced.sort((a,b)=>b.amount-a.amount).slice(0,6);
-  $('deals').innerHTML=top.length?top.map(d=>`<a class="deal" href="/deals"><div><h4>${esc(d.title)}</h4><div class="m">${[d.txn_type,[d.city,d.state].filter(Boolean).join(', ')].filter(Boolean).map(esc).join(' · ')}</div></div><div class="amt">${esc(d.amount_label||usd(d.amount))}</div></a>`).join(''):'<div class="none">No priced deals in this sector yet.</div>';
-
-  const nz=ALL.news.filter(n=>def.news.test(`${n.title} ${n.cat||''}`)).slice(0,8);
-  $('news').innerHTML=nz.length?nz.map(n=>`<a class="hl" href="/article.html?id=${encodeURIComponent(n.id)}"><span class="c">${esc(n.cat||'News')}</span><h4>${esc(n.title)}</h4></a>`).join(''):'<div class="none">No recent headlines in this sector.</div>';
-}
-
-(async function(){
-  try{ const [deals,news,pulse]=await Promise.all([
-    fetch('/api/deals?limit=200').then(r=>r.json()),
-    fetch('/api/news').then(r=>r.json()),
-    fetch('/api/pulse').then(r=>r.json()),
-  ]); ALL={deals:deals.deals||[],news:news.items||[],pulse:pulse}; }
-  catch(e){ $('kpis').innerHTML='<div class="none">Sector data unavailable.</div>'; return; }
-  render();
-})();
-</script>
-</body></html>
diff --git a/public/subscribe.html.bak-nav b/public/subscribe.html.bak-nav
deleted file mode 100644
index 6b06cb59..00000000
--- a/public/subscribe.html.bak-nav
+++ /dev/null
@@ -1,150 +0,0 @@
-<!doctype html>
-<html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Subscribe — RENTV.com</title>
-<meta name="description" content="Get the free RENTV Daily — Western-U.S. commercial real estate deals, leases and financings in your inbox every morning.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--bg:#fff;--wash:#f5f6f8;--sans:'Inter',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif}
-  *{box-sizing:border-box;margin:0;padding:0}
-  body{font-family:var(--sans);color:var(--ink);background:var(--bg);line-height:1.5}
-  a{color:inherit;text-decoration:none}
-  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
-  .util{background:var(--ink);color:#cfd4d9;font-size:12px}
-  .util .wrap{display:flex;justify-content:space-between;align-items:center;height:34px}
-  .ticker{display:flex;gap:20px;overflow:hidden;white-space:nowrap}.ticker b{color:#fff}.up{color:#4ade80}.dn{color:#f87171}
-  .util .acts a{margin-left:14px;color:#cfd4d9}.util .acts a.sub{color:#fff;background:var(--red);padding:4px 12px;border-radius:3px;font-weight:700}
-  .mast{border-bottom:2px solid var(--ink);padding:20px 0 14px}
-  .mast .wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:3px}
-  .logo{font-family:var(--serif);font-weight:700;font-size:42px;letter-spacing:-1px}.logo span{color:var(--red)}
-  .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
-  .datebox{font-size:12px;color:var(--sub);text-align:center}
-  nav{border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:10}
-  nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
-  .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
-  .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
-  nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
-  @media(max-width:860px){
-    .ham{display:block;margin-left:auto}
-    nav .wrap{height:52px}
-    .navlinks{display:none;position:absolute;top:52px;left:0;right:0;background:#fff;flex-direction:column;align-items:stretch;border-bottom:2px solid var(--ink);box-shadow:0 10px 24px rgba(0,0,0,.14);z-index:30;max-height:78vh;overflow-y:auto}
-    .navlinks.open{display:flex}
-    .navlinks a{padding:15px 20px;border-bottom:1px solid var(--line);border-left:4px solid transparent}
-    .navlinks a:hover,.navlinks a.on{color:var(--red);border-bottom:1px solid var(--line);border-left-color:var(--red)}
-  }
-  .phero{background:linear-gradient(135deg,#111827,#c8102e);color:#fff;padding:54px 0}
-  .phero .k{font-size:12px;letter-spacing:.22em;text-transform:uppercase;opacity:.85;margin-bottom:12px}
-  .phero h1{font-family:var(--serif);font-size:clamp(32px,5vw,52px);line-height:1.08;letter-spacing:-.5px;max-width:20ch}
-  .phero p{max-width:60ch;margin-top:14px;font-size:17px;opacity:.94}
-  .rv{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease}.rv.in{opacity:1;transform:none}
-  @media(prefers-reduced-motion:reduce){.rv{transition:none;opacity:1;transform:none}}
-  section.blk{padding:52px 0;border-bottom:1px solid var(--line)}
-  .eyebrow{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.14em;color:var(--red);margin-bottom:10px}
-  h2.big{font-family:var(--serif);font-size:clamp(26px,3.4vw,38px);line-height:1.12;letter-spacing:-.4px;max-width:24ch}
-  .lead2{max-width:66ch;color:var(--sub);margin-top:12px;font-size:18px}
-  .cols3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:30px}
-  .cols2{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:30px}
-  @media(max-width:860px){.cols3{grid-template-columns:1fr}.cols2{grid-template-columns:1fr}}
-  .tile{border:1px solid var(--line);border-radius:8px;padding:26px 24px;transition:.25s;background:#fff}
-  .tile:hover{transform:translateY(-4px);box-shadow:0 18px 44px rgba(0,0,0,.09);border-color:#cfd4d9}
-  .tile .n{font-family:var(--serif);font-size:15px;color:var(--red)}
-  .tile h3{font-family:var(--serif);font-size:22px;margin:8px 0 8px}
-  .tile p{color:var(--sub);font-size:15px}
-  .tile .price{margin-top:14px;font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--ink)}
-  .statrow{display:flex;flex-wrap:wrap;gap:44px;margin-top:26px}
-  .statrow .v{font-family:var(--serif);font-size:40px;color:var(--red);line-height:1}
-  .statrow .l{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--sub);margin-top:6px}
-  .cta{display:inline-block;background:var(--red);color:#fff;font-weight:800;font-size:13px;text-transform:uppercase;letter-spacing:.06em;padding:13px 26px;border-radius:5px;cursor:pointer;border:0;margin-top:22px}
-  .cta.ghost{background:transparent;color:var(--ink);border:1.5px solid var(--ink)}
-  .cta:hover{filter:brightness(1.06)}
-  .form{max-width:520px;margin-top:26px}
-  .form label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--sub);margin:14px 0 6px}
-  .form input,.form select{width:100%;padding:12px 14px;border:1px solid var(--line);border-radius:5px;font-size:15px;font-family:inherit}
-  .form .ok{display:none;margin-top:14px;padding:12px 16px;background:#ecfdf3;border:1px solid #a7f3d0;border-radius:6px;color:#067647;font-size:14px}
-  .kv{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--line);font-size:15px}.kv b{font-weight:700}
-  footer{background:var(--ink);color:#aeb6bd;margin-top:0;padding:40px 0 30px;font-size:13px}
-  footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:28px}
-  footer .logo{color:#fff;font-size:26px;margin-bottom:8px}footer h5{color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}footer a{display:block;padding:4px 0;color:#aeb6bd}
-  footer .fine{border-top:1px solid #2a2f34;margin-top:26px;padding-top:16px;font-size:12px;color:#7c848b}
-  @media(max-width:860px){footer .cols{grid-template-columns:1fr 1fr}}
-</style></head><body>
-
-  <div class="util"><div class="wrap">
-    <div class="ticker" id="ticker"><span><b>CRE INDEX</b> …</span><span><b>10-YR</b> …</span><span><b>LA OFFICE VAC</b> …</span></div>
-    <div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a href="/subscribe" class="sub">Subscribe</a></div>
-  </div></div>
-  <header class="mast"><div class="wrap">
-    <a class="logo" href="/">REN<span>TV</span>.com<small>Commercial Real Estate News</small></a>
-    <div class="datebox"><span>Western U.S. Edition</span><br><span id="today"></span></div>
-  </div></header>
-  <nav><div class="wrap">
-    <button class="ham" id="hamBtn" aria-label="Menu" aria-expanded="false">☰</button>
-    <div class="navlinks" id="nav">
-      <a href="/">Home</a><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/versions">Versions</a><a href="/blog">Blog</a>
-    </div>
-  </div></nav>
-
-  <div class="phero"><div class="wrap">
-    <div class="k">Free · Every weekday morning</div>
-    <h1>The RENTV Daily.</h1>
-    <p>Every Western-U.S. commercial real estate deal, lease and financing that matters — summarized and in your inbox before your first meeting. Free, since 1998.</p>
-  </div></div>
-  <section class="blk"><div class="wrap">
-    <div class="cols2">
-      <div class="rv">
-        <div class="eyebrow">What you get</div><h2 class="big">Written for people who close deals.</h2>
-        <div style="margin-top:22px">
-          <div class="kv"><span>The RENTV Daily</span><b>Every weekday · free</b></div>
-          <div class="kv"><span>Deal Alerts (Sales · Leases · Financing)</span><b>As they break</b></div>
-          <div class="kv"><span>Conference &amp; event notices</span><b>Occasional</b></div>
-          <div class="kv"><span>The REview video digest</span><b>Weekly</b></div>
-        </div>
-        <p class="lead2" style="margin-top:20px">No spam, ever. One-click unsubscribe. Your address is never sold.</p>
-      </div>
-      <div class="tile rv" style="align-self:start">
-        <div class="n">Join free</div><h3>Start getting the Daily</h3>
-        <form class="form" data-subscribe="subscribe-page" style="margin-top:8px">
-          <label>Work email</label><input type="email" required placeholder="you@company.com">
-          <label>First name</label><input data-name placeholder="First name">
-          <label>Primary interest</label><select><option>All Western-U.S. CRE</option><option>Sales</option><option>Leases</option><option>Financing</option><option>Development</option><option>Multifamily</option><option>Industrial</option><option>Retail</option></select>
-          <button class="cta" type="submit">Subscribe free →</button>
-          <div class="ok">✓ You're on the list. Watch for tomorrow's RENTV Daily.</div>
-        </form>
-      </div>
-    </div>
-  </div></section>
-
-  <footer><div class="wrap"><div class="cols">
-    <div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals &amp; conferences across the Western United States since 1998.</p></div>
-    <div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
-    <div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
-    <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
-  </div><div class="fine">© 2026 RENTV.com · 5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045 · (310) 213-6409</div></div></footer>
-<script>
-  var t=document.getElementById('today');if(t)t.textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
-  var hb=document.getElementById('hamBtn');if(hb)hb.addEventListener('click',function(){var o=document.getElementById('nav').classList.toggle('open');hb.setAttribute('aria-expanded',o);});
-  var esc=function(s){return (s||'').replace(/[&<>"]/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c];});};
-  (function(){fetch('/api/ticker').then(function(r){return r.json();}).then(function(t){
-    function cell(m){if(!m||!m.value)return '';var amt=m.change_pct!=null?Math.abs(m.change_pct)+'%':(m.change_bps!=null?Math.abs(m.change_bps)+'bps':'');var arr=m.dir==='up'?' <span class="up">▲'+amt+'</span>':(m.dir==='down'?' <span class="dn">▼'+amt+'</span>':'');return '<span><b>'+esc(m.label)+'</b> '+esc(m.value)+arr+'</span>';}
-    var h=[t.cre_index,t.ten_yr,t.la_office_vac,t.ie_industrial_cap].map(cell).filter(Boolean).join('');
-    var el=document.getElementById('ticker');if(h&&el)el.innerHTML=h;
-  }).catch(function(){});})();
-  var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('in');io.unobserve(e.target);}});},{threshold:.1});
-  document.querySelectorAll('.rv').forEach(function(el){io.observe(el);});
-  document.querySelectorAll('form[data-fakepost]').forEach(function(f){f.addEventListener('submit',function(e){e.preventDefault();var ok=f.querySelector('.ok');if(ok){ok.style.display='block';}f.querySelectorAll('input,select,button').forEach(function(x){if(x.type!=='reset')x.setAttribute('disabled','');});});});
-  // Real newsletter capture → POST /api/subscribe (append-only JSONL; no external send-to-list).
-  document.querySelectorAll('form[data-subscribe]').forEach(function(f){f.addEventListener('submit',function(e){e.preventDefault();
-    var email=(f.querySelector('input[type=email]')||{}).value||'';
-    var name=(f.querySelector('input[data-name]')||{}).value||'';
-    var interest=(f.querySelector('select')||{}).value||'';
-    var ok=f.querySelector('.ok');var btn=f.querySelector('button');if(btn)btn.setAttribute('disabled','');
-    fetch('/api/subscribe',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email:email,name:name,interest:interest,source:f.getAttribute('data-subscribe')||'site'})})
-      .then(function(r){return r.json();}).then(function(j){
-        if(j&&j.ok){if(ok){ok.style.display='block';}f.querySelectorAll('input,select').forEach(function(x){x.setAttribute('disabled','');});}
-        else{if(btn)btn.removeAttribute('disabled');alert((j&&j.error)?('Please enter a valid email — '+j.error):'Could not subscribe, please try again.');}
-      }).catch(function(){if(btn)btn.removeAttribute('disabled');alert('Network error — please try again.');});
-  });});</script>
-<script src="/theme.js"></script>
-</body></html>
\ No newline at end of file
diff --git a/public/tools.html.bak-nav b/public/tools.html.bak-nav
deleted file mode 100644
index ec78a861..00000000
--- a/public/tools.html.bak-nav
+++ /dev/null
@@ -1,175 +0,0 @@
-<!doctype html><html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>CRE Toolkit — RENTV.com</title>
-<meta name="description" content="RENTV CRE Toolkit — free commercial real estate calculators: cap rate, price per unit and per square foot, and loan sizing by LTV and DSCR.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--wash:#f5f6f8;--up:#0f8a4d}
-  *{box-sizing:border-box;margin:0}
-  body{font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:#fbfbfc;line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
-  .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:inherit;padding:7px 9px;border-radius:8px}
-  .burger:hover{background:rgba(0,0,0,.06)}
-  .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--sub)}
-  .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em}.brand span{color:var(--red)}
-  .user{width:37px;height:37px;border-radius:50%;border:1.5px solid var(--line);background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink)}
-  .user:hover{border-color:var(--red);color:var(--red)}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800}.drawer .dh .w span{color:var(--red)}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .grp{padding:14px 18px 4px}.grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:var(--red);color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:var(--red);color:#fff;font-weight:700}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-
-  .wrap{max-width:1040px;margin:0 auto;padding:0 22px;width:100%}
-  .thead{padding:34px 0 6px}
-  .thead .k{color:var(--red);font-weight:800;font-size:12px;letter-spacing:.16em;text-transform:uppercase}
-  .thead h1{font-family:'Playfair Display',serif;font-size:clamp(32px,3.6vw,46px);font-weight:700;letter-spacing:-.01em;margin-top:4px}
-  .thead p{color:var(--sub);font-size:15px;margin-top:4px}
-  .grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;padding:22px 0 60px}
-  .calc{background:#fff;border:1px solid var(--line);border-radius:14px;padding:20px 22px;display:flex;flex-direction:column}
-  .calc h3{font-size:12px;text-transform:uppercase;letter-spacing:.09em;border-top:2px solid var(--ink);padding-top:10px;margin-bottom:4px;font-weight:800}
-  .calc .hint{color:var(--sub);font-size:12.5px;margin-bottom:14px}
-  .f{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:11px}
-  .f label{font-size:13.5px;font-weight:600;color:#2c3238}
-  .f .in{position:relative}
-  .f .in .pre,.f .in .suf{position:absolute;top:50%;transform:translateY(-50%);color:var(--sub);font-size:14px;font-weight:600}
-  .f .in .pre{left:11px}.f .in .suf{right:11px}
-  .f input{width:150px;font:600 15px 'Inter';padding:9px 12px;border:1.5px solid var(--line);border-radius:8px;outline:0;text-align:right;background:#fff}
-  .f input.pre{padding-left:22px}.f input.suf{padding-right:26px}
-  .f input:focus{border-color:var(--red)}
-  .out{margin-top:auto;background:var(--wash);border:1px solid var(--line);border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:8px}
-  .out .row{display:flex;align-items:baseline;justify-content:space-between}
-  .out .row .lab{font-size:12.5px;font-weight:700;color:var(--sub);text-transform:uppercase;letter-spacing:.05em}
-  .out .row .val{font-family:'Playfair Display',serif;font-size:26px;font-weight:800;letter-spacing:-.01em}
-  .out .row .val.red{color:var(--red)}
-  .out .note{font-size:12px;color:var(--sub)}
-  .out .note b{color:var(--ink)}
-  .foot{padding:0 0 50px;color:var(--sub);font-size:12px}
-  @media(max-width:820px){.grid{grid-template-columns:1fr}}
-</style></head><body>
-
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu">
-    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
-    <span class="lbl">Menu</span>
-  </button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <a class="user" href="/search" aria-label="Search" title="Search">
-    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-  </a>
-</header>
-
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><div class="w">REN<span>TV</span></div><button id="dx" aria-label="Close">&times;</button></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/search">Search</a><a href="/pulse">Market Pulse</a><a href="/tools" class="active">CRE Toolkit</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial real estate news, Western U.S.</div>
-</aside>
-
-<main class="wrap">
-  <div class="thead">
-    <div class="k">CRE Toolkit</div>
-    <h1>Underwrite a deal in seconds</h1>
-    <p>Free, private calculators for brokers, owners and investors. Everything runs in your browser — no numbers leave the page.</p>
-  </div>
-  <section class="grid">
-
-    <div class="calc" id="cap">
-      <h3>Cap Rate</h3><div class="hint">Net operating income ÷ purchase price.</div>
-      <div class="f"><label>Net operating income</label><span class="in"><span class="pre">$</span><input class="pre" data-k="noi" type="number" value="850000"></span></div>
-      <div class="f"><label>Purchase price</label><span class="in"><span class="pre">$</span><input class="pre" data-k="price" type="number" value="12500000"></span></div>
-      <div class="out">
-        <div class="row"><span class="lab">Cap rate</span><span class="val red" id="cap_out">—</span></div>
-        <div class="note" id="cap_note"></div>
-      </div>
-    </div>
-
-    <div class="calc" id="unit">
-      <h3>Price per Unit &amp; per SF</h3><div class="hint">Basis metrics to compare against the comps.</div>
-      <div class="f"><label>Purchase price</label><span class="in"><span class="pre">$</span><input class="pre" data-k="price" type="number" value="12500000"></span></div>
-      <div class="f"><label>Units</label><span class="in"><input data-k="units" type="number" value="120"></span></div>
-      <div class="f"><label>Rentable SF</label><span class="in"><input data-k="sf" type="number" value="98000"></span></div>
-      <div class="out">
-        <div class="row"><span class="lab">Per unit</span><span class="val" id="unit_perunit">—</span></div>
-        <div class="row"><span class="lab">Per SF</span><span class="val" id="unit_persf">—</span></div>
-      </div>
-    </div>
-
-    <div class="calc" id="loan" style="grid-column:1/-1">
-      <h3>Loan Sizing — LTV vs. DSCR</h3><div class="hint">Lenders size to the lower of the two. This shows which one constrains your deal.</div>
-      <div style="display:grid;grid-template-columns:1fr 1fr;gap:0 30px">
-        <div class="f"><label>Purchase price</label><span class="in"><span class="pre">$</span><input class="pre" data-k="price" type="number" value="12500000"></span></div>
-        <div class="f"><label>Net operating income</label><span class="in"><span class="pre">$</span><input class="pre" data-k="noi" type="number" value="850000"></span></div>
-        <div class="f"><label>Max LTV</label><span class="in"><input class="suf" data-k="ltv" type="number" value="65"><span class="suf">%</span></span></div>
-        <div class="f"><label>Interest rate</label><span class="in"><input class="suf" data-k="rate" type="number" step="0.05" value="6.75"><span class="suf">%</span></span></div>
-        <div class="f"><label>Amortization</label><span class="in"><input class="suf" data-k="amort" type="number" value="30"><span class="suf">yr</span></span></div>
-        <div class="f"><label>Min DSCR</label><span class="in"><input data-k="dscr" type="number" step="0.05" value="1.25"></span></div>
-      </div>
-      <div class="out">
-        <div class="row"><span class="lab">Max loan (by LTV)</span><span class="val" id="loan_ltv">—</span></div>
-        <div class="row"><span class="lab">Max loan (by DSCR)</span><span class="val" id="loan_dscr">—</span></div>
-        <div class="row"><span class="lab">Loan proceeds</span><span class="val red" id="loan_final">—</span></div>
-        <div class="note" id="loan_note"></div>
-      </div>
-    </div>
-
-  </section>
-  <div class="foot">Estimates for screening only — not a lending commitment or investment advice. Verify with your lender and accountant.</div>
-</main>
-
-<script>
-const $=id=>document.getElementById(id);
-const drawer=$('drawer'),scrim=$('scrim');
-$('burger').onclick=()=>{drawer.classList.add('open');scrim.classList.add('open')};
-const close=()=>{drawer.classList.remove('open');scrim.classList.remove('open')};
-$('dx').onclick=close;scrim.onclick=close;document.addEventListener('keydown',e=>{if(e.key==='Escape')close()});
-
-const num=el=>{const v=parseFloat(el.value);return isFinite(v)?v:0;};
-const vals=id=>{const o={};document.querySelectorAll('#'+id+' input[data-k]').forEach(el=>o[el.dataset.k]=num(el));return o;};
-const usd=n=>!isFinite(n)?'—':n>=1e6?('$'+(n/1e6).toFixed(2)+'M'):n>=1e3?('$'+Math.round(n).toLocaleString()):('$'+Math.round(n));
-const usd0=n=>!isFinite(n)?'—':'$'+Math.round(n).toLocaleString();
-
-function calc(){
-  // Cap rate
-  const c=vals('cap'); const cap=c.price>0?c.noi/c.price*100:NaN;
-  $('cap_out').textContent=isFinite(cap)?cap.toFixed(2)+'%':'—';
-  $('cap_note').innerHTML=isFinite(cap)?`At this cap rate, every <b>$100</b> of purchase price buys <b>$${cap.toFixed(2)}</b> of annual NOI.`:'';
-  // Per unit / SF
-  const u=vals('unit');
-  $('unit_perunit').textContent=u.units>0?usd0(u.price/u.units):'—';
-  $('unit_persf').textContent=u.sf>0?'$'+(u.price/u.sf).toFixed(0)+'/SF':'—';
-  // Loan sizing
-  const l=vals('loan');
-  const byLtv=l.price*(l.ltv/100);
-  const i=(l.rate/100)/12, n=l.amort*12;
-  const maxAnnualDS=l.dscr>0?l.noi/l.dscr:0;           // debt service the NOI can cover at min DSCR
-  const pmt=maxAnnualDS/12;
-  const byDscr=(i>0&&n>0)?pmt*(1-Math.pow(1+i,-n))/i:(n>0?pmt*n:0); // PV of that payment stream
-  const finalLoan=Math.min(byLtv,byDscr);
-  $('loan_ltv').textContent=usd(byLtv);
-  $('loan_dscr').textContent=usd(byDscr);
-  $('loan_final').textContent=usd(finalLoan);
-  const bind=byDscr<byLtv?'DSCR':'LTV';
-  const down=l.price-finalLoan;
-  $('loan_note').innerHTML=isFinite(finalLoan)&&finalLoan>0?`Constrained by <b>${bind}</b>. Implied equity/down payment: <b>${usd(down)}</b> (${(down/l.price*100).toFixed(0)}%).`:'';
-}
-document.querySelectorAll('input[data-k]').forEach(el=>el.addEventListener('input',calc));
-calc();
-</script>
-</body></html>
diff --git a/public/watchlist.html.bak-nav b/public/watchlist.html.bak-nav
deleted file mode 100644
index cd5457e9..00000000
--- a/public/watchlist.html.bak-nav
+++ /dev/null
@@ -1,211 +0,0 @@
-<!doctype html><html lang="en"><head>
-<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Deal Watchlist — RENTV.com</title>
-<meta name="description" content="Build a private RENTV deal watchlist — pin the property types and markets you care about and see only the matching commercial real estate transactions.">
-<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,800;1,600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
-<style>
-  :root{--red:#c8102e;--ink:#14171a;--sub:#5b636b;--line:#e4e7ea;--wash:#f5f6f8;--up:#0f8a4d}
-  *{box-sizing:border-box;margin:0}
-  body{font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:#fbfbfc;line-height:1.45}
-  a{color:inherit;text-decoration:none}
-  .top{position:sticky;top:0;z-index:900;display:flex;align-items:center;justify-content:space-between;height:54px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
-  .burger{display:inline-flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;font:inherit;color:inherit;padding:7px 9px;border-radius:8px}
-  .burger:hover{background:rgba(0,0,0,.06)}
-  .burger .lbl{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--sub)}
-  .brand{position:absolute;left:50%;transform:translateX(-50%);font-family:'Playfair Display',Georgia,serif;font-weight:800;font-size:25px;letter-spacing:.02em}.brand span{color:var(--red)}
-  .user{width:37px;height:37px;border-radius:50%;border:1.5px solid var(--line);background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink)}
-  .user:hover{border-color:var(--red);color:var(--red)}
-  .scrim{position:fixed;inset:0;background:rgba(6,9,12,.5);opacity:0;pointer-events:none;transition:opacity .22s;z-index:950}
-  .scrim.open{opacity:1;pointer-events:auto}
-  .drawer{position:fixed;top:0;left:0;height:100%;width:360px;max-width:88vw;background:#0b0e12;color:#e7ecf1;transform:translateX(-102%);transition:transform .26s cubic-bezier(.4,0,.2,1);z-index:951;display:flex;flex-direction:column;overflow-y:auto;box-shadow:2px 0 40px rgba(0,0,0,.4)}
-  .drawer.open{transform:none}
-  .drawer .dh{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #1c232b}
-  .drawer .dh .w{font-family:'Playfair Display',serif;font-size:23px;font-weight:800}.drawer .dh .w span{color:var(--red)}
-  .drawer .dh button{background:none;border:0;color:#8b949e;font-size:22px;cursor:pointer;line-height:1}
-  .grp{padding:14px 18px 4px}.grp .gt{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b747d;margin-bottom:6px}
-  .drawer nav a{display:block;padding:9px 18px;color:#dbe1e7;font-size:14.5px;border-left:3px solid transparent}
-  .drawer nav a:hover{background:#141a21;border-left-color:var(--red);color:#fff}
-  .drawer nav a.active{background:#141a21;border-left-color:var(--red);color:#fff;font-weight:700}
-  .drawer .df{margin-top:auto;padding:16px 18px;border-top:1px solid #1c232b;font-size:11px;color:#6b747d}
-
-  .wrap{max-width:1160px;margin:0 auto;padding:0 22px;width:100%}
-  .whead{padding:34px 0 6px}
-  .whead .k{color:var(--red);font-weight:800;font-size:12px;letter-spacing:.16em;text-transform:uppercase}
-  .whead h1{font-family:'Playfair Display',serif;font-size:clamp(32px,3.6vw,46px);font-weight:700;letter-spacing:-.01em;margin-top:4px}
-  .whead p{color:var(--sub);font-size:15px;margin-top:4px}
-  .panel{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px 20px;margin:18px 0 6px}
-  .frow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
-  .frow:last-child{margin-bottom:0}
-  .frow .lbl{font-size:11px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--sub);width:96px;flex:none}
-  .chip{border:1.5px solid var(--line);background:#fff;border-radius:20px;padding:6px 14px;font:600 13px 'Inter';color:var(--ink);cursor:pointer;transition:.14s}
-  .chip:hover{border-color:var(--red)}
-  .chip.on{background:var(--red);border-color:var(--red);color:#fff}
-  .bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding:16px 0 4px}
-  .bar .cnt{font-size:15px;font-weight:700}.bar .cnt b{color:var(--red)}
-  .bar .acts{display:flex;gap:10px}
-  .bar .acts button,.bar .acts a{border:1.5px solid var(--line);background:#fff;border-radius:8px;padding:8px 14px;font:700 12.5px 'Inter';color:var(--ink);cursor:pointer}
-  .bar .acts .alert{background:var(--red);border-color:var(--red);color:#fff}
-  .grid{display:grid;grid-template-columns:repeat(var(--cols,3),1fr);gap:18px;padding:14px 0 60px}
-  .wbar{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin:0 0 14px}
-  .wctl{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub)}
-  .wctl select{font:600 13px 'Inter',system-ui,sans-serif;text-transform:none;letter-spacing:0;color:var(--ink);padding:7px 10px;border:1px solid var(--line);border-radius:6px;background:#fff;cursor:pointer}
-  .wctl.dens input[type=range]{width:110px;accent-color:var(--red);cursor:pointer}
-  .card{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;display:flex;flex-direction:column}
-  .card .im{height:132px;background:#12161a center/cover;display:block}
-  .card .bd{padding:13px 15px 15px;display:flex;flex-direction:column;flex:1}
-  .card .tags{display:flex;gap:6px;margin-bottom:7px}
-  .card .tg{font-size:9px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;padding:2px 7px;border-radius:20px;background:var(--wash);color:#4a4f55}
-  .card .tg.red{background:var(--red);color:#fff}
-  .card h4{font:600 15px/1.3 'Inter';flex:1}
-  .card h4:hover{color:var(--red)}
-  .card .meta{color:var(--sub);font-size:12px;margin-top:8px;display:flex;justify-content:space-between;align-items:baseline}
-  .card .amt{font-family:'Playfair Display',serif;font-weight:800;font-size:17px;color:var(--red)}
-  .empty{grid-column:1/-1;padding:50px 0;text-align:center;color:var(--sub)}
-  .empty h3{font-family:'Playfair Display',serif;font-size:24px;color:var(--ink);margin-bottom:6px}
-  @media(max-width:900px){.grid{grid-template-columns:1fr 1fr}}
-  @media(max-width:600px){.grid{grid-template-columns:1fr!important}}
-</style></head><body>
-
-<header class="top">
-  <button class="burger" id="burger" aria-label="Menu">
-    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
-    <span class="lbl">Menu</span>
-  </button>
-  <a class="brand" href="/">REN<span>TV</span></a>
-  <a class="user" href="/search" aria-label="Search" title="Search">
-    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
-  </a>
-</header>
-
-<div class="scrim" id="scrim"></div>
-<aside class="drawer" id="drawer">
-  <div class="dh"><div class="w">REN<span>TV</span></div><button id="dx" aria-label="Close">&times;</button></div>
-  <div class="grp"><div class="gt">Discover</div></div>
-  <nav><a href="/search">Search</a><a href="/pulse">Market Pulse</a><a href="/tools">CRE Toolkit</a><a href="/watchlist" class="active">Deal Watchlist</a></nav>
-  <div class="grp"><div class="gt">Sections</div></div>
-  <nav><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a></nav>
-  <div class="grp"><div class="gt">Intelligence</div></div>
-  <nav><a href="/deals">Deals</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a><a href="/desk">Broker &amp; Owner Desk</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/conferences">Conferences</a><a href="/blog">Blog</a></nav>
-  <div class="grp"><div class="gt">Company</div></div>
-  <nav><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/subscribe">Subscribe / Newsletters</a></nav>
-  <div class="df">RENTV.com — Commercial real estate news, Western U.S.</div>
-</aside>
-
-<main class="wrap">
-  <div class="whead">
-    <div class="k">Deal Watchlist</div>
-    <h1>Only the deals you care about</h1>
-    <p>Pin the property types and markets that matter to you. Your watchlist saves in this browser — private, no account needed.</p>
-  </div>
-
-  <div class="panel">
-    <div class="frow"><span class="lbl">Property</span><span id="fType"></span></div>
-    <div class="frow"><span class="lbl">Transaction</span><span id="fTxn"></span></div>
-    <div class="frow"><span class="lbl">Market</span><span id="fState"></span></div>
-  </div>
-
-  <div class="bar">
-    <div class="cnt" id="cnt">—</div>
-    <div class="acts">
-      <button id="clear">Clear</button>
-      <a class="alert" href="/subscribe">🔔 Get email alerts</a>
-    </div>
-  </div>
-
-  <div class="wbar">
-    <label class="wctl"><span>Sort</span>
-      <select id="wsort">
-        <option value="newest">Newest</option>
-        <option value="price-desc">Price ↓</option>
-        <option value="price-asc">Price ↑</option>
-        <option value="type">Property Type A→Z</option>
-        <option value="loc">Location A→Z</option>
-        <option value="title">Title A→Z</option>
-      </select>
-    </label>
-    <label class="wctl dens"><span>Density</span>
-      <input id="wdens" type="range" min="2" max="5" step="1" value="3" aria-label="Grid density (columns)">
-    </label>
-  </div>
-
-  <section class="grid" id="grid"></section>
-</main>
-
-<script>
-const $=id=>document.getElementById(id);
-const esc=s=>String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
-// sort + density (persisted) — HARD RULE: every data grid gets both
-let wsort=localStorage.getItem('rentv.watchlist.sort')||'newest';
-function amtNum(d){const s=String(d.amount_label||d.amount||'').replace(/[,\s$]/g,'');const m=s.match(/([\d.]+)\s*([KMB])?/i);if(!m)return -1;let n=parseFloat(m[1]);if(isNaN(n))return -1;const u=(m[2]||'').toUpperCase();if(u==='K')n*=1e3;else if(u==='M')n*=1e6;else if(u==='B')n*=1e9;return n;}
-function sortRows(rows){const r=rows.slice();
-  if(wsort==='price-desc')r.sort((a,b)=>amtNum(b)-amtNum(a));
-  else if(wsort==='price-asc')r.sort((a,b)=>{const x=amtNum(a),y=amtNum(b);if(x<0)return 1;if(y<0)return -1;return x-y;});
-  else if(wsort==='type')r.sort((a,b)=>(a.property_type||'').localeCompare(b.property_type||''));
-  else if(wsort==='loc')r.sort((a,b)=>[a.city,a.state].filter(Boolean).join(', ').localeCompare([b.city,b.state].filter(Boolean).join(', ')));
-  else if(wsort==='title')r.sort((a,b)=>(a.title||'').localeCompare(b.title||''));
-  return r;} // 'newest' = natural feed order
-const drawer=$('drawer'),scrim=$('scrim');
-$('burger').onclick=()=>{drawer.classList.add('open');scrim.classList.add('open')};
-const close=()=>{drawer.classList.remove('open');scrim.classList.remove('open')};
-$('dx').onclick=close;scrim.onclick=close;document.addEventListener('keydown',e=>{if(e.key==='Escape')close()});
-
-const KEY='rentv_watchlist';
-let ALL=[];
-let sel=load();
-
-function load(){
-  const p=new URLSearchParams(location.search);
-  const fromUrl=k=>(p.get(k)||'').split(',').map(s=>s.trim()).filter(Boolean);
-  if(p.has('types')||p.has('txns')||p.has('states'))
-    return {types:fromUrl('types'),txns:fromUrl('txns'),states:fromUrl('states')};
-  try{const s=JSON.parse(localStorage.getItem(KEY));if(s)return {types:s.types||[],txns:s.txns||[],states:s.states||[]};}catch{}
-  return {types:[],txns:[],states:[]};
-}
-function save(){ try{localStorage.setItem(KEY,JSON.stringify(sel));}catch{} }
-
-function chips(elId,field,options){
-  const el=$(elId);
-  el.innerHTML=options.map(o=>`<button class="chip${sel[field].includes(o)?' on':''}" data-v="${esc(o)}">${esc(o)}</button>`).join('')||'<span style="color:var(--sub);font-size:13px">—</span>';
-  el.querySelectorAll('.chip').forEach(b=>b.onclick=()=>{
-    const v=b.dataset.v, i=sel[field].indexOf(v);
-    if(i>=0)sel[field].splice(i,1);else sel[field].push(v);
-    save();render();
-  });
-}
-function match(d){
-  return (!sel.types.length||sel.types.includes(d.property_type))
-      && (!sel.txns.length||sel.txns.includes(d.txn_type))
-      && (!sel.states.length||sel.states.includes(d.state));
-}
-function render(){
-  const uniq=(k)=>[...new Set(ALL.map(d=>d[k]).filter(Boolean))];
-  chips('fType','types',uniq('property_type').sort());
-  chips('fTxn','txns',['Sale','Financing','Lease','Development'].filter(t=>uniq('txn_type').includes(t)));
-  chips('fState','states',uniq('state').sort());
-  const any=sel.types.length||sel.txns.length||sel.states.length;
-  const list=sortRows(ALL.filter(match));
-  $('cnt').innerHTML=any?`<b>${list.length}</b> deal${list.length===1?'':'s'} match your watchlist`:`Showing all <b>${list.length}</b> tracked deals — pin filters above to narrow`;
-  if(!list.length){ $('grid').innerHTML=`<div class="empty"><h3>No deals match yet</h3><div>Loosen a filter, or <a href="/subscribe" style="color:var(--red);font-weight:700">get alerted</a> when one lands.</div></div>`; return; }
-  $('grid').innerHTML=list.map(d=>`<div class="card">
-    ${d.image?`<a class="im" href="${d.id?('/news/'+encodeURIComponent(d.id)):'/deals'}" style="background-image:url('${esc(d.image)}')"></a>`:''}
-    <div class="bd">
-      <div class="tags">${d.property_type?`<span class="tg red">${esc(d.property_type)}</span>`:''}${d.txn_type?`<span class="tg">${esc(d.txn_type)}</span>`:''}</div>
-      <a href="${d.id?('/news/'+encodeURIComponent(d.id)):'/deals'}"><h4>${esc(d.title)}</h4></a>
-      <div class="meta"><span>${esc([d.city,d.state].filter(Boolean).join(', '))}</span><span class="amt">${esc(d.amount_label||'')}</span></div>
-    </div></div>`).join('');
-}
-$('clear').onclick=()=>{sel={types:[],txns:[],states:[]};save();history.replaceState(null,'','/watchlist');render();};
-
-(async function(){
-  // Wire sort + density BEFORE the fetch so the controls stay live even if /api/deals is down.
-  const ws=$('wsort'), wd=$('wdens');
-  ws.value=wsort; ws.onchange=()=>{wsort=ws.value;localStorage.setItem('rentv.watchlist.sort',wsort);render();};
-  const cols0=localStorage.getItem('rentv.watchlist.cols')||'3';
-  wd.value=cols0; document.documentElement.style.setProperty('--cols',cols0);
-  wd.oninput=()=>{document.documentElement.style.setProperty('--cols',wd.value);localStorage.setItem('rentv.watchlist.cols',wd.value);};
-  try{ const r=await fetch('/api/deals'); ALL=(await r.json()).deals||[]; }catch(e){ $('grid').innerHTML='<div class="empty"><h3>Deals unavailable</h3></div>'; return; }
-  render();
-})();
-</script>
-</body></html>

← 00c04564 auto-save: 2026-08-04T15:34:32 (47 files) — data/markets.jso  ·  back to Rentv  ·  CRM: add LinkedIn Posting section (setup + composer preview, 7ac88855 →