← back to NationalPaperHangers

views/public/installer-tpl-bilingue.ejs

118 lines

<%- include('../partials/head', { title, bodyClass: 'tpl-bilingue' }) %>
<%- include('../partials/header') %>
<%
  function _heroUrl() {
    var s = installer.template_settings || {};
    if (s.hero_url) return s.hero_url;
    if (portfolio.length && portfolio[0].image_url) return portfolio[0].image_url;
    var seg = (typeof pickSegmentImage === 'function') ? pickSegmentImage(installer) : null;
    return seg ? seg.file : null;
  }
  var heroUrl = _heroUrl();
  var s = installer.template_settings || {};
  var esBio = s.bio_es || null;     // optional pre-translated ES bio (manual or AI)
  var esHeadline = s.headline_es || null;
%>
<article class="tpl-root">
  <div class="bl-langtoggle" role="tablist" aria-label="Language">
    <button type="button" class="active" data-set-lang="en" role="tab">EN</button>
    <button type="button" data-set-lang="es" role="tab">ES</button>
  </div>

  <div class="bl-hero">
    <% if (heroUrl) { %><img class="bl-hero-img" src="<%= heroUrl %>" alt="<%= installer.business_name %>"><% } %>
    <div>
      <p data-lang="en" style="color:#b85c2b;font-weight:700;letter-spacing:0.2em;text-transform:uppercase;font-size:12px">Wallcovering Studio</p>
      <p data-lang="es" style="color:#b85c2b;font-weight:700;letter-spacing:0.2em;text-transform:uppercase;font-size:12px">Estudio de Empapelado</p>
      <h1 class="bl-name"><%= installer.business_name %></h1>
      <p class="bl-place"><%= [installer.city, installer.state].filter(Boolean).join(' · ') %><% if (installer.founded_year) { %> · <span data-lang="en">Est.</span><span data-lang="es">Desde</span> <%= installer.founded_year %><% } %></p>
      <% if (installer.headline) { %>
        <p class="bl-headline" data-lang="en"><%= installer.headline %></p>
        <p class="bl-headline" data-lang="es"><%= esHeadline || installer.headline %></p>
      <% } %>
      <% if (installer.claim_status === 'claimed') { %>
        <a class="bl-cta" href="/installer/<%= installer.slug %>/book"><span data-lang="en">Book a consultation</span><span data-lang="es">Solicitar consulta</span></a>
      <% } %>
    </div>
  </div>

  <% if (installer.claim_status === 'unclaimed') { %>
    <div class="tpl-claim-cta" style="color:#b85c2b;border-color:#b85c2b;background:#fff;border-radius:16px">
      <div style="flex:1">
        <span data-lang="en">If you operate <%= installer.business_name %>, claim this listing to enable bookings.</span>
        <span data-lang="es">Si usted opera <%= installer.business_name %>, reclame este listado para habilitar reservas.</span>
      </div>
      <a href="/installer/<%= installer.slug %>/claim" style="background:#b85c2b;color:#fff7ec;padding:10px 22px;border-radius:999px;text-decoration:none;font-weight:700"><span data-lang="en">Claim →</span><span data-lang="es">Reclamar →</span></a>
    </div>
  <% } %>

  <div class="bl-stats">
    <div><div class="num"><%= installer.service_radius_miles || '—' %></div><div class="lbl"><span data-lang="en">Service radius (mi)</span><span data-lang="es">Radio de servicio (mi)</span></div></div>
    <div><div class="num"><%= installer.team_size || '—' %></div><div class="lbl"><span data-lang="en">Team</span><span data-lang="es">Equipo</span></div></div>
    <div><div class="num"><%= installer.response_time_hours ? '<' + installer.response_time_hours + 'h' : '—' %></div><div class="lbl"><span data-lang="en">Response</span><span data-lang="es">Respuesta</span></div></div>
    <div><div class="num"><%= acceptance ? acceptance.rate + '%' : (credentials || []).length %></div><div class="lbl"><%= acceptance ? '<span data-lang="en">Accept rate</span><span data-lang="es">Aceptación</span>' : '<span data-lang="en">Brand-trained</span><span data-lang="es">Certificaciones</span>' %></div></div>
  </div>

  <section class="bl-section">
    <div class="bl-callout">
      <span data-lang="en">Specialist in <%= (installer.materials || ['wallcoverings']).slice(0,3).map(function(m){return String(m||'').replace(/_/g,' ');}).filter(Boolean).join(', ') %> installations.</span>
      <span data-lang="es">Especialista en instalaciones de <%= (installer.materials || ['empapelado']).slice(0,3).map(function(m){return String(m||'').replace(/_/g,' ');}).filter(Boolean).join(', ') %>.</span>
    </div>
    <h2><span data-lang="en">About the studio</span><span data-lang="es">Sobre el estudio</span></h2>
    <% if (installer.bio) { %>
      <p class="bl-bio" data-lang="en"><%= installer.bio %></p>
      <p class="bl-bio" data-lang="es"><%= esBio || installer.bio %></p>
    <% } %>
  </section>

  <% if (portfolio.length) { %>
    <section class="bl-section">
      <h2><span data-lang="en">Recent projects</span><span data-lang="es">Proyectos recientes</span></h2>
      <div class="bl-pf-grid">
        <% portfolio.slice(0,9).forEach(function(p){ %>
          <article class="bl-pf-card">
            <% if (p.image_url) { %><img src="<%= p.image_url %>" alt="<%= p.title %>" loading="lazy"><% } %>
            <div class="meta"><h3><%= p.title %></h3><p><%= [p.city, p.state, p.year].filter(Boolean).join(' · ') %><% if (p.brand) { %> · <%= p.brand %><% } %></p></div>
          </article>
        <% }); %>
      </div>
    </section>
  <% } %>

  <% if (installer.claim_status === 'claimed') { %>
    <section class="bl-cta-final">
      <h2><span data-lang="en">Ready to book <%= installer.business_name %>?</span><span data-lang="es">¿Listo para contratar a <%= installer.business_name %>?</span></h2>
      <a href="/installer/<%= installer.slug %>/book"><span data-lang="en">Book a consultation</span><span data-lang="es">Solicitar consulta</span></a>
    </section>
  <% } %>

  <%- include('../partials/social-videos') %>

</article>
<script>
  (function(){
    var body = document.body;
    var saved = null;
    try { saved = localStorage.getItem('nph-lang'); } catch (e) {}
    if (saved === 'es') { body.classList.add('lang-es'); }
    document.querySelectorAll('[data-set-lang]').forEach(function(b){
      b.addEventListener('click', function(){
        var lang = b.getAttribute('data-set-lang');
        body.classList.toggle('lang-es', lang === 'es');
        document.querySelectorAll('[data-set-lang]').forEach(function(x){ x.classList.toggle('active', x === b); });
        try { localStorage.setItem('nph-lang', lang); } catch (e) {}
      });
    });
    if (saved === 'es') {
      var btn = document.querySelector('[data-set-lang="es"]');
      var btnEn = document.querySelector('[data-set-lang="en"]');
      if (btn) btn.classList.add('active');
      if (btnEn) btnEn.classList.remove('active');
    }
  })();
</script>
<%- include('../partials/paper-contributions') %>
<%- include('../partials/coi-request') %>
<%- include('../partials/call-installer') %>
<%- include('../partials/footer') %>