<!DOCTYPE html>
<html lang="ro" id="html-root">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title id="page-title">FILEVA Wellness & Massage | Masaj Premium Londra</title>
  <link rel="icon" href="assets/fileva-favicon.jpg" type="image/jpeg">
  <meta name="description" content="FILEVA Wellness & Spa - masaj premium în Londra. Programări rapide pe WhatsApp cu Ramona." />
  <meta property="og:title" content="FILEVA Wellness & Massage | Watford" />
  <meta property="og:description" content="Massage • Relaxation • Wellbeing. Appointments Monday - Friday." />
  <meta property="og:image" content="https://fileva.co.uk/assets/og-fileva.jpg" />
  <meta property="og:url" content="https://fileva.co.uk" />
  <meta property="og:type" content="website" />
  <meta name="twitter:card" content="summary_large_image" />
  <meta name="twitter:title" content="FILEVA Wellness & Massage | Watford" />
  <meta name="twitter:description" content="Massage • Relaxation • Wellbeing. Appointments Monday - Friday." />
  <meta name="twitter:image" content="https://fileva.co.uk/assets/og-fileva.jpg" />
  <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=Cinzel:wght@400;600;700&family=Montserrat:wght@300;400;500;600&display=swap" rel="stylesheet">

  <script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2/dist/umd/supabase.js"></script>
  <script src="https://cdn.tailwindcss.com"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
  <script>
    tailwind.config={theme:{extend:{colors:{premiumBlack:'#0B0B0B',premiumDark:'#121212',premiumCard:'#181818',elegantCream:'#FDFBF7',elegantMuted:'#E8DFD8',discreetGold:'#D4AF37',subtleTurquoise:'#C1E6E8'},fontFamily:{serif:['Cinzel','serif'],sans:['Montserrat','sans-serif']}}}}
  </script>
  <style>
    html{scroll-behavior:smooth}
    ::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:#0B0B0B}::-webkit-scrollbar-thumb{background:#D4AF37;border-radius:3px}
    .gold-button-shine{position:relative;overflow:hidden}.gold-button-shine::after{content:'';position:absolute;top:-50%;left:-60%;width:30%;height:200%;background:linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,.25) 50%,rgba(255,255,255,0) 100%);transform:rotate(25deg);transition:all .75s cubic-bezier(.19,1,.22,1)}.gold-button-shine:hover::after{left:120%}
    .premium-glass{background:rgba(18,18,18,.82);backdrop-filter:blur(30px);-webkit-backdrop-filter:blur(30px);border:1px solid rgba(212,175,55,.12)}
    .luxury-card-3d{background:linear-gradient(135deg,#141414 0%,#080808 100%);border:1px solid rgba(212,175,55,.25);box-shadow:0 20px 40px rgba(0,0,0,.6),inset 0 1px 0 rgba(255,255,255,.05)}
    .star-glow-active{color:#D4AF37;filter:drop-shadow(0 0 4px rgba(212,175,55,.6));transform:scale(1.1)}
    .hero-img{background-image:linear-gradient(to top,rgba(11,11,11,1),rgba(11,11,11,.55),rgba(11,11,11,.15)),url('https://images.unsplash.com/photo-1544161515-4ab6ce6db874?auto=format&fit=crop&w=2200&q=90');background-size:cover;background-position:center}
  </style>
</head>
<body class="bg-premiumBlack text-elegantCream font-sans min-h-screen relative overflow-x-hidden">
  <div class="absolute top-20 left-1/4 w-[400px] h-[400px] rounded-full bg-subtleTurquoise/5 blur-[120px] pointer-events-none z-0"></div>
  <div class="absolute bottom-40 right-1/4 w-[500px] h-[500px] rounded-full bg-discreetGold/5 blur-[150px] pointer-events-none z-0"></div>

  <header class="sticky top-0 w-full z-50 premium-glass border-b border-discreetGold/10">
    <div class="max-w-7xl mx-auto px-6 h-20 flex justify-between items-center">
      <a href="#hero" aria-label="FILEVA Wellness"><img src="assets/fileva-logo-new.jpg" alt="FILEVA Wellness" class="h-14 md:h-20 w-auto object-contain" /></a>
      <nav class="hidden md:flex space-x-10 text-[11px] uppercase tracking-widest font-medium">
        <a href="#hero" data-i18n="nav_home" class="hover:text-discreetGold transition-colors">Acasă</a>
        <a href="#servicii" data-i18n="nav_services" class="hover:text-discreetGold transition-colors">Servicii</a>
        <a href="#booking" data-i18n="nav_booking" class="hover:text-discreetGold transition-colors">Programări</a>
        <a href="#fidelitate-section" data-i18n="nav_loyalty" class="hover:text-discreetGold transition-colors">Fidelitate</a>
        <a href="#client-portal" class="hover:text-discreetGold transition-colors text-discreetGold flex items-center gap-1.5"><i class="fa-regular fa-circle-user text-sm"></i> <span data-i18n="nav_account">Contul Meu</span></a>
      </nav>
      <div class="flex items-center gap-3">
        <button id="lang-toggle-btn" onclick="toggleLang()" class="text-[10px] uppercase tracking-widest font-bold px-3 py-1.5 border border-discreetGold/40 text-discreetGold hover:bg-discreetGold hover:text-premiumBlack transition-all rounded-sm">EN</button>
        <a href="#booking" data-i18n="nav_reserve" class="gold-button-shine text-[10px] uppercase tracking-widest font-semibold px-5 py-2.5 bg-discreetGold text-premiumBlack rounded-sm hover:bg-elegantCream transition-all">Rezervă</a>
        <button onclick="toggleMobileMenu()" class="md:hidden text-elegantCream hover:text-discreetGold"><i id="menu-icon" class="fa-solid fa-bars text-xl"></i></button>
      </div>
    </div>
  </header>

  <div id="mobile-menu" class="fixed inset-0 top-20 z-40 bg-premiumBlack/95 backdrop-blur-lg hidden flex-col p-8 space-y-6 text-center border-t border-discreetGold/10">
    <a href="#hero" onclick="toggleMobileMenu()" data-i18n="nav_home" class="text-lg font-serif tracking-widest hover:text-discreetGold">Acasă</a>
    <a href="#servicii" onclick="toggleMobileMenu()" data-i18n="nav_services" class="text-lg font-serif tracking-widest hover:text-discreetGold">Servicii</a>
    <a href="#booking" onclick="toggleMobileMenu()" data-i18n="nav_booking" class="text-lg font-serif tracking-widest hover:text-discreetGold">Programări</a>
    <a href="#fidelitate-section" onclick="toggleMobileMenu()" data-i18n="nav_loyalty" class="text-lg font-serif tracking-widest hover:text-discreetGold">Fidelitate</a>
    <a href="#client-portal" onclick="toggleMobileMenu()" data-i18n="nav_account" class="text-lg font-serif tracking-widest text-discreetGold">Contul Meu</a>
  </div>

  <section id="hero" class="hero-img relative min-h-[calc(100vh-80px)] flex items-center justify-center py-24 px-6 overflow-hidden">
    <div class="max-w-4xl mx-auto text-center relative z-10 space-y-8">
      <div class="inline-flex items-center gap-2 border border-discreetGold/30 px-4 py-1.5 rounded-full bg-premiumDark/50 backdrop-blur-md">
        <span class="w-1.5 h-1.5 rounded-full bg-discreetGold"></span>
        <span data-i18n="hero_badge" class="text-[10px] tracking-[0.25em] uppercase font-semibold text-discreetGold">Oază de lux și revitalizare</span>
      </div>
      <h1 class="font-serif text-5xl md:text-8xl tracking-[0.2em] font-semibold leading-tight">FILEVA</h1>
      <h2 data-i18n="hero_tagline" class="text-xl md:text-2xl font-light tracking-[0.4em] uppercase text-discreetGold -mt-4">Masaj • Relaxare • Stare de Bine</h2>
      <p data-i18n="hero_desc" class="text-elegantMuted max-w-xl mx-auto font-light text-sm md:text-base tracking-wide leading-relaxed">Experiență terapeutică personalizată, unde luxul discret întâlnește armonia deplină a simțurilor.</p>
      <div class="pt-6 flex flex-col sm:flex-row gap-4 justify-center items-center">
        <a href="#booking" data-i18n="hero_cta" class="gold-button-shine w-full sm:w-auto px-8 py-4 bg-discreetGold text-premiumBlack uppercase font-semibold text-xs tracking-[0.25em] hover:scale-[1.02] transition-transform">Rezervă Acum</a>
        <a href="https://wa.me/447495814286" target="_blank" class="w-full sm:w-auto px-8 py-4 bg-transparent border border-elegantCream/20 hover:border-discreetGold hover:text-discreetGold uppercase font-semibold text-xs tracking-[0.25em] flex justify-center items-center gap-2 transition-all"><i class="fa-brands fa-whatsapp text-lg"></i> <span data-i18n="hero_wa">WhatsApp Ramona</span></a>
      </div>
    </div>
  </section>

  <section id="servicii" class="py-24 px-6 max-w-7xl mx-auto relative z-10 border-t border-discreetGold/10">
    <div class="text-center space-y-4 mb-16">
      <span data-i18n="services_badge" class="text-xs uppercase tracking-[0.3em] text-discreetGold">Terapii exclusive</span>
      <h3 data-i18n="services_title" class="font-serif text-3xl md:text-5xl tracking-widest font-medium">Sesiuni de Terapie</h3>
      <div class="w-20 h-[1px] bg-discreetGold mx-auto"></div>
      <p data-i18n="services_desc" class="text-elegantMuted max-w-md mx-auto text-sm font-light tracking-wide">Fiecare ritual este conceput pentru relaxare profundă, refacere musculară și eliminarea tensiunii.</p>
    </div>
    <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8" id="service-cards"></div>
  </section>

  <section id="booking" class="py-24 px-6 bg-premiumDark relative z-10 border-t border-discreetGold/10">
    <div class="max-w-7xl mx-auto">
      <div class="text-center space-y-4 mb-16">
        <span data-i18n="booking_badge" class="text-xs uppercase tracking-[0.3em] text-discreetGold">Sistem ultra-rapid</span>
        <h3 data-i18n="booking_title" class="font-serif text-3xl md:text-5xl tracking-widest font-medium">Programare Rapidă</h3>
        <div class="w-20 h-[1px] bg-discreetGold mx-auto"></div>
        <p data-i18n="booking_desc" class="text-elegantMuted max-w-md mx-auto text-sm font-light tracking-wide">Rezervă sesiunea în câteva secunde, cu mesaj WhatsApp pregătit automat.</p>
      </div>
      <div class="grid grid-cols-1 lg:grid-cols-12 gap-12 items-start">
        <div class="lg:col-span-8 space-y-8">
          <div class="flex justify-between items-center text-[10px] uppercase tracking-widest text-elegantMuted font-medium">
            <span id="active-step-title" class="text-discreetGold"></span>
            <span id="step-counter"></span>
          </div>
          <div class="w-full h-[1px] bg-elegantCream/10 relative"><div id="step-progress-line" class="absolute left-0 top-0 h-full bg-discreetGold transition-all duration-500" style="width:20%"></div></div>
          <div class="premium-glass p-8 md:p-12 relative min-h-[380px] rounded-sm">
            <div id="booking-step-1" class="step-container space-y-6">
              <h4 id="step1-heading" data-i18n="step1_h" class="font-serif text-2xl tracking-wide">Ce tip de tratament dorești?</h4>
              <div class="grid grid-cols-1 md:grid-cols-2 gap-4" id="service-options"></div>
            </div>
            <div id="booking-step-2" class="step-container space-y-6 hidden">
              <h4 id="step2-heading" data-i18n="step2_h" class="font-serif text-2xl tracking-wide">Selectează durata ideală</h4>
              <div class="grid grid-cols-2 md:grid-cols-4 gap-4" id="duration-options"></div>
            </div>
            <div id="booking-step-3" class="step-container space-y-6 hidden">
              <div class="flex justify-between items-center">
                <h4 id="step3-heading" data-i18n="step3_h" class="font-serif text-2xl tracking-wide">Alege data dorită</h4>
                <span data-i18n="mon_fri" class="text-[9px] text-discreetGold/80 tracking-[0.2em] uppercase font-semibold">Luni - Vineri</span>
              </div>
              <div class="max-w-md mx-auto p-4 border border-discreetGold/20 rounded-sm bg-premiumDark">
                <div class="flex justify-between items-center mb-4">
                  <button onclick="changeMonth(-1)" class="text-discreetGold"><i class="fa-solid fa-chevron-left"></i></button>
                  <span id="calendar-month-year" class="font-serif tracking-widest text-sm uppercase"></span>
                  <button onclick="changeMonth(1)" class="text-discreetGold"><i class="fa-solid fa-chevron-right"></i></button>
                </div>
                <div id="calendar-day-headers" class="grid grid-cols-7 gap-2 text-center text-[10px] uppercase text-elegantMuted font-bold mb-2"></div>
                <div id="calendar-days-grid" class="grid grid-cols-7 gap-2"></div>
              </div>
            </div>
            <div id="booking-step-4" class="step-container space-y-6 hidden">
              <h4 id="step4-heading" data-i18n="step4_h" class="font-serif text-2xl tracking-wide">Selectează ora dorită</h4>
              <div class="grid grid-cols-3 md:grid-cols-4 gap-4" id="hours-grid"></div>
            </div>
            <div id="booking-step-5" class="step-container space-y-6 hidden">
              <h4 id="step5-heading" data-i18n="step5_h" class="font-serif text-2xl tracking-wide">Completează detaliile programării</h4>
              <form id="booking-form" onsubmit="confirmAppointment(event)" class="space-y-4">
                <input required type="text" id="client-name-input" data-i18n-placeholder="ph_name" class="w-full bg-premiumDark border border-elegantCream/10 focus:border-discreetGold p-4 text-sm text-elegantCream focus:outline-none" placeholder="Nume complet">
                <input required type="tel" id="client-phone-input" data-i18n-placeholder="ph_phone" class="w-full bg-premiumDark border border-elegantCream/10 focus:border-discreetGold p-4 text-sm text-elegantCream focus:outline-none" placeholder="WhatsApp / Telefon">
                <button type="submit" data-i18n="btn_confirm" class="gold-button-shine w-full py-4 bg-discreetGold text-premiumBlack font-semibold text-xs uppercase tracking-[0.2em]">Confirmă Sesiunea</button>
              </form>
            </div>
          </div>
          <div class="flex justify-between items-center">
            <button id="prev-step-btn" onclick="navigationStepChange(-1)" data-i18n="btn_back" class="px-6 py-3 bg-transparent border border-elegantCream/15 text-xs tracking-widest uppercase opacity-50 cursor-not-allowed" disabled>Înapoi</button>
            <button id="next-step-btn" onclick="navigationStepChange(1)" data-i18n="btn_next" class="px-6 py-3 bg-elegantCream text-premiumBlack text-xs tracking-widest uppercase font-semibold hover:bg-discreetGold">Înainte</button>
          </div>
        </div>
        <div class="lg:col-span-4 space-y-6">
          <div class="premium-glass p-8 sticky top-28 space-y-6 rounded-sm">
            <h4 data-i18n="sum_title" class="font-serif text-sm tracking-widest uppercase border-b border-discreetGold/20 pb-4 text-discreetGold">Sumar Rezervare</h4>
            <div class="space-y-4 text-sm font-light">
              <div class="flex justify-between"><span data-i18n="sum_svc" class="text-elegantMuted text-xs uppercase">Serviciu</span><span id="summary-service">-</span></div>
              <div class="flex justify-between"><span data-i18n="sum_dur" class="text-elegantMuted text-xs uppercase">Durată</span><span id="summary-duration">-</span></div>
              <div class="flex justify-between"><span data-i18n="sum_date" class="text-elegantMuted text-xs uppercase">Dată</span><span id="summary-date">-</span></div>
              <div class="flex justify-between"><span data-i18n="sum_time" class="text-elegantMuted text-xs uppercase">Oră</span><span id="summary-hour">-</span></div>
            </div>
            <div class="pt-4 text-center">
              <span data-i18n="sum_val" class="text-xs uppercase text-elegantMuted tracking-widest block mb-1">Valoare Sesiune</span>
              <div id="summary-price-wrapper" class="inline-block transition-all duration-300 rounded-sm px-5 py-1"><span id="summary-price" class="text-4xl font-serif font-bold text-discreetGold">£0</span></div>
            </div>
            <div class="p-4 bg-premiumDark border border-discreetGold/10 rounded-sm"><p data-i18n="sum_policy" class="text-[11px] text-elegantMuted/80 leading-relaxed">Modificarea sau anularea programării este gratuită cu minimum 24 de ore înainte.</p></div>
          </div>
        </div>
      </div>
    </div>
  </section>

  <section id="fidelitate-section" class="py-24 px-6 max-w-7xl mx-auto relative z-10 border-t border-discreetGold/10">
    <div class="grid grid-cols-1 lg:grid-cols-12 gap-12 items-center">
      <div class="lg:col-span-5 space-y-6">
        <span data-i18n="loyalty_badge" class="text-xs uppercase tracking-[0.3em] text-discreetGold block">Recompense exclusive</span>
        <h3 data-i18n="loyalty_title" class="font-serif text-3xl md:text-5xl tracking-widest leading-tight">Fidelitate de Lux</h3>
        <p data-i18n="loyalty_desc" class="text-elegantMuted text-sm font-light leading-relaxed">Fiecare sesiune acumulează stele. Praguri: 3 ședințe = 10%, 6 ședințe = 20%, 10 ședințe = 1 masaj gratuit.</p>
        <div class="p-5 bg-premiumDark border border-elegantCream/10 rounded-sm space-y-4">
          <span data-i18n="simulate_label" class="text-[10px] tracking-widest text-discreetGold font-semibold uppercase block">Simulează progresul:</span>
          <div class="flex gap-2">
            <button onclick="updateMainCardStamps(3)" class="flex-1 py-2 border border-discreetGold/30 text-[10px] uppercase">3</button>
            <button onclick="updateMainCardStamps(6)" class="flex-1 py-2 border border-discreetGold/30 text-[10px] uppercase">6</button>
            <button onclick="updateMainCardStamps(10)" class="flex-1 py-2 border border-discreetGold/30 text-[10px] uppercase">10</button>
          </div>
        </div>
      </div>
      <div class="lg:col-span-7 flex justify-center">
        <div class="luxury-card-3d w-full max-w-md p-6 rounded-lg space-y-8">
          <div>
            <span class="font-serif text-sm tracking-[0.25em] text-discreetGold block">FILEVA WELLNESS</span>
            <span data-i18n="card_member" class="text-[8px] uppercase tracking-[0.3em] text-elegantMuted/60">LOYALTY MEMBER</span>
          </div>
          <div class="space-y-2">
            <div class="flex justify-between">
              <span data-i18n="card_loyalty_label" class="text-[8px] uppercase text-elegantMuted/50">Starea de loialitate</span>
              <span id="main-card-status-text" class="text-[9px] tracking-widest text-discreetGold uppercase">3 / 10 Sesiuni</span>
            </div>
            <div class="flex justify-between items-center py-3 bg-premiumBlack/40 px-4 rounded border border-elegantCream/5" id="main-loyalty-stamps"></div>
          </div>
          <div class="flex justify-between items-center pt-4 border-t border-elegantCream/5">
            <span class="text-[9px] font-mono text-elegantCream tracking-wider">FLV-2026-0048</span>
            <span id="main-card-benefit-badge" class="text-[8px] uppercase tracking-widest text-discreetGold font-bold"></span>
          </div>
        </div>
      </div>
    </div>
  </section>

  <section id="client-portal" class="py-24 px-6 max-w-7xl mx-auto relative z-10 border-t border-discreetGold/10">
    <div class="text-center space-y-4 mb-16">
      <span data-i18n="portal_badge" class="text-xs uppercase tracking-[0.3em] text-discreetGold">Spațiu privat client</span>
      <h3 data-i18n="portal_title" class="font-serif text-3xl md:text-5xl tracking-widest font-medium">Contul Tău Premium</h3>
    </div>
    <div id="auth-box" class="max-w-md mx-auto premium-glass p-8 space-y-6 rounded-sm">
      <h4 data-i18n="login_title" class="font-serif text-xl tracking-wider text-center">Conectare Rapidă</h4>
      <input type="tel" id="login-phone" data-i18n-placeholder="ph_tel" class="w-full bg-premiumDark border border-elegantCream/10 p-4 text-sm text-elegantCream" placeholder="Număr telefon">
      <input type="text" id="login-code" data-i18n-placeholder="ph_code" class="w-full bg-premiumDark border border-elegantCream/10 p-4 text-sm text-elegantCream" placeholder="Cod acces">
      <button onclick="handleLogin()" data-i18n="login_btn" class="gold-button-shine w-full py-4 bg-discreetGold text-premiumBlack text-xs uppercase tracking-widest font-semibold">Accesează Contul</button>
    </div>
    <div id="dashboard-box" class="hidden max-w-4xl mx-auto premium-glass p-8 space-y-6">
      <h4 id="user-display-name" class="font-serif text-xl text-discreetGold">Client</h4>
      <p id="user-display-phone" class="text-xs text-elegantMuted"></p>
      <div id="portal-loyalty-stamps" class="py-4 bg-premiumBlack/60 px-6 rounded flex justify-between"></div>
      <div id="reward-badge-status" class="p-4 bg-premiumDark border border-discreetGold/10 rounded-sm text-center text-xs"></div>
      <div id="appointments-dashboard-list" class="space-y-4"></div>
      <button onclick="handleLogout()" data-i18n="logout_btn" class="px-4 py-2 border border-red-500/30 text-red-400 text-[10px] uppercase">Deconectare</button>
    </div>
    <!-- Admin dashboard -->
    <div id="admin-box" class="hidden max-w-5xl mx-auto premium-glass p-8 space-y-8 rounded-sm">
      <div class="flex justify-between items-start">
        <div>
          <span data-i18n="admin_badge" class="text-xs uppercase tracking-[0.3em] text-discreetGold block mb-1">Panou Administrare</span>
          <h4 data-i18n="admin_title" class="font-serif text-xl text-elegantCream">Dashboard Ramona</h4>
        </div>
        <button onclick="handleAdminLogout()" data-i18n="admin_logout" class="px-4 py-2 border border-red-500/30 text-red-400 text-[10px] uppercase">Ieșire admin</button>
      </div>
      <!-- Stats row -->
      <div class="grid grid-cols-3 gap-4">
        <div class="p-4 bg-premiumDark border border-discreetGold/10 rounded-sm text-center space-y-1">
          <p id="admin-stat-total" class="font-serif text-2xl text-discreetGold">0</p>
          <p data-i18n="admin_stats_total" class="text-[10px] uppercase tracking-widest text-elegantMuted">Total rezervări</p>
        </div>
        <div class="p-4 bg-premiumDark border border-discreetGold/10 rounded-sm text-center space-y-1">
          <p id="admin-stat-rev" class="font-serif text-2xl text-discreetGold">£0</p>
          <p data-i18n="admin_stats_rev" class="text-[10px] uppercase tracking-widest text-elegantMuted">Venit estimat</p>
        </div>
        <div class="p-4 bg-premiumDark border border-discreetGold/10 rounded-sm text-center space-y-1">
          <p id="admin-stat-clients" class="font-serif text-2xl text-discreetGold">0</p>
          <p data-i18n="admin_stats_clients" class="text-[10px] uppercase tracking-widest text-elegantMuted">Clienți unici</p>
        </div>
      </div>
      <!-- Availability -->
      <div>
        <p data-i18n="admin_avail_title" class="text-[10px] uppercase tracking-widest text-discreetGold mb-3">Disponibilitate pe zi</p>
        <input type="date" id="admin-date-picker" class="bg-premiumDark border border-elegantCream/10 p-3 text-sm text-elegantCream rounded-sm mb-4" onchange="renderAdminAvailability()">
        <div id="admin-hours-grid" class="grid grid-cols-3 sm:grid-cols-5 gap-2"></div>
      </div>
      <!-- All bookings -->
      <div>
        <p data-i18n="admin_all_title" class="text-[10px] uppercase tracking-widest text-discreetGold mb-3">Toate rezervările</p>
        <div class="overflow-x-auto">
          <table class="w-full text-xs border-collapse">
            <thead>
              <tr class="border-b border-discreetGold/20">
                <th data-i18n="admin_col_client" class="text-left py-2 px-3 text-discreetGold font-semibold uppercase tracking-widest whitespace-nowrap">Client</th>
                <th data-i18n="admin_col_phone" class="text-left py-2 px-3 text-discreetGold font-semibold uppercase tracking-widest whitespace-nowrap">Telefon</th>
                <th data-i18n="admin_col_svc" class="text-left py-2 px-3 text-discreetGold font-semibold uppercase tracking-widest whitespace-nowrap">Serviciu</th>
                <th data-i18n="admin_col_date" class="text-left py-2 px-3 text-discreetGold font-semibold uppercase tracking-widest whitespace-nowrap">Dată</th>
                <th data-i18n="admin_col_hour" class="text-left py-2 px-3 text-discreetGold font-semibold uppercase tracking-widest whitespace-nowrap">Oră</th>
                <th data-i18n="admin_col_dur" class="text-left py-2 px-3 text-discreetGold font-semibold uppercase tracking-widest whitespace-nowrap">Durată</th>
                <th data-i18n="admin_col_price" class="text-left py-2 px-3 text-discreetGold font-semibold uppercase tracking-widest whitespace-nowrap">Preț</th>
              </tr>
            </thead>
            <tbody id="admin-bookings-tbody"></tbody>
          </table>
        </div>
        <p id="admin-no-bookings" class="hidden text-xs text-elegantMuted italic mt-4" data-i18n="admin_no_bookings">Nicio rezervare înregistrată.</p>
      </div>
    </div>
  </section>

  <section class="py-24 px-6 bg-premiumDark relative z-10 border-t border-discreetGold/10">
    <div class="max-w-7xl mx-auto space-y-16">
      <div class="text-center space-y-4">
        <span data-i18n="gallery_badge" class="text-xs uppercase tracking-[0.3em] text-discreetGold">Atmosferă</span>
        <h3 data-i18n="gallery_title" class="font-serif text-3xl md:text-5xl tracking-widest font-medium">O Privire Înăuntru</h3>
      </div>
      <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
        <img onerror="this.src='https://images.unsplash.com/photo-1600334089648-b0d9d3028eb2?auto=format&fit=crop&w=900&q=90'" class="h-80 w-full object-cover rounded-sm border border-elegantCream/10" src="https://images.unsplash.com/photo-1515377905703-c4788e51af15?auto=format&fit=crop&w=900&q=90" alt="Spa">
        <img onerror="this.src='https://images.unsplash.com/photo-1600334089648-b0d9d3028eb2?auto=format&fit=crop&w=900&q=90'" class="h-80 w-full object-cover rounded-sm border border-elegantCream/10" src="https://images.unsplash.com/photo-1596178065887-1198b6148b2b?auto=format&fit=crop&w=900&q=90" alt="Wellness">
        <img onerror="this.src='https://images.unsplash.com/photo-1600334089648-b0d9d3028eb2?auto=format&fit=crop&w=900&q=90'" class="h-80 w-full object-cover rounded-sm border border-elegantCream/10" src="https://images.unsplash.com/photo-1540555700478-4be289fbecef?auto=format&fit=crop&w=900&q=90" alt="Massage">
      </div>
    </div>
  </section>

  <footer class="bg-premiumDark border-t border-discreetGold/20 py-20 px-6 relative z-10">
    <div class="max-w-7xl mx-auto grid grid-cols-1 md:grid-cols-4 gap-12 text-sm font-light">
      <div>
        <span class="font-serif text-2xl tracking-[0.3em] text-discreetGold font-semibold">FILEVA</span>
        <p data-i18n="footer_tag" class="text-elegantMuted text-xs mt-4">Terapii premium adaptate ritmului tău.</p>
      </div>
      <div>
        <span data-i18n="footer_sch_title" class="text-xs uppercase tracking-widest text-discreetGold font-semibold block mb-4">Program</span>
        <p id="footer-schedule" class="text-xs text-elegantMuted whitespace-pre-line">Luni - Vineri: 09:00 - 18:00
Sâmbătă/Duminică: Închis</p>
      </div>
      <div>
        <span class="text-xs uppercase tracking-widest text-discreetGold font-semibold block mb-4">Ramona</span>
        <p class="text-xs text-elegantMuted">+44 7495 814286<br><span data-i18n="footer_loc">Londra, Marea Britanie</span></p>
      </div>
      <div>
        <p data-i18n="footer_policy" class="text-[11px] text-elegantMuted/80">Programările sunt confirmate prin WhatsApp. Anulare gratuită cu minimum 24h înainte.</p>
        <div class="text-[10px] text-elegantMuted/40 pt-4">© 2026 FILEVA Wellness.</div>
        <div class="text-[10px] text-elegantMuted/50 pt-3 tracking-wider"><span data-i18n="footer_by">Website realizat de</span> <a href="https://baecodigital.ro" target="_blank" rel="noopener noreferrer" class="text-discreetGold font-semibold hover:text-elegantCream transition-colors">Baeco Digital</a></div>
      </div>
    </div>
  </footer>

  <div id="success-modal" class="fixed inset-0 z-50 bg-premiumBlack/90 backdrop-blur-md hidden justify-center items-center p-6">
    <div class="premium-glass p-8 max-w-md w-full text-center space-y-6">
      <h4 data-i18n="modal_title" class="font-serif text-2xl tracking-wider text-discreetGold">Rezervare Securizată!</h4>
      <div class="p-4 bg-premiumDark border border-discreetGold/10 rounded-sm text-left space-y-2">
        <div class="flex justify-between text-xs"><span data-i18n="modal_svc_lbl">Serviciu:</span><span id="modal-service">-</span></div>
        <div class="flex justify-between text-xs"><span data-i18n="modal_dt_lbl">Dată/Oră:</span><span id="modal-datetime">-</span></div>
        <div class="flex justify-between text-xs"><span data-i18n="modal_dp_lbl">Durată/Preț:</span><span id="modal-durprice">-</span></div>
        <div class="flex justify-between text-xs"><span data-i18n="modal_code_lbl" class="text-discreetGold">Cod:</span><span id="modal-passcode" class="text-discreetGold font-bold">-</span></div>
      </div>
      <a id="whatsapp-confirm-link" target="_blank" class="block py-3 bg-emerald-600 text-white text-xs uppercase tracking-widest font-semibold"><i class="fa-brands fa-whatsapp"></i> <span data-i18n="wa_btn">Deschide WhatsApp din nou</span></a>
      <button onclick="closeSuccessModal()" data-i18n="close_btn" class="w-full py-3 bg-discreetGold text-premiumBlack text-xs uppercase tracking-widest font-semibold">Am înțeles</button>
    </div>
  </div>

  <!-- Modify booking modal -->
  <div id="modify-modal" class="fixed inset-0 z-50 bg-premiumBlack/90 backdrop-blur-md hidden justify-center items-center p-6">
    <div class="premium-glass p-8 max-w-lg w-full space-y-6 rounded-sm max-h-[90vh] overflow-y-auto">
      <h4 data-i18n="modify_title" class="font-serif text-2xl tracking-wider text-discreetGold text-center">Modifică Programarea</h4>
      <div id="modify-booking-info" class="p-4 bg-premiumDark border border-discreetGold/10 rounded-sm text-xs text-elegantMuted space-y-1"></div>
      <!-- Date picker -->
      <div>
        <p data-i18n="modify_pick_date" class="text-[10px] uppercase tracking-widest text-discreetGold mb-3">Alege noua dată</p>
        <div class="p-4 border border-discreetGold/20 rounded-sm bg-premiumDark">
          <div class="flex justify-between items-center mb-4">
            <button onclick="modifyChangeMonth(-1)" class="text-discreetGold"><i class="fa-solid fa-chevron-left"></i></button>
            <span id="modify-calendar-month" class="font-serif tracking-widest text-sm uppercase"></span>
            <button onclick="modifyChangeMonth(1)" class="text-discreetGold"><i class="fa-solid fa-chevron-right"></i></button>
          </div>
          <div id="modify-day-headers" class="grid grid-cols-7 gap-1 text-center text-[10px] uppercase text-elegantMuted font-bold mb-2"></div>
          <div id="modify-calendar-grid" class="grid grid-cols-7 gap-1"></div>
        </div>
      </div>
      <!-- Hour picker -->
      <div>
        <p data-i18n="modify_pick_hour" class="text-[10px] uppercase tracking-widest text-discreetGold mb-3">Alege noua oră</p>
        <div id="modify-hours-grid" class="grid grid-cols-3 gap-3"></div>
      </div>
      <button onclick="sendModifyWhatsApp()" data-i18n="modify_confirm" class="gold-button-shine w-full py-4 bg-discreetGold text-premiumBlack font-semibold text-xs uppercase tracking-[0.2em]">Trimite modificarea pe WhatsApp</button>
      <button onclick="closeModifyModal()" data-i18n="modify_close" class="w-full py-3 border border-elegantCream/15 text-xs uppercase tracking-widest text-elegantMuted hover:border-discreetGold">Închide</button>
    </div>
  </div>

<script>
/* ── Translations ── */
const T={
  ro:{
    page_title:'FILEVA Wellness & Massage | Masaj Premium Londra',
    nav_home:'Acasă',nav_services:'Servicii',nav_booking:'Programări',nav_loyalty:'Fidelitate',nav_account:'Contul Meu',nav_reserve:'Rezervă',
    hero_badge:'Oază de lux și revitalizare',hero_tagline:'Masaj • Relaxare • Stare de Bine',
    hero_desc:'Experiență terapeutică personalizată, unde luxul discret întâlnește armonia deplină a simțurilor.',
    hero_cta:'Rezervă Acum',hero_wa:'WhatsApp Ramona',
    services_badge:'Terapii exclusive',services_title:'Sesiuni de Terapie',
    services_desc:'Fiecare ritual este conceput pentru relaxare profundă, refacere musculară și eliminarea tensiunii.',
    svc_btn:'Rezervă Sesiune',
    booking_badge:'Sistem ultra-rapid',booking_title:'Programare Rapidă',
    booking_desc:'Rezervă sesiunea în câteva secunde, cu mesaj WhatsApp pregătit automat.',
    step_names:['PASUL 1: Alege serviciul','PASUL 2: Alege durata','PASUL 3: Alege data','PASUL 4: Alege ora','PASUL 5: Confirmă programarea'],
    step_of:(c,t)=>`Pasul ${c} din ${t}`,
    step1_h:'Ce tip de tratament dorești?',step2_h:'Selectează durata ideală',step3_h:'Alege data dorită',
    step4_h:'Selectează ora dorită',step5_h:'Completează detaliile programării',
    mon_fri:'Luni - Vineri',cal_days:['Lu','Ma','Mi','Jo','Vi','Sâ','Du'],
    btn_back:'Înapoi',btn_next:'Înainte',
    sum_title:'Sumar Rezervare',sum_svc:'Serviciu',sum_dur:'Durată',sum_date:'Dată',sum_time:'Oră',
    sum_val:'Valoare Sesiune',sum_none:'Neselectat',
    sum_policy:'Modificarea sau anularea programării este gratuită cu minimum 24 de ore înainte.',
    min_label:'Minute',ph_name:'Nume complet',ph_phone:'WhatsApp / Telefon',
    btn_confirm:'Confirmă Sesiunea',
    al_svc:'Selectați tipul de masaj dorit.',al_dur:'Selectați durata tratamentului.',
    al_date:'Alegeți o zi activă din calendar.',al_hour:'Alegeți intervalul orar disponibil.',
    al_login_empty:'Introduceți codul de acces primit pe WhatsApp.',
    al_login_bad:'Cod incorect. Verificați mesajul WhatsApp primit la rezervare.',
    loyalty_badge:'Recompense exclusive',loyalty_title:'Fidelitate de Lux',
    loyalty_desc:'Fiecare sesiune acumulează stele. Praguri: 3 ședințe = 10%, 6 ședințe = 20%, 10 ședințe = 1 masaj gratuit.',
    simulate_label:'Simulează progresul:',card_loyalty_label:'Starea de loialitate',card_member:'LOYALTY MEMBER',
    stamp_of:(c)=>`${c} / 10 Sesiuni`,
    benefit_none:'NICIUN BENEFICIU',benefit_10:'10% REDUCERE ACTIVĂ',benefit_20:'20% REDUCERE ACTIVĂ',benefit_free:'MASAJ GRATUIT DEBLOCAT',
    reward_none:'Continuă pentru prima reducere.',reward_10:'Reducere 10% deblocată.',reward_20:'Reducere 20% deblocată.',reward_free:'Masaj gratuit deblocat.',
    portal_badge:'Spațiu privat client',portal_title:'Contul Tău Premium',login_title:'Conectare Rapidă',
    ph_tel:'Număr telefon (opțional)',ph_code:'Cod acces FILEVA-XXXX',login_btn:'Accesează Contul',logout_btn:'Deconectare',
    no_bookings:'Momentan nu ai nicio programare viitoare.',at_word:'la',
    gallery_badge:'Atmosferă',gallery_title:'O Privire Înăuntru',
    footer_tag:'Terapii premium adaptate ritmului tău.',footer_sch_title:'Program',
    footer_sch:'Luni - Vineri: 09:00 - 18:00\nSâmbătă/Duminică: Închis',
    footer_loc:'Londra, Marea Britanie',
    footer_policy:'Programările sunt confirmate prin WhatsApp. Anulare gratuită cu minimum 24h înainte.',
    footer_by:'Website realizat de',
    modal_title:'Rezervare Securizată!',modal_svc_lbl:'Serviciu:',modal_dt_lbl:'Dată/Oră:',modal_dp_lbl:'Durată/Preț:',modal_code_lbl:'Cod:',
    wa_btn:'Deschide WhatsApp din nou',close_btn:'Am înțeles',
    wa_header:'PROGRAMARE NOUĂ FILEVA WELLNESS',wa_client:'Client',wa_phone_lbl:'Telefon/WhatsApp',
    wa_svc_lbl:'Serviciu',wa_date_lbl:'Data',wa_hour_lbl:'Ora',wa_dur_lbl:'Durată',wa_price_lbl:'Preț',
    wa_code_lbl:'Cod acces client',wa_footer:'Confirmare trimisă din site-ul FILEVA.',
    btn_modify:'Modifică',btn_cancel_bk:'Anulează',
    modify_title:'Modifică Programarea',modify_pick_date:'Alege noua dată',modify_pick_hour:'Alege noua oră',
    modify_confirm:'Trimite modificarea pe WhatsApp',modify_close:'Închide',
    wa_modify_header:'MODIFICARE PROGRAMARE FILEVA',wa_modify_old:'Data/Ora veche',wa_modify_new:'Data/Ora nouă',
    wa_modify_footer:'Clientul solicită modificarea programării de mai sus.',
    wa_cancel_header:'ANULARE PROGRAMARE FILEVA',wa_cancel_footer:'Clientul solicită anularea programării de mai sus.',
    confirm_cancel:'Ești sigur că vrei să anulezi această programare?',
    al_modify_date:'Alegeți noua dată.',al_modify_hour:'Alegeți noua oră.',
    admin_badge:'Panou Administrare',admin_title:'Dashboard Ramona',
    admin_stats_total:'Total rezervări',admin_stats_rev:'Venit estimat',admin_stats_clients:'Clienți unici',
    admin_avail_title:'Disponibilitate pe zi',admin_all_title:'Toate rezervările',
    admin_col_client:'Client',admin_col_phone:'Telefon',admin_col_svc:'Serviciu',
    admin_col_date:'Dată',admin_col_hour:'Oră',admin_col_dur:'Durată',admin_col_price:'Preț',
    admin_no_bookings:'Nicio rezervare înregistrată.',admin_free:'Liber',admin_occupied:'Ocupat',
    admin_logout:'Ieșire admin',
    services:['Masaj Relaxare','Masaj Terapeutic','Masaj Spate și Gât','Masaj Deep Tissue'],
    svc_descs:['Mișcări line, uleiuri esențiale și atmosferă caldă pentru eliberarea stresului.','Procedură pentru ameliorarea durerilor musculare și îmbunătățirea mobilității.','Focalizat pe zona cervicală, scapulară și lombară. Ideal pentru tensiune de birou.','Presiune strategică pentru straturile musculare profunde și refacere completă.'],
    months:['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie','Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
    date_days:['Duminică','Luni','Marți','Miercuri','Joi','Vineri','Sâmbătă'],
    svc_image_alts:['Masaj Relaxare','Masaj Terapeutic','Masaj Spate și Gât','Masaj Deep Tissue'],
  },
  en:{
    page_title:'FILEVA Wellness & Massage | Premium Massage London',
    nav_home:'Home',nav_services:'Services',nav_booking:'Book',nav_loyalty:'Loyalty',nav_account:'My Account',nav_reserve:'Book Now',
    hero_badge:'A sanctuary of luxury and revival',hero_tagline:'Massage • Relaxation • Wellbeing',
    hero_desc:'A personalised therapeutic experience where discreet luxury meets the complete harmony of the senses.',
    hero_cta:'Book Now',hero_wa:'WhatsApp Ramona',
    services_badge:'Exclusive therapies',services_title:'Therapy Sessions',
    services_desc:'Each ritual is designed for deep relaxation, muscle recovery and complete tension relief.',
    svc_btn:'Book Session',
    booking_badge:'Ultra-fast system',booking_title:'Quick Booking',
    booking_desc:'Reserve your session in seconds, with a WhatsApp message prepared automatically.',
    step_names:['STEP 1: Choose service','STEP 2: Choose duration','STEP 3: Choose date','STEP 4: Choose time','STEP 5: Confirm booking'],
    step_of:(c,t)=>`Step ${c} of ${t}`,
    step1_h:'What type of treatment would you like?',step2_h:'Select the ideal duration',step3_h:'Choose your preferred date',
    step4_h:'Select your preferred time',step5_h:'Complete your booking details',
    mon_fri:'Monday - Friday',cal_days:['Mo','Tu','We','Th','Fr','Sa','Su'],
    btn_back:'Back',btn_next:'Next',
    sum_title:'Booking Summary',sum_svc:'Service',sum_dur:'Duration',sum_date:'Date',sum_time:'Time',
    sum_val:'Session Value',sum_none:'Not selected',
    sum_policy:'Modification or cancellation is free with a minimum of 24 hours notice.',
    min_label:'Minutes',ph_name:'Full name',ph_phone:'WhatsApp / Phone',
    btn_confirm:'Confirm Session',
    al_svc:'Please select a massage type.',al_dur:'Please select the treatment duration.',
    al_date:'Please choose an available day from the calendar.',al_hour:'Please choose an available time slot.',
    al_login_empty:'Please enter your access code received via WhatsApp.',
    al_login_bad:'Incorrect code. Please check the WhatsApp message received at booking.',
    loyalty_badge:'Exclusive rewards',loyalty_title:'Luxury Loyalty',
    loyalty_desc:'Each session earns stars. Thresholds: 3 sessions = 10%, 6 sessions = 20%, 10 sessions = 1 free massage.',
    simulate_label:'Simulate progress:',card_loyalty_label:'Loyalty status',card_member:'LOYALTY MEMBER',
    stamp_of:(c)=>`${c} / 10 Sessions`,
    benefit_none:'NO BENEFIT YET',benefit_10:'10% DISCOUNT ACTIVE',benefit_20:'20% DISCOUNT ACTIVE',benefit_free:'FREE MASSAGE UNLOCKED',
    reward_none:'Keep going for your first reward.',reward_10:'10% discount unlocked.',reward_20:'20% discount unlocked.',reward_free:'Free massage unlocked.',
    portal_badge:'Private client area',portal_title:'Your Premium Account',login_title:'Quick Login',
    ph_tel:'Phone number (optional)',ph_code:'Access code FILEVA-XXXX',login_btn:'Access Account',logout_btn:'Log out',
    no_bookings:'You currently have no upcoming bookings.',at_word:'at',
    gallery_badge:'Atmosphere',gallery_title:'A Glimpse Inside',
    footer_tag:'Premium therapies adapted to your rhythm.',footer_sch_title:'Hours',
    footer_sch:'Monday - Friday: 09:00 - 18:00\nSaturday/Sunday: Closed',
    footer_loc:'London, United Kingdom',
    footer_policy:'Bookings are confirmed via WhatsApp. Free cancellation with a minimum of 24h notice.',
    footer_by:'Website by',
    modal_title:'Booking Secured!',modal_svc_lbl:'Treatment:',modal_dt_lbl:'Date/Time:',modal_dp_lbl:'Duration/Price:',modal_code_lbl:'Code:',
    wa_btn:'Open WhatsApp again',close_btn:'Got it',
    wa_header:'NEW FILEVA WELLNESS BOOKING',wa_client:'Client',wa_phone_lbl:'Phone/WhatsApp',
    wa_svc_lbl:'Treatment',wa_date_lbl:'Date',wa_hour_lbl:'Time',wa_dur_lbl:'Duration',wa_price_lbl:'Price',
    wa_code_lbl:'Client access code',wa_footer:'Booking request sent from the FILEVA website. Please confirm the appointment with the client.',
    btn_modify:'Modify',btn_cancel_bk:'Cancel',
    modify_title:'Modify Booking',modify_pick_date:'Choose new date',modify_pick_hour:'Choose new time',
    modify_confirm:'Send change via WhatsApp',modify_close:'Close',
    wa_modify_header:'FILEVA BOOKING CHANGE REQUEST',wa_modify_old:'Previous date/time',wa_modify_new:'New date/time',
    wa_modify_footer:'The client is requesting to modify the above booking.',
    wa_cancel_header:'FILEVA BOOKING CANCELLATION',wa_cancel_footer:'The client is requesting to cancel the above booking.',
    confirm_cancel:'Are you sure you want to cancel this booking?',
    al_modify_date:'Please choose a new date.',al_modify_hour:'Please choose a new time.',
    admin_badge:'Admin Panel',admin_title:'Ramona\'s Dashboard',
    admin_stats_total:'Total bookings',admin_stats_rev:'Estimated revenue',admin_stats_clients:'Unique clients',
    admin_avail_title:'Availability by day',admin_all_title:'All bookings',
    admin_col_client:'Client',admin_col_phone:'Phone',admin_col_svc:'Service',
    admin_col_date:'Date',admin_col_hour:'Time',admin_col_dur:'Duration',admin_col_price:'Price',
    admin_no_bookings:'No bookings recorded.',admin_free:'Available',admin_occupied:'Occupied',
    admin_logout:'Admin logout',
    services:['Relaxation Massage','Therapeutic Massage','Back & Neck Massage','Deep Tissue Massage'],
    svc_descs:['Gentle movements, essential oils and warm atmosphere to release stress.','Treatment for relieving muscle pain and improving mobility.','Focused on the cervical, scapular and lumbar areas. Ideal for office tension.','Strategic pressure targeting deep muscle layers for complete recovery.'],
    months:['January','February','March','April','May','June','July','August','September','October','November','December'],
    date_days:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
    svc_image_alts:['Relaxation Massage','Therapeutic Massage','Back & Neck Massage','Deep Tissue Massage'],
  }
};

/* ── Language ── */
let currentLang=(()=>{
  const p=new URLSearchParams(window.location.search).get('lang');
  if(p==='ro'||p==='en'){localStorage.setItem('filevaLang',p);return p;}
  return localStorage.getItem('filevaLang')||'en';
})();

function t(key){return T[currentLang][key];}

function applyTranslations(){
  const lang=T[currentLang];
  document.getElementById('html-root').lang=currentLang==='ro'?'ro':'en-GB';
  document.title=lang.page_title;
  document.getElementById('lang-toggle-btn').textContent=currentLang==='ro'?'EN':'RO';
  document.querySelectorAll('[data-i18n]').forEach(el=>{const k=el.dataset.i18n;if(lang[k]!==undefined)el.textContent=lang[k];});
  document.querySelectorAll('[data-i18n-placeholder]').forEach(el=>{const k=el.dataset.i18nPlaceholder;if(lang[k]!==undefined)el.placeholder=lang[k];});
  document.getElementById('footer-schedule').textContent=lang.footer_sch;
}

function toggleLang(){
  currentLang=currentLang==='ro'?'en':'ro';
  localStorage.setItem('filevaLang',currentLang);
  if(bookingData.serviceIndex!==null)bookingData.service=T[currentLang].services[bookingData.serviceIndex];
  applyTranslations();
  renderServiceCards();
  renderOptions();
  renderCalendar();
  updateBookingSummaryUI();
  updateStepUI();
  updateMainCardStamps(sessionSimulatedCount);
  if(activeUser)renderPortalDashboard();
}

/* ── Supabase ── */
const SB=supabase.createClient('https://nnzmyolnufazhsuprtqr.supabase.co','eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im5uem15b2xudWZhemhzdXBydHFyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODA0MTU4NTEsImV4cCI6MjA5NTk5MTg1MX0.r3Oc5tUUx8kuwQQGII7ykiM78r-kmZteQZle1OP_YIs');

/* ── Admin ── */
const ADMIN_CODE='ADMIN-2026';

/* ── State ── */
let currentStep=1,totalSteps=5;
let bookingData={service:null,serviceIndex:null,duration:null,date:null,hour:null,price:0,clientName:'',clientPhone:'',passcode:''};
let activeUser=null,userBookings=[];
let sessionSimulatedCount=3;
const priceSheet={30:30,60:50,75:60,120:90};
const rawHoursList=['09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00'];
let currentCalendarDate=new Date();

window.addEventListener('DOMContentLoaded', async ()=>{
  let localBookings=[];
  try{const s=localStorage.getItem('filevaBookings');if(s)localBookings=JSON.parse(s);}catch(e){}
  try{
    const {data}=await SB.from('fileva_bookings').select('*');
    if(data){
      userBookings=data.map(r=>({id:r.id,clientName:r.client_name,clientPhone:r.client_phone,
        service:r.service,duration:r.duration,date:r.date,rawDate:r.raw_date,
        hour:r.hour,price:r.price,passcode:r.passcode,createdAt:r.created_at}));
      const sbIds=new Set(data.map(r=>r.id));
      const toUpload=localBookings.filter(b=>!sbIds.has(b.id)&&b.passcode);
      for(const b of toUpload){
        try{await SB.from('fileva_bookings').insert({id:b.id,client_name:b.clientName,client_phone:b.clientPhone,
          service:b.service,duration:b.duration,date:b.date,raw_date:b.rawDate,
          hour:b.hour,price:b.price,passcode:b.passcode});
          userBookings.push(b);}catch(e){}
      }
    }
  }catch(e){
    userBookings=localBookings;
  }
  applyTranslations();
  renderServiceCards();
  renderOptions();
  renderCalendar();
  renderHours();
  updateBookingSummaryUI();
  updateStepUI();
  updateMainCardStamps(sessionSimulatedCount);
  try{const su=localStorage.getItem('filevaActiveUser');if(su){activeUser=JSON.parse(su);renderPortalDashboard();}}catch(e){}
});

function toggleMobileMenu(){
  const m=document.getElementById('mobile-menu'),i=document.getElementById('menu-icon');
  m.classList.toggle('hidden');m.classList.toggle('flex');
  i.className=m.classList.contains('hidden')?'fa-solid fa-bars text-xl':'fa-solid fa-xmark text-xl';
}

const svcImages=[
  'https://images.unsplash.com/photo-1515377905703-c4788e51af15?auto=format&fit=crop&w=900&q=90',
  'https://images.unsplash.com/photo-1544161515-4ab6ce6db874?auto=format&fit=crop&w=900&q=90',
  'https://images.unsplash.com/photo-1540555700478-4be289fbecef?auto=format&fit=crop&w=900&q=90',
  'https://images.unsplash.com/photo-1600334089648-b0d9d3028eb2?auto=format&fit=crop&w=900&q=90',
];
const fallbackImg='https://images.unsplash.com/photo-1600334089648-b0d9d3028eb2?auto=format&fit=crop&w=900&q=90';

function renderServiceCards(){
  const lang=T[currentLang];
  document.getElementById('service-cards').innerHTML=lang.services.map((name,i)=>`
    <article class="premium-glass group rounded-sm overflow-hidden">
      <div class="h-52 overflow-hidden"><img onerror="this.src='${fallbackImg}'" src="${svcImages[i]}" class="w-full h-full object-cover object-center transition-transform duration-700 group-hover:scale-105" alt="${lang.svc_image_alts[i]}"></div>
      <div class="p-6 space-y-4">
        <h4 class="font-serif text-lg tracking-wider group-hover:text-discreetGold">${name}</h4>
        <p class="text-elegantMuted/80 text-xs leading-relaxed">${lang.svc_descs[i]}</p>
        <button onclick="selectServiceInWidget(${i})" class="text-[10px] tracking-widest uppercase text-discreetGold">${lang.svc_btn} <i class="fa-solid fa-arrow-right-long"></i></button>
      </div>
    </article>`).join('');
}

function renderOptions(){
  const lang=T[currentLang];
  document.getElementById('service-options').innerHTML=lang.services.map((s,i)=>{
    const sel=bookingData.serviceIndex===i;
    return `<div onclick="setBookingValue('service','${s}',${i})" class="service-option p-6 border ${sel?'border-discreetGold bg-discreetGold/5':'border-elegantCream/10 hover:border-discreetGold'} cursor-pointer rounded-sm flex justify-between items-center transition-all"><span class="tracking-wide text-sm font-medium">${s}</span><i class="${sel?'fa-solid fa-circle-check text-discreetGold':'fa-regular fa-circle text-elegantMuted'} check-icon"></i></div>`;
  }).join('');
  document.getElementById('duration-options').innerHTML=[30,60,75,120].map(d=>{
    const sel=bookingData.duration===d;
    return `<div onclick="setBookingValue('duration',${d})" class="duration-option p-6 border ${sel?'border-discreetGold bg-discreetGold/5':'border-elegantCream/10 hover:border-discreetGold'} cursor-pointer rounded-sm text-center transition-all"><span class="block text-3xl font-serif text-discreetGold">${d}</span><span class="text-[9px] tracking-[0.2em] uppercase text-elegantMuted">${lang.min_label}</span><span class="text-xs text-elegantMuted/50 block mt-2">£${priceSheet[d]}</span></div>`;
  }).join('');
}

function selectServiceInWidget(index){
  setBookingValue('service',T[currentLang].services[index],index);
  document.getElementById('booking').scrollIntoView({behavior:'smooth'});
  if(currentStep===1)navigationStepChange(1);
}

function updateStepUI(){
  const lang=T[currentLang];
  document.getElementById('active-step-title').textContent=lang.step_names[currentStep-1];
  document.getElementById('step-counter').textContent=lang.step_of(currentStep,totalSteps);
  document.getElementById('step-progress-line').style.width=`${currentStep/totalSteps*100}%`;
  for(let i=1;i<=totalSteps;i++)document.getElementById(`booking-step-${i}`).classList.toggle('hidden',i!==currentStep);
  const p=document.getElementById('prev-step-btn'),n=document.getElementById('next-step-btn');
  p.disabled=currentStep===1;p.classList.toggle('opacity-50',currentStep===1);p.classList.toggle('cursor-not-allowed',currentStep===1);
  n.classList.toggle('hidden',currentStep===totalSteps);
  if(currentStep===4)renderHours();
  if(currentStep===5&&activeUser){
    document.getElementById('client-name-input').value=activeUser.name;
    document.getElementById('client-phone-input').value=activeUser.phone;
  }
}

function navigationStepChange(dir){
  const lang=T[currentLang];
  if(dir>0){
    if(currentStep===1&&bookingData.serviceIndex===null)return alert(lang.al_svc);
    if(currentStep===2&&!bookingData.duration)return alert(lang.al_dur);
    if(currentStep===3&&!bookingData.date)return alert(lang.al_date);
    if(currentStep===4&&!bookingData.hour)return alert(lang.al_hour);
  }
  let ns=currentStep+dir;
  if(ns>=1&&ns<=totalSteps){currentStep=ns;updateStepUI();}
}

function setBookingValue(param,value,index){
  bookingData[param]=value;
  if(param==='service'){bookingData.serviceIndex=index;renderOptions();}
  if(param==='duration'){bookingData.price=priceSheet[value];triggerPriceGlowEffect();renderOptions();}
  if(param==='hour'){document.querySelectorAll('.hour-option-btn').forEach(el=>{const ok=el.textContent.trim()===value;if(!el.disabled){el.classList.toggle('bg-discreetGold',ok);el.classList.toggle('text-premiumBlack',ok);el.classList.toggle('border-discreetGold',ok);}});}
  updateBookingSummaryUI();
}

function triggerPriceGlowEffect(){const e=document.getElementById('summary-price-wrapper');e.classList.add('bg-discreetGold/20');setTimeout(()=>e.classList.remove('bg-discreetGold/20'),550);}

function updateBookingSummaryUI(){
  const lang=T[currentLang];
  document.getElementById('summary-service').textContent=bookingData.service||lang.sum_none;
  document.getElementById('summary-duration').textContent=bookingData.duration?`${bookingData.duration} ${lang.min_label}`:'-';
  document.getElementById('summary-date').textContent=bookingData.date?formatDateFriendly(bookingData.date):'-';
  document.getElementById('summary-hour').textContent=bookingData.hour||'-';
  document.getElementById('summary-price').textContent=`£${bookingData.price}`;
}

function formatDateFriendly(s){
  const lang=T[currentLang],d=new Date(s);
  return `${lang.date_days[d.getDay()]}, ${d.getDate()} ${lang.months[d.getMonth()]}`;
}

function renderCalendar(){
  const lang=T[currentLang];
  const y=currentCalendarDate.getFullYear(),m=currentCalendarDate.getMonth();
  document.getElementById('calendar-month-year').textContent=`${lang.months[m]} ${y}`;
  const hdr=document.getElementById('calendar-day-headers');
  hdr.innerHTML=lang.cal_days.map((d,i)=>`<span class="${i>=5?'text-red-500/30':''}">${d}</span>`).join('');
  const first=new Date(y,m,1).getDay(),adj=first===0?6:first-1,total=new Date(y,m+1,0).getDate();
  const grid=document.getElementById('calendar-days-grid');
  grid.innerHTML='';
  for(let i=0;i<adj;i++)grid.appendChild(document.createElement('span'));
  const todayStr=(()=>{const n=new Date();return`${n.getFullYear()}-${String(n.getMonth()+1).padStart(2,'0')}-${String(n.getDate()).padStart(2,'0')}`;})();
  for(let day=1;day<=total;day++){
    let b=document.createElement('button');b.type='button';b.textContent=day;
    let dow=new Date(y,m,day).getDay();
    let ymd=`${y}-${String(m+1).padStart(2,'0')}-${String(day).padStart(2,'0')}`;
    const isPast=ymd<todayStr;
    if(dow===0||dow===6||isPast){b.className='p-2 text-elegantMuted/20 text-xs line-through cursor-not-allowed';b.disabled=true;}
    else{
      b.className=bookingData.date===ymd?'p-2 text-xs font-bold bg-discreetGold text-premiumBlack border border-discreetGold rounded-sm':'p-2 text-xs font-medium hover:border hover:border-discreetGold text-elegantCream hover:bg-discreetGold/10 rounded-sm';
      b.onclick=()=>{setBookingValue('date',ymd);renderCalendar();}
    }
    grid.appendChild(b);
  }
}

function changeMonth(d){
  const next=new Date(currentCalendarDate);next.setMonth(next.getMonth()+d);
  const now=new Date();
  if(next.getFullYear()<now.getFullYear()||(next.getFullYear()===now.getFullYear()&&next.getMonth()<now.getMonth()))return;
  currentCalendarDate=next;renderCalendar();
}

function renderHours(){
  const c=document.getElementById('hours-grid');c.innerHTML='';
  const bookedHours=new Set(userBookings.filter(b=>b.rawDate===bookingData.date).map(b=>b.hour));
  rawHoursList.forEach((h,i)=>{
    let b=document.createElement('button');b.type='button';b.textContent=h;
    if(bookedHours.has(h)){
      b.className='p-4 border border-red-900/30 bg-red-900/10 text-red-500/40 text-sm cursor-not-allowed relative';
      b.disabled=true;
      b.title='Ocupat';
      b.innerHTML=`${h}<span class="block text-[8px] uppercase tracking-wider text-red-500/50 mt-0.5">Ocupat</span>`;
    }else{
      b.className='hour-option-btn p-4 border border-elegantCream/10 rounded-sm hover:border-discreetGold bg-transparent text-sm transition-all';
      b.onclick=()=>setBookingValue('hour',h);
    }
    c.appendChild(b);
  });
}

function updateMainCardStamps(count){
  sessionSimulatedCount=count;
  const lang=T[currentLang];
  const grid=document.getElementById('main-loyalty-stamps');
  grid.innerHTML='';
  document.getElementById('main-card-status-text').textContent=lang.stamp_of(count);
  for(let i=1;i<=10;i++){let s=document.createElement('i');s.className=i<=count?'fa-solid fa-star star-glow-active text-discreetGold text-sm':'fa-regular fa-star text-elegantMuted/30 text-sm';grid.appendChild(s);}
  document.getElementById('main-card-benefit-badge').textContent=count>=10?lang.benefit_free:count>=6?lang.benefit_20:count>=3?lang.benefit_10:lang.benefit_none;
}

async function confirmAppointment(e){
  e.preventDefault();
  const lang=T[currentLang];
  bookingData.clientName=document.getElementById('client-name-input').value.trim();
  bookingData.clientPhone=document.getElementById('client-phone-input').value.trim();
  const existingEntry=userBookings.find(b=>b.clientPhone===bookingData.clientPhone);
  bookingData.passcode=existingEntry?existingEntry.passcode:`FILEVA-${Math.floor(1000+Math.random()*9000)}`;
  let item={id:Date.now(),clientName:bookingData.clientName,clientPhone:bookingData.clientPhone,
    service:bookingData.service,duration:`${bookingData.duration} min`,date:formatDateFriendly(bookingData.date),
    rawDate:bookingData.date,hour:bookingData.hour,price:`£${bookingData.price}`,passcode:bookingData.passcode,createdAt:new Date().toISOString()};
  userBookings.push(item);
  try{
    await SB.from('fileva_bookings').insert({id:item.id,client_name:item.clientName,client_phone:item.clientPhone,
      service:item.service,duration:item.duration,date:item.date,raw_date:item.rawDate,
      hour:item.hour,price:item.price,passcode:item.passcode});
  }catch(err){}
  try{localStorage.setItem('filevaLastClient',JSON.stringify({name:item.clientName,phone:item.clientPhone,passcode:item.passcode}));}catch(err){}
  document.getElementById('modal-service').textContent=item.service;
  document.getElementById('modal-datetime').textContent=`${item.date} @ ${item.hour}`;
  document.getElementById('modal-durprice').textContent=`${item.duration} / ${item.price}`;
  document.getElementById('modal-passcode').textContent=item.passcode;
  let message=`${lang.wa_header}\n\n${lang.wa_client}: ${item.clientName}\n${lang.wa_phone_lbl}: ${item.clientPhone}\n\n${lang.wa_svc_lbl}: ${item.service}\n${lang.wa_date_lbl}: ${item.date}\n${lang.wa_hour_lbl}: ${item.hour}\n${lang.wa_dur_lbl}: ${item.duration}\n${lang.wa_price_lbl}: ${item.price}\n\n${lang.wa_code_lbl}: ${item.passcode}\n\n${lang.wa_footer}`;
  let whatsappUrl=`https://wa.me/447495814286?text=${encodeURIComponent(message)}`;
  document.getElementById('whatsapp-confirm-link').href=whatsappUrl;
  document.getElementById('success-modal').classList.remove('hidden');
  document.getElementById('success-modal').classList.add('flex');
  window.open(whatsappUrl,'_blank');
}

function closeSuccessModal(){
  document.getElementById('success-modal').classList.add('hidden');
  document.getElementById('success-modal').classList.remove('flex');
  activeUser={name:bookingData.clientName,phone:bookingData.clientPhone,passcode:bookingData.passcode};
  try{localStorage.setItem('filevaActiveUser',JSON.stringify(activeUser));}catch(e){}
  bookingData={service:null,serviceIndex:null,duration:null,date:null,hour:null,price:0,clientName:'',clientPhone:'',passcode:''};
  currentStep=1;
  document.getElementById('booking-form').reset();
  updateStepUI();updateBookingSummaryUI();renderOptions();renderCalendar();renderHours();renderPortalDashboard();
  document.getElementById('client-portal').scrollIntoView({behavior:'smooth'});
}

function handleLogin(){
  const lang=T[currentLang];
  const code=document.getElementById('login-code').value.trim();
  if(!code)return alert(lang.al_login_empty);
  if(code===ADMIN_CODE){renderAdminDashboard();return;}
  const match=userBookings.find(b=>b.passcode===code);
  if(!match)return alert(lang.al_login_bad);
  activeUser={name:match.clientName,phone:match.clientPhone,passcode:match.passcode};
  try{localStorage.setItem('filevaActiveUser',JSON.stringify(activeUser));}catch(e){}
  renderPortalDashboard();
}

function handleLogout(){
  activeUser=null;
  try{localStorage.removeItem('filevaActiveUser');}catch(e){}
  document.getElementById('dashboard-box').classList.add('hidden');
  document.getElementById('auth-box').classList.remove('hidden');
}

function renderPortalDashboard(){
  const lang=T[currentLang];
  if(!activeUser)return;
  document.getElementById('auth-box').classList.add('hidden');
  document.getElementById('dashboard-box').classList.remove('hidden');
  document.getElementById('user-display-name').textContent=activeUser.name;
  document.getElementById('user-display-phone').textContent=activeUser.phone;
  const myBookings=userBookings.filter(b=>b.clientPhone===activeUser.phone);
  const stampCount=myBookings.length;
  const cont=document.getElementById('portal-loyalty-stamps');
  cont.innerHTML='';
  for(let i=1;i<=10;i++){let s=document.createElement('i');s.className=i<=stampCount?'fa-solid fa-star star-glow-active text-discreetGold text-sm':'fa-regular fa-star text-elegantMuted/20 text-sm';cont.appendChild(s);}
  document.getElementById('reward-badge-status').textContent=stampCount>=10?lang.reward_free:stampCount>=6?lang.reward_20:stampCount>=3?lang.reward_10:lang.reward_none;
  document.getElementById('appointments-dashboard-list').innerHTML=myBookings.length
    ?myBookings.map(b=>`<div class="p-5 bg-premiumDark border border-discreetGold/10 rounded-sm space-y-3">
        <h5 class="font-serif text-base">${b.service}</h5>
        <p class="text-xs text-elegantMuted">${b.date} ${lang.at_word} ${b.hour} (${b.duration}) — ${b.price}</p>
        <div class="flex gap-3 pt-1">
          <button onclick="openModifyModal(${b.id})" class="flex-1 py-2 border border-discreetGold/40 text-discreetGold text-[10px] uppercase tracking-widest hover:bg-discreetGold hover:text-premiumBlack transition-all">${lang.btn_modify}</button>
          <button onclick="cancelBooking(${b.id})" class="flex-1 py-2 border border-red-500/30 text-red-400 text-[10px] uppercase tracking-widest hover:bg-red-500/10 transition-all">${lang.btn_cancel_bk}</button>
        </div>
      </div>`).join('')
    :`<p class="text-xs text-elegantMuted italic">${lang.no_bookings}</p>`;
}

/* ── Modify / Cancel ── */
let modifyBookingId=null,modifyNewDate=null,modifyNewHour=null,modifyCalDate=new Date();

function openModifyModal(id){
  const lang=T[currentLang];
  const bk=userBookings.find(b=>b.id===id);
  if(!bk)return;
  modifyBookingId=id;modifyNewDate=null;modifyNewHour=null;
  modifyCalDate=bk.rawDate?new Date(bk.rawDate):new Date();
  document.getElementById('modify-booking-info').innerHTML=
    `<p><strong>${bk.service}</strong></p><p>${bk.date} ${lang.at_word} ${bk.hour} (${bk.duration}) — ${bk.price}</p>`;
  applyTranslations();
  renderModifyCalendar();
  renderModifyHours();
  const m=document.getElementById('modify-modal');
  m.classList.remove('hidden');m.classList.add('flex');
}

function closeModifyModal(){
  const m=document.getElementById('modify-modal');
  m.classList.add('hidden');m.classList.remove('flex');
  modifyBookingId=null;modifyNewDate=null;modifyNewHour=null;
}

function modifyChangeMonth(d){modifyCalDate.setMonth(modifyCalDate.getMonth()+d);renderModifyCalendar();}

function renderModifyCalendar(){
  const lang=T[currentLang];
  const y=modifyCalDate.getFullYear(),m=modifyCalDate.getMonth();
  document.getElementById('modify-calendar-month').textContent=`${lang.months[m]} ${y}`;
  document.getElementById('modify-day-headers').innerHTML=lang.cal_days.map((d,i)=>`<span class="${i>=5?'text-red-500/30':''}">${d}</span>`).join('');
  const first=new Date(y,m,1).getDay(),adj=first===0?6:first-1,total=new Date(y,m+1,0).getDate();
  const grid=document.getElementById('modify-calendar-grid');grid.innerHTML='';
  for(let i=0;i<adj;i++)grid.appendChild(document.createElement('span'));
  for(let day=1;day<=total;day++){
    let b=document.createElement('button');b.type='button';b.textContent=day;
    let dow=new Date(y,m,day).getDay();
    if(dow===0||dow===6){b.className='p-2 text-red-400/20 text-xs line-through cursor-not-allowed';b.disabled=true;}
    else{
      let ymd=`${y}-${String(m+1).padStart(2,'0')}-${String(day).padStart(2,'0')}`;
      b.className=modifyNewDate===ymd?'p-2 text-xs font-bold bg-discreetGold text-premiumBlack rounded-sm':'p-2 text-xs hover:border hover:border-discreetGold text-elegantCream hover:bg-discreetGold/10 rounded-sm';
      b.onclick=()=>{modifyNewDate=ymd;modifyNewHour=null;renderModifyCalendar();renderModifyHours();}
    }
    grid.appendChild(b);
  }
}

function renderModifyHours(){
  const bookedHours=new Set(userBookings.filter(b=>b.rawDate===modifyNewDate&&b.id!==modifyBookingId).map(b=>b.hour));
  const c=document.getElementById('modify-hours-grid');c.innerHTML='';
  rawHoursList.forEach(h=>{
    let b=document.createElement('button');b.type='button';b.textContent=h;
    if(bookedHours.has(h)){
      b.className='p-3 border border-red-900/30 bg-red-900/10 text-red-500/40 text-sm cursor-not-allowed';
      b.innerHTML=`${h}<span class="block text-[8px]">Ocupat</span>`;b.disabled=true;
    }else{
      const sel=modifyNewHour===h;
      b.className=`p-3 border ${sel?'border-discreetGold bg-discreetGold text-premiumBlack':'border-elegantCream/10 hover:border-discreetGold text-elegantCream'} rounded-sm text-sm transition-all`;
      b.onclick=()=>{modifyNewHour=h;renderModifyHours();}
    }
    c.appendChild(b);
  });
}

async function sendModifyWhatsApp(){
  const lang=T[currentLang];
  if(!modifyNewDate)return alert(lang.al_modify_date);
  if(!modifyNewHour)return alert(lang.al_modify_hour);
  const bk=userBookings.find(b=>b.id===modifyBookingId);
  if(!bk)return;
  const newDateFriendly=formatDateFriendly(modifyNewDate);
  const message=`${lang.wa_modify_header}\n\n${lang.wa_client}: ${bk.clientName}\n${lang.wa_phone_lbl}: ${bk.clientPhone}\n${lang.wa_svc_lbl}: ${bk.service}\n\n${lang.wa_modify_old}: ${bk.date} ${lang.at_word} ${bk.hour}\n${lang.wa_modify_new}: ${newDateFriendly} ${lang.at_word} ${modifyNewHour}\n\n${lang.wa_modify_footer}`;
  bk.date=newDateFriendly;bk.rawDate=modifyNewDate;bk.hour=modifyNewHour;
  try{await SB.from('fileva_bookings').update({date:newDateFriendly,raw_date:modifyNewDate,hour:modifyNewHour}).eq('id',modifyBookingId);}catch(e){}
  window.open(`https://wa.me/447495814286?text=${encodeURIComponent(message)}`,'_blank');
  closeModifyModal();
  renderPortalDashboard();
}

async function cancelBooking(id){
  const lang=T[currentLang];
  if(!confirm(lang.confirm_cancel))return;
  const bk=userBookings.find(b=>b.id===id);
  if(!bk)return;
  const message=`${lang.wa_cancel_header}\n\n${lang.wa_client}: ${bk.clientName}\n${lang.wa_phone_lbl}: ${bk.clientPhone}\n${lang.wa_svc_lbl}: ${bk.service}\n${lang.wa_date_lbl}: ${bk.date} ${lang.at_word} ${bk.hour}\n\n${lang.wa_cancel_footer}`;
  userBookings=userBookings.filter(b=>b.id!==id);
  try{await SB.from('fileva_bookings').delete().eq('id',id);}catch(e){}
  window.open(`https://wa.me/447495814286?text=${encodeURIComponent(message)}`,'_blank');
  renderPortalDashboard();
}

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

function renderAdminDashboard(){
  document.getElementById('auth-box').classList.add('hidden');
  document.getElementById('dashboard-box').classList.add('hidden');
  document.getElementById('admin-box').classList.remove('hidden');
  const total=userBookings.length;
  const rev=userBookings.reduce((s,b)=>{const n=parseFloat((b.price||'').replace(/[^0-9.]/g,''));return s+(isNaN(n)?0:n);},0);
  const clients=new Set(userBookings.map(b=>b.clientPhone)).size;
  document.getElementById('admin-stat-total').textContent=total;
  document.getElementById('admin-stat-rev').textContent=`£${rev.toFixed(0)}`;
  document.getElementById('admin-stat-clients').textContent=clients;
  document.getElementById('admin-date-picker').value=new Date().toISOString().slice(0,10);
  renderAdminAvailability();
  const tbody=document.getElementById('admin-bookings-tbody');
  const noMsg=document.getElementById('admin-no-bookings');
  if(!userBookings.length){tbody.innerHTML='';noMsg.classList.remove('hidden');}
  else{
    noMsg.classList.add('hidden');
    const sorted=[...userBookings].sort((a,b)=>(a.rawDate||'').localeCompare(b.rawDate||'')||(a.hour||'').localeCompare(b.hour||''));
    tbody.innerHTML=sorted.map(b=>`<tr class="border-b border-elegantCream/5 hover:bg-premiumDark/40">
      <td class="py-2 px-3 text-elegantCream">${esc(b.clientName)}</td>
      <td class="py-2 px-3 text-elegantMuted">${esc(b.clientPhone)}</td>
      <td class="py-2 px-3 text-elegantMuted">${esc(b.service)}</td>
      <td class="py-2 px-3 text-elegantMuted whitespace-nowrap">${esc(b.date||b.rawDate||'')}</td>
      <td class="py-2 px-3 text-elegantMuted">${esc(b.hour)}</td>
      <td class="py-2 px-3 text-elegantMuted">${esc(b.duration)}</td>
      <td class="py-2 px-3 text-discreetGold font-semibold">${esc(b.price)}</td>
    </tr>`).join('');
  }
  applyTranslations();
}

function renderAdminAvailability(){
  const lang=T[currentLang];
  const date=document.getElementById('admin-date-picker').value;
  const grid=document.getElementById('admin-hours-grid');
  grid.innerHTML='';
  if(!date)return;
  const bookedSet=new Set(userBookings.filter(b=>b.rawDate===date).map(b=>b.hour));
  rawHoursList.forEach(h=>{
    const bk=userBookings.find(b=>b.rawDate===date&&b.hour===h);
    const div=document.createElement('div');
    if(bookedSet.has(h)){
      div.className='p-3 border border-red-900/30 bg-red-900/10 rounded-sm text-center space-y-1';
      div.innerHTML=`<p class="text-sm font-semibold text-red-400">${h}</p><p class="text-[9px] uppercase tracking-wider text-red-400/60">${lang.admin_occupied}</p>${bk?`<p class="text-[9px] text-elegantMuted truncate">${esc(bk.clientName)}</p>`:''}`;
    }else{
      div.className='p-3 border border-discreetGold/10 bg-premiumDark/30 rounded-sm text-center space-y-1';
      div.innerHTML=`<p class="text-sm text-elegantCream">${h}</p><p class="text-[9px] uppercase tracking-wider text-discreetGold/60">${lang.admin_free}</p>`;
    }
    grid.appendChild(div);
  });
}

function handleAdminLogout(){
  document.getElementById('admin-box').classList.add('hidden');
  document.getElementById('auth-box').classList.remove('hidden');
}
</script>
</body>
</html>
