{"id":1780,"date":"2022-05-30T18:26:13","date_gmt":"2022-05-30T18:26:13","guid":{"rendered":"https:\/\/fraumiau.ro\/?page_id=1780"},"modified":"2026-02-07T21:21:08","modified_gmt":"2026-02-07T21:21:08","slug":"rezervari-catsitting","status":"publish","type":"page","link":"https:\/\/fraumiau.ro\/en\/rezervari-catsitting\/","title":{"rendered":"Rezervari"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"1780\" class=\"elementor elementor-1780\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-16835e6 elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"16835e6\" data-element_type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"aux-parallax-section elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6ebfcc3\" data-id=\"6ebfcc3\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3803a30 elementor-widget elementor-widget-toggle\" data-id=\"3803a30\" data-element_type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-5871\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-5871\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">New clients<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-5871\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-5871\"><!-- Version: v1.1.1 (2025-01-12) \u2014 OPTIMIZED -->\n<!DOCTYPE html>\n<html lang=\"ro\">\n<head>\n  <meta charset=\"utf-8\" \/>\n  <title>FrauMiau \u2014 Formular clien\u021bi noi (v1.1.1)<\/title>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" \/>\n  <meta name=\"theme-color\" content=\"#111\" \/>\n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"default\">\n    <meta name=\"web-app-url\" content=\"https:\/\/script.google.com\/macros\/s\/AKfycbwLLcEISW-DPhwND3H_qVOhfSGo0q8AWf9Uhq8qlHp34Mxy2xhMk8shLptAJlTNk7h-qw\/exec\">\n  <link rel=\"preconnect\" href=\"https:\/\/script.google.com\">\n  <link rel=\"dns-prefetch\" href=\"https:\/\/script.google.com\">\n  <style>\n    :root {\n      --gap: 16px;\n      --radius: 14px;\n      --pad: 20px;\n      --max: 800px;\n      --primary: #111;\n      --secondary: #666;\n      --border: #e7e7e7;\n      --border-focus: #111;\n      --shadow: 0 2px 8px rgba(0,0,0,0.08);\n      --shadow-focus: 0 0 0 3px rgba(0,0,0,0.1);\n      --font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n      --transition: all 0.2s ease;\n    }\n    \n    * {\n      box-sizing: border-box;\n    }\n    \n    html, body {\n      height: 100%;\n    }\n    \n    body {\n      font-family: var(--font-family);\n      margin: 0;\n      line-height: 1.5;\n      background: #fafafa;\n      color: var(--primary);\n      font-size: 16px;\n    }\n    \n    .container {\n      max-width: var(--max);\n      margin: 0 auto;\n      padding: clamp(16px, 4vw, 32px);\n    }\n    \n    h1 {\n      font-family: var(--font-family);\n      font-size: clamp(1.4rem, 4vw, 1.8rem);\n      font-weight: 400;\n      margin: 0 0 24px 0;\n      padding: 0;\n      text-align: center;\n      color: var(--primary);\n    }\n    \n    .panel {\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: var(--pad);\n      background: #fff;\n      box-shadow: var(--shadow);\n      margin-bottom: 20px;\n    }\n\n    .row {\n      display: grid;\n      gap: var(--gap);\n      grid-template-columns: 1fr;\n      margin-bottom: 24px;\n    }\n    \n    .row:last-child {\n      margin-bottom: 0;\n    }\n    \n    label {\n      display: block;\n      font-weight: 400;\n      margin-bottom: 8px;\n      color: var(--primary);\n      font-size: 15px;\n    }\n    \n    input, textarea, select {\n      width: 100%;\n      padding: 16px;\n      border: 2px solid #d0d0d0;\n      border-radius: 12px;\n      font: inherit;\n      font-size: 16px;\n      background: #fff;\n      transition: var(--transition);\n      line-height: 1.4;\n    }\n    \n    input:focus, textarea:focus, select:focus {\n      outline: none;\n      border-color: var(--border-focus);\n      box-shadow: var(--shadow-focus);\n      transform: translateY(-1px);\n    }\n    \n    input:hover, textarea:hover, select:hover {\n      border-color: #999;\n    }\n    \n    textarea {\n      min-height: 120px;\n      resize: vertical;\n      font-family: inherit;\n    }\n\n    fieldset {\n      border: none;\n      padding: 0;\n      margin: 0 0 20px 0;\n      background: transparent;\n    }\n    \n    legend {\n      padding: 0;\n      font-weight: 400;\n      font-size: 15px;\n      color: var(--primary);\n      background: transparent;\n      border: none;\n      margin: 0 0 12px 0;\n      display: block;\n      width: 100%;\n    }\n\n    .choices {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n      gap: 12px;\n      margin-top: 0;\n      align-items: start;\n    }\n    \n    .choices input[type=radio] {\n      position: absolute;\n      opacity: 0;\n      width: 0;\n      height: 0;\n      pointer-events: none;\n    }\n    \n    .chip {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 8px;\n      padding: 14px 16px;\n      border: 2px solid #ddd;\n      border-radius: 12px;\n      cursor: pointer;\n      user-select: none;\n      font-weight: 400;\n      transition: var(--transition);\n      background: #fff;\n      text-align: center;\n      min-height: 48px;\n    }\n    \n    .chip:hover {\n      border-color: #999;\n      transform: translateY(-1px);\n      box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n    }\n    \n    .choices input[type=radio]:checked + label.chip {\n      border-color: var(--border-focus);\n      background: var(--primary);\n      color: #fff;\n      box-shadow: var(--shadow-focus);\n    }\n\n    .muted {\n      color: var(--secondary);\n      font-size: 14px;\n    }\n    \n    .ok {\n      color: #0a7a32;\n      font-weight: 400;\n    }\n    \n    .err {\n      color: #d32f2f;\n      font-weight: 400;\n    }\n\n    .sticky {\n      position: sticky;\n      bottom: 0;\n      z-index: 10;\n      margin-top: 32px;\n      background: #fafafa;\n      padding: 16px 0;\n    }\n    \n    .sticky .inner {\n      border: 2px solid var(--border);\n      border-radius: var(--radius);\n      padding: 20px;\n      background: #fff;\n      display: flex;\n      gap: 16px;\n      flex-wrap: wrap;\n      align-items: center;\n      justify-content: space-between;\n      box-shadow: var(--shadow);\n    }\n    \n    .actions {\n      display: flex;\n      gap: 12px;\n      flex-wrap: wrap;\n      align-items: center;\n    }\n    \n    .btn {\n      padding: 16px 24px;\n      border-radius: 12px;\n      border: 0;\n      background: var(--primary);\n      color: #fff;\n      font-weight: 400;\n      font-size: 16px;\n      cursor: pointer;\n      touch-action: manipulation;\n      transition: var(--transition);\n      min-width: 120px;\n      min-height: 48px;\n    }\n    \n    .btn:hover:not([disabled]) {\n      background: #333;\n      transform: translateY(-1px);\n      box-shadow: 0 4px 12px rgba(0,0,0,0.2);\n    }\n    \n    .btn[disabled] {\n      opacity: 0.6;\n      cursor: not-allowed;\n      transform: none;\n    }\n\n    .hidden {\n      display: none !important;\n    }\n    \n    \/* Screen reader only content *\/\n    .sr-only {\n      position: absolute;\n      width: 1px;\n      height: 1px;\n      padding: 0;\n      margin: -1px;\n      overflow: hidden;\n      clip: rect(0, 0, 0, 0);\n      white-space: nowrap;\n      border: 0;\n    }\n    \n    \/* Loading state *\/\n    .loading {\n      opacity: 0.6;\n      pointer-events: none;\n    }\n    \n    \/* Error state *\/\n    .error {\n      border-color: #d32f2f !important;\n      box-shadow: 0 0 0 3px rgba(211, 47, 47, 0.1) !important;\n    }\n    \n    \/* Success state *\/\n    .success {\n      border-color: #0a7a32 !important;\n      box-shadow: 0 0 0 3px rgba(10, 122, 50, 0.1) !important;\n    }\n    \n    \/* Improved spacing for better readability *\/\n    .row.two {\n      gap: 24px;\n    }\n    \n    .row.two fieldset {\n      margin-bottom: 0;\n    }\n    \n    .row.two label {\n      margin-bottom: 12px;\n    }\n    \n    \/* Better mobile experience *\/\n    @media (max-width: 768px) {\n      .container {\n        padding: 16px;\n      }\n      \n      .panel {\n        padding: 16px;\n      }\n      \n      .choices {\n        grid-template-columns: 1fr;\n        gap: 8px;\n      }\n      \n      .chip {\n        padding: 16px;\n        min-height: 48px;\n      }\n      \n      .btn {\n        min-height: 48px;\n        min-width: 140px;\n      }\n      \n      .sticky .inner {\n        flex-direction: column;\n        align-items: stretch;\n        gap: 12px;\n      }\n      \n      .actions {\n        justify-content: center;\n      }\n    }\n\n    @media (min-width: 720px) {\n      .container {\n        max-width: 800px;\n      }\n      \n      .row.two {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n      }\n    }\n  <\/style>\n<\/head>\n<body>\n  <div class=\"container\">\n    <h1>Formular clien\u021bi noi<\/h1>\n\n    <div id=\"card\" class=\"panel\">\n      <form id=\"newClientForm\" novalidate action=\"\">\n        <div class=\"row two\">\n          <label for=\"n_name\">Name\n            <input id=\"n_name\" name=\"name\" required autocomplete=\"name\" \/>\n          <\/label>\n          <label for=\"n_phone\">WhatsApp Number\n            <input id=\"n_phone\" name=\"phone\" required type=\"tel\" inputmode=\"tel\" autocomplete=\"tel\" \/>\n          <\/label>\n        <\/div>\n\n        <div class=\"row two\">\n          <label for=\"n_email\">Email\n            <input id=\"n_email\" name=\"email\" required type=\"email\" autocomplete=\"email\" \/>\n          <\/label>\n          <label for=\"n_address\">Address\n            <input id=\"n_address\" name=\"address\" required autocomplete=\"street-address\" \/>\n          <\/label>\n        <\/div>\n\n        <div class=\"row\">\n          <label for=\"n_when\">When are our services required?\n            <input id=\"n_when\" name=\"when\" required \/>\n          <\/label>\n        <\/div>\n\n        <div class=\"row two\">\n          <fieldset>\n            <legend id=\"visits-legend\">How many visits per day?<\/legend>\n            <div class=\"choices\" role=\"radiogroup\" aria-labelledby=\"visits-legend\" aria-required=\"true\">\n              <input type=\"radio\" id=\"visits_one\" name=\"visits_per_day\" value=\"one\" required aria-describedby=\"visits-help\">\n              <label class=\"chip\" for=\"visits_one\">One visit<\/label>\n              <input type=\"radio\" id=\"visits_two\" name=\"visits_per_day\" value=\"two\" aria-describedby=\"visits-help\">\n              <label class=\"chip\" for=\"visits_two\">Two visits<\/label>\n              <input type=\"radio\" id=\"visits_alt\" name=\"visits_per_day\" value=\"alternative\" aria-describedby=\"visits-help\">\n              <label class=\"chip\" for=\"visits_alt\">Custom option<\/label>\n            <\/div>\n            <div id=\"visits-help\" class=\"sr-only\">Select number of visits per day<\/div>\n          <\/fieldset>\n          <fieldset>\n            <legend id=\"duration-legend\">Visit duration<\/legend>\n            <div class=\"choices\" role=\"radiogroup\" aria-labelledby=\"duration-legend\" aria-required=\"true\">\n              <input type=\"radio\" id=\"dur_30\" name=\"visit_duration\" value=\"30\" required aria-describedby=\"duration-help\">\n              <label class=\"chip\" for=\"dur_30\">30 min<\/label>\n              <input type=\"radio\" id=\"dur_60\" name=\"visit_duration\" value=\"60\" aria-describedby=\"duration-help\">\n              <label class=\"chip\" for=\"dur_60\">60 min<\/label>\n              <input type=\"radio\" id=\"dur_90\" name=\"visit_duration\" value=\"90\" aria-describedby=\"duration-help\">\n              <label class=\"chip\" for=\"dur_90\">90 min<\/label>\n            <\/div>\n            <div id=\"duration-help\" class=\"sr-only\">Select visit duration<\/div>\n          <\/fieldset>\n        <\/div>\n\n        <div class=\"row two\">\n          <fieldset>\n            <legend>Fixed hours?<\/legend>\n            <div class=\"choices\" role=\"radiogroup\" aria-label=\"Fixed hours?\">\n              <input type=\"radio\" id=\"fx_yes\" name=\"fixed_hours\" value=\"yes\" required>\n              <label class=\"chip\" for=\"fx_yes\">Yes<\/label>\n              <input type=\"radio\" id=\"fx_no\" name=\"fixed_hours\" value=\"no\">\n              <label class=\"chip\" for=\"fx_no\">No<\/label>\n            <\/div>\n          <\/fieldset>\n          <label for=\"n_cats\">How many cats do you own?\n            <input id=\"n_cats\" name=\"cats_count\" required inputmode=\"numeric\" pattern=\"[0-9]*\" \/>\n          <\/label>\n        <\/div>\n\n        <div class=\"row two\">\n          <fieldset>\n            <legend>Are your pets immunized\/have their anti-parasite treatments?<\/legend>\n            <div class=\"choices\" role=\"radiogroup\" aria-label=\"Imunizate\/antiparazitar\">\n              <input type=\"radio\" id=\"imm_yes\" name=\"immunized\" value=\"yes\" required>\n              <label class=\"chip\" for=\"imm_yes\">Yes<\/label>\n              <input type=\"radio\" id=\"imm_no\" name=\"immunized\" value=\"no\">\n              <label class=\"chip\" for=\"imm_no\">No<\/label>\n            <\/div>\n          <\/fieldset>\n          <fieldset>\n            <legend>Are the cats territorial\/aggressive?<\/legend>\n            <div class=\"choices\" role=\"radiogroup\" aria-label=\"Teritoriale\/agresive\">\n              <input type=\"radio\" id=\"agg_yes\" name=\"aggressive\" value=\"yes\" required>\n              <label class=\"chip\" for=\"agg_yes\">Yes<\/label>\n              <input type=\"radio\" id=\"agg_no\" name=\"aggressive\" value=\"no\">\n              <label class=\"chip\" for=\"agg_no\">No<\/label>\n            <\/div>\n          <\/fieldset>\n        <\/div>\n\n        <div class=\"row two\">\n          <fieldset>\n            <legend>Any health issues\/treatments we need to be aware of?<\/legend>\n            <div class=\"choices\" role=\"radiogroup\" aria-label=\"Probleme de s\u0103n\u0103tate\/tratamente\">\n              <input type=\"radio\" id=\"hi_yes\" name=\"health_issues\" value=\"yes\" required>\n              <label class=\"chip\" for=\"hi_yes\">Yes<\/label>\n              <input type=\"radio\" id=\"hi_no\" name=\"health_issues\" value=\"no\">\n              <label class=\"chip\" for=\"hi_no\">No<\/label>\n            <\/div>\n          <\/fieldset>\n          <label for=\"n_details\">Details about treatments, health or behavioral problems, other details or special mentions:\n            <textarea id=\"n_details\" name=\"details\"><\/textarea>\n          <\/label>\n        <\/div>\n\n        <div class=\"sticky\">\n          <div class=\"inner\">\n            <div class=\"actions\">\n              <button id=\"btnSend\" class=\"btn\" type=\"submit\" disabled>Send<\/button>\n            <\/div>\n            <div class=\"muted\" id=\"formStatus\" role=\"status\" aria-live=\"polite\">Completeaz\u0103 formularul \u0219i apas\u0103 Trimite.<\/div>\n          <\/div>\n        <\/div>\n      <input type=\"hidden\" name=\"trp-form-language\" value=\"en\"\/><\/form>\n\n      <div id=\"thankYou\" class=\"panel hidden\" style=\"margin-top:10px\">\n        <p class=\"ok\" style=\"margin:0;font-weight:700\">Thank you, we will get in touch soon.<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n\n<script>\n\/\/<![CDATA[\n\/\/ ------- OPTIMIZED MODULES -------\nconst DOM = {\n  form: null,\n  btn: null,\n  status: null,\n  phone: null,\n  details: null,\n  init() {\n    this.form = document.getElementById('newClientForm');\n    this.btn = document.getElementById('btnSend');\n    this.status = document.getElementById('formStatus');\n    this.phone = document.getElementById('n_phone');\n    this.details = document.getElementById('n_details');\n  }\n};\n\nconst FormValidator = {\n  rules: {\n    email: \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/,\n    phone: \/^(\\+40|0)[0-9]{9}$\/,\n    required: (value) => {\n      if (!value) return false;\n      return value.trim().length > 0;\n    }\n  },\n  \n  validateField(field) {\n    const value = field.value.trim();\n    const type = field.type;\n    let isValid = true;\n    let message = '';\n\n    switch(type) {\n      case 'email':\n        isValid = this.rules.email.test(value);\n        message = isValid ? '' : 'Te rug\u0103m s\u0103 introduci o adres\u0103 de email valid\u0103.';\n        break;\n      case 'tel':\n        const sanitized = sanitizePhone(value);\n        isValid = this.rules.phone.test(sanitized);\n        message = isValid ? '' : 'Te rug\u0103m s\u0103 introduci un num\u0103r de telefon valid (ex: 0712345678).';\n        break;\n      default:\n        if (field.required) {\n          isValid = this.rules.required(value);\n          message = isValid ? '' : 'Acest c\u00e2mp este obligatoriu.';\n        }\n    }\n\n    field.setCustomValidity(message);\n    this.updateFieldState(field, isValid);\n    return isValid;\n  },\n  \n  updateFieldState(field, isValid) {\n    field.classList.remove('error', 'success');\n    if (field.value.trim()) {\n      field.classList.add(isValid ? 'success' : 'error');\n    }\n  }\n};\n\nconst FormLimiter = {\n  lastSubmit: 0,\n  minInterval: 5000, \/\/ 5 seconds\n  \n  canSubmit() {\n    const now = Date.now();\n    if (now - this.lastSubmit < this.minInterval) {\n      return false;\n    }\n    this.lastSubmit = now;\n    return true;\n  }\n};\n\n\/\/ ------- UTILITY FUNCTIONS -------\nconst $ = (id) => document.getElementById(id);\n\nfunction sanitizePhone(raw) {\n  let v = String(raw || '').trim();\n  v = v.replace(\/^(00)\/, '+');\n  v = v.replace(\/[^0-9+]+\/g, '');\n  v = v.replace(\/\\++\/g, '+');\n  v = v.replace(\/(?!^)\\+\/g, '');\n  return v;\n}\n\nfunction sanitizeInput(value, type) {\n  if (typeof value !== 'string') return '';\n  \n  switch(type) {\n    case 'text':\n      return value.trim().replace(\/[<>]\/g, '');\n    case 'email':\n      return value.trim().toLowerCase();\n    case 'phone':\n      return sanitizePhone(value);\n    default:\n      return value.trim();\n  }\n}\n\nfunction qRadio(name) {\n  const n = document.getElementsByName(name);\n  for (let i = 0; i < n.length; i++) {\n    if (n[i].checked) return n[i].value;\n  }\n  return '';\n}\n\n\/\/ Debounce function for input validation\nconst debounce = (func, wait) => {\n  let timeout;\n  return function executedFunction(...args) {\n    const later = () => {\n      clearTimeout(timeout);\n      func(...args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n};\n\n\/\/ Build human-readable headers and values for doc generation\nfunction buildNormalizedHeaders(raw){\n  const labels = {\n    name: 'Nume',\n    phone: 'Telefon',\n    email: 'Email',\n    address: 'Adresa',\n    when: 'C\u00e2nd ai nevoie de serviciile noastre?',\n    visits_per_day: 'C\u00e2te vizite pe zi?',\n    visit_duration: 'Durata vizitei',\n    fixed_hours: 'Ore fixe pentru vizite?',\n    cats_count: 'C\u00e2te pisici ai?',\n    immunized: 'Imunizate\/antiparazitar',\n    aggressive: 'Pisici teritoriale\/agresive?',\n    health_issues: 'Probleme de s\u0103n\u0103tate\/tratamente?',\n    details: 'Detalii tratamente \/ probleme de s\u0103n\u0103tate \/ comportament \/ alte men\u021biuni'\n  };\n  const pretty = {\n    visits_per_day(v){ return v === 'one' ? 'O vizit\u0103' : v === 'two' ? 'Dou\u0103 vizite' : v === 'alternative' ? 'Alt\u0103 variant\u0103' : String(v||''); },\n    visit_duration(v){ return v ? `${v} min` : ''; },\n    fixed_hours(v){ return v === 'yes' ? 'Da' : v === 'no' ? 'Nu' : String(v||''); },\n    immunized(v){ return v === 'yes' ? 'Da' : v === 'no' ? 'Nu' : String(v||''); },\n    aggressive(v){ return v === 'yes' ? 'Da' : v === 'no' ? 'Nu' : String(v||''); },\n    health_issues(v){ return v === 'yes' ? 'Da' : v === 'no' ? 'Nu' : String(v||''); }\n  };\n  const order = ['name','phone','email','address','when','visits_per_day','visit_duration','fixed_hours','cats_count','immunized','aggressive','health_issues','details'];\n  const rows = [];\n  order.forEach(key => {\n    const label = labels[key] || key;\n    const rawVal = raw[key];\n    const fmt = pretty[key] ? pretty[key](rawVal) : (rawVal == null ? '' : String(rawVal));\n    rows.push({ key, label, value: fmt });\n  });\n  return rows;\n}\n\/\/ Produce a single human-readable bullet list string\nfunction buildNormalizedDocText(raw){\n  const rows = buildNormalizedHeaders(raw);\n  const lines = [];\n  for (var i = 0; i < rows.length; i++) {\n    var r = rows[i];\n    var v = (r.value || '').trim();\n    if (!v) continue;\n    lines.push(`${r.label}: ${v}`);\n  }\n  return lines.join('\\n');\n}\nconst FormUI = {\n  updateRiskAndDetails() {\n    const riskYes = (qRadio('health_issues') === 'yes') || (qRadio('aggressive') === 'yes');\n    const details = DOM.details;\n    if (details) {\n      details.required = false; \/\/ Always optional\n      if (riskYes) {\n        details.setAttribute('placeholder', 'Te rug\u0103m s\u0103 detaliezi aici (op\u021bional).');\n        details.setCustomValidity(''); \/\/ No validation error\n      } else {\n        details.setAttribute('placeholder', 'Detalii tratamente \/ probleme de s\u0103n\u0103tate \/ comportament \/ alte men\u021biuni (op\u021bional)');\n        details.setCustomValidity('');\n      }\n    }\n  },\n  \n  updateSubmitEnabled() {\n    try {\n      if (!DOM.form || !DOM.btn) return;\n      \n      let isValid = true;\n      let failureReason = '';\n      \n      \/\/ Explicitly check each required field by ID\/name\n      const nameField = document.getElementById('n_name');\n      if (!nameField || !nameField.value || !nameField.value.trim()) {\n        isValid = false;\n        failureReason = 'Missing name';\n      }\n      \n      const phoneField = document.getElementById('n_phone');\n      if (isValid) {\n        if (!phoneField || !phoneField.value || !phoneField.value.trim()) {\n          isValid = false;\n          failureReason = 'Missing phone';\n        }\n      }\n      \n      const emailField = document.getElementById('n_email');\n      if (isValid) {\n        if (!emailField || !emailField.value || !emailField.value.trim()) {\n          isValid = false;\n          failureReason = 'Missing email';\n        }\n      }\n      \n      const addressField = document.getElementById('n_address');\n      if (isValid) {\n        if (!addressField || !addressField.value || !addressField.value.trim()) {\n          isValid = false;\n          failureReason = 'Missing address';\n        }\n      }\n      \n      const whenField = document.getElementById('n_when');\n      if (isValid) {\n        if (!whenField || !whenField.value || !whenField.value.trim()) {\n          isValid = false;\n          failureReason = 'Missing when';\n        }\n      }\n      \n      const catsField = document.getElementById('n_cats');\n      if (isValid) {\n        if (!catsField || !catsField.value || !catsField.value.trim()) {\n          isValid = false;\n          failureReason = 'Missing cats count';\n        }\n      }\n      \n      \/\/ Check required radio groups\n      if (isValid) {\n        const requiredRadioGroups = ['visits_per_day', 'visit_duration', 'fixed_hours', 'immunized', 'aggressive', 'health_issues'];\n        for (let i = 0; i < requiredRadioGroups.length; i++) {\n          const groupName = requiredRadioGroups[i];\n          const radios = DOM.form.querySelectorAll('input[name=\"' + groupName + '\"]');\n          let groupSelected = false;\n          for (let j = 0; j < radios.length; j++) {\n            if (radios[j].checked) {\n              groupSelected = true;\n              break;\n            }\n          }\n          if (!groupSelected) {\n            isValid = false;\n            failureReason = 'Missing radio: ' + groupName;\n            break;\n          }\n        }\n      }\n      \n      \/\/ Validate email format (only if email exists)\n      if (isValid) {\n        if (emailField) {\n          if (emailField.value) {\n            const emailValue = emailField.value.trim();\n            if (emailValue) {\n              if (FormValidator) {\n                if (FormValidator.rules) {\n                  if (!FormValidator.rules.email.test(emailValue)) {\n                    isValid = false;\n                    failureReason = 'Invalid email format: ' + emailValue;\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n      \n      \/\/ Validate phone format (only if phone exists and has value)\n      \/\/ Be very lenient - just check it has at least 9 digits\n      if (isValid) {\n        if (phoneField) {\n          if (phoneField.value) {\n            try {\n              const phoneValue = sanitizePhone(phoneField.value);\n              const digitsOnly = phoneValue.replace(\/\\D\/g, '');\n              if (!digitsOnly) {\n                isValid = false;\n                failureReason = 'Invalid phone: ' + phoneValue + ' (digits: ' + digitsOnly + ')';\n              } else {\n                if (digitsOnly.length < 9) {\n                  isValid = false;\n                  failureReason = 'Invalid phone: ' + phoneValue + ' (digits: ' + digitsOnly + ')';\n                }\n              }\n            } catch (e) {\n              \/\/ If phone validation fails, don't block submission\n              console.warn('Phone validation error:', e);\n            }\n          }\n        }\n      }\n      \n      DOM.btn.disabled = !isValid;\n      \n      if (DOM.status) {\n        if (isValid) {\n          DOM.status.className = 'muted';\n          DOM.status.textContent = 'Completeaz\u0103 formularul \u0219i apas\u0103 Trimite.';\n        } else {\n          DOM.status.className = 'err';\n          DOM.status.textContent = 'Te rug\u0103m s\u0103 completezi toate c\u00e2mpurile obligatorii.';\n          \/\/ Debug logging\n          console.log('Validation failed:', failureReason);\n        }\n      }\n    } catch (e) {\n      console.error('updateSubmitEnabled error:', e);\n      \/\/ On error, enable button to allow submission\n      if (DOM.btn) DOM.btn.disabled = false;\n    }\n  },\n  \n  updateStatus(message, type = 'muted') {\n    if (DOM.status) {\n      DOM.status.className = type;\n      DOM.status.textContent = message;\n    }\n  },\n  \n  showError(message) {\n    this.updateStatus(message, 'err');\n  },\n  \n  showLoading() {\n    if (DOM.form) DOM.form.classList.add('loading');\n    this.updateStatus('Se trimite...', 'muted');\n  },\n  \n  hideLoading() {\n    if (DOM.form) DOM.form.classList.remove('loading');\n  }\n};\n\n\/\/ ------- Option B wiring (Apps Script Web App) -------\n(function attachClientSubmit(){\n  \/\/ Get web app URL directly\n  var ENDPOINT = document.querySelector('meta[name=\"web-app-url\"]')?.getAttribute('content') || 'https:\/\/script.google.com\/macros\/s\/AKfycbwLLcEISW-DPhwND3H_qVOhfSGo0q8AWf9Uhq8qlHp34Mxy2xhMk8shLptAJlTNk7h-qw\/exec';\n  \n  \/\/ Test webapp connectivity on page load\n  async function testWebappConnectivity() {\n    try {\n      console.log('Testing webapp connectivity...');\n      console.log('Using ENDPOINT:', ENDPOINT);\n      const response = await fetch(ENDPOINT + '?fn=health', { mode: 'cors' });\n      if (response.ok) {\n        const data = await response.json();\n        console.log('Webapp is accessible:', data);\n        return true;\n      } else {\n        console.error('Webapp returned error:', response.status, await response.text());\n        return false;\n      }\n    } catch (error) {\n      console.warn('Webapp connectivity test failed (this is OK - CORS expected):', error.message);\n      return true; \/\/ Return true to allow form to work anyway\n    }\n  }\n\n  function toPayload(form) {\n    var fd = new FormData(form);\n    var obj = {};\n    fd.forEach(function(v, k) { obj[k] = v; });\n    \n    \/\/ Sanitize all inputs\n    if (obj.phone) obj.phone = sanitizeInput(obj.phone, 'phone');\n    if (obj.email) obj.email = sanitizeInput(obj.email, 'email');\n    if (obj.name) obj.name = sanitizeInput(obj.name, 'text');\n    if (obj.address) obj.address = sanitizeInput(obj.address, 'text');\n    if (obj.when) obj.when = sanitizeInput(obj.when, 'text');\n    if (obj.details) obj.details = sanitizeInput(obj.details, 'text');\n    \n    obj.visits_per_day = qRadio('visits_per_day');\n    obj.visit_duration = qRadio('visit_duration');\n    obj.fixed_hours = qRadio('fixed_hours');\n    obj.immunized = qRadio('immunized');\n    obj.health_issues = qRadio('health_issues');\n    obj.aggressive = qRadio('aggressive');\n    \n    \/\/ Attach a compact doc body and a mode hint to avoid duplication\n    obj.normalized_text = buildNormalizedDocText(obj);\n    obj.doc_mode = 'normalized_all';\n    return obj;\n  }\n  function trySendBeacon(url, jsonStr){\n    if (!('navigator' in window) || !('sendBeacon' in navigator)) return false;\n    try { return navigator.sendBeacon(url, new Blob([jsonStr], { type: 'text\/plain;charset=UTF-8' })); }\n    catch (e) { return false; }\n  }\n  async function postToAppsScript(url, payloadObj, retries = 3) {\n    const jsonStr = JSON.stringify({ action: 'saveClient', payload: { ...payloadObj, SourceForm: 'new_client' } });\n    \n    console.log('Submitting to:', url);\n    console.log('Payload:', jsonStr);\n    \n    for (let attempt = 1; attempt <= retries; attempt++) {\n      try {\n        \/\/ Skip beacon - not reliable for our use case\n        \/\/ if (trySendBeacon(url, jsonStr)) {\n        \/\/   console.log('Sent via beacon (attempt ' + attempt + ')');\n        \/\/   return true;\n        \/\/ }\n        \n        const response = await fetch(url, {\n          method: 'POST',\n          mode: 'no-cors',  \/\/ Changed from 'cors' to 'no-cors' to avoid CORS errors\n          keepalive: true,\n          headers: { 'Content-Type': 'text\/plain;charset=UTF-8' },\n          body: jsonStr\n        });\n        \n        console.log('Response status:', response.status, '(may be opaque in no-cors mode)');\n        console.log('Request sent to:', url);\n        \n        \/\/ In no-cors mode, we can't read response, but if fetch doesn't throw, assume success\n        console.log('Fetch completed without error - assuming success');\n        return true;\n      } catch (error) {\n        console.error('Attempt ' + attempt + ' failed:', error);\n        if (attempt < retries) {\n          await new Promise(resolve => setTimeout(resolve, 1000 * attempt));\n        } else {\n          throw error;\n        }\n      }\n    }\n    return false;  \/\/ All retries failed\n  }\n  async function onSubmit(e) {\n    e.preventDefault();\n    \n    \/\/ Check rate limiting\n    if (!FormLimiter.canSubmit()) {\n      FormUI.showError('Te rug\u0103m s\u0103 a\u0219tep\u021bi c\u00e2teva secunde \u00eenainte de a trimite din nou.');\n      return;\n    }\n    \n    const form = e.currentTarget;\n    FormUI.updateRiskAndDetails();\n    \n    if (!form.reportValidity()) return;\n    \n    FormUI.showLoading();\n    \n    try {\n      const payload = toPayload(form);\n      console.log('Form payload:', payload);\n      \n      const success = await postToAppsScript(ENDPOINT, payload);\n      \n      if (success) {\n        console.log('Form submitted successfully');\n        form.classList.add('hidden');\n        const ty = document.getElementById('thankYou');\n        if (ty) ty.classList.remove('hidden');\n        if ('scrollTo' in window) window.scrollTo({ top: 0, behavior: 'smooth' });\n      } else {\n        throw new Error('Form submission failed');\n      }\n    } catch (error) {\n      console.error('Form submission error:', error);\n      FormUI.hideLoading();\n      FormUI.showError('A ap\u0103rut o eroare: ' + error.message + '. Te rug\u0103m s\u0103 \u00eencerci din nou.');\n    }\n  }\n\n  document.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize DOM cache\n    DOM.init();\n    \n    \/\/ Test webapp connectivity\n    testWebappConnectivity();\n    \n    \/\/ Phone number sanitization with debounced validation\n    if (DOM.phone) {\n      DOM.phone.addEventListener('blur', function() {\n        DOM.phone.value = sanitizePhone(DOM.phone.value);\n        FormValidator.validateField(DOM.phone);\n      });\n      \n      DOM.phone.addEventListener('input', debounce(function() {\n        FormValidator.validateField(DOM.phone);\n        FormUI.updateSubmitEnabled();\n      }, 300));\n    }\n    \n    \/\/ Radio button change handlers\n    ['visits_per_day', 'visit_duration', 'fixed_hours', 'immunized', 'health_issues', 'aggressive'].forEach(function(name) {\n      const nodes = document.getElementsByName(name);\n      for (let i = 0; i < nodes.length; i++) {\n        nodes[i].addEventListener('change', function() {\n          FormUI.updateRiskAndDetails();\n          FormUI.updateSubmitEnabled();\n        });\n      }\n    });\n    \n    \/\/ Form input handlers with debounced validation\n    if (DOM.form) {\n      \/\/ Immediate validation on any input change\n      const debouncedValidation = debounce(function(e) {\n        if (e) {\n          if (e.target) {\n            if (e.target.type === 'email' || e.target.type === 'tel') {\n              FormValidator.validateField(e.target);\n            }\n          }\n        }\n        FormUI.updateRiskAndDetails();\n        FormUI.updateSubmitEnabled();\n      }, 300);\n      \n      DOM.form.addEventListener('input', function(e) {\n        FormUI.updateSubmitEnabled(); \/\/ Immediate check\n        debouncedValidation(e); \/\/ Detailed validation debounced\n      });\n      \n      \/\/ Validate on change for radio buttons and other fields (immediate)\n      DOM.form.addEventListener('change', function(e) {\n        FormUI.updateSubmitEnabled();\n      });\n      \n      \/\/ Validate on blur for text inputs\n      const textInputs = DOM.form.querySelectorAll('input[type=\"text\"], input[type=\"email\"], input[type=\"tel\"], textarea');\n      for (let i = 0; i < textInputs.length; i++) {\n        textInputs[i].addEventListener('blur', function() {\n          if (this.type === 'email' || this.type === 'tel') {\n            FormValidator.validateField(this);\n          }\n          FormUI.updateSubmitEnabled();\n        });\n      }\n      \n      DOM.form.addEventListener('submit', onSubmit);\n    }\n    \n    \/\/ Initialize form state\n    FormUI.updateRiskAndDetails();\n    \/\/ Run validation after a short delay to ensure DOM is fully ready\n    setTimeout(function() {\n      try {\n        FormUI.updateSubmitEnabled();\n      } catch (e) {\n        console.error('Initial validation error:', e);\n        \/\/ Enable button on error to allow submission\n        if (DOM.btn) DOM.btn.disabled = false;\n      }\n    }, 100);\n  });\n})();\n\/\/]]>\n<\/script>\n<\/body>\n<\/html>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-5872\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-5872\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Recurring clients<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-5872\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-5872\"><p>\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"2019\" class=\"elementor elementor-2019\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-edebdd8 elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"edebdd8\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"aux-parallax-section elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-85f025a\" data-id=\"85f025a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e82dd2b elementor-widget elementor-widget-html\" data-id=\"e82dd2b\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<br>\n<iframe src=\"https:\/\/docs.google.com\/forms\/d\/e\/1FAIpQLScDgOq7IWCJIqo1PFduMvxdbU3Gy0_tn0QA_JKmxHDBeBczvg\/viewform?embedded=true\" width=\"1000\" height=\"3100\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\">Loading\u2026<\/iframe>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Cerere catsitting pentru clien\u021bi noi FrauMiau \u2014 Formular clien\u021bi noi (v1.1.1) Formular clien\u021bi noi Nume Numar WhatsApp Email Adresa C\u00e2nd ai nevoie de serviciile noastre? C\u00e2te vizite pe zi? O vizit\u0103 Dou\u0103 vizite Alt\u0103 variant\u0103 Selecteaz\u0103 num\u0103rul de vizite pe zi Durata vizitei 30 min 60 min 90 min Selecteaz\u0103 durata vizitei Ore fixe pentru vizite? Da Nu C\u00e2te pisici ai? Animalele sunt imunizate\/tratate antiparazitar? Da Nu Exist\u0103 pisici teritoriale\/agresive? Da Nu Probleme de s\u0103n\u0103tate\/tratamente? Da Nu Detalii tratamente \/ probleme de s\u0103n\u0103tate \/ comportament \/ alte men\u021biuni Trimite Completeaz\u0103 formularul \u0219i apas\u0103 Trimite. Mul\u021bumim, te vom contacta \u00een cur\u00e2nd. Rezervare pentru clien\u021bi vechi Loading\u2026<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1780","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Rezervare catsitting Bucuresti | Trimite o cerere<\/title>\n<meta name=\"description\" content=\"Trimite o cerere de catsitting in Bucuresti sau Ilfov. Verificam disponibilitatea si revenim cu detalii clare, fara promisiuni automate.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fraumiau.ro\/en\/rezervari-catsitting\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rezervare catsitting Bucuresti | Trimite o cerere\" \/>\n<meta property=\"og:description\" content=\"Trimite o cerere de catsitting in Bucuresti sau Ilfov. Verificam disponibilitatea si revenim cu detalii clare, fara promisiuni automate.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fraumiau.ro\/en\/rezervari-catsitting\/\" \/>\n<meta property=\"og:site_name\" content=\"Frau Miau\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/FrauMiauCatsitting\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-07T21:21:08+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fraumiau.ro\/rezervari-catsitting\/\",\"url\":\"https:\/\/fraumiau.ro\/rezervari-catsitting\/\",\"name\":\"Rezervare catsitting Bucuresti | Trimite o cerere\",\"isPartOf\":{\"@id\":\"https:\/\/fraumiau.ro\/#website\"},\"datePublished\":\"2022-05-30T18:26:13+00:00\",\"dateModified\":\"2026-02-07T21:21:08+00:00\",\"description\":\"Trimite o cerere de catsitting in Bucuresti sau Ilfov. Verificam disponibilitatea si revenim cu detalii clare, fara promisiuni automate.\",\"breadcrumb\":{\"@id\":\"https:\/\/fraumiau.ro\/rezervari-catsitting\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fraumiau.ro\/rezervari-catsitting\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fraumiau.ro\/rezervari-catsitting\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fraumiau.ro\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rezervari\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fraumiau.ro\/#website\",\"url\":\"https:\/\/fraumiau.ro\/\",\"name\":\"Frau Miau\",\"description\":\"Frau Miau\",\"publisher\":{\"@id\":\"https:\/\/fraumiau.ro\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fraumiau.ro\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fraumiau.ro\/#organization\",\"name\":\"Frau Miau\",\"url\":\"https:\/\/fraumiau.ro\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fraumiau.ro\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fraumiau.ro\/wp-content\/uploads\/2020\/04\/frau_miau_logo_svg_1.svg\",\"contentUrl\":\"https:\/\/fraumiau.ro\/wp-content\/uploads\/2020\/04\/frau_miau_logo_svg_1.svg\",\"width\":250,\"height\":250,\"caption\":\"Frau Miau\"},\"image\":{\"@id\":\"https:\/\/fraumiau.ro\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/FrauMiauCatsitting\",\"https:\/\/www.instagram.com\/frau.miau.catsitting\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Rezervare catsitting Bucuresti | Trimite o cerere","description":"Trimite o cerere de catsitting in Bucuresti sau Ilfov. Verificam disponibilitatea si revenim cu detalii clare, fara promisiuni automate.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fraumiau.ro\/en\/rezervari-catsitting\/","og_locale":"en_US","og_type":"article","og_title":"Rezervare catsitting Bucuresti | Trimite o cerere","og_description":"Trimite o cerere de catsitting in Bucuresti sau Ilfov. Verificam disponibilitatea si revenim cu detalii clare, fara promisiuni automate.","og_url":"https:\/\/fraumiau.ro\/en\/rezervari-catsitting\/","og_site_name":"Frau Miau","article_publisher":"https:\/\/www.facebook.com\/FrauMiauCatsitting","article_modified_time":"2026-02-07T21:21:08+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/fraumiau.ro\/rezervari-catsitting\/","url":"https:\/\/fraumiau.ro\/rezervari-catsitting\/","name":"Rezervare catsitting Bucuresti | Trimite o cerere","isPartOf":{"@id":"https:\/\/fraumiau.ro\/#website"},"datePublished":"2022-05-30T18:26:13+00:00","dateModified":"2026-02-07T21:21:08+00:00","description":"Trimite o cerere de catsitting in Bucuresti sau Ilfov. Verificam disponibilitatea si revenim cu detalii clare, fara promisiuni automate.","breadcrumb":{"@id":"https:\/\/fraumiau.ro\/rezervari-catsitting\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fraumiau.ro\/rezervari-catsitting\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fraumiau.ro\/rezervari-catsitting\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fraumiau.ro\/"},{"@type":"ListItem","position":2,"name":"Rezervari"}]},{"@type":"WebSite","@id":"https:\/\/fraumiau.ro\/#website","url":"https:\/\/fraumiau.ro\/","name":"Frau Miau","description":"Frau Miau","publisher":{"@id":"https:\/\/fraumiau.ro\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fraumiau.ro\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fraumiau.ro\/#organization","name":"Frau Miau","url":"https:\/\/fraumiau.ro\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fraumiau.ro\/#\/schema\/logo\/image\/","url":"https:\/\/fraumiau.ro\/wp-content\/uploads\/2020\/04\/frau_miau_logo_svg_1.svg","contentUrl":"https:\/\/fraumiau.ro\/wp-content\/uploads\/2020\/04\/frau_miau_logo_svg_1.svg","width":250,"height":250,"caption":"Frau Miau"},"image":{"@id":"https:\/\/fraumiau.ro\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/FrauMiauCatsitting","https:\/\/www.instagram.com\/frau.miau.catsitting\/"]}]}},"_links":{"self":[{"href":"https:\/\/fraumiau.ro\/en\/wp-json\/wp\/v2\/pages\/1780","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fraumiau.ro\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fraumiau.ro\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fraumiau.ro\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fraumiau.ro\/en\/wp-json\/wp\/v2\/comments?post=1780"}],"version-history":[{"count":0,"href":"https:\/\/fraumiau.ro\/en\/wp-json\/wp\/v2\/pages\/1780\/revisions"}],"wp:attachment":[{"href":"https:\/\/fraumiau.ro\/en\/wp-json\/wp\/v2\/media?parent=1780"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}