/* Portfolio project detail pages */
.project-hero {
  position: relative;
  min-height: 52vh;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  background: #000;
}
.project-hero-bg {
  position: absolute;
  inset: 0;
}
.project-hero-bg img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0.45;
}
.project-hero-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0.4) 0%, rgba(0,0,0,0.85) 100%);
}
.project-hero-content {
  position: relative;
  z-index: 2;
  padding: 120px 20px 48px;
  max-width: 900px;
}
.project-back a {
  color: #e91e8c;
  font-weight: 600;
  font-size: 0.9rem;
}
.project-badge {
  display: inline-block;
  margin: 14px 0 12px;
  padding: 6px 14px;
  border-radius: 999px;
  background: rgba(233, 30, 140, 0.25);
  border: 1px solid rgba(233, 30, 140, 0.45);
  font-size: 0.8rem;
  color: #fff;
}
.project-hero h1 {
  color: #fff;
  font-size: clamp(1.6rem, 4vw, 2.4rem);
  line-height: 1.2;
  margin-bottom: 16px;
}
.project-meta {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 14px 22px;
  color: #cbd5e1;
  font-size: 0.92rem;
  padding: 0;
}
.project-meta i {
  color: #e91e8c;
  margin-right: 6px;
}

.project-body {
  padding: 48px 0 64px;
  background: #0a0a0b;
}
.project-layout {
  display: grid;
  grid-template-columns: 1fr 300px;
  gap: 36px;
  align-items: start;
}
.project-main h2 {
  color: #fff;
  font-size: 1.35rem;
  margin: 28px 0 14px;
}
.project-main h2:first-child {
  margin-top: 0;
}
.project-main p {
  color: #cbd5e1;
  margin-bottom: 14px;
  line-height: 1.7;
}
.provided-list {
  margin: 0 0 8px 1.1rem;
  color: #e2e8f0;
}
.provided-list li {
  margin-bottom: 8px;
}
.svc-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-bottom: 12px;
}
.svc-card {
  background: #16161a;
  border: 1px solid #2a2a32;
  border-radius: 12px;
  padding: 16px;
}
.svc-card h3 {
  color: #e91e8c;
  font-size: 0.95rem;
  margin: 0 0 8px;
}
.svc-card p {
  color: #94a3b8;
  font-size: 0.9rem;
  margin: 0;
}

