{"version":3,"file":"bundle.js","sources":["../../node_modules/svelte/internal/index.mjs","../../node_modules/svelte/store/index.mjs","../../node_modules/svelte-routing/src/contexts.js","../../node_modules/svelte-routing/src/history.js","../../node_modules/svelte-routing/src/utils.js","../../node_modules/svelte-routing/src/Router.svelte","../../node_modules/svelte-routing/src/Route.svelte","../../node_modules/svelte-routing/src/actions.js","../../src/store.js","../../src/components/Header__Item.svelte","../../src/components/Header.svelte","../../src/components/Footer.svelte","../../src/components/Aviso.svelte","../../src/components/Instagram.svelte","../../src/components/Boleto.svelte","../../src/components/Whatsapp.svelte","../../src/components/PopUp.svelte","../../src/components/FormItem.svelte","../../src/components/Forms.svelte","../../src/components/Lettering.svelte","../../src/components/Busca.svelte","../../node_modules/svelte/easing/index.mjs","../../node_modules/svelte/transition/index.mjs","../../src/components/PageHeader.svelte","../../src/components/BarraCaracteristicas__Item.svelte","../../src/components/BarraCaracteristicas.svelte","../../src/components/Selos.svelte","../../src/components/CardImovel.svelte","../../src/components/ListaImoveis.svelte","../../src/routes/Home.svelte","../../src/routes/Imoveis.svelte","../../src/routes/Anuncie.svelte","../../src/components/GaleriaHero.svelte","../../src/components/Thumbs.svelte","../../src/components/LightGallery.svelte","../../src/components/Features.svelte","../../src/components/Share__Item.svelte","../../src/components/Share.svelte","../../src/routes/Imovel.svelte","../../src/routes/SoliciteImovel.svelte","../../src/components/BarraAtendimento.svelte","../../src/routes/Contato.svelte","../../src/routes/Sobre.svelte","../../src/routes/Favoritos.svelte","../../src/routes/FavoritosImobiliaria.svelte","../../src/routes/FavoritosAmigos.svelte","../../src/routes/Oops.svelte","../../src/routes/Obrigado.svelte","../../src/routes/TrabalheConosco.svelte","../../src/routes/TrabalheCondominios.svelte","../../src/routes/DocumentacaoNecessaria.svelte","../../src/routes/GarantiasLocaticias.svelte","../../src/routes/FichasCadastrais.svelte","../../src/routes/AdministracaoCondominios.svelte","../../src/routes/SoliciteProposta.svelte","../../src/routes/ServicosProprietarios.svelte","../../src/routes/NotFound.svelte","../../src/routes/FichaFiador.svelte","../../src/routes/FichaPessoaFisica.svelte","../../src/routes/FichaPessoaJuridica.svelte","../../src/routes/CartaoDoSindico.svelte","../../src/routes/ParcelinhaDigital.svelte","../../src/routes/DebitoEmConta.svelte","../../src/routes/ManualCondominios.svelte","../../src/routes/Parceiros.svelte","../../src/routes/PromocaoCarencia.svelte","../../src/routes/PoliticaPrivacidade.svelte","../../src/App.svelte","../../src/main.js"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not \n let children = target.childNodes;\n // If target is , there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentElement !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration(undefined, is_svg);\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value === null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n select.selectedIndex = -1; // no option should be selected\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor(is_svg = false) {\n this.is_svg = false;\n this.is_svg = is_svg;\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n if (this.is_svg)\n this.e = svg_element(target.nodeName);\n else\n this.e = element(target.nodeName);\n this.t = target;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes, is_svg = false) {\n super(is_svg);\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach(info => {\n const { stylesheet } = info;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n info.rules = {};\n });\n managed_styles.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail, { cancelable = false } = {}) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail, { cancelable });\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n return !event.defaultPrevented;\n }\n return true;\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n return context;\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst void_element_names = /^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\nfunction is_void(name) {\n return void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, attrs_to_add) {\n const attributes = Object.assign({}, ...args);\n if (attrs_to_add) {\n const classes_to_add = attrs_to_add.classes;\n const styles_to_add = attrs_to_add.styles;\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n if (styles_to_add) {\n if (attributes.style == null) {\n attributes.style = style_object_to_string(styles_to_add);\n }\n else {\n attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n }\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n const style_object = {};\n for (const individual_style of style_attribute.split(';')) {\n const colon_index = individual_style.indexOf(':');\n const name = individual_style.slice(0, colon_index).trim();\n const value = individual_style.slice(colon_index + 1).trim();\n if (!name)\n continue;\n style_object[name] = value;\n }\n for (const name in style_directive) {\n const value = style_directive[name];\n if (value) {\n style_object[name] = value;\n }\n else {\n delete style_object[name];\n }\n }\n return style_object;\n}\nconst escaped = {\n '\"': '"',\n \"'\": ''',\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escape(html) {\n return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\nfunction escape_attribute_value(value) {\n return typeof value === 'string' ? escape(value) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n const assignment = (boolean && value === true) ? '' : `=\"${escape_attribute_value(value.toString())}\"`;\n return ` ${name}${assignment}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object)\n .filter(key => style_object[key])\n .map(key => `${key}: ${style_object[key]};`)\n .join(' ');\n}\nfunction add_styles(style_object) {\n const styles = style_object_to_string(style_object);\n return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.48.0' }, detail), { bubbles: true }));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nfunction validate_dynamic_element(tag) {\n const is_string = typeof tag === 'string';\n if (tag && !is_string) {\n throw new Error(' expects \"this\" attribute to be a string.');\n }\n}\nfunction validate_void_dynamic_element(tag) {\n if (tag && is_void(tag)) {\n throw new Error(` is self-closing and cannot have content.`);\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * \n * \n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, HtmlTagHydration, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_styles, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, identity, init, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, is_void, listen, listen_dev, loop, loop_guard, merge_ssr_styles, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, src_url_equal, start_hydrating, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_dynamic_element, validate_each_argument, validate_each_keys, validate_slots, validate_store, validate_void_dynamic_element, xlink_attr };\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal/index.mjs';\nexport { get_store_value as get } from '../internal/index.mjs';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = new Set();\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (const subscriber of subscribers) {\n subscriber[1]();\n subscriber_queue.push(subscriber, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.add(subscriber);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n subscribers.delete(subscriber);\n if (subscribers.size === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n}\n\nexport { derived, readable, writable };\n","export const LOCATION = {};\nexport const ROUTER = {};\n","/**\n * Adapted from https://github.com/reach/router/blob/b60e6dd781d5d3a4bdaaf4de665649c0f6a7e78d/src/lib/history.js\n *\n * https://github.com/reach/router/blob/master/LICENSE\n * */\n\nfunction getLocation(source) {\n return {\n ...source.location,\n state: source.history.state,\n key: (source.history.state && source.history.state.key) || \"initial\"\n };\n}\n\nfunction createHistory(source, options) {\n const listeners = [];\n let location = getLocation(source);\n\n return {\n get location() {\n return location;\n },\n\n listen(listener) {\n listeners.push(listener);\n\n const popstateListener = () => {\n location = getLocation(source);\n listener({ location, action: \"POP\" });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n\n return () => {\n source.removeEventListener(\"popstate\", popstateListener);\n\n const index = listeners.indexOf(listener);\n listeners.splice(index, 1);\n };\n },\n\n navigate(to, { state, replace = false } = {}) {\n state = { ...state, key: Date.now() + \"\" };\n // try...catch iOS Safari limits to 100 pushState calls\n try {\n if (replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n\n location = getLocation(source);\n listeners.forEach(listener => listener({ location, action: \"PUSH\" }));\n }\n };\n}\n\n// Stores history entries in memory for testing or other platforms like Native\nfunction createMemorySource(initialPathname = \"/\") {\n let index = 0;\n const stack = [{ pathname: initialPathname, search: \"\" }];\n const states = [];\n\n return {\n get location() {\n return stack[index];\n },\n addEventListener(name, fn) {},\n removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n get index() {\n return index;\n },\n get state() {\n return states[index];\n },\n pushState(state, _, uri) {\n const [pathname, search = \"\"] = uri.split(\"?\");\n index++;\n stack.push({ pathname, search });\n states.push(state);\n },\n replaceState(state, _, uri) {\n const [pathname, search = \"\"] = uri.split(\"?\");\n stack[index] = { pathname, search };\n states[index] = state;\n }\n }\n };\n}\n\n// Global history uses window.history as the source if available,\n// otherwise a memory history\nconst canUseDOM = Boolean(\n typeof window !== \"undefined\" &&\n window.document &&\n window.document.createElement\n);\nconst globalHistory = createHistory(canUseDOM ? window : createMemorySource());\nconst { navigate } = globalHistory;\n\nexport { globalHistory, navigate, createHistory, createMemorySource };\n","/**\n * Adapted from https://github.com/reach/router/blob/b60e6dd781d5d3a4bdaaf4de665649c0f6a7e78d/src/lib/utils.js\n *\n * https://github.com/reach/router/blob/master/LICENSE\n * */\n\nconst paramRe = /^:(.+)/;\n\nconst SEGMENT_POINTS = 4;\nconst STATIC_POINTS = 3;\nconst DYNAMIC_POINTS = 2;\nconst SPLAT_PENALTY = 1;\nconst ROOT_POINTS = 1;\n\n/**\n * Check if `string` starts with `search`\n * @param {string} string\n * @param {string} search\n * @return {boolean}\n */\nexport function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}\n\n/**\n * Check if `segment` is a root segment\n * @param {string} segment\n * @return {boolean}\n */\nfunction isRootSegment(segment) {\n return segment === \"\";\n}\n\n/**\n * Check if `segment` is a dynamic segment\n * @param {string} segment\n * @return {boolean}\n */\nfunction isDynamic(segment) {\n return paramRe.test(segment);\n}\n\n/**\n * Check if `segment` is a splat\n * @param {string} segment\n * @return {boolean}\n */\nfunction isSplat(segment) {\n return segment[0] === \"*\";\n}\n\n/**\n * Split up the URI into segments delimited by `/`\n * @param {string} uri\n * @return {string[]}\n */\nfunction segmentize(uri) {\n return (\n uri\n // Strip starting/ending `/`\n .replace(/(^\\/+|\\/+$)/g, \"\")\n .split(\"/\")\n );\n}\n\n/**\n * Strip `str` of potential start and end `/`\n * @param {string} str\n * @return {string}\n */\nfunction stripSlashes(str) {\n return str.replace(/(^\\/+|\\/+$)/g, \"\");\n}\n\n/**\n * Score a route depending on how its individual segments look\n * @param {object} route\n * @param {number} index\n * @return {object}\n */\nfunction rankRoute(route, index) {\n const score = route.default\n ? 0\n : segmentize(route.path).reduce((score, segment) => {\n score += SEGMENT_POINTS;\n\n if (isRootSegment(segment)) {\n score += ROOT_POINTS;\n } else if (isDynamic(segment)) {\n score += DYNAMIC_POINTS;\n } else if (isSplat(segment)) {\n score -= SEGMENT_POINTS + SPLAT_PENALTY;\n } else {\n score += STATIC_POINTS;\n }\n\n return score;\n }, 0);\n\n return { route, score, index };\n}\n\n/**\n * Give a score to all routes and sort them on that\n * @param {object[]} routes\n * @return {object[]}\n */\nfunction rankRoutes(routes) {\n return (\n routes\n .map(rankRoute)\n // If two routes have the exact same score, we go by index instead\n .sort((a, b) =>\n a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index\n )\n );\n}\n\n/**\n * Ranks and picks the best route to match. Each segment gets the highest\n * amount of points, then the type of segment gets an additional amount of\n * points where\n *\n * static > dynamic > splat > root\n *\n * This way we don't have to worry about the order of our routes, let the\n * computers do it.\n *\n * A route looks like this\n *\n * { path, default, value }\n *\n * And a returned match looks like:\n *\n * { route, params, uri }\n *\n * @param {object[]} routes\n * @param {string} uri\n * @return {?object}\n */\nfunction pick(routes, uri) {\n let match;\n let default_;\n\n const [uriPathname] = uri.split(\"?\");\n const uriSegments = segmentize(uriPathname);\n const isRootUri = uriSegments[0] === \"\";\n const ranked = rankRoutes(routes);\n\n for (let i = 0, l = ranked.length; i < l; i++) {\n const route = ranked[i].route;\n let missed = false;\n\n if (route.default) {\n default_ = {\n route,\n params: {},\n uri\n };\n continue;\n }\n\n const routeSegments = segmentize(route.path);\n const params = {};\n const max = Math.max(uriSegments.length, routeSegments.length);\n let index = 0;\n\n for (; index < max; index++) {\n const routeSegment = routeSegments[index];\n const uriSegment = uriSegments[index];\n\n if (routeSegment !== undefined && isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/* or /files/*splatname\n const splatName = routeSegment === \"*\" ? \"*\" : routeSegment.slice(1);\n\n params[splatName] = uriSegments\n .slice(index)\n .map(decodeURIComponent)\n .join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n let dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n const value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route,\n params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}\n\n/**\n * Check if the `path` matches the `uri`.\n * @param {string} path\n * @param {string} uri\n * @return {?object}\n */\nfunction match(route, uri) {\n return pick([route], uri);\n}\n\n/**\n * Add the query to the pathname if a query is given\n * @param {string} pathname\n * @param {string} [query]\n * @return {string}\n */\nfunction addQuery(pathname, query) {\n return pathname + (query ? `?${query}` : \"\");\n}\n\n/**\n * Resolve URIs as though every path is a directory, no files. Relative URIs\n * in the browser can feel awkward because not only can you be \"in a directory\",\n * you can be \"at a file\", too. For example:\n *\n * browserSpecResolve('foo', '/bar/') => /bar/foo\n * browserSpecResolve('foo', '/bar') => /foo\n *\n * But on the command line of a file system, it's not as complicated. You can't\n * `cd` from a file, only directories. This way, links have to know less about\n * their current path. To go deeper you can do this:\n *\n * \n * // instead of\n * \n *\n * Just like `cd`, if you want to go deeper from the command line, you do this:\n *\n * cd deeper\n * # not\n * cd $(pwd)/deeper\n *\n * By treating every path as a directory, linking to relative paths should\n * require less contextual information and (fingers crossed) be more intuitive.\n * @param {string} to\n * @param {string} base\n * @return {string}\n */\nfunction resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n const [toPathname, toQuery] = to.split(\"?\");\n const [basePathname] = base.split(\"?\");\n const toSegments = segmentize(toPathname);\n const baseSegments = segmentize(basePathname);\n\n // ?a=b, /users?b=c => /users?a=b\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n }\n\n // profile, /users/789 => /users/789/profile\n if (!startsWith(toSegments[0], \".\")) {\n const pathname = baseSegments.concat(toSegments).join(\"/\");\n\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n }\n\n // ./ , /users/123 => /users/123\n // ../ , /users/123 => /users\n // ../.. , /users/123 => /\n // ../../one, /a/b/c/d => /a/b/one\n // .././one , /a/b/c/d => /a/b/c/one\n const allSegments = baseSegments.concat(toSegments);\n const segments = [];\n\n allSegments.forEach(segment => {\n if (segment === \"..\") {\n segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}\n\n/**\n * Combines the `basepath` and the `path` into one path.\n * @param {string} basepath\n * @param {string} path\n */\nfunction combinePaths(basepath, path) {\n return `${stripSlashes(\n path === \"/\" ? basepath : `${stripSlashes(basepath)}/${stripSlashes(path)}`\n )}/`;\n}\n\n/**\n * Decides whether a given `event` should result in a navigation or not.\n * @param {object} event\n */\nfunction shouldNavigate(event) {\n return (\n !event.defaultPrevented &&\n event.button === 0 &&\n !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey)\n );\n}\n\nfunction hostMatches(anchor) {\n const host = location.host\n return (\n anchor.host == host ||\n // svelte seems to kill anchor.host value in ie11, so fall back to checking href\n anchor.href.indexOf(`https://${host}`) === 0 ||\n anchor.href.indexOf(`http://${host}`) === 0\n )\n}\n\nexport { stripSlashes, pick, match, resolve, combinePaths, shouldNavigate, hostMatches };\n","\n\n\n","\n\n{#if $activeRoute !== null && $activeRoute.route === route}\n {#if component !== null}\n \n {:else}\n \n {/if}\n{/if}\n","import { navigate } from \"./history.js\";\nimport { shouldNavigate, hostMatches } from \"./utils.js\";\n\n/**\n * A link action that can be added to tags rather\n * than using the component.\n *\n * Example:\n * ```html\n * {post.title}\n * ```\n */\nfunction link(node) {\n function onClick(event) {\n const anchor = event.currentTarget;\n\n if (\n anchor.target === \"\" &&\n hostMatches(anchor) &&\n shouldNavigate(event)\n ) {\n event.preventDefault();\n navigate(anchor.pathname + anchor.search, { replace: anchor.hasAttribute(\"replace\") });\n }\n }\n\n node.addEventListener(\"click\", onClick);\n\n return {\n destroy() {\n node.removeEventListener(\"click\", onClick);\n }\n };\n}\n\n/**\n * An action to be added at a root element of your application to\n * capture all relative links and push them onto the history stack.\n *\n * Example:\n * ```html\n *
\n * \n * \n * \n * {#each projects as project}\n * {project.title}\n * {/each}\n * \n *
\n * ```\n */\nfunction links(node) {\n function findClosest(tagName, el) {\n while (el && el.tagName !== tagName) {\n el = el.parentNode;\n }\n return el;\n }\n\n function onClick(event) {\n const anchor = findClosest(\"A\", event.target);\n\n if (\n anchor &&\n anchor.target === \"\" &&\n hostMatches(anchor) &&\n shouldNavigate(event) &&\n !anchor.hasAttribute(\"noroute\")\n ) {\n event.preventDefault();\n navigate(anchor.pathname + anchor.search, { replace: anchor.hasAttribute(\"replace\") });\n }\n }\n\n node.addEventListener(\"click\", onClick);\n\n return {\n destroy() {\n node.removeEventListener(\"click\", onClick);\n }\n };\n}\n\nexport { link, links };\n","import { writable } from 'svelte/store';\r\n\r\nlet siteText = 'Bona Imóveis';\r\nlet siteDescription = 'Imobiliária - Porto Alegre - RS';\r\n\r\nexport let tagsSEO = writable('Serviços Especializados
para Condomínios, Síndico
Profissional, Locação e
Venda de Imóveis em
Porto Alegre - RS.');\r\n\r\nexport const alt\t\t\t\t= writable(siteText);\r\nexport const headerTitleHome\t= writable(siteText + \" | \" + siteDescription);\r\nexport const headerTitle\t\t= writable(\"| \" + siteText);\r\nexport const textSite\t\t\t= writable(siteText);\r\n\r\nexport const ntRent\t\t\t= writable('2');\r\nexport const ntSeason\t\t= writable('0');\r\nexport const ntSell\t\t\t= writable('1');\r\n\r\n// E-mails\r\nexport const mailAtendimento\t= writable(\"ana.claudia@bonaimoveis.com.br\");\r\nexport const mailLocacao\t\t= writable(\"augusto.garcia@bonaimoveis.com.br\");\r\nexport const mailVendas\t\t\t= writable(\"augusto.garcia@bonaimoveis.com.br\");\r\nexport const mailCondominios\t= writable(\"ana.claudia@bonaimoveis.com.br\");\r\nexport const mailProposta\t\t= writable(\"ana.claudia@bonaimoveis.com.br\");\r\nexport const mailLista\t\t\t= writable(\"augusto.garcia@bonaimoveis.com.br\");\r\nexport const mailCadastro\t\t= writable(\"augusto.garcia@bonaimoveis.com.br\");\r\nexport const mailAtualize\t\t= writable(\"augusto.garcia@bonaimoveis.com.br\");\r\nexport const mailDocumentacao\t= writable(\"augusto.garcia@bonaimoveis.com.br\");\r\nexport const mailOuvidoria\t\t= writable(\"breno@bonaimoveis.com.br\");\r\nexport const mailRH\t\t\t\t= writable(\"rh@bonaimoveis.com.br\");\r\n\r\nexport const textTelefoneVendas\t\t= writable(\"\");\r\nexport const linkTelefoneVendas\t\t= writable(\"\");\r\n\r\nexport const textTelefoneLocacao\t= writable(\"\");\r\nexport const linkTelefoneLocacao\t= writable(\"\");\r\n\r\nexport const textTelefoneCondominio\t= writable(\"\");\r\nexport const linkTelefoneCondominio\t= writable(\"\");\r\n\r\nexport const linkVideoVimeo\t\t\t= writable(\"https://player.vimeo.com/video/\");\r\nexport const linkVideoYoutube\t\t= writable(\"https://www.youtube.com/embed/\");\r\n\r\nexport const whatsappGeral\t\t\t= writable(\"555133331662\");\r\nexport const textWhatsappGeral\t\t= writable(\"(51) 3333-1662\");\r\nexport const linkWhatsappGeral\t\t= writable(\"https://wa.me/555133331662\");\r\n\r\nexport const whatsappVendas\t\t\t= writable(\"5551995904434\");\r\nexport const textWhatsappVendas\t\t= writable(\"(51) 99590-4434\");\r\nexport const linkWhatsappVendas\t\t= writable(\"https://wa.me/5551995904434\");\r\n\r\nexport const whatsappLocacao\t\t= writable(\"5551995904434\");\r\nexport const textWhatsappLocacao\t= writable(\"(51) 99590-4434\");\r\nexport const linkWhatsappLocacao\t= writable(\"https://wa.me/5551995904434\");\r\n\r\nexport const whatsappDocumentacao\t\t= writable(\"5551995904434\");\r\nexport const textWhatsappDocumentacao\t= writable(\"(51) 99590-4434\");\r\nexport const linkWhatsappDocumentacao\t= writable(\"https://wa.me/5551995904434\");\r\n\r\nexport const whatsappCondominio\t\t= writable(\"5551995726944\");\r\nexport const textWhatsappCondominio\t= writable(\"(51) 99572-6944\");\r\nexport const linkWhatsappCondominio\t= writable(\"https://wa.me/5551995726944\");\r\n\r\nexport const whatsappProposta\t\t= writable(\"5551995551974\");\r\nexport const textWhatsappProposta\t= writable(\"(51) 99555-1974\");\r\nexport const linkWhatsappProposta\t= writable(\"https://wa.me/5551995551974\");\r\n\r\n// Links\r\nexport const linkPesquisaVendas\t\t= writable(\"/imoveis/vendas#tipo_negociacao=1\");\r\nexport const linkPesquisaLocacao\t= writable(\"/imoveis/locacao#tipo_negociacao=2\");\r\n\r\n// Redes Sociais e Atendimento\r\nexport const linkFacebook = writable(\"https://www.facebook.com/imoveisbona\");\r\nexport const linkInstagram = writable(\"https://www.instagram.com/bona_imoveis/\");\r\nexport const linkYoutube = writable(\"https://www.youtube.com/channel/UC_gRLLfwOcRefAS3X-4Yl6A\");\r\nexport const linkLinkedin = writable(\"https://www.linkedin.com/company/40907977/admin/feed/posts/\");\r\nexport const linkTwitter = writable(\"\");\r\nexport const linkBlog\t = writable(\"\");\r\n\r\nexport const linkMapa = writable(\"https://g.page/bonaimobiliaria?share\");\r\nexport const linkWaze = writable(\"https://ul.waze.com/ul?preview_venue_id=202376668.2023832214.7046398&navigate=yes&utm_campaign=default&utm_source=waze_website&utm_medium=lm_share_location\");\r\nexport const linkUber = writable(\"https://m.uber.com/ul/?action=setPickup&client_id=jpmkyUPUTAew_7fS3nna-Mdxx58NK-w1&pickup=my_location&dropoff[formatted_address]=Bona%20Administradora%20Im%C3%B3veis%20Ltda%20-%20Rua%20Carlos%20Trein%20Filho%20-%20Auxiliadora%2C%20Porto%20Alegre%20-%20RS%2C%20Brasil&dropoff[latitude]=-30.024441&dropoff[longitude]=-51.187458\");\r\nexport const linkIframeMapa = writable(\"https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3454.432907224426!2d-51.18964658429481!3d-30.024435837307962!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x951979d2ffb16caf%3A0xcf6702f0fbd07c77!2sBona%20Administradora%20Im%C3%B3veis%20Ltda!5e0!3m2!1spt-BR!2sbr!4v1659467312993!5m2!1spt-BR!2sbr\");\r\n\r\n\r\nexport const linkAPI = writable(\"http://www.api.com.br\");\r\nexport const linkAV = writable(\"https://digital.bonaimoveis.com.br/bonaimoveisdigital/dashboard\");\r\nexport const linkConheca = writable(\"https://digital.bonaimoveis.com.br/conheca/\");\r\nexport const linkSolicite = writable(\"https://digital.bonaimoveis.com.br/bonaimoveisdigital/login?help=1\");\r\nexport const linkBoletoFacil = writable(\"https://digital.bonaimoveis.com.br/bonaimoveisdigital/login?boleto-facil=1\");\r\n\r\nexport const linkManualSindico \t\t= writable(\"/assets/files/Guia_de_Orientacao_do_Sindico_JUN18.pdf\");\r\n\r\nexport const textAtendimento = writable(\"De Segunda à Sexta-Feira, das 08h30min às 12h e das 13h às 17h.\");\r\nexport const textEndereco = writable(\"Rua Carlos Trein Filho, 257, bairro Mont Serrat, Porto Alegre - RS.\");\r\nexport const textCNPJ = writable(\"94.350.907/0001-24\");\r\nexport const textCreci = writable(\"21708\");\r\n\r\nexport const linkPoliticaPrivacidade\t= writable(\"/assets/files/PoliticaDePrivacidade.pdf\");\r\nexport const linkPoliticaCookies\t\t= writable(\"/assets/files/PoliticaDePrivacidade.pdf\");\r\n\r\nexport const textPoliticaCheck \t\t\t= writable(\"Aceito compartilhar meus dados de acordo com a Política de Privacidade da Bona Imóveis. Estou ciente e concordo em receber todas as comunicações relativas ao meu cadastro, incluindo comunicados, informações e promoções.\");\r\n\r\n\r\nexport const todosContatos = writable([\r\n\t{\r\n\t\ttitle: 'Atendimento geral',\r\n\t\ticon: '',\r\n\t\thref: 'tel://5133331662',\r\n\t\ttarget: '_blank',\r\n\t\tphone: '(51) 3333-1662'\r\n\t},\r\n\t{\r\n\t\ttitle: 'Locação / Anuncie Imóvel',\r\n\t\ticon: '',\r\n\t\thref: 'https://wa.me/5551995904434',\r\n\t\ttarget: '_blank',\r\n\t\tphone: '(51) 99590-4434'\r\n\t},\r\n\t{\r\n\t\ttitle: 'Condomínios / Manutenção',\r\n\t\ticon: '',\r\n\t\thref: 'https://wa.me/5551995726944',\r\n\t\ttarget: '_blank',\r\n\t\tphone: '(51) 99572-6944'\r\n\t},\r\n\t{\r\n\t\ttitle: 'Proposta de administração',\r\n\t\ticon: '',\r\n\t\thref: 'https://wa.me/5551995551974',\r\n\t\ttarget: '_blank',\r\n\t\tphone: '(51) 99555-1974'\r\n\t},\r\n\t{\r\n\t\ttitle: 'Mapfre assistência',\r\n\t\ticon: '',\r\n\t\thref: 'tel://08007754545',\r\n\t\ttarget: '_blank',\r\n\t\tphone: '0800 775 4545'\r\n\t}\r\n]);\r\n\r\nexport const propostaContatos = writable([\r\n\t{\r\n\t\ttitle: 'Proposta de administração',\r\n\t\ticon: '',\r\n\t\thref: 'https://wa.me/5551995551974',\r\n\t\ttarget: '_blank',\r\n\t\tphone: '(51) 99555-1974'\r\n\t},\r\n\t{\r\n\t\ttitle: 'Atendimento geral',\r\n\t\ticon: '',\r\n\t\thref: 'tel://5133331662',\r\n\t\ttarget: '_blank',\r\n\t\tphone: '(51) 3333-1662'\r\n\t},\r\n]);\r\n\r\nexport const comoChegar = writable([\r\n\t{\r\n\t\ttitle: 'Mapa',\r\n\t\ticon: '',\r\n\t\tlink: 'https://g.page/bonaimobiliaria?share',\r\n\t},\r\n\t{\r\n\t\ttitle: 'Waze',\r\n\t\ticon: '',\r\n\t\tlink: 'https://ul.waze.com/ul?preview_venue_id=202376668.2023832214.7046398&navigate=yes&utm_campaign=default&utm_source=waze_website&utm_medium=lm_share_location',\r\n\t},\r\n\t{\r\n\t\ttitle: 'Uber',\r\n\t\ticon: '',\r\n\t\tlink: 'https://m.uber.com/ul/?action=setPickup&client_id=jpmkyUPUTAew_7fS3nna-Mdxx58NK-w1&pickup=my_location&dropoff[formatted_address]=Bona%20Administradora%20Im%C3%B3veis%20Ltda%20-%20Rua%20Carlos%20Trein%20Filho%20-%20Auxiliadora%2C%20Porto%20Alegre%20-%20RS%2C%20Brasil&dropoff[latitude]=-30.024441&dropoff[longitude]=-51.187458',\r\n\t}\r\n]);","\r\n{#if subitems != null && subitems.length > 0}\r\n\t
  • \r\n\t\t\r\n\t\t\t{@html title} {@html icon}\r\n\t\t\r\n\t\t
    \r\n\t\t\t{#each subitems as submenu}\r\n\t\t\t\t{#if submenu.separator }\r\n\t\t\t\t\t
    \r\n\t\t\t\t{:else if submenu.useLink == false}\r\n\t\t\t\t\t { if(submenu.forceReload){forceReload();}}}>\r\n\t\t\t\t\t\t{submenu.title}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{submenu.title}\r\n\t\t\t\t\t\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t { if(submenu.forceReload){forceReload();}}}>\r\n\t\t\t\t\t\t{submenu.title}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{submenu.title}\r\n\t\t\t\t\t\r\n\t\t\t\t{/if}\r\n\t\t\t{/each}\r\n\t\t
    \r\n\t
  • \r\n{:else}\r\n\t
  • \r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{@html icon}\r\n\t\t\t \r\n\t\t\t{@html title} \r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{@html icon}\r\n\t\t\t \r\n\t\t\t{@html title}\r\n\t\t\r\n\t
  • \r\n{/if}\r\n\r\n","\r\n\r\n
    \r\n\t
    \r\n\t\t\r\n\t
    \r\n
    \r\n
    \r\n\tBuscar imóveis\r\n
    \r\n\r\n\r\n","\r\n\r\n
    \r\n\t
    \r\n\t\t
    \r\n\r\n\t\t\t
    \r\n\t\t\t\tProposta de administração\r\n\t\t\t
    \r\n\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\t {$textWhatsappProposta}\r\n\t\t\t\t\r\n\t\t\t
    \r\n\r\n\t\t\t
    \r\n\t\t\t\tou\r\n\t\t\t
    \r\n\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\t Solicite aqui\r\n\t\t\t\t\r\n\t\t\t
    \r\n\r\n\t\t\t
    \r\n\t\t\t\t|\r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \t\t\t\r\n\r\n\t\t\t
    \r\n\t\t\t\tAnuncie seu imóvel\r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\t {$textWhatsappLocacao}\r\n\t\t\t\t\r\n\t\t\t
    \r\n\r\n\t\t\t
    \r\n\t\t\t\tou\r\n\t\t\t
    \r\n\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\t Anuncie aqui\r\n\t\t\t\t\r\n\t\t\t
    \t\t\t\r\n\r\n\t\t
    \r\n\t
    \r\n
    \r\n
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\"Logotipo\"\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Horário de atendimento

    \r\n\t\t\t\t\t

    {@html $textAtendimento}

    \r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t{#each $todosContatos as contato}\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t

    {contato.title} -

    {@html contato.icon} {contato.phone}\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t{/each}\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    {@html $tagsSEO}

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Localização

    \r\n\t\t\t\t\t

    {@html $textEndereco}

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t Mapa\r\n\t\t\t\t\t\t Waze\r\n\t\t\t\t\t\t Uber\r\n\t\t\t\t\t
    \r\n\t\t\t\t\tPolítica de Privacidade\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\"Sede\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t@ 2022 - Bona Imóveis - CRECI {$textCreci} - CNPJ {$textCNPJ} - Todos os direitos reservados - Desenvolvido por API\r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    ","\r\n\r\n\r\n
    \r\n

    Utilizamos cookies para melhorar a sua experiência com a gente. Você pode gerenciar e bloquear os cookies através das configurações de seu navegador ou software. O bloqueio de cookies poderá prejudicar o funcionamento de algumas partes de nosso site. Ao continuar navegando, você concorda com estas condições.

    \r\n \r\n
    \r\n\r\n","\r\n\r\n{#await feed}\r\nCarregando\r\n{:then data}\r\n\t
    \r\n\t\t{#each data as post}\r\n\t\t
    \r\n\t\t\t{#if post.media_type == 'VIDEO'}\r\n\t\t\t\t\r\n\t\t\t\t\t\"{post.caption}\"\r\n\t\t\t\t\r\n\t\t\t{:else}\r\n\t\t\t\t\r\n\t\t\t\t\t\"{post.caption}\"\r\n\t\t\t\t\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t\t{/each}\r\n\t
    \r\n{/await}\r\n\r\n","\r\n\r\n\r\n\t\r\n\t\t\"Boleto\"\r\n\t\r\n","\r\n\r\n\r\n\t\r\n\t\t\"Boleto\r\n\t\r\n","","\r\n\r\n{#if showLabel == true}\r\n\t{#if type === 'select'}\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t{#if obs.length > 0}\r\n\t\t\t{obs}\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t{:else if type === 'textarea'}\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t{#if obs.length > 0}\r\n\t\t\t{obs}\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t{:else if type === 'fileinput'}\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t{#if obs.length > 0}\r\n\t\t\t{obs}\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t{:else if type === 'checkbox'}\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t{#if obs.length > 0}\r\n\t\t\t{obs}\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t{:else if type === 'radio'}\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t{#if obs.length > 0}\r\n\t\t\t{obs}\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t{:else if type === 'separator'}\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    {title}
    \r\n\t\t\t{#if obs.length > 0}\r\n\t\t\t{obs}\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t{:else}\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t{#if obs.length > 0}\r\n\t\t\t{obs}\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t{/if}\r\n{:else}\r\n\t{#if type === 'select'}\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t{#if obs.length > 0}\r\n\t\t\t{obs}\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t{:else if type === 'textarea'}\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t{#if obs.length > 0}\r\n\t\t\t{obs}\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t{:else}\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t{#if obs.length > 0}\r\n\t\t\t{obs}\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t{/if}\r\n{/if}","\r\n
    \r\n{#if boxContato == false} \r\n\t{#each fields as field}\r\n\t\t\r\n\t{/each}\r\n\t
    \r\n\t\t{#if loading}\r\n\t\t\r\n\t\t{:else}\r\n\t\t\r\n\t\t{/if}\r\n\t
    \r\n{:else}\r\n\t{#each fields as field}\r\n\t\t\r\n\t{/each}\r\n\t
    \r\n\t\t{#if loading}\r\n\t\t\r\n\t\t{:else}\r\n\t\t\r\n\t\t{/if}\r\n\t
    \r\n{/if}\r\n","\r\n\r\n

    A gestão inteligente
    do seu

    ","\r\n\r\n\r\n\r\n","export { identity as linear } from '../internal/index.mjs';\n\n/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nfunction backInOut(t) {\n const s = 1.70158 * 1.525;\n if ((t *= 2) < 1)\n return 0.5 * (t * t * ((s + 1) * t - s));\n return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\nfunction backIn(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n}\nfunction backOut(t) {\n const s = 1.70158;\n return --t * t * ((s + 1) * t + s) + 1;\n}\nfunction bounceOut(t) {\n const a = 4.0 / 11.0;\n const b = 8.0 / 11.0;\n const c = 9.0 / 10.0;\n const ca = 4356.0 / 361.0;\n const cb = 35442.0 / 1805.0;\n const cc = 16061.0 / 1805.0;\n const t2 = t * t;\n return t < a\n ? 7.5625 * t2\n : t < b\n ? 9.075 * t2 - 9.9 * t + 3.4\n : t < c\n ? ca * t2 - cb * t + cc\n : 10.8 * t * t - 20.52 * t + 10.72;\n}\nfunction bounceInOut(t) {\n return t < 0.5\n ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\n : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\nfunction bounceIn(t) {\n return 1.0 - bounceOut(1.0 - t);\n}\nfunction circInOut(t) {\n if ((t *= 2) < 1)\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\nfunction circIn(t) {\n return 1.0 - Math.sqrt(1.0 - t * t);\n}\nfunction circOut(t) {\n return Math.sqrt(1 - --t * t);\n}\nfunction cubicInOut(t) {\n return t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n const f = t - 1.0;\n return f * f * f + 1.0;\n}\nfunction elasticInOut(t) {\n return t < 0.5\n ? 0.5 *\n Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) *\n Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n : 0.5 *\n Math.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n Math.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n 1.0;\n}\nfunction elasticIn(t) {\n return Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction elasticOut(t) {\n return (Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0);\n}\nfunction expoInOut(t) {\n return t === 0.0 || t === 1.0\n ? t\n : t < 0.5\n ? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n : -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\nfunction expoIn(t) {\n return t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction expoOut(t) {\n return t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\nfunction quadInOut(t) {\n t /= 0.5;\n if (t < 1)\n return 0.5 * t * t;\n t--;\n return -0.5 * (t * (t - 2) - 1);\n}\nfunction quadIn(t) {\n return t * t;\n}\nfunction quadOut(t) {\n return -t * (t - 2.0);\n}\nfunction quartInOut(t) {\n return t < 0.5\n ? +8.0 * Math.pow(t, 4.0)\n : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\nfunction quartIn(t) {\n return Math.pow(t, 4.0);\n}\nfunction quartOut(t) {\n return Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\nfunction quintInOut(t) {\n if ((t *= 2) < 1)\n return 0.5 * t * t * t * t * t;\n return 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\nfunction quintIn(t) {\n return t * t * t * t * t;\n}\nfunction quintOut(t) {\n return --t * t * t * t * t + 1;\n}\nfunction sineInOut(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n}\nfunction sineIn(t) {\n const v = Math.cos(t * Math.PI * 0.5);\n if (Math.abs(v) < 1e-14)\n return 1;\n else\n return 1 - v;\n}\nfunction sineOut(t) {\n return Math.sin((t * Math.PI) / 2);\n}\n\nexport { backIn, backInOut, backOut, bounceIn, bounceInOut, bounceOut, circIn, circInOut, circOut, cubicIn, cubicInOut, cubicOut, elasticIn, elasticInOut, elasticOut, expoIn, expoInOut, expoOut, quadIn, quadInOut, quadOut, quartIn, quartInOut, quartOut, quintIn, quintInOut, quintOut, sineIn, sineInOut, sineOut };\n","import { cubicInOut, linear, cubicOut } from '../easing/index.mjs';\nimport { is_function, assign } from '../internal/index.mjs';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\nfunction blur(node, { delay = 0, duration = 400, easing = cubicInOut, amount = 5, opacity = 0 } = {}) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const f = style.filter === 'none' ? '' : style.filter;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (_t, u) => `opacity: ${target_opacity - (od * u)}; filter: ${f} blur(${u * amount}px);`\n };\n}\nfunction fade(node, { delay = 0, duration = 400, easing = linear } = {}) {\n const o = +getComputedStyle(node).opacity;\n return {\n delay,\n duration,\n easing,\n css: t => `opacity: ${t * o}`\n };\n}\nfunction fly(node, { delay = 0, duration = 400, easing = cubicOut, x = 0, y = 0, opacity = 0 } = {}) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const transform = style.transform === 'none' ? '' : style.transform;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * x}px, ${(1 - t) * y}px);\n\t\t\topacity: ${target_opacity - (od * u)}`\n };\n}\nfunction slide(node, { delay = 0, duration = 400, easing = cubicOut } = {}) {\n const style = getComputedStyle(node);\n const opacity = +style.opacity;\n const height = parseFloat(style.height);\n const padding_top = parseFloat(style.paddingTop);\n const padding_bottom = parseFloat(style.paddingBottom);\n const margin_top = parseFloat(style.marginTop);\n const margin_bottom = parseFloat(style.marginBottom);\n const border_top_width = parseFloat(style.borderTopWidth);\n const border_bottom_width = parseFloat(style.borderBottomWidth);\n return {\n delay,\n duration,\n easing,\n css: t => 'overflow: hidden;' +\n `opacity: ${Math.min(t * 20, 1) * opacity};` +\n `height: ${t * height}px;` +\n `padding-top: ${t * padding_top}px;` +\n `padding-bottom: ${t * padding_bottom}px;` +\n `margin-top: ${t * margin_top}px;` +\n `margin-bottom: ${t * margin_bottom}px;` +\n `border-top-width: ${t * border_top_width}px;` +\n `border-bottom-width: ${t * border_bottom_width}px;`\n };\n}\nfunction scale(node, { delay = 0, duration = 400, easing = cubicOut, start = 0, opacity = 0 } = {}) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const transform = style.transform === 'none' ? '' : style.transform;\n const sd = 1 - start;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - (sd * u)});\n\t\t\topacity: ${target_opacity - (od * u)}\n\t\t`\n };\n}\nfunction draw(node, { delay = 0, speed, duration, easing = cubicInOut } = {}) {\n let len = node.getTotalLength();\n const style = getComputedStyle(node);\n if (style.strokeLinecap !== 'butt') {\n len += parseInt(style.strokeWidth);\n }\n if (duration === undefined) {\n if (speed === undefined) {\n duration = 800;\n }\n else {\n duration = len / speed;\n }\n }\n else if (typeof duration === 'function') {\n duration = duration(len);\n }\n return {\n delay,\n duration,\n easing,\n css: (t, u) => `stroke-dasharray: ${t * len} ${u * len}`\n };\n}\nfunction crossfade(_a) {\n var { fallback } = _a, defaults = __rest(_a, [\"fallback\"]);\n const to_receive = new Map();\n const to_send = new Map();\n function crossfade(from, node, params) {\n const { delay = 0, duration = d => Math.sqrt(d) * 30, easing = cubicOut } = assign(assign({}, defaults), params);\n const to = node.getBoundingClientRect();\n const dx = from.left - to.left;\n const dy = from.top - to.top;\n const dw = from.width / to.width;\n const dh = from.height / to.height;\n const d = Math.sqrt(dx * dx + dy * dy);\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n const opacity = +style.opacity;\n return {\n delay,\n duration: is_function(duration) ? duration(d) : duration,\n easing,\n css: (t, u) => `\n\t\t\t\topacity: ${t * opacity};\n\t\t\t\ttransform-origin: top left;\n\t\t\t\ttransform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${t + (1 - t) * dh});\n\t\t\t`\n };\n }\n function transition(items, counterparts, intro) {\n return (node, params) => {\n items.set(params.key, {\n rect: node.getBoundingClientRect()\n });\n return () => {\n if (counterparts.has(params.key)) {\n const { rect } = counterparts.get(params.key);\n counterparts.delete(params.key);\n return crossfade(rect, node, params);\n }\n // if the node is disappearing altogether\n // (i.e. wasn't claimed by the other list)\n // then we need to supply an outro\n items.delete(params.key);\n return fallback && fallback(node, params, intro);\n };\n };\n }\n return [\n transition(to_send, to_receive, false),\n transition(to_receive, to_send, true)\n ];\n}\n\nexport { blur, crossfade, draw, fade, fly, scale, slide };\n","\r\n\r\n\r\n{#if setPageTitle}\r\n{title} {$headerTitle}\r\n{/if}\r\n\r\n\r\n
    \r\n\t{#if image}\r\n\t
    \r\n\t{/if}\r\n
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    {@html title} - {$alt}

    \r\n\t\t\t
    \r\n\t\t\t{#if buttons.length > 0}\r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t{#each buttons as buttom}\r\n\t\t\t\t\t{#if buttom.onClick}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{@html buttom.icon} {buttom.name}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{@html buttom.icon} {buttom.name}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t\t{/each}\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t{/if}\r\n\t\t\t\r\n\t\t
    \r\n
    \r\n\t\r\n
    \r\n\r\n","\r\n\r\n{#if info != null && info != \"\"}\r\n\t
    \r\n\t\t
    \r\n\t\t\t
    {@html icon}
    \r\n\t\t\t
    {titulo}{#if info > 1 && pluralize != false}s{/if}
    \r\n\t\t\t
    {info}
    \r\n\t\t
    \r\n\t
    \r\n{/if}\r\n\r\n","\r\n\r\n
    \r\n\t\r\n\t\t{#each caracteristicas as caracteristica}\r\n\t\t\t{#if hideItems.indexOf(caracteristica) == -1}\r\n\t\t\t\t\r\n\t\t\t{/if}\r\n\t\t{/each}\r\n\t\r\n
    \r\n\r\n","\r\n{#if !loading && realty != null}\r\n
    \r\n\t{#if realty.Promotion02 != null && realty.Promotion02.trim().length > 0}\r\n\t
    \r\n\t\t Tour Virtual\r\n\t
    \r\n\t{/if}\r\n\r\n\t{#if realty.Promotion03 != null && realty.Promotion03.trim().length > 0}\r\n\t
    \r\n\t\t Vídeo\r\n\t
    \r\n\t{/if}\r\n\r\n\t{#if realty.Promotion == 'C'}\r\n\t\r\n\t\t\"Carência\"\r\n\t\r\n\t{/if}\r\n\t\r\n\t\r\n\r\n
    \r\n{/if}","\r\n\r\n{#if loading}\r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t

    \r\n\t\t\t

    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n{:else}\r\n\t{#if type === 'card'}\r\n\t
    \r\n\t\t
    \r\n\t\t\t{#if loadingPhotos}\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t{/if}\r\n\t\t\t\r\n\t\t\t\t{#if images.length <= 1}\r\n\t\t\t\t
    \r\n\t\t\t\t\t\"{realty.Title}\"\r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t{:else}\r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t{#each images as image, i}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\"{image.Title}\"\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{/if}\r\n\t\t\t\t
    \r\n\t\t\t\t\t{#if favoritar.favorito}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t{:else }\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t{/if} \r\n\t\t\t\t
    \r\n\t\t\t\t{#if realty.DiscountPrice > 0}\r\n\t\t\t\t
    \r\n\t\t\t\t\t {realty.DiscountPricePercent}%\r\n\t\t\t\t
    \r\n\t\t\t\t{/if}\r\n\t\t\t\t
    \r\n\t\t\t\t\t{#if realty.ShowPrice}\r\n\t\t\t\t\t\t{#if realty.DiscountPrice > 0}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDe R$ {realty.FormattedDiscountPrice}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t

    Por R$ {realty.FormattedPrice}

    \r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t

    Consulte

    \r\n\t\t\t\t\t{/if}\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t{#if realty.CurrentNegotiationTypeId == atria.rent}\r\n\t\t\t\t\tAluguel\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\tComprar\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    \r\n\t\t
    \r\n\t\t\t

    \r\n\t\t\t\t{realty.CurrentRealtyTypeTitle}\r\n\t\t\t

    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t{#if realty.CurrentSpot.CurrentAddress != null && realty.CurrentSpot.CurrentAddress.length > 0}\r\n\t\t\t\t\t

    {atria.toTitleCase(realty.CurrentSpot.CurrentAddress)}

    \r\n\t\t\t\t\t{/if}\r\n\t\t\t\t\t{#if realty.CurrentSpot.Neighborhood != null && realty.CurrentSpot.Neighborhood.length > 0}\r\n\t\t\t\t\t

    {atria.toTitleCase(realty.CurrentSpot.Neighborhood)}, {atria.toTitleCase(realty.CurrentSpot.City)}

    \r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t

    {atria.toTitleCase(realty.CurrentSpot.City)}

    \r\n\t\t\t\t\t{/if}\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n\t{:else if type === 'video'}\r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\"{realty.Title}\"\r\n\t\t\t
    \r\n\t\t\t\r\n\t\t
    \r\n\t\t
    \r\n\t\t\t

    \r\n\t\t\t\t{realty.CurrentRealtyTypeTitle}\r\n\t\t\t

    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t{#if realty.CurrentSpot.CurrentAddress != null && realty.CurrentSpot.CurrentAddress.length > 0}\r\n\t\t\t\t\t

    {atria.toTitleCase(realty.CurrentSpot.CurrentAddress)}

    \r\n\t\t\t\t\t{/if}\r\n\t\t\t\t\t{#if realty.CurrentSpot.Neighborhood != null && realty.CurrentSpot.Neighborhood.length > 0}\r\n\t\t\t\t\t

    {atria.toTitleCase(realty.CurrentSpot.Neighborhood)}, {atria.toTitleCase(realty.CurrentSpot.City)}

    \r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t

    {atria.toTitleCase(realty.CurrentSpot.City)}

    \r\n\t\t\t\t\t{/if}\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n\t{:else if type === 'video-hero'}\r\n\t
    \r\n\t\t
    \r\n\t\t\t{#if !showVideo}\r\n\t\t\t{showVideo=true;}}>\r\n\t\t\t\t
    \r\n\t\t\t\t\t\"{realty.Title}\"\r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t{:else}\r\n\t\t\t\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t\t
    \r\n\t\t\t

    \r\n\t\t\t\t{realty.CurrentRealtyTypeTitle}\r\n\t\t\t

    \r\n\t\t\t
    \r\n\t\t\t\t{#if realty.CurrentSpot.CurrentAddress != null && realty.CurrentSpot.CurrentAddress.length > 0}\r\n\t\t\t\t

    {atria.toTitleCase(realty.CurrentSpot.CurrentAddress)}

    \r\n\t\t\t\t{/if}\r\n\t\t\t\t{#if realty.CurrentSpot.Neighborhood != null && realty.CurrentSpot.Neighborhood.length > 0}\r\n\t\t\t\t

    {atria.toTitleCase(realty.CurrentSpot.Neighborhood)}, {atria.toTitleCase(realty.CurrentSpot.City)}

    \r\n\t\t\t\t{:else}\r\n\t\t\t\t

    {atria.toTitleCase(realty.CurrentSpot.City)}

    \r\n\t\t\t\t{/if}\r\n\t\t\t
    \r\n\t\t\t

    {@html realty.Description}

    \r\n\t\t\tSaiba mais\r\n\t\t
    \r\n\t
    \r\n\t{/if}\r\n{/if}\r\n\r\n","\r\n\r\n
    \r\n\t{#await imoveis}\r\n\t\t\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t{:then data}\r\n\t\t\r\n\t\t
    \r\n\t\t\t{#each data.Items as imovel, i}\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t{:else}\r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Nenhum imóvel encontrado.

    \r\n\t\t\t\t
    \r\n\t\t\t{/each}\r\n\t\t
    \r\n\t\t\r\n\t\t{#if data.NumberOfPages > 1 && showPaginator}\r\n\t\t\t\r\n\t\t{/if}\r\n\t\t{#if showNextPrev}\r\n\t\t
    \r\n\t\t\t{#if currentPage > 1}\r\n\t\t\t\r\n\t\t\t{/if}\r\n\t\t\t{#if currentPage < numberOfPages}\r\n\t\t\t\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t\t{/if}\r\n\t{/await}\r\n
    \r\n\r\n","\r\n\r\n\r\n\t{$headerTitleHome}\r\n\r\n\r\n
    \r\n\t
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\"\"\r\n\t\t\t\t\"\"\r\n\t\t\t\t\"\"\r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t\r\n\t\t\t

    Experiência e inovação em gestão imobiliária,
    conte com nossos serviços especializados.

    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t{#each vitrines as vitrine}\r\n\t\t\t\t{#if vitrine.blank}\r\n\t\t\t\t
    \r\n\t\t\t\t{:else}\r\n\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t

    {vitrine.title}

    \r\n\t\t\t\t\t

    {vitrine.text}

    \r\n\t\t\t\t
    \r\n\t\t\t\t{/if}\r\n\t\t\t{/each}\r\n\t\t
    \r\n\t
    \t\r\n
    \r\n\r\n
    \r\n\t\r\n\t
    \t\r\n\t\t
    \r\n\t\t\t

    Encontre aqui o imóvel que você procura

    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    \r\n\r\n\r\n
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t

    \r\n\t\t\t\tAlugue seu imóvel com a Bona Imóveis\r\n\t\t\t

    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\"\"\r\n\t\t\t\t\t

    Referência em
    administração de
    condomínios, locação e
    vendas em Porto Alegre,
    desde 1991.

    \r\n\t\t\t\t\tCONHEÇA A BONA IMÓVEIS\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n\r\n
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t

    Para o seu condomínio

    \r\n\t\t\t\t

    Soluções em administração condominial promovendo assistência total no dia a dia do seu condomínio.

    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t

    Para o seu patrimônio

    \r\n\t\t\t\t

    Venda ou alugue o seu imóvel com todo o apoio profissional para uma negociação excelente e segura.

    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t

    Para o seu lugar

    \r\n\t\t\t\t

    Compre ou alugue o lugar ideal para você, contando com nossos especialistas, ofertas selecionadas e orientação constante.

    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t\r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Administração
    de condomínio

    \r\n\t\t\t\t\t

    Seu condomínio administrado por quem entende
    do assunto, confira os benefícios.

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\tSAIBA MAIS\r\n\t\t\t\t\t\tSOLICITE UMA PROPOSTA\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t\r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Prestação de
    contas digital

    \r\n\t\t\t\t\t

    Informações financeiras disponíveis no aplicativo
    24 horas por dia.

    \r\n\t\t\t\t\tCONHEÇA\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t\r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Soluções
    em seguros

    \r\n\t\t\t\t\t

    Mais proteção para sua casa ou o seu negócio,
    conheça as opções disponíveis.

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\tRESIDENCIAL\r\n\t\t\t\t\t\tCOMERCIAL\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Solicite uma proposta sem compromisso

    \r\n\t\t\t

    E conheça os benefícios das nossas soluções para o seu condomínio.

    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t\r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Cartão
    do síndico

    \r\n\t\t\t\t\t

    Para facilitar a operação e organizar o
    controle financeiro do seu condomínio.

    \r\n\t\t\t\t\tCONHEÇA A SOLUÇÃO\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t\r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Aplicativo Bona
    Imóveis Digital

    \r\n\t\t\t\t\t

    Utilize no seu smartphone, tablet ou computador,
    todos os serviços em um único lugar.

    \r\n\t\t\t\t\tACESSE AGORA\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t\r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Imóveis em Oferta,
    Vídeos e Tour Virtual

    \r\n\t\t\t\t\t

    Visite o imóvel para alugar ou comprar sem sair de casa,
    ou acesse o nosso catálogo completo de ofertas.

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\tPARA ALUGAR\r\n\t\t\t\t\t\tPARA COMPRAR\r\n\t\t\t\t\t\tCOM VÍDEO\r\n\t\t\t\t\t\tCOM TOUR VIRTUAL\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Como podemos ajudar?

    \r\n\t\t\t

    Selecione o que você procura, estamos prontos para auxiliar.

    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t

    @bona_imoveis nas Redes Sociais

    \r\n\t\t
    \r\n\t
    \r\n\t\r\n
    \r\n\r\n\r\n\r\n","\r\n\r\n\r\n {titlePage}\r\n\r\n\r\n
    \r\n\t
    \t\r\n\t\t\r\n\t
    \r\n
    \r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t\r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \t\r\n\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t

    A Bona Imóveis atua com excelência na venda e locação de imóveis residenciais e comerciais desde 1991. Se você é proprietário, utilize nossos serviços para vender ou alugar o seu imóvel.

    \r\n\t\t
    \r\n\t
    \r\n
    \r\n
    \r\n\t

    \r\n\t\tEnvie os dados do seu imóvel, preenchendo o formulário abaixo.\r\n\t

    \r\n\t
    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n\r\n{#if gallery != null}\r\n\t
    \r\n\t\t
      \r\n\t\t\t{#if gallery.length > 0}\r\n\t\t\t\t{#each gallery as photo, i}\r\n\t\t\t\t\t{#if i <= galleryPhotos - 1}\r\n\t\t\t\t\t\t
    • viewPhoto(i, photo)}>\r\n\t\t\t\t\t\t\t\"{photo.Title}\"/\r\n\t\t\t\t\t\t
    • \r\n\t\t\t\t\t{/if}\t\t\r\n\t\t\t\t{/each}\r\n\t\t\t{:else}\r\n\t\t\t\t
    • \r\n\t\t\t\t\t\"Foto\r\n\t\t\t\t
    • \t\t\t\r\n\t\t\t{/if}\r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n{/if}\r\n\r\n","\r\n\r\n\r\n{#if gallery != null}\r\n
      \r\n {#each gallery as photo, i}\r\n
    • viewPhoto(i, photo)}>\r\n \"{photo.Title}\"/\r\n
    • \r\n {/each}\r\n
    \r\n{/if}\r\n\r\n","\r\n\r\n{#if gallery != null}\r\n
      \r\n {#each gallery as photo, i}\r\n
    • \r\n \"{photo.Title}\"/\r\n
    • \r\n {/each}\r\n
    \r\n{/if}","\r\n\r\n
      \r\n {#each realty.RealtyFieldItems as field}\r\n
    • \r\n

      {field.Title.toLowerCase()}{#if field.Value.toLowerCase() != \"sim\" && field.Value.toLowerCase() != \"1\"}: {field.Value}{/if}

      \r\n
    • \r\n {/each}\r\n
    \r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n \r\n\r\n\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n","\r\n\r\n\r\n\t{titlePage}\r\n\r\n\r\n{#if !shareCallback}\r\n\t{#if realty === null}\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t{:else}\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t{realty.CurrentSpot.Neighborhood}, {realty.CurrentSpot.City}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t scrollTo('.imovel-infos .title')} title=\"Saiba Mais\">\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t scrollTo('.contato')} title=\"Entre em Contato\">\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{#if realty.Photos.length > 0}\r\n\t\t\t\t\t scrollTo('.imovel-photos')} title=\"Veja mais fotos\">\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t{/if}\r\n\t\t\t\t\r\n\t\t\t\t{#if favoritar.favorito}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t{/if}\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t

    {realty.CurrentRealtyTypeTitle} para {realty.CurrentNegotiationTypeTitle}

    \r\n\t\t\t\t\t\t

    {realty.CurrentSpot.CurrentAddress}, {realty.CurrentSpot.Number}, {realty.CurrentSpot.Neighborhood}, {realty.CurrentSpot.City} - {realty.CurrentSpot.CurrentStateName}

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t{@html realty.Description.replaceAll('\\r\\n','
    ').replaceAll('\\n','
    ').replaceAll('\\r','
    ')}\r\n\t\t\t\t\t\t

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t{#if realty.RealtyFieldItems.length > 0}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t

    Características

    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t{/if}\r\n\t\t\t\t\t{#if realty.Video != null && realty.Video.trim().length > 0 }\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t

    Vídeo

    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t{/if}\r\n\t\t\t\t\t{#if realty.YouTubeVideos != null && realty.YouTubeVideos.length > 0 && realty.YouTubeVideos[0].Code.trim().length > 0}\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t

    Vídeo

    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t{#if realty.Photos.length > 0}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t

    Fotos

    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t{/if}\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t{#if favoritar.favorito}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tRemover dos Favoritos \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tAdicionar aos Favoritos \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t{/if} \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t\t\t{#if realty.ShowPrice}\r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t\t{#if realty.CurrentNegotiationTypeId == $ntRent}\r\n\t\t\t\t\t\t\t\t\t\t

      Aluguel

      \r\n\t\t\t\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\t\t\t

      Valor

      \r\n\t\t\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t\t\t

      R$ {realty.FormattedPrice}

      \r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t\t{#if realty.CurrentNegotiationTypeId == $ntRent}\r\n\t\t\t\t\t\t\t\t\t\t

      Aluguel

      \r\n\t\t\t\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\t\t\t

      Valor

      \r\n\t\t\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t\t\t

      Sob Consulta

      \r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t\t{#if realty.CondominiumValue > 0}\r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t\t

      Condomínio

      \r\n\t\t\t\t\t\t\t\t\t\t

      R$ {realty.FormattedCondominiumValue}

      \r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t\t{#if realty.IPTUValue > 0}\r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t\t

      IPTU

      \r\n\t\t\t\t\t\t\t\t\t\t

      R$ {realty.FormattedIPTUValue}

      \r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t\t{#if realty.ShowPrice && realty.CurrentNegotiationTypeId == $ntRent && (realty.IPTUValue > 0 || realty.CondominiumValue > 0)}\r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t\t

      Total

      \r\n\t\t\t\t\t\t\t\t\t\t

      R$ {realty.FormattedFullPrice}

      \r\n\t\t\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t

    *As informações, taxas e valores são fornecidos pelos proprietários, e estão sujeitos a alterações, sem aviso prévio. Para confirmação, consulte nossa equipe.

    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t

    Entre em contato e saiba mais:

    \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t{#if !showRealtor || realty.RealtorId == null || realty.RealtorId.length == 0}\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t Falar via WhatsApp\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t{#if showRealtor && realty.RealtorId != null && realty.RealtorId.length > 0}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t

    Corretor

    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t{#if realty.RealtorPhoto != null && realty.RealtorPhoto.length > 0}\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t
    {realty.RealtorName}
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t Falar via WhatsApp\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Mapa

    \r\n\t\t\t\t\t

    {realty.CurrentSpot.CurrentAddress}, {realty.CurrentSpot.Number}, {realty.CurrentSpot.Neighborhood}, {realty.CurrentSpot.City} - {realty.CurrentSpot.CurrentStateName}

    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t{#if showMap}\r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t{:else}\r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\"Carregar\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t{/if}\r\n\t\t
    \r\n\t\t{#if neighbors.length > 0}\r\n\t\t\t\r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Ofertas semelhantes

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t{#each neighbors as imovel}\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t

    Nenhum imóvel encontrado.

    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t{/if}\r\n\t{/if}\r\n{/if}\r\n\r\n","\r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Descreva o seu imóvel ideal e nossa equipe especializada e qualificada irá encontrá-lo para você!

    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t

    \r\n\t\tEnvie sua solicitação pelo formulário abaixo.\r\n\t

    \r\n\t
    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n
    \r\n\t
    \r\n\t\t{#each contatos as contato}\r\n\t\t
    \r\n\t\t\t{@html contato.icon} {contato.phone}

    - {contato.title}

    \r\n\t\t
    \r\n\t\t{/each}\r\n\t
    \r\n\t
    \r\n\t

    Horário de atendimento

    \r\n\t

    {@html atendimentoSimples}

    \r\n\t
    \r\n\t

    Localização

    \r\n\t

    {@html enderecoSimples}

    \r\n\t
    \r\n\t\t{#each $comoChegar as l}\r\n\t\t\r\n\t\t{/each}\r\n\t
    \r\n
    ","\r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Para dúvidas ou maiores informações, preencha o formulário abaixo com seus dados e nossa equipe irá retornar o mais breve possível.

    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Entre em contato com a gente

    \r\n\t\t\t
    \t\r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Endereço: {@html enderecoSimples}

    \r\n\t\t\t
    \r\n\t\t\t\t{#each $comoChegar as l}\r\n\t\t\t\t\r\n\t\t\t\t{/each}\r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n\t\r\n
    \r\n\r\n","\r\n\r\n\r\n\t\r\n\t\t

    \"Zelar pelo seu patrimônio é a nossa missão\"

    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t\r\n\t

    A determinação e a forma de lidar com nossos clientes faz a nossa empresa crescer com solidez e modernização.

    \r\n\t

    Com ampla sede própria, dotada de estacionamento, demonstra que tem fundamento real e robustez, comprovando sua efetiva e eficaz atuação no ramo imobiliário.

    \r\n\t

    Desde 1991 está voltada à administração de condomínios, aluguéis e vendas, contando com uma equipe de colaboradores constantemente atualizada com cursos de aperfeiçoamento, tanto profissional como pessoal, buscando melhoria permanente na qualificação do atendimento.

    \r\n\t

    Com o passar dos anos desenvolvemos e aprimoramos um serviço inteligente de administração de condomínios. Os serviços prestados facilitam a vida dos síndicos e condôminos, agilizando a burocracia e trazendo maior tranquilidade e economia.

    \r\n\t

    A pessoalidade e a importância que dedicamos ao cliente é o que ressalta a agilidade no atendimento, seja na administração de condomínios, como nas locações ou vendas.

    \r\n\t
    \r\n\t\t\"Sede\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Missão

    \r\n\t\t\t\t\t

    Oferecer a todos os clientes o máximo de empenho profissional, objetivando alcançar a melhor qualidade de nossos serviços, com ética, eficácia e responsabilidade social.

    \r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t

    Credo

    \r\n\t\t\t\t\t

    Acreditamos que através do contínuo aprimoramento estaremos oferecendo a segurança de um trabalho bem feito e com isto garantindo sucesso e competitividade no mercado.

    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    ","\r\n\r\n\r\n\r\n\r\n
    \r\n{#if showFavoritos}\r\n\t

    Confira sua lista de imóveis favoritos.

    \r\n\t
    \r\n\t\t{#if numberOfItemsForRent > 0}\r\n\t\t

    Imóveis para alugar

    \r\n\t\t{/if}\r\n\t\t\r\n\t\t
    \r\n\t
    \r\n\t
    \r\n\t\t{#if numberOfItemsForRentExtra > 0}\r\n\t\t

    Imóveis para alugar por temporada

    \r\n\t\t{/if}\r\n\t\t\r\n\t\t
    \r\n\t
    \r\n\t
    \r\n\t\t{#if numberOfItemsForSell > 0}\r\n\t\t

    Imóveis para comprar

    \r\n\t\t{/if}\r\n\t\t\r\n\t
    \r\n{:else}\r\n\t\t

    Você não tem nenhum imóvel marcado como favorito.









    \r\n{/if}\r\n
    ","\r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Envie sua lista de imóveis selecionados para a {$textSite}.

    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    ","\r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Compartilhe sua lista de imóveis com seus amigos, utilizando o formulário.

    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    ","\r\n\r\n\r\n
    \r\n\t

    Mas fique tranquilo, deixe seu recado que retornaremos com o imóvel ideal para você! Clique aqui para entrar em contato com a nossa equipe.\r\n\t














    \r\n\t

    \r\n
    ","\r\n\r\n\r\n
    \r\n\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Quer trabalhar na Bona Imóveis? Para se inscrever em nosso banco de talentos, preencha abaixo o formulário com seus dados de contato e envie o arquivo do seu currículo.

    \r\n\t\t\t\r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t

    Nossa equipe entrará em contato, caso identifique alguma oportunidade dentro de sua área de interesse.

    \r\n\t
    \r\n\t
    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Quer trabalhar nos condomínios administrados pela Bona Imóveis? Para se inscrever em nosso banco de talentos, preencha abaixo o formulário com seus dados de contato e envie o arquivo do seu currículo.

    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t

    Nossa equipe entrará em contato, caso identifique alguma oportunidade dentro de sua área de interesse.

    \r\n\t
    \r\n\t
    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n\r\n\r\n\r\n
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Candidato à Locatário - Pessoa Fisíca

    \r\n\t\t\t\t

    Trazer documentos originais juntamente com cópias:

    \r\n\t\t\t\t
      \r\n\t\t\t\t\t
    • CPF e RG (Carteira de Identidade ou CNH)
    • \r\n\t\t\t\t\t
    • Comprovante de residência (Conta de luz, telefone, etc.)
    • \r\n\t\t\t\t\t
    • Comprovantes de rendimentos:\r\n\t\t\t\t\t\t
        \r\n\t\t\t\t\t\t\t
      • Contracheque e Carteira Profissional atualizada ou pró-labore
      • \r\n\t\t\t\t\t\t\t
      • Declaração e notificação completa do Imposto de Renda
      • \r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t
    • Obs.: A renda deverá ser de, no mínimo, três vezes o valor do aluguel mais encargos.
    • \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Candidato à Fiador - Pessoa Fisíca

    \r\n\t\t\t\t

    Trazer documentos originais juntamente com cópias:

    \r\n\t\t\t\t
      \r\n\t\t\t\t\t
    • CPF e RG (Carteira de Identidade ou CNH), se for casado(a), também da esposa(o)
    • \r\n\t\t\t\t\t
    • Comprovante de residência (Conta de luz, telefone, etc.)
    • \r\n\t\t\t\t\t
    • Comprovantes de rendimentos:\r\n\t\t\t\t\t\t
        \r\n\t\t\t\t\t\t\t
      • Contracheque e Carteira Profissional atualizada ou pró-labore
      • \r\n\t\t\t\t\t\t\t
      • Declaração e notificação completa do Imposto de Renda
      • \r\n\t\t\t\t\t\t\t
      • É necessário apresentar os 03 últimos extratos
      • \r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t
    • Obs.: A renda deverá ser de, no mínimo, três vezes o valor do aluguel mais encargos.
    • \r\n\t\t\t\t\t
    • Somente poderão candidatar-se à fiador pessoas com até 70 anos
    • \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Candidato à Locatário - Pessoa Jurídica - Empresa

    \r\n\t\t\t\t

    Trazer documentos originais juntamente com cópias:

    \r\n\t\t\t\t
      \r\n\t\t\t\t\t
    • Contrato Social e alterações e certidão especifica da Junta Comercial
    • \r\n\t\t\t\t\t
    • Último balanço
    • \r\n\t\t\t\t\t
    • Último balancete semestral
    • \r\n\t\t\t\t\t
    • Última Declaração do Imposto de Renda
    • \r\n\t\t\t\t\t
    • Cartão do CNPJ
    • \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Candidato à Locatário - Pessoa Jurídica - Sócios

    \r\n\t\t\t\t

    Trazer documentos originais juntamente com cópias:

    \r\n\t\t\t\t
      \r\n\t\t\t\t\t
    • CPF e RG (Carteira de identidade ou CNH)
    • \r\n\t\t\t\t
    \r\n\t\t\t\t

    OBS.: Independentemente da apresentação de garantias adicionais, os sócios assinarão na qualidade de fiadores, assim, será necessário CPF e RG da(o) esposa(o), caso seja casado(a).

    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Importante

    \r\n\t\t\t\t
    \r\n\t\t\t\t
      \r\n\t\t\t\t\t
    • A preferência na locação só será dada na entrega do cadastro, devidamente preenchido, assinado e com a documentação anexa
    • \r\n\t\t\t\t\t
    • Toda documentação poderá ser entregue por e-mail: {$mailDocumentacao} ou WhatsApp: {$textWhatsappDocumentacao}
    • \r\n\t\t\t\t\t
    • Caso o pretendente desista da locação, após a entrega do cadastro e documentos, será cobrada uma taxa de 20% sobre o salário mínimo, a fim de ressarcir despesas de pesquisas cadastrais
    • \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n\t

    Em caso de dúvidas, entre em contato conosco, nossa equipe está à disposição para auxiliar.

    \r\n\t\r\n\t

    \r\n\r\n
    ","\r\n\r\n \r\n
    \r\n\t

    Confira os tipos de garantias locatícias disponíveis e a o que é necessário em cada uma delas.

    \r\n\t
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    CREDPAGO

    \r\n\t\t\t\t

    Fiança locatícia por cartão de crédito de forma rápida, fácil e sem precisar de fiador. Solicite sua análise de crédito nos informando apenas o seu CPF.

    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Fiador

    \r\n\t\t\t\t
      \r\n\t\t\t\t\t
    • 1 (um) fiador com, no mínimo, duas propriedades, quitadas e livres de ônus (trazer matrículas atualizadas dos imóveis), ou
    • \r\n\t\t\t\t\t
    • 2 (dois) fiadores, cada um com um imóvel, ambos quitados e livres de ônus (trazer matrículas atualizadas dos imóveis).
    • \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Seguro Fiança

    \r\n\t\t\t\t

    A renda deverá ser de, no mínimo, três vezes o valor do aluguel mais encargos.

    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Carta Fiança

    \r\n\t\t\t\t

    Mediante análise de suas cláusulas.

    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Titulo de capitalização

    \r\n\t\t\t\t

    15 vezes o valor do aluguel mais encargos.

    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Hipoteca/Caução de bem Imóvel

    \r\n\t\t\t\t

    Esta garantia consiste no gravame hipotecário do imóvel, enquanto durar a locação, dispensando a apresentação de fiador(es). O imóvel pode ser do próprio locatário, de amigos ou parentes, podendo localizar-se em qualquer local do Brasil.

    \r\n\t\t\t\t

    Documentos Necessários:

    \r\n\t\t\t\t
      \r\n\t\t\t\t\t
    • Matrícula atualizada e certidão de ônus e reipersecutória do imóvel
    • \r\n\t\t\t\t\t
    • Cópia da Carteira de Identidade e CPF do(s) proprietário(s)
    • \r\n\t\t\t\t\t
    • Cópia do comprovante de endereço
    • \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n\t

    Em caso de dúvidas, entre em contato conosco, nossa equipe está à disposição para auxiliar.

    \r\n\t\r\n
    ","\r\n\r\n \r\n
    \r\n\t

    Para efetuar seu cadastro, preencha o formulário correspondente ao seu perfil abaixo:

    \r\n\t
    \r\n\t\r\n\t\r\n\t\r\n\t
    \r\n\t

    Em caso de dúvidas, entre em contato conosco, nossa equipe está à disposição para auxiliar.

    \r\n\t\r\n\r\n
    ","\r\n\r\n\r\n\r\n
    \r\n\t
    \r\n\t\t\r\n\t
    \t\t\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t{#each items as item, i}\r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t

    {@html item.text}

    \r\n\t\t\t
    \r\n\t\t\t{/each}\r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t

    \r\n\t\t\t\tEstamos prontos para assessorar sua escolha das melhores soluções para o seu condomínio. Venha conhecer nossa empresa ou solicite-nos uma proposta.\r\n\t\t\t

    \r\n\t\t\t
    \r\n\t\t\t\tSolicite uma proposta \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    ","\r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Estamos prontos para lhe assessorar e indicar as melhores escolhas para o seu Condomínio. Venha conhecer nossa empresa ou solicite-nos uma proposta pelo formulário abaixo.

    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    Solicite uma proposta

    \r\n\t\t\t
    \t\r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n
    ","\r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Conheça nossos diferenciais e como a Bona pode ajudar na administração da locação do seu imóvel.

    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t\r\n\t
    \r\n\t
    \r\n\t\t{#each items as item}\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t

    {item.message}

    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t{/each}\r\n\t
    \r\n\t

    Aproveite todas estas vantagens e Anuncie seu imóvel hoje mesmo.

    \r\n\t
    \r\n\t\tAnuncie seu imóvel \r\n\t
    \r\n\r\n
    ","\r\n\r\n\r\n
    \r\n\t

    O endereço abaixo não existe na {$textSite}

    \r\n\t{document.location.href}\r\n
    ","\r\n\r\n\r\n
    \r\n\t

    \r\n\t\tPessoa Física\r\n\t

    \r\n\t
    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n\r\n\r\n\r\n
    \r\n\t

    \r\n\t\tPessoa Física\r\n\t

    \r\n\t
    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n\r\n\r\n
    \r\n\t

    \r\n\t\tPessoa Jurídica\r\n\t

    \r\n\t
    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n\r\n\r\n\r\n
    \r\n\t\r\n\t

    Ganhe mais comodidade, agilidade, segurança e economia, com o Cartão do Síndico da Bona Imóveis. Trata-se de um cartão de crédito com a bandeira Visa/Itaú, sem ônus ao condomínio.

    \r\n\t

    Você que é síndico vai usufruir de inúmeras vantagens, tais como:

    \r\n\t
      \r\n\t\t
    • Fazer compras em nome do condomínio sem a necessidade de adiantamentos da administradora;
    • \r\n\t\t
    • Faturas debitadas diretamente na conta do condomínio;
    • \r\n\t\t
    • Evita o uso da conta corrente pessoal do síndico;
    • \r\n\t\t
    • Você ganha prazo e parcelamento das compras do condomínio;
    • \r\n\t\t
    • Elimina risco do transporte de valores pelo síndico e funcionários;
    • \r\n\t\t
    • Buscamos no seu condomínio através de motoboy, as notas das comprar efetuadas;
    • \r\n\t
    \r\n\t

    Em caso de dúvidas, entre em contato conosco, nossa equipe está à disposição para auxiliar.

    \r\n\t\r\n
    ","\r\n\r\n\r\n\r\n
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\t\"Parcelinha\r\n\t\t\t\r\n\t\t
    \r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\t\"Parcelinha\r\n\t\t\t\r\n\t\t
    \r\n\t
    \r\n\t

    Olá, tudo bem?

    \r\n\t

    Estamos sempre em busca de soluções que façam sentido para nossos clientes e, por isso, agora oferecemos para você essa super\r\nparceria entre Bona Imóveis e Duplex! Descubra um pouco sobre como ela pode te ajudar:

    \r\n\t

    A Duplex surgiu para que consumidores tenham mais liberdade e possibilidades de pagamento no meio condominial. A partir da\r\nsolução Duplex | Parcelinha Digital, você pode parcelar seus boletos de aluguel ou condomínio em até 12x no cartão de crédito!

    \r\n\t

    COMO FUNCIONA?

    \r\n\t

    Você simula a transação no site, pode selecionar para pagar o boleto em até 12x e usar até quatro cartões de crédito.\r\nCom essa parceria, conquistamos o cupom BONAIMOVEIS, que garante aos nossos clientes um desconto super bacana na taxa de\r\nserviço!

    \r\n\t

    Procuramos soluções financeiras com atenção às necessidades de nossos síndicos e condôminos, e por fim, encontramos este serviço de\r\nparcelamento extremamente seguro e fácil.

    \r\n\t

    \r\n\t\t

    \r\n\t\t\tQuero Fazer uma Simulação\r\n\t\t
    \r\n\t

    \r\n\t

    Não se preocupe se você não estiver com seu boleto em mãos! Solicite ajuda para nosso time de atendimento ou acesse o nosso portal\r\npara emitir a segunda via.

    \r\n\t

    Um abraço, equipe Bona Imóveis.

    \r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\t\"Parcelinha\r\n\t\t\t\r\n\t\t
    \r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\t\"Parcelinha\r\n\t\t\t\r\n\t\t
    \r\n\t
    \r\n
    ","\r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t

    Cliente Bona Imóveis conta com uma série de facilidades! Com o débito em conta você economiza tempo e dinheiro. Envie seus dados que entraremos em contato.

    \r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n\r\n
    \r\n\t

    Bancos conveniados: Banco do Brasil, Banrisul, Bradesco, Itaú e Santander.

    \r\n\t
    \r\n\t\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n\r\n\r\n\r\n
    \r\n\t

    Quem é responsável a Assessoria de Condomínios?

    \r\n\t

    Na Administração de Condomínios da Bona Imóveis, o atendimento é realizado por um assessor fixo, com plenos conhecimentos, com objetivo de facilitar as tarefas do síndico. Pode ser realizado via telefone ou e-mail.

    \r\n\t

    Para maiores informações acesse: bonaimoveis.com.br/administracao-condominios

    \r\n\t
    \r\n\t

    Questões Financeiras - Pagamento de Fornecedores

    \r\n\t

    São realizados com autorização expressa do Sindico, formalizada através de assinatura na própria nota fiscal/recibo ou mediante encaminhamento de e-mail.

    \r\n\t

    Recomendamos sempre que se houver alguma particularidade (lançamento em determinada conta, fundo de obras, por exemplo) que seja informado.

    \r\n\t
    \r\n\t

    Questões Financeiras - Ressarcimento de Despesas ao Síndico

    \r\n\t

    Se o síndico efetuar o pagamento de forma direta ao prestador de serviço, deverá encaminhar à administradora a referida nota fiscal/recibo, com os dados bancários do favorecido que deverá receber o ressarcimento.

    \r\n\t
    \r\n\t

    Questões Financeiras - Programação de Pagamentos e Ressarcimentos

    \r\n\t

    Para que haja organização interna, solicitamos a atenção quanto à programação e prazos para pagamentos:

    \r\n\t
      \r\n\t\t
    • Notas fiscais/recibos entregues até às 15:00hs na administradora, serão pagos no dia útil seguinte;
    • \r\n\t\t
    • Notas fiscais/recibos entregues até após às 15:00hs, serão pagos em 48hs.
    • \r\n\t
    \r\n\t
    \r\n\t

    Questões Financeiras - Adiantamento ao Síndico para Atender Despesas

    \r\n\t

    Com intuito de evitar que o Síndico tenha que utilizar seus recursos para atender despesas do condomínio e posterior buscar ressarcimento, dispomos da opção do Cartão de Crédito do Síndico, sem qualquer custo. Desta forma, a despesa é paga diretamente pela Bona Imóveis, devendo o Síndico apenas prestar contas da despesa através do envio da nota fiscal/recibo.

    \r\n\t

    Se por ventura não seja opção do sindico a utilização do cartão de credito, podemos conceder o adiantamento via deposito em conta, devendo ser realizado o mesmo procedimento de prestação de contas, respeitando os prazos estabelecidos na programação, acima mencionados.

    \r\n\t

    Atenção: Havendo emergência e necessidade de recurso, o Síndico poderá contatar o seus assessor e requerer o valor de forma imediata. O objetivo sempre é ajudar o Síndico.

    \r\n\t
    \r\n\t

    Questões Financeiras - Prestação de Contas Mensal e Demonstração Contábil

    \r\n\t

    Após fechamento do mês, as despesas e receitas lançadas no período são organizadas em ordem de data, sendo emitida a pasta contábil, que é entregue até o dia 15 do mês subsequente, juntamente com o extrato físico, individual para cada condômino.

    \r\n\t

    A prestação de contas pode ser acompanhada diariamente via site, através do extrato e seus lançamentos, que contém os documentos (notas fiscais/recibos) digitalizados, que facilitam a revisão e análise.

    \r\n\t
    \r\n\t

    Questões Financeiras - Controle de Vencimentos dos Serviços Obrigatórios

    \r\n\t

    Tendo em vista a responsabilidade do Síndico no controle dos vencimentos dos serviços obrigatórios no condomínio (Seguro, Limpeza de Caixa d’água, Recarga de Extintores, PPCI, LTIP etc.) a Bona Imóveis possui o cadastro de tais serviços, sendo que no momento oportuno (próximo ao vencimento), avisamos o Síndico e providenciamos orçamentos para comparação de valores, com intuito de auxiliar na renovação.

    \r\n\t
    \r\n\t

    Questões Financeiras - Cobrança de Inadimplentes

    \r\n\t

    Todo início de mês é encaminhada carta aos condôminos inadimplentes, a fim de comunicar a pendência. Em paralelo, registramos nos próximos docs. uma observação mencionando sobre o débito, solicitando o contato do mesmo. Tal observação fica aparente logo abaixo da descrição das despesas do Doc. de condominial.

    \r\n\t

    É respeitada a regra de cada condomínio, ou seja, se por ventura a cobrança judicial é feita após 90 dias de atraso, o que costuma ser na maioria dos Condomínios, é enviada a primeira carta 30 dias após o débito com o aviso, segunda carta após 60 dias, com novo aviso e a terceira carta, próximo aos 90 dias, dando prazo para pagamento de 48hs. Após esse prazo, se não houver quitação, realiza-se a cobrança judicial, com prévia autorização do Síndico.

    \r\n\t
    \r\n\t

    Dúvidas Frequentes - Qual a Função do Síndico?

    \r\n\t

    O Síndico tem a função de administrar o Condomínio de acordo com a Lei, a Convenção e o Regimento Interno. Suas atividades deverão estar de acordo com o que está previamente normatizado pelo Condomínio, com intuito de atender os anseios de todos. Do contrário, o Síndico poderá ser responsabilizado por ações tomadas e consideradas inadequadas.

    \r\n\t

    O Síndico normalmente é eleito entre um dos condôminos, mas não havendo impedimento na Convenção, poderá ser eleita uma pessoa física ou jurídica, alheia ao Condomínio. A função poderá ser remunerada ou não, sendo também estabelecida na Convenção tal regra.

    \r\n\t
    \r\n\t

    Dúvidas Frequentes - É Obrigatório Fazer o Seguro do Condomínio?

    \r\n\t

    É responsabilidade do Síndico em fazer o seguro (Art. 13 da Lei 4.591/64 e Art. 1.346 e 1.347 item IX do CC/2002). O seguro deve prevê, além da cobertura de incêndio, outros sinistros que causam destruição no total ou em parte da edificação, bem como demais itens importantes, tais como Responsabilidade Civil, danos elétricos, portões e complementares.

    \r\n\t

    Próximo a data de vencimento, a Bona Imóveis avaliará sua apólice e auxiliará na contratação correta do seu seguro, de forma que o Condomínio fique resguardado de todos os riscos.

    \r\n\t
    \r\n\t

    Dúvidas Frequentes - O Condomínio não é empresa, então porque deve ter CNPJ?

    \r\n\t

    O Condomínio não é empresa, não tem fins lucrativos, mas em vários casos, possui funcionário, bem como tem a obrigatoriedade de contratação do Seguro. Com isso, o CNPJ é exigido para cumprir diversas obrigações principais e acessórias, tais como: retenções de impostos, registro de funcionários, recolhimento de tributos e contribuições, recolhimento FGTS, INSS, PIS e IR na fonte, contribuições sindicais, declaração de ISSQN, DIRF, RAIS, E-social, Reinf, etc...

    \r\n\t

    Para inscrição do Condomínio no CNPJ, a Receita Federal exige a elaboração de um processo, anexando vários documentos, dentre eles a ata da Assembleia Geral Ordinária, mencionando que autorização de inscrição do Condomínio no CNPJ, sendo a mesma registrada. Ressalta-se ainda que a cada mudança de Síndico deve ser realizada a atualização do cadastro junto à Receita Federal, com intuito de informar quem é o novo responsável pelo Condomínio. Todo processo é elaborado pela Bona Imóveis.

    \r\n\t
    \r\n\t

    Dúvidas Frequentes - Há risco trabalhista se o condomínio não possuir funcionários, mas uma empresa terceirizada que executa as tarefas de limpeza/portaria?

    \r\n\t

    Sim, há risco. O condomínio quando contrata serviços terceirizados será sempre corresponsável pelo pagamento dos funcionários. Com isso, recomendamos sempre que monitore as frequentes trocas de colaboradores da empresa e comunique a Bona Imóveis, pois mensalmente é exigido da referida empresa, documentos dos funcionários que prestam serviços, seus registros e comprovações de pagamentos.

    \r\n\t

    Em paralelo, são exigidas negativas da empresa junto aos Órgãos fiscais de forma periódica. Tal método não exclui o risco, mas minimiza e auxilia na verificação da saúde financeira da empresa terceirizada, pois se houver problema trabalhista, saberemos de forma antecipada, auxiliando na tomada de decisão.

    \r\n\t
    \r\n\t

    Dúvidas Frequentes - Como ocorre a defesa nas ações trabalhistas?

    \r\n\t

    Na defesa de ações trabalhistas, as despesas processuais e honorários serão suportados pelo Condomínio e, portanto, devem ser acordados diretamente com o escritório jurídico contratado, escolhido a critério do Síndico ou se preferir, podemos indicar o escritório.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Funcionário no Condomínio

    \r\n\t

    O Condomínio deve manter todo e qualquer funcionário registrado, independente do período e carga horária. O não cumprimento pode acarretar ao Condomínio o pagamento de todo o período trabalhado e recolhimentos de encargos sociais com juros e correção monetária.

    \r\n\t

    O contrato de trabalho é firmado entre o Condomínio e cada um de seus empregados. Deve ser feito sempre por escrito e com o respectivo registro na Carteira Profissional do empregado. Tal registro é obrigatório por lei, devendo ser feito dentro de 48 horas, na Carteira Profissional do trabalhador, a contar do início do contrato de trabalho. É importante ressaltar, que mesmo com o Contrato de Trabalho Verbal (sem registro), gera obrigações ao empregador.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Admissão de Funcionários

    \r\n\t

    Após apresentação dos documentos solicitados pelo Departamento Pessoal da Bona Imóveis, a contratação se dá por um contrato de experiência, normalmente de 45 dias, prorrogáveis uma vez, por mais 45 dias, totalizando um contrato de 90 dias, respeitando desta forma a CLT.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Vencimento do Contrato de Experiência

    \r\n\t

    Será informado ao Síndico os vencimentos de contratos de experiência dos funcionários. Caso o Síndico resolva encerrar o contrato, esse deve avisar à Bona Imóveis, com antecedência mínima de 5 (cinco) dias antes do vencimento do contrato de experiência, ou prorrogar o contrato de experiência para que tenha tempo hábil para o processo de desligamento.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Contrato de Trabalho

    \r\n\t

    É de extrema importância cuidar a elaboração do contrato de trabalho, a fim de estabelecer as tarefas que o funcionário irá desempenhar. No caso da contratação de um zelador, é possível ajustar que, dentre suas atribuições, também esteja incluído o serviço de cuidar dos jardins do prédio, limpeza de escadas, etc., pois é possível adequar outras atribuições coerentes para função.

    \r\n\t

    As partes, empregado e Condomínio, têm liberdade para avençar as condições que regerão o contrato de trabalho, dentro dos limites legais.

    \r\n\t

    O contrato de trabalho deve ser completo e especificar, de forma clara e indiscutível, as atribuições do empregado.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Jornada de Trabalho

    \r\n\t

    A jornada de trabalho semanal, conforme estipula a Constituição Federal, é de 44 horas e que exceder será tratado como hora extraordinária.

    \r\n\t

    É obrigatório o intervalo, para descanso e refeição de, no mínimo, 1 hora diariamente.

    \r\n\t

    Nas funções em que o empregado trabalha ininterruptamente (ex. ascensorista), a jornada diária não poderá exceder a 6 horas, com o limite semanal de 36 horas. Neste caso, será obrigatório um intervalo de 15 minutos para repouso e refeição.

    \r\n\t

    Orientamos sempre, para comprovação do cumprimento da jornada de trabalho, a adoção da Folha Ponto ou Cartão Ponto, para que os funcionários não fiquem sem registrar o seu horário de trabalho.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Insalubridade, Periculosidade e Equipamentos de Segurança

    \r\n\t

    Para funcionários que trabalham na limpeza, a legislação manda fornecer Equipamentos de Proteção Individual (EPI), tais como botas de borracha, luvas, máscara e outros que sejam importantes para o desempenho seguro da atividade.

    \r\n\t

    Orientamos que ao fornecer esses equipamentos, seja emitido um recibo e coletada a assinatura do funcionário, a fim de comprovar a entrega e orientação de uso.

    \r\n\t

    Os funcionários que exercerem atividades insalubres receberão o percentual definido no PPRA (normalmente 20% s/salário mínimo).

    \r\n\t

    Atenção: Orientamos ao Sindico que fique atento e quando verificar que o funcionário não cumpriu com a norma de utilização do equipamento, avisar imediatamente seu assessor na Bona Imóveis, para que emita advertência sobre o problema.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Multa e Rescisão Contratual

    \r\n\t

    O Síndico deverá observar a data base do Acordo Coletivo de Condomínios, que é em 1º de março de cada ano, para demissões. O prazo a ser observado é 30 dias, que antecede a data base, ou seja, o aviso prévio terá que encerrar até o dia 29 de janeiro, para que o Condomínio não pague a multa de um salário nominal na rescisão do contrato. A partir de 01 de fevereiro poderá haver demissões, visto que a diferença do dissídio poderá ser paga em rescisão complementar. Exceção para o contrato de experiência, que poderá ser demitido sem o pagamento da multa, observando o prazo estipulado em contrato.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Contribuição Sindical Patronal (Devida pelo Condomínio)

    \r\n\t

    A contribuição sindical é facultativa, e poderá ser paga desde que prévia e expressamente autorizada pelo condomínio.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Seguro de Vida e Auxílio Funeral

    \r\n\t

    São obrigatórios conforme Convenção Coletiva de Trabalho (Sindef), o empregador deverá manter o seguro de vida aos seus empregados, para o caso de morte por qualquer causa e para o caso de acidente que gere invalidez permanente. O auxílio funeral deve ser pago juntamente com as verbas rescisórias no valor de duas vezes o salário normativo da função. Porém, para reduzir os custos do condomínio, acrescentamos esta cobertura no seguro de vida, sendo assim o condomínio não precisa desembolsar os dois salários normativos na rescisão de contrato.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - PCMSO

    \r\n\t

    O Programa de Controle Médico de Saúde Ocupacional não pode ser confundido com Planos de Saúde. Ele possui regras especificadas e deve obedecer um planejamento, com definição de ações e, ainda, ser objeto de um relatório anual. Projeto que visa a saúde ocupacional, realizado por um médico do trabalho.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - PPRA

    \r\n\t

    É o Programa de Prevenção de Riscos Ambientais. Projeto que visa controlar os riscos ambiente de trabalho, realizado por um médico técnico ou eng. do trabalho, que avalia e emite um Laudo indicando que está de acordo ou recomendando correções. A periodicidade é anual.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - ASO

    \r\n\t

    É o Atestado de Saúde Ocupacional. É o documento que irá definir a aptidão ou inaptidão do funcionário para exercer determinada função, este atestado é emitido pelo médico do trabalho. O ASO é feito nas seguintes situações: Admissão, Periódico, Demissão, Mudança de função e retorno ao trabalho.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - DIRF

    \r\n\t

    É a Declaração de Imposto de Renda Retido na Fonte, que objetiva informar à Receita Federal todas as retenções de impostos feitos a funcionários do Condomínio e/ou de prestadores de serviços em suas notas fiscais. O prazo de entrega da DIRF é definido pela Receita Federal, sendo no mês de Fevereiro. Em caso de não cumprimento da entrega e do prazo, a multa estipulada fica em torno de R$ 500,00.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - RAIS

    \r\n\t

    É o instrumento de coleta de dados denominado Relação Anual de Informações Sociais. Tem como objetivo o controle da atividade trabalhista no País. É obrigatória a declaração, sendo anual, tendo como prazo de entrega o mês de Março.

    \r\n\t

    Em caso de não cumprimento da entrega e do prazo, a multa é estabelecida conforme segue: O empregador que não entregar a RAIS no prazo legal ficará sujeito à multa prevista no art. 25 da Lei nº 7.998, de 1990, a ser cobrada em valores monetários a partir de R$ 425,64 (quatrocentos e vinte e cinco reais e sessenta e quatro centavos). Será acrescido o valor de R$ 106,40 (cento e seis reais e quarenta centavos) por bimestre de atraso, contados até a data de entrega da RAIS respectiva ou da lavratura do auto de infração, se este ocorrer primeiro.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Conectividade Social

    \r\n\t

    Conectividade Social é um canal obrigatório para o envio de informações ao FGTS - Fundo de Garantia do Tempo de Serviço e à Previdência Social, um canal eletrônico de relacionamento que pode ser utilizado para troca de informações relacionadas ao FGTS entre a Caixa Econômica Federal, agente operador do fundo, e as empresas, escritórios de contabilidade, sindicatos, prefeituras e outros entes, por meio de internet.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - eSocial para os Condomínios

    \r\n\t

    O e-Social é parte do sistema de escrituração digital que exigirá que todos os empregadores enviem ao Fisco, de forma unificada, ou seja, em único documento digital, todas as informações trabalhistas, previdenciárias, fundiárias e tributárias relativas aos seus trabalhadores.

    \r\n\t

    As informações serão armazenadas no ambiente nacional do e-Social, possibilitando aos órgãos participantes do sistema (Caixa Econômica Federal, INSS, Ministério do trabalho e Receita Federal) sua utilização para finalidade de suas respectivas competências.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Certificado Digital – O que é?

    \r\n\t

    Certificado Digital é uma assinatura eletrônica que identifica pessoas e empresas na Internet, garante proteção nas transações eletrônicas e em outros serviços no mundo digital, e permite que seus titulares assinem digitalmente documentos e arquivos eletrônicos de qualquer lugar com mais segurança e agilidade, impedindo assim que pessoas não autorizadas tenham acesso ás suas transações e serviços particulares.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Certificado Digital – Porque preciso utilizar?

    \r\n\t

    Desde do início de 2012, só é possível acessar o canal “Conectividade Social” da Caixa Econômica Federal via certificação digital do condomínio, ou seja, para passar dados referentes ao INSS e FGTS dos funcionários ao governo é necessário dispor de certificação digital para o condomínio. Somente com o certificado digital é possível acessar o canal “Conectividade Social”, da Caixa Econômica Federal.

    \r\n\t

    Na esfera municipal, algumas prefeituras já vincularam o acesso ao sistema das notas fiscais eletrônicas através do certificado digital.

    \r\n\t

    Muito em breve sem o certificado não será possível proceder com as escriturações das notas e emissão das guias para pagamentos do INSS.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Certificado Digital – Onde devo utilizar?

    \r\n\t

    O síndico, como representante legal do condomínio, deve zelar pela boa administração, e que as obrigações legais do condomínio sejam cumpridas.

    \r\n\t

    Para isso é essencial que o condomínio tenha a assinatura eletrônica. Segue algumas práticas com o Certificado Digital:

    \r\n\t
      \r\n\t\t
    • Liberação de processos junto a Caixa Econômica Federal (Fundo de Garantia);
    • \r\n\t\t
    • Seguro desemprego junto ao Ministério do Trabalho;
    • \r\n\t\t
    • Processos junto a Receita Federal do Brasil;
    • \r\n\t\t
    • Assinar e enviar documentos pela internet;
    • \r\n\t\t
    • Logar-se em ambientes seguros;
    • \r\n\t\t
    • Enviar as declarações do condomínio, etc.
    • \r\n\t
    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Férias dos Funcionários – Como funciona?

    \r\n\t

    As férias serão concedidas por ato do empregador nos 12 (doze) meses subsequentes à data em que o empregado tiver adquirido o direito. Desde que haja concordância do empregado, as férias poderão ser usufruídas em até três períodos, sendo que um deles não poderá ser inferior a quatorze dias corridos e os demais não poderão ser inferiores a cinco dias corridos, cada um.

    \r\n\t

    É vedado o início das férias no período de dois dias que antecede feriado ou dia de repouso semanal. Ex: Empregado que tem o descanso semanal remunerado(DSR) no domingo, suas férias poderão iniciar no máximo na quinta feira.

    \r\n\t

    As férias deverão ser pagas até 2 dias antes do inicio do respectivo período de férias.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Férias dos Funcionários – Vencimento e Aviso

    \r\n\t

    Orientamos ao Sindico que fique atento quanto ao vencimento das férias, pois nosso RH irá avisar com no mínimo três meses de antecedência do prazo máximo para o gozo.

    \r\n\t

    Também salientamos que deverão ser autorizadas as férias pelo Síndico com no mínimo 30 dias de antecedência ao inicio do gozo, pois temos que respeitar os 30 dias de aviso das férias ao funcionário.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Afastamento por Doença ou Acidente

    \r\n\t

    O auxilio doença e/ou acidente são benefícios concedidos ao empregado incapacitado por mais de 15 dias junto ao INSS.

    \r\n\t

    Atenção: Orientamos ao Síndico que de imediato comunique o RH se houver algum acidente de trabalho, pois devemos fazer a comunicação de acidente de trabalho (CAT), no dia seguinte ao acidente. Em caso de atestado normal (sem acidente), o mesmo deverá ser encaminhado de imediato para o RH.

    \r\n\t
    \r\n\t

    Orientações Sobre Funcionários - Rescisão do Contrato de Trabalho

    \r\n\t

    Os desligamentos dos funcionários deverão ser solicitados com antecedência junto ao RH. Caso o condomínio opte pelo cumprimento do aviso prévio trabalhado, deverá solicitar o mesmo com 30 dias de antecedência. Caso deseje que o funcionário seja desligado imediatamente, solicitamos que comunique o RH o mais breve possível.

    \r\n\t

    A partir da entrada em vigor da nova lei, independentemente se o aviso prévio for trabalhado ou indenizado, o prazo para homologação (entrega ao empregado de documentos que comprovem a comunicação da extinção contratual), bem como para pagamento dos valores devidos na rescisão contratual será de 10 (dez) dias contados da data do término do contrato.

    \r\n
    ","\r\n\r\n\r\n\r\n
    \r\n\t

    Com a finalidade de auxiliar na procura de profissionais qualificados na área de Sindico Profissional, relacionamos a seguir alguns empresas parceiras, especialistas na área em referência, que atuam como Síndico Profissional em condomínios geridos por nossa empresa.

    \r\n\t
    \r\n\t\t{#each items as item}\r\n\t\t
    \r\n\t\t\t{item.nome}\r\n\t\t\t{#if item.contato}\r\n\t\t\t
    Contato: {item.contato}
    \r\n\t\t\t{/if}\r\n\t\t\t{#if item.telefone}\r\n\t\t\t
    {item.telefone}
    \r\n\t\t\t{/if}\r\n\t\t\t{#if item.celular}\r\n\t\t\t
    {item.celular}
    \r\n\t\t\t{/if}\r\n\t\t\t{#if item.email}\r\n\t\t\t
    {item.email}
    \r\n\t\t\t{/if}\r\n\t\t\t{#if item.site}\r\n\t\t\t
    {item.site}
    \r\n\t\t\t{/if}\r\n\t\t
    \r\n\t\t{/each}\r\n\t
    \r\n\t

    Os profissionais destacados neste espaço possuem qualificação e desempenham trabalhos com máxima dedicação, conforme acompanhamos a satisfação de nossos clientes. É de inteira responsabilidade das partes envolvidas (contratada e contratante) eventuais negociações, onde orientamos que seja sempre realizada avaliação, negociação de valores e ajustado responsabilidades e garantias através de contrato de prestação de serviço.

    \r\n\t

    A intenção da Bona Imóveis é auxiliar aos clientes na procura de profissionais do ramo de gestão condominial, bem como expandir o leque de nossos parceiros Síndicos Profissionais na exposição de suas empresas.

    \r\n\t

    Em caso de dúvidas, entre em contato conosco, nossa equipe está à disposição para auxiliar.

    \r\n\t
    \r\n\t\tEntre em contato \r\n\t
    \r\n
    ","\r\n\r\n\r\n {titlePage}\r\n\r\n\r\n

    {titlePage}

    \r\n\r\n
    \r\n\t
    \t\r\n\t\t\r\n\t
    \r\n
    \r\n\r\n\r\n\t
    \r\n\t\t
    \r\n\t\t\t\r\n\t\t
    \r\n\t
    \r\n
    \r\n\r\n
    \r\n\t
    \r\n\t\t\r\n\t
    \r\n
    ","\r\n\r\n\r\n
    \r\n\t

    Valorizamos a sua confiança e queremos garantir que sua experiência conosco seja transparente e segura. Antes de prosseguir, convidamos você a conhecer nossa política de privacidade. Este documento detalha como coletamos, usamos e protegemos suas informações pessoais, garantindo sua privacidade e segurança em cada interação conosco. Clique no botão abaixo para acessar nossa política de privacidade e entender melhor como estamos comprometidos em proteger seus dados.

    \r\n\tAcesse aqui a Política de privacidade\r\n
    \r\n","\r\n\r\n\r\n\t
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \t\r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \t\t\t\r\n\t\t
    \r\n\t
    \r\n\t