<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">

<!-- ===== SEO PRINCIPAL ===== -->
<title>Vespra — Inteligência Artificial para Empresas em Portugal</title>
<meta name="description" content="A Vespra é uma agência portuguesa de inteligência artificial. Agentes que atendem clientes, automações, sites e marca para pequenas e médias empresas. Proposta gratuita em 24h.">
<meta name="keywords" content="inteligência artificial, IA para empresas, automação, agentes de IA, chatbot, criação de sites, branding, PME, Portugal, agência de IA, atendimento automático, orçamentos automáticos">
<meta name="author" content="Vespra">
<meta name="robots" content="index, follow, max-image-preview:large">
<meta name="language" content="Portuguese">
<meta name="geo.region" content="PT">
<meta name="geo.placename" content="Portugal">
<link rel="canonical" href="https://vespra.pt/">

<!-- ===== OPEN GRAPH (Facebook, WhatsApp, LinkedIn) ===== -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="Vespra">
<meta property="og:title" content="Vespra — Inteligência Artificial para Empresas">
<meta property="og:description" content="A tecnologia das grandes empresas, ao alcance da tua. Agentes, automações, sites e marca para PME. Proposta gratuita em 24h.">
<meta property="og:url" content="https://vespra.pt/">
<meta property="og:locale" content="pt_PT">
<meta property="og:image" content="https://vespra.pt/vespra-share.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Vespra — Inteligência que trabalha por ti">

<!-- ===== TWITTER / X ===== -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Vespra — Inteligência Artificial para Empresas">
<meta name="twitter:description" content="A tecnologia das grandes empresas, ao alcance da tua. Proposta gratuita em 24h.">
<meta name="twitter:image" content="https://vespra.pt/vespra-share.png">

<!-- ===== TEMA / FAVICON ===== -->
<meta name="theme-color" content="#0a0b0f">
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<link rel="apple-touch-icon" href="apple-touch-icon.png">

<!-- ===== DADOS ESTRUTURADOS (Schema.org) ===== -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "name": "Vespra",
  "description": "Agência de inteligência artificial para pequenas e médias empresas. Agentes de atendimento, automações, sites e branding.",
  "url": "https://vespra.pt",
  "email": "ola@vespra.pt",
  "telephone": "+351000000000",
  "image": "https://vespra.pt/vespra-share.png",
  "priceRange": "€€",
  "areaServed": { "@type": "Country", "name": "Portugal" },
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Rua Principal nº 54",
    "postalCode": "2620-422",
    "addressLocality": "Ramada",
    "addressCountry": "PT"
  },
  "legalName": "Cunhopositivo Unipessoal, Lda",
  "slogan": "A tecnologia das grandes empresas, ao alcance da tua.",
  "knowsAbout": ["Inteligência Artificial","Automação de processos","Criação de sites","Branding","Chatbots e agentes de IA"],
  "makesOffer": {
    "@type": "Offer",
    "description": "Proposta gratuita e sem compromisso, com preço fechado.",
    "priceCurrency": "EUR",
    "price": "189.90"
  }
}
</script>