.project-gallery {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 12px;
  margin-top: 8px;
}
.project-shot {
  margin: 0;
  border-radius: 12px;
  overflow: hidden;
  background: #1a1a1e;
  aspect-ratio: 4/3;
}
.project-shot img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.project-side {
  position: sticky;
  top: 88px;
}
.side-card {
  background: #16161a;
  border: 1px solid #2a2a32;
  border-radius: 14px;
  padding: 20px;
  margin-bottom: 16px;
}
.side-card h3 {
  color: #fff;
  font-size: 1rem;
  margin: 0 0 14px;
}
.side-card p {
  color: #cbd5e1;
  font-size: 0.9rem;
  margin: 0 0 12px;
  line-height: 1.5;
}
.side-card strong {
  color: #94a3b8;
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

/* Listing cards link */
.portfolio-item a.portfolio-link {
  position: absolute;
  inset: 0;
  z-index: 3;
}
.portfolio-item {
  cursor: pointer;
}

@media (max-width: 900px) {
  .project-layout {
    grid-template-columns: 1fr;
  }
  .project-side {
    position: static;
  }
  .svc-grid,
  .project-gallery {
    grid-template-columns: 1fr;
  }
}
'''

# Write portfolio listing page based on live structure - simplified full page
listing = r'''<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Event Décor Portfolio Nairobi | Ruracio, Weddings & Projects – EventsPlus</title>
  <meta name="description" content="Browse EventsPlus portfolio projects: Ruracio tents, garden weddings, baby showers and celebrations across Nairobi, Ruiru, Kamakis and Eastern Bypass.">
  <meta name="robots" content="index, follow">
  <link rel="canonical" href="https://eventsplus.co.ke/portfolio.html">
  <link rel="icon" href="favicon.svg" type="image/svg+xml">
  <link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700;800&display=swap" rel="stylesheet">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
  <link rel="stylesheet" href="css/styles.css">
  <link rel="stylesheet" href="css/portfolio-project.css">
</head>
<body>
  <header class="header" id="header">
    <div class="container header-inner">
      <a href="index.html" class="logo">Events<span>+</span></a>
      <nav class="nav" id="nav">
        <a href="index.html"><i class="fa-solid fa-house"></i> Home</a>
        <a href="about.html"><i class="fa-solid fa-heart"></i> About</a>
        <a href="services.html"><i class="fa-solid fa-champagne-glasses"></i> Services</a>
        <a href="portfolio.html" class="active"><i class="fa-solid fa-images"></i> Portfolio</a>
        <a href="blog.html"><i class="fa-solid fa-newspaper"></i> Blog</a>
        <a href="contact.html"><i class="fa-solid fa-envelope"></i> Contact</a>
      </nav>
      <a href="https://wa.me/254708446294" class="btn btn-primary btn-header" target="_blank" rel="noopener"><i class="fa-brands fa-whatsapp"></i> Get Quote</a>
      <button class="mobile-toggle" id="mobileToggle" aria-label="Menu"><span></span><span></span><span></span></button>
    </div>
  </header>

  <section class="page-hero">
    <div class="container">
      <h1>Our Work</h1>
      <p>Real projects from Ruracio, weddings, showers and celebrations across Nairobi, Ruiru, Kamakis and the Eastern Bypass — open any project for full photos and details.</p>
    </div>
  </section>

  <section style="padding:48px 0 72px">
    <div class="container">
      <div class="portfolio-grid" id="portfolioGrid">
        <!-- Filled by js/portfolio.js -->
      </div>
      <p style="text-align:center;margin-top:40px">
        <a href="https://wa.me/254708446294?text=Hi%20EventsPlus%2C%20I%20want%20a%20setup%20like%20your%20portfolio" class="btn btn-primary" target="_blank" rel="noopener">
          <i class="fa-brands fa-whatsapp"></i> Request a similar setup
        </a>
      </p>
    </div>
  </section>

  <footer class="footer">
    <div class="container">
      <div class="footer-bottom" style="border:none;padding-top:0">
        <span>© 2026 EventsPlus</span>
      </div>
    </div>
  </footer>
  <script src="js/main.js"></script>
  <script src="js/portfolio.js"></script>
</body>
</html>
'''

open('/home/workdir/artifacts/eventsplus-portfolio-projects/portfolio.html','w').write(listing)

# portfolio.js - render cards linking to project pages
pjs = r'''// Portfolio listing – rich projects from data/portfolio.json
(function () {
  'use strict';
  var grid = document.getElementById('portfolioGrid') || document.querySelector('.portfolio-grid');
  if (!grid) return;

  var FALLBACK = [];

  function escapeHtml(s) {
    return String(s || '')
      .replace(/&/g, '&amp;')
      .replace(/</g, '&lt;')
      .replace(/>/g, '&gt;')
      .replace(/"/g, '&quot;');
  }

  function render(items) {
    var list = (items || [])
      .filter(function (i) { return i.visible !== false; })
      .sort(function (a, b) { return (a.order || 0) - (b.order || 0); });

    if (!list.length) {
      grid.innerHTML = '<p style="grid-column:1/-1;text-align:center;color:#94a3b8">No projects yet.</p>';
      return;
    }

    grid.innerHTML = list
      .map(function (item) {
        var slug = item.slug || item.id;
        var href = 'portfolio/' + encodeURIComponent(slug) + '.html';
        var title = escapeHtml(item.title || '');
        var caption = escapeHtml(item.locationArea || item.caption || item.category || '');
        var img = escapeHtml(item.coverImage || item.image || '');
        return (
          '<div class="portfolio-item">' +
          '<img src="' + img + '" alt="' + title + '" loading="lazy">' +
          '<div class="portfolio-overlay"><h4>' + title + '</h4><span>' + caption + '</span></div>' +
          '<a class="portfolio-link" href="' + href + '" aria-label="View project: ' + title + '"></a>' +
          '</div>'
        );
      })
      .join('');
  }

  try {
    var raw = localStorage.getItem('eventsplus_portfolio');
    if (raw) {
      var data = JSON.parse(raw);
      if (Array.isArray(data) && data.length && (data[0].slug || data[0].coverImage || data[0].images)) {
        render(data);
        return;
      }
    }
  } catch (e) {}

  fetch('data/portfolio.json?t=' + Date.now())
    .then(function (r) { return r.ok ? r.json() : null; })
    .then(function (data) {
      if (Array.isArray(data) && data.length) render(data);
      else render(FALLBACK);
    })
    .catch(function () { render(FALLBACK); });
})();
'''
open('/home/workdir/artifacts/eventsplus-portfolio-projects/js/portfolio.js','w').write(pjs)
print('listing + js + css ok')
PY