{"id":895,"date":"2024-03-10T20:35:56","date_gmt":"2024-03-10T20:35:56","guid":{"rendered":"https:\/\/es.theweddingcarhirepeople.com\/?page_id=895"},"modified":"2025-12-30T11:59:43","modified_gmt":"2025-12-30T11:59:43","slug":"preguntas-frecuentes","status":"publish","type":"page","link":"https:\/\/es.theweddingcarhirepeople.com\/es\/preguntas-frecuentes\/","title":{"rendered":"Preguntas frecuentes de los clientes"},"content":{"rendered":"\n<!-- TWCHP \u2013 Inline FAQ (flagship visual, semantic headings, no dark mode) -->\n<section id=\"twfaq\" class=\"twfaq-wrap twfaq-scope\"\n  style=\"--cta1:#d2b744;--cta2:#34465a;\"\n  data-src=\"https:\/\/theweddingcarhirepeople.com\/data\/faqs\/faq-proxy.php?key=01204707167&#038;country=global&#038;v=2025-09-21\"\n  data-cats=\"bookings|payments|cancellations|changes|vehicles|on-the-day|documents|general\">\n\n  <header class=\"twfaq-head\">\n    <div>\n      <h1 class=\"twfaq-title\">Customer FAQs<\/h1>\n      <p class=\"twfaq-sub\">Answers to common booking, payment, and itinerary questions.<\/p>\n    <\/div>\n    <div class=\"twfaq-search\">\n      <input id=\"twfaq-input\" class=\"twfaq-input\" type=\"search\" placeholder=\"Search FAQs\u2026\" inputmode=\"search\" autocomplete=\"off\" aria-label=\"Search FAQs\">\n      <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M21 21l-4.3-4.3M10.5 18a7.5 7.5 0 1 1 0-15a7.5 7.5 0 0 1 0 15Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/><\/svg>\n    <\/div>\n    <span class=\"twfaq-count\" aria-live=\"polite\"><\/span>\n  <\/header>\n\n  <nav class=\"twfaq-top\" aria-label=\"FAQ categories\"><\/nav>\n  <div class=\"twfaq-list\"><\/div>\n\n  <div class=\"twfaq-empty\" style=\"display:none;\">\n    <strong>No results.<\/strong> Try a different term, or\n    <a class=\"twfaq-cta\" href=\"\/en\/contact-us\/\">\n      <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M21 8v8a2 2 0 0 1-2 2H9l-6 4V6a2 2 0 0 1 2-2h10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/><\/svg>\n      contact support\n    <\/a>.\n  <\/div>\n<\/section>\n\n<style>\n  .entry-title{display:none}\n\n  \/* ===== TWCHP FAQ \u2014 flagship look (no dark mode) ===== *\/\n  #twfaq.twfaq-scope{\n    --cta1:#d2b744;  \/* gold *\/\n    --cta2:#34465a;  \/* navy *\/\n    --ink:#0f0f13;\n    --muted:#5b5f6a;\n    --line:#ececf2;\n    --card:#ffffff;\n    --shadow:0 10px 26px rgba(17,17,17,.06);\n    --shadow-lg:0 18px 38px rgba(17,17,17,.10);\n    --radius:18px;\n    --pill:999px;\n    color:var(--ink);\n    background:#fff;\n  }\n  #twfaq.twfaq-scope.twfaq-wrap{\n    max-width:1100px !important;\n    margin:2.5rem auto !important;\n    padding:0 1.25rem !important;\n  }\n\n  \/* Header *\/\n  #twfaq .twfaq-head{\n    display:flex; flex-wrap:wrap; gap:1rem;\n    align-items:center; justify-content:space-between;\n    margin:0 0 1.25rem !important; background:#fff !important;\n  }\n  @media (min-width:980px){\n    #twfaq .twfaq-head{position:sticky; top:12px; z-index:3; backdrop-filter:saturate(1.05) blur(4px)}\n  }\n  #twfaq .twfaq-title{\n    margin:0 !important; font-weight:900; letter-spacing:-.015em;\n    font-size:clamp(2.1rem,4vw,3rem) !important; line-height:1.08;\n  }\n  #twfaq .twfaq-title::after{\n    content:\"\"; display:block; width:56px; height:4px; margin-top:.45rem;\n    background:var(--cta1); border-radius:var(--pill);\n  }\n  #twfaq .twfaq-sub{margin:.4rem 0 0; color:var(--muted); font-size:1.05rem}\n\n  \/* Search pill *\/\n  #twfaq .twfaq-search{position:relative; flex:1; min-width:320px}\n  #twfaq .twfaq-input{\n    width:100%; background:#fff !important; color:var(--ink) !important;\n    border:1px solid var(--line) !important; border-radius:var(--pill) !important;\n    padding:.95rem 3.1rem .95rem 1.15rem !important; font-size:1.05rem !important;\n    box-shadow:var(--shadow) !important;\n  }\n  #twfaq .twfaq-input:focus{outline:none; border-color:var(--cta1) !important; box-shadow:0 0 0 .24rem rgba(210,183,68,.35) !important}\n  #twfaq .twfaq-input::placeholder{color:#9aa3ad}\n  #twfaq .twfaq-search svg{position:absolute; right:1rem; top:50%; transform:translateY(-50%); opacity:.9}\n\n  \/* Count pill *\/\n  #twfaq .twfaq-count{\n    margin-left:.6rem; font-weight:800; color:#1c2530; background:#fff;\n    border:1px solid var(--line); border-radius:var(--pill);\n    padding:.55rem .9rem; font-size:.92rem; box-shadow:var(--shadow);\n  }\n\n  \/* Category chips *\/\n  #twfaq .twfaq-top{display:flex; flex-wrap:wrap; gap:.6rem; margin:1rem 0 1.2rem}\n  #twfaq .twfaq-chip{\n    display:inline-flex; align-items:center; gap:.45rem;\n    background:#fff; border:1px solid var(--line) !important;\n    border-radius:var(--pill); padding:.6rem 1rem;\n    font-weight:800; font-size:.95rem; color:#1c2530 !important;\n    box-shadow:var(--shadow); cursor:pointer;\n    transition:transform .14s ease, box-shadow .14s ease, border-color .14s ease;\n  }\n  #twfaq .twfaq-chip:hover{transform:translateY(-2px); box-shadow:var(--shadow-lg)}\n  #twfaq .twfaq-chip[aria-pressed=\"true\"]{\n    border-color:var(--cta1) !important;\n    background:linear-gradient(180deg, rgba(210,183,68,.14), #fff) !important;\n  }\n\n  \/* Items \u2014 blue-chip cards *\/\n  #twfaq .twfaq-list{margin-top:.6rem}\n  #twfaq .twfaq-item{\n    border:1px solid var(--line) !important; background:var(--card) !important;\n    border-radius:var(--radius) !important; margin:1rem 0; overflow:hidden;\n    box-shadow:var(--shadow) !important;\n    transition:box-shadow .18s ease, border-color .18s ease, transform .18s ease, background .18s ease;\n  }\n  #twfaq .twfaq-item:hover{transform:translateY(-1px)}\n  #twfaq .twfaq-item[open]{\n    border-color:rgba(210,183,68,.55) !important;\n    box-shadow:var(--shadow-lg) !important;\n    background:#fffef6 !important;\n  }\n\n  \/* Buttons & headings inside item *\/\n  #twfaq .twfaq-h{margin:0}\n  #twfaq .twfaq-btn{\n    width:100%; text-align:left; padding:1.15rem 1.25rem; background:transparent; border:0;\n    display:flex; justify-content:space-between; align-items:flex-start; gap:1rem;\n    cursor:pointer; color:var(--ink);\n  }\n  #twfaq .twfaq-btn:hover{background:linear-gradient(0deg, rgba(0,0,0,.02), rgba(0,0,0,.02))}\n  #twfaq .twfaq-btn:focus-visible{outline:3px solid var(--cta1); outline-offset:4px; border-radius:calc(var(--radius) - 2px)}\n  #twfaq .twfaq-q{font-weight:900; line-height:1.28}\n  #twfaq .twfaq-item[open] .twfaq-qtext{display:block; font-size:clamp(1.6rem,3vw,2.2rem); letter-spacing:-.01em}\n  #twfaq .twfaq-badge{\n    display:inline-block; margin-left:.5rem; border:1px solid var(--line);\n    background:#fff; color:var(--muted); font-size:.78rem; font-weight:800;\n    padding:.22rem .55rem; border-radius:var(--pill);\n  }\n\n  \/* Plus icon *\/\n  #twfaq .twfaq-ico{flex:0 0 auto; transition:transform .22s ease, opacity .22s ease; opacity:.9; color:var(--cta2)}\n  #twfaq .twfaq-item[open] .twfaq-ico{transform:rotate(45deg) scale(1.06); opacity:1}\n\n  \/* Panel body *\/\n  #twfaq .twfaq-panel{max-height:0; opacity:0; will-change:max-height,opacity; transition:max-height .26s ease, opacity .18s ease}\n  #twfaq .twfaq-item[open] .twfaq-panel{max-height:1200px; opacity:1}\n  #twfaq .twfaq-a{padding:0 1.25rem 1.25rem}\n  #twfaq .twfaq-a p{margin:.75rem 0; line-height:1.7; color:#1b2430}\n  #twfaq .twfaq-a a{color:var(--cta2) !important; text-decoration:underline !important}\n  #twfaq .twfaq-a a:hover{opacity:.85}\n\n  \/* Meta row + Copy link (CTA2 outline) *\/\n  #twfaq .twfaq-meta{display:flex; gap:.75rem; align-items:center; color:var(--muted); font-size:.88rem; margin-top:.65rem}\n  #twfaq .twfaq-copy{\n    border:2px solid var(--cta2) !important; color:var(--cta2) !important; background:#fff !important;\n    border-radius:var(--pill); padding:.5rem 1rem; font-weight:900; cursor:pointer;\n    box-shadow:var(--shadow); transition:transform .12s ease, box-shadow .14s ease, background .14s ease;\n  }\n  #twfaq .twfaq-copy:hover{transform:translateY(-1px); box-shadow:var(--shadow-lg)}\n  #twfaq .twfaq-copy:active{transform:scale(.98)}\n\n  \/* No results *\/\n  #twfaq .twfaq-empty{\n    margin-top:1.1rem; padding:1.1rem; border:1px dashed var(--line);\n    border-radius:var(--radius); background:#fafafa; color:var(--muted)\n  }\n  #twfaq .twfaq-cta{\n    display:inline-flex; gap:.55rem; align-items:center; margin-left:.4rem;\n    border:2px solid transparent; border-radius:var(--pill); padding:.5rem 1rem;\n    font-weight:900; text-decoration:none; box-shadow:var(--shadow);\n    background:var(--cta1) !important; color:#111 !important;\n  }\n  #twfaq .twfaq-cta:hover{transform:translateY(-1px); box-shadow:var(--shadow-lg)}\n\n  \/* Highlight from search *\/\n  #twfaq mark{background:rgba(210,183,68,.35); padding:0 .18rem; border-radius:.25rem}\n<\/style>\n\n<script>\n(function(){\n  const wrap = document.getElementById('twfaq');\n  if(!wrap) return;\n\n  const list = wrap.querySelector('.twfaq-list');\n  const chipsNav = wrap.querySelector('.twfaq-top');\n  const input = wrap.querySelector('#twfaq-input');\n  const countEl = wrap.querySelector('.twfaq-count');\n  const src = wrap.getAttribute('data-src') || '';\n  const chipsConfig = (wrap.getAttribute('data-cats') || '').split('|').map(s=>s.trim()).filter(Boolean);\n\n  \/\/ Helpers\n  const $$ = (s,el)=>Array.prototype.slice.call((el||document).querySelectorAll(s));\n  const esc = t => t==null ? '' : String(t);\n  const slug = s => (s||'').toLowerCase().replace(\/[^a-z0-9]+\/g,'-').replace(\/(^-|-$)\/g,'').slice(0,80);\n  const debounce = (fn,ms)=>{let t;return (...a)=>{clearTimeout(t);t=setTimeout(()=>fn.apply(null,a),ms)}};\n  const escReg = s => s.replace(\/[.*+?^${}()|[\\]\\\\]\/g,'\\\\$&');\n\n  let didAutoOpen = false;\n\n  function highlight(qNode, text, term){\n    if(!qNode) return;\n    if(!term){ qNode.innerHTML = text; return; }\n    const re = new RegExp('(' + escReg(term) + ')','ig');\n    qNode.innerHTML = text.replace(re,'<mark>$1<\/mark>');\n  }\n\n  function updateCount(shown,total){\n    if(!countEl) return;\n    countEl.textContent = (shown===total) ? `${total} FAQs` : `${shown} result${shown===1?'':'s'}`;\n  }\n\n  function renderChips(keys){\n    if(!chipsNav || !keys || !keys.length) return;\n    chipsNav.innerHTML = keys.map(k => {\n      const label = k.replace(\/\\b\\w\/g,m=>m.toUpperCase());\n      return `<button type=\"button\" class=\"twfaq-chip\" aria-pressed=\"false\" data-key=\"${k.toLowerCase()}\">${label}<\/button>`;\n    }).join('');\n  }\n\n  function cleanAnswer(questionText, html){\n    if(!html) return '';\n    const wrapEl = document.createElement('div');\n    wrapEl.innerHTML = html;\n\n    const first = wrapEl.firstElementChild;\n    if(first && \/^H[1-3]$\/.test(first.tagName)){\n      const norm = s => s.replace(\/\\s+\/g,' ').replace(\/[^\\w\\s]\/g,'').trim().toLowerCase();\n      if(norm(first.textContent||'') === norm(questionText||'')){\n        first.remove();\n      }\n    }\n    return wrapEl.innerHTML;\n  }\n\n  function renderList(items){\n    if(!Array.isArray(items) || !items.length){\n      list.innerHTML = '<p>No FAQs found.<\/p>';\n      return;\n    }\n    list.innerHTML = items.map((it,idx)=>{\n      const q = esc(it.q||'');\n      const a = cleanAnswer(q, (it.a||''));\n      const cat = esc((it.cat||'').toLowerCase());\n      const badge = esc(it.badge||'');\n      const badgeEl = badge ? `<span class=\"twfaq-badge\">${badge}<\/span>` : '';\n      const txt = (q + ' ' + a + ' ' + cat + ' ' + badge).replace(\/<[^>]*>\/g,'').toLowerCase();\n\n      const base = 'faq-'+slug(q)+'-'+idx;\n      const itemId   = base;\n      const headingId= base+'-h';\n      const panelId  = base+'-p';\n\n      return `\n      <div class=\"twfaq-item\" id=\"${itemId}\" data-cat=\"${cat}\" data-text=\"${txt.replace(\/\"\/g,'&quot;')}\">\n        <h3 class=\"twfaq-h\">\n          <button type=\"button\" class=\"twfaq-btn\" id=\"${headingId}\" aria-expanded=\"false\" aria-controls=\"${panelId}\">\n            <div class=\"twfaq-q\"><span class=\"twfaq-qtext\">${q}<\/span>${badgeEl}<\/div>\n            <svg class=\"twfaq-ico\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 5v14M5 12h14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/><\/svg>\n          <\/button>\n        <\/h3>\n        <div class=\"twfaq-panel\" id=\"${panelId}\" role=\"region\" aria-labelledby=\"${headingId}\">\n          <div class=\"twfaq-a\">\n            ${a}\n            <div class=\"twfaq-meta\"><button type=\"button\" class=\"twfaq-copy\" data-target=\"${itemId}\">Copy link<\/button><\/div>\n          <\/div>\n        <\/div>\n      <\/div>`;\n    }).join('');\n  }\n\n  function bindDirect(){\n    \/\/ Chips (filter)\n    $$('.twfaq-chip', wrap).forEach(chip=>{\n      chip.addEventListener('click', function(e){\n        e.preventDefault();\n        const key = chip.dataset.key || '';\n        $$('.twfaq-chip', wrap).forEach(c=>c.setAttribute('aria-pressed', c===chip ? 'true' : 'false'));\n        filter(wrap, input?.value||'', key);\n      }, true);\n    });\n\n    \/\/ FAQ toggles \u2014 direct binding (no delegation)\n    $$('.twfaq-btn', wrap).forEach(btn=>{\n      btn.addEventListener('click', function(e){\n        e.preventDefault();\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n\n        const item = btn.closest('.twfaq-item');\n        if(!item) return;\n        const listEl = item.parentElement;\n        const open = item.hasAttribute('open');\n\n        $$('.twfaq-item', listEl).forEach(i=>i.removeAttribute('open'));\n        if(!open) item.setAttribute('open','');\n\n        btn.setAttribute('aria-expanded', !open ? 'true' : 'false');\n        if(!open) history.replaceState(null,'','#'+item.id);\n      }, true);\n    });\n\n    \/\/ Copy link\n    $$('.twfaq-copy', wrap).forEach(copy=>{\n      copy.addEventListener('click', function(e){\n        e.preventDefault();\n        const id = copy.getAttribute('data-target');\n        if(!id) return;\n        const url = location.origin + location.pathname + '#' + id;\n        navigator.clipboard?.writeText(url).then(()=>{\n          copy.textContent='Copied';\n          setTimeout(()=>copy.textContent='Copy link',1200);\n        });\n      }, true);\n    });\n  }\n\n  function filter(wrapEl,q,category){\n    q = (q||'').trim().toLowerCase();\n    const items = $$('.twfaq-item', wrapEl);\n    let shown = 0, total = items.length;\n\n    items.forEach(it=>{\n      const cat = (it.getAttribute('data-cat')||'').toLowerCase();\n      const txt = (it.getAttribute('data-text')||'').toLowerCase();\n      const matchQ = !q || txt.indexOf(q) > -1;\n      const matchC = !category || cat===category.toLowerCase();\n      const show = matchQ && matchC;\n      it.style.display = show ? '' : 'none';\n\n      const qNode = it.querySelector('.twfaq-qtext');\n      if(qNode && !qNode.dataset.raw) qNode.dataset.raw = qNode.textContent || '';\n      highlight(qNode, qNode?.dataset?.raw || qNode?.textContent || '', q);\n\n      if (show) shown++;\n    });\n\n    const empty = wrapEl.querySelector('.twfaq-empty');\n    if (empty) empty.style.display = shown ? 'none' : 'block';\n    updateCount(shown,total);\n\n    \/\/ Auto-open first visible item \u2014 ONLY ONCE (prevents \u201copen then immediately close\u201d)\n    if(!didAutoOpen){\n      const first = items.find(it => it.style.display !== 'none');\n      if(first){\n        $$('.twfaq-item', first.parentElement).forEach(i=>i.removeAttribute('open'));\n        first.setAttribute('open','');\n        const btn = first.querySelector('.twfaq-btn');\n        if(btn) btn.setAttribute('aria-expanded','true');\n      }\n      didAutoOpen = true;\n    }\n  }\n\n  \/\/ Search input (direct, not delegated)\n  if(input){\n    input.addEventListener('input', debounce(function(){\n      const selected = (wrap.querySelector('.twfaq-chip[aria-pressed=\"true\"]')||{}).dataset?.key || '';\n      filter(wrap, input.value, selected);\n    }, 150));\n  }\n\n  \/\/ Fetch + init\n  fetch(src, {credentials:'omit'})\n    .then(r=>r.json())\n    .then(json=>{\n      const items = Array.isArray(json?.items) ? json.items : [];\n      renderChips(chipsConfig);\n      renderList(items);\n      bindDirect();\n\n      \/\/ Ensure ids + raw text cache\n      $$('.twfaq-item', wrap).forEach((it,idx)=>{\n        if(!it.id){\n          const qText = it.querySelector('.twfaq-qtext')?.textContent || 'faq';\n          it.id = 'faq-' + slug(qText) + '-' + idx;\n        }\n        const qnode = it.querySelector('.twfaq-qtext');\n        if(qnode && !qnode.dataset.raw) qnode.dataset.raw = qnode.textContent || '';\n      });\n\n      \/\/ Initial filter + anchor open\n      filter(wrap, input ? input.value||'' : '', '');\n      const anchor = location.hash ? location.hash.slice(1) : '';\n      if (anchor){\n        const target = document.getElementById(anchor);\n        if (target && target.classList.contains('twfaq-item')){\n          target.setAttribute('open','');\n          const btn = target.querySelector('.twfaq-btn'); if(btn) btn.setAttribute('aria-expanded','true');\n          setTimeout(()=>target.scrollIntoView({block:'start',behavior:'smooth'}), 60);\n        }\n      }\n\n      \/\/ Minimal JSON-LD (top 10 distinct Qs with non-empty answers)\n      try {\n        const seen = {};\n        const mainEntity = [];\n        for (const it of items){\n          const q = (it.q||'').toString().trim();\n          if(!q) continue;\n          const key = q.toLowerCase();\n          if(seen[key]) continue;\n          const text = (it.a||'').replace(\/<[^>]*>\/g,' ').replace(\/\\s+\/g,' ').trim();\n          if(!text) continue;\n          mainEntity.push({\"@type\":\"Question\",\"name\":q,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":text}});\n          seen[key] = true;\n          if(mainEntity.length>=10) break;\n        }\n        if(mainEntity.length){\n          const ld = {\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":mainEntity};\n          const s = document.createElement('script'); s.type='application\/ld+json';\n          s.textContent = JSON.stringify(ld);\n          document.head.appendChild(s);\n        }\n      } catch(e){ \/* no-op *\/ }\n    })\n    .catch(()=>{\n      list.innerHTML = '<p>Sorry, we could not load the FAQs right now.<\/p>';\n    });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Customer FAQs Answers to common booking, payment, and itinerary questions. No results. Try a different term, or contact support .<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_iqpageproperties":{"pagetype":"","latlong":"0,0","latitude":"","longitude":"","country":"","county":"","town":"","product":"","service":"","host":"","postcode":"","wikipedia":"","wikidata":"","website":"","language":"","iqassetgroup":"","showroomid":"","state":"","state_name":""},"footnotes":""},"class_list":["post-895","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/es.theweddingcarhirepeople.com\/es\/wp-json\/wp\/v2\/pages\/895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es.theweddingcarhirepeople.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/es.theweddingcarhirepeople.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/es.theweddingcarhirepeople.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/es.theweddingcarhirepeople.com\/es\/wp-json\/wp\/v2\/comments?post=895"}],"version-history":[{"count":0,"href":"https:\/\/es.theweddingcarhirepeople.com\/es\/wp-json\/wp\/v2\/pages\/895\/revisions"}],"wp:attachment":[{"href":"https:\/\/es.theweddingcarhirepeople.com\/es\/wp-json\/wp\/v2\/media?parent=895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}