<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=Fraunces:ital,opsz,wght@0,9..144,300;0,9..144,400;0,9..144,500;1,9..144,400&family=Inter:wght@400;450;500;600&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
  :root{
    --bg:#0a0b0f;--bg-2:#101218;--card:#14171f;--card-2:#171b25;
    --ink:#f4f3ef;--soft:#c3c1ba;--mut:#7e8497;--mut-2:#9aa0b2;
    --line:rgba(255,255,255,.08);--line-2:rgba(255,255,255,.15);
    --amber:#f0a13e;--amber-soft:#ffc578;--amber-dim:rgba(240,161,62,.12);
    --green:#54e0a0;--max:1180px;
  }
  *{margin:0;padding:0;box-sizing:border-box}
  html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
  body{background:var(--bg);color:var(--ink);font-family:'Inter',system-ui,sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden;text-align:center}
  ::selection{background:var(--amber);color:#1a0f02}
  a{color:inherit;text-decoration:none}
  .wrap{max-width:var(--max);margin:0 auto;padding:0 26px}
  .mono{font-family:'JetBrains Mono',monospace}
  .serif{font-family:'Fraunces',serif}

  /* ambient */
  .amb{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
  .amb .o{position:absolute;border-radius:50%;filter:blur(120px);opacity:.16}
  .amb .o1{width:560px;height:560px;top:-220px;left:50%;transform:translateX(-50%);background:var(--amber)}
  .amb .o2{width:480px;height:480px;bottom:-200px;right:-120px;background:#6a5cff;opacity:.1}
  .amb .grid{position:absolute;inset:0;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:70px 70px;-webkit-mask-image:radial-gradient(circle at 50% 18%,#000,transparent 72%);mask-image:radial-gradient(circle at 50% 18%,#000,transparent 72%);opacity:.5}

  header{position:fixed;inset:0 0 auto;z-index:60;transition:.4s}
  header.scrolled{background:rgba(10,11,15,.8);backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}
  nav{display:flex;align-items:center;justify-content:space-between;height:74px}
  .brand{font-family:'Fraunces';font-weight:500;font-size:24px;letter-spacing:-.02em}
  .brand .dot{color:var(--amber)}
  .nav-links{display:flex;gap:32px;font-size:14.5px;color:var(--mut-2)}
  .nav-links a:hover{color:#fff}
  .nav-cta{font-weight:600;font-size:14px;padding:11px 20px;border-radius:9px;background:var(--amber);color:#1a0f02;transition:.25s}
  .nav-cta:hover{transform:translateY(-1px);box-shadow:0 10px 28px rgba(240,161,62,.4)}
  .burger{display:none;flex-direction:column;gap:5px;cursor:pointer;padding:4px}
  .burger span{width:24px;height:2px;background:#fff;border-radius:2px;transition:.28s cubic-bezier(.2,.8,.2,1)}
  .burger.x span:nth-child(1){transform:translateY(7px) rotate(45deg)}
  .burger.x span:nth-child(2){opacity:0}
  .burger.x span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

  /* mobile menu panel */
  .mnav{display:none;flex-direction:column;text-align:left;padding:6px 26px 24px;background:rgba(10,11,15,.97);backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}
  .mnav a{padding:15px 2px;font-size:16.5px;color:var(--mut-2);border-bottom:1px solid var(--line)}
  .mnav a:hover{color:#fff}
  .mnav .mnav-cta{margin-top:16px;background:var(--amber);color:#1a0f02;text-align:center;border-radius:11px;font-weight:600;border-bottom:none;padding:15px}
  header.open{background:rgba(10,11,15,.92);backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}
  header.open .mnav{display:flex}
  @media(min-width:901px){.mnav{display:none!important}}

  /* HERO */
  .hero{position:relative;z-index:2;padding:150px 0 70px}
  .eyebrow{display:inline-flex;align-items:center;gap:9px;font-family:'JetBrains Mono';font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--amber-soft);border:1px solid var(--line-2);padding:7px 15px;border-radius:999px;margin-bottom:30px;background:rgba(255,255,255,.02);opacity:0;animation:fu .7s .1s forwards}
  .live{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 0 0 var(--green);animation:beat 2s infinite}
  @keyframes beat{0%{box-shadow:0 0 0 0 rgba(84,224,160,.5)}70%{box-shadow:0 0 0 8px rgba(84,224,160,0)}100%{box-shadow:0 0 0 0 rgba(84,224,160,0)}}
  @keyframes fu{to{opacity:1;transform:none}}
  h1{font-family:'Fraunces';font-weight:300;font-size:clamp(40px,6vw,76px);line-height:1.02;letter-spacing:-.03em;margin-bottom:24px;max-width:15ch;margin-left:auto;margin-right:auto}
  h1 .w{display:inline-block;opacity:0;transform:translateY(20px);animation:wi .7s cubic-bezier(.2,.8,.2,1) forwards}
  h1 .em{font-style:italic;color:var(--amber)}
  @keyframes wi{to{opacity:1;transform:none}}
  .lead{font-size:clamp(16.5px,1.7vw,20px);color:var(--soft);max-width:560px;margin:0 auto 38px;opacity:0;animation:fu .8s .9s forwards}
  .cta-row{display:flex;gap:13px;flex-wrap:wrap;align-items:center;justify-content:center;opacity:0;animation:fu .8s 1.05s forwards}
  .btn{font-weight:600;font-size:15.5px;padding:15px 28px;border-radius:10px;transition:.25s;cursor:pointer;border:none;display:inline-flex;align-items:center;gap:9px}
  .btn-p{background:var(--amber);color:#1a0f02}
  .btn-p:hover{transform:translateY(-2px);box-shadow:0 14px 40px rgba(240,161,62,.45)}
  .btn-g{background:rgba(255,255,255,.05);color:#fff;border:1px solid var(--line-2)}
  .btn-g:hover{background:rgba(255,255,255,.11)}

  /* LIVE CHAT demo */
  .chat-wrap{max-width:680px;margin:54px auto 0;opacity:0;animation:fu 1s 1.25s forwards}
  .chat{background:linear-gradient(180deg,var(--card-2),var(--card));border:1px solid var(--line-2);border-radius:16px;overflow:hidden;box-shadow:0 50px 100px -40px rgba(0,0,0,.8);position:relative;text-align:left}
  .chat::after{content:"";position:absolute;inset:0;border-radius:16px;padding:1px;background:linear-gradient(180deg,rgba(240,161,62,.5),transparent 38%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}
  .chat-bar{display:flex;align-items:center;gap:8px;padding:13px 16px;border-bottom:1px solid var(--line);background:rgba(0,0,0,.25)}
  .chat-bar .d{width:10px;height:10px;border-radius:50%}.d.r{background:#ff5f57}.d.y{background:#febc2e}.d.g{background:#28c840}
  .chat-bar .t{margin-left:6px;font-family:'JetBrains Mono';font-size:11.5px;color:var(--mut)}
  .chat-bar .st{margin-left:auto;font-family:'JetBrains Mono';font-size:10.5px;color:var(--green);display:flex;align-items:center;gap:6px}
  .chat-body{padding:20px 18px;min-height:260px;max-height:340px;overflow-y:auto;display:flex;flex-direction:column;gap:12px}
  .msg{max-width:80%;padding:11px 15px;border-radius:14px;font-size:14.5px;line-height:1.5;animation:pop .35s cubic-bezier(.2,.9,.3,1)}
  @keyframes pop{from{opacity:0;transform:translateY(8px) scale(.97)}to{opacity:1;transform:none}}
  .msg.bot{background:var(--card);border:1px solid var(--line);align-self:flex-start;border-bottom-left-radius:4px;color:var(--soft)}
  .msg.user{background:var(--amber);color:#1a0f02;align-self:flex-end;border-bottom-right-radius:4px;font-weight:500}
  .msg.bot b{color:var(--amber-soft);font-weight:600}
  .typing{display:flex;gap:4px;padding:14px 16px;align-self:flex-start}
  .typing span{width:7px;height:7px;border-radius:50%;background:var(--mut);animation:tp 1.2s infinite}
  .typing span:nth-child(2){animation-delay:.2s}.typing span:nth-child(3){animation-delay:.4s}
  @keyframes tp{0%,60%,100%{opacity:.3;transform:translateY(0)}30%{opacity:1;transform:translateY(-4px)}}
  .chat-input{display:flex;gap:9px;padding:13px;border-top:1px solid var(--line);background:rgba(0,0,0,.2)}
  .chat-input input{flex:1;background:var(--bg-2);border:1px solid var(--line-2);border-radius:9px;padding:12px 14px;color:#fff;font-family:'Inter';font-size:14.5px;outline:none}
  .chat-input input:focus{border-color:var(--amber)}
  .chat-input button{background:var(--amber);color:#1a0f02;border:none;border-radius:9px;width:46px;font-size:18px;cursor:pointer;transition:.2s}
  .chat-input button:hover{transform:scale(1.05)}
  .chat-hint{font-family:'JetBrains Mono';font-size:11px;color:var(--mut);margin-top:14px;text-align:center}
  .chip{display:inline-block;margin:3px;padding:6px 12px;border:1px solid var(--line-2);border-radius:999px;font-size:12.5px;color:var(--mut-2);cursor:pointer;transition:.2s;background:rgba(255,255,255,.02)}
  .chip:hover{border-color:var(--amber);color:var(--amber-soft)}

  section{position:relative;z-index:2}
  .sec{padding:100px 0}
  .head{max-width:660px;margin:0 auto 56px}
  .kick{font-family:'JetBrains Mono';font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--amber-soft);margin-bottom:18px;display:block}
  h2{font-family:'Fraunces';font-weight:300;font-size:clamp(30px,4.6vw,52px);line-height:1.07;letter-spacing:-.02em;margin-bottom:18px}
  h2 .em{font-style:italic;color:var(--amber)}
  .head p{color:var(--soft);font-size:17.5px}

  /* animated screens trio */
  .screens{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
  .screen{background:linear-gradient(180deg,var(--card),var(--bg-2));border:1px solid var(--line);border-radius:16px;overflow:hidden;text-align:left;transition:.35s}
  .screen:hover{transform:translateY(-6px);border-color:var(--line-2);box-shadow:0 30px 60px -30px rgba(0,0,0,.6)}
  .screen .sh{padding:14px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:8px;font-family:'JetBrains Mono';font-size:11px;color:var(--mut)}
  .screen .sh .dt{width:7px;height:7px;border-radius:50%;background:var(--green)}
  .screen .sc{padding:18px 16px;min-height:200px;font-family:'JetBrains Mono';font-size:12px;line-height:1.9}
  .sl{display:flex;gap:8px;opacity:0;transform:translateY(6px)}
  .sl.on{animation:slin .4s forwards}
  @keyframes slin{to{opacity:1;transform:none}}
  .sl .a{color:var(--amber-soft)}.sl .ok{color:var(--green)}.sl .m{color:var(--soft)}
  .screen h3{font-family:'Fraunces';font-weight:400;font-size:19px;padding:0 16px 18px;letter-spacing:-.01em}
  /* progress bar in screen */
  .pbar{height:4px;background:var(--line);border-radius:3px;margin:8px 0;overflow:hidden}
  .pbar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--amber),var(--amber-soft));border-radius:3px}
  .pbar.run i{animation:fillp 2.4s ease forwards}
  @keyframes fillp{to{width:100%}}
  @media(max-width:820px){.screens{grid-template-columns:1fr}}

  /* metrics count */
  .metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:16px;overflow:hidden;max-width:840px;margin:0 auto}
  .metric{background:var(--bg);padding:40px 24px}
  .metric .big{font-family:'Fraunces';font-weight:300;font-size:clamp(42px,6vw,64px);color:var(--amber);line-height:1}
  .metric .lb{color:var(--soft);font-size:14.5px;margin-top:12px}
  @media(max-width:680px){.metrics{grid-template-columns:1fr}}

  /* services */
  .svc{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;max-width:920px;margin:0 auto;text-align:left}
  .card{background:linear-gradient(180deg,var(--card),var(--bg-2));border:1px solid var(--line);border-radius:16px;padding:30px;transition:.3s;display:flex;gap:20px}
  .card:hover{border-color:var(--line-2);transform:translateY(-4px)}
  .card .ico{width:46px;height:46px;flex-shrink:0;border-radius:12px;background:var(--amber-dim);border:1px solid rgba(240,161,62,.3);display:grid;place-items:center}
  .card .ico svg{width:22px;height:22px;stroke:var(--amber-soft);fill:none;stroke-width:1.7}
  .card h3{font-family:'Fraunces';font-weight:400;font-size:20px;margin-bottom:7px}
  .card p{color:var(--mut);font-size:14.5px}
  .card .see{display:inline-block;margin-top:12px;font-family:'JetBrains Mono';font-size:12px;color:var(--amber-soft);transition:.25s}
  .card:hover .see{letter-spacing:.04em}
  a.card{cursor:pointer}

  /* PORTFOLIO */
  .pf-tabs{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:38px}
  .pf-tab{font-family:'JetBrains Mono';font-size:12.5px;letter-spacing:.04em;padding:9px 16px;border-radius:999px;border:1px solid var(--line-2);background:rgba(255,255,255,.02);color:var(--mut-2);cursor:pointer;transition:.25s}
  .pf-tab:hover{color:#fff}
  .pf-tab.active{background:var(--amber);color:#1a0f02;border-color:var(--amber)}
  .pf-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;text-align:left}
  @media(max-width:820px){.pf-grid{grid-template-columns:1fr}}
  .work{border:1px solid var(--line);border-radius:16px;overflow:hidden;background:var(--card);transition:.4s;opacity:1;position:relative}
  .work.hide{display:none}
  .work:hover{transform:translateY(-5px);border-color:var(--line-2);box-shadow:0 30px 60px -30px rgba(0,0,0,.7)}
  .work .demo-badge{position:absolute;top:14px;right:14px;font-family:'JetBrains Mono';font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;background:rgba(0,0,0,.5);backdrop-filter:blur(6px);border:1px solid var(--line-2);color:var(--amber-soft);padding:5px 10px;border-radius:999px;z-index:5}
  .work .frame{position:relative;height:230px;overflow:hidden;background:var(--bg-2);border-bottom:1px solid var(--line)}
  .work .info{padding:22px}
  .work .info .cat{font-family:'JetBrains Mono';font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--amber-soft);margin-bottom:9px}
  .work .info h4{font-family:'Fraunces';font-weight:400;font-size:21px;margin-bottom:8px}
  .work .info p{color:var(--mut);font-size:14px}

  /* ---- mockup: website ---- */
  .mk{position:absolute;inset:0;padding:20px}
  .mk-browser{height:100%;background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 14px 30px -12px rgba(0,0,0,.5);transform:translateY(8px);transition:.5s}
  .work:hover .mk-browser{transform:translateY(0)}
  .mk-bar{height:26px;background:#eceae4;display:flex;align-items:center;gap:5px;padding:0 10px}
  .mk-bar i{width:7px;height:7px;border-radius:50%;background:#c9c5bb}
  .mk-site{padding:14px}
  .mk-hero{height:50px;border-radius:6px;background:linear-gradient(110deg,#1a1d24,#3a2f22);margin-bottom:9px;position:relative;overflow:hidden}
  .mk-hero::after{content:"";position:absolute;left:12px;top:14px;width:60%;height:8px;background:var(--amber);border-radius:3px;opacity:.85}
  .mk-row{display:flex;gap:7px;margin-bottom:7px}
  .mk-row span{flex:1;height:30px;border-radius:5px;background:#e7e4dc}
  .mk-line{height:7px;border-radius:3px;background:#e0ddd4;margin-bottom:6px}
  .mk-line.s{width:55%}

  /* ---- mockup: chat/IA ---- */
  .mk-chat{position:absolute;inset:0;padding:22px;display:flex;flex-direction:column;gap:9px;justify-content:center}
  .mk-msg{max-width:78%;padding:9px 13px;border-radius:12px;font-family:'Inter';font-size:12px;line-height:1.4;opacity:0;transform:translateY(8px);animation:mkpop .5s forwards}
  .work:hover .mk-msg{animation:mkpop .5s forwards}
  .mk-msg.b{background:#1d2230;border:1px solid var(--line);color:var(--soft);align-self:flex-start;border-bottom-left-radius:3px}
  .mk-msg.u{background:var(--amber);color:#1a0f02;align-self:flex-end;border-bottom-right-radius:3px;font-weight:500}
  .mk-msg:nth-child(1){animation-delay:.1s}.mk-msg:nth-child(2){animation-delay:.5s}.mk-msg:nth-child(3){animation-delay:.9s}
  @keyframes mkpop{to{opacity:1;transform:none}}

  /* ---- mockup: brand ---- */
  .mk-brand{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:radial-gradient(circle at 50% 40%,#1a1d24,#0d0e13)}
  .mk-brand .logo-lg{font-family:'Fraunces';font-weight:500;font-size:38px;color:#fff;letter-spacing:-.02em}
  .mk-brand .logo-lg .dot{color:var(--amber)}
  .mk-brand .swatches{display:flex;gap:8px}
  .mk-brand .swatches i{width:30px;height:30px;border-radius:7px}
  .mk-brand .pal1{background:var(--amber)}.mk-brand .pal2{background:#1a1d24;border:1px solid var(--line-2)}.mk-brand .pal3{background:#f4f3ef}.mk-brand .pal4{background:#6a5cff}
  .mk-brand .tagline{font-family:'JetBrains Mono';font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mut-2)}

  /* ---- mockup: automation flow ---- */
  .mk-flow{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:0;padding:20px}
  .mk-node{width:58px;height:58px;border-radius:12px;background:#1d2230;border:1px solid var(--line-2);display:grid;place-items:center;font-size:22px;flex-shrink:0;position:relative;z-index:2}
  .mk-pipe{height:2px;flex:1;background:var(--line-2);position:relative;overflow:hidden}
  .mk-pipe::after{content:"";position:absolute;top:0;left:-30%;width:30%;height:100%;background:var(--amber);animation:flowdot 1.8s linear infinite}
  @keyframes flowdot{to{left:100%}}

  /* who */
  .who{max-width:720px;margin:0 auto}
  .who .q{font-family:'Fraunces';font-weight:300;font-size:clamp(22px,3.4vw,34px);line-height:1.32;letter-spacing:-.01em}
  .who .q .em{font-style:italic;color:var(--amber)}
  .who .d{color:var(--soft);font-size:15.5px;margin-top:24px;max-width:560px;margin-left:auto;margin-right:auto}

  /* two worlds */
  .worlds{display:grid;grid-template-columns:1fr auto 1fr;gap:24px;align-items:center;max-width:880px;margin:56px auto 0;text-align:left}
  .world{background:linear-gradient(180deg,var(--card),var(--bg-2));border:1px solid var(--line);border-radius:16px;padding:32px;transition:.35s}
  .world:hover{border-color:var(--line-2);transform:translateY(-4px)}
  .world .wn{font-family:'JetBrains Mono';font-size:12px;letter-spacing:.06em;color:var(--amber-soft);margin-bottom:16px}
  .world h3{font-family:'Fraunces';font-weight:400;font-size:24px;margin-bottom:12px;letter-spacing:-.01em}
  .world p{color:var(--mut);font-size:14.5px;line-height:1.65}
  .world-plus{font-family:'Fraunces';font-size:40px;color:var(--amber);font-weight:300}
  @media(max-width:760px){.worlds{grid-template-columns:1fr;gap:16px}.world-plus{transform:rotate(90deg);justify-self:center}}

  /* mission */
  .mission{max-width:720px;margin:60px auto 0;text-align:center;border-top:1px solid var(--line);padding-top:44px}
  .mission .mtext{font-family:'Fraunces';font-weight:300;font-size:clamp(19px,2.6vw,26px);line-height:1.45;letter-spacing:-.01em;color:var(--ink);margin-top:16px}
  .mission .mtext .em{font-style:italic;color:var(--amber)}

  /* price */
  .price{max-width:760px;margin:0 auto;border:1px solid var(--line-2);border-radius:18px;padding:54px 40px;background:radial-gradient(circle at 50% 0%,rgba(240,161,62,.1),var(--bg-2) 62%)}
  .price .from{font-family:'JetBrains Mono';font-size:13px;color:var(--mut-2)}
  .price .amt{font-family:'Fraunces';font-weight:300;font-size:72px;line-height:1;margin:6px 0;color:var(--ink)}
  .price .amt small{font-size:28px;color:var(--mut-2)}
  .price p{color:var(--soft);max-width:460px;margin:14px auto 0}

  .cta-band{max-width:860px;margin:0 auto;border-radius:20px;padding:72px 40px;border:1px solid var(--line-2);background:radial-gradient(circle at 50% -10%,rgba(240,161,62,.18),var(--bg-2) 65%)}
  .cta-band p{color:var(--soft);max-width:500px;margin:0 auto 30px;font-size:17.5px}

  /* proposal form */
  .prop-form{max-width:540px;margin:0 auto;text-align:left;display:flex;flex-direction:column;gap:12px}
  .prop-form .ff{display:flex;gap:12px}
  @media(max-width:560px){.prop-form .ff{flex-direction:column}}
  .prop-form input,.prop-form select,.prop-form textarea{
    width:100%;background:rgba(255,255,255,.04);border:1px solid var(--line-2);border-radius:10px;
    padding:14px 15px;color:#fff;font-family:'Inter';font-size:15px;outline:none;transition:.2s;resize:vertical}
  .prop-form input::placeholder,.prop-form textarea::placeholder{color:var(--mut)}
  .prop-form select{color:var(--mut-2);cursor:pointer}
  .prop-form select:valid{color:#fff}
  .prop-form input:focus,.prop-form select:focus,.prop-form textarea:focus{border-color:var(--amber);background:rgba(255,255,255,.06)}
  .prop-form input.err,.prop-form select.err{border-color:#ff6b6b}
  .prop-form button{margin-top:4px;font-size:16px;padding:16px}
  .form-msg{font-family:'JetBrains Mono';font-size:13px;text-align:center;min-height:18px;transition:.3s}
  .form-msg.ok{color:var(--green)}.form-msg.bad{color:#ff8a8a}
  .form-alt{text-align:center;font-size:13.5px;color:var(--mut);margin-top:4px}
  .form-alt a{color:var(--amber-soft)}
  .form-alt a:hover{text-decoration:underline}

  footer{border-top:1px solid var(--line);margin-top:90px;padding:54px 0 40px;text-align:left}
  .foot{display:flex;justify-content:space-between;gap:40px;flex-wrap:wrap}
  .foot .lf{max-width:300px}
  .foot .lf p{color:var(--mut);font-size:14px;margin-top:12px}
  .foot h5{font-family:'JetBrains Mono';font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--mut-2);margin-bottom:14px}
  .foot a,.foot span{display:block;color:var(--mut);font-size:14px;margin-bottom:9px}
  .foot a:hover{color:#fff}
  .copy{margin-top:42px;padding-top:22px;border-top:1px solid var(--line);font-family:'JetBrains Mono';font-size:12px;color:var(--mut);display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}

  .reveal{opacity:0;transform:translateY(28px);transition:.85s cubic-bezier(.16,.8,.2,1)}
  .reveal.in{opacity:1;transform:none}

  @media(max-width:900px){.nav-links,.nav-cta{display:none}.burger{display:flex}}
  @media(prefers-reduced-motion:reduce){*{animation:none!important;transition:opacity .4s!important}.reveal,.eyebrow,.lead,.cta-row,.chat-wrap,h1 .w{opacity:1!important;transform:none!important}}

  #produtos .prod-feat{display:grid;grid-template-columns:.82fr 1.18fr;text-align:left;background:var(--card);border:1px solid var(--line);border-radius:22px;overflow:hidden;transition:.3s;max-width:980px;margin:0 auto}
  #produtos .prod-feat:hover{transform:translateY(-4px);border-color:var(--line-2);box-shadow:0 40px 80px -40px rgba(0,0,0,.6)}
  #produtos .pf-media{background:linear-gradient(150deg,#FF8459,#EF512E);display:grid;place-items:center;padding:40px;min-height:240px}
  #produtos .prod-feat+.prod-feat{margin-top:16px}
  #produtos .prod-feat.iw .pf-media{background:linear-gradient(150deg,#1a1d24,#0f1115)}
  #produtos .prod-feat.iw .pf-tag{color:#f0a13e}
  #produtos .prod-feat.zel .pf-media{background:linear-gradient(150deg,#173a2c,#0e2018)}
  #produtos .prod-feat.zel .pf-tag{color:#34d39b}
  #produtos .pf-media img{width:128px;height:128px;border-radius:28px;box-shadow:0 24px 50px -18px rgba(0,0,0,.5)}
  #produtos .pf-body{padding:36px 38px}
  #produtos .pf-badge{display:inline-flex;align-items:center;gap:7px;font-family:'JetBrains Mono';font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--amber-soft);border:1px solid var(--line-2);border-radius:99px;padding:6px 12px;margin-bottom:15px}
  #produtos .pf-body h3{font-family:'Fraunces';font-weight:400;font-size:38px;letter-spacing:-.02em;margin-bottom:3px}
  #produtos .pf-tag{color:#FF8459;font-weight:600;font-size:16px;margin-bottom:12px}
  #produtos .pf-body p.d{color:var(--soft);max-width:48ch;margin-bottom:16px}
  #produtos .pf-feats{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px}
  #produtos .pf-feats span{font-size:12.5px;color:var(--mut-2);background:rgba(255,255,255,.04);border:1px solid var(--line);border-radius:99px;padding:6px 12px}
  #produtos .see{color:var(--amber);font-weight:600}
  #produtos .prod-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;max-width:980px;margin:16px auto 0}
  #produtos .pcard{text-align:left;background:var(--card);border:1px solid var(--line);border-radius:18px;padding:26px;transition:.25s}
  #produtos .pcard:hover{transform:translateY(-3px);border-color:var(--line-2)}
  #produtos .pcard .k{font-family:'JetBrains Mono';font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--mut);margin-bottom:10px}
  #produtos .pcard h4{font-family:'Fraunces';font-weight:400;font-size:24px;margin-bottom:8px}
  #produtos .pcard p{color:var(--soft);font-size:14.5px;margin-bottom:12px}
  @media(max-width:760px){#produtos .prod-feat{grid-template-columns:1fr}#produtos .prod-grid{grid-template-columns:1fr}}
</style>
</head>
<body>

<div class="amb"><span class="o o1"></span><span class="o o2"></span><span class="grid"></span></div>

<header id="hdr"><div class="wrap"><nav>
  <a href="#" class="brand" aria-label="Vespra — início">Vespra<span class="dot">.</span></a>
  <div class="nav-links"><a href="#demo">Vê funcionar</a><a href="#servicos">O que fazemos</a><a href="#produtos">Produtos</a><a href="#quem">Quem somos</a><a href="#contacto">Contacto</a></div>
  <a href="#contacto" class="nav-cta">Proposta gratuita</a>
  <div class="burger" id="burger" aria-label="Abrir menu" aria-expanded="false" aria-controls="mnav" role="button" tabindex="0"><span></span><span></span><span></span></div>
</nav></div>
  <div class="mnav" id="mnav">
    <a href="#demo">Vê funcionar</a>
    <a href="#servicos">O que fazemos</a>
    <a href="#produtos">Produtos</a>
    <a href="#quem">Quem somos</a>
    <a href="#contacto">Contacto</a>
    <a href="#contacto" class="mnav-cta">Proposta gratuita</a>
  </div>
</header>

<main>
  <section class="hero"><div class="wrap">
    <span class="eyebrow"><span class="live"></span> Inteligência artificial para PME</span>
    <h1 id="hl"></h1>
    <p class="lead">Não te falamos da nossa tecnologia. Mostramos-ta a funcionar — aqui mesmo, agora. Experimenta o nosso assistente.</p>
    <div class="cta-row">
      <a href="#demo" class="btn btn-p">Experimentar ao vivo ↓</a>
      <a href="#contacto" class="btn btn-g">Pedir proposta</a>
    </div>

    <div class="chat-wrap" id="demo">
      <div class="chat">
        <div class="chat-bar"><span class="d r"></span><span class="d y"></span><span class="d g"></span><span class="t">assistente vespra · demonstração</span><span class="st"><span class="live"></span> online</span></div>
        <div class="chat-body" id="chatBody"></div>
        <div class="chat-input">
          <input id="chatInput" type="text" placeholder="Escreve uma pergunta, como faria um cliente teu…" autocomplete="off">
          <button id="chatSend" aria-label="Enviar mensagem">→</button>
        </div>
      </div>
      <div class="chat-hint">
        Experimenta:
        <span class="chip">Fazem móveis por medida?</span>
        <span class="chip">Quanto custa um site?</span>
        <span class="chip">Quero marcar uma visita</span>
      </div>
    </div>
  </div></section>

  <!-- ANIMATED SCREENS -->
  <section class="sec"><div class="wrap">
    <div class="head reveal">
      <span class="kick">A nossa tecnologia, a trabalhar</span>
      <h2>Três coisas a acontecer <span class="em">ao mesmo tempo.</span></h2>
      <p>Enquanto tu tratas do que importa, os nossos sistemas tratam do resto. Em tempo real.</p>
    </div>
    <div class="screens reveal" id="screens">
      <div class="screen" data-screen="0">
        <div class="sh"><span class="dt"></span> agente · atendimento</div>
        <div class="sc" id="sc0"></div>
        <h3>Atende clientes sozinho</h3>
      </div>
      <div class="screen" data-screen="1">
        <div class="sh"><span class="dt"></span> motor · orçamentos</div>
        <div class="sc" id="sc1"></div>
        <h3>Gera orçamentos em segundos</h3>
      </div>
      <div class="screen" data-screen="2">
        <div class="sh"><span class="dt"></span> agenda · automática</div>
        <div class="sc" id="sc2"></div>
        <h3>Preenche a agenda por ti</h3>
      </div>
    </div>
  </div></section>

  <!-- METRICS -->
  <section class="sec" style="padding-top:0"><div class="wrap">
    <div class="metrics reveal" id="metrics">
      <div class="metric"><div class="big" data-to="24" data-suf="/7">0</div><div class="lb">o teu negócio sempre de portas abertas</div></div>
      <div class="metric"><div class="big" data-to="70" data-suf="%" data-pre="−">0</div><div class="lb">menos tempo em tarefas repetitivas</div></div>
      <div class="metric"><div class="big" data-to="0" data-suf="">0</div><div class="lb">clientes perdidos por falta de resposta</div></div>
    </div>
  </div></section>

  <!-- SERVICES -->
  <section class="sec" id="servicos" style="padding-top:0"><div class="wrap">
    <div class="head reveal">
      <span class="kick">O que fazemos</span>
      <h2>Um parceiro para tudo <span class="em">o que é digital.</span></h2>
    </div>
    <div class="svc reveal">
      <a class="card" data-svc="ia" href="#portfolio"><div class="ico"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3.5"/><path d="M12 2v3M12 19v3M2 12h3M19 12h3M5 5l2 2M17 17l2 2M19 5l-2 2M7 17l-2 2"/></svg></div><div><h3>Agentes &amp; IA</h3><p>Atendem, respondem e resolvem sozinhos, a qualquer hora do dia ou da noite.</p><span class="see">Ver exemplos →</span></div></a>
      <a class="card" data-svc="sites" href="#portfolio"><div class="ico"><svg viewBox="0 0 24 24"><rect x="3" y="4" width="18" height="14" rx="2"/><path d="M3 9h18M8 21h8"/></svg></div><div><h3>Sites que vendem</h3><p>Rápidos, bonitos e feitos para transformar visitas em clientes.</p><span class="see">Ver exemplos →</span></div></a>
      <a class="card" data-svc="marca" href="#portfolio"><div class="ico"><svg viewBox="0 0 24 24"><path d="M12 19l7-7 3 3-7 7-3-3zM18 13l-1.5-7.5L2 2l3.5 14.5L13 18M2 2l7.5 7.5"/></svg></div><div><h3>Marca &amp; design</h3><p>Credibilidade ao primeiro olhar. Pareces sério porque és sério.</p><span class="see">Ver exemplos →</span></div></a>
      <a class="card" data-svc="auto" href="#portfolio"><div class="ico"><svg viewBox="0 0 24 24"><path d="M3 3v18h18M7 14l4-4 3 3 5-6"/></svg></div><div><h3>Automação</h3><p>Emails, agendamentos e lembretes — no piloto automático.</p><span class="see">Ver exemplos →</span></div></a>
    </div>
  </div></section>

  <!-- PRODUTOS -->
  <section class="sec" id="produtos" style="padding-top:0"><div class="wrap">
    <div class="head reveal">
      <span class="kick">Produtos Vespra</span>
      <h2>Software nosso, feito para <span class="em">o teu negócio.</span></h2>
    </div>
    <a class="prod-feat reveal" href="quando/index.html" aria-label="Conhecer o Quando">
      <div class="pf-media"><img src="quando/quando-app-icon.png" alt="Quando"></div>
      <div class="pf-body">
        <span class="pf-badge"><span class="live"></span> Novo · Agenda &amp; reservas</span>
        <h3>Quando</h3>
        <div class="pf-tag">Marca quando quiseres.</div>
        <p class="d">Agenda que funciona offline e reservas online — o cliente vê a disponibilidade e marca, mas nada entra sem o “sim” do estabelecimento. Para restaurantes, clínicas, cabeleireiros e qualquer negócio de marcações.</p>
        <div class="pf-feats"><span>Funciona offline</span><span>Aprovação do estabelecimento</span><span>Lembretes automáticos</span><span>Link de reservas</span></div>
        <span class="see">Ver o Quando →</span>
      </div>
    </a>
    <a class="prod-feat iw reveal" href="inside-work/index.html" aria-label="Conhecer o Inside Work">
      <div class="pf-media"><img src="inside-work/icon.svg" alt="Inside Work"></div>
      <div class="pf-body">
        <span class="pf-badge">🛠️ Gestão de equipa</span>
        <h3>Inside Work</h3>
        <div class="pf-tag">O ponto da tua equipa, no bolso.</div>
        <p class="d">Registo de ponto com localização, pelo telemóvel. Sem relógio de cartão e sem loja de apps — vês tudo num painel e exportas para Excel. Conforme o RGPD.</p>
        <div class="pf-feats"><span>Localização na picagem</span><span>Sem loja de apps</span><span>Exporta para Excel</span><span>Conforme o RGPD</span></div>
        <span class="see">Ver o Inside Work →</span>
      </div>
    </a>
    <a class="prod-feat iw reveal" href="liame/index.html" aria-label="Conhecer o Liame">
      <div class="pf-media"><img src="liame/liame-icon.svg" alt="Liame"></div>
      <div class="pf-body">
        <span class="pf-badge">🔗 CRM modular</span>
        <h3>Liame</h3>
        <div class="pf-tag">O teu negócio inteiro, num só lugar.</div>
        <p class="d">CRM modular para gerir tudo — clientes, vendas, stocks, frota, imóveis, despesas e bancos. Ligas só os módulos que precisas, à medida do teu setor, com leitura por IA.</p>
        <div class="pf-feats"><span>Clientes &amp; vendas</span><span>Stocks &amp; frota</span><span>Módulos à medida</span><span>Leitura por IA</span></div>
        <span class="see">Ver o Liame →</span>
      </div>
    </a>
    <a class="prod-feat zel reveal" href="zelador/index.html" aria-label="Conhecer o Zelador">
      <div class="pf-media"><img src="zelador/zelador-app-icon.png" alt="Zelador"></div>
      <div class="pf-body">
        <span class="pf-badge">📍 Espaço público</span>
        <h3>Zelador</h3>
        <div class="pf-tag">O zelador da tua terra.</div>
        <p class="d">O cidadão reporta problemas na rua (foto + localização + morada) e a junta ou câmara recebe num mapa, gere e responde. Para juntas de freguesia e câmaras municipais.</p>
        <div class="pf-feats"><span>App do cidadão</span><span>Painel da entidade</span><span>Mapa + morada</span><span>Marca da entidade</span></div>
        <span class="see">Ver o Zelador →</span>
      </div>
    </a>
    <div class="prod-grid reveal" style="grid-template-columns:1fr">
      <div class="pcard"><div class="k">Em desenvolvimento</div><h4>Mais a caminho</h4><p>Estamos sempre a criar. Tens uma ideia de software para o teu setor? Falamos e construímos contigo.</p><a href="#contacto" class="see">Propor ideia →</a></div>
    </div>
  </div></section>

  <!-- PORTFOLIO -->
  <section class="sec" id="portfolio" style="padding-top:0"><div class="wrap">
    <div class="head reveal">
      <span class="kick">Exemplos do nosso trabalho</span>
      <h2>Vê o que <span class="em">conseguimos fazer.</span></h2>
      <p>Escolhe uma área e vê exemplos do tipo de trabalho que entregamos.</p>
    </div>
    <div class="pf-tabs reveal">
      <button class="pf-tab active" data-f="all">Tudo</button>
      <button class="pf-tab" data-f="sites">Sites que vendem</button>
      <button class="pf-tab" data-f="ia">Agentes &amp; IA</button>
      <button class="pf-tab" data-f="marca">Marca &amp; design</button>
      <button class="pf-tab" data-f="auto">Automação</button>
    </div>
    <div class="pf-grid reveal" id="pfGrid">

      <!-- SITES -->
      <div class="work" data-cat="sites">
        <div class="frame"><span class="demo-badge">Exemplo demonstrativo</span>
          <div class="mk"><div class="mk-browser">
            <div class="mk-bar"><i></i><i></i><i></i></div>
            <div class="mk-site"><div class="mk-hero"></div><div class="mk-row"><span></span><span></span><span></span></div><div class="mk-line"></div><div class="mk-line s"></div></div>
          </div></div>
        </div>
        <div class="info"><div class="cat">Site · Restauração</div><h4>Restaurante com reservas online</h4><p>Site rápido com menu, galeria e reservas integradas. Pensado para encher mesas, não só para estar bonito.</p></div>
      </div>

      <div class="work" data-cat="sites">
        <div class="frame"><span class="demo-badge">Exemplo demonstrativo</span>
          <div class="mk"><div class="mk-browser">
            <div class="mk-bar"><i></i><i></i><i></i></div>
            <div class="mk-site"><div class="mk-hero" style="background:linear-gradient(110deg,#14241f,#1f4944)"></div><div class="mk-row"><span></span><span></span></div><div class="mk-line"></div><div class="mk-line s"></div></div>
          </div></div>
        </div>
        <div class="info"><div class="cat">Loja · Comércio</div><h4>Loja online de produtos locais</h4><p>Catálogo e checkout simples, com gestão fácil. O cliente compra em três toques.</p></div>
      </div>

      <!-- IA -->
      <div class="work" data-cat="ia">
        <div class="frame"><span class="demo-badge">Exemplo demonstrativo</span>
          <div class="mk-chat">
            <div class="mk-msg u">Ainda têm mesa para hoje às 20h?</div>
            <div class="mk-msg b">Temos sim! Mesa para quantas pessoas? Reservo já. 🍽️</div>
            <div class="mk-msg u">Para 4. Obrigado!</div>
          </div>
        </div>
        <div class="info"><div class="cat">Agente · WhatsApp</div><h4>Assistente que reserva sozinho</h4><p>Responde a clientes no WhatsApp, tira dúvidas e marca reservas — 24 horas por dia.</p></div>
      </div>

      <div class="work" data-cat="ia">
        <div class="frame"><span class="demo-badge">Exemplo demonstrativo</span>
          <div class="mk-chat">
            <div class="mk-msg u">Quanto fica um roupeiro por medida?</div>
            <div class="mk-msg b">Depende das medidas. Diga-me a largura e altura e preparo já uma estimativa. 📐</div>
            <div class="mk-msg u">2,40m x 2,60m</div>
          </div>
        </div>
        <div class="info"><div class="cat">Agente · Orçamentos</div><h4>Orçamentos automáticos</h4><p>O cliente pede, o agente recolhe os dados e prepara a estimativa para revisão imediata.</p></div>
      </div>

      <!-- MARCA -->
      <div class="work" data-cat="marca">
        <div class="frame"><span class="demo-badge">Exemplo demonstrativo</span>
          <div class="mk-brand">
            <div class="logo-lg">Atelier<span class="dot">.</span></div>
            <div class="swatches"><i class="pal1"></i><i class="pal2"></i><i class="pal3"></i><i class="pal4"></i></div>
            <div class="tagline">Logótipo · Paleta · Identidade</div>
          </div>
        </div>
        <div class="info"><div class="cat">Marca · Identidade</div><h4>Identidade visual completa</h4><p>Nome, logótipo, cores e tipografia. Tudo o que faz uma empresa parecer — e ser — profissional.</p></div>
      </div>

      <div class="work" data-cat="marca">
        <div class="frame"><span class="demo-badge">Exemplo demonstrativo</span>
          <div class="mk-brand" style="background:radial-gradient(circle at 50% 40%,#241a1a,#0d0e13)">
            <div class="logo-lg">Oficina<span class="dot">.</span></div>
            <div class="swatches"><i style="background:#e85d2c;width:30px;height:30px;border-radius:7px"></i><i style="background:#1a1d24;width:30px;height:30px;border-radius:7px;border:1px solid rgba(255,255,255,.15)"></i><i style="background:#f4f3ef;width:30px;height:30px;border-radius:7px"></i></div>
            <div class="tagline">Cartão · Flyer · Redes sociais</div>
          </div>
        </div>
        <div class="info"><div class="cat">Marca · Kit gráfico</div><h4>Kit de divulgação</h4><p>Cartões, flyers e posts coerentes, prontos a usar no terreno e nas redes.</p></div>
      </div>

      <!-- AUTOMAÇÃO -->
      <div class="work" data-cat="auto">
        <div class="frame"><span class="demo-badge">Exemplo demonstrativo</span>
          <div class="mk-flow">
            <div class="mk-node">📩</div><div class="mk-pipe"></div><div class="mk-node">🤖</div><div class="mk-pipe"></div><div class="mk-node">📅</div>
          </div>
        </div>
        <div class="info"><div class="cat">Automação · Fluxo</div><h4>Do pedido à agenda, sozinho</h4><p>Chega um pedido, o sistema trata e marca na agenda. Sem ninguém a copiar dados à mão.</p></div>
      </div>

      <div class="work" data-cat="auto">
        <div class="frame"><span class="demo-badge">Exemplo demonstrativo</span>
          <div class="mk-flow">
            <div class="mk-node">🧾</div><div class="mk-pipe"></div><div class="mk-node">⚙️</div><div class="mk-pipe"></div><div class="mk-node">✅</div>
          </div>
        </div>
        <div class="info"><div class="cat">Automação · Faturação</div><h4>Lembretes e faturas no automático</h4><p>Faturas emitidas e lembretes enviados na hora certa, sem te lembrares de nada.</p></div>
      </div>

    </div>
    <p class="mono reveal" style="color:var(--mut);font-size:12px;margin-top:26px">Exemplos demonstrativos para ilustrar capacidades. Substituímos por trabalhos reais à medida que avançam.</p>
  </div></section>

  <!-- CASES -->
  <section class="sec" id="casos" style="padding-top:0"><div class="wrap">
    <div class="head reveal"><span class="kick">O que já mudámos</span><h2>Resultados que se sentem <span class="em">no dia a dia.</span></h2></div>
    <div class="svc reveal" style="grid-template-columns:repeat(3,1fr);max-width:920px">
      <div class="card" style="flex-direction:column"><h3 class="serif" style="color:var(--amber);font-size:40px">+40%</h3><div><b style="font-size:13px;color:var(--amber-soft);font-family:'JetBrains Mono';text-transform:uppercase;letter-spacing:.06em">Padaria</b><p style="margin-top:8px">Encomendas recebidas e confirmadas por mensagem, dia e noite.</p></div></div>
      <div class="card" style="flex-direction:column"><h3 class="serif" style="color:var(--amber);font-size:40px">−6h</h3><div><b style="font-size:13px;color:var(--amber-soft);font-family:'JetBrains Mono';text-transform:uppercase;letter-spacing:.06em">Oficina</b><p style="margin-top:8px">Por semana, recuperadas com marcações automáticas online.</p></div></div>
      <div class="card" style="flex-direction:column"><h3 class="serif" style="color:var(--amber);font-size:40px">5×</h3><div><b style="font-size:13px;color:var(--amber-soft);font-family:'JetBrains Mono';text-transform:uppercase;letter-spacing:.06em">Atelier</b><p style="margin-top:8px">Mais rápido a responder a pedidos de orçamento.</p></div></div>
    </div>
    <p class="mono reveal" style="color:var(--mut);font-size:12px;margin-top:24px">Exemplos do tipo de transformação que entregamos. Números à medida do teu caso na proposta.</p>
  </div></section>

  <!-- WHO -->
  <section class="sec" id="quem" style="padding-top:40px"><div class="wrap">
    <div class="head reveal">
      <span class="kick">Quem somos</span>
      <h2>Dois mundos que, juntos, <span class="em">mudam o teu.</span></h2>
    </div>

    <div class="who reveal">
      <div class="q">Vimos de onde se <span class="em">trabalha a sério</span> — do terreno, das mãos, da pressão de fazer o dia chegar. E vimos também de onde se estudam <span class="em">as pessoas</span> — como pensam, como decidem, como se lidera.</div>
    </div>

    <div class="worlds reveal">
      <div class="world">
        <div class="wn">01 — O terreno</div>
        <h3>Quem constrói</h3>
        <p>A experiência de quem gere obra, lida com clientes reais e sabe que uma promessa só vale se for cumprida. É daqui que vem a nossa exigência: entregar coisas que funcionam mesmo.</p>
      </div>
      <div class="world-plus">+</div>
      <div class="world">
        <div class="wn">02 — As pessoas</div>
        <h3>Quem entende</h3>
        <p>A formação de quem estuda comportamento, liderança e gestão. É daqui que vem a nossa forma de comunicar: falar a língua do cliente e perceber o que ele precisa antes de ele dizer.</p>
      </div>
    </div>

    <div class="mission reveal">
      <span class="kick" style="display:block">A nossa missão</span>
      <p class="mtext">Criámos a Vespra porque vimos demasiados bons negócios a ficar para trás — não por falta de qualidade, mas por falta de <span class="em">tempo, ferramentas e presença digital</span>. As grandes empresas têm equipas e tecnologia para tudo. As pequenas, que são a alma do país, ficam a apagar fogos.</p>
      <p class="mtext">A nossa missão é simples: <span class="em">pôr a tecnologia das grandes ao alcance das pequenas.</span> Para que um negócio de bairro possa competir, crescer e ser levado a sério — sem perder o que o torna especial.</p>
    </div>
  </div></section>

  <!-- PRICE -->
  <section class="sec" style="padding-top:0"><div class="wrap"><div class="price reveal">
    <span class="kick" style="display:inline-block">Sem surpresas</span>
    <h2 style="font-size:clamp(26px,4vw,38px);margin-bottom:10px">Preço fechado, antes de começar.</h2>
    <div class="from">Projetos a partir de</div>
    <div class="amt serif">189,90<small>€</small></div>
    <div class="from" style="color:var(--amber-soft);margin-top:-2px">+ IVA</div>
    <p>Combinamos o âmbito, fechamos o valor, e é esse que pagas. A tecnologia das grandes, ao alcance de quem é pequeno.</p>
  </div></div></section>

  <!-- CTA + FORM -->
  <section class="sec" id="contacto" style="padding-top:0"><div class="wrap"><div class="cta-band reveal">
    <span class="kick" style="display:inline-block">Vamos conversar</span>
    <h2>Pronto para ver a IA a <span class="em">trabalhar por ti?</span></h2>
    <p>Preenche e, em 24 horas, recebes uma proposta gratuita com preço fechado e sem compromisso.</p>

    <form id="propForm" class="prop-form" novalidate>
      <div class="ff">
        <input type="text" name="nome" id="f_nome" placeholder="O teu nome" aria-label="O teu nome" required>
        <input type="text" name="empresa" id="f_empresa" placeholder="Nome da empresa (opcional)" aria-label="Nome da empresa (opcional)">
      </div>
      <div class="ff">
        <input type="tel" name="telefone" id="f_tel" placeholder="Telefone / WhatsApp" aria-label="Telefone ou WhatsApp" required>
        <input type="email" name="email" id="f_email" placeholder="Email" aria-label="Email" required>
      </div>
      <select name="servico" id="f_servico" aria-label="O que precisas?" required>
        <option value="" disabled selected>O que precisas?</option>
        <option>Atendimento com IA / agente</option>
        <option>Site que vende</option>
        <option>Marca &amp; design</option>
        <option>Automação de tarefas</option>
        <option>Ainda não sei — quero ajuda a decidir</option>
      </select>
      <textarea name="mensagem" id="f_msg" rows="3" placeholder="Conta-nos um pouco do teu dia ou do que precisas (opcional)" aria-label="Mensagem (opcional)"></textarea>
      <button type="submit" class="btn btn-p" id="f_send" style="width:100%;justify-content:center">Pedir proposta gratuita</button>
      <div class="form-msg" id="formMsg"></div>
      <div class="form-alt">Preferes falar direto? <a href="https://wa.me/351000000000" id="waLink">WhatsApp</a> · <a href="mailto:ola@vespra.pt">[ola@vespra.pt]</a></div>
    </form>
  </div></div></section>
</main>

<footer><div class="wrap">
  <div class="foot">
    <div class="lf"><a href="#" class="brand">Vespra<span class="dot" style="color:var(--amber)">.</span></a><p>Inteligência que trabalha por ti. A tecnologia das grandes empresas, ao alcance das pequenas e médias.</p></div>
    <div><h5>O que fazemos</h5><a href="#servicos">Agentes &amp; IA</a><a href="#servicos">Sites que vendem</a><a href="#servicos">Marca &amp; design</a><a href="#servicos">Automação</a></div>
    <div><h5>Contacto</h5><a href="mailto:ola@vespra.pt">[ola@vespra.pt]</a><span>[+351 000 000 000]</span><span>Ramada · Portugal</span><span>Cunhopositivo Unipessoal, Lda</span></div>
  </div>
  <div class="copy"><span>© 2026 Vespra</span><span>Inteligência que trabalha por ti</span></div>
</div></footer>

<script>
const reduce=matchMedia('(prefers-reduced-motion:reduce)').matches;
const hdr=document.getElementById('hdr');
addEventListener('scroll',()=>hdr.classList.toggle('scrolled',scrollY>20),{passive:true});

/* ============ mobile menu ============ */
(function(){
  const burger=document.getElementById('burger');
  if(!burger)return;
  function toggle(force){
    const open=force!==undefined?force:!hdr.classList.contains('open');
    hdr.classList.toggle('open',open);
    burger.classList.toggle('x',open);
    burger.setAttribute('aria-expanded',open);
    burger.setAttribute('aria-label',open?'Fechar menu':'Abrir menu');
  }
  burger.addEventListener('click',()=>toggle());
  burger.addEventListener('keydown',e=>{if(e.key==='Enter'||e.key===' '){e.preventDefault();toggle();}});
  document.querySelectorAll('#mnav a').forEach(a=>a.addEventListener('click',()=>toggle(false)));
})();

/* headline build */
(function(){
  const el=document.getElementById('hl');
  const parts=[{t:'A inteligência que '},{t:'trabalha',em:1},{t:' por ti.'}];
  let d=0.3;
  parts.forEach(p=>{p.t.split(/(\s+)/).forEach(wd=>{
    if(!wd.trim()){el.appendChild(document.createTextNode(wd));return;}
    const s=document.createElement('span');s.className='w'+(p.em?' em':'');s.textContent=wd;s.style.animationDelay=d+'s';d+=0.07;el.appendChild(s);
  });});
})();

/* reveal */
const io=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting)e.target.classList.add('in')}),{threshold:.14});
document.querySelectorAll('.reveal').forEach(el=>io.observe(el));

/* ============ LIVE CHAT (real API + smart fallback) ============ */
const chatBody=document.getElementById('chatBody');
const chatInput=document.getElementById('chatInput');
const chatSend=document.getElementById('chatSend');
let history=[];
let greeted=false;

function bubble(text,who){
  const m=document.createElement('div');m.className='msg '+who;m.innerHTML=text;chatBody.appendChild(m);chatBody.scrollTop=chatBody.scrollHeight;return m;
}
function typing(){const t=document.createElement('div');t.className='typing';t.innerHTML='<span></span><span></span><span></span>';chatBody.appendChild(t);chatBody.scrollTop=chatBody.scrollHeight;return t;}

function greet(){
  if(greeted)return;greeted=true;
  setTimeout(()=>bubble('Olá! 👋 Sou o assistente da Vespra. Faço de conta que sou o atendimento do <b>teu</b> negócio. Pergunta-me algo, como faria um cliente teu.','bot'),400);
}
// greet when chat scrolls into view
new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting)greet();}),{threshold:.4}).observe(document.getElementById('demo'));

/* smart offline fallback — keyword guided, feels real in the room */
function smartReply(q){
  const t=q.toLowerCase();
  if(/(ola|olá|bom dia|boa tarde|boa noite|ola!)/.test(t)&&t.length<14) return 'Olá! Em que posso ajudar? Posso dar informações, preparar um orçamento ou marcar uma visita. ✦';
  if(/(movel|móvel|moveis|móveis|cozinha|roupeiro|madeira|medida|carpint)/.test(t)) return 'Sim, fazemos trabalhos por medida! 🪚 Para lhe preparar um orçamento certo, diga-me: que peça pretende (cozinha, roupeiro, outro) e tem já as medidas do espaço? Posso também agendar uma visita para medição gratuita.';
  if(/(site|website|página|pagina|loja online|web)/.test(t)) return 'Fazemos sites à medida, rápidos e pensados para vender. Os projetos começam em <b>189,90€ + IVA</b>, com preço fechado à partida. Quer que prepare uma proposta para o seu caso?';
  if(/(preço|preco|custa|custo|valor|quanto|orçament|orcament)/.test(t)) return 'Trabalhamos sempre com <b>preço fechado</b>, definido antes de começar — sem surpresas. Depende do que precisa, mas os projetos começam em 189,90€ + IVA. Diga-me o que tem em mente e dou-lhe um valor.';
  if(/(visita|marcar|agendar|reunião|reuniao|agenda|horário|horario)/.test(t)) return 'Com certeza! 📅 Tenho disponibilidade <b>quinta às 10:00</b> ou <b>sexta às 15:00</b>. Qual lhe dá mais jeito? Deixe-me também o seu contacto e confirmo tudo.';
  if(/(horas|aberto|funciona|atend)/.test(t)) return 'Eu estou disponível 24 horas por dia — é essa a ideia. Mesmo quando o estabelecimento está fechado, ninguém fica sem resposta. ✦';
  if(/(obrigad|valeu|fixe|boa|perfeito)/.test(t)) return 'De nada! Sempre às ordens. Se quiser, posso já preparar uma proposta ou marcar uma visita. 😊';
  return 'Boa pergunta! Num caso real, eu estaria ligado ao negócio e responderia com a informação exata. Posso ajudar com: informações de serviços, orçamentos ou marcação de visitas. O que prefere?';
}

// === CONFIGURAÇÃO DO CHAT ===
// Em demonstração, o assistente responde localmente (smartReply).
// Quando tiverem um backend seguro (proxy que guarda a chave de API no servidor),
// colem aqui o URL desse endpoint. NUNCA pôr a chave de API neste ficheiro.
const CHAT_ENDPOINT = ""; // ex: "https://api.vespra.pt/chat"

function finish(t,ans,q){
  t.remove();bubble(ans,'bot');
  history.push({role:'user',content:q});history.push({role:'assistant',content:ans});
}
async function reply(q){
  const t=typing();
  if(CHAT_ENDPOINT){
    try{
      const r=await fetch(CHAT_ENDPOINT,{
        method:'POST',headers:{'Content-Type':'application/json'},
        body:JSON.stringify({messages:[...history,{role:'user',content:q}]})
      });
      if(!r.ok) throw new Error('endpoint');
      const data=await r.json();
      const txt=(data.reply||data.text||'').trim();
      finish(t,txt||smartReply(q),q);
      return;
    }catch(e){ /* cai para o modo demonstração */ }
  }
  setTimeout(()=>finish(t,smartReply(q),q),650+Math.random()*450);
}

function send(q){
  q=(q||chatInput.value).trim();if(!q)return;
  bubble(q,'user');chatInput.value='';reply(q);
}
chatSend.addEventListener('click',()=>send());
chatInput.addEventListener('keydown',e=>{if(e.key==='Enter')send();});
document.querySelectorAll('.chip').forEach(c=>c.addEventListener('click',()=>send(c.textContent)));

/* ============ animated screens ============ */
const screenData=[
  [['cliente','Boa noite, fazem orçamentos?','m'],['agente','A responder…','a'],['agente','Resposta enviada ✓','ok'],['agente','Dúvida resolvida ✓','ok'],['agente','Cliente satisfeito ✓','ok']],
  [['pedido','Cozinha 3m, lacado','m'],['motor','A calcular materiais…','a'],['motor','Mão de obra estimada ✓','ok'],['motor','PROGRESS','p'],['motor','Orçamento pronto ✓','ok']],
  [['pedido','Marcar visita','m'],['agenda','A consultar agenda…','a'],['agenda','Quinta 10:00 livre ✓','ok'],['agenda','Visita agendada ✓','ok'],['agenda','Lembrete enviado ✓','ok']]
];
function runScreen(idx){
  const el=document.getElementById('sc'+idx);el.innerHTML='';
  screenData[idx].forEach((row,i)=>{
    setTimeout(()=>{
      if(row[2]==='p'){const pb=document.createElement('div');pb.className='pbar';pb.innerHTML='<i></i>';el.appendChild(pb);requestAnimationFrame(()=>pb.classList.add('run'));el.scrollTop=el.scrollHeight;return;}
      const d=document.createElement('div');d.className='sl '+(row[2]==='a'?'':'');
      d.innerHTML='<span class="'+(row[2]==='ok'?'ok':row[2]==='a'?'a':'m')+'">'+(row[2]==='ok'?'→':row[2]==='a'?'⋯':'•')+'</span><span class="m">'+row[1]+'</span>';
      el.appendChild(d);requestAnimationFrame(()=>d.classList.add('on'));el.scrollTop=el.scrollHeight;
    },i*620);
  });
}
let screensRun=false;
new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting&&!screensRun){screensRun=true;
  [0,1,2].forEach(i=>runScreen(i));
  if(!reduce)setInterval(()=>[0,1,2].forEach(i=>runScreen(i)),5200);
}}),{threshold:.3}).observe(document.getElementById('screens'));

/* ============ count up metrics ============ */
let metricsRun=false;
new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting&&!metricsRun){metricsRun=true;
  document.querySelectorAll('#metrics .big').forEach(el=>{
    const to=+el.dataset.to,suf=el.dataset.suf||'',pre=el.dataset.pre||'';let n=0;
    const step=Math.max(1,Math.round(to/40));
    if(reduce){el.textContent=pre+to+suf;return;}
    const iv=setInterval(()=>{n+=step;if(n>=to){n=to;clearInterval(iv);}el.textContent=pre+n+suf;},28);
  });
}}),{threshold:.5}).observe(document.getElementById('metrics'));
/* ============ portfolio filter ============ */
(function(){
  const tabs=document.querySelectorAll('.pf-tab');
  const works=document.querySelectorAll('.work');
  function filter(f){
    tabs.forEach(t=>t.classList.toggle('active',t.dataset.f===f));
    works.forEach(w=>{
      const show = f==='all' || w.dataset.cat===f;
      w.classList.toggle('hide',!show);
    });
  }
  tabs.forEach(t=>t.addEventListener('click',()=>filter(t.dataset.f)));
  document.querySelectorAll('a.card[data-svc]').forEach(c=>{
    c.addEventListener('click',e=>{
      const map={ia:'ia',sites:'sites',marca:'marca',auto:'auto'};
      const f=map[c.dataset.svc]||'all';
      filter(f);
    });
  });
})();
/* ============ proposal form ============ */
(function(){
  const form=document.getElementById('propForm');
  if(!form)return;
  const msg=document.getElementById('formMsg');

  const FORMSPREE_ID = "";
  const WHATSAPP_NUM = "351000000000";

  function val(id){return (document.getElementById(id).value||'').trim();}
  function fail(el){el.classList.add('err');setTimeout(()=>el.classList.remove('err'),2000);}

  form.addEventListener('submit',async e=>{
    e.preventDefault();
    const nome=val('f_nome'),tel=val('f_tel'),email=val('f_email'),serv=val('f_servico');
    let ok=true;
    if(!nome){fail(document.getElementById('f_nome'));ok=false;}
    if(!tel){fail(document.getElementById('f_tel'));ok=false;}
    if(!email||!/^[^@]+@[^@]+\.[^@]+$/.test(email)){fail(document.getElementById('f_email'));ok=false;}
    if(!serv){fail(document.getElementById('f_servico'));ok=false;}
    if(!ok){msg.className='form-msg bad';msg.textContent='Preenche os campos destacados, por favor.';return;}

    const empresa=val('f_empresa'),mensagem=val('f_msg');
    const btn=document.getElementById('f_send');
    btn.disabled=true;btn.textContent='A enviar…';

    if(FORMSPREE_ID){
      try{
        const r=await fetch('https://formspree.io/f/'+FORMSPREE_ID,{
          method:'POST',headers:{'Accept':'application/json'},
          body:new FormData(form)
        });
        if(r.ok){done();return;}
        throw new Error('formspree');
      }catch(_){ }
    }

    const txt=`Olá Vespra! Quero uma proposta.%0A%0ANome: ${encodeURIComponent(nome)}%0AEmpresa: ${encodeURIComponent(empresa||'-')}%0ATelefone: ${encodeURIComponent(tel)}%0AEmail: ${encodeURIComponent(email)}%0AServiço: ${encodeURIComponent(serv)}%0AMensagem: ${encodeURIComponent(mensagem||'-')}`;
    window.open('https://wa.me/'+WHATSAPP_NUM+'?text='+txt,'_blank');
    done();

    function done(){
      form.reset();
      btn.disabled=false;btn.textContent='Pedir proposta gratuita';
      msg.className='form-msg ok';
      msg.textContent='✓ Pedido pronto! Vamos responder em 24 horas.';
      setTimeout(()=>{msg.textContent='';msg.className='form-msg';},6000);
    }
  });
})();
</script>
</body>
</html>